var docHTML ;
var dateField ;
var arrayDays ;
var arrayMonth ;
var posX, posY;
var layerIDGlobal ;

// window.onload = initCalendar ;
function initCalendar() {
	if (document.captureEvents) document.captureEvents(Event.MOUSEUP) ;
	document.onmouseup = initCalendarCoordinates ;
}

function initCalendarCoordinates (e) {
	// IE4
	if (document.all) {
		posX = event.clientX ;
		posY = event.clientY ;
	}
	else {
	// Netscape und W3C compatible
		posX = parseInt(e.pageX+10) ;
		posY = parseInt(e.pageY) ;
	}
}

function showCalendar(layerID, sField) {
// Der Kalender wird aktiviert oder deaktiviert
	layerIDGlobal = layerID ;
	dateField = sField ;
	if (document.getElementById) {
	// W3C compatible
		if (document.getElementById(layerID).style.visibility == "visible") document.getElementById(layerID).style.visibility = "hidden" ;
		else {
			document.getElementById(layerID).style.visibility = "visible" ;
			document.getElementById(layerID).style.left = parseInt(posX)+10 ;
			document.getElementById(layerID).style.top = parseInt(posY);
		}
	}
	else if (document.layers) {
	// Netscape compatible
		if (document.layers[layerID].visibility == "visible" | document.layers[layerID].visibility == "show") document.layers[layerID].visibility = "hide" ;
		else {
			document.layers[layerID].visibility = "show" ;
			document.layers[layerID].left = posX ;
			document.layers[layerID].top = posY ;
		}
	}
	else if (document.all) {

	// IE4 und  IE5 compatible
		if (document.all[layerID].style.visibility == "visible") document.all[layerID].style.visibility = "hidden" ;
		else {
			document.all[layerID].style.visibility = "visible" ;
			document.all[layerID].style.left = parseInt(posX)+10 ;
			document.all[layerID].style.top = parseInt(posY) ;
		}
	}
}

function drawCalendar(cYear, cMonth) {
// Der Kalender wird gezeichnet
	var myMonth = buildCalendar(cYear, cMonth)
	var showMonth = arrayMonth[parseInt(cMonth)];
	var jetzt = new Date();
        var aktDateT = jetzt.getDate();
        var aktDateM = jetzt.getMonth() + 1;
	var aktDateJ = jetzt.getYear();
	var aktDate = aktDateT+ "."+ aktDateM + "." + aktDateJ;

        docHTML = "<table>" ;
	docHTML = docHTML + "<tr>" ;
	docHTML = docHTML + "<td class=cellTable><a class=arrowTable href='' onclick='changeCalendar(" + parseInt(cYear-1) + ", " + parseInt(cMonth) + ") ; return false ; '><<</a></td>" ;
	docHTML = docHTML + "<td class=cellTable><a class=arrowTable href='' onclick='changeCalendar(" + (cMonth==0 ? parseInt(cYear-1) : parseInt(cYear)) + ", " + (cMonth==0 ? 11 : parseInt(cMonth-1)) + ") ; return false ; '><</a></td>" ;
	docHTML = docHTML + "<td colspan=3 align=center><font class=headingText>" + showMonth + " " + cYear + "</font></td>" ;
	docHTML = docHTML + "<td class=cellTable><a class=arrowTable href='' onclick='changeCalendar(" + (cMonth==11 ? parseInt(cYear+1) : parseInt(cYear)) + ", " + (cMonth==11 ? 0 : parseInt(cMonth+1)) + ") ; return false ; '>></a></td>" ;
	docHTML = docHTML + "<td class=cellTable><a class=arrowTable href='' onclick='changeCalendar(" + parseInt(cYear+1) + ", " + parseInt(cMonth) + ") ; return false ; '>>></a></td>" ;
	docHTML = docHTML + "</tr>" ;
	docHTML = docHTML + "<tr>" ;
	for (w=0; w<7; w++) {
		docHTML = docHTML + "<td><font class=headingDays>" + myMonth[0][w] + "</font></td>" ;
	}
	docHTML = docHTML + "</tr>" ;
	for (w=1; w<7; w++) {
		docHTML = docHTML + "<tr>" ;
		for (d=0; d<7; d++) {
			docHTML = docHTML + "<td class=cellTable>" ;
			if ( !isNaN(myMonth[w][d]) ) {

				cMonth1 = cMonth + 1;
				aktDate1 = myMonth[w][d] + "."+ cMonth1 + "." + cYear;
				if (aktDate1 == aktDate) {
					docHTML = docHTML + "<a class=bodyDays href='' onclick='clickCalendar(" + myMonth[w][d] + ", " + parseInt(cMonth+1) + ", " + cYear + ") ; return false ; '><b>" + myMonth[w][d] + "</b></a>" ;
				} else {
					docHTML = docHTML + "<a class=bodyDays href='' onclick='clickCalendar(" + myMonth[w][d] + ", " + parseInt(cMonth+1) + ", " + cYear + ") ; return false ; '>" + myMonth[w][d] + "</a>" ;
				}
    
			}
			else docHTML = docHTML + "<font class=bodyDays>&nbsp;</font>" ;
			docHTML = docHTML + "</td>" ;
		}
		docHTML = docHTML + "</tr>" ;
	}

	docHTML = docHTML + "<tr>" ;
	docHTML = docHTML + "<td colspan=7 align=center nowrap><font class=headingText>" ;
	docHTML = docHTML + "Heute: <a  class=bodyDays href='' onclick='clickCalendar(" + aktDateT + ", " + aktDateM + ", " + aktDateJ + ") ; return false ; '><b>" + aktDate+ "</b></a>";
	docHTML = docHTML + "</font></td>" ;
	docHTML = docHTML + "</tr>" ;
	docHTML = docHTML + "</table>" ;
	return docHTML;
}

function buildCalendar(aYear, aMonth) {
// Diese Funktion bestimmt eine Monats-Matrix
	var tMonth = new Array() ;
	var tDate1 = new Date(aYear, aMonth, 1) ;
	var tDate28 = new Date(aYear, aMonth, 28) ;
	var tDate29 = new Date(aYear, aMonth, 29) ;
	var tDate30 = new Date(aYear, aMonth, 30) ;
	var tDate31 = new Date(aYear, aMonth, 31) ;
	var tFirstDay = tDate1.getDay() ;
	var tDays = 0 ;
	if ( tDate31.getMonth() == tDate1.getMonth() ) tDays = tDate31.getDate() ;
	else if ( tDate30.getMonth() == tDate1.getMonth() ) tDays = tDate30.getDate() ;
	else if ( tDate29.getMonth() == tDate1.getMonth() ) tDays = tDate29.getDate() ;
	else if ( tDate28.getMonth() == tDate1.getMonth() ) tDays = tDate28.getDate() ;
	var tVar = 1 ;

        tMonth[0] = arrayDays ;
	tMonth[1] = new Array(7) ;
	tMonth[2] = new Array(7) ;
	tMonth[3] = new Array(7) ;
	tMonth[4] = new Array(7) ;
	tMonth[5] = new Array(7) ;
	tMonth[6] = new Array(7) ;

        if (tFirstDay == 0) {
       		tMonth[1][6] = tVar ;
		tVar++ ;
	}
	else {
		for (d=tFirstDay-1; d<7; d++) {
			tMonth[1][d] = tVar ;
			tVar++ ;
		}
	}
	for (w=2; w<7; w++) {
		for (d=0; d<7; d++) {
			if (tVar <= tDays) {
				tMonth[w][d] = tVar ;
				tVar++ ;
			}
		}
	}
	return tMonth ;
}

function clickCalendar(sDay, sMonth, sYear) {
// Ein bestimmtes Datum wird ausgewählt
	if (sDay < 10) sDay = "0" + sDay ;
	if (sMonth < 10) sMonth = "0" + sMonth ;
	if (dateField == "von") {
		document.forms[1].jahrV.value = sYear;
		document.forms[1].monatV.value = sMonth;
		document.forms[1].tagV.value = sDay;
		if (sYear+sMonth+sDay > document.forms[1].jahrB.value+document.forms[1].monatB.value+document.forms[1].tagB.value) {
			document.forms[1].jahrB.value = sYear;
			document.forms[1].monatB.value = sMonth;
			document.forms[1].tagB.value = sDay;
		}
	} 
	if (dateField == "bis") {
		document.forms[1].jahrB.value = sYear;
		document.forms[1].monatB.value = sMonth;
		document.forms[1].tagB.value = sDay;
		if (sYear+sMonth+sDay < document.forms[1].jahrV.value+document.forms[1].monatV.value+document.forms[1].tagV.value) {
			document.forms[1].jahrV.value = sYear;
			document.forms[1].monatV.value = sMonth;
			document.forms[1].tagV.value = sDay;
		}
	}
	if (dateField == "gVon") {
		document.forms[1].jahrV.value = sYear;
		document.forms[1].monatV.value = sMonth;
		document.forms[1].tagV.value = sDay;
	} 	
	if (dateField == "wBis") {
		document.forms[1].wBis.value = sDay + "." + sMonth + "." + sYear;
		document.forms[1].wBisOpt[1].checked = true;
	}
	showCalendar(layerIDGlobal, "") ;
}

function changeCalendar(nYear, nMonth) {
// Monat oder Jahr des Kalenders werden geändert
	if (document.getElementById) {
	// W3C compatible
		drawCalendar(nYear, nMonth) ;
		document.getElementById(layerIDGlobal).innerHTML = docHTML ;
	}
	else if (document.layers) {
	// Netscape compatible
		document.layers["DatePicker"].document.open() ;
		drawCalendar(nYear, nMonth) ;
		document.write("<div class='layerBackground'>")
		document.write(docHTML) ;
		document.write("</div>")
		document.layers["DatePicker"].document.close() ;
	}
	else if (document.all) {
	// IE4 und  IE5 compatible
		drawCalendar(nYear, nMonth) ;
		document.all["DatePicker"].innerHTML = docHTML ;
	}
}

