function formatDate(mydate) {

	return	((mydate.getDate() < 10 ? '0' : '') + mydate.getDate()) + '.' +
		((mydate.getMonth() < 9 ? '0' : '') + (mydate.getMonth() + 1)) + '.' +
		mydate.getFullYear();

}

function targetExternalLinks() {

	function openExternalLink(){
		window.open(this.href);
		return false;
	}

	var links = document.getElementsByTagName('a');
	for (var i = 0; i < links.length; i++) {
		if (links[i].className.substr(0, 8) == 'external') {
			links[i].onclick = openExternalLink;
		}
	}
	
}

function makeCalLinks() {

	var i, j, d, m, a, p;
	var startdate, vardate, enddate, spans, link;

	var days = [];
	for (m = 1; m <= 12; m++) {
		days[m] = [];
	} 

	var links = document.getElementById('caltext').getElementsByTagName('li');
	for (i = 0; i < links.length; i++) {

		spans = links[i].getElementsByTagName('span');
		for (j = 0; j < spans.length; j++) {

			if (spans[j].className == 'startdate') {
				startdate = new Date(spans[j].innerHTML);
			}
			if (spans[j].className == 'enddate') {
				enddate = new Date(spans[j].innerHTML);
			}

		}

		link = links[i].getElementsByTagName('a')[0];

		vardate = startdate;

		while (vardate <= enddate) {

			m = vardate.getMonth() + 1;
			d = vardate.getDate();

			if (!days[m][d]) {
				days[m][d] = document.createElement('li');
				days[m][d].className = 'm' + m + ' d' + d;
			}

			a = document.createElement('a');
			a.setAttribute('href', link.getAttribute('href'));
			a.innerHTML = link.innerHTML;

			p = document.createElement('p');
			p.appendChild(a);
			p.appendChild(document.createElement('br'));
			p.appendChild(document.createTextNode(
				formatDate(startdate) + '-' + formatDate(enddate)));

			days[m][d].appendChild(p);

			vardate = new Date(vardate.getTime() + 1000*60*60*24);

		}

	}

	// als LI-Knoten ausgeben
	for (m = 1; m <= 12; m++) {
		for (d = 1; d <= 31; d++) {
			if (days[m][d]) {
				document.getElementById('cal').appendChild(days[m][d]);
			}
		} 
	}

	// Vorlage (caltext) entfernen
	var caltext = document.getElementById('caltext');
	caltext.parentNode.removeChild(caltext);

}

function fixMarginalia() {

	var marginalia = document.getElementById('marginalia');

	if ((screen.availHeight > 750) &&
		(marginalia.className == 'floating-marginalia')) {
		
		// funktioniert nicht im IE, was aber angesichts der FIXED-Probleme ohnehin gut ist
		marginalia.setAttribute('class', 'fixed-marginalia');
		
	}
	
}

function makeShowLink(id, html) {

	function showLink() {
		document.getElementById(id).innerHTML = html;
	}

	return showLink;
	
}

function makeMarginalia(year) {

	fixMarginalia();

	if (document.getElementById('map')) {

		var divMapLinks = document.createElement('div');
		divMapLinks.id = 'mapLinks';
		divMapLinks.className = 'marginal';

		if (document.getElementById('calnav')) {
			document.getElementById('marginalia').insertBefore(divMapLinks, document.getElementById('calnav'));
		} else {
			document.getElementById('marginalia').appendChild(divMapLinks);
		}

		var mappoints = document.getElementById('map').getElementsByTagName('li');

		for (var i = 0; i < mappoints.length; i++) {
			mappoints[i].onmouseover = makeShowLink('mapLinks', mappoints[i].innerHTML);
		}

	}
	
	if (document.getElementById('caltext')) {

		var divCal = document.createElement('div');
		divCal.id = 'cal';
		divCal.className = 'marginal cal' + year;
		
		if (document.getElementById('calnav')) {
			document.getElementById('marginalia').insertBefore(divCal, document.getElementById('calnav'));
		} else {
			document.getElementById('marginalia').appendChild(divCal);
		}
	
		var divCalLinks = document.createElement('div');
		divCalLinks.id = 'calLinks';
		divCalLinks.className = 'marginal';
		document.getElementById('marginalia').appendChild(divCalLinks);

		makeCalLinks();

		var callinks = document.getElementById('cal').getElementsByTagName('li');
	
		for (i = 0; i < callinks.length; i++) {
			callinks[i].onmouseover = makeShowLink('calLinks', callinks[i].innerHTML);
		}
	
	}

}

function windowInnerWidth() {
  if (window.innerWidth) {
    return window.innerWidth;
  } else if (document.body && document.body.offsetWidth) {
    return document.body.offsetWidth;
  } else {
    return 0;
  }
}

var numberOfFlags = 5;

function addFlags() {

	if (windowInnerWidth() < 1200)
		return;
 
	var footer = document.getElementById('footer');
 
	var x = 1185;
	
	while (x < windowInnerWidth() - 20) {
	
		numberOfFlags++;
		
		var country = Math.ceil(Math.random() * 192);
		var y = Math.ceil(Math.random() * 10) + 35;
	
		var pole = document.createElement('img');
		pole.src = 'images/flagpole.png';
		pole.setAttribute('style', 'z-index: 5; position: fixed; bottom: ' + y + 'px; left: ' + x + 'px;');
		footer.appendChild(pole);

		var flag = document.createElement('img');
		flag.id = 'flag' + numberOfFlags;
		flag.src = 'flags/' + country + '.gif';
		flag.setAttribute('style', 'z-index: 6; position: fixed; bottom: ' + (y+31) + 'px; left: ' + (x+2) + 'px;');
		footer.appendChild(flag);
		
		x += Math.ceil(Math.random() * 10) + 35;
	
	}

}

function changeFlag() {

	var pos = Math.ceil(Math.random() * numberOfFlags);
	var country = Math.ceil(Math.random() * 192);

	document.getElementById('flag' + pos).src = 'flags/' + country + '.gif';

}

function init(year) {

	targetExternalLinks();
	makeMarginalia(year);
	addFlags();

	sortables_init();

	window.setInterval(changeFlag, 1000);

}

