var today = new Date();
var cal_target = "";
var cal_year = today.getFullYear();
var cal_month = today.getMonth();
var cal_day = today.getDate();
var cal_image = "/img/date.gif";
var cal_nn = 0;

var cal_dateformatstyle = "INT"; //INT = dd.mm.yyyy / USA = mm/dd/yyyy

function cal_stringToDate(inputStr) {
	var d = 0;
	var m = 0;
	var y = 0;

	var tmp;
	if (cal_dateformatstyle == "USA") {
		tmp = inputStr.split("/");
		if (tmp.length == 1) {
			if ((tmp[0].length == 4) || (tmp[0].length == 6)) {
				d = tmp[0].charAt(2).concat(tmp[0].charAt(3));
				m = tmp[0].charAt(0).concat(tmp[0].charAt(1));
			}
			if (tmp[0].length == 6) {
				y = tmp[0].charAt(4).concat(tmp[0].charAt(5));
			}
		}
		if (tmp.length >= 2) {
			d = tmp[1];
			m = tmp[0];
		}
		if (tmp.length > 2) {
			y = tmp[2];
		}
	} else {
		tmp = inputStr.split(".");
		if (tmp.length == 1) {
			if ((tmp[0].length == 4) || (tmp[0].length == 6)) {
				d = tmp[0].charAt(0).concat(tmp[0].charAt(1));
				m = tmp[0].charAt(2).concat(tmp[0].charAt(3));
			}
			if (tmp[0].length == 6) {
				y = tmp[0].charAt(4).concat(tmp[0].charAt(5));
			}
		}
		if (tmp.length >= 2) {
			d = tmp[0];
			m = tmp[1];
		}
		if (tmp.length > 2) {
			y = tmp[2];
		}
	}
	if ( (d!=0) && (m!=0) && (y==0)) {
		y = today.getFullYear();
	}
	if (y < 100) {
		y = "20".concat(y);
	}
	
	if ( (d!=0) && (m!=0) && (y!=0)) {
		var tmpdate = new Date(y,(m-1),d);
		return (tmpdate);
	} else {
		return (null);
	}
}

function cal_getDayOffset() {
	var tmpdate = new Date(cal_year, cal_month, 1); //erster des Monats
	var tmpoffset = tmpdate.getDay() - 1; //getDay: 0=Sonntag..6=Samstag->0=Montag..6=Sonntag
	if (tmpoffset == -1) {
		tmpoffset = 6;
	}
	return (tmpoffset);
}

function cal_getDaysInMonth() {
	var ty = cal_year;
	var tm = cal_month + 1;
	if (tm > 12) {
		tm = 1;
		ty = ty +1;
	}
	var tmpd = new Date(ty,tm,01);
	tmpd.setTime(tmpd.getTime()-60000*60*24); // dec. one day
	return (tmpd.getDate());
}


function cal_displayValue(targetname, value) { 
	document.getElementById(targetname).firstChild.nodeValue = value;
	if (arguments.length > 2) {
		var marked = arguments[2];
		if (marked) {
			document.getElementById(targetname).className = "caldaysmarked";
		} else {
			document.getElementById(targetname).className = "caldays";
		}
	}
}

function cal_refresh() {
	cal_displayValue("idcal_year", cal_year);
	cal_displayValue("idcal_month", (cal_month+1)); //0-11 (!)
	var tmpoffset = cal_getDayOffset();
	var tmpdaysinmonth = cal_getDaysInMonth();
	var tmptargetname = "";
	var tmpdate = 0;
	var tmpcaldays = 42; // 7 Tage mal 6 angezeigte Wochen
	for (i=1; i<=tmpcaldays; i++) {
		tmpdate = (i - tmpoffset);
		if ((i > tmpoffset) && (tmpdate <= tmpdaysinmonth)) {
			tmptargetname = "idcal_".concat (i);
			cal_displayValue(tmptargetname, tmpdate, (cal_day == tmpdate));
		} else {
			tmptargetname = "idcal_".concat (i);
			cal_displayValue(tmptargetname, " ", false);
		}
	}
}

function cal_show(formfield) { //formfield, copydatefromfield, 
	
	// DyStar: Datum von Quelle +3Monate bis maximal heute übernehmen
	// BEGIN: DyStar-Special Handling
	var preseldate = new Date();
	if (document.getElementById(formfield).value != "") {
		preseldate = cal_stringToDate(document.getElementById(formfield).value);
		if (preseldate) {
			cal_year = preseldate.getFullYear();
			cal_month = preseldate.getMonth();
			cal_day = preseldate.getDate();		
		}
	} else {
		if (arguments.length > 1) {
			if (document.getElementById(arguments[1]).value != "") {
				preseldate = cal_stringToDate(document.getElementById(arguments[1]).value);
				if (preseldate) {
					cal_year = preseldate.getFullYear();
					cal_month = preseldate.getMonth();
					cal_day = preseldate.getDate();
					cal_month = cal_month + 3;
					if (cal_month > 11) {
						cal_month = cal_month - 12;
						cal_year = cal_year + 1;
					}
				}
			}
		}	
	}
	var tmpdate = new Date(cal_year, cal_month, cal_day);
	if (tmpdate > today) {
		cal_year = today.getFullYear();
		cal_month = today.getMonth();
		cal_day = today.getDate();
	} else {
		cal_year = tmpdate.getFullYear();
		cal_month = tmpdate.getMonth();
		cal_day = tmpdate.getDate();
	}
	// END: DyStar-Special Handling
	
	cal_target = formfield;
	cal_refresh ();
	document.getElementById("idcalender").style.visibility = 'visible';
	var c = getAnchorPosition("idcal_" + formfield);
	document.getElementById("idcalender").style.left = c.x+'px';
	document.getElementById("idcalender").style.top  = c.y+'px';
}

function cal_close() {
	document.getElementById("idcalender").style.visibility = 'hidden';
}

function cal_select(nn) {
	var formatteddate = "dd.mm.yy";
	if (cal_dateformatstyle == "USA") {
		formatteddate = "mm/dd/yy";
	}

	var td = (nn - cal_getDayOffset());
	var tm = (cal_month+1); //0-11 (!)
	var ty = cal_year;
	if (td < 10) {
		td = "0" + td;
	}
	if (tm < 10) {
		tm = "0" + tm;
	}

	if ((td > 0) && (td <= cal_getDaysInMonth())) {
		formatteddate = formatteddate.replace(/dd/, td);
		formatteddate = formatteddate.replace(/mm/, tm);
		formatteddate = formatteddate.replace(/yy/, ty);

		document.getElementById(cal_target).value = formatteddate;
		cal_close();
	}
}

function cal_stepmonth(step) {
	cal_day = 0; //reset!
	cal_month = cal_month + step;
	if (cal_month > 11) {
		cal_month = 0;
		cal_year = cal_year + 1;
	}
	if (cal_month < 0) {
		cal_month = 11;
		cal_year = cal_year - 1;
	}
	cal_refresh ();
}

function cal_stepyear(step) {
	cal_year = cal_year + step;
	cal_refresh ();
}

function cal_create() { //[dateformatstyle = INT/USA]
	var cal_days = new Array('Mo','Di','Mi','Do','Fr','Sa','So');
	document.writeln('<div id="idcalender" style="position: absolute; visibility: hidden; z-index: 0; top: 3px; left: 3px;">');
	document.writeln('	<table class="calender" border="1" cellpadding="1" cellspacing="0"><tr><td>');
	document.writeln('	<table class="calenderinnerframe" border="0" cellpadding="0" cellspacing="0">');
	document.writeln('		<tr class="calnavigate">');
	document.writeln('			<td colspan="7">');
	document.writeln('				<table class="calnavigate" width="100%">');
	document.writeln('					<tr>');
	document.writeln('						<td class="calnavigate">&nbsp;</td>');
	document.writeln('						<td class="calnavigate"><a onclick="cal_stepyear(-1);" class="calnavigate">&laquo;&laquo;</a></td>');
	document.writeln('						<td class="calnavigate"><a onclick="cal_stepmonth(-1);" class="calnavigate">&laquo;</a></td>');
	document.writeln('						<td class="caltitle"><a id="idcal_year" class="calnavigate">Y</a> / <a id="idcal_month" class="calnavigate">M</a></td></td>');
	document.writeln('						<td class="calnavigate"><a onclick="cal_stepmonth(+1);" class="calnavigate">&raquo;</a></td>');
	document.writeln('						<td class="calnavigate"><a onclick="cal_stepyear(+1);" class="calnavigate">&raquo;&raquo;</a></td>');
	document.writeln('						<td class="calclose"><a onclick="cal_close();" class="calclose">&nbsp;X&nbsp;</a></td>');
	document.writeln('					</tr>');
	document.writeln('				</table>');
	document.writeln('			</td>');
	document.writeln('		</tr>');
	document.writeln('		<tr>');
	for (i=0; i<=6; i++) {
	document.writeln('				<td class="caldaysofweek">' + cal_days[i] + '</td>');
	}
	document.writeln('		</tr>');
	for (i=0; i<=5; i++) { // 6 Wochen werden angezeigt
	document.writeln('			<tr>');
		for (j=1; j<=7; j++) {
	document.writeln('					<td class="caldays"><a id="idcal_' + (i*7+j) + '" onclick="cal_select(' + (i*7+j) + ');">' + (i*7+j) + '</a>&nbsp;</td>');
		}
	document.writeln('			</tr>');
	}
	document.writeln('	</table>');
	document.writeln('	</td></tr></table>');
	document.writeln('</div>');
	
	if (arguments.length > 0) {
		cal_image = arguments[0];
	}
	if (arguments.length > 1) {
		cal_dateformatstyle = arguments[1];
	}
}
// TODO Hallo
function cal_bindlink(fieldname) { // fieldname, [sourcefieldname]
	var tmpstr = "";
	if (arguments.length > 1) {
		tmpstr = ", \"" + arguments[1] + "\"";
	}
	document.write("<a name='idcal_" + fieldname + "' id='idcal_" + fieldname + "'><img src='" + cal_image + "' alt='' onclick='cal_show(\"" + fieldname +"\"" + tmpstr + ");'></a>");
}

function getAnchorPosition(anchorname) {
	// This function will return an Object with x and y properties
	var useWindow=false;
	var coordinates=new Object();
	var x=0,y=0;
	// Browser capability sniffing
	var use_gebi=false, use_css=false, use_layers=false;
	if (document.getElementById) { use_gebi=true; }
	else if (document.all) { use_css=true; }
	else if (document.layers) { use_layers=true; }
	// Logic to find position
	if (use_gebi && document.all) {
		x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
		y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);
		}
	else if (use_gebi) {
		var o=document.getElementById(anchorname);
		x=AnchorPosition_getPageOffsetLeft(o);
		y=AnchorPosition_getPageOffsetTop(o);
		}
	else if (use_css) {
		x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
		y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);
		}
	else if (use_layers) {
		var found=0;
		for (var i=0; i<document.anchors.length; i++) {
			if (document.anchors[i].name==anchorname) { found=1; break; }
			}
		if (found==0) {
			coordinates.x=0; coordinates.y=0; return coordinates;
			}
		x=document.anchors[i].x;
		y=document.anchors[i].y;
		}
	else {
		coordinates.x=0; coordinates.y=0; return coordinates;
		}
	coordinates.x=x;
	coordinates.y=y;
	return coordinates;
}

// Functions for IE to get position of an object
function AnchorPosition_getPageOffsetLeft (el) {
	var ol=el.offsetLeft;
	while ((el=el.offsetParent) != null) { ol += el.offsetLeft; }
	return ol;
	}
function AnchorPosition_getWindowOffsetLeft (el) {
	return AnchorPosition_getPageOffsetLeft(el)-document.body.scrollLeft;
	}	
function AnchorPosition_getPageOffsetTop (el) {
	var ot=el.offsetTop;
	while((el=el.offsetParent) != null) { ot += el.offsetTop; }
	return ot;
	}
function AnchorPosition_getWindowOffsetTop (el) {
	return AnchorPosition_getPageOffsetTop(el)-document.body.scrollTop;
	}

