var dp_datePickerDivID = "datepicker";
var dp_iFrameDivID = "datepickeriframe";
var dp_minMonth = "";
var dp_maxMonth = "";
var gDaySelected = "";
var dp_defaultDateSeparator = ".";
var dp_defaultDateFormat    = "ymd";
var dp_dateSeparator        = dp_defaultDateSeparator;
var dp_dateFormat           = dp_defaultDateFormat;
function PickDate(theMonthField, theDayField, theBelowObject, theFirstMonth, theLastMonth)
{	// Function to run the dp_displayDatePicker but copying the selected date from the selection boxes first
	//    MonthField  (string holding fieldname)
	//       is the field that holds the month (have to have a selected value)
	//    DayField    (string holding fieldname)
	//      is the field that holds the day (have to have a selected value)
	//   BelowObject (string holding fieldname)
	//      if the object to where to display the calendar.
	//      Set it to false if MonthField shall be used.
	//   FirstMonth  (string)
	//      A month value (format: MMYYYY)
	//      OR
	//      Select Field name to get the value from (the selected option value - format: MMYYYY)
	//   LastMonth   (string)
	//      A month value (format: MMYYYY)
	//      OR
	//      Select Field name to get the value from (the last option value - format: MMYYYY)
	var MonthField  = document.getElementsByName(theMonthField).item(0);
	var DayField    = document.getElementsByName(theDayField).item(0);
	gDaySelected = DayField[DayField.selectedIndex].value;
	if (theBelowObject)
		var BelowObject = document.getElementsByName(theBelowObject).item(0)
	else
		var BelowObject = MonthField;
	
	var tmpField;
	var FirstMonth;
	if (isNaN(theFirstMonth))
	{
		tmpField = document.getElementsByName(theFirstMonth).item(0);
		FirstMonth = tmpField.options[tmpField.selectedIndex].value;
	}
	else
		FirstMonth = new String(theFirstMonth);
		
	var LastMonth;
	if (isNaN(theLastMonth))
	{
		tmpField = document.getElementsByName(theLastMonth).item(0);
		LastMonth = tmpField.options[tmpField.options.length-1].value;
	}
	else
		LastMonth = new String(theLastMonth);
	
	dp_minMonth = FirstMonth.substring(2,6) + FirstMonth.substring(0,2);
	dp_maxMonth = LastMonth.substring(2,6) + LastMonth.substring(0,2);
	// Closing the calendar if it is open already
	dp_updateDateField(theDayField, theMonthField); 
	
	// Hook en dokument event til at lukke:
	document.onmousedown = dp_CloseIfClickOutsideDatepicker;
	dp_displayDatePicker(DayField, MonthField, BelowObject);
}
function dp_CloseIfClickOutsideDatepicker(e)
{
	//var myevent     = (navigator.appName == "Netscape")  ? e : event;
	//var eventbutton = (navigator.appName == "Netscape") ? myevent.which : myevent.button;
	var eventbutton = (navigator.appName == "Netscape") ? e.which : event.button;
	if (eventbutton>0) 
	{
		// check to see if the div exists
		var pickerDiv = document.getElementById(dp_datePickerDivID);
		if (pickerDiv) {
			var dp_mouseX = 0;
			var dp_mouseY = 0;
			if (e != '')
				//if (document.layers)
				if (navigator.appName == "Netscape")
				{
					dp_mouseX = e.pageX;
					dp_mouseY = e.pageY;
				}
				else
				{
					dp_mouseX = event.x;
					dp_mouseY = event.y + document.body.scrollTop;
				}
			
			var dp_posX = 0;
			var dp_posY = 0;
			var dp_Height = 0;
			var dp_Width = 0;
			dp_posX = parseInt(pickerDiv.style.left);
			dp_posY = parseInt(pickerDiv.style.top);
			dp_Width = parseInt(pickerDiv.offsetWidth);
			dp_Height = parseInt(pickerDiv.offsetHeight);
			
			// Checking that the clik is 
			if ( (dp_mouseX < dp_posX || dp_mouseX > (dp_posX + dp_Width)) ||(dp_mouseY < dp_posY || dp_mouseY > (dp_posY + dp_Height)) )
				dp_CloseDatePicker();
		}
	}
}
function dp_DateAdd( AddType, Number, StartDate )
{	// Function to add some to a date
	//   AddType can be of the following values:
	//       'yy', 'yyyy' : Year
	//       'mm', 'm'    : Month
	//       'dd', 'd'    : Day
	//       'wk', 'ww'   : Week 
	//       'hh', 'h     : Hour
	//       'mi', 'n'    : Minute
	//       'ss', 's'    : Second 
	//       'ms'         : Millisecond
	//   If anything else is use, the StartDate is returned.
	var tmpType = new String(AddType);
	tmpType = tmpType.toLowerCase();
	
	if (tmpType=='yy' || tmpType=='yyyy')
		return new Date(StartDate.getYear() + Number, StartDate.getMonth(), StartDate.getDate(), StartDate.getHours(), StartDate.getMinutes(), StartDate.getSeconds())
	if (tmpType=='mm' || tmpType=='m')
		return new Date(StartDate.getYear(), StartDate.getMonth() + Number, StartDate.getDate(), StartDate.getHours(), StartDate.getMinutes(), StartDate.getSeconds())
	else if (tmpType=='ww' || tmpType=='wk')
		return new Date(StartDate.getTime() + (Number*7)*24*60*60*1000);
	else if (tmpType=='dd' || tmpType=='d')
		return new Date(StartDate.getTime() + Number*24*60*60*1000);
	else if (tmpType=='hh' || tmpType=='h')
		return new Date(StartDate.getTime() + Number*60*60*1000);
	else if (tmpType=='mi' || tmpType=='n')
		return new Date(StartDate.getTime() + Number*60*1000);
	else if (tmpType=='ss' || tmpType=='s')
		return new Date(StartDate.getTime() + Number*1000);
	else if (tmpType=='ms')
		return new Date(StartDate.getTime() + Number)
	else
		return StartDate;
}
function dp_SetSelectedWithValue(SelectionField, WithValue)
{	// Function to select a specific value in a selectionbxo.
	var SelectionBox = document.getElementsByName(SelectionField).item(0);
    for (var i=0;(i<SelectionBox.options.length);i++)
    	if (SelectionBox[i].value == WithValue)
	    	{ SelectionBox[i].selected = true; i = SelectionBox.options.length; }
}
function dp_PadLeft(Number, MinLength)
{	// Function to make leading zeroes...
	var Result = new String(Number);
	for (;Result.length < MinLength;)
		Result = "0" + Result;
		
	return Result;
}
function dp_Right(Str, Len)
{	// Function that returns Len chars from the right of the string Str
	var Result = new String(Str);
	if (Result.length < Len)
		return Result
	intStartPos = parseInt((Result.length - Len));
	return Result.substr(intStartPos, Len);
}
function dp_displayDatePicker(targetDayField, targetMonthField, displayBelowObject)
{
	dp_dateSeparator = dp_defaultDateSeparator;
	dp_dateFormat    = dp_defaultDateFormat;
	var x = displayBelowObject.offsetLeft;
	var y = displayBelowObject.offsetTop + displayBelowObject.offsetHeight;
	var parent = displayBelowObject;
	while (parent.offsetParent) {
		parent = parent.offsetParent;
		x += parent.offsetLeft-20;
		y += parent.offsetTop ;
	}
	dp_drawDatePicker(targetDayField, targetMonthField, x, y);
}
function dp_drawDatePicker(targetDayField, targetMonthField, x, y)
{
	var tmpValue = targetMonthField.value.substring(2,6) + dp_defaultDateSeparator + (targetMonthField.value.substring(0,2)) + dp_defaultDateSeparator + targetDayField.value;
	var dt = dp_getFieldDate(tmpValue);
	if (!document.getElementById(dp_datePickerDivID)) {
		var newNode = document.createElement("div");
		newNode.setAttribute("id", dp_datePickerDivID);
		newNode.setAttribute("class", "dpDiv");
		newNode.setAttribute("style", "visibility: hidden;");
		document.body.appendChild(newNode);
	}
	var pickerDiv = document.getElementById(dp_datePickerDivID);
	pickerDiv.style.position = "absolute";
	pickerDiv.style.left = x + 134 + "px";
	pickerDiv.style.top = y - 4 + "px";
	pickerDiv.style.visibility = (pickerDiv.style.visibility == "visible" ? "hidden" : "visible");
	pickerDiv.style.display = (pickerDiv.style.display == "block" ? "none" : "block");
	pickerDiv.style.zIndex = 10000;
	dp_refreshDatePicker(targetDayField.name, targetMonthField.name, ("20" + dp_Right(dt.getFullYear(),2)), dt.getMonth(), dt.getDate());
}
function dp_refreshDatePicker(dataDayFieldName, dataMonthFieldName, year, month, day)
{
	// This is the function that actually draws the datepicker calendar.
	// if no arguments are passed, use today's date; otherwise, month and year
	// are required (if a day is passed, it will be highlighted later)
	var thisDay = new Date();
	if ((month >= 0) && (year > 0)) {
		thisDay = new Date(year, month, 1);
	} else {
		day = thisDay.getDate();
		thisDay.setDate(1);
	}
	thisDay = dp_DateAdd( "dd", -1, thisDay);
	
	// date selected by user
	var daySelectedInField = document.getElementById(dataDayFieldName).value;
	var monthSelectedInField = document.getElementById(dataMonthFieldName).value;
	var dateSelectedInFields = parseInt(daySelectedInField, 10) + "." + parseInt(monthSelectedInField.substr(0,2), 10) + "." + monthSelectedInField.substr(2,4); 
	var crlf = "\r\n";
	var TABLE_main1    = "<table cols='1' border='0' cellpadding='0' cellspacing='0' class='dpTableMain1'>";
	var TABLE_main2    = "<table cols='1' border='0' cellpadding='0' cellspacing='0' class='dpTableMain2'>";
	var TABLE_title    = "<table cols='1' border='0' cellpadding='1' cellspacing='0' class='dpTableTitle' width='100%'>";
	var TABLE_calender = "<table cols='7' border='0' cellpadding='1' cellspacing='1' class='dpTableCalendar' width='100%'>";
	var TABLE_button   = "<table cols='1' border='0' cellpadding='1' cellspacing='0' class='dpTableButton' width='100%'>";
	var xTABLE = "</table>" + crlf;
	var TR             = "<tr class='dpTR'>";
	var TR_title       = "<tr class='dpTitleTR'>";
	var TR_days        = "<tr class='dpDayTR'>";
	var TR_todaybutton = "<tr class='dpTodayButtonTR'>";
	var xTR = "</tr>" + crlf;
	var TD              = "<td>"
	var TD_title        = "<td class='dpTitleTD'>";
	var TD_buttonsLeft  = "<td align='left' class='dpButtonTD'>";
	var TD_buttonsRight = "<td align='right' class='dpButtonTD'>";
	var TD_todaybutton      = "<td class='dpTodayButtonTD'>";
	var TD_todaybuttonLeft  = "<td class='dpTodayButtonTD' align='left'>";
	var TD_todaybuttonRight = "<td class='dpTodayButtonTD' align='right'>";
	var TD_unselectedPast = "<td class='dpTDpast'>";
	var TD_daysBusiness = "<td align='right' class='dpDayTDBusiness'>";
	var TD_days       = "<td align='right' class='dpDayTD'>";
	var TD_unselectedBusiness = "<td class='dpTDbusiness' onMouseOut='this.className=\"dpTDbusiness\";' onMouseOver=' this.className=\"dpTDbusinessHover\";' ";
	var TD_unselected = "<td class='dpTD' onMouseOut='this.className=\"dpTD\";' onMouseOver=' this.className=\"dpTDHover\";' ";    // leave this tag open, because we'll be adding an onClick event
	var TD_selected   = "<td class='dpDayHighlightTD' onMouseOut='this.className=\"dpDayHighlightTD\";' onMouseOver='this.className=\"dpTDHover\";' ";    // leave this tag open, because we'll be adding an onClick event
	var TD_selected_today = "<td class='dpDayHighlightTDToday' onMouseOut='this.className=\"dpDayHighlightTDToday\";' onMouseOver='this.className=\"dpTDHoverToday\";' ";
	var xTD = "</td>" + crlf;
	var DIV_title    = "<div class='dpTitleText'>";
	var DIV_selected = "<div class='dpDayHighlight'>";
	var xDIV = "</div>";
	
	var xImgLeft = '<img src="/budgetonline/gb/../Images.nsf/s/calendarArrowLeft.gif/$FILE/calendarArrowLeft.gif" border="0">';
	var xImgRight = '<img src="/budgetonline/gb/../Images.nsf/s/calendarArrowRight.gif/$FILE/calendarArrowRight.gif" border="0">';
	// start calendar table
	var html = "";
	html += TABLE_main1;
	html += TR;
	html += TD
	html += TABLE_main2;
	html += TR;
	html += TD;
// Insert title bar with prev and next buttons.
		html += TABLE_title;
		html +=		TR_title;
		html +=			TD_buttonsLeft + dp_getButtonCode(dataDayFieldName, dataMonthFieldName, dp_DateAdd("dd", 1, thisDay), -1, xImgLeft) + xTD;
		html +=			TD_title + DIV_title + dp_monthArrayLong[ dp_DateAdd("dd", 1, thisDay).getMonth()] + " " + ("20" + dp_Right(dp_DateAdd("dd", 1, thisDay).getFullYear(),2)) + xDIV + xTD;
		html +=			TD_buttonsRight + dp_getButtonCode(dataDayFieldName, dataMonthFieldName, dp_DateAdd("dd", 1, thisDay), 1, xImgRight) + xTD;
		html +=		xTR;
		html += xTABLE;
	html += xTD;
	html += xTR;
	html += TR;
	html += TD;
		
		html += TABLE_calender;
// this is the row that indicates which day of the week we're on
		html += TR_days;
		for(i = 0; i < dp_dayArrayLong.length; i++)
		{
			if( i < 5 )
				html += TD_daysBusiness + dp_dayArrayLong[i].substring(0,3) + xTD;
			else
				html += TD_days + dp_dayArrayLong[i].substring(0,3) + xTD;
		}
		html += xTR;
// now we'll start populating the table with days of the month
		html += TR;
		
// first, the leading blanks
		for (i = 0; i < thisDay.getDay(); i++)
			html += TD + "&nbsp;" + xTD;
// set the day variable to today, if it is not set and the current month = month selected
		if(isNaN( day ) && (thisDay.getMonth() + 2) == 2) 
			day = gDaySelected;
		if( day < 2  && (thisDay.getMonth() + 2) == 2) 
			day = 2;
// now, the days of the month
		var monthSelected = dp_DateAdd( "dd", 1, thisDay).getMonth(); 
		var yearNum = dp_DateAdd( "dd", 1, thisDay).getFullYear(); 
		do {
			dayNum = dp_DateAdd( "dd", 1, thisDay).getDate();
			TD_onclick = " onclick=\"dp_updateDateField('" + dataDayFieldName + "', '" + dataMonthFieldName + "', '" + dp_getDateString(dp_DateAdd("dd", 1, thisDay)) + "');\">";
	
// compare today with one date from calender picker and set it to active , if the values match
			var CurrentCPDate = dayNum + "." + month + "." + year;
			//var xDate = new Date();
			//var xDay = xDate.getDate();
			//var xMonth = xDate.getMonth();
			//var xYear = xDate.getFullYear();
			//var xTest = xDay + "." + xMonth + "." + xYear;
			
			if( xTodayForCP == CurrentCPDate )
				html += TD_selected_today + TD_onclick + dayNum + xTD;
			else 
			{
// compare date selected by user with a date from calendar picker and mark it as selected, it the values match
				if (dateSelectedInFields == dayNum + "." + (monthSelected + 1) + "." + yearNum)
					html += TD_selected + TD_onclick + dayNum + xTD;  
				else
				{
					if( (dayNum < 2 ) && (monthSelected + 1) == 2)
					{
						html += TD_unselectedPast + dayNum + xTD;
					}
					else
					{
						if (thisDay.getDay() == 5 || thisDay.getDay() == 6 )
							html += TD_unselectedBusiness + TD_onclick + dayNum + xTD;
						else
							html += TD_unselected + TD_onclick + dayNum + xTD;
					}
				}
			}
// if this is a Saturday, start a new row
			if (thisDay.getDay() == 6)
				html += xTR + TR;
// increment the day
			thisDay.setDate(thisDay.getDate() + 1);
		} while (dp_DateAdd( "dd", 1, thisDay).getDate() > 1)
// fill in any trailing blanks
		if (thisDay.getDay() > 0) {
			for (i = 6; i > thisDay.getDay(); i--)
				html += TD + "&nbsp;" + xTD;
		}
		html += xTR;
		html += xTABLE;
		
	html += xTD;
	html += xTR;
	html += TR;
	html += TD
// add a button to allow the user to easily return to today, or close the calendar
	html += TABLE_button;
	html +=	TR_todaybutton;
	html +=	TD_todaybuttonLeft;
//	html +=	"<div class='dpTodayButton' onClick='dp_refreshDatePicker(\"" + dataDayFieldName + "\", \"" + dataMonthFieldName + "\");'>" + dp_ThisMonthText + "</div>";
	html +=	xTD;
	html +=	TD_todaybuttonRight;
	html +=	"<div class='dpTodayButton' onClick='dp_updateDateField(\"" + dataDayFieldName + "\", \"" + dataMonthFieldName + "\");'>" + dp_CloseText + "</div>";
	html +=	xTD;
	html +=	xTR;
	html += xTABLE;
		// and finally, close the table
	html += xTD;
	html += xTR;
	html += xTABLE;
	html += xTD;
	html += xTR;
	html += xTABLE;
	
	document.getElementById(dp_datePickerDivID).innerHTML = html;
	dp_adjustiFrame();
}
function dp_getButtonCode(dataFieldDayName, dataFieldMonthName, dateVal, adjust, label)
{
	var newDate = new Date(dp_DateAdd( "mm", adjust, dateVal));
	var newMonth = dp_PadLeft(newDate.getMonth(), 2);
	var newYear = ("20" + dp_Right(newDate.getFullYear(),2));
	var ButtonDate = new String( "" + newYear + dp_PadLeft(newDate.getMonth()+1, 2));
	if ( (adjust==1 && ButtonDate > dp_maxMonth) || (adjust==-1 && ButtonDate < dp_minMonth) )
		return '<img src="/icons/ecblank.gif" height="1" width="22" alt="" border="">'
	else
		return "<div class='dpButton' onClick='dp_refreshDatePicker(\"" + dataFieldDayName +"\", \"" + dataFieldMonthName + "\", " + newYear + ", " + newMonth + ");'>" + label + "</div>";
}
function dp_getDateString(dateVal)
{
	var dayString = "00" + dateVal.getDate();
	var monthString = "00" + (dateVal.getMonth()+1);
	dayString = dayString.substring(dayString.length - 2);
	monthString = monthString.substring(monthString.length - 2);
	switch (dp_dateFormat) {
		case "dmy" :
			return dayString + dp_dateSeparator + monthString + dp_dateSeparator + ("20" + dp_Right(dateVal.getFullYear(),2));
		case "ymd" :
			return ("20" + dp_Right(dateVal.getFullYear(),2)) + dp_dateSeparator + monthString + dp_dateSeparator + dayString;
		case "mdy" :
	default :
		return monthString + dp_dateSeparator + dayString + dp_dateSeparator + ("20" + dp_Right(dateVal.getFullYear(),2));
	}
}
function dp_getFieldDate(dateString)
{
	var dateVal;
	var dArray;
	var d, m, y;
	try
	{
		dArray = dp_splitDateString(dateString);
		if (dArray) {
			switch (dp_dateFormat) 
			{
				case "dmy" :
					d = parseInt(dArray[0], 10);
					m = parseInt(dArray[1], 10) - 1;
					y = parseInt(dArray[2], 10);
					break;
				case "ymd" :
					d = parseInt(dArray[2], 10);
					m = parseInt(dArray[1], 10) - 1;
					y = parseInt(dArray[0], 10);
					break;
				case "mdy" :
				default :
					d = parseInt(dArray[1], 10);
					m = parseInt(dArray[0], 10) - 1;
					y = parseInt(dArray[2], 10);
					break;
			}
			dateVal = new Date(y, m, d);
		} else if (dateString) {
			dateVal = new Date(dateString);
		} else {
			dateVal = new Date();
		}
	} catch(e) {
		dateVal = new Date();
	}
	return dateVal;
}
function dp_CloseDatePicker()
{
	var pickerDiv = document.getElementById(dp_datePickerDivID);
    if (pickerDiv) {
    	document.onmousedown = null;
		pickerDiv.style.visibility = "hidden";
		pickerDiv.style.display = "none";
		
		var iFrameDiv = document.getElementById(dp_iFrameDivID);
		if (iFrameDiv)
			try
			{
				iFrameDiv.style.visibility = pickerDiv.style.visibility ;
				iFrameDiv.style.display = pickerDiv.style.display;
			} catch(e) { }
	}
}
function dp_splitDateString(dateString)
{
	var dArray;
	if (dateString.indexOf("/") >= 0)
		dArray = dateString.split("/");
	else if (dateString.indexOf(".") >= 0)
		dArray = dateString.split(".");
	else if (dateString.indexOf("-") >= 0)
		dArray = dateString.split("-");
	else if (dateString.indexOf("\\") >= 0)
		dArray = dateString.split("\\");
	else
		dArray = false;
	return dArray;
}
function dp_updateDateField(dataDayFieldName, dataMonthFieldName, dateString)
{
	if (dateString)
	{
		var tmpValues = dateString.split(dp_defaultDateSeparator);
		dp_SetSelectedWithValue(dataDayFieldName, "" + tmpValues[2]);
		dp_SetSelectedWithValue(dataMonthFieldName, "" + tmpValues[1] + tmpValues[0]);
	}
	var pickerDiv = document.getElementById(dp_datePickerDivID);
    if (pickerDiv) {
    	document.onmousedown = null;
		pickerDiv.style.visibility = "hidden";
		pickerDiv.style.display = "none";
	}
//	alert( dataDayFieldName );
// set opening hours for Pickup OR Return date	
	setOpeningHours(dataDayFieldName.substr(0,3))	//defined in Dropdown.js
	dp_adjustiFrame();
	if (dataMonthFieldName == "ETAMonth"); setETTDay();
//	if (dataMonthFieldName == "ETTMonth") CheckOutMonth();
}
function dp_adjustiFrame(pickerDiv, iFrameDiv)
{
	// Using an "iFrame shim" to make sure the datepicker is in front of list elements
	// Opera doesn't like this, so if we're using Opera, don't even try
	var is_opera = (navigator.userAgent.toLowerCase().indexOf("opera") != -1);
	if (is_opera)
		return;
	try {
		if (!document.getElementById(dp_iFrameDivID))
		{
			var newNode = document.createElement('IFRAME'); 
			newNode.setAttribute("id", dp_iFrameDivID);
			newNode.setAttribute("src", "javascript:false;");
			newNode.setAttribute("scrolling", "no");
			newNode.setAttribute("frameborder", "0");
			document.body.appendChild(newNode);
		}
		if (!pickerDiv)
			pickerDiv = document.getElementById(dp_datePickerDivID);
		if (!iFrameDiv)
			iFrameDiv = document.getElementById(dp_iFrameDivID);
		try
		{
			iFrameDiv.style.position = "absolute";
			iFrameDiv.style.width = pickerDiv.offsetWidth;
			iFrameDiv.style.height = pickerDiv.offsetHeight ;
			iFrameDiv.style.top = pickerDiv.style.top;
			iFrameDiv.style.left = pickerDiv.style.left;
			iFrameDiv.style.zIndex = pickerDiv.style.zIndex - 1;
			iFrameDiv.style.visibility = pickerDiv.style.visibility ;
			iFrameDiv.style.display = pickerDiv.style.display;
		} catch(e) { }
	} catch (ee) { }
}

