//===================================================================
//建立日期：2005年6月22日
//作者：杜保发@东南融通
//功能概述：日历控件脚本库,支持日期选取、校验、
//调用方法：在调用文件头引入即可，如下：
//<head>
//<script src="/js/calendar.js" ></script>
//</head>
//===================================================================

var imgDir = "../images/";
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 = 0    // 0 - don't show; 1 - show
var showToday = 0        // 0 - don't show; 1 - show
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,
        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 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 cal_title = "";
    //显示包含日历控件的块元素DIV
    cal_title += "<div onclick='bShow=true' id='calendar' style='z-index:+999;position:absolute;visibility:hidden;'>";
    //显示日历控件最外层的Table
    cal_title += "<table cellpadding=0px cellspacing=0px width='" + ((showWeekNumber == 1)?250:220) + "' style='font-family:arial;font-size:9pt;border:1px solid #a0a0a0;'>";
    cal_title += "<tr bgcolor='#0000aa'><td>";
    //显示日历控件的操作区
    cal_title += "<table width='" + ((showWeekNumber == 1)?248:218) + "'>";
    cal_title += "<tr><td style='padding:1px;font-family:arial;font-size:9pt;'>";
    //显示年，月选择
    cal_title += "<font color='#ffffff'><B><span id='caption'></span></B></font></td>";
    //显示关闭图片
    cal_title += "<td align=right><a href='javascript:hideCalendar()'>";
    cal_title += "<IMG SRC='" + imgDir + "close.gif' WIDTH='15' HEIGHT='13' BORDER='0' ALT='关闭'></a></td>";
    cal_title += "</tr></table>";
    //操作区结束
    cal_title += "</td></tr>";
    //显示日历控件的日历区
    cal_title += "<tr><td style='padding:5px' bgcolor=#ffffff><span id='content'></span></td></tr>";
    //document.write (cal_title);

    //是否显示今天
    if (showToday == 1)
    {
        cal_title += "<tr bgcolor=#f0f0f0><td style='padding:5px' align=center><span id='lblToday'></span></td></tr>";
    }
    cal_title += "</table></div>";
    cal_title += "<div id='selectMonth' style='z-index:+999;position:absolute;visibility:hidden;'></div>";
    cal_title += "<div id='selectYear'  style='z-index:+999;position:absolute;visibility:hidden;'></div>";
    document.write(cal_title);
}

var monthName = new Array("一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月");
var monthName2 = new Array("一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月");
if (startAt == 0)
{
    dayName = new Array    ("天", "一", "二", "三", "四", "五", "六")
}
else
{
    dayName = new Array    ("一", "二", "三", "四", "五", "六", "天")
}
var styleAnchor = "text-decoration:none;color:black;"
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 initCalendar()
{
    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 + " <a onmousemove=' style='" + styleAnchor + "' href='javascript:monthSelected=monthNow;yearSelected=yearNow;constructCalendar();'>" + dayName[(today.getDay() - startAt == -1)?6:(today.getDay() - startAt)] + ", " + dateNow + " " + monthName[monthNow].substring(0, 3) + "	" + yearNow + "</a>"
        }

        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()
{
    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)
{
    var 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[m])
    sTmp = sTmp.replace("<p>", monthName2[m])
    sTmp = sTmp.replace("yyyy", y)
    return sTmp.replace("yy", padZero(y % 100))
}

function closeCalendar()
{
    var sTmp

    hideCalendar();

    //Added by dubf on 2004-4-15
    var dd = constructDate(dateSelected, monthSelected, yearSelected);
    var date = dd.split(" ");
    var d = ctlToPlaceValue.value.split(" ");
    var time = (d.length > 1?" " + d[1]:(dateFormat.indexOf("00:00:00") == -1?"":" 00:00:00"));
    ctlToPlaceValue.value = date[0] + time;
}

/*** 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=\"#FFCC99\"' 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 width=70	style='font-family:arial; font-size:11px; border-width:1; border-style:solid; border-color:#a0a0a0;' bgcolor='#FFFFDD' 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

    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)
        {
            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=\"#FFCC99\"' onmouseout='clearInterval(intervalID1);this.style.backgroundColor=\"\"' style='cursor:pointer'	onmousedown='clearInterval(intervalID1);intervalID1=setInterval(\"decYear()\",30)' 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><td id='y" + j + "' onmouseover='this.style.backgroundColor=\"#FFCC99\"' onmouseout='this.style.backgroundColor=\"\"' style='cursor:pointer' onclick='selectYear(" + j + ");event.cancelBubble=true'>&nbsp;" + sName + "&nbsp;</td></tr>"
            j ++;
        }

        sHTML += "<tr><td align='center' onmouseover='this.style.backgroundColor=\"#FFCC99\"' onmouseout='clearInterval(intervalID2);this.style.backgroundColor=\"\"' style='cursor:pointer' onmousedown='clearInterval(intervalID2);intervalID2=setInterval(\"incYear()\",30)'	onmouseup='clearInterval(intervalID2)'>+</td></tr>"

        document.getElementById("selectYear").innerHTML = "<table width=44 style='font-family:arial; font-size:11px; border-width:1; border-style:solid; border-color:#a0a0a0;'	bgcolor='#FFFFDD' onmouseover='clearTimeout(timeoutID2)' onmouseout='clearTimeout(timeoutID2);timeoutID2=setTimeout(\"popDownYear()\",100)' 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
}

/*** 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	 border=0 style='font-family:verdana;font-size:10px;'><tr>"

    if (showWeekNumber == 1)
    {
        sHTML += "<td width=27><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='27' 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)) + "\"' onmouseout='window.status=\"\"' "

        if ((datePointer == dateNow) && (monthSelected == monthNow) && (yearSelected == yearNow))
        {
            sHTML += "<b><a " + dateMessage + " title=\"" + sHint + "\" style='" + sStyle + "' href='javascript:dateSelected=" + datePointer + ";closeCalendar();'><font color=#ff0000>&nbsp;" + datePointer + "</font>&nbsp;</a></b>"
        }
        else if (dayPointer % 7 == (startAt * -1) + 1)
        {
            sHTML += "<a " + dateMessage + " title=\"" + sHint + "\" style='" + sStyle + "' href='javascript:dateSelected=" + datePointer + ";closeCalendar();'>&nbsp;<font color=#909090>" + datePointer + "</font>&nbsp;</a>"
        }
        else
        {
            sHTML += "<a " + dateMessage + " title=\"" + sHint + "\" style='" + sStyle + "' href='javascript:dateSelected=" + datePointer + ";closeCalendar();'>&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' 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 popUpCalendar(ctl, ctl2, format)
{
    var leftpos = 0
    var toppos = 0
    if (bPageLoaded)
    {
        if (crossobj.visibility == "hidden")
        {
            ctlToPlaceValue = document.getElementById(ctl2);
            dateFormat = format.toLowerCase();

            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)
                aData = document.getElementById(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 ++
                            }
                        }
                    }
                    else if (aFormat[i] == "mmmm")
                    {
                        for (j = 0; j < 12; j++)
                        {
                            if (aData[i] == monthName2[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");

            //insert by myzhuang
            sLeftPos = ctl.offsetLeft + leftpos;
            sTopPos = ctl.offsetTop + toppos + ctl.offsetHeight + 2;
            sWidth = 265;
            sHeight = 175;
            if ((screen.width - event.screenX - 15) < sWidth)
            {
                sLeftPos = sLeftPos - sWidth + ctl.offsetWidth + 9;
            }
            if ((screen.height - event.screenY - 110) < sHeight)
            {
                sTopPos = sTopPos - sHeight - ctl.offsetHeight - 14;
            }

            crossobj.left = fixedX == -1 ? sLeftPos :    fixedX;
            crossobj.top = fixedY == -1 ?    sTopPos :    fixedY;
            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
    }
}

document.onkeypress = function hidecal1()
{
    if (event.keyCode == 27)
    {
        hideCalendar()
    }
}
document.onclick = function hidecal2()
{
    if (!bShow)
    {
        hideCalendar()
    }
    bShow = false
}

if (ie)
{
    initCalendar()
}
else
{
    window.onload = initCalendar
}

//==========================================
//Purpose: 验证日期时间是否合法(格式:yyyy-mm-dd hh:mm:ss)
//包括验证每月的最大天数及是否闰年
//参数:obj输入日期的文本框
//调用：输入日期的文本框的onblur()中调用
//示例:<input type=text name=birthday onblur="checkDateTime(this);">
//==========================================
function checkDateTime(obj)
{
    try
    {
        var strHint = "日期时间格式不对！\n\n正确格式:年-月-日 时:分:秒\n\n如：2003-12-24 10:20:00";
        var s = trim(obj.value);
        if (s == "") return false;
        if (isNaN(Date.parse(toJsDate(s.substring(0, 10)))))
        {
            window.alert(strHint);
            obj.select();
            obj.focus();
            return false;
        }
        var d = s.split(" ");
        var split_date;
        var split_time;
        if (d.length == 1)
        {
            split_date = d[0];
            split_time = "00:00:00";
        }
        else
        {
            split_date = d[0];
            split_time = d[1];
        }

        var date = split_date.split("-");
        var time = split_time.split(":");

        var yy = parseMyInt(date[0]);
        var mm = parseMyInt(date[1]);
        var dd = parseMyInt(date[2]);
        var hh = parseMyInt(time[0]);
        var mi = parseMyInt(time[1]);
        var ss = parseMyInt(time[2]);

        parseDate(obj, yy, mm, dd);
        //解析日期
        parseTime(obj, hh, mi, ss);
        //解析时间


    }
    catch (e)
    {
    }
}

//Added by dubf on 2004-4-13
//==========================================
//Purpose: 验证日期是否合法(格式:yyyy-mm-dd)
//包括验证每月的最大天数及是否闰年
//参数:obj输入日期的文本框
//调用：输入日期的文本框的onblur()中调用
//示例:<input type=text name=birthday onblur="checkDate(this);">
//==========================================

function checkDate(obj)
{
    try
    {
        if (obj.value != "")
        {
            if (isNaN(Date.parse(toJsDate(obj.value))))
            {
                window.alert("'" + obj.value + "' 不是合法日期.\n 正确日期格式:yyyy-mm-dd");
                obj.select();
                obj.focus();
                return;
            }
            var d = obj.value.split("-");
            var yy = parseMyInt(d[0]);
            //get year
            var mm = parseMyInt(d[1]);
            //get month
            var dd = parseMyInt(d[2]);
            //get day
            parseDate(obj, yy, mm, dd);
        }
    }
    catch (e)
    {
    }
}

function toJsDate(stdDate)
{
    var str = "123";
    try
    {
        var d = stdDate.split("-");
        var yy = parseMyInt(d[0]);
        //get year
        var mm = parseMyInt(d[1]);
        //get month
        var dd = parseMyInt(d[2]);
        //get day
        str = mm + "/" + dd + "/" + yy;
        if (!verifyInteger(d[0]) || !verifyInteger(d[1]) || !verifyInteger(d[2]))
        {
            str = "123";
        }
    }
    catch (e)
    {
        str = "123";
    }
    return str;
}


//==========================================
//Purpose:解析日期
//参数:obj输入日期的文本框
//==========================================
function parseDate(obj, yy, mm, dd)
{
    try
    {

        if ((yy < 1900) || (yy > 9999) || (mm > 12) || (mm <= 0) || (dd > 31) || (dd <= 0))
        {
            window.alert("无效的日期范围！");
            obj.select();
            obj.focus();
            return;
        }

        if (((mm == 4) || (mm == 6) || (mm == 9) || (mm == 11)) && (dd == 31))
        {
            window.alert(mm + "月份只有30天!");
            obj.select();
            obj.focus();
            return;
        }
        if (mm == 2)
        {
            if ((dd > 29) && isleapyear(yy))
            {
                window.alert(yy + "年" + mm + "月只月29天!");
                obj.select();
                obj.focus();
                return;
            }

            if ((dd > 28) && !isleapyear(yy))
            {
                window.alert(yy + "年" + mm + "月只月28天!");
                obj.select();
                obj.focus();
                return;
            }
        }

        if ((yy == 1900) && (mm == 1) && (dd = 1))
        {
            window.alert("系统禁止使用日期:1900-01-01!");
            obj.select();
            obj.focus();
            return;
        }
        var s = yy + "-" + (mm < 10?"0" + mm:mm) + "-" + (dd < 10?"0" + dd:dd);
        var date = obj.value.split(" ");

        obj.value = s + (date.length > 1?" " + date[1]:"");
        return;
    }
    catch (e)
    {
    }
}

//==========================================
//Purpose: 解析时间
//参数:obj输入日期的文本框
//==========================================
function parseTime(obj, hh, mi, ss)
{
    try
    {
        if (hh < 0 || hh > 23)
        {
            alert("小时数应介于0到23之间！");
            obj.select();
            obj.focus();
            return;
        }
        if (mi < 0 || mi > 59)
        {
            alert("分钟数应介于0到59之间！");
            obj.select();
            obj.focus();
            return;
        }
        if (ss < 0 || ss > 59)
        {
            alert("秒数应介于0到59之间！");
            obj.select();
            obj.focus();
            return;
        }
        var s = (hh < 10?"0" + hh:hh) + ":" + (mi < 10?"0" + mi:mi) + ":" + (ss < 10?"0" + ss:ss);
        var date = obj.value.split(" ");
        obj.value = date[0] + " " + s;
    }
    catch (e)
    {
    }
}

//==========================================
//Purpose: 验证是否闰年
//参数:yy年份
//返回值:true--闰年,false--平年
//==========================================
function isleapyear(yy)
{
    if (((yy % 4 == 0) && ( yy % 100 != 0 )) || ( yy % 400 == 0))
    {
        return true;
    }
    else return false;
}

//==========================================
//Purpose: 调用日历控件，选择日期
//参数:obj接收选中日期的文本框
//返回值:选中的日期(格式:yyyy-mm-dd)
//==========================================
function Calendar(obj)
{

    if (obj == null) return;
    var result;
    var arg = new Array();
    arg.currentDate = obj.value;
    var sUrl = "Calendar.htm"
    var sFeature = "dialogWidth:280px;dialogHeight:200px;Status:0;resizable:0;help:0";
    result = window.showModalDialog(sUrl, arg, sFeature);
    if (result != null)
    {
        if (result.indexOf("undefined") >= 0)
            obj.value = "";
        else
            obj.value = result;
    }

}


function getToday()
{
    var today = new Date();
    var mm = today.getMonth() + 1;
    var dd = today.getDate();
    var yy = today.getFullYear();
    var s = yy + "-" + (mm < 10?"0" + mm:mm) + "-" + (dd < 10?"0" + dd:dd);
    return s;
}

function getTime()
{
    var c = ":";
    var d = new Date();
    var hh = d.getHours();
    var mi = d.getMinutes();
    var ss = d.getSeconds();
    var s = (hh < 10?"0" + hh:hh) + c + (mi < 10?"0" + mi:mi) + c + (ss < 10?"0" + ss:ss);
    return s;
}

function getCNToday()
{
    var today = new Date();
    var mm = today.getMonth() + 1;
    var dd = today.getDate();
    var yy = today.getFullYear();
    var s = yy + "年" + mm + "月" + dd + "日";
    return s;
}

function toJsDate(stdDate)
{
    var arr = stdDate.split("-");
    var mm = arr[1];
    var dd = arr[2];
    var yy = arr[0];
    var s = mm + "/" + dd + "/" + yy;
    return s;
}

function toShortDate(jsDate)
{
    var arr = jsDate.split("-");
    var mm = arr[0];
    var dd = arr[1];
    var yy = arr[2];
    var s = yy + "-" + mm + "-" + mm;
    return s;
}

//==========================================
//Purpose:日历选择对象
//参数:
//obj:对象,格式：<表单名>.<元素名>
//objValue:对象值
//objStyle:对象属性:格式：<属性名>=<属性值>,<属性名>=<属性值>,...
//==========================================
function getCalendar(obj, objValue, objStyle)
{
    try
    {
        var objArr = obj.split(".");
        var strSubObj = objArr[1];
        var subObj = new Object(strSubObj);
        var strObjValue;
        if (objValue.toUpperCase() == "TODAY")
            strObjValue = getToday();
        else
            strObjValue = trim(objValue);

        s = "<input  name='" + strSubObj + "' value='" + strObjValue + "'   " + objStyle;
        s += " onblur='checkDate(this)' ondblclick='getCurrDate(this)'>";
        s += " <button style='height:20px;width:20px' onclick='Calendar(" + subObj + ")'>...</button>";
        document.write(s);
    }
    catch (e)
    {
    }
}

//==========================================
//Purpose: 双击取得当天日期
//参数:无
//返回值:空
//调用方法:在文本控件里ondblclick="getCurrDate(this);"
//==========================================
function getCurrDate(obj)
{

    if (trim(obj.value) == "")
    {
        obj.value = getToday();
    }
    if(obj.name == 'village_official_start_time' || obj.name == 'village_official_end_time' )
    {
    	isAssessC();
    }
    return true;
}

//==========================================
//Purpose: 双击取得当天日期时间
//参数:无
//返回值:空
//调用方法:在文本控件里ondblclick="getCurrDateTime(this);"
//==========================================
function getCurrDateTime(obj)
{

    if (trim(obj.value) == "")
    {
        obj.value = getToday() + " " + getTime();
    }
    return true;
}


//==========================================
//Purpose:验证输入的小时是否合法 
//参数:无
//返回值:空
//调用方法:在文本控件里onblur="typehour(this);"
//==========================================
function typehour(obj)
{
    str = obj.value;

    if (trim(str) == "") return false;
    if (!isInteger(obj)) return false;
    if (parseMyInt(str) > 23)
    {
        alert("请输入00-23之间的数值!");
        obj.focus();
        obj.select();
        return false;
    }
    if (str.length == 1)
    {
        obj.value = "0" + str;
        return true;
    }
    return true;
}

//==========================================
//Purpose:验证输入的分钟是否合法 
//参数:无
//返回值:空
//调用方法:在文本控件里onblur="typemin(this);"
//==========================================
function typemin(obj)
{
    str = obj.value;

    if (trim(str) == "") return false;
    if (!isInteger(obj)) return false;

    if (parseMyInt(str) > 59)
    {
        alert("请输入00-59之间的数值!");
        obj.focus();
        obj.select();
        return false;
    }
    if (str.length == 1)
    {
        obj.value = "0" + str;
        return true;
    }
    return true;
}
