var now		= new Date();
var date	= now.getDate();
var month	= now.getMonth();
var year	= now.getFullYear();

function prevMonth(pm, py) {
	if (pm == 0){
		pm = 11;
		py -= 1;
	} else {
		pm -= 1;
	}
	getCalendar(pm, py);
}

function nextMonth(nm, ny) {
	if(nm == 11) {
		nm = 0;
		ny += 1;
	} else {
		nm += 1;
	}
	getCalendar(nm, ny);
}

function getCalendar(mm, yy) {
	var sevendaysaweek = 0;
	var begin = new Date(yy,mm,1);
	var firstday = begin.getDay()-1;

	if(firstday < 0) {
		firstday = 6;
	}

	dayname = new Array("Mo","Di","Mi","Do","Fr","Sa","So");
	monthname = new Array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
	dayspermonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

	if((yy%4==0) && ((yy%100!=0) || (yy%400==0))) {
		dayspermonth[1] = 29;
	}

	if ((mm != month) || (yy != year)){
		var today = '';
	} else {
		var today = date+'.';
	}

	var showcalendar = document.getElementById("calendar");

	for(var i=0; i<showcalendar.childNodes.length; i++) {
		showcalendar.removeChild(showcalendar.childNodes[i]);
	}

	var newCalTable = document.createElement('table');
	newCalTable.setAttribute('id','caltable');
	var newCalTHead = document.createElement('thead');
	var newCalTBody = document.createElement('tbody');
	var newCalRow = document.createElement('tr');
	var newCalHead = document.createElement('th');
	newCalHead.setAttribute('class','select');
	newCalHead.setAttribute('title','vorheriger');
	newCalHead.appendChild(document.createTextNode("«"));
	newCalHead.style.cursor= "pointer";
	newCalHead.onclick = function() { prevMonth(mm, yy); };
	newCalRow.appendChild(newCalHead);

	var newCalHead = document.createElement('th');
	newCalHead.setAttribute('colspan','4');
	newCalHead.colSpan = 4;
	newCalHead.appendChild(document.createTextNode(today+" "+monthname[mm]+" "+yy));
	newCalRow.appendChild(newCalHead);

	var newCalHead = document.createElement('th');
	newCalHead.setAttribute('class','select');
	newCalHead.setAttribute('title','nächster');
	newCalHead.appendChild(document.createTextNode("»"));
	newCalHead.style.cursor = "pointer";
	newCalHead.onclick = function() { nextMonth(mm, yy); };
	newCalRow.appendChild(newCalHead);
	newCalTHead.appendChild(newCalRow);

	var newCalHead = document.createElement('th');
	newCalHead.setAttribute('class','close');
	newCalHead.setAttribute('title','schließen');
	newCalHead.appendChild(document.createTextNode(""));
	newCalHead.style.cursor = "pointer";
	newCalHead.style.backgroundImage = "url(/images/calendar_close.gif)";
	newCalHead.onclick = function() { hideCalendar(); };
	newCalRow.appendChild(newCalHead);

	var newCalRow = document.createElement('tr');
	for(var i=0; i<dayname.length; i++) { //Mo. bis So.
		var newCalDayname = document.createElement('td');
		newCalDayname.setAttribute('class','days');
		newCalDayname.appendChild(document.createTextNode(dayname[i]));
		newCalRow.appendChild(newCalDayname);
	}
	newCalTBody.appendChild(newCalRow);

	var newCalRow = document.createElement('tr');
	for(var i=0; i<firstday; i++) { //Füllt die leeren Spalten vor dem Monat
		var newCalDays = document.createElement('td');
		newCalDays.appendChild(document.createTextNode(String.fromCharCode(160)));
		newCalRow.appendChild(newCalDays);
		sevendaysaweek++;
	}

	for(var i=1; i<=dayspermonth[mm]; i++) { //Tage (1-29, 30 o. 31)
		if (dayname.length == sevendaysaweek) { //Jeder Montag
			newCalTBody.appendChild(newCalRow);
			var newCalRow = document.createElement('tr');
			var newCalDays = document.createElement('td');
			var newCalDaysLink = document.createElement('a');
			newCalDaysLink.setAttribute('href','javascript:setDate('+i+', '+(mm+1)+', '+yy+')');
			newCalDaysLink.appendChild(document.createTextNode(i));
			newCalDays.appendChild(newCalDaysLink);
			newCalRow.appendChild(newCalDays);
			sevendaysaweek = 0;
		} else { //Die restlichen Tage der Woche
			var newCalDays = document.createElement('td');
			var newCalDaysLink = document.createElement('a');
			newCalDaysLink.setAttribute('href','javascript:setDate('+i+', '+(mm+1)+', '+yy+')');
			newCalDaysLink.appendChild(document.createTextNode(i));
			newCalDays.appendChild(newCalDaysLink);
			newCalRow.appendChild(newCalDays);
		}
		sevendaysaweek++;
	}

	for(var i=sevendaysaweek; i<dayname.length; i++) { //Füllt die leeren Spalten nach dem Monat
		var newCalDays = document.createElement('td');
		newCalDays.appendChild(document.createTextNode(String.fromCharCode(160)));
		newCalRow.appendChild(newCalDays);
	}
	newCalTBody.appendChild(newCalRow);
	newCalTable.appendChild(newCalTHead);
	newCalTable.appendChild(newCalTBody);
	showcalendar.appendChild(newCalTable);
}

function setDate(day, month, year) {
	if(day.toString().length < 2) {
		day = '0'+day;
	}
	if(month.toString().length < 2) {
		month = '0'+month;
	}
	document.filter.tag.value	= day;
	document.filter.monat.value	= month;
	document.filter.jahr.value	= year;
	hideCalendar();
}

function startCalendar() {
	getCalendar(month, year);
}

function showCalendar(x, y) {
	if(document.getElementById('anzeigemodus')) {
		hidediv('anzeigemodus'); //Blendet den Fieldset 'Anzeigemodus' aus, welcher ein Dropdown enthält (um IE Problem zu beseitigen).
	}
	startCalendar();
	
	// set location of calendar
	$('calendar').setStyle({ top: y + 'px', left: x + 'px' }); 
	showdiv('calendar');
}

function hideCalendar() {
	hidediv('calendar');
	if(document.getElementById('anzeigemodus')) {
		showdiv('anzeigemodus'); //Blendet den Fieldset 'Anzeigemodus' wieder ein.
	}
}

window.onload = startCalendar;