var selectedDay;
var selectedMonth;
var selectedYear;
var baseUrl;

function maxDays(mm, yyyy) {
	var mDay;

	if((mm == 3) || (mm == 5) || (mm == 8) || (mm == 10)) { 
		mDay = 30;
 	}
	else {
		mDay = 31;
		if (mm == 1) {
			if (yyyy / 4 - parseInt(yyyy / 4) != 0) {
				mDay = 28;
			} else {
				mDay = 29;
			}
		}
	}
	return mDay; 
}

function writeCalendar(dd, mm, yyyy, url) {
	mm--;

	selectedDay = dd;
	selectedMonth = mm;
	selectedYear = yyyy;

	baseUrl = url;

	var now = new Date();
	now.setFullYear(yyyy, mm, dd);
	var dow = now.getDay();

	var arrM = new Array('Jan.', 'Feb.', 'Maa.', 'Apr.', 'Mei', 'Jun.', 
		'Jul.', 'Aug.', 'Sep.', 'Okt.', 'Nov.', 'Dec.');
	var arrY = new Array();
	for (var ii = 0; ii <= 4; ii++) arrY[ii] = yyyy + ii - 2;
	var arrD = new Array('M', 'D', 'W', 'D', 'V', 'Z', 'Z');

	var text = '';
	text = '<form name=calForm style="padding:0px;margin:0px"> ';
	text += '<table cellpadding=0 cellspacing=0 border=0 class="calender_table">';

	// navigation at top
	text += '<tr>';
	text += '<td align=left class="calender_arrowback"><a href=Month- onClick="monthMove(-1);this.blur();return false;"><img src=/images/calender_arrowback.gif width=15 height=15 border=0></a></td>';
	text += '<td colspan=6 align=center class="calender_monthyear">';
	text += '<select name=selMonth style="font-size:9px;width:50px" onChange="changeCal()">';
	for (var ii = 0; ii <= 11; ii++) {
		if (ii == mm) {
			text += '<option value= ' + ii + ' selected>' + arrM[ii] + '</option>';
		} else {
		text += '<option value= ' + ii + '>' + arrM[ii] + '</option>';
		}
	}
	text += '</select><select name=selYear style="font-size:9px;width:50px" onChange="changeCal()">';
	for (var ii = 0; ii <= 4; ii++) {
		if (arrY[ii] == yyyy) {
			text += '<option value= ' + arrY[ii] + ' selected>' + arrY[ii] + '</option>';
		}
		else {		
			text += '<option value= ' + arrY[ii] + '>' + arrY[ii] + '</option>';
		}
	}
	text += '</select>';
	text += '</td>';
	text += '<td align=right class="calender_arrowforward"><a href=Month+ onClick="monthMove(1);this.blur();return false;"><img src=/images/calender_arrowforward.gif width=15 height=15 border=0></a></td>';
	text += '</tr>';

	// weekdays
	text += '<tr>';
	text += '<td class="calender_weekday">&nbsp;</td>';
	for (var ii = 0; ii <= 6; ii++) {
		//	text += '<td align=center width=35 valign=middle class="calender_weekday">' + arrD[ii] + '</td>';
		text += '<td align=center  valign=middle class="calender_weekday">' + arrD[ii] + '</td>';
	}
	text += '</tr>';

	// days grid
	aa = 0;
	for (var kk = 0; kk <= 5; kk++) {
		text += '<tr>';
		text += '<td id=tdweekday' + kk + ' class="calender_weeknumber">&nbsp;</td>';
		for (var ii = 0; ii <= 6; ii++) {
			text += '<td align=center id=td' + aa + '><a href=' + aa + ' ID=' + aa + ' class="calender_day" onClick="changeDate(this.id);this.blur();return false">1</a></td>';
			aa += 1
		}
		text += '</tr>';
	}

	text += '</tr>';
	text += '</table>';
	text += '</form>';
	document.write(text);
	changeCal();
}


function changeCal() {
	var now = new Date;
	var dd = now.getDate();
	var mm = now.getMonth();
	var dow = now.getDay();
	var yyyy = now.getFullYear();

	var currM = parseInt(document.calForm.selMonth.value);
	var prevM;
	if (currM != 0) {
		prevM = currM - 1;
	} else {
		prevM = 11;
	}
	
	var currY = parseInt(document.calForm.selYear.value);
	var mmyyyy = new Date();
	mmyyyy.setFullYear(currY, currM, 1);

	var day1 = mmyyyy.getDay();
	if (day1 == 0) day1 = 7;
	day1--;

	var arrN = new Array(41);
	var aa;

	for (var ii = 0;ii < day1; ii++) arrN[ii] = maxDays((prevM), currY) - day1 + ii + 1;

	aa = 1;
	for (var ii = day1; ii <= day1 + maxDays(currM, currY) - 1; ii++) {	
		arrN[ii] = aa;
		aa += 1;
	}
	
	aa = 1;
	for (var ii = day1 + maxDays(currM, currY); ii <= 41; ii++) {
		arrN[ii] = aa;
		aa += 1;
	}
	
	for (var ii = 0; ii <= 41; ii++) {
		document.getElementById('td' + ii).className = 'calender_day';
	}	

	var rCount = -1;
	for (var ii = 0; ii <= 41; ii++) {
		if (rCount < parseInt(ii / 7)) {
			var rDate = getDate(ii);
			var rWeek = getWeek(rDate.getFullYear(), rDate.getMonth(), rDate.getDate());
			document.getElementById('tdweekday' + (rCount+1)).innerHTML = rWeek;
		}

		if (((ii < 7) && (arrN[ii] > 20)) || ((ii > 27) && (arrN[ii] < 20))) {
			document.getElementById(ii).innerHTML = arrN[ii];
			document.getElementById(ii).style.color = '#d3d3d3';
		} else {
			document.getElementById(ii).innerHTML = arrN[ii];
			document.getElementById(ii).style.color = '';
			if ((arrN[ii] == dd) && (mm == currM) && (yyyy == currY)) {
				document.getElementById('td' + ii).className = 'calender_currentday';
			}
			if ((arrN[ii] == selectedDay) && (currM == selectedMonth) && (currY == selectedYear)) {
				if (document.getElementById('td' + ii).className = 'calender_currentday') {
					document.getElementById('td' + ii).className = 'calender_currentselectedday';
				} else {
					document.getElementById('td' + ii).className = 'calender_selectedday';
				}
			}
		}

		rCount = parseInt(ii / 7);
	}		
}

function changeDate(id){
	var clickedDate = getDate(id);
	var clickedDay = clickedDate.getDate();
	var clickedMonth = clickedDate.getMonth()+1;
	var clickedYear = clickedDate.getFullYear();

	location.href = baseUrl + ('0' + clickedDay).slice(-2) + '/' + ('0' + clickedMonth).slice(-2) + '/' + clickedYear;
}

function getDate(id) {
	var currM = parseInt(document.calForm.selMonth.value);
	var prevM;
	if (currM != 0) {
		prevM = currM - 1;
	} else {
		prevM = 11;
	}
	
	var currY = parseInt(document.calForm.selYear.value);
	var mmyyyy = new Date();
	mmyyyy.setFullYear(currY, currM, 1);

	var day1 = mmyyyy.getDay();
	if (day1 == 0) day1 = 7;
	day1--;

	var arrN = new Array(41);
	var aa;

	for (var ii = 0;ii < day1; ii++) arrN[ii] = maxDays((prevM), currY) - day1 + ii + 1;

	aa = 1;
	for (var ii = day1; ii <= day1 + maxDays(currM, currY) - 1; ii++) {	
		arrN[ii] = aa;
		aa += 1;
	}
	
	aa = 1;
	for (var ii = day1 + maxDays(currM, currY); ii <= 41; ii++) {
		arrN[ii] = aa;
		aa += 1;
	}

	if ((id < 7) && (arrN[id] > 20)) {
		currM--;
		if (currM == 0) {
			currM = 12;
			currY--;
		}
	}
	if ((id > 27) && (arrN[id] < 20)) {
		currM++;
		if (currM > 12) {
			currM = 1;
			currY++;
		}
	}

	return new Date(parseInt(currY), parseInt(currM), parseInt(arrN[id]));
}

function monthMove(dir) {
	var now = new Date;
	var minY = now.getFullYear() - 2;
	var maxY = now.getFullYear() + 2;
	var mm = parseInt(document.calForm.selMonth.value);
	var yyyy = parseInt(document.calForm.selYear.value);

	if (yyyy == minY && mm == 0 && parseInt(dir) == -1) {
	}	else {
		if (yyyy == maxY && mm == 11 && parseInt(dir) == 1) {
		} else {
			mm = mm + parseInt(dir);
			if (mm == -1) {
				mm=11;
				yyyy = yyyy - 1;
				document.calForm.selYear.value = yyyy;
			}
			if (mm == 12) {
				mm = 0;
				yyyy = yyyy + 1;
				document.calForm.selYear.value = yyyy;
			}
			document.calForm.selMonth.value = mm;
			changeCal();
		}
	}
}

function getWeek(year, month, day){
	//lets calc weeknumber the cruel and hard way :D
	//Find JulianDay 
	month += 1; //use 1-12
	var a = Math.floor((14 - (month)) / 12);
	var y = year + 4800 - a;
	var m = (month) + (12 * a) - 3;
	var jd = day + Math.floor(((153 * m) + 2) / 5) + 
	             (365 * y) + Math.floor(y / 4) - Math.floor(y / 100) + 
	             Math.floor(y / 400) - 32045;      // (gregorian calendar)
	
	//now calc weeknumber according to JD
	var d4 = (jd + 31741 - (jd % 7)) % 146097 % 36524 % 1461;
	var L = Math.floor(d4 / 1460);
	var d1 = ((d4 - L) % 365) + L;
	NumberOfWeek = Math.floor(d1 / 7) + 1;
	return NumberOfWeek;        
}