//	written	by Tan Ling	Wee	on 2 Dec 2001
//	last updated 10 Apr 2002
//	email :	fuushikaden@yahoo.com
//  Modified (very little) by Sai on 01/02/05
//  email :	sai_freelance@yahoo.com

	var	fixedX = -1 // x position (-1 if to appear below control)
	var	fixedY = -1 // y position (-1 if to appear below control)
	var startAt = 0			// 0 - sunday ; 1 - monday
	var showWeekNumber = 1	// 0 - don't show; 1 - show
	var showToday = 1	// 0 - don't show; 1 - show		
	var imgDir = "http://singapore.travok.com/images/"	// directory for images
	var selectPast = 0		// Pang(23/8/2005) 0 - can't select; 1 - can select 
	//var offSetDay = 1	
	var gotoString = "Go To Current Month"
	var todayString = "Today is"
	var weekString = "Wk"
	var scrollLeftMessage = "Click to scroll to previous month. Hold mouse button to scroll automatically."
	var scrollRightMessage = "Click to scroll to next month. Hold mouse button to scroll automatically."
	var selectMonthMessage = "Click to select a month."
	var selectYearMessage = "Click to select a year."
	var selectDateMessage = "Select [date] as date." // do not replace [date], it will be replaced by date.
	var	crossobj, crossMonthObj, crossYearObj, monthSelected, yearSelected, dateSelected, omonthSelected, oyearSelected, odateSelected, monthConstructed, yearConstructed, intervalID1, intervalID2, timeoutID1, timeoutID2, ctlToPlaceValue, ctlNow, dateFormat, nStartingYear
	var	bPageLoaded = false
	var	ie = document.all
	var	dom = document.getElementById
	var	ns4 = document.layers
	var	today =	new	Date()
	var	dateNow	 = today.getDate()
	var	monthNow = today.getMonth()
	var	yearNow	 = today.getYear()
	var	imgsrc = new Array("drop1.gif", "drop2.gif", "left1.gif", "left2.gif", "right1.gif", "right2.gif")
	var	img	= new Array()	
	var oFunctions = ""
	var bShow = false;	
	var HolidaysCounter = 0
	var Holidays = new Array()
	var	monthName =	new	Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December")
	var dayName = new Array	("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat")
	var	styleAnchor = "text-decoration:none; color:black;"
	var stylePastDay = "text-decoration:none; color:#c0c0c0;"
	var styleCurrentDay = "font-weight:bold; text-decoration:none; color:red;"
	var styleCurrent = "color:white;"
	var	styleLightBorder = "color:#6699ff; border-style:solid; border-width:1px; border-color:#808080;"
	
    function init()	{

		if (!ns4)
		{
			if (!ie) 
			{ 
				yearNow += 1900	
			}

			crossobj = (dom) ? document.getElementById("calendar").style : ie ? document.all.calendar : document.calendar
			hideCalendar()

			crossMonthObj = (dom)? document.getElementById("selectMonth").style : ie ? document.all.selectMonth : document.selectMonth

			crossYearObj = (dom)? document.getElementById("selectYear").style : ie ? document.all.selectYear : document.selectYear

			monthConstructed = false;
			yearConstructed = false;			
							
			if (showToday == 1)
			{
				document.getElementById("lblToday").innerHTML =	"<span style='"+styleCurrent+"'>" + todayString + " " + dayName[(today.getDay() - startAt == -1) ? 6 : (today.getDay() - startAt)] + ", " + dateNow + " " + monthName[monthNow].substring(0,3) + " " + yearNow + "</span>"
			}

			sHTML1 = "<span id='spanLeft' style='border-style:solid;border-width:1;border-color:#3366ff;cursor:pointer' onmouseover='swapImage(\"changeLeft\",\"left2.gif\");this.style.borderColor=\"#88AAFF\";window.status=\""+scrollLeftMessage+"\"' onclick='javascript:decMonth()' onmouseout='clearInterval(intervalID1);swapImage(\"changeLeft\",\"left1.gif\");this.style.borderColor=\"#3366FF\";window.status=\"\"' onmousedown='clearTimeout(timeoutID1);timeoutID1=setTimeout(\"StartDecMonth()\",500)' onmouseup='clearTimeout(timeoutID1);clearInterval(intervalID1)'>&nbsp<IMG id='changeLeft' SRC='"+imgDir+"left1.gif' width=10 height=11 BORDER=0>&nbsp</span>&nbsp;"
			sHTML1 += "<span id='spanRight' style='border-style:solid;border-width:1;border-color:#3366FF;cursor:pointer' onmouseover='swapImage(\"changeRight\",\"right2.gif\");this.style.borderColor=\"#88AAFF\";window.status=\""+scrollRightMessage+"\"' onmouseout='clearInterval(intervalID1);swapImage(\"changeRight\",\"right1.gif\");this.style.borderColor=\"#3366FF\";window.status=\"\"' onclick='incMonth()' onmousedown='clearTimeout(timeoutID1);timeoutID1=setTimeout(\"StartIncMonth()\",500)' onmouseup='clearTimeout(timeoutID1);clearInterval(intervalID1)'>&nbsp<IMG id='changeRight' SRC='"+imgDir+"right1.gif' width=10 height=11 BORDER=0>&nbsp</span>&nbsp"
			sHTML1 += "<span id='spanMonth' style='border-style:solid;border-width:1;border-color:#3366FF;cursor:pointer' onmouseover='swapImage(\"changeMonth\",\"drop2.gif\");this.style.borderColor=\"#88AAFF\";window.status=\""+selectMonthMessage+"\"' onmouseout='swapImage(\"changeMonth\",\"drop1.gif\");this.style.borderColor=\"#3366FF\";window.status=\"\"' onclick='popUpMonth()'></span>&nbsp;"
			sHTML1 += "<span id='spanYear' style='border-style:solid;border-width:1;border-color:#3366FF;cursor:pointer' onmouseover='swapImage(\"changeYear\",\"drop2.gif\");this.style.borderColor=\"#88AAFF\";window.status=\""+selectYearMessage+"\"'	onmouseout='swapImage(\"changeYear\",\"drop1.gif\");this.style.borderColor=\"#3366FF\";window.status=\"\"'	onclick='popUpYear()'></span>&nbsp;"
			
			document.getElementById("caption").innerHTML  =	sHTML1
			
			bPageLoaded = true
		}
	}

	function hideCalendar()	{

		if (crossobj){
		
			crossobj.visibility = "hidden"
			if (crossMonthObj != null)
			{
				crossMonthObj.visibility = "hidden"
			}
			if (crossYearObj !=	null)
			{
				crossYearObj.visibility = "hidden"
			}

			showElement( 'SELECT' );
			showElement( 'APPLET' );
		}
	}
	
	if (dom)
	{
		for	(i = 0; i < imgsrc.length; i++)
		{
			img[i] = new Image
			img[i].src = img + imgsrc[i]
		}
		
		document.write ("<div onclick='bShow=true' id='calendar' style='z-index:+999;position:absolute;visibility:hidden;'><table onselectstart='return false' width="+((showWeekNumber == 1) ? 220 : 190)+" style='font-family:arial; font-size:11px; border-width:1; border-style:solid; border-color:#a0a0a0; font-family:arial; font-size:11px}' bgcolor='#ffffff'><tr bgcolor='#0000aa'><td><table width='"+((showWeekNumber == 1) ? 208 : 218)+"'><tr><td style='padding:2px; font-family:arial; font-size:11px;'><font color='#ffffff'><B><span id='caption'></span></B></font></td><td align=right><a href='javascript:hideCalendar()'><IMG SRC='"+imgDir+"close.gif' WIDTH='15' HEIGHT='13' BORDER='0' ALT='Close the Calendar'></a></td></tr></table></td></tr><tr><td style='padding:5px' bgcolor=#ffffff><span id='content'></span></td></tr>")	
		if (showToday == 1)
		{
			document.write ("<tr bgcolor=#0000aa><td style='padding:5px' align=center><span id='lblToday'></span></td></tr>")
		}
			
		document.write ("</table></div><div id='selectMonth' style='z-index:+999;position:absolute;visibility:hidden;'></div><div id='selectYear' style='z-index:+999;position:absolute;visibility:hidden;'></div>");
	}
	
	/*
    * unhides <select> and <applet> objects (for IE only)
    */
    function showElement (elmID)
    {
      if (ie)
      {
        for(i = 0; i < document.all.tags(elmID).length; i++)
        {
          obj = document.all.tags(elmID)[i];
        
          if (!obj || !obj.offsetParent)
          {
            continue;
          }
        
          obj.style.visibility = "";
        }
      }
    }
    
    /* hides <select> and <applet> objects (for IE only) */
    function hideElement(elmID, overDiv)
    {
      if (ie)
      {
        for (i = 0; i < document.all.tags(elmID).length; i++ )
        {
          obj = document.all.tags(elmID)[i];
          if (!obj || !obj.offsetParent)
          {
            continue;
          }
      
          // Find the element's offsetTop and offsetLeft relative to the BODY tag.
          objLeft   = obj.offsetLeft;
          objTop    = obj.offsetTop;
          objParent = obj.offsetParent;
          
          while( objParent.tagName.toUpperCase() != "BODY" )
          {
            objLeft  += objParent.offsetLeft;
            objTop   += objParent.offsetTop;
            objParent = objParent.offsetParent;
          }
      
          objHeight = obj.offsetHeight;
          objWidth = obj.offsetWidth;

          if(( overDiv.offsetLeft + overDiv.offsetWidth ) <= objLeft );
          else if(( overDiv.offsetTop + overDiv.offsetHeight ) <= objTop );
          else if( overDiv.offsetTop >= ( objTop + objHeight ));
          else if( overDiv.offsetLeft >= ( objLeft + objWidth ));
          else
          {
            obj.style.visibility = "hidden";
          }
        }
      }
    }
    
    function WeekNbr(today)
    {
		Year = takeYear(today);
		Month = today.getMonth();
		Day = today.getDate();
		now = Date.UTC(Year, Month, Day+1, 0, 0, 0);
		var Firstday = new Date();
		Firstday.setYear(Year);
		Firstday.setMonth(0);
		Firstday.setDate(1);
		then = Date.UTC(Year, 0, 1, 0, 0, 0);
		var Compensation = Firstday.getDay();
		if (Compensation > 3) Compensation -= 4;
		else Compensation += 3;
		NumberOfWeek =  Math.round((((now-then)/86400000) + Compensation)/7);
		return NumberOfWeek;
		
	}
	
	/*** calendar ***/	
	function takeYear(theDate)
	{
		x = theDate.getYear();
		var y = x % 100;
		y += (y < 38) ? 2000 : 1900;
		return y;
	}
	
	function HolidayRec(d, m, y, desc)
	{
		this.d = d
		this.m = m
		this.y = y
		this.desc = desc
	}

	function addHoliday (d, m, y, desc)
	{
		Holidays[HolidaysCounter++] = new HolidayRec(d, m, y, desc)
	}	
	
	function swapImage(srcImg, destImg){
		if (ie)	{ document.getElementById(srcImg).setAttribute("src", imgDir + destImg) }
	}	

	function padZero(num) {
		return (num	< 10) ? '0' + num : num ;
	}

	function constructDate(d, m, y)
	{
	   
		sTmp = dateFormat
		sTmp = sTmp.replace	("dd", "<e>")
		sTmp = sTmp.replace	("d", "<d>")
		sTmp = sTmp.replace	("<e>", padZero(d))
		sTmp = sTmp.replace	("<d>", d)
		sTmp = sTmp.replace	("mmm", "<o>")
		sTmp = sTmp.replace	("mm", "<n>")
		sTmp = sTmp.replace	("m", "<m>")
		sTmp = sTmp.replace	("<m>", m + 1)
		sTmp = sTmp.replace	("<n>", padZero(m + 1))
		sTmp = sTmp.replace	("<o>", monthName[m])
		return sTmp.replace ("yyyy", y)
		
	}

	function closeCalendar() {
		var	sTmp
		var tmp_date, tomorrowDate
		var today1, tomoro1		
		hideCalendar();		        
		tmp_date = new Date();
		tmp_date.setFullYear(yearSelected, monthSelected, dateSelected);
		
		if (isDate(ctlToPlaceValue.value))
		{	   
		    if (offSetDay > 0)
		    {		        
		        newDate = new Date(tmp_date.getTime());
		        ctlToPlaceValue.value = constructDate(newDate.getDate(), newDate.getMonth(), newDate.getFullYear());

		        if ((dateDiff("d", ctlToPlaceValue.value, ctlTo2ndPlaceValue.value, "", "")) <= 0)
		        {		        
		            tomorrowDate = new Date(tmp_date.getTime() + offSetDay*24*60*60*1000);
		            ctlTo2ndPlaceValue.value = constructDate(tomorrowDate.getDate(), tomorrowDate.getMonth(), tomorrowDate.getFullYear());
		        }
		    }
		    
		    if (offSetDay < 0)
		    {		        
		        newDate = new Date(tmp_date.getTime());
		        ctlToPlaceValue.value = constructDate(newDate.getDate(), newDate.getMonth(), newDate.getFullYear());
	
		        if ((dateDiff("d", ctlToPlaceValue.value, ctlTo2ndPlaceValue.value, "", "")) >= 0)
		        {		        
		            tomorrowDate = new Date(tmp_date.getTime() + offSetDay*24*60*60*1000);
		            ctlTo2ndPlaceValue.value = constructDate(tomorrowDate.getDate(), tomorrowDate.getMonth(), tomorrowDate.getFullYear());
		        }
		    }
		}
		else 
		{	
		    tomorrowDate = new Date(tmp_date.getTime() + offSetDay*24*60*60*1000); // Pang (30/8/2005): add 1 day
     	    ctlToPlaceValue.value = constructDate(dateSelected, monthSelected, yearSelected);			
		    ctlTo2ndPlaceValue.value = constructDate(tomorrowDate.getDate(), tomorrowDate.getMonth(), tomorrowDate.getFullYear());		
	    }
	}
	
	function isDate(p_Expression){
	    return !isNaN(new Date(p_Expression));		// <<--- this needs checking
    }
		
	function dateDiff(p_Interval, p_Date1, p_Date2, p_firstdayofweek, p_firstweekofyear){
	    if(!isDate(p_Date1)){return "invalid date: '" + p_Date1 + "'";}
	    if(!isDate(p_Date2)){return "invalid date: '" + p_Date2 + "'";}
	    var dt1 = new Date(p_Date1);
	    var dt2 = new Date(p_Date2);

	    // get ms between dates (UTC) and make into "difference" date
	    var iDiffMS = dt2.valueOf() - dt1.valueOf();
	    var dtDiff = new Date(iDiffMS);

	    // calc various diffs
	    var nYears  = dt2.getUTCFullYear() - dt1.getUTCFullYear();
	    var nMonths = dt2.getUTCMonth() - dt1.getUTCMonth() + (nYears!=0 ? nYears*12 : 0);
	    var nQuarters = parseInt(nMonths/3);	//<<-- different than VBScript, which watches rollover not completion
    	
	    var nMilliseconds = iDiffMS;
	    var nSeconds = parseInt(iDiffMS/1000);
	    var nMinutes = parseInt(nSeconds/60);
	    var nHours = parseInt(nMinutes/60);
	    var nDays  = parseInt(nHours/24);
	    var nWeeks = parseInt(nDays/7);


	    // return requested difference
	    var iDiff = 0;		
	    switch(p_Interval.toLowerCase()){
		    case "yyyy": return nYears;
		    case "q": return nQuarters;
		    case "m": return nMonths;
		    case "y": 		// day of year
		    case "d": return nDays;
		    case "w": return nDays;
		    case "ww":return nWeeks;		// week of year	// <-- inaccurate, WW should count calendar weeks (# of sundays) between
		    case "h": return nHours;
		    case "n": return nMinutes;
		    case "s": return nSeconds;
		    case "ms":return nMilliseconds;	// millisecond	// <-- extension for JS, NOT available in VBScript
		    default: return "invalid interval: '" + p_Interval + "'";
	    } 
	}
	
	function DateDiff(p_interval, p_date1, p_date2, p_firstdayofweek, p_firstweekofyear){
	    return dateDiff(p_interval, p_date1, p_date2, p_firstdayofweek, p_firstweekofyear);
    }


	/*** Month Pulldown	***/

	function StartDecMonth()
	{
		intervalID1 = setInterval("decMonth()", 80)
	}

	function StartIncMonth()
	{
		intervalID1 = setInterval("incMonth()", 80)
	}

	function incMonth () {
		monthSelected++
		if (monthSelected > 11) {
			monthSelected = 0
			yearSelected++
		}
		constructCalendar()
	}

	function decMonth () {
		monthSelected--
		if (monthSelected < 0) {
			monthSelected = 11
			yearSelected--
		}
		constructCalendar()
	}

	function constructMonth() {
		popDownYear()
		if (!monthConstructed) {
			sHTML =	""
			for	(i = 0; i < 12;	i++) {
				sName =	monthName[i];
				if (i == monthSelected){
					sName =	"<B>" +	sName +	"</B>"
				}
				sHTML += "<tr><td id='m" + i + "' onmouseover='this.style.backgroundColor=\"#d3edff\"' onmouseout='this.style.backgroundColor=\"\"' style='cursor:pointer' onclick='monthConstructed=false;monthSelected=" + i + ";constructCalendar();popDownMonth();event.cancelBubble=true'>&nbsp;" + sName + "&nbsp;</td></tr>"
			}

			document.getElementById("selectMonth").innerHTML = "<table onselectstart='return false' width=70	style='font-family:arial; font-size:11px; border-width:1; border-style:solid; border-color:#a0a0a0;' bgcolor='#f5fbff' cellspacing=0 onmouseover='clearTimeout(timeoutID1)'	onmouseout='clearTimeout(timeoutID1);timeoutID1=setTimeout(\"popDownMonth()\",100);event.cancelBubble=true'>" +	sHTML +	"</table>"

			monthConstructed=true
		}
	}

	function popUpMonth() {
		constructMonth()
		crossMonthObj.visibility = (dom || ie) ? "visible"	: "show"
		crossMonthObj.left = parseInt(crossobj.left) + 50
		crossMonthObj.top =	parseInt(crossobj.top) + 26
	}

	function popDownMonth()	{
		crossMonthObj.visibility= "hidden"
	}

	/*** Year Pulldown ***/
	function incYear() {
		/*for	(i = 0; i < 7; i++){
			newYear	= (i+nStartingYear)+1
			if (newYear == yearSelected)
			{ txtYear =	"&nbsp;<B>"	+ newYear +	"</B>&nbsp;" }
			else
			{ txtYear =	"&nbsp;" + newYear + "&nbsp;" }
			document.getElementById("y"+i).innerHTML = txtYear
		}
		nStartingYear++;
		bShow = true*/
	}

	function decYear() {
		/*for	(i = 0; i < 7; i++)
		{
			newYear	= (i+nStartingYear)-1
			if (newYear == yearSelected)
			{ 
				txtYear =	"&nbsp;<B>"	+ newYear +	"</B>&nbsp;" 
			}
			else { 
				txtYear =	"&nbsp;" + newYear + "&nbsp;" 
			}
			document.getElementById("y"+i).innerHTML = txtYear
		}
		nStartingYear--;
		bShow = true*/
	}

	function selectYear(nYear) {
		yearSelected = parseInt(nYear+nStartingYear);
		yearConstructed = false;
		constructCalendar();
		popDownYear();
	}

	function constructYear() {
		popDownMonth()
		sHTML =	""
		if (!yearConstructed) {

			//sHTML =	"<tr><td align='center'	onmouseover='this.style.backgroundColor=\"#d3edff\"' onmouseout='clearInterval(intervalID1);this.style.backgroundColor=\"\"' onmousedown='clearInterval(intervalID1);intervalID1=setInterval(\"decYear()\",30)' onmouseup='clearInterval(intervalID1)' style='cursor:pointer'>-</td></tr>"
			j =	0
			nStartingYear =	today.getFullYear(); //yearSelected - 3

			//modified by janice on 29/08/06
			//cannot choose previous year			
			for	(i = (nStartingYear); i < (nStartingYear + 3); i++) { //for	(i = (yearSelected - 3); i <= (yearSelected + 3); i++) {
				sName =	i;
				if (i == yearSelected){
					sName =	"<B>" +	sName +	"</B>"
				}

				sHTML += "<tr><td id='y" + j + "' onmouseover='this.style.backgroundColor=\"#d3edff\"' onmouseout='this.style.backgroundColor=\"\"' onclick='selectYear("+j+");event.cancelBubble=true' style='cursor:pointer'>&nbsp;" + sName + "&nbsp;</td></tr>"
				j++;
			}

			//sHTML += "<tr><td align='center' onmouseover='this.style.backgroundColor=\"#d3edff\"' onmouseout='clearInterval(intervalID2);this.style.backgroundColor=\"\"' onmousedown='clearInterval(intervalID2);intervalID2=setInterval(\"incYear()\", 30)'	onmouseup='clearInterval(intervalID2)' style='cursor:pointer'>+</td></tr>"

			document.getElementById("selectYear").innerHTML	= "<table onselectstart='return false' width=44 style='font-family:arial; font-size:11px; border-width:1; border-style:solid; border-color:#a0a0a0;' bgcolor='#f5fbff' onmouseover='clearTimeout(timeoutID2)' onmouseout='clearTimeout(timeoutID2);timeoutID2=setTimeout(\"popDownYear()\",100);event.cancelBubble=true' cellspacing=0>" + sHTML	+ "</table>"

			yearConstructed	= true
		}
	}

	function popDownYear() {
		clearInterval(intervalID1)
		clearTimeout(timeoutID1)
		clearInterval(intervalID2)
		clearTimeout(timeoutID2)
		crossYearObj.visibility= "hidden"
	}

	function popUpYear() {
		var	leftOffset

		constructYear()
		crossYearObj.visibility	= (dom||ie)? "visible" : "show"
		leftOffset = parseInt(crossobj.left) + document.getElementById("spanYear").offsetLeft
		if (ie)
		{
			leftOffset += 6
		}
		crossYearObj.left =	leftOffset
		crossYearObj.top = parseInt(crossobj.top) +	26
	}

	function constructCalendar () {
	
		var dateMessage
		var	startDate =	new	Date (yearSelected, monthSelected, 1)
		var	endDate	= new Date (yearSelected, monthSelected+1, 1);
		endDate	= new Date (endDate	- (24*60*60*1000));
		numDaysInMonth = endDate.getDate()

		datePointer	= 0
		dayPointer = startDate.getDay() - startAt
	
		if (dayPointer < 0)
		{
			dayPointer = 6
		}

		sHTML =	"<table	border=0 style='font-family:verdana;font-size:10px;'><tr>"
	
		if (showWeekNumber == 1)
		{
			sHTML += "<td width=20><b>" + weekString + "</b></td><td width=1 rowspan=7 bgcolor='#d0d0d0' style='padding:0px'><img src='"+imgDir+"divider.gif' width=1></td>"
		}

		for	(i = 0; i < 7; i++)	{
			sHTML += "<td width='20' align='right'><B>"+ dayName[i]+"</B></td>"
		}
		sHTML +="</tr><tr>"
		
		if (showWeekNumber == 1)
		{
			sHTML += "<td align=right>" + WeekNbr(startDate) + "&nbsp;</td>"
		}

		for	(var i = 1; i <= dayPointer; i++)
		{
			sHTML += "<td>&nbsp;</td>"
		}

		for	( datePointer = 1; datePointer <= numDaysInMonth; datePointer++ )
		{
			dayPointer++;
			sHTML += "<td align=center>"

			sStyle = styleAnchor; //regular day

			if ((datePointer == dateNow) && (monthSelected == monthNow) && (yearSelected == yearNow)) //today
			{ 
				sStyle = styleCurrentDay; 
			} 
			else if ((datePointer < dateNow) && (monthSelected == monthNow) && (yearSelected == yearNow)) //Pang (23/8/2005): date less than now in current month
			{ 
				sStyle = stylePastDay;
			}
			else if ((monthSelected < monthNow) && (yearSelected <= yearNow))
			{ 
				sStyle = stylePastDay;
			}
			else if (yearSelected < yearNow)
			{	
				sStyle = stylePastDay;
			}
			/*else if	(dayPointer % 7 == (startAt * -1) + 1) //end-of-the-week day
			{ 
				sStyle = styleAnchor; 
			}*/

			//selected day
			if ((datePointer == odateSelected) && (monthSelected == omonthSelected) && (yearSelected == oyearSelected))
			{ 
				sStyle += styleLightBorder; 
			}

			sHint = ""
			for (k = 0; k < HolidaysCounter; k++)
			{
				if ((parseInt(Holidays[k].d) == datePointer) && (parseInt(Holidays[k].m) == (monthSelected+1)))
				{
					if ((parseInt(Holidays[k].y) == 0) || ((parseInt(Holidays[k].y) == yearSelected) && (parseInt(Holidays[k].y) != 0)))
					{
						sStyle += stylePastDay;
						sHint += sHint == "" ? Holidays[k].desc:"\n"+Holidays[k].desc
					}
				}
			}

			var regexp= /\"/g
			sHint=sHint.replace(regexp,"&quot;")

			dateMessage = "onmousemove='window.status=\""+selectDateMessage.replace("[date]",constructDate(datePointer, monthSelected, yearSelected))+"\"' onmouseout='window.status=\"\"' "

			// Pang (30/8/2005) : Added past dates formatting, realign dates positions.
			if (datePointer <= 9) // 1 digit date formatting
			{
				if (selectPast == 1) // if allows to select past dates
					sHTML += "<a style='"+sStyle+"' "+dateMessage+" title=\"" + sHint + "\" href='javascript:dateSelected="+datePointer+";closeCalendar();doOtherFunctions();'>&nbsp;" + datePointer + "&nbsp;</a>"
				else if ((datePointer < dateNow) && (monthSelected == monthNow) && (yearSelected == yearNow))
					sHTML += "<label style='"+sStyle+"'>&nbsp;" + datePointer + "&nbsp;</label>"
				else if ((monthSelected < monthNow) && (yearSelected <= yearNow))
					sHTML += "<label style='"+sStyle+"'>&nbsp;" + datePointer + "&nbsp;</label>"
				else if (yearSelected < yearNow)
					sHTML += "<label style='"+sStyle+"'>&nbsp;" + datePointer + "&nbsp;</label>"
				else
					sHTML += "<a style='"+sStyle+"' "+dateMessage+" title=\"" + sHint + "\" href='javascript:dateSelected="+datePointer+";closeCalendar();doOtherFunctions();'>&nbsp;" + datePointer + "&nbsp;</a>"
			}
			else				// 2 digits date formatting
			{		
				if (selectPast == 1)
					sHTML += "<a style='"+sStyle+"' "+dateMessage+" title=\"" + sHint + "\" href='javascript:dateSelected="+datePointer+";closeCalendar();doOtherFunctions();'>" + datePointer + "</a>"
				else if ((datePointer < dateNow)&&(monthSelected == monthNow)&&(yearSelected == yearNow))
					sHTML += "<label style='"+sStyle+"'>" + datePointer + "</label>"
				else if ((monthSelected < monthNow)&&(yearSelected <= yearNow))
					sHTML += "<label style='"+sStyle+"'>" + datePointer + "</label>"
				else if (yearSelected < yearNow)
					sHTML += "<label style='"+sStyle+"'>" + datePointer + "</label>"
				else
					sHTML += "<a style='"+sStyle+"' "+dateMessage+" title=\"" + sHint + "\" href='javascript:dateSelected="+datePointer+";closeCalendar();doOtherFunctions();'>" + datePointer + "</a>"
			}			
			
			sHTML += "</td>"
			if ((dayPointer+startAt) % 7 == startAt) { 
				sHTML += "</tr><tr>" 
				if ((showWeekNumber == 1)&&(datePointer < numDaysInMonth))
				{
					sHTML += "<td align=right>" + (WeekNbr(new Date(yearSelected, monthSelected, datePointer+1))) + "&nbsp;</td>"
				}
			}
		}

		document.getElementById("content").innerHTML   = sHTML
		document.getElementById("spanMonth").innerHTML = "&nbsp;" +	monthName[monthSelected] + "&nbsp;<IMG id='changeMonth' SRC='"+imgDir+"drop1.gif' WIDTH='12' HEIGHT='10' BORDER=0>"
		document.getElementById("spanYear").innerHTML =	"&nbsp;" + yearSelected	+ "&nbsp;<IMG id='changeYear' SRC='"+imgDir+"drop1.gif' WIDTH='12' HEIGHT='10' BORDER=0>"
	}
	
	function doOtherFunctions(){
		/*if(oFunctions != ""){
			eval(oFunctions) 
		}*/
	}
	
	// Pang (30/8/2005): Added ctl3-for second control, offSet-day to offset in second control
	function popUpCalendar(ctl,	ctl2, ctl3, offSet, format, OtherFunctions) {
		var	leftpos = 0
		var	toppos = 0
		oFunctions = OtherFunctions
		offSetDay = offSet
			
		if (bPageLoaded)
		{
			if ( crossobj.visibility ==	"hidden" ) {
				ctlToPlaceValue	= ctl2
				ctlTo2ndPlaceValue = ctl3 // Pang (30/8/2005)
				dateFormat = format;

				formatChar = " "
				aFormat	= dateFormat.split(formatChar)
				if (aFormat.length < 3)
				{
					formatChar = "/"
					aFormat	= dateFormat.split(formatChar)
					if (aFormat.length < 3)
					{
						formatChar = "."
						aFormat	= dateFormat.split(formatChar)
						if (aFormat.length < 3)
						{
							formatChar = "-"
							aFormat	= dateFormat.split(formatChar)
							if (aFormat.length < 3)
							{
								// invalid date	format
								formatChar = ""
							}
						}
					}
				}

				tokensChanged =	0
				if ( formatChar	!= "" )
				{
					// use user's date
					aData =	ctl2.value.split(formatChar)
                     
					for	(i = 0; i < 3; i++)
					{
						if ((aFormat[i] == "d") || (aFormat[i] == "dd"))
						{
							dateSelected = parseInt(aData[i], 10)
							tokensChanged++
						}
						else if	((aFormat[i] == "m") || (aFormat[i] == "mm"))
						{
							monthSelected =	parseInt(aData[i], 10) - 1
							tokensChanged++
						}
						else if	(aFormat[i] == "yyyy")
						{
							yearSelected = parseInt(aData[i], 10)
							tokensChanged++
						}
						else if	(aFormat[i] == "mmm")
						{
							for	(j = 0; j < 12;	j++)
							{
								if (aData[i] == monthName[j])
								{
									monthSelected = j
									tokensChanged++
								}
							}
						}
					}
				}
	
				if ((tokensChanged != 3) || isNaN(dateSelected) || isNaN(monthSelected) || isNaN(yearSelected))
				{
					dateSelected = dateNow
					monthSelected =	monthNow
					yearSelected = yearNow
				}

				odateSelected = dateSelected
				omonthSelected = monthSelected
				oyearSelected = yearSelected

				aTag = ctl
				do {
					aTag = aTag.offsetParent;
					leftpos	+= aTag.offsetLeft;
					toppos += aTag.offsetTop;
				} while(aTag.tagName!="BODY");

				crossobj.left =	fixedX == -1 ? ctl.offsetLeft	+ leftpos :	fixedX
				crossobj.top = fixedY == -1 ?	ctl.offsetTop +	toppos + ctl.offsetHeight +	2 :	fixedY
				constructCalendar (1, monthSelected, yearSelected);
				crossobj.visibility = (dom || ie) ? "visible" : "show"
				
				hideElement( 'SELECT', document.getElementById("calendar") );
				hideElement( 'APPLET', document.getElementById("calendar") );			

				bShow = true;
			}
		}
		else
		{
	
			init()
			popUpCalendar(ctl, ctl2, ctl3, offSet, format, OtherFunctions)
			
		}
	}
	
	document.onkeypress = function hidecal1 () { 
		if (event.keyCode == 27) 
		{
			hideCalendar()
		}
	}
	
	document.onclick = function hidecal2 () { 		
		if (!bShow)
		{
			hideCalendar()
		}
		bShow = false
	}
