var Calendar = {

    hideElement : function(eltname)
    {
        $(eltname).style.display = "none";
    },

    toggleVisible : function(eltname)
    {
        elt = $(eltname);
        if (elt.style.display == '')
        {
            $(eltname).style.display = "none";
        }
        else
        {
            Calendar.fixPosition(eltname);
            elt.style.display = '';
        }
    },

    setPosition : function(elt,positionername,isPlacedUnder)
    {
		var position = $(positionername).cumulativeOffset();
        elt.style.left = position.left + 'px';
        elt.style.top = position.top + 'px';
    },

    months : new Array("一月", "二月", "三月", "四月", "五月", "六月", "七月","八月", "九月", "十月", "十一月", "十二月"),
    daysInMonth : new Array(31, 28, 31, 30, 31, 30, 31, 31,30, 31, 30, 31),
    displayMonth : new Date().getMonth(),
    displayYear : new Date().getFullYear(),
    displayDivName : null,
    displayElement : null,
	dateFormat : null,

    getDays : function(month, year)
    {
        if (1 == month)
            return ((0 == year % 4) && (0 != (year % 100))) || (0 == year % 400) ? 29 : 28;
        else
            return Calendar.daysInMonth[month];
    },

    getToday : function()
    {
        this.now = new Date();
        this.year = this.now.getFullYear();
        this.month = this.now.getMonth();
        this.day = this.now.getDate();
    },

  //  today : new Calendar.getToday(),

    newCalendar : function(eltName,attachedElement)
    {
        if (attachedElement)
        {
            if (Calendar.displayDivName && Calendar.displayDivName != eltName) Calendar.hideElement(Calendar.displayDivName);
            Calendar.displayElement = $(attachedElement);
        }
        Calendar.displayDivName = eltName;
        Calendar.today = new Calendar.getToday();
        var parseYear = parseInt(Calendar.displayYear + '');
        var newCal = new Date(parseYear,Calendar.displayMonth,1);
        var day = -1;
        var startDayOfWeek = newCal.getDay();
        if ((Calendar.today.year == newCal.getFullYear()) && (Calendar.today.month == newCal.getMonth()))
        {
            day = Calendar.today.day;
        }
        var intDaysInMonth = Calendar.getDays(newCal.getMonth(), newCal.getFullYear());
        var daysGrid = Calendar.makeDaysGrid(startDayOfWeek,day,intDaysInMonth,newCal,eltName);

        $(eltName).innerHTML = "";
        Element.insert(eltName, daysGrid);
    //toggleHour();
    },

    incMonth : function(delta,eltName)
    {
        Calendar.displayMonth += delta;
        if (Calendar.displayMonth >= 12)
        {
            Calendar.displayMonth = 0;
            Calendar.incYear(1,eltName);
        }
        else if (Calendar.displayMonth <= -1)
        {
            Calendar.displayMonth = 11;
            Calendar.incYear(-1,eltName);
        }
        else
        {
            Calendar.newCalendar(eltName);
        }
    },

    incYear : function(delta,eltName)
    {
        Calendar.displayYear = parseInt(Calendar.displayYear + '') + delta;
        Calendar.newCalendar(eltName);
    },


    makeDaysGrid : function(startDay,day,intDaysInMonth,newCal,eltName)
    {
        var daysGrid;
        var month = newCal.getMonth();
        var year = newCal.getFullYear();
        var isThisYear = (year == new Date().getFullYear());
        var isThisMonth = (day > -1)
        daysGrid = '<table border=1 cellspacing=0 cellpadding=2 style="font-size:9pt">';
        daysGrid += '<tr bgcolor=EFF3EF align=right><td>'
        daysGrid += '<a href="javascript:Calendar.hideElement(\'' + eltName + '\')"><img src="/images/close.gif" border=0></a>';
        daysGrid += '</td></tr>'
        daysGrid += '<tr><td bgcolor=#ffffff nowrap>';
        daysGrid += '<font face="courier new, courier" style="font-size:9pt">';
        daysGrid += '<font style="font-size:7pt">&nbsp;&nbsp;</font>';
        daysGrid += '<a href="javascript:Calendar.incMonth(-1,\'' + eltName + '\')">&laquo;</a>';

        daysGrid += '&nbsp;<b>';
        if (isThisMonth) {
            daysGrid += '<font color=red>' + Calendar.months[month] + '</font>';
        }
        else {
            daysGrid += Calendar.months[month];
        }
        daysGrid += '</b>';

        daysGrid += '&nbsp;<a href="javascript:Calendar.incMonth(1,\'' + eltName + '\')">&raquo;</a>';
        daysGrid += '&nbsp;&nbsp;';
        daysGrid += '<a href="javascript:Calendar.incYear(-1,\'' + eltName + '\')">&laquo;</a>';
        daysGrid += '&nbsp;';

        daysGrid += '<b>';
        if (isThisYear) {
            daysGrid += '<font color=red>' + year + '</font>';
        }
        else {
            daysGrid += ''+year;
        }
        daysGrid += '</b>';

        daysGrid += '&nbsp;<a href="javascript:Calendar.incYear(1,\'' + eltName + '\')">&raquo;</a><br>';
        daysGrid += '&nbsp;Su Mo Tu We Th Fr Sa&nbsp;<br>&nbsp;';

        var dayOfMonthOfFirstSunday = (7 - startDay + 1);
        for (var intWeek = 0; intWeek < 6; intWeek++) {
            var dayOfMonth;
            for (var intDay = 0; intDay < 7; intDay++) {
                dayOfMonth = (intWeek * 7) + intDay + dayOfMonthOfFirstSunday - 7;
                if (dayOfMonth <= 0)
                {
                    daysGrid += "&nbsp;&nbsp; ";
                }
                else if (dayOfMonth <= intDaysInMonth)
                {
                    var color = "blue";
                    if (day > 0 && day == dayOfMonth) color="red";
                    daysGrid += '<a href="javascript:Calendar.setDay(';
                    daysGrid += dayOfMonth + ',\'' + eltName + '\')" '
                    daysGrid += 'style="color:' + color + '">';
                    var dayString = dayOfMonth + "</a> ";
                    if (dayString.length == 6) dayString = '0' + dayString;
                    daysGrid += dayString;
                }
            }
            if (dayOfMonth < intDaysInMonth) daysGrid += "<br>&nbsp;";
        }
        daysGrid += '<tr align="center" bgcolor=#336699 style="font-size:9pt;">';
        daysGrid += '<td width="100%"><span style="color:#fff" id="cal_time_span"><input type="text" style="width:20px;height:15px;font-size:9pt" id="cal_time_hh">:<input type="text" style="width:20px;height:15px;font-size:9pt" id="cal_time_mm">:<input type="text" style="width:20px;height:15px;font-size:9pt" id="cal_time_ss">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><b>';
        daysGrid += '<a href="javascript:Calendar.setToDay(';
        daysGrid += '\'' + eltName + '\')" ';
        daysGrid += 'style="color:#FFFFFF">今天</a> <a href="javascript:Calendar.setDay(null,\'' + eltName + '\')" style="color:#FFFFFF">确定</a></b></td></tr>';
        return daysGrid + "</td></tr></table>";
    },

    setDay : function(day,eltName)
    {
        if (day != null){
            var tnow = new Date();
            tnow.setFullYear(Calendar.displayYear,Calendar.displayMonth,day);
            tnow.setHours($('cal_time_hh').value,$('cal_time_mm').value,$('cal_time_ss').value);
            if(Calendar.dateFormat == null){
                Calendar.displayElement.value = Calendar.format(tnow,'yyyy-MM-dd');
            }else{
                Calendar.displayElement.value = Calendar.format(tnow,Calendar.dateFormat);
            }
        }
        else{
            Calendar.displayElement.value = "";
        }
        Calendar.hideElement(eltName);
    },

    setToDay : function(eltName)
    {
        var tnow = new Date();
        tnow.setHours($('cal_time_hh').value,$('cal_time_mm').value,$('cal_time_ss').value);
        Calendar.displayElement.value =format(tnow,Calendar.dateFormat);
        Calendar.hideElement(eltName);
    },

    fixPosition : function(eltname)
    {
        elt = $(eltname);
        positionerImgName = eltname + 'Pos';
        Calendar.setPosition(elt, positionerImgName, false)
    },

    toggleDatePicker : function(eltName,attachedElement,dateFormat)
    {
        if(dateFormat == 'undefined' || dateFormat == null){
            Calendar.dateFormat = 'yyyy-MM-dd'
        }else{
            Calendar.dateFormat = dateFormat;
        }
        Calendar.newCalendar(eltName, $(attachedElement));
        var tnow = new Date();
        $('cal_time_hh').value = (tnow.getHours()>9?tnow.getHours().toString():'0' + tnow.getHours());
        $('cal_time_mm').value = (tnow.getMinutes()>9?tnow.getMinutes().toString():'0' + tnow.getMinutes());
        $('cal_time_ss').value = (tnow.getSeconds()>9?tnow.getSeconds().toString():'0' + tnow.getSeconds());
		try {
        Calendar.toggleVisible(eltName);
		}catch(ex) { alert(ex.message);}
    },

    toggleHour : function(){
        try{
            if(calendar.dateFormat.match(/hh/)){
                $('cal_time_span').style.display= '';
                var tnow = new Date();
                $('cal_time_hh').value = (tnow.getHours()>9?tnow.getHours().toString():'0' + tnow.getHours());
                $('cal_time_mm').value = (tnow.getMinutes()>9?tnow.getMinutes().toString():'0' + tnow.getMinutes());
                $('cal_time_ss').value = (tnow.getSeconds()>9?tnow.getSeconds().toString():'0' + tnow.getSeconds());
            }else{
                $('cal_time_span').style.display= 'none';
            }
        }catch(e){
            alert(e.message);
        }
    },

    format : function(date,formatStr){
        var str = formatStr;
        var week = ['一','二','三','四','五','六','日'];

        str=str.replace(/yyyy|YYYY/,date.getFullYear());
        str=str.replace(/yy|YY/,(date.getYear() % 100)>9?(date.getYear() % 100).toString():'0' + (date.getYear() % 100));

        str=str.replace(/MM/,date.getMonth()>9?(date.getMonth() + 1).toString():'0' + (date.getMonth() + 1));
        str=str.replace(/M/g,date.getMonth());

        str=str.replace(/w|W/g,week[date.getDay()]);

        str=str.replace(/dd|DD/,date.getDate()>9?date.getDate().toString():'0' + date.getDate());
        str=str.replace(/d|D/g,date.getDate());

        str=str.replace(/hh|HH/,date.getHours()>9?date.getHours().toString():'0' + date.getHours());
        str=str.replace(/h|H/g,date.getHours());
        str=str.replace(/mm/,date.getMinutes()>9?date.getMinutes().toString():'0' + date.getMinutes());
        str=str.replace(/m/g,date.getMinutes());

        str=str.replace(/ss|SS/,date.getSeconds()>9?date.getSeconds().toString():'0' + date.getSeconds());
        str=str.replace(/s|S/g,date.getSeconds());

        return str;
    }
};