isDefined = function(variable){ 
	return this[variable] === undefined ? false : true;
};

var cal_dx = 2;
var cal_dy = 0; //-4;
var showCalendar = 0;
var activeForm = null;

/*
if (!isDefined("_input_backgroundcolor")) {
	var _input_backgroundcolor = "#CCCCCC";
}
*/

if (!isDefined("executionFlag")) {
	var executionFlag = false;
}

document.write('<div id=\"sublayer\" style=\"width:130px; visibility: hidden; position:absolute; left:0px; top:0px"><iframe id="subiframe" border=0 frameborder=0 framespacing=0 scrolling=no width=130 height=130></iframe></div><div id=\"cal\" onclick=\"showCalendar = -1;\" name=\"cal\" class=\"IBE_calendar_border\" style=\"width:130px; visibility: hidden; position:absolute; left:0px; top:0px"></div>');

function parseDate(dateStr) {
	var inputLocale = dateStr.search(/\//) == -1 ? "de" : "en";
	dateStr = dateStr.replace(/[,\/]/g,".");
	var blocks = dateStr.split(".");
	
	if (dateStr.search(/^\d{1,2}\.\d{1,2}\.?$/) != -1) {
		// day+month or month+day
		var today = new Date();
		var d = parseInt(blocks[inputLocale == "de" ? 0 : 1],10);
		var m = parseInt(blocks[inputLocale == "de" ? 1 : 0],10);
		var y = today.getFullYear();
	} else if (dateStr.search(/^\d{1,2}\.\d{1,2}\.\d{2,4}?$/) != -1) {
		// day+month+year or month+day+year
		var d = parseInt(blocks[inputLocale == "de" ? 0 : 1],10);
		var m = parseInt(blocks[inputLocale == "de" ? 1 : 0],10);
		var y = parseInt(blocks[2],10);
	} else if (dateStr.search(/^\d{1,2}\.\d{4}?$/) != -1) {
		// month+year
		var d = 1;
		var m = parseInt(blocks[0],10);
		var y = parseInt(blocks[1],10);
	} else if (dateStr.search(/^\d{4}?$/) != -1) {
		// month+year
		var d = 1;
		var m = 1;
		var y = dateStr;
	}
	return new Date(y,m - 1,d,0,0,0);
}

function makeCalendar(fromDateStr,form,setArrival,positionRef,birthdayMode,locale) {
	if (locale == "en") {
		var monthname = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
		var dayname = new Array ('Mo','Tu','We','Th','Fr','Sa','Su','Mo','Tu','We','Th','Fr','Sa','Su');		
	} else {
		var monthname = new Array('Januar','Februar','M&auml;rz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
		var dayname = new Array ('Mo','Di','Mi','Do','Fr','Sa','So','Mo','Di','Mi','Do','Fr','Sa','So');
	}
	
	var monthLength = new Array (32,29,32,31,32,31,32,32,31,32,31,32);
	var daynumber = new Array('1','2','3','4','5','6','0','1','2','3','4','5','6');

	var today = new Date();
	var monthnow = today.getMonth();
	
	var fromDate = parseDate(fromDateStr);

	if (fromDate == "Invalid Date" || isNaN(fromDate) || ((fromDate.getFullYear() < today.getFullYear()) && !birthdayMode) || ((fromDate.getFullYear() > today.getFullYear()) && birthdayMode)) {
		fromDate = today;
	}
	
	var d = fromDate.getDate();
	var m = fromDate.getMonth();
	var y = fromDate.getFullYear();


	if (m == 1) {
	    days = 28;
	    if (y % 4 == 0)
	      days++;
	    if (y % 100 == 0)
	      days--;
	    if (y % 400 == 0)
	      days++;
		monthLength[1] = days + 1;
	}
	
	var selectedDate = parseDate(document.getElementById(form).value);

	var data = '<table border="0" cellspacing="0" cellpadding="1" width="100%" class="IBE_text_tiny IBE_calendar_bg">';
	if (birthdayMode) {
		data += '<tr><td align="right">';
		if(y > 1900){
			data += '<a class="IBE_calendar_titlelink" href="?" onClick="showCalendar = -1; makeCalendar(\'' + makeDate(1,m,y - 1) + '\',\'' + form + '\',\'' + setArrival + '\',\'' + positionRef + '\',true,\'' + locale + '\'); return false">&nbsp;&#171;&nbsp;</a>';
		}else{
			data += '&nbsp;';
		}
		data += '</td><td colspan="5" align="center">' + y + '</td><td>';
		if(y < today.getFullYear()){
			data += '<a class="IBE_calendar_titlelink" href="?" onClick="showCalendar = -1; makeCalendar(\'' + makeDate(1,m,y + 1) + '\',\'' + form + '\',\'' + setArrival + '\',\'' + positionRef + '\',true,\'' + locale + '\'); return false">&nbsp;&#187;&nbsp;</a>';
		}else{
			data += '&nbsp;';
		}
		data += '</td></tr>';
	}
	data += '<tr><td align="right" >';
	if ((birthdayMode && (y > 1900)) || (!birthdayMode && (monthnow != m))){
		data += '<a class="IBE_calendar_titlelink" href="?" onClick="showCalendar = -1; makeCalendar(\'' + makeDate(1,m - 1,y) + '\',\'' + form + '\',\'' + setArrival + '\',\'' + positionRef + '\',' + birthdayMode + ',\'' + locale + '\'); return false">&nbsp;&#171;&nbsp;</a>';
	}else{
		data += '&nbsp;';
	}
	data += '</td><td colspan="5" align="center">' + monthname[m] + ' ' + y + '</td><td>';
	if ((birthdayMode && today.getTime() > fromDate.getTime()) || (!birthdayMode && monthnow != m + 1)){
		data += '<a class="IBE_calendar_titlelink" href="?" onClick="showCalendar = -1; makeCalendar(\'' + makeDate(1,m + 1,y) + '\',\'' + form + '\',\'' + setArrival + '\',\'' + positionRef + '\',' + birthdayMode + ',\'' + locale + '\'); return false">&nbsp;&#187;&nbsp;</a>';
	}else{
		data += '&nbsp;';
	}
	data += '</td></tr>';
	data += '<tr>';
	var i = 1;
	for(var wt = 0;wt < 7;wt++){
		data += '<td align="center" class="IBE_calendar_border" style="border-right:none';
		if(wt == 0){
			data += '; border-left:none';
		}
		data += '">' + dayname[wt] + '</td>';
	}
	data += '</tr>';
	for(var zeile = 0;zeile < 6; zeile++){
		data += '<tr>';
		for(var wt = 0;wt < 7;wt++){
			if(i<10){linedate = m+1+'/0'+i+'/'+y;}
			if(i>9){linedate = m+1+'/'+i+'/'+y;}
			if(i>monthLength[m]-1){linedate = '';}
			var dateobj = new Date(linedate);
			if(dateobj.getDay() == daynumber[wt]){
				if(selectedDate.getDate() == dateobj.getDate() && selectedDate.getMonth() == dateobj.getMonth()){
					var strClass = 'IBE_calendar_day_selected';
				}else{
					var strClass = 'IBE_calendar_day';
				}
				data += '<td align="center" class="' + strClass + '">';
				
				if(!birthdayMode && (today.getTime() > dateobj.getTime()) || birthdayMode && (today.getTime() < dateobj.getTime())){
					data += dateobj.getDate();
				} else {
					data += '<a href="?" onClick="Update(\'' + makeDate(i,m,y) + '\',\'' + form + '\',\'' + setArrival + '\'); return false">' + dateobj.getDate() + '</a>';
				}
				data += '</td>';	
			 	i++
			} else{
				data += '<td align="center">-</td>';
			}
		}
		data += '</tr>';
	}
	data += '</table>';
	
	p = getPos(document.getElementById(positionRef));
	document.getElementById("sublayer").style.left = p.x + cal_dx;
	document.getElementById("sublayer").style.top = p.y + cal_dy;
	
	document.getElementById("cal").style.left = p.x + cal_dx;
	document.getElementById("cal").style.top = p.y + cal_dy;
	document.getElementById("cal").innerHTML = data;
	
	w = document.getElementById("cal").offsetWidth;
	h = document.getElementById("cal").offsetHeight;

	document.getElementById("subiframe").width = w;
	document.getElementById("subiframe").height = h;

	document.getElementById("sublayer").style.visibility = "visible";
	document.getElementById("cal").style.visibility = "visible";
	
	showCalendar++;
	
	//document.getElementById(form).style.backgroundColor = _input_backgroundcolor;
	document.getElementById(form).select();
	if (activeForm && activeForm != form && document.getElementById(activeForm)) {
		//document.getElementById(activeForm).style.backgroundColor = "";
		//document.getElementById(activeForm).className = "IBE_input";
	}
	activeForm = form;
}

function makeDate(d,m,y){
	var d = "0" + d;
	var m = "0" + (m + 1);
	return d.substr(d.length - 2) + "." + m.substr(m.length - 2) + "." + y;
}

function Update(dateStr,form,setArrival) {
	document.getElementById(form).value = dateStr;
	if (setArrival && document.getElementById(setArrival)) {
		if (executionFlag) {
			if (parseDate(document.getElementById(setArrival).value) < parseDate(dateStr)) {
				document.getElementById(setArrival).value = dateStr;
			}
		} else {
			document.getElementById(setArrival).value = dateStr;
		}
	}
	
	document.getElementById("cal").style.visibility = "hidden";
	document.getElementById("sublayer").style.visibility = "hidden";
	
	//document.getElementById(form).style.backgroundColor = "";
	//document.getElementById(form).className = "IBE_input";
	
	activeForm = null;
}

function getPos(obj) {
	var pos = {x: obj.offsetLeft||0, y: obj.offsetTop||0};
	while(obj = obj.offsetParent) {
		pos.x += obj.offsetLeft||0;
		pos.y += obj.offsetTop||0;
	}
    //alert(pos.x+" x "+pos.y);
	return pos;
}
