/*
 * Calendar
 */
function showCalendar(elem) {
	//var dest	= document.getElementsByName(elem)[0];
	var dest	= document.getElementById(elem);
	var posX	= dest.offsetLeft;
	var posY	= dest.offsetTop+dest.offsetHeight;
	var parent	= dest;

	if (dest.disabled == true) {
		return;
	}

	while (parent.offsetParent) {
    	parent	= parent.offsetParent;
		posX	+= parent.offsetLeft;
	    posY	+= parent.offsetTop;
	}
	printCalendar(dest, posX, posY);
}

function hideCalendar() {
	if (document.getElementById("popUpCalendar")) {
		document.getElementById("popUpCalendar").style.visibility = "hidden";
	}
}

function printCalendar(formElem, x, y) {
	if (!document.getElementById("popUpCalendar")) {
		var newNode = document.createElement("div");
		newNode.setAttribute("id", "popUpCalendar");
		newNode.setAttribute("style", "z-index: 10000");
		newNode.setAttribute("style", "background: #fff");
		document.body.appendChild(newNode);
	}

	var cDiv = document.getElementById("popUpCalendar");
	cDiv.style.position		= "absolute";
	cDiv.style.left			= x + "px";
	cDiv.style.top			= y + "px";
	cDiv.style.visibility	= "visible";
  	fillCalendar(getFormElemDate(formElem.value), formElem.id);
	document.onclick = handleCloseCalendar;
}

function handleCloseCalendar() {
	document.onclick = hideCalendar;
}

function fillCalendar(shownDate, formElemId) {
	var d			= shownDate.getDate();
	var j			= shownDate.getFullYear();
	var m			= shownDate.getMonth();
	var aMonat		= new Date( j, m, 1);
	var aktuell		= new Date();

	var	htmlContent;

	var monate		= new Array("Januar","Februar","M&auml;rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
	var startTag	= aMonat.getDay();
	var endTag		= 31;
	if(m==3 || m==5 || m==8 || m==10 )	{ --endTag; }
	if(m==1) {
		endTag = endTag - 3;
		if(j%4==0)		{ endTag++; }
		if(j%100==0)	{ endTag--; }
		if(j%400==0)	{ endTag++; }
	}

	var startCol	= (startTag == 0) ? 6 : startTag-1;

	htmlContent =	"<table>";
	htmlContent +=	"<tr>";
	htmlContent +=	'<td class=ctr onClick=\'prevMonth('+j+','+m+',"'+formElemId+'");\' >-';
	htmlContent +=	"<td class=ctr colspan=5>"+monate[m]+"&nbsp;"+j;
	htmlContent +=	'<td class=ctr onClick=\'nextMonth('+j+','+m+',"'+formElemId+'");\'>+';
	htmlContent +=	"<tr><th>M<th>D<th>M<th>D<th>F<th>S<th>S";
	htmlContent +=	"<tr>";
	for(var q = 0; q < startCol; q++) {
		htmlContent +='<td class=blank>&nbsp;';
	}

	for(var q = 1; q <= endTag; q++) {
		var click = 'insertDate("'+formElemId+'", "'+q+'.'+(m+1)+'.'+j+'")';
		if(startCol > 6) {
			startCol = 0;
			htmlContent +="<tr>";
		}
		aMonat.setDate(q);
		htmlContent +="<td"+(aktuell.getDate() == aMonat.getDate() && aktuell.getMonth() == aMonat.getMonth() && aktuell.getYear() == aMonat.getYear() ? " class=today" : (d == q) ? " class=actual" : "")+" onClick='"+click+"'>"+q;
		startCol++;
	}
	for(var q = startCol; q < 7; q++) {
		htmlContent +='<td class=blank>&nbsp;';
	}

	htmlContent +="</table>";
	document.getElementById("popUpCalendar").innerHTML = htmlContent;
}

function nextMonth(j, m, formElemId) {
	m++;
	if(m > 11) {
		m = 0;
		j++;
	}
	fillCalendar(new Date(j, m, 1), formElemId);
	if(window.event) {
		window.event.cancelBubble = true;
	}
}

function prevMonth(j, m, formElemId) {
	m--;
	if(m < 0) {
		m = 11;
		j--;
	}
	fillCalendar(new Date(j, m, 1), formElemId);
	if(window.event) {
		window.event.cancelBubble = true;
	}
}

function insertDate(formElemId, dateString) {
	//document.getElementsByName(formElemId)[0].value = dateString;
	document.getElementById(formElemId).value = dateString;
	if(window.event) {
		window.event.cancelBubble = true;
	}
	hideCalendar();
}

function getFormElemDate(dateString) {
  var dateVal;
  var dateArray;
  var d, m, y;

	try {
		dateArray = parseDateString(dateString);
		if (dateArray) {
			d = parseInt(dateArray[0],10);
			m = parseInt(dateArray[1],10)-1;
			y = parseInt(dateArray[2],10);
			dateVal = new Date(y, m, d);
		}
		else {
			dateVal = new Date();
		}
	}
	catch(e) {
		dateVal = new Date();
	}
	return dateVal;
}

function parseDateString(dateString) {
	if(dateString.indexOf(".") >= 0) {
		d = dateString.split(".");
		if(d.length = 3) {
			return d;
		}
	}
   	return false;
}
