/*
PRODUCT: 	FS JavaScript Popup Date Selector - version 2.01
COPYRIGHT:	June 2004 (c) Future Shock Ltd.
CONTACT:	post@future-shock.net
COMPATIBILITY:
	PC (WinXP):	Internet Explorer 4/5/5.5/6, Netscape 4.78/7, Mozilla Firefox 0.8, Opera 7
	Mac (OS9):	Internet Explorer 5.1, Netscape 7.1
	Max (OSX):	Internet Explorer 5.2, Netscape 7.1,Safari 125

This product is NOT freeware or shareware, to use it without licence is breach of copyright and will be prosecuted.
Once a licence is purchased you may amend the CSS and image resources to style the product to your requirements.
*/

// CONFIGURATION VARIABLES
var FSintFormatMode=1; // date format: 1=dd/mm/yyyy, 0=mm/dd/yyyy (may be overidded in the HTML call to FSfncShowDateSelector)
var FSintLocalText=0; // Localization Text : 0 = English, 1 = Thai;

// PRIVATE VARIABLES - Do not amend anything below this line!
var FSstrImagePathvar;
var FSblnDisableNone;
var FSobjDateRef;
var FSobjSelectorRef;
var FSobjCalendarArea;
var FSobjDateTable;
var FSdtToday;
var FSintOneMinute=60 * 1000;
var FSintOneHour=FSintOneMinute * 60;
var FSintOneDay=FSintOneHour * 24;
var FSintSelectedDay=0;
var FSintSelectedMonth=0;
var FSintSelectedYear=0;
var FSintCurrentMonth=0;
var FSintCurrentYear=0;

if (navigator.userAgent.indexOf("Gecko")>0) {
	FSstrBrowser="Gecko";
	document.onclick=FSfncHideDateSelector;
	}
else {
	FSstrBrowser="IE";
	document.onclick=function() {FSfncHideDateSelector(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 FSfncShowDateSelector(DateRef,EventRef,DisableNone) {
	if (document.getElementById) {
		FSblnDisableNone=DisableNone;
		if (!FSobjSelectorRef) {
			// first show tasks
			FSdtToday=new Date();
			FSdtToday.setHours(0,0,0,0);
			FSfncWriteSelectorHTML();
			FSobjSelectorRef=document.getElementById("FSdateSelector");
			FSobjCalendarArea=document.getElementById("FScalendarArea");
			}
		FSobjDateTable=document.getElementById(DateRef.name + "FStable");
		FSobjDateRef=DateRef;
		FSintSelectedDay=0;
		
		if (FSobjDateRef.value=="None") {
			var arrCurrentDate=FSfncDateToString(FSdtToday).split("/");
			FSintSelectedMonth=arrCurrentDate[0 + FSintFormatMode] - 1;
			}
		else {
			var arrCurrentDate=FSobjDateRef.value.split("/");
			FSintSelectedDay=arrCurrentDate[1 - FSintFormatMode];
			FSintSelectedMonth=arrCurrentDate[0 + FSintFormatMode] - 1;
			}
		FSintSelectedYear=arrCurrentDate[2];
		FSintCurrentMonth=parseInt(FSintSelectedMonth,10);
		FSintCurrentYear=parseInt(FSintSelectedYear,10);
		document.FSdateSelectorForm.FScurrentMonth.selectedIndex=FSintCurrentMonth;
		document.FSdateSelectorForm.FScurrentYear.value=FSintCurrentYear;
		FSfncCreateCalendarArea(FSintSelectedDay,FSintCurrentMonth,FSintCurrentYear);
		if (FSstrBrowser=="Gecko") {
			FSobjSelectorRef.style.left=EventRef.clientX - 90;
			FSobjSelectorRef.style.top=EventRef.clientY + 8;
			}
	    else if (navigator.userAgent.indexOf("MSIE 7.0")>0) {
	        FSobjSelectorRef.style.left=EventRef.clientX - EventRef.offsetX - 82 + document.body.scrollLeft;
			FSobjSelectorRef.style.top=EventRef.clientY - EventRef.offsetY + 16 + document.body.scrollTop;
			}
		else {
			FSobjSelectorRef.style.left=EventRef.clientX - EventRef.offsetX - 82 + document.body.scrollLeft;
			FSobjSelectorRef.style.top=EventRef.clientY - EventRef.offsetY + 16 + document.body.scrollTop;
			}
			showhidebelow(FSobjSelectorRef,true,"FScurrentMonth");
		FSobjSelectorRef.style.visibility="visible";		
		}
	}

function FSfncHideDateSelector(TheEvent) {    
	if (FSobjSelectorRef) {
		if (FSstrBrowser=="Gecko") {
			if (TheEvent) {
				var rel = TheEvent.target;
				while (rel) {if (rel.id=="FSdateSelector") {break} else {rel=rel.parentNode}}
				}
			if (!rel) {FSobjSelectorRef.style.visibility="hidden"}
			return;
			}
		else {
			if ((TheEvent)) {
				// check not clicked on calendar
				if ((TheEvent.clientX+document.body.scrollLeft>FSobjSelectorRef.style.posLeft+1) &&
					(TheEvent.clientX+document.body.scrollLeft<FSobjSelectorRef.style.posLeft+FSobjSelectorRef.style.posWidth+10) &&
					(TheEvent.clientY+document.body.scrollTop>FSobjSelectorRef.style.posTop+1) &&
					(TheEvent.clientY+document.body.scrollTop<FSobjSelectorRef.style.posTop+FSobjSelectorRef.style.posHeight+2)
					) {return}
				// check not clicked on icon
				if ((TheEvent.clientX+document.body.scrollLeft>FSobjSelectorRef.style.posLeft+81) &&
					(TheEvent.clientX+document.body.scrollLeft<FSobjSelectorRef.style.posLeft+99) &&
					(TheEvent.clientY+document.body.scrollTop>FSobjSelectorRef.style.posTop-17) &&
					(TheEvent.clientY+document.body.scrollTop<FSobjSelectorRef.style.posTop)
					) {return}
				}
				showhidebelow(FSobjSelectorRef,false,"FScurrentMonth");
			FSobjSelectorRef.style.visibility="hidden";
			}
		}
	else {FSobjSelectorRef=false}
	}

function FSfncCreateCalendarArea(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() - (FSintOneDay * OffsetDays));
	var dtCalendarEnd=new Date(dtCalendarStart.getTime() + (FSintOneDay * 41));
	var strCalendar="<TABLE BORDER='0' CELLPADDING='2' CELLSPACING='0' CLASS='FScalendar'>";
	strCalendar+="<TR CLASS='FScalendarTitles' ALIGN='center'><TD WIDTH='22'>Mon</TD><TD WIDTH='22'>Tue</TD><TD WIDTH='22'>Wed</TD><TD WIDTH='22'>Thu</TD><TD WIDTH='22'>Fri</TD><TD WIDTH='22'>Sat</TD><TD WIDTH='22'>Sun</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() + (FSintOneDay * i));
		if (dtTheDay.getTime()==FSdtToday.getTime()) {
			if ((dtTheDay.getMonth()==FSintSelectedMonth) && (dtTheDay.getDate()==FSintSelectedDay) && (dtTheDay.getFullYear()==FSintSelectedYear)) {StyleString+="background-image: url(" + FSstrImagePath + "today_selected.gif); background-repeat:no-repeat; "}
			else {StyleString+="background-image: url(" + FSstrImagePath + "today.gif); background-repeat:no-repeat; "}
			}
		else if ((dtTheDay.getMonth()==FSintSelectedMonth) && (dtTheDay.getDate()==FSintSelectedDay) && (dtTheDay.getFullYear()==FSintSelectedYear)) {StyleString+="background-image: url(" + FSstrImagePath + "selected.gif); background-repeat:no-repeat; "}
		if (dtTheDay.getMonth()!=TheMonth) {var LinkClass="FSnotInMonth"} else {var LinkClass="FSinMonth"}
		strCalendar+="<TD STYLE='" + StyleString + "'><A HREF='Javascript: void FSfncSetDate(\"" + FSfncDateToString(dtTheDay) + "\")' CLASS='" + LinkClass + "'>" + dtTheDay.getDate() + "</A></TD>";
		if (i%7==6) {strCalendar+="</TR>"}
		}
	strCalendar+="</TABLE>";
	FSobjCalendarArea.innerHTML=strCalendar;
	}

function FSfncSetDate(TheDate) {
	if ((TheDate=="None") && (FSblnDisableNone==true)) {alert("This date cannot be set to None."); return false}
	FSintSelectedDay=0;
	FSobjDateRef.value=TheDate;
	FSfncHideDateSelector();
	}

function FSfncAdvanceDate(Adjuster) {
	if ((Adjuster==12) || (Adjuster==-12)) {FSintCurrentYear=FSintCurrentYear + (Adjuster / 12)}
	else {
		FSintCurrentMonth=FSintCurrentMonth + Adjuster;
		if (FSintCurrentMonth==-1) {FSintCurrentMonth=11; FSintCurrentYear--}
		if (FSintCurrentMonth==12) {FSintCurrentMonth=0; FSintCurrentYear++}
		}
	document.FSdateSelectorForm.FScurrentMonth.selectedIndex=FSintCurrentMonth;
	document.FSdateSelectorForm.FScurrentYear.value=FSintCurrentYear;
	FSfncCreateCalendarArea(FSintSelectedDay,FSintCurrentMonth,FSintCurrentYear);
	}

function FSfncChangeMonth(Adjuster) {
	FSintCurrentMonth=Adjuster-1;
	FSfncCreateCalendarArea(FSintSelectedDay,FSintCurrentMonth,FSintCurrentYear);
	}

function FSfncDateToString(TheDate) {
	if (FSintFormatMode==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 FSfncCheckDate(thisDateField) {if (!FSfncCheckDateFormat(thisDateField.value)) {alert("Date is not valid"); thisDateField.value=thisDateField.defaultValue}}

function FSfncCheckDateFormat(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 - FSintFormatMode],10)<1) || (parseInt(ArrayDate[1 - FSintFormatMode],10)>daysInMonth[parseInt(ArrayDate[0 + FSintFormatMode],10)])) {return false}
	if ((parseInt(ArrayDate[0 + FSintFormatMode],10)==2) && (parseInt(ArrayDate[1 - FSintFormatMode],10)>FSfncDaysInFebruary(parseInt(ArrayDate[2],10)))) {return false}
	if ((parseInt(ArrayDate[0 + FSintFormatMode],10)<1) || (parseInt(ArrayDate[0 + FSintFormatMode],10)>12)) {return false}
	return true;
	}

function FSfncDaysInFebruary(year) {return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 )}

function FSfncWriteSelectorHTML() {
	var selectorHTML='' +
		'<FORM ACTION="#" METHOD="GET" NAME="FSdateSelectorForm" onSubmit="return false">' +
		'<TABLE BORDER="0" CELLPADDING="1" CELLSPACING="0" WIDTH="188" HEIGHT="178" ID="FSdateSelector" STYLE="width:190px; height:180px">' +
		'<TR HEIGHT="22" CLASS="FSbuttonsRow">' +
		'<TD WIDTH="30" ALIGN="left"><INPUT TYPE="image" SRC="' + FSstrImagePath + 'but_prev.gif" WIDTH="18" HEIGHT="18" HSPACE="1" onClick="FSfncAdvanceDate(-1)"></TD>' +
		'<TD>' +
		'<SELECT id="FScurrentMonth" NAME="FScurrentMonth" CLASS="FSmonthRolldown" onChange="FSfncChangeMonth(this.selectedIndex + 1)">';
	if(FSintLocalText==0)
	{
		selectorHTML = selectorHTML + '<OPTION>January</OPTION>' +
		'<OPTION>February</OPTION>' +
		'<OPTION>March</OPTION>' +
		'<OPTION>April</OPTION>' +
		'<OPTION>May</OPTION>' +
		'<OPTION>June</OPTION>' +
		'<OPTION>July</OPTION>' +
		'<OPTION>August</OPTION>' +
		'<OPTION>September</OPTION>' +
		'<OPTION>October</OPTION>' +
		'<OPTION>November</OPTION>' +
		'<OPTION>December</OPTION>';
	}
	else if(FSintLocalText==1)
	{
	    selectorHTML = selectorHTML + '<OPTION>มกราคม</OPTION>' +
		'<OPTION>กุมภาพันธ์</OPTION>' +
		'<OPTION>มีนาคม</OPTION>' +
		'<OPTION>เมษายน</OPTION>' +
		'<OPTION>พฤษภาคม</OPTION>' +
		'<OPTION>มิถุนายน</OPTION>' +
		'<OPTION>กรกฎาคม</OPTION>' +
		'<OPTION>สิงหาคม</OPTION>' +
		'<OPTION>กันยายน</OPTION>' +
		'<OPTION>ตุลาคม</OPTION>' +
		'<OPTION>พฤษจิกายน</OPTION>' +
		'<OPTION>ธันวาคม</OPTION>';
	}
		selectorHTML = selectorHTML + '</SELECT>' +
		'</TD>' +
		'<TD><INPUT TYPE="text" NAME="FScurrentYear" VALUE="2004" onkeydown="FSintCurrentYear=this.value;FSfncAdvanceDate(0);" onchange="FSintCurrentYear=this.value;FSfncAdvanceDate(0);" CLASS="FSyearInput"></TD>' +
		'<TD><INPUT TYPE="image" SRC="' + FSstrImagePath + 'but_yeard.gif" WIDTH="18" HEIGHT="9" onClick="FSfncAdvanceDate(12)"><BR><INPUT TYPE="image" SRC="' + FSstrImagePath + 'but_yearu.gif" WIDTH="18" HEIGHT="9" onClick="FSfncAdvanceDate(-12)"></TD>' +
		'<TD WIDTH="30" ALIGN="right"><INPUT TYPE="image" SRC="' + FSstrImagePath + 'but_next.gif" WIDTH="18" HEIGHT="18" HSPACE="1" onClick="FSfncAdvanceDate(1)"></TD>' +
		'</TR>' +
		'<TR HEIGHT="133" BGCOLOR="#FFFFFF"><TD COLSPAN="5" ALIGN="center" ID="FScalendarArea"></TD></TR>' +
		'<TR HEIGHT="22" CLASS="FSbuttonsRow">' +
		'<TD COLSPAN="5">' +
		'<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%">' +
		'<TR>' +
		'<TD ALIGN="left"><INPUT TYPE="image" SRC="' + FSstrImagePath + '/but_today.gif" WIDTH="38" HEIGHT="18" HSPACE="1" onClick="FSfncSetDate(FSfncDateToString(FSdtToday))"></TD>' +
		'<TD ALIGN="center" ID="FSdateToday">Today: ' + FSfncDateToString(FSdtToday) + '</TD>' +
		'<TD ALIGN="right"><INPUT TYPE="image" SRC="' + FSstrImagePath + 'but_none.gif" WIDTH="38" HEIGHT="18" HSPACE="1" onClick="FSfncSetDate(\'None\')"></TD>' +
		'</TR>' +
		'</TABLE>' +
		'</TD>' +
		'</TR>' +
		'</TABLE>' +
		'</FORM>';
	document.body.insertAdjacentHTML("BeforeEnd",selectorHTML)
	}

function FSfncWriteFieldHTML(FormName,FieldName,FieldValue,FieldWidth,ImagePath,DisableNone,UseOnClick) {
	FSstrImagePath=ImagePath;
	if (FSstrImagePath.charAt(FSstrImagePath.length)!="/") {FSstrImagePath=FSstrImagePath + "/"};
	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="FSdateSelect" ID="' + FieldName + 'FStable" WIDTH="' + FieldWidth + '" HEIGHT="22" STYLE="width:' + FieldWidth + 'px">' +
			'<TR>' +
			'<TD><INPUT TYPE="text" ID="' + FieldName + '" NAME="' + FieldName + '" VALUE="' + FieldValue + '" CLASS="FSdateField" SIZE="9" MAXLENGTH="10" onChange="FSfncCheckDate(this)" READONLY></TD>' +
			//'<TD ALIGN="right"><IMG SRC="' + FSstrImagePath + 'calendar.gif" HEIGHT="16" WIDTH="16" HSPACE="3" ' + ActionEvent + '="FSfncShowDateSelector(document.' + FormName + '.' + FieldName + ',event,' + DisableNone + ')" STYLE="cursor:hand"></TD>' +
			'<TD ALIGN="right"><IMG SRC="' + FSstrImagePath + 'calendar.gif" HEIGHT="16" WIDTH="16" HSPACE="3" ' + ActionEvent + '="FSfncShowDateSelector(' + 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="FSfncCheckDate(this)" STYLE="width:' + FieldWidth + 'px; height:22px">'
		
		document.write(formFieldHTML);
		}
	}


function showhidebelow(el,bHide,objshow) {
	var tags = new Array("applet", "iframe", "select");
	//var el = this.element;

	var p = getAbsolutePos(el);
	var EX1 = p.x;
	var EX2 = el.offsetWidth + EX1;
	var EY1 = p.y;
	var EY2 = el.offsetHeight + EY1;

	for (var k = tags.length; k > 0; ) {
		var ar = document.getElementsByTagName(tags[--k]);
		var cc = null;

		for (var i = ar.length; i > 0;) {
			cc = ar[--i];

			p = getAbsolutePos(cc);
			var CX1 = p.x;
			var CX2 = cc.offsetWidth + CX1;
			var CY1 = p.y;
			var CY2 = cc.offsetHeight + CY1;
            
            if (this.hidden || (CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 < EY1)) {
			    cc.style.visibility = "visible";
		    } else {
			    cc.style.visibility = bHide?"hidden":"visible";
		    }
		}
	}
	
	var obj = document.getElementById(objshow);
	if(obj)
	    obj.style.visibility = "Inherit";
}

function getAbsolutePos(el) 
{
	var r = { x: el.offsetLeft, y: el.offsetTop };
	if (el.offsetParent) {
		var tmp = getAbsolutePos(el.offsetParent);
		r.x += tmp.x;
		r.y += tmp.y;
	}
	return r;
}

function addparamtourl(obj)
{
    var url = location.href;
    
    if(url.indexOf(obj.id)>0)
    {
        sp = url.indexOf(obj.id);
        ep = url.length;
        if(url.indexOf("&",sp));
            ep = url.indexOf("&",sp);
        url = url.substring(sp-1,ep);
    }
    
    url = url + '&' + obj.id + '=' + obj.value;
    location.href = url;
}
<!-- Future Shock - Server 1 -->

