/*DateChooser 2.9February 13, 2008For usage details see http://yellow5.us/projects/datechooser/Creative Commons Attribution 2.0 Licensehttp://creativecommons.org/licenses/by/2.0/*/if (!objPHPDate){	var objPHPDate =	{		/* These values are defaults. Please feel free to modify them as needed. */		aDay: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],		aShortDay: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],		aLetterDay: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],		aMonth: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],		aShortMonth: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],		aSuffix: ['th', 'st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'st'],		/* End user-editable values */		sTimezoneOffset: '',		GetTimezoneOffset: function()		{			var objLocal = new Date();			objLocal.setHours(12);			objLocal.setMinutes(0);			objLocal.setSeconds(0);			objLocal.setMilliseconds(0);			var objUTC = new Date();			objUTC.setMilliseconds(objLocal.getUTCMilliseconds());			objUTC.setSeconds(objLocal.getUTCSeconds());			objUTC.setMinutes(objLocal.getUTCMinutes());			objUTC.setHours(objLocal.getUTCHours());			objUTC.setDate(objLocal.getUTCDate());			objUTC.setMonth(objLocal.getUTCMonth());			objUTC.setFullYear(objLocal.getUTCFullYear());			this.sTimezoneOffset = ((objLocal.getTime() - objUTC.getTime()) / (1000 * 3600));			var bNegative = (this.sTimezoneOffset < 0);			this.sTimezoneOffset  = bNegative ? (this.sTimezoneOffset + '').substring(1) : this.sTimezoneOffset + '';			this.sTimezoneOffset  = this.sTimezoneOffset.replace(/\.5/, (parseInt('$1', 10) * 60) + '');			this.sTimezoneOffset += (this.sTimezoneOffset.substring(this.sTimezoneOffset.length - 3) != ':30') ? ':00' : '';			this.sTimezoneOffset  = (this.sTimezoneOffset.substr(0, this.sTimezoneOffset.indexOf(':')).length == 1) ? '0' + this.sTimezoneOffset : this.sTimezoneOffset;			this.sTimezoneOffset  = bNegative ? '-' + this.sTimezoneOffset : '+' + this.sTimezoneOffset;			delete objLocal;			delete objUTC;			return true;		},		PHPDate: function()		{			var sFormat = (arguments.length > 0) ? arguments[0] : '';			var nYear = this.getFullYear();			var sYear = nYear + '';			var nMonth = this.getMonth();			var sMonth = (nMonth + 1) + '';			var sPaddedMonth = (sMonth.length == 1) ? '0' + sMonth : sMonth;			var nDate = this.getDate();			var sDate = nDate + '';			var sPaddedDate = (sDate.length == 1) ? '0' + sDate : sDate;			var nDay = this.getDay();			var sDay = nDay + '';			sFormat = sFormat.replace(/([cDdFjLlMmNnrSUwYy])/g, 'y5-cal-regexp:$1');			sFormat = sFormat.replace(/y5-cal-regexp:c/g, sYear + '-' + sPaddedMonth + '-' + sPaddedDate + 'T00:00:00' + objPHPDate.sTimezoneOffset);			sFormat = sFormat.replace(/y5-cal-regexp:D/g, objPHPDate.aShortDay[nDay]);			sFormat = sFormat.replace(/y5-cal-regexp:d/g, sPaddedDate);			sFormat = sFormat.replace(/y5-cal-regexp:F/g, objPHPDate.aMonth[nMonth]);			sFormat = sFormat.replace(/y5-cal-regexp:j/g, nDate);			sFormat = sFormat.replace(/y5-cal-regexp:L/g, objPHPDate.aLetterDay[nDay]);			sFormat = sFormat.replace(/y5-cal-regexp:l/g, objPHPDate.aDay[nDay]);			sFormat = sFormat.replace(/y5-cal-regexp:M/g, objPHPDate.aShortMonth[nMonth]);			sFormat = sFormat.replace(/y5-cal-regexp:m/g, sPaddedMonth);			sFormat = sFormat.replace(/y5-cal-regexp:N/g, (nDay == 0) ? 7 : nDay);			sFormat = sFormat.replace(/y5-cal-regexp:n/g, sMonth);			sFormat = sFormat.replace(/y5-cal-regexp:r/g, objPHPDate.aShortDay[nDay] + ', ' + sPaddedDate + ' ' + objPHPDate.aShortMonth[nMonth] + ' ' + sYear + ' 00:00:00 ' + objPHPDate.sTimezoneOffset.replace(/:/, ''));			sFormat = sFormat.replace(/y5-cal-regexp:S/g, objPHPDate.aSuffix[nDate]);			sFormat = sFormat.replace(/y5-cal-regexp:U/g, parseInt((this.getTime() / 1000), 10));			sFormat = sFormat.replace(/y5-cal-regexp:w/g, nDay);			sFormat = sFormat.replace(/y5-cal-regexp:Y/g, sYear);			sFormat = sFormat.replace(/y5-cal-regexp:y/g, sYear.substring(2));			return sFormat;		}	};	objPHPDate.GetTimezoneOffset();	Date.prototype.getPHPDate = objPHPDate.PHPDate;}function DateChooser(){	/* These values are defaults. Please feel free to modify them as needed. */	var nWeekStartDay = 0;	var nXOffset = 0;	var nYOffset = 0;	var nTimeout = 0;	var objAllowedDays = {'0':true, '1':true, '2':true, '3':true, '4':true, '5':true, '6':true};	var fnUpdate = null;	var sDefaultIcon = false;	var objUpdateFields = {};	var objEarliestDate = null;	var objLatestDate = null;	/* End user-editable values */	if (!arguments || !document.getElementById || !document.getElementsByTagName) return null;	var ndBodyElement = document.getElementsByTagName('body').length ? document.getElementsByTagName('body')[0] : document;	var objTimeout = null;	var ndFrame = null;	/*@cc_on@*/	/*@if(@_jscript_version < 6)		if (document.getElementById('iframehack'))		{			ndFrame = document.getElementById('iframehack');		}		else		{			ndFrame = xb.createElement('iframe');			ndFrame.id = 'iframehack';			ndFrame.src = 'javascript:null;';			ndFrame.scrolling = 'no';			ndFrame.frameBorder = 0;			ndFrame.style.border = '0';			ndFrame.style.padding = 0;			ndFrame.style.display = 'none';			ndFrame.style.position = 'absolute';			ndFrame.style.zIndex = '5000';			ndBodyElement.appendChild(ndFrame);		}	/*@end@*/	var nDateChooserID = 0;	while (document.getElementById('calendar' + nDateChooserID)) ++nDateChooserID;	var sDateChooserID = 'calendar' + nDateChooserID;	var objSelectedDate = null;	var objStartDate = new Date();	objStartDate.setHours(12);	objStartDate.setMinutes(0);	objStartDate.setSeconds(0);	objStartDate.setMilliseconds(0);	var objMonthYear = new Date(objStartDate);	objMonthYear.setDate(1);	var ndDateChooser = xb.createElement('div');	ndDateChooser.id = sDateChooserID;	ndDateChooser.className = 'calendar';	ndDateChooser.style.visibility = 'hidden';	ndDateChooser.style.position = 'absolute';	ndDateChooser.style.zIndex = '5001';	ndDateChooser.style.top = '0';	ndDateChooser.style.left = '0';	ndBodyElement.appendChild(ndDateChooser);	var AddClickEvents = function()	{		var aNavLinks = ndDateChooser.getElementsByTagName('thead')[0].getElementsByTagName('a');		for (var nNavLink = 0; aNavLinks[nNavLink]; ++nNavLink)		{			events.add(aNavLinks[nNavLink], 'click', function(e)			{				e = e || events.fix(event);				var ndClicked = e.target || e.srcElement;				if (ndClicked.nodeName == '#text') ndClicked = ndClicked.parentNode;				var sClass = ndClicked.className;				if (sClass == 'previousyear') {					objMonthYear.setFullYear(objMonthYear.getFullYear() - 1);					if (objEarliestDate && objEarliestDate.getTime() > objMonthYear.getTime())					{						objMonthYear.setMonth(objEarliestDate.getMonth());						objMonthYear.setFullYear(objEarliestDate.getFullYear());					}				} else if (sClass == 'previousmonth') {					objMonthYear.setMonth(objMonthYear.getMonth() - 1);					if (objEarliestDate && objEarliestDate.getTime() > objMonthYear.getTime())					{						objMonthYear.setMonth(objEarliestDate.getMonth());						objMonthYear.setFullYear(objEarliestDate.getFullYear());					}				} else if (sClass == 'currentdate') 	{					objMonthYear.setMonth(objStartDate.getMonth());					objMonthYear.setFullYear(objStartDate.getFullYear());				} else if (sClass == 'nextmonth') {					objMonthYear.setMonth(objMonthYear.getMonth() + 1);					if (objLatestDate && objLatestDate.getTime() < objMonthYear.getTime())					{						objMonthYear.setMonth(objLatestDate.getMonth());						objMonthYear.setFullYear(objLatestDate.getFullYear());					}				} else if (sClass == 'nextyear') {					objMonthYear.setFullYear(objMonthYear.getFullYear() + 1);					if (objLatestDate && objLatestDate.getTime() < objMonthYear.getTime())					{						objMonthYear.setMonth(objLatestDate.getMonth());						objMonthYear.setFullYear(objLatestDate.getFullYear());					}				}				RefreshDisplay();				return false;			});		}		var aDateLinks = ndDateChooser.getElementsByTagName('tbody')[0].getElementsByTagName('a');		for (var nDateLink = 0; aDateLinks[nDateLink]; ++nDateLink)		{			events.add(aDateLinks[nDateLink], 'click', function(e) {				e = e || events.fix(event);				var ndClicked = e.target || e.srcElement;				if (ndClicked.nodeName == '#text') ndClicked = ndClicked.parentNode;				for (var nLink = 0; aDateLinks[nLink]; ++nLink) {					if (aDateLinks[nLink].className == 'selecteddate') aDateLinks[nLink].removeAttribute('class');				}				var objTempDate = new Date(objMonthYear);				objTempDate.setDate(parseInt(ndClicked.childNodes[0].nodeValue, 10));				var nTime = objTempDate.getTime();				var sWeekday = objTempDate.getPHPDate('w');				delete objTempDate;				if (objEarliestDate && objEarliestDate.getTime() > nTime) return false;				if (objLatestDate && objLatestDate.getTime() < nTime) return false;				if (!objAllowedDays[sWeekday]) return false;				objMonthYear.setTime(nTime);				objMonthYear.setDate(1);				if (!objSelectedDate) objSelectedDate = new Date(nTime);				objSelectedDate.setTime(nTime);				ndClicked.className = 'selecteddate';				if (ndFrame) ndFrame.style.display = 'none';				ndDateChooser.style.visibility = 'hidden';				if (objTimeout) clearTimeout(objTimeout);				UpdateFields();				if (fnUpdate) fnUpdate(objSelectedDate);				return false;			});		}		return true;	};	var UpdateFields = function()	{		if (!objSelectedDate) return true;		for (var sFieldName in objUpdateFields) {			var ndField = document.getElementById(sFieldName);			if (ndField) ndField.value = objSelectedDate.getPHPDate(objUpdateFields[sFieldName]);		}		return true;	};	var RefreshDisplay = function() {		var ndTable, ndTHead, ndTR, ndTH, ndA, ndTBody, ndTD, nTime, sWeekday;		var sClass = '';		var objTempDate = new Date(objMonthYear);		var objToday = new Date();		objToday.setHours(12);		objToday.setMinutes(0);		objToday.setSeconds(0);		objToday.setMilliseconds(0);		ndTable = xb.createElement('table');		ndTable.setAttribute('summary', 'DateChooser');		ndTHead = xb.createElement('thead');		ndTable.appendChild(ndTHead);		ndTR = xb.createElement('tr');		ndTHead.appendChild(ndTR);		ndTH = xb.createElement('th');		ndTR.appendChild(ndTH);		ndA = xb.createElement('a');		ndA.className = 'previousyear';		ndA.setAttribute('href', '#');		ndA.setAttribute('title', 'Previous Year');		ndTH.appendChild(ndA);		ndA.appendChild(document.createTextNode(String.fromCharCode(171)));		ndTH = xb.createElement('th');		ndTR.appendChild(ndTH);		ndA = xb.createElement('a');		ndA.className = 'previousmonth';		ndA.setAttribute('href', '#');		ndA.setAttribute('title', 'Previous Month');		ndTH.appendChild(ndA);		ndA.appendChild(document.createTextNode(String.fromCharCode(60)));		ndTH = xb.createElement('th');		ndTH.setAttribute('colspan', '3');		/*@cc_on@*/		/*@if(@_jscript)			ndTH.colSpan = '3';		/*@end@*/		ndTR.appendChild(ndTH);		ndA = xb.createElement('a');		ndA.className = 'currentdate';		ndA.setAttribute('href', '#');		ndA.setAttribute('title', 'Current Date');		ndTH.appendChild(ndA);		ndA.appendChild(document.createTextNode(objMonthYear.getPHPDate("M Y")));		ndTH = xb.createElement('th');		ndTR.appendChild(ndTH);		ndA = xb.createElement('a');		ndA.className = 'nextmonth';		ndA.setAttribute('href', '#');		ndA.setAttribute('title', 'Next Month');		ndTH.appendChild(ndA);		ndA.appendChild(document.createTextNode(String.fromCharCode(62)));		ndTH = xb.createElement('th');		ndTR.appendChild(ndTH);		ndA = xb.createElement('a');		ndA.className = 'nextyear';		ndA.setAttribute('href', '#');		ndA.setAttribute('title', 'Next Year');		ndTH.appendChild(ndA);		ndA.appendChild(document.createTextNode(String.fromCharCode(187)));		ndTR = xb.createElement('tr');		ndTHead.appendChild(ndTR);		for (var nDay = 0; objPHPDate.aLetterDay[nDay]; ++nDay)		{			ndTD = xb.createElement('td');			ndTR.appendChild(ndTD);			ndTD.appendChild(document.createTextNode(objPHPDate.aLetterDay[(nWeekStartDay + nDay) % objPHPDate.aLetterDay.length]));		}		ndTBody = xb.createElement('tbody');		ndTable.appendChild(ndTBody);		while (objTempDate.getMonth() == objMonthYear.getMonth())		{			ndTR = xb.createElement('tr');			ndTBody.appendChild(ndTR);			for (nDay = 0; nDay < 7; ++nDay)			{				var nWeek = (nWeekStartDay + nDay) % objPHPDate.aLetterDay.length;				if ((objTempDate.getUTCDay() == nWeek) && (objTempDate.getMonth() == objMonthYear.getMonth()))				{					nTime = objTempDate.getTime();					sWeekday = objTempDate.getPHPDate('w');					sClass  = (objSelectedDate && (objTempDate.getTime() == objSelectedDate.getTime())) ? 'selectedday' : '';					sClass += (objTempDate.getTime() == objToday.getTime()) ? ' today' : '';					sClass  = ((sClass.length > 0) && (sClass[1] == ' ')) ? sClass.substr(1, sClass.length - 1) : sClass;					ndTD = xb.createElement('td');					if ((objEarliestDate && objEarliestDate.getTime() > nTime) || (objLatestDate && objLatestDate.getTime() < nTime) || !objAllowedDays[sWeekday]) ndTD.className = 'invalidday';					ndTR.appendChild(ndTD);					ndA = xb.createElement('a');					if (sClass.length > 0) ndA.className = sClass;					ndA.setAttribute('href', '#');					ndTD.appendChild(ndA);					ndA.appendChild(document.createTextNode(objTempDate.getDate()));					objTempDate.setDate(objTempDate.getDate() + 1);				}				else				{					ndTD = xb.createElement('td');					ndTR.appendChild(ndTD);				}			}		}		while (ndDateChooser.hasChildNodes()) ndDateChooser.removeChild(ndDateChooser.firstChild);		ndDateChooser.appendChild(ndTable);		if (ndFrame)		{			ndFrame.style.display = 'block';			ndFrame.style.top = ndDateChooser.style.top;			ndFrame.style.left = ndDateChooser.style.left;			ndFrame.style.width = (ndTable.clientWidth + 2) + 'px';			ndFrame.style.height = (ndTable.clientHeight + 4) + 'px';		}		AddClickEvents();		delete objTempDate;		delete objToday;		return true;	};	var DisplayDateChooser = function()	{		var sPositionX = (arguments.length > 0) ? arguments[0] : 'auto';		var sPositionY = (arguments.length > 1) ? arguments[1] : 'auto';		var ndStyle = ndDateChooser.style;		ndStyle.top = sPositionY + '';		ndStyle.left = sPositionX + '';		ndDateChooser.style.visibility = 'visible';		if (objTimeout) clearTimeout(objTimeout);		if (objSelectedDate)		{			objMonthYear.setTime(objSelectedDate.getTime());		}		else		{			objMonthYear.setTime(objStartDate.getTime());		}		objMonthYear.setHours(12);		objMonthYear.setMinutes(0);		objMonthYear.setSeconds(0);		objMonthYear.setMilliseconds(0);		objMonthYear.setDate(1);		return RefreshDisplay();	};	var GetPosition = function(ndNode) {		var nTop = 0, nLeft = 0;		if (ndNode.offsetParent) {			nTop = ndNode.offsetTop;			nLeft = ndNode.offsetLeft;			while (ndNode.offsetParent) {				ndNode = ndNode.offsetParent;				nTop += ndNode.offsetTop;				nLeft += ndNode.offsetLeft;				if (ndNode.id=="content") { nTop -= ndNode.scrollTop } ;				// ADDED BY MARK TO EXIT AT PARENT DIV			}		}		return ({'top' : nTop, 'left' : nLeft});	};	this.displayPosition = function()	{		var sPositionX = (arguments.length > 0) ? arguments[0] : 'auto';		var sPositionY = (arguments.length > 1) ? arguments[1] : 'auto';		return DisplayDateChooser(sPositionX, sPositionY);	};	this.display = function(e)	{		e = e || events.fix(event);		var ndClicked = e.target || e.srcElement;		if (ndClicked.nodeName == '#text') ndClicked = ndClicked.parentNode;		var objPosition = GetPosition(ndClicked);		DisplayDateChooser(objPosition.left + nXOffset + 'px', objPosition.top + nYOffset + 'px');		return false;	};	this.setXOffset = function()	{		nXOffset = ((arguments.length > 0) && (typeof(arguments[0]) == 'number')) ? parseInt(arguments[0], 10) : nXOffset;		return true;	};	this.setYOffset = function()	{		nYOffset = ((arguments.length > 0) && (typeof(arguments[0]) == 'number')) ? parseInt(arguments[0], 10) : nYOffset;		return true;	};	this.setCloseTime = function()	{		nTimeout = ((arguments.length > 0) && (typeof(arguments[0]) == 'number') && (arguments[0] >= 0)) ? arguments[0] : nTimeout;		return true;	};	this.setUpdateFunction = function()	{		if ((arguments.length > 0) && (typeof(arguments[0]) == 'function')) fnUpdate = arguments[0];		return true;	};	this.setUpdateField = function()	{		objUpdateFields = {};		if ((typeof(arguments[0]) == 'string') && (typeof(arguments[1]) == 'string') && document.getElementById(arguments[0])) {			objUpdateFields[arguments[0]] = arguments[1];					}		else if ((typeof(arguments[0]) == 'object') && (typeof(arguments[1]) == 'object')) {			for (var nField = 0; arguments[0][nField] !== undefined; ++nField)			{				if (nField >= arguments[1].length) break;				objUpdateFields[arguments[0][nField]] = arguments[1][nField];			}		}		else if (typeof(arguments[0]) == 'object')		{			objUpdateFields = arguments[0];		}		return true;	};	this.setOnEntry = function() {		this.setYOffset(20)		arguments[0].onclick = this.display;		return true;	}	this.setLink = function()	{		var sLinkText = ((arguments.length > 0) && (typeof(arguments[0]) == 'string')) ? arguments[0] : 'Choose a date';		var ndNode = ((arguments.length > 1) && (typeof(arguments[1]) == 'string')) ? document.getElementById(arguments[1]) : null;		var bPlaceRight = ((arguments.length <= 2) || arguments[2]);		var sTitleText = ((arguments.length > 3) && (typeof(arguments[3]) == 'string')) ? arguments[3] : 'Click to choose a date';		if (!ndNode) return false;		var ndAnchor = xb.createElement('a');		ndAnchor.className = 'calendarlink';		ndAnchor.href = '#';		if (sTitleText.length > 0) ndAnchor.setAttribute('title', sTitleText);		ndAnchor.appendChild(document.createTextNode(sLinkText));		if (bPlaceRight)		{			if (ndNode.nextSibling)			{				ndNode.parentNode.insertBefore(ndAnchor, ndNode.nextSibling);			}			else			{				ndNode.parentNode.appendChild(ndAnchor);			}		}		else		{			ndNode.parentNode.insertBefore(ndAnchor, ndNode);		}		events.add(ndAnchor, 'click', this.display);		return true;	};	this.setIcon = function()	{		var sIconFile = ((arguments.length > 0) && (typeof(arguments[0]) == 'string')) ? arguments[0] : sDefaultIcon;		var ndNode = ((arguments.length > 1) && (typeof(arguments[1]) == 'string')) ? document.getElementById(arguments[1]) : null;		var bPlaceRight = ((arguments.length <= 2) || arguments[2]);		var sTitleText = ((arguments.length > 3) && (typeof(arguments[3]) == 'string')) ? arguments[3] : 'Click to choose a date';		if (!ndNode || !sIconFile) return false;		var ndIcon = xb.createElement('img');		ndIcon.className = 'calendaricon';		ndIcon.src = sIconFile;		ndIcon.setAttribute('alt', 'DateChooser Icon ' + (nDateChooserID + 1));		if (sTitleText.length > 0) ndIcon.setAttribute('title', sTitleText);		if (bPlaceRight)		{			if (ndNode.nextSibling)			{				ndNode.parentNode.insertBefore(ndIcon, ndNode.nextSibling);			}			else			{				ndNode.parentNode.appendChild(ndIcon);			}		}		else		{			ndNode.parentNode.insertBefore(ndIcon, ndNode);		}		events.add(ndIcon, 'click', this.display);		return true;	};	this.setStartDate = function()	{		if (!arguments.length || !(typeof(arguments[0]) == 'object') || !arguments[0].getTime) return false;		objStartDate.setTime(arguments[0].getTime());		objStartDate.setHours(12);		objStartDate.setMinutes(0);		objStartDate.setSeconds(0);		objStartDate.setMilliseconds(0);		if (objEarliestDate && objEarliestDate.getTime() > objStartDate.getTime())		{			objStartDate.setTime(objEarliestDate.getTime());		}		else if (objLatestDate && objLatestDate.getTime() < objStartDate.getTime())		{			objStartDate.setTime(objLatestDate.getTime());		}		objMonthYear.setMonth(objStartDate.getMonth());		objMonthYear.setFullYear(objStartDate.getFullYear());		if (!objSelectedDate) objSelectedDate = new Date(objStartDate);		objSelectedDate.setTime(objStartDate);		return true;	};	this.setEarliestDate = function()	{		if (!arguments.length || (typeof(arguments[0]) != 'object') || !arguments[0].getTime) return false;		objEarliestDate = new Date();		objEarliestDate.setTime(arguments[0].getTime());		objEarliestDate.setHours(12);		objEarliestDate.setMinutes(0);		objEarliestDate.setSeconds(0);		objEarliestDate.setMilliseconds(0);		if (objEarliestDate.getTime() > objStartDate.getTime())		{			objStartDate.setTime(objEarliestDate.getTime());			objMonthYear.setMonth(objEarliestDate.getMonth());			objMonthYear.setFullYear(objEarliestDate.getFullYear());		}		if (objSelectedDate && (objEarliestDate.getTime() > objSelectedDate.getTime()))		{			objSelectedDate.setTime(objEarliestDate.getTime());			objMonthYear.setMonth(objEarliestDate.getMonth());			objMonthYear.setFullYear(objEarliestDate.getFullYear());		}		return true;	};	this.setLatestDate = function()	{		if (!arguments.length || !(typeof(arguments[0]) == 'object') || !arguments[0].getTime) return false;		objLatestDate = new Date();		objLatestDate.setTime(arguments[0].getTime());		objLatestDate.setHours(12);		objLatestDate.setMinutes(0);		objLatestDate.setSeconds(0);		objLatestDate.setMilliseconds(0);		if (objLatestDate.getTime() < objStartDate.getTime())		{			objStartDate.setTime(objLatestDate.getTime());			objMonthYear.setMonth(objLatestDate.getMonth());			objMonthYear.setFullYear(objLatestDate.getFullYear());		}		if (objSelectedDate && (objLatestDate.getTime() < objSelectedDate.getTime()))		{			objSelectedDate.setTime(objLatestDate.getTime());			objMonthYear.setMonth(objLatestDate.getMonth());			objMonthYear.setFullYear(objLatestDate.getFullYear());		}		return true;	};	this.setAllowedDays = function()	{		if (!arguments.length || !(typeof(arguments[0]) == 'object')) return false;		var nCount;		for (nCount = 0; nCount < 7; ++nCount)		{			objAllowedDays[nCount + ''] = false;		}		for (nCount = 0; arguments[0][nCount] !== undefined; ++nCount)		{			objAllowedDays[arguments[0][nCount] + ''] = true;		}		return true;	};	this.setWeekStartDay = function()	{		if (!arguments.length || !(typeof(arguments[0]) == 'number')) return false;		var nNewStartDay = parseInt(arguments[0], 10);		if ((nNewStartDay < 0) || (nNewStartDay > 6)) return false;		nWeekStartDay = nNewStartDay;		return true;	};	this.getSelectedDate = function()	{		return objSelectedDate;	};	this.setSelectedDate = function(objDate)	{		if (!objSelectedDate) objSelectedDate = new Date(objDate);		objSelectedDate.setTime(objDate.getTime());		objSelectedDate.setHours(12);		objSelectedDate.setMinutes(0);		objSelectedDate.setSeconds(0);		objSelectedDate.setMilliseconds(0);		UpdateFields();		return true;	};	this.updateFields = function()	{		return UpdateFields();	};	var clickWindow = function(e)	{		e = e || events.fix(event);		var ndTarget = e.target || e.srcElement;		if (ndTarget.nodeName == '#text') ndTarget = ndTarget.parentNode;		while (ndTarget && (ndTarget != document))		{			if (ndTarget.className == 'calendar') return true;			ndTarget = ndTarget.parentNode;		}		for (var nCount = 0; nCount <= nDateChooserID; ++nCount)		{			if (ndFrame) ndFrame.style.display = 'none';			document.getElementById('calendar' + nCount).style.visibility = 'hidden';		}		return true;	};	var mouseoverDateChooser = function()	{		if (objTimeout) clearTimeout(objTimeout);		return true;	};	var mouseoutDateChooser = function()	{		if (nTimeout > 0) objTimeout = setTimeout('document.getElementById("' + sDateChooserID + '").style.visibility = "hidden"; if (document.getElementById("iframehack")) document.getElementById("iframehack").style.display = "none";', nTimeout);		return true;	};	events.add(ndDateChooser, 'mouseover', mouseoverDateChooser);	events.add(ndDateChooser, 'mouseout', mouseoutDateChooser);	events.add(document, 'mousedown', clickWindow);	return true;}if (!Array.prototype.push){	Array.prototype.push = function()	{		for (var nCount = 0; arguments[nCount] !== undefined; nCount++)		{			this[this.length] = arguments[nCount];		}		return this.length;	};}if (!xb){	var xb =	{		createElement: function(sElement)		{			if (document.createElementNS) return document.createElementNS('http://www.w3.org/1999/xhtml', sElement);			if (document.createElement) return document.createElement(sElement);			return null;		},		getElementsByAttribute: function(ndNode, sAttributeName, sAttributeValue)		{			var aReturnElements = [];			if (!ndNode.all && !ndNode.getElementsByTagName) return aReturnElements;			var rAttributeValue = RegExp('(^|\\s)' + sAttributeValue + '(\\s|$)');			var sValue, aElements = ndNode.all || ndNode.getElementsByTagName('*');			for (var nIndex = 0; aElements[nIndex]; ++nIndex)			{				if (!aElements[nIndex].getAttribute) continue;				sValue = (sAttributeName == 'class') ? aElements[nIndex].className : aElements[nIndex].getAttribute(sAttributeName);				if ((typeof(sValue) != 'string') || (sValue.length == 0)) continue;				if (rAttributeValue.test(sValue)) aReturnElements.push(aElements[nIndex]);			}			return aReturnElements;		},		getOption: function(ndNode, sOption)		{			var sText = ndNode.getAttribute(sOption);			if (sText) return sText;			var sDefault = (arguments.length == 3) ? arguments[2] : false;			var aMatch = ndNode.className.match(RegExp('(?:^|\\s)' + sOption + '=(?:\\\'|\\\")([^\\\'\\\"]+)(?:\\\'|\\\"|$)'));			return aMatch ? aMatch[1] : sDefault;		}	};}// This is a variation of the addEvent script written by Dean Edwards (dean.edwards.name).if (!events){	var events =	{		nEventID: 1,		add: function(ndElement, sType, fnHandler)		{			if (!fnHandler.$$nEventID) fnHandler.$$nEventID = this.nEventID++;			if (ndElement.objEvents === undefined) ndElement.objEvents = {};			var aHandlers = ndElement.objEvents[sType];			if (!aHandlers)			{				aHandlers = ndElement.objEvents[sType] = {};				if (ndElement['on' + sType]) aHandlers[0] = ndElement['on' + sType];			}			aHandlers[fnHandler.$$nEventID] = fnHandler;			ndElement['on' + sType] = this.handle;			return true;		},		handle: function(e)		{			e = e || events.fix(event);			var bReturn = true, aHandlers = this.objEvents[e.type];			for (var nIndex in aHandlers)			{				this.$$handle = aHandlers[nIndex];				if (this.$$handle(e) === false) bReturn = false;			}			return bReturn;		},		fix: function(e)		{			e.preventDefault = this.fix.preventDefault;			e.stopPropagation = this.fix.stopPropagation;			return e;		}	};	events.fix.preventDefault = function()	{		this.returnValue = false;		return true;	}	events.fix.stopPropagation = function()	{		this.cancelBubble = true;		return true;	}}function initcal() {	var ndDateChooser, ndElement, sLastID, sLinkID, objUpdateField, objDate, aPatternNodes;	var sDateFormat, sIcon, sText, sXOffset, sYOffset, sCloseTime, sOnUpdate, sStartDate, sEarliestDate, sLatestDate, sAllowedDays, sWeekStartDay, sLinkPosition, sOnEntry;	var nFieldID = 0;	objDate = new Date();	objDate.setHours(12);	objDate.setMinutes(0);	objDate.setMilliseconds(0);	var aElements = xb.getElementsByAttribute(document, 'class', 'datechooser');	for (var nIndex = 0; aElements[nIndex]; ++nIndex) 	{		ndDateChooser = aElements[nIndex];		if (!ndDateChooser.id) ndDateChooser.id = 'dc-id-' + (++nFieldID);		sLastID = ndDateChooser.id;		sDateFormat = xb.getOption(ndDateChooser, 'dc-dateformat');		sIcon = xb.getOption(ndDateChooser, 'dc-iconlink');		sText = xb.getOption(ndDateChooser, 'dc-textlink');		sXOffset = xb.getOption(ndDateChooser, 'dc-offset-x');		sYOffset = xb.getOption(ndDateChooser, 'dc-offset-y');		sCloseTime = xb.getOption(ndDateChooser, 'dc-closetime');		sOnUpdate = xb.getOption(ndDateChooser, 'dc-onupdate');		sStartDate = xb.getOption(ndDateChooser, 'dc-startdate');		sEarliestDate = xb.getOption(ndDateChooser, 'dc-earliestdate');		sLatestDate = xb.getOption(ndDateChooser, 'dc-latestdate');		sAllowedDays = xb.getOption(ndDateChooser, 'dc-alloweddays');		sWeekStartDay = xb.getOption(ndDateChooser, 'dc-weekstartday');		sLinkPosition = xb.getOption(ndDateChooser, 'dc-linkposition');		sOnEntry = xb.getOption(ndDateChooser, 'dc-onentry');						if (sLinkPosition) sLinkID = ndDateChooser.id;		objUpdateField = {};		if (sDateFormat) objUpdateField[ndDateChooser.id] = sDateFormat;		aPatternNodes = ndDateChooser.all || ndDateChooser.getElementsByTagName('*');		for (var nPattern = 0; aPatternNodes[nPattern]; ++nPattern) {			ndElement = aPatternNodes[nPattern];			sDateFormat = xb.getOption(ndElement, 'dc-dateformat');			if (!sDateFormat) continue;			if (!ndElement.id) ndElement.id = 'dc-id-' + (++nFieldID);			sLastID = ndElement.id;			objUpdateField[sLastID] = sDateFormat;			if (!sLinkPosition) xb.getOption(ndElement, 'dc-linkposition');			if (sLinkPosition) sLinkID = sLastID;		}		if (!sLinkPosition) {			sLinkID = sLastID;			sLinkPosition = 'right';		}		ndDateChooser.DateChooser = new DateChooser();		if (sXOffset) ndDateChooser.DateChooser.setXOffset(sXOffset);		if (sYOffset) ndDateChooser.DateChooser.setYOffset(sYOffset);		if (sCloseTime) ndDateChooser.DateChooser.setCloseTime(sCloseTime);		if (sOnUpdate) ndDateChooser.DateChooser.setUpdateFunction(eval(sOnUpdate));		if (sStartDate) {			objDate = new Date();			objDate.setDate(parseInt(sStartDate.substring(2, 4), 10));			objDate.setMonth(parseInt(sStartDate.substring(0, 2), 10) - 1);			objDate.setFullYear(parseInt(sStartDate.substring(4), 10));			ndDateChooser.DateChooser.setStartDate(objDate);		}		if (sEarliestDate) {			objDate = new Date();			objDate.setDate(parseInt(sEarliestDate.substring(2, 4), 10));			objDate.setMonth(parseInt(sEarliestDate.substring(0, 2), 10) - 1);			objDate.setFullYear(parseInt(sEarliestDate.substring(4), 10));			ndDateChooser.DateChooser.setEarliestDate(objDate);		}		if (sLatestDate) {			objDate = new Date();			objDate.setDate(parseInt(sLatestDate.substring(2, 4), 10));			objDate.setMonth(parseInt(sLatestDate.substring(0, 2), 10) - 1);			objDate.setFullYear(parseInt(sLatestDate.substring(4), 10));			ndDateChooser.DateChooser.setLatestDate(objDate);		}		if (sAllowedDays) ndDateChooser.DateChooser.setAllowedDays(sAllowedDays.split(','));		if (sWeekStartDay) ndDateChooser.DateChooser.setWeekStartDay(parseInt(sWeekStartDay, 10));		if (sIcon) ndDateChooser.DateChooser.setIcon(sIcon, sLinkID, (sLinkPosition != 'left'));		if (sText) ndDateChooser.DateChooser.setLink(sText, sLinkID, (sLinkPosition != 'left'));		if (sOnEntry) ndDateChooser.DateChooser.setOnEntry(ndDateChooser);		ndDateChooser.DateChooser.setUpdateField(objUpdateField);	}	delete objDate;	return true;};Event.observe(window, 'load', function() { initcal() })