var KalenderInput, KalenderTable, KalenderCell, KalenderTimer, KalenderSelDate, KalenderFirstDate, KalenderLastDate, KalenderReturnFunction;

function KalenderGo(object, firstDate, lastDate){
	KalenderFirstDate=KalenderText2Date(firstDate);
	KalenderLastDate=KalenderText2Date(lastDate);
	KalenderSelDate=KalenderText2Date(object.value); if(!KalenderSelDate) KalenderSelDate=new Date();
	if(document.getElementById('KalenderTable')) document.body.removeChild(document.getElementById('KalenderTable'));
	KalenderInput=object;
	KalenderInput.onblur=new Function("KalenderHide(1);");
	KalenderTable=document.body.appendChild(document.createElement('table'))
	KalenderTable.id='KalenderTable';
	KalenderTable.style.left=GetAbsLeft(object);
	KalenderTable.style.top=(GetAbsTop(object) + object.offsetHeight);
	KalenderShow();
}

function KalenderShow(selectedYear, selectedMonth){
	KalenderHide(60);
	KalenderBody = KalenderTable.appendChild(document.createElement('tbody'));
	currentDate=new Date();
	if(isNaN(selectedYear)) selectedYear=KalenderSelDate.getYear() % 1900 + 1900;
	if(isNaN(selectedMonth)) selectedMonth=KalenderSelDate.getMonth();
	startOfMonth = new Date(selectedYear, selectedMonth, 1);
	startOfSelection =  - (startOfMonth.getDay() + 5) % 7;
	selectedYear = startOfMonth.getYear() % 1900 + 1900;
	selectedMonth = startOfMonth.getMonth();
	weekday = new Array('Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag');

	KalenderBody.appendChild(document.createElement('tr'));
	KalenderCell=KalenderBody.lastChild.appendChild(document.createElement('td'));
	KalenderCell.title='r\u00fcckw\u00e4rts';
	KalenderCell.className='topic';
	KalenderCell.onclick=new Function("KalenderHide(); KalenderShow("+selectedYear+","+(selectedMonth-1)+");");
	KalenderCell.appendChild(document.createTextNode('<<'));
	KalenderCell=KalenderBody.lastChild.appendChild(document.createElement('th'));
	KalenderCell.className='topic';
	KalenderCell.onclick = new Function("KalenderHide(); KalenderShow(prompt(\"Jahr\", currentDate.getYear() % 1900 + 1900), currentDate.getMonth());");
	KalenderCell.colSpan = 4;
	KalenderCell.appendChild(document.createTextNode(String(((selectedMonth < 9) ? '0' : '') + String(selectedMonth + 1))+" / "+selectedYear));
	KalenderCell = KalenderBody.lastChild.appendChild(document.createElement('td'));
	KalenderCell.title = 'vorw\u00e4rts';
	KalenderCell.className='topic';
	KalenderCell.onclick = new Function("KalenderHide(); KalenderShow(" + selectedYear + ", " + (selectedMonth + 1) + ");");
	KalenderCell.appendChild(document.createTextNode('>>'));
	KalenderCell = KalenderBody.lastChild.appendChild(document.createElement('td'));
	KalenderCell.title = 'schlie\u00dfen';
	KalenderCell.className='topic';
	KalenderCell.onclick = new Function("KalenderHide();");
	KalenderCell.appendChild(document.createTextNode('X'));

	KalenderBody.appendChild(document.createElement('tr'));
	KalenderCell = KalenderBody.lastChild.appendChild(document.createElement('td')); KalenderCell.appendChild(document.createTextNode('Mo')); KalenderCell.className="headMoFr";
	KalenderCell = KalenderBody.lastChild.appendChild(document.createElement('td')); KalenderCell.appendChild(document.createTextNode('Di')); KalenderCell.className="headMoFr";
	KalenderCell = KalenderBody.lastChild.appendChild(document.createElement('td')); KalenderCell.appendChild(document.createTextNode('Mi')); KalenderCell.className="headMoFr";
	KalenderCell = KalenderBody.lastChild.appendChild(document.createElement('td')); KalenderCell.appendChild(document.createTextNode('Do')); KalenderCell.className="headMoFr";
	KalenderCell = KalenderBody.lastChild.appendChild(document.createElement('td')); KalenderCell.appendChild(document.createTextNode('Fr')); KalenderCell.className="headMoFr";
	KalenderCell = KalenderBody.lastChild.appendChild(document.createElement('td')); KalenderCell.appendChild(document.createTextNode('Sa')); KalenderCell.className="headSa";
	KalenderCell = KalenderBody.lastChild.appendChild(document.createElement('td')); KalenderCell.appendChild(document.createTextNode('So')); KalenderCell.className="headSo";

	for(selectedDay = startOfSelection; selectedDay < startOfSelection + 42; selectedDay++) {
		if((selectedDay - startOfSelection) % 7==0) KalenderBody.appendChild(document.createElement('tr'));
		KalenderCell=KalenderBody.lastChild.appendChild(document.createElement('td'));
		selectedDate=new Date(selectedYear, selectedMonth, selectedDay);
		if(selectedDate.getMonth()==selectedMonth){
			if(selectedDate.getDay()>5) KalenderCell.className='Sa';
			if(selectedDate.getDay()<1) KalenderCell.className='So';
			if(selectedDate.getYear()==KalenderSelDate.getYear() && selectedMonth==KalenderSelDate.getMonth() && selectedDay==KalenderSelDate.getDate()) KalenderCell.className='current';

			if(selectedDate >= KalenderFirstDate && selectedDate <= KalenderLastDate){
 				KalenderCell.title = weekday[selectedDate.getDay()] + ', ' + KalenderDate2Text(selectedDate);
				KalenderCell.onmouseover=new Function("this.id='hover';");
				KalenderCell.onmouseout=new Function("this.id='';");
				KalenderCell.onclick=new Function("KalenderHide();KalenderReturnDate('"+KalenderDate2Text(selectedDate)+"');");
			}else
				KalenderCell.className+=' invalid';
			KalenderCell.appendChild(document.createTextNode(selectedDate.getDate()));
		}else
			KalenderCell.appendChild(document.createTextNode(""));
	}
}

function KalenderHide(delay){
	if(KalenderTimer) window.clearTimeout(KalenderTimer);
	if(isNaN(delay)) KalenderTable.removeChild(KalenderBody); else KalenderTimer=window.setTimeout("KalenderTable.removeChild(KalenderBody);", delay *1000);
}

function KalenderText2Date(s){
	if(s){ var t=s.split("."); if(t.length==3) return new Date(t[2]<100?2000+Math.floor(t[2]):t[2],t[1]-1,t[0]); }
}

function KalenderReturnDate(date){
	KalenderInput.value=date;
	if(KalenderReturnFunction) KalenderReturnFunction();
}

function KalenderDate2Text(date) {
	if(date) return ((date.getDate() <= 9) ? '0' : '') + String(date.getDate())+'.'+((date.getMonth() < 9) ? '0' : '') + String(date.getMonth() + 1)+'.'+String(date.getYear() % 1900 + 1900);
} 
