

function valInt(i) {
	i = parseInt(i, 10);
	return (isNaN(i) ? 0 : i);
}

function valForm(s) {
	var i = 0;
	var v = '';
	while ((document.forms[i].length > i) && (document.forms[i].elements[s] == null)) i++;
	if (document.forms[i].elements[s] != null) v = document.forms[i].elements[s].value;
	return v;
}

function valDate(s) {
	var tmp = s.split(".");
	var n = new Date();
	var n = new Date(n.getFullYear(), n.getMonth(), n.getDate());
	if (tmp.length == 3) {
		if (tmp[2].length == 2) tmp[2] = "20"+tmp[2]; // 21st Century Only
		n = new Date(valInt(tmp[2]), valInt(tmp[1]-1), valInt(tmp[0]));
	}
	return n;
}

function Kalender(t) {
	var n = t;
	var xpos = n.offsetLeft;
	while ((n=n.offsetParent) != null) { xpos += n.offsetLeft; }
	var n = t;
	var ypos = n.offsetTop;
	while ((n=n.offsetParent) != null) { ypos += n.offsetTop; }
	Kalender_Zu();
	var my_div = document.createElement('DIV');
	my_div.setAttribute("id", "kalender");
	my_div.style.position = 'absolute';
	my_div.style.left = xpos+"px";
	my_div.style.top = ypos+"px";
	t.parentNode.appendChild(my_div);
	var now = new Date();
	var ov = '0';
	var ab = '';
	if (arguments.length > 1) {
		var ab = valForm(arguments[1]);
		now = valDate(ab);
		if (arguments.length > 2) {
			ov = valForm(arguments[2]);
			if (ov != '') now = valDate(ov);
		}
	}
	var my_year = now.getFullYear();
	var my_month = now.getMonth()+1;
	return Kalender_Zeichne(my_month, my_year, ab, ov);
	return false;
}
function Kalender_Zeichne(m, y, ab, ov) {
	var monate = new Array("Januar","Februar","M&auml;rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
	var now = new Date();
	var year = now.getFullYear();
	var month = now.getMonth()+1;
	var day = now.getDate();
	var now = new Date(year, month-1, day);
	var draw = new Date(y, m-1, 1);
	var draw_year = draw.getFullYear();
	var draw_month = draw.getMonth()+1;
	var draw_day = draw.getDate();
	var draw_weekday = draw.getDay();
	var ovv = ov;
	if (ovv == '') {
		ovv = ab;
	}
	if (ovv == '0') {
		ovv = '';
	}
	var ab_date = valDate(ab);
	var ov_date = valDate(ovv);

	var draw_lastday = 31;
	if (draw_month == 2) {
		draw_lastday = 28;
		if (((draw_year%4 == 0) && (draw_year%100 != 0)) || (draw_year%400 == 0)) draw_lastday = 29;
	}
	if ((draw_month == 4) || (draw_month == 6) || (draw_month == 9) || (draw_month == 11)) draw_lastday = 30;
	var last_month = (draw_month-1)+","+draw_year+",'"+ab+"','"+ov+"'";
	if ((draw_month-1) < 1) var last_month = "12,"+(draw_year-1)+",'"+ab+"','"+ov+"'";
	var next_month = (draw_month+1)+","+draw_year+",'"+ab+"','"+ov+"'";
	if ((draw_month+1) > 12) var next_month = "1,"+(draw_year+1)+",'"+ab+"','"+ov+"'";
	var my_div = document.getElementById("kalender");
	if (my_div) {
		var cobj = "";
		cobj += '<!--[if lt IE 7]><iframe frameborder="0" id="kal_place" src="" scroll="none"></iframe><![endif]-->';
		cobj += '<div id="kal_setup"><table class="month" summary=""><tr><td><a href="#" class="last" onclick="return Kalender_Zeichne('+last_month+');"><b><</b></a></td><td class="month">'+monate[draw.getMonth()]+' '+draw.getFullYear()+'</td><td><a href="#" class="next" onclick="return Kalender_Zeichne('+next_month+');"><b>></b></a></td></tr></table>';
		cobj += '<table class="days" summary=""><tr><th>Mo</th><th>Di</th><th>Mi</th><th>Do</th><th>Fr</th><th>Sa</th><th>So</th></tr>';
		var dw = 0; var dz = 0;	var dm = 1;
		while (dz < 42) {
			if (dw == 0) cobj += '<tr>';
			cobj += '<td'+(dw<5 ? '' : ' class="we kalender"')+'>'
			if (((dz+1) < draw_weekday) || (dm > draw_lastday)) cobj += ' ';
			else {
				var tmp = new Date(draw_year, draw_month-1, dm);
				if ((ovv == '') && (ab_date.valueOf() == tmp.valueOf())) cobj += '<a href="#" onclick="return Kalender_Wert(\''+(dm<10 ? ('0'+dm) : dm)+'.'+(draw_month<10 ? ('0'+draw_month) : draw_month)+'.'+draw_year+'\');"><span class="cur">'+dm+'</span></a>'; // '<a href="#"><span class="cur">'+dm+'</span></a>';
				else if ((ovv != '') && (ov_date.valueOf() == tmp.valueOf())) cobj += '<a href="#" onclick="return Kalender_Wert(\''+(dm<10 ? ('0'+dm) : dm)+'.'+(draw_month<10 ? ('0'+draw_month) : draw_month)+'.'+draw_year+'\');"><span class="cur">'+dm+'</span></a>'; // '<a href="#"><span class="cur">'+dm+'</span></a>';
				else if ((ov == '0') && ((now.valueOf() > tmp.valueOf()) || (ov_date.valueOf() > tmp.valueOf()))) cobj += dm;
				else if (((ab == '') && (ov == '0')) && ((now.valueOf() > tmp.valueOf()) || (ov_date.valueOf() > tmp.valueOf()))) cobj += dm;
				else if (((ab == '') && (ov == '')) && ((now.valueOf() > tmp.valueOf()) || (ov_date.valueOf() > tmp.valueOf()))) cobj += dm;
				else if ((ovv != '') && ((now.valueOf() > tmp.valueOf()) || (ab_date.valueOf() > tmp.valueOf()))) cobj += dm;
				else if (now.valueOf() <= tmp.valueOf()) cobj += '<a href="#" onclick="return Kalender_Wert(\''+(dm<10 ? ('0'+dm) : dm)+'.'+(draw_month<10 ? ('0'+draw_month) : draw_month)+'.'+draw_year+'\');">'+dm+'</a>';
				dm++;
			}
			cobj += '</td>';
			dw = (dw+1)%7;
			if (dw == 0) cobj += '</tr>';
			dz++;
		}
		cobj += '</table><p class="right"><a class="close" href="#" onclick="return Kalender_Zu();"><b>x</b></a></p></div>';
		my_div.innerHTML = cobj;
	}
	return false;
}
function Kalender_Wert(n) {
	var my_div = document.getElementById("kalender");
	var x = my_div;
	var look = true;
	while (look) {
		if (x.tagName == "INPUT") look = false;
		else {
			if (x.previousSibling != null) x = x.previousSibling;
			else if (x.parentNode.previousSibling != null) x = x.parentNode.previousSibling;
			else if ((x.previousSibling == null) && (x.parentNode.previousSibling == null))	x = x.parentNode.parentNode.previousSibling;
			if (x.hasChildNodes()) x = x.lastChild;
			if (x == null) look = false;
		}
	}
	if (x.tagName == "INPUT") x.value = n;
	return Kalender_Zu();
}

function Kalender_Zu() {
	var my_div = document.getElementById("kalender");
	if (my_div) {
		my_div.style.backgroundColor = 'transparent';
		my_div.innerHTML = ' ';
		my_div.parentNode.removeChild(my_div);
	}
	return false;
}

