// CONFIGURATION VARIABLES
var intFormatMode=1; // date format: 1=dd/mm/yyyy, 0=mm/dd/yyyy (may be overidded in the HTML call to fncShowDateSelector)


// PRIVATE VARIABLES - Do not amend anything below this line!
var strImagePathvar;
var blnDisableNone;
var objDateRef;
var objSelectorRef;
var objCalendarArea;
var objDateTable;
var dtToday;
var intOneMinute=60 * 1000;
var intOneHour=intOneMinute * 60;
var intOneDay=intOneHour * 24;
var intSelectedDay=0;
var intSelectedMonth=0;
var intSelectedYear=0;
var intCurrentMonth=0;
var intCurrentYear=0;

if (navigator.userAgent.indexOf("Gecko")>0) {
	strBrowser="Gecko";
	document.onclick=fncHideDateSelector;
	}
else {
	strBrowser="IE";
	document.onclick=function() {fncHideDateSelector(event)};
	}

if ((typeof(HTMLElement)!="undefined") && (!HTMLElement.prototype.insertAdjacentHTML)) {
	HTMLElement.prototype.insertAdjacentHTML = function(where,htmlStr) {
		var r = this.ownerDocument.createRange();
		r.setStartBefore(this);
		var parsedHTML = r.createContextualFragment(htmlStr);
		this.appendChild(parsedHTML);
		}
	}

function fncShowDateSelector(DateRef,EventRef,DisableNone) {
	if (document.getElementById) {
		blnDisableNone=DisableNone;
		if (!objSelectorRef) {
			// first show tasks
			dtToday=new Date();
			dtToday.setHours(0,0,0,0);
			fncWriteSelectorHTML();
			objSelectorRef=document.getElementById("dateSelector");
			objCalendarArea=document.getElementById("calendarArea");
			}
		objDateTable=document.getElementById(DateRef.name + "table");
		objDateRef=DateRef;
		intSelectedDay=0;
		if (objDateRef.value=="") {
			var arrCurrentDate=fncDateToString(dtToday).split("-");
			intSelectedMonth=arrCurrentDate[0 + intFormatMode] - 1;
			}
		else {
			var arrCurrentDate=objDateRef.value.split("-");
			intSelectedDay=arrCurrentDate[1 - intFormatMode];
			intSelectedMonth=arrCurrentDate[0 + intFormatMode] - 1;
			}
		intSelectedYear=arrCurrentDate[2];
		intCurrentMonth=parseInt(intSelectedMonth,10);
		intCurrentYear=parseInt(intSelectedYear,10);
		document.dateSelectorForm.currentMonth.selectedIndex=intCurrentMonth;
		document.dateSelectorForm.currentYear.value=intCurrentYear;
		fncCreateCalendarArea(intSelectedDay,intCurrentMonth,intCurrentYear);
		if (strBrowser=="Gecko") {
			objSelectorRef.style.left=EventRef.clientX - 90;
			objSelectorRef.style.top=EventRef.clientY + 8;
			}
		else {
			objSelectorRef.style.left=EventRef.clientX - EventRef.offsetX - 82 + document.body.scrollLeft;
			objSelectorRef.style.top=EventRef.clientY - EventRef.offsetY + 16 + document.body.scrollTop;
			}
		objSelectorRef.style.visibility="visible";
		}
	}

function fncHideDateSelector(TheEvent) {
	if (objSelectorRef) {
		if (strBrowser=="Gecko") {
			if (TheEvent) {
				var rel = TheEvent.target;
				while (rel) {if (rel.id=="dateSelector") {break} else {rel=rel.parentNode}}
				}
			if (!rel) {objSelectorRef.style.visibility="hidden"}
			return;
			}
		else {
			if ((TheEvent)) {
				// check not clicked on calendar
				if ((TheEvent.clientX+document.body.scrollLeft>objSelectorRef.style.posLeft+1) &&
					(TheEvent.clientX+document.body.scrollLeft<objSelectorRef.style.posLeft+objSelectorRef.style.posWidth+10) &&
					(TheEvent.clientY+document.body.scrollTop>objSelectorRef.style.posTop+1) &&
					(TheEvent.clientY+document.body.scrollTop<objSelectorRef.style.posTop+objSelectorRef.style.posHeight+2)
					) {return}
				// check not clicked on icon
				if ((TheEvent.clientX+document.body.scrollLeft>objSelectorRef.style.posLeft+81) &&
					(TheEvent.clientX+document.body.scrollLeft<objSelectorRef.style.posLeft+99) &&
					(TheEvent.clientY+document.body.scrollTop>objSelectorRef.style.posTop-17) &&
					(TheEvent.clientY+document.body.scrollTop<objSelectorRef.style.posTop)
					) {return}
				}
			objSelectorRef.style.visibility="hidden";
			}
		}
	else {objSelectorRef=false}
	}

function fncCreateCalendarArea(TheDay,TheMonth,TheYear) {
	var dtFirstOfMonth=new Date(TheYear,TheMonth,1);
	switch (dtFirstOfMonth.getDay()) {
		case 0: var offsetDays=6; break;
		case 1: var offsetDays=7; break;
		default: var offsetDays=dtFirstOfMonth.getDay() - 1;
		}
	var dtCalendarStart=new Date(dtFirstOfMonth.getTime() - (intOneDay * offsetDays));
	var dtCalendarEnd=new Date(dtCalendarStart.getTime() + (intOneDay * 41));
	var strCalendar="<TABLE BORDER='0' CELLPADDING='2' CELLSPACING='0' CLASS='calendar'>";
	strCalendar+="<TR CLASS='calendarTitles' ALIGN='center'><TD WIDTH='22'>Man</TD><TD WIDTH='22'>Tir</TD><TD WIDTH='22'>Ons</TD><TD WIDTH='22'>Tor</TD><TD WIDTH='22'>Fre</TD><TD WIDTH='22'>Lør</TD><TD WIDTH='22'>Søn</TD></TR>";
	for (var i=0; i<=41; i++) {
		if (i % 7 == 0) {strCalendar+="<TR ALIGN='center'>"}
		var StyleString="";
		var dtTheDay=new Date(dtCalendarStart.getTime() + (intOneDay * i));
		if (dtTheDay.getTime()==dtToday.getTime()) {
			if ((dtTheDay.getMonth()==intSelectedMonth) && (dtTheDay.getDate()==intSelectedDay) && (dtTheDay.getFullYear()==intSelectedYear)) {StyleString+="background-image: url(" + strImagePath + "today_selected.gif); background-repeat:no-repeat; "}
			else {StyleString+="background-image: url(" + strImagePath + "today.gif); background-repeat:no-repeat; "}
			}
		else if ((dtTheDay.getMonth()==intSelectedMonth) && (dtTheDay.getDate()==intSelectedDay) && (dtTheDay.getFullYear()==intSelectedYear)) {StyleString+="background-image: url(" + strImagePath + "selected.gif); background-repeat:no-repeat; "}
		if (dtTheDay.getMonth()!=TheMonth) {var LinkClass="notInMonth"} else {var LinkClass="inMonth"}
		strCalendar+="<TD STYLE='" + StyleString + "'><A HREF='Javascript: void fncSetDate(\"" + fncDateToString(dtTheDay) + "\")' CLASS='" + LinkClass + "'>" + dtTheDay.getDate() + "</A></TD>";
		if (i%7==6) {strCalendar+="</TR>"}
		}
	strCalendar+="<TABLE>";
	objCalendarArea.innerHTML=strCalendar;
	}

function fncSetDate(TheDate) {
	if ((TheDate=="") && (blnDisableNone==true)) {alert("This date cannot be set to None."); return false}
	intSelectedDay=0;
	objDateRef.value=TheDate;
	fncHideDateSelector();
	}

function fncAdvanceDate(Adjuster) {
	if ((Adjuster==12) || (Adjuster==-12)) {intCurrentYear=intCurrentYear + (Adjuster / 12)}
	else {
		intCurrentMonth=intCurrentMonth + Adjuster;
		if (intCurrentMonth==-1) {intCurrentMonth=11; intCurrentYear--}
		if (intCurrentMonth==12) {intCurrentMonth=0; intCurrentYear++}
		}
	document.dateSelectorForm.currentMonth.selectedIndex=intCurrentMonth;
	document.dateSelectorForm.currentYear.value=intCurrentYear;
	fncCreateCalendarArea(intSelectedDay,intCurrentMonth,intCurrentYear);
	}

function fncChangeMonth(Adjuster) {
	intCurrentMonth=Adjuster-1;
	fncCreateCalendarArea(intSelectedDay,intCurrentMonth,intCurrentYear);
	}

function fncDateToString(TheDate) {
	if (intFormatMode==1) {return (TheDate.getDate()<10 ? "0" + TheDate.getDate() : TheDate.getDate()) + "-" + (TheDate.getMonth()<9 ? "0" + (TheDate.getMonth() + 1) : (TheDate.getMonth() + 1)) + "-" + TheDate.getFullYear()}
	else {return (TheDate.getMonth()<10 ? "0" + TheDate.getMonth() : TheDate.getMonth()) + "-" + (TheDate.getDate()<9 ? "0" + (TheDate.getMonth() + 1) : (TheDate.getMonth() + 1)) + "-" + TheDate.getFullYear()}
	}

function fncCheckDate(thisDateField) {if (!fncCheckDateFormat(thisDateField.value)) {alert("Dato er ikke gyldig"); thisDateField.value=thisDateField.defaultValue}}

function fncCheckDateFormat(thisDate) {
	if (thisDate.indexOf("-")==-1) {return false}
	var ArrayDate = thisDate.split("-");
	if (ArrayDate.length!=3) {return false}
	if ((isNaN(ArrayDate[0])) || (ArrayDate[0]=="")) {return false}
	if ((isNaN(ArrayDate[1])) || (ArrayDate[1]=="")) {return false}
	if ((isNaN(ArrayDate[2])) || (ArrayDate[2]=="")) {return false}
	var daysInMonth = new Array(0,31,29,31,30,31,30,31,31,30,31,30,31);
	if ((parseInt(ArrayDate[1 - intFormatMode],10)<1) || (parseInt(ArrayDate[1 - intFormatMode],10)>daysInMonth[parseInt(ArrayDate[0 + intFormatMode],10)])) {return false}
	if ((parseInt(ArrayDate[0 + intFormatMode],10)==2) && (parseInt(ArrayDate[1 - intFormatMode],10)>fncDaysInFebruary(parseInt(ArrayDate[2],10)))) {return false}
	if ((parseInt(ArrayDate[0 + intFormatMode],10)<1) || (parseInt(ArrayDate[0 + intFormatMode],10)>12)) {return false}
	return true;
	}

function fncDaysInFebruary(year) {return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 )}

function fncWriteSelectorHTML() {
	var selectorHTML='' +
		'<FORM ACTION="#" METHOD="GET" NAME="dateSelectorForm" onSubmit="return false">' +
		'<TABLE BORDER="0" CELLPADDING="1" CELLSPACING="0" WIDTH="188" HEIGHT="178" ID="dateSelector" STYLE="width:190px; height:180px">' +
		'<TR HEIGHT="22" CLASS="buttonsRow">' +
		'<TD WIDTH="30" ALIGN="left"><INPUT TYPE="image" SRC="' + strImagePath + 'but_prev.gif" WIDTH="18" HEIGHT="18" HSPACE="1" onClick="fncAdvanceDate(-1)"></TD>' +
		'<TD>' +
		'<SELECT NAME="currentMonth" CLASS="monthRolldown" onChange="fncChangeMonth(this.selectedIndex + 1)">' +
		'<OPTION>Januar</OPTION>' +
		'<OPTION>Februar</OPTION>' +
		'<OPTION>Marts</OPTION>' +
		'<OPTION>April</OPTION>' +
		'<OPTION>Maj</OPTION>' +
		'<OPTION>Juni</OPTION>' +
		'<OPTION>Juli</OPTION>' +
		'<OPTION>August</OPTION>' +
		'<OPTION>September</OPTION>' +
		'<OPTION>Oktober</OPTION>' +
		'<OPTION>November</OPTION>' +
		'<OPTION>December</OPTION>' +
		'</SELECT>' +
		'</TD>' +
		'<TD><INPUT TYPE="text" NAME="currentYear" VALUE="2004" READONLY CLASS="yearInput"></TD>' +
		'<TD><INPUT TYPE="image" SRC="' + strImagePath + 'but_yeard.gif" WIDTH="18" HEIGHT="9" onClick="fncAdvanceDate(12)"><BR><INPUT TYPE="image" SRC="' + strImagePath + 'but_yearu.gif" WIDTH="18" HEIGHT="9" onClick="fncAdvanceDate(-12)"></TD>' +
		'<TD WIDTH="30" ALIGN="right"><INPUT TYPE="image" SRC="' + strImagePath + 'but_next.gif" WIDTH="18" HEIGHT="18" HSPACE="1" onClick="fncAdvanceDate(1)"></TD>' +
		'</TR>' +
		'<TR HEIGHT="133" BGCOLOR="#FFFFFF"><TD COLSPAN="5" ALIGN="center" ID="calendarArea"></TD></TR>' +
		'<TR HEIGHT="22" CLASS="buttonsRow">' +
		'<TD COLSPAN="5">' +
		'<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%">' +
		'<TR>' +
		'<TD ALIGN="left"><INPUT TYPE="image" SRC="' + strImagePath + '/but_today.gif" WIDTH="38" HEIGHT="18" HSPACE="1" onClick="fncSetDate(fncDateToString(dtToday))"></TD>' +
		'<TD ALIGN="center" ID="dateToday">' + fncDateToString(dtToday) + '</TD>' +
		'<TD ALIGN="right"><INPUT TYPE="image" SRC="' + strImagePath + 'but_none.gif" WIDTH="38" HEIGHT="18" HSPACE="1" onClick="fncSetDate(\'\')"></TD>' +
		'</TR>' +
		'</TABLE>' +
		'</TD>' +
		'</TR>' +
		'</TABLE>' +
		'</FORM>';
	document.body.insertAdjacentHTML("BeforeEnd",selectorHTML)
	}

function fncWriteFieldHTML(FormName,FieldName,FieldValue,FieldWidth,ImagePath,DisableNone,UseOnClick) {
	strImagePath=ImagePath;
	if (strImagePath.charAt(strImagePath.length)!="/") {strImagePath=strImagePath + "/"};
	if (document.getElementById) {
		if (UseOnClick==true) {var ActionEvent="onClick"} else {var ActionEvent="onMouseOver"}
		var formFieldHTML='' +
			'<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" BGCOLOR="#FFFFFF" CLASS="dateSelect" ID="' + FieldName + 'table" WIDTH="' + FieldWidth + '" HEIGHT="22" STYLE="width:' + FieldWidth + 'px">' +
			'<TR>' +
			'<TD><INPUT TYPE="text" NAME="' + FieldName + '" VALUE="' + FieldValue + '" CLASS="dateField" SIZE="9" MAXLENGTH="10" onChange="fncCheckDate(this)"></TD>' +
			'<TD ALIGN="right"><IMG ALT="Klik for at åbne kalenderen" SRC="' + strImagePath + 'calendar.gif" HEIGHT="16" WIDTH="16" HSPACE="3" ' + ActionEvent + '="fncShowDateSelector(document.' + FormName + '.' + FieldName + ',event,' + DisableNone + ')" STYLE="cursor:hand"></TD>' +
			'</TR>' +
			'</TABLE>';
		document.write(formFieldHTML);
		}
	else {
		var formFieldHTML='<INPUT TYPE="text" NAME="' + FieldName + '" VALUE="' + FieldValue + '" SIZE="9" MAXLENGTH="10" onChange="fncCheckDate(this)" STYLE="width:' + FieldWidth + 'px; height:22px">'
		document.write(formFieldHTML);
		}
	}