﻿var	fixedX = -1;			// x position (-1 if to appear below control)
var	fixedY = -1;			// y position (-1 if to appear below control)
var startAt = 1;			// 0 - sunday ; 1 - monday
var showWeekNumber = 1;	    // 0 - don't show; 1 - show
var showToday = 1;		    // 0 - don't show; 1 - show
var imgDir = '../herpimages/date/';
var gotoString = "转到当前月";
var todayString = "今天星期";
var weekString = "周";
var scrollLeftMessage = "单击到前一个月，按住鼠标左键自动滚动。";
var scrollRightMessage = "单击到下一个月，按住鼠标左键自动滚动。";
var selectMonthMessage = "单击选择月份";
var selectYearMessage = "单击选择年";
var selectDateMessage = "选择日期 [date] ";  // do not replace [date], it will be replaced by date.
var	crossobj, crossMonthObj, crossYearObj;
var monthSelected, yearSelected, dateSelected;
var omonthSelected, oyearSelected, odateSelected;
var monthConstructed, yearConstructed;
var intervalID1, intervalID2, timeoutID1, timeoutID2;
var 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 bShow = false;

/* 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";
            }
        }
    }
}

/* 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 = "";
        }
    }
}

function HolidayRec (d, m, y, desc)
{
    this.d = d;
    this.m = m;
    this.y = y;
    this.desc = desc;
}

var HolidaysCounter = 0;
var Holidays = new Array();

function addHoliday (d, m, y, desc)
{
    Holidays[HolidaysCounter++] = new HolidayRec ( d, m, y, desc );
}

if (dom)
{
    for	(i=0;i<imgsrc.length;i++)
    {
        img[i] = new Image;
        img[i].src = imgDir + imgsrc[i];
    }
    
    var sTemp = "";
    sTemp += "<div onclick='bShow=true' class='date' id='calendar' style='z-index:+999;position:absolute;visibility:hidden;'>";
    sTemp += "<table class='popup' cellspacing='0' cellpadding='0'>";
    sTemp += "<tr>";
    sTemp += "<td>";
    sTemp += "<table class='caption'><tr>";
    sTemp += "<td id=caption style='padding:0px;'>"
    sTemp += "</td>";
    sTemp += "<td align=right>";
	sTemp += "<a href='javascript:nullCalendar();'>";
	sTemp += "<IMG id='ctlNull' SRC='"+imgDir+"reset.gif' class='date' ALT='设置为空值'></a>&nbsp;";
    sTemp += "<a href='javascript:hideCalendar();'>";
    sTemp += "<IMG SRC='"+imgDir+"close.gif' class='date' ALT='关闭'>";
    sTemp += "</a></td></tr></table>";
    sTemp += "</td></tr><tr>";
    sTemp += "<td class='content'>";
    sTemp += "<span id='content'></span></td></tr>";
    
    if (showToday==1)
    {
        sTemp += "<tr class='today'>";
        sTemp += "<td class='today'>";
        sTemp += "<span id='lblToday'></span></td></tr>";
    }

    sTemp += "</table></div>";
    sTemp += "<div id='selectMonth' style='z-index:+999;position:absolute;visibility:hidden;'></div>";
    sTemp += "<div id='selectYear' style='z-index:+999;position:absolute;visibility:hidden;'></div>";
    
    document.write (sTemp);
}

var	monthName = new	Array("一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月");

if (startAt==0)
{
    dayName = new Array	("日","一","二","三","四","五","六");
}
else
{
    dayName = new Array	("一","二","三","四","五","六","日");
}

var	styleAnchor="text-decoration:none;";
var	styleLightBorder="border-style:solid;border-width:1px;border-color:#a0a0a0;";

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 = todayString +dayName[(today.getDay()-startAt==-1)?6:(today.getDay()-startAt)]+"   " +"<a onmousemove='window.status=\""+gotoString+"\"' onmouseout='window.status=\"\"' title='"+gotoString+"' style='"+styleAnchor+"' href='javascript:monthSelected=monthNow;yearSelected=yearNow;constructCalendar();'>" + yearNow + "年" + (monthNow+1) + "月" +	dateNow	+ "日</a>";
        }

        sHTML1 = "<table cellspacing='0' cellpadding='0'><tr>"
        sHTML1 +=  "<td id='spanLeft' class='datebtn' ";
        sHTML1 += "onmouseover='swapImage(\"changeLeft\",\"left2.gif\");this.className=\"datebtnover\";window.status=\""+scrollLeftMessage+"\"' ";
        sHTML1 += "onclick='javascript:decMonth()' ";
        sHTML1 += "onmouseout='clearInterval(intervalID1);swapImage(\"changeLeft\",\"left1.gif\");this.className = \"datebtn\";window.status=\"\"' ";
        sHTML1 += "onmousedown='clearTimeout(timeoutID1);timeoutID1=setTimeout(\"StartDecMonth()\",500)' ";
        sHTML1 += "onmouseup='clearTimeout(timeoutID1);clearInterval(intervalID1)'>&nbsp";
        sHTML1 += "<IMG id='changeLeft' SRC='"+imgDir+"left1.gif' class='datebtn'>&nbsp</td>";
        
        sHTML1 += "<td id='spanRight' class='datebtn' ";
        sHTML1 += "onmouseover='swapImage(\"changeRight\",\"right2.gif\");this.className=\"datebtnover\";window.status=\""+scrollRightMessage+"\"' ";
        sHTML1 += "onmouseout='clearInterval(intervalID1);swapImage(\"changeRight\",\"right1.gif\");this.className=\"datebtn\";window.status=\"\"' ";
        sHTML1 += "onclick='incMonth()' ";
        sHTML1 += "onmousedown='clearTimeout(timeoutID1);timeoutID1=setTimeout(\"StartIncMonth()\",500)' ";
        sHTML1 += "onmouseup='clearTimeout(timeoutID1);clearInterval(intervalID1)'>&nbsp";
        sHTML1 += "<IMG id='changeRight' SRC='"+imgDir+"right1.gif' class='datebtn'>&nbsp</td>";
        
        sHTML1 += "<td id='spanMonth' class='datebtn' ";
        sHTML1 += "onmouseover='swapImage(\"changeMonth\",\"drop2.gif\");this.className=\"datebtnover\";window.status=\""+selectMonthMessage+"\"' ";
        sHTML1 += "onmouseout='swapImage(\"changeMonth\",\"drop1.gif\");this.className=\"datebtn\";window.status=\"\"' ";
        sHTML1 += "onclick='popUpMonth()'></td>";
        
        sHTML1 += "<td id='spanYear' class='datebtn' ";
        sHTML1 += "onmouseover='swapImage(\"changeYear\",\"drop2.gif\");this.className=\"datebtnover\";window.status=\""+selectYearMessage+"\"'	";
        sHTML1 += "onmouseout='swapImage(\"changeYear\",\"drop1.gif\");this.className=\"datebtn\";window.status=\"\"' ";
        sHTML1 += "onclick='popUpYear()'></td>";
        sHTML1 += "</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	("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;

    hideCalendar();
    ctlToPlaceValue.value = constructDate(dateSelected,monthSelected,yearSelected);
}

function nullCalendar()
{
    var	sTmp;
    hideCalendar();
    ctlToPlaceValue.value = '';
}

/*** 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 class='ym' id='m" + i + "' ";
            sHTML += "onmouseover='this.className = \"ymover\"' "
            sHTML += "onmouseout='this.className = \"ym\"' "
            sHTML += "onclick='monthConstructed=false;monthSelected=" + i + ";constructCalendar();popDownMonth();event.cancelBubble=true'>"
            sHTML += "&nbsp;" + sName + "&nbsp;</td></tr>" ;
        }
        var sTemp = "";
        sTemp += "<table class='ym' cellspacing=0 ";
        sTemp += "onmouseover='clearTimeout(timeoutID1)' ";
        sTemp += "onmouseout='clearTimeout(timeoutID1);timeoutID1=setTimeout(\"popDownMonth()\",100);event.cancelBubble=true'>";
        
        document.getElementById("selectMonth").innerHTML = sTemp +	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;

    hideElement( 'SELECT', document.getElementById("selectMonth") );
    hideElement( 'APPLET', document.getElementById("selectMonth") );
}

function popDownMonth()
{
    crossMonthObj.visibility= "hidden";
}

/*** Year Pulldown ***/
function incYear()
{
    for	(i=0; i<7; i++)
    {
        newYear	= (i+nStartingYear)+1;
        if (newYear==yearSelected)
        {
            sYear =	"&nbsp;<B>"	+ newYear +	"</B>&nbsp;";
        }
        else
        {
            sYear =	"&nbsp;" + newYear + "&nbsp;";
        }
        document.getElementById("y"+i).innerHTML = sYear;
    }
    nStartingYear ++;
    bShow=true;
}

function decYear()
{
    for	(i=0; i<7; i++)
    {
        newYear	= (i+nStartingYear)-1;
        if (newYear==yearSelected)
        {
            sYear =	"&nbsp;<B>"	+ newYear +	"</B>&nbsp;";
        }
        else
        {
            sYear =	"&nbsp;" + newYear + "&nbsp;";
        }
        document.getElementById("y"+i).innerHTML = sYear;
    }
    nStartingYear --;
    bShow=true;
}

function selectYear(nYear)
{
    yearSelected=parseInt(nYear+nStartingYear);
    yearConstructed=false;
    constructCalendar();
    popDownYear();
}

function constructYear()
{
    popDownMonth();
    sHTML =	"";
    if (!yearConstructed)
    {

        sHTML =	"<tr>";
        sHTML += "<td align='center' class='ym' ";
        sHTML += "onmouseover='this.className=\"ymover\"' ";
        sHTML += "onmouseout='clearInterval(intervalID1);this.className=\"ym\"' ";
        sHTML += "onmousedown='clearInterval(intervalID1);intervalID1=setInterval(\"decYear()\",30)' ";
        sHTML += "onmouseup='clearInterval(intervalID1)'>-</td></tr>";

        j =	0;
        nStartingYear =	yearSelected-3;
        for	(i=(yearSelected-3); i<=(yearSelected+3); i++)
        {
            sName =	i;
            if (i==yearSelected)
            {
                sName =	"<B>" +	sName +	"</B>";
            }

            sHTML += "<tr>";
            sHTML += "<td class='ym' id='y" + j + "' ";
            sHTML += "onmouseover='this.className=\"ymover\"' ";
            sHTML += "onmouseout='this.className=\"ym\"' ";
            sHTML += "onclick='selectYear("+j+");event.cancelBubble=true'>&nbsp;" + sName + "&nbsp;</td></tr>";
            j ++;
        }

        sHTML += "<tr>";
        sHTML += "<td align='center' class='ym' ";
        sHTML += "onmouseover='this.className=\"ymover\"' ";
        sHTML += "onmouseout='clearInterval(intervalID2);this.className=\"ym\"' ";
        sHTML += "onmousedown='clearInterval(intervalID2);intervalID2=setInterval(\"incYear()\",30)' ";
        sHTML += "onmouseup='clearInterval(intervalID2)'>+</td></tr>";

        var sTemp = "";
        sTemp += "<table class='ym' ";
        sTemp += "bgcolor='#FFFFDD' ";
        sTemp += "onmouseover='clearTimeout(timeoutID2)' ";
        sTemp += "onmouseout='clearTimeout(timeoutID2);timeoutID2=setTimeout(\"popDownYear()\",100)' cellspacing=0>";
        
        document.getElementById("selectYear").innerHTML	= sTemp + 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 - 1;
    crossYearObj.top = parseInt(crossobj.top) +	26;
}

/*** calendar ***/
function WeekNbr(n)
{
    // Algorithm used:
    // From Klaus Tondering's Calendar document (The Authority/Guru)
    // hhtp://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 class='day'><tr>";

    if (showWeekNumber==1)
    {
        sHTML += "<td width=20 align='center'><b>" + weekString + "</b></td>";
        sHTML += "<td width=1 rowspan=7 bgcolor='#000000' style='padding:0px'>"
        sHTML += "<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=right>";
        sStyle=styleAnchor;
        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+="background-color:#FFDDDD;";
                    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))+"\"' ";
        dateMessage += "onmouseout='window.status=\"\"' ";

        if ((datePointer==dateNow)&&(monthSelected==monthNow)&&(yearSelected==yearNow))
        {
            sHTML += "<b><a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' ";
            sHTML += "href='javascript:dateSelected="+datePointer+";closeCalendar();'>";
            sHTML += "<font color=#ff0000>&nbsp;" + datePointer + "</font>&nbsp;</a></b>";
        }
        else if	(dayPointer % 7 == (startAt * -1)+1)
        {
            sHTML += "<a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' ";
            sHTML += "href='javascript:dateSelected="+datePointer + ";closeCalendar();'>";
            sHTML += "&nbsp;<font color=#f0f0f0>" + datePointer + "</font>&nbsp;</a>";
        }
        else
        {
            sHTML += "<a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' ";
            sHTML += "href='javascript:dateSelected="+datePointer + ";closeCalendar();'>";
            sHTML += "&nbsp;" + datePointer + "&nbsp;</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[monthSelected] + "&nbsp;<IMG id='changeMonth' SRC='"+imgDir+"drop1.gif' class='datebtn'>";
    document.getElementById("spanYear").innerHTML = "&nbsp;" + yearSelected + "&nbsp;<IMG id='changeYear' SRC='"+imgDir+"drop1.gif' class='datebtn'>";
}

function popUpCalendar(ctl,	ctl2, format)
{
    var	leftpos=0;
    var	toppos=0;

    if (bPageLoaded)
    {
        if ( crossobj.visibility == "hidden" )
        {
            ctlToPlaceValue = ctl2;
            var sReq = ctl2.getAttribute('required');
            //alert(sReq);
            if (sReq == 'true')
				document.getElementById("ctlNull").style.display = 'none';
			else
				document.getElementById("ctlNull").style.display = 'inline';
			
            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 - 2 : fixedX;
            crossobj.top = fixedY==-1 ?	ctl.offsetTop +	toppos + ctl.offsetHeight + 4 : fixedY;
            constructCalendar (1, monthSelected, yearSelected);
            crossobj.visibility=(dom||ie)? "visible" : "show";

            hideElement( 'SELECT', document.getElementById("calendar") );
            hideElement( 'APPLET', document.getElementById("calendar") );
            
			document.onkeypress = hidecal1;
			document.onclick = hidecal2;

            bShow = true;
        }
        else
        {
            hideCalendar();
            if (ctlNow!=ctl)
            {
                popUpCalendar(ctl, ctl2, format);
            }
        }
        ctlNow = ctl;
    }
}

document.onkeypress = function hidecal1 ()
{
    if (event.keyCode==27)
    {
        hideCalendar();
    }
}

document.onclick = function hidecal2 () 
{
    if (!bShow)
    {
        hideCalendar();
    }
    bShow = false;
}

if(ie)
{
    init();
}
else
{
    window.onload=init;
}