//  written  by Tan Ling Wee
//  email :  info@sparrowscripts.com
//      url : www.sparrowscripts.com
//
//  modified by ALQUANTO 30 July 2003
//  email: popcalendar@alquanto.de
//
//  modified by PinoToy 25 July 2003 
//  email  : pinotoy@yahoo.com
//
//  modified by TrekinU 12 January 2008 
//      url : www.trekinu.com

//=============================================================================
var language       = 'en';  	// Default Language: en - english ; es - spanish; de - german
var enablePast     = 0;    	// 0 - disabled ; 1 - enabled
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 = 0;       // 0 - don't show; 1 - show
var showToday      = 0;    	// 0 - don't show; 1 - show
var imgDir         = '/images/calendar/';    	// directory for images ... e.g. var imgDir="/img/"
var dayName        = '';

var gotoString 		= {en : 'Go To Current Month'};
var todayString 		= {en : 'Today:'};
var weekString 		= {en : 'Wk'};
var scrollLeftMessage	= {en : 'Click to scroll to previous month. Hold mouse button to scroll automatically.'};
var scrollRightMessage 	= {en : 'Click to scroll to next month. Hold mouse button to scroll automatically.'};
var selectMonthMessage 	= {en : 'Click to select a month.'};
var selectYearMessage 	= {en : 'Click to select a year.'};
var selectDateMessage 	= {en : 'Select [date] as date.'};// do not replace [date], it will be replaced by date.
var monthName 			= {en : new Array('January','February','March','April','May','June','July','August','September','October','November','December')};
var monthName2 		= {en : new Array('JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC')};

var crossobj, crossMonthObj, crossYearObj, monthSelected, yearSelected, dateSelected;
var omonthSelected, oyearSelected, odateSelected, monthConstructed, yearConstructed;
var intervalID1, intervalID2, timeoutID1, timeoutID2, ctlToPlaceValue, ctlNow, dateFormat;
var nStartingYear, selDayAction, isPast;
var visYear  				= 0;
var visMonth 				= 0;
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 maxYearDiffFromToday      = 0;
//var imgsrc   			= new Array('drop1.gif','drop2.gif','left1.gif','left2.gif','right1.gif','right2.gif','arrow_up.gif','arrow_down.gif');
//var img     				= new Array();
var bShow    				= false;

var HolidaysCounter 		= 0;
var Holidays 				= new Array();  
//=============================================================================
if(startAt == 0) 
{
	dayName = {en : new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat')};
}
else 
{
	dayName = {en : new Array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun')};  
}
//=============================================================================
function hideElement(elmID, overDiv) // hides <select> and <applet> objects (for IE only) 
{
    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 + obj.height));
			else if(overDiv.offsetLeft >= (objLeft + objWidth));
			else
				obj.style.visibility = 'hidden';
		}
	}
}
//=============================================================================
function showElement(elmID) // unhides <select> and <applet> objects (for IE only)
{
    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 = '';
	    }
    }
}
//=============================================================================
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 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 =  '<a onmousemove="window.status=\''+gotoString[language]+'\'" onmouseout="window.status=\'\'" title="'+gotoString[language]+'" class="day" href="javascript:monthSelected=monthNow;yearSelected=yearNow;constructCalendar();">' + todayString[language] + ' ' + dayName[language][(today.getDay()-startAt==-1)?6:(today.getDay()-startAt)]+', ' + dateNow + ' ' + monthName[language][monthNow].substring(0,3) + ' ' + yearNow + '</a>';
         }
	    sHTML1 = '<table cellpadding="0" cellspacing="0"><tr><td id="spanLeft" class="option_box" onmouseover="swapImage(\'changeLeft\',\'left2.gif\');this.className=\'option_box_over\';window.status=\''+scrollLeftMessage[language]+'\'" onclick="decMonth()" onmouseout="clearInterval(intervalID1);swapImage(\'changeLeft\',\'left1.gif\');this.className=\'option_box\';window.status=\'\'" onmousedown="clearTimeout(timeoutID1);timeoutID1=setTimeout(\'StartDecMonth()\',500)" onmouseup="clearTimeout(timeoutID1);clearInterval(intervalID1)">&nbsp<img id="changeLeft" src="' + imgDir + 'left1.gif" width="9" height="9" border="0">&nbsp</td><td>&nbsp;</td>';
	    sHTML1 += '<td id="spanRight" class="option_box" onmouseover="swapImage(\'changeRight\',\'right2.gif\');this.className=\'option_box_over\';window.status=\''+scrollRightMessage[language]+'\'" onmouseout="clearInterval(intervalID1);swapImage(\'changeRight\',\'right1.gif\');this.className=\'option_box\';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="9" height="9" border="0">&nbsp</td><td>&nbsp;</td>';
	    sHTML1 += '<td id="spanMonth" width="80" class="option_box_month" onmouseover="this.className=\'option_box_month_over\';window.status=\'' + selectMonthMessage[language] + '\'" onmouseout="this.className=\'option_box_month\';window.status=\'\'" onclick="popUpMonth()"></td><td>&nbsp;</td>';
	    sHTML1 += '<td id="spanYear" width="44" class="option_box_year" onmouseover="this.className=\'option_box_year_over\';window.status=\'' + selectYearMessage[language] + '\'" onmouseout="this.className=\'option_box_year\';window.status=\'\'" onclick="popUpYear()"></td><td>&nbsp;</td></tr></table>';

	    document.getElementById('caption').innerHTML = sHTML1;

	    bPageLoaded = true;
    }
}
//=============================================================================
function hideCalendar() 
{
    crossobj.visibility = 'hidden';
    if(crossMonthObj != null)
    { 
	    crossMonthObj.visibility = 'hidden';
    }
		
    if(crossYearObj != null) 
    {
         crossYearObj.visibility = 'hidden';
    }		
    //showElement('SELECT');
    //showElement('APPLET');
}
//=============================================================================
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('mmmm', '<p>');
    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[language][m]);
    sTmp = sTmp.replace('<p>', monthName2[language][m]);
    sTmp = sTmp.replace('yyyy', y);
    return sTmp.replace('yy', padZero(y % 100));
}
//=============================================================================
function constructDateWithFormat(d,m,y,theFormat) 
{
    dateFormat = theFormat;
    return constructDate(d,m,y);
}
//=============================================================================
function closeCalendar() 
{
    //cross browsing change... 
    //ctlToPlaceValue.innerText = constructDate(dateSelected,monthSelected,yearSelected);
    ctlToPlaceValue.value = constructDate(dateSelected,monthSelected,yearSelected);
    hideCalendar();	
}
//=============================================================================
function StartDecMonth() //Month Pulldown 
{
    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[language][i];
		    if(i == monthSelected)
		    {
			    sName = '<b>' + sName + '</b>';
		    }
		    sHTML += '<tr><td id="m' + i + '" onmouseover="this.className=\'title_over\'" onmouseout="this.className=\'title\'" class="title" onclick="monthConstructed=false;monthSelected=' + i + ';constructCalendar();popDownMonth();event.cancelBubble=true">&nbsp;' + sName + '&nbsp;</td></tr>';
	    }
	    document.getElementById('selectMonth').innerHTML = '<table width="84" class="item_list" cellspacing="0" cellpadding="1" onmouseover="clearTimeout(timeoutID1)" onmouseout="clearTimeout(timeoutID1);timeoutID1=setTimeout(\'popDownMonth()\',100);event.cancelBubble=true">' + sHTML + '</table>';
	    monthConstructed = true;
    }
}
//=============================================================================
function popUpMonth() 
{
    if(visMonth == 1) 
    {
         popDownMonth();
	    visMonth--;
    } 
    else 
    {
         constructMonth();
	    crossMonthObj.visibility = (dom || ie) ? 'visible' : 'show';
	    //cross browsing change...
	    crossMonthObj.left = (parseInt(crossobj.left) + 50) + "px";
	    crossMonthObj.top  =  (parseInt(crossobj.top) + 26) + "px";
	    //hideElement('SELECT', document.getElementById('selectMonth'));
	    //hideElement('APPLET', document.getElementById('selectMonth'));
	    visMonth++;
    }
}
//=============================================================================
function popDownMonth() 
{
    crossMonthObj.visibility = 'hidden';
    visMonth = 0;
}
//=============================================================================
function incYear() // Year Pulldown
{
    nStartingYear++;
    nStartingYear = maxStartingYear();
        
    for(year = nStartingYear; year < nStartingYear + 7; year++) 
    {
         var yearIndex = year - nStartingYear;
	    //newYear  = (i + nStartingYear) + 1;
	    if(year == yearSelected)
	    {
		    txtYear = '<span class="selected_item">&nbsp;' + year + '&nbsp;</span>';
	    }
	    else
	    {
		    txtYear = '<span class="item">&nbsp;' + year + '&nbsp;</span>';
	    }			
	    document.getElementById('y'+yearIndex).innerHTML = txtYear;
    }	
    //nStartingYear++;
    bShow = true;
}
//=============================================================================
function maxStartingYear()
{
    var maxYear = yearNow - maxYearDiffFromToday;
    if(nStartingYear + 6 > maxYear)
    {
	    return (maxYear - 6);
    }		
    return nStartingYear;
}
//=============================================================================
function decYear() 
{
    for(i = 0; i < 7; i++) 
    {
         newYear = (i + nStartingYear) - 1;
	    if(newYear == yearSelected)
	    {
		    txtYear = '<span class="selected_item">&nbsp;' + newYear + '&nbsp;</span>';
	    }
	    else
	    {
		    txtYear = '<span class="item">&nbsp;' + newYear + '&nbsp;</span>';
	    }			
	    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.className=\'title_over\';clearInterval(intervalID1);intervalID1=setInterval(\'decYear()\',200)" onmouseout="clearInterval(intervalID1);this.className=\'title\'" class="title" onmousedown="clearInterval(intervalID1);intervalID1=setInterval(\'decYear()\',30)" onmouseup="clearInterval(intervalID1)"><img src=\'' + imgDir + 'arrow_up.gif\' width=\'14\' height=\'8\' border=\'0\'></td></tr>';
	    j = 0;
	    nStartingYear =  yearSelected - 3;
	    nStartingYear = maxStartingYear();

	    for(i = nStartingYear; i < nStartingYear + 7; i++) 
		{
			sName = i;
			if(i == yearSelected) 
			{
				sName = '<b>' + sName + '</b>';
		     }
				
			sHTML += '<tr><td align="center" id="y' + j + '" onmouseover="this.className=\'title_over\'" onmouseout="this.className=\'title\'" onclick="selectYear('+j+');event.cancelBubble=true">&nbsp;' + sName + '&nbsp;</td></tr>';
			j++;
		}
		
		sHTML += '<tr><td align="center" onmouseover="this.className=\'title_over\';clearInterval(intervalID2);intervalID2=setInterval(\'incYear()\',200)" onmouseout="clearInterval(intervalID2);this.className=\'title\'" onmousedown="clearInterval(intervalID2);intervalID2=setInterval(\'incYear()\',30)" onmouseup="clearInterval(intervalID2)"><img src=\'' + imgDir + 'arrow_down.gif\' width=\'14\' height=\'8\' border=\'0\'></td></tr>';
		document.getElementById('selectYear').innerHTML = '<table width="48" cellspacing="0" cellpadding="1" class="item_list" onmouseover="clearTimeout(timeoutID2)" onmouseout="clearTimeout(timeoutID2);timeoutID2=setTimeout(\'popDownYear()\',100)">' + sHTML + '</table>';
		yearConstructed = true;
	}
}
//=============================================================================
function popDownYear() 
{
    clearInterval(intervalID1);
    clearTimeout(timeoutID1);
    clearInterval(intervalID2);
    clearTimeout(timeoutID2);
    crossYearObj.visibility = 'hidden';
    visYear = 0;
}
//=============================================================================
function popUpYear() 
{
	var leftOffset
	if (visYear == 1) 
	{
		popDownYear();
		visYear--;
	}
	else
	{
		constructYear();
		crossYearObj.visibility  = (dom || ie) ? 'visible' : 'show';
		leftOffset = parseInt(crossobj.left) + document.getElementById('spanYear').offsetLeft;
		if(ie) 
		{
			leftOffset += 6;
	     }
		//cross browsing change...	
		crossYearObj.left = leftOffset + "px";
		crossYearObj.top = (parseInt(crossobj.top) + 26) + "px";
		visYear++;
	}
}
//=============================================================================
function WeekNbr(n) //calendar 
{
	// Algorithm used:
	// From Klaus Tondering's Calendar document (The Authority/Guru)
	// http://www.tondering.dk/claus/calendar.html
	// a = (14-month) / 12
	// y = year + 4800 - a
	// m = month + 12a - 3
	// J = day + (153m + 2) / 5 + 365y + y / 4 - y / 100 + y / 400 - 32045
	// d4 = (J + 31741 - (J mod 7)) mod 146097 mod 36524 mod 1461
	// L = d4 / 1460
	// d1 = ((d4 - L) mod 365) + L
	// WeekNumber = d1 / 7 + 1
	
	year = n.getFullYear();
	month = n.getMonth() + 1;
	if (startAt == 0) 
		day = n.getDate() + 1;
	else 
		day = n.getDate();

	a = Math.floor((14 - month) / 12);
	y = year + 4800 - a;
	m = month + 12 * a - 3;
	b = Math.floor(y / 4) - Math.floor(y / 100) + Math.floor(y / 400);
	J = day + Math.floor((153 * m + 2) / 5) + 365 * y + b - 32045;
	d4 = (((J + 31741 - (J % 7)) % 146097) % 36524) % 1461;
	L = Math.floor(d4 / 1460);
	d1 = ((d4 - L) % 365) + L;
	week = Math.floor(d1 / 7) + 1;
	
	return week;
}
//=============================================================================
function constructCalendar () 
{
    var aNumDays = Array (31,0,31,30,31,30,31,31,30,31,30,31);
    var dateMessage;
    var startDate = new Date (yearSelected, monthSelected, 1);
    var endDate;

    if(monthSelected == 1) 
    {
         endDate = new Date(yearSelected,monthSelected + 1, 1);
	    endDate = new Date(endDate - (24 * 60 * 60 * 1000));
         numDaysInMonth = endDate.getDate();
    } 
    else
    { 
         numDaysInMonth = aNumDays[monthSelected];
    }

    datePointer = 0;
    dayPointer = startDate.getDay() - startAt;

    if(dayPointer < 0) 
    {
         dayPointer = 6;
    }
    
    sHTML = '<table cellspacing="0" cellpadding="2" border="0"><tr>';

    if(showWeekNumber == 1) 
    {
         sHTML += '<td class="header">' + weekString[language] + '</td><td class="devider" rowspan="7"></td>';
    }
    for(i = 0; i < 7; i++) 
    {
	    sHTML += '<td class="header">' + dayName[language][i] + '</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="right">';
		className = 'day';
		if ((datePointer == odateSelected) && (monthSelected == omonthSelected) && (yearSelected == oyearSelected))
		    className = 'selected_day';

		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))) 
				{
					className = 'holiday';
					sHint += (sHint == "") ? Holidays[k].desc : "\n" + Holidays[k].desc;
				}
			}
		}

		sHint = sHint.replace('/\"/g', '&quot;');
		dateMessage = 'onmousemove="window.status=\''+selectDateMessage[language].replace('[date]',constructDate(datePointer,monthSelected,yearSelected))+'\'" onmouseout="window.status=\'\'" ';

		if (enablePast == 0 && ((yearSelected < yearNow) || (monthSelected < monthNow) && (yearSelected == yearNow) || (datePointer < dateNow) && (monthSelected == monthNow) && (yearSelected == yearNow))) 
		{
			selDayAction = '';
			isPast = 1;
		} 
		else 
		{
			selDayAction = 'href="javascript:dateSelected=' + datePointer + ';closeCalendar();"';
			isPast = 0;
		}

        colorClassName = '';
		if ((datePointer == dateNow) && (monthSelected == monthNow) && (yearSelected == yearNow)) 
		{
		    colorClassName = 'current_today';
		}
		else if (dayPointer % 7 == (startAt * -1) + 1) 
		{
			if (isPast == 1)
			{
			    colorClassName = 'weekend_disabled';
			}
			else
			{
			    colorClassName = 'weekend_enabled';
			}
		} 
		else if ((dayPointer % 7 == (startAt * -1) + 7 && startAt == 1) || (dayPointer % 7 == startAt && startAt == 0)) 
		{
			if (isPast == 1)
			{
			    colorClassName = 'weekend_disabled';
			}
			else
			{
				colorClassName = 'weekend_enabled';
		     }
	    } 
	    else
	    {
	         if(isPast == 1)
	         {
			    colorClassName = 'disabled';
		    }
		    else
		    {
	              colorClassName = 'day_enabled';
	         }
	    }

         sHTML += "<a " + dateMessage + " title=\"" + sHint + "\" class='" + className + "' " + selDayAction + "><span class='" + colorClassName + "'>&nbsp;" + datePointer + "&nbsp;</span></a>";
	    sHTML += '';
	    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[language][monthSelected];
    document.getElementById('spanYear').innerHTML  = '&nbsp;' + yearSelected;
}
//=============================================================================
function showCalendar(ctl, ctl2, format, lang, past, fx, fy, maxYearsDiff) 
{
    if(lang != null && lang != '') language = lang;		    
    enablePast = (past != null) ? past :  0;    
    fixedX     = (fx != null)   ? fx   : -1;    
    fixedY     = (fy != null)   ? fy   : -1;
    		
    if(maxYearsDiff != null) maxYearDiffFromToday = maxYearsDiff;

    if(showToday == 1) 
    {
         document.getElementById('lblToday').innerHTML = '<a onmousemove="window.status=\'' + gotoString[language] + '\'" onmouseout="window.status=\'\'" title="' + gotoString[language] + '" class="day" href="javascript:monthSelected=monthNow;yearSelected=yearNow;constructCalendar();">' + todayString[language] + ' ' + dayName[language][(today.getDay() - startAt == -1) ? 6 : (today.getDay() - startAt)] + ', ' + dateNow + ' ' + monthName[language][monthNow].substring(0,3) + ' ' + yearNow + '</a></font>';
    }
	popUpCalendar(ctl, ctl2, format);
}
//=============================================================================
function popUpCalendar(ctl, ctl2, format) 
{
    var leftpos = 0;
    var toppos  = 0;

    if(bPageLoaded) 
    {
         if(crossobj.visibility == 'hidden') 
	    {
	         ctlToPlaceValue = ctl2;
		    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) 
					    {
					         formatChar = '';          // invalid date format
					    }
				    }
			    }
		    }

		    tokensChanged = 0;
		    if(formatChar != "") 
		    {
		         if(ctl2 != null) 
		         {
		              aData =  ctl2.value.split(formatChar);      // use user's date
		         }

			    for(i = 0; i < 3; i++) 
			    {
			         if((aFormat[i] == "d") || (aFormat[i] == "dd") || (aFormat[i] == "d,") || (aFormat[i] == "dd,")) 
				    {
				         dateSelected = parseInt(aData[i], 10);
					    tokensChanged++;
				    } 
				    else if((aFormat[i] == "m") || (aFormat[i] == "mm") || (aFormat[i] == "m,") || (aFormat[i] == "mm,")) 
				    {
				         monthSelected = parseInt(aData[i], 10) - 1;
					    tokensChanged++;
				    }
				    else if(aFormat[i] == "yyyy" || aFormat[i] == "yyyy,") 
				    {
				         yearSelected = parseInt(aData[i], 10);
					    tokensChanged++;
				    }
				    else if(aFormat[i] == "mmm" || aFormat[i] == "mmm,")
				    {
					    for(j = 0; j < 12; j++)
					    {
						    if(aData[i] == monthName[language][j])
						    {
						         monthSelected=j;
							    tokensChanged++;
						    }
					    }
				    }
				    else if(aFormat[i] == "mmmm" || aFormat[i] == "mmmm,")
				    {
				         for(j = 0; j < 12; j++)
					    {
					         if(aData[i] == monthName2[language][j])
						    {
						         monthSelected = j;
							    tokensChanged++;
						    }
					    }
				    }
			    }
		    }

		    if((tokensChanged != 3) || isNaN(dateSelected) || isNaN(monthSelected) || isNaN(yearSelected)) 
		    {
		         dateSelected  = dateNow;
			    monthSelected = monthNow;
			    yearSelected  = yearNow;
		    }
			
		    if(yearSelected > yearNow - maxYearDiffFromToday)
		    {
		         yearSelected = yearNow - maxYearDiffFromToday;
		    }

		    odateSelected  = dateSelected;
		    omonthSelected = monthSelected;
		    oyearSelected  = yearSelected;

		    aTag = ctl;
		    do 
		    {
		         aTag     = aTag.offsetParent;
			    leftpos += aTag.offsetLeft;
			    toppos  += aTag.offsetTop;
		    } 
		    while(aTag.tagName != 'BODY' && aTag.tagName != 'HTML');

              //cross browsing change...
		    crossobj.left = ((fixedX == -1) ? ctl.offsetLeft + leftpos : fixedX) + "px";
		    crossobj.top  = ((fixedY == -1) ? ctl.offsetTop + toppos + ctl.offsetHeight + 2 : fixedY) + "px";
		    constructCalendar(1, monthSelected, yearSelected);
		    crossobj.visibility = (dom||ie) ? "visible" : "show";

		    //hideElement('SELECT', document.getElementById('calendar'));
		    //hideElement('APPLET', document.getElementById('calendar'));      

	         bShow = true;
	    } 
	    else 
	    {
		    hideCalendar();
		    if(ctlNow != ctl) 
		    {
		         popUpCalendar(ctl, ctl2, format);
	         }
         }
         ctlNow = ctl;
    }
}
//=============================================================================
function hideCalendar1(e) 
{
    //cross browsing change...
    //if(event.keyCode == 27) hideCalendar();
    if(isEscClicked(e)) 
    {
	    hideCalendar();
    }
}
//=============================================================================
function hideCalendar2() 
{
    if(!bShow) 
    {
         hideCalendar();
    }
    bShow = false;
}
//=============================================================================
if(dom) 
{
    /*for(i=0;i<imgsrc.length;i++) 
      {
		img[i] = new Image;
		img[i].src = imgDir + imgsrc[i];
	 }*/
	
    document.write('<div class="calendar" onclick="bShow=true" id="calendar"><table cellpadding="2" cellspacing="0" class="main" width="' + ((showWeekNumber == 1) ? 250 : 220)+'"><tr class="caption"><td><table cellspacing="0" cellpadding="2" width="' + ((showWeekNumber == 1) ? 248 : 218) + '"><tr><td class="options"><span id="caption"></span></td><td class="close"><a class="close" href="javascript:hideCalendar()"></a></td></tr></table></td></tr><tr><td class="content"><span class="content" id="content"></span></td></tr>');

    if(showToday == 1) 
    {
	    document.write ('<tr bgcolor="#f0f0f0"><td class="today"><span id="lblToday"></span></td></tr>');
    }
    document.write('</table></div><div id="selectMonth" class="combobox"></div><div id="selectYear" class="combobox"></div>');
}
//=============================================================================
//if (ie) 
//	init();
//else
//	window.onload = init;
//	
	
addEvent(window, "load", init);	
	
