﻿var cal;
var isFocus=false;//是否为焦点
var datetime=true;
var callbackfun=null; //回调函数
var currentObj = null; //当前文本框对象（修改于2009.10.24 (zl)）
var isPreOrNext = false;//是否点击向前或向后选择年/月

function SetDate(obj,strFormat,callback){
    currentObj = obj;
    obj.onkeydown=onObjKeyDown;//(修改于2009.10.24 (zl))
    isPreOrNext = false;
    writeCalPanel();
    var date = new Date();
    var by = date.getFullYear()-10; //最小值 → 10 年前
    var ey = date.getFullYear()+10; //最大值 → 10 年后
    //初始化为中文版，1为英文版
    cal = (cal==null) ? new Calendar(by, ey, 0,strFormat) : (cal.dateFormatStyle == strFormat ? cal : new Calendar(by, ey, 0,strFormat));
    cal.show(obj);
    if(strFormat=="yyyy-MM-dd hh:mm:ss"){ datetime=true;document.getElementById("timeTR").style.display="";}
    else if(strFormat=="yyyy-MM-dd"){ datetime=false;document.getElementById("timeTR").style.display="none";}

	if(typeof(callback) != "undefined" && callback != null) {callbackfun=callback;}
    else {callbackfun=null;}
};
//创建日期控件面板
function writeCalPanel(){
    if(!document.getElementById("ContainerPanel")){
        var cp=document.createElement("div");
        cp.id="ContainerPanel";
        cp.style.display="none";
        if(document.all){
            cp.innerHTML='<div id="calendarPanel" style="position: absolute;display: none;z-index: 9999999;'+
                         'background-color: #FFFFFF;border: 1px solid #CCCCCC;width:175px;font-size:12px;margin-left:25px;"></div>'+
                         '<iframe style="position:absolute;z-index:999999;width:expression(this.previousSibling.offsetWidth);'+
                         'height:expression(this.previousSibling.offsetHeight);'+
                         'left:expression(this.previousSibling.offsetLeft);top:expression(this.previousSibling.offsetTop);'+
                         'display:expression(this.previousSibling.style.display);" scrolling="no" frameborder="no"></iframe><div id="intervalDiv" style="display:none;border-style:solid;border-width:1px;background-color:white;z-index:99999999;"></div>';
        }
        else{
            cp.innerHTML='<div id="calendarPanel" style="position: absolute;display: none;z-index: 9999999;'+
                         'background-color: #FFFFFF;border: 1px solid #CCCCCC;width:175px;font-size:12px;margin-left:25px;"></div><div id="intervalDiv" style="display:none;border-style:solid;border-width:1px;background-color:white;z-index:99999999;"></div>';
        }
        var bd=document.getElementsByTagName("body")[0];
        bd.appendChild(cp);
    }
};
/**********************************/
//功能：给日期加或减指定时间
//参数：sFun("+"或"-"),sTime(具体时间),sTimeStyle(y或M或d或h或m或s 需要加减的类型),style(日期格式，默认yyyy-MM-dd hh:mm:ss)
/**********************************/
String.prototype.toCountTime=function(sFun,sTime,sTimeStyle,style){
try{
    if(typeof(style) == "undefined" || style == ""){style="yyyy-MM-dd hh:mm:ss"; } 
    var dDay=this.toDate(style);
    var iTime=parseInt(sTime,10);
    if(sFun == "+") {
    	switch(sTimeStyle){
    		case "y": dDay.setFullYear(dDay.getFullYear()+iTime);break;
    		case "M": dDay.setMonth(dDay.getMonth()+iTime);break;
    	    case "d": dDay.setDate(dDay.getDate()+iTime);break;
    		case "h": dDay.setHours(dDay.getHours()+iTime);break;
    		case "m": dDay.setMinutes(dDay.getMinutes()+iTime);break;
    		case "s": dDay.setSeconds(dDay.getSeconds()+iTime);break;
    		default:return false;
    	}
    } 
    else if(sFun == "-"){
    	switch(sTimeStyle){
    		case "y": dDay.setFullYear(dDay.getFullYear()-iTime);break;
    		case "M": dDay.setMonth(dDay.getMonth()-iTime);break;
    	    case "d": dDay.setDate(dDay.getDate()-iTime);break;
    		case "h": dDay.setHours(dDay.getHours()-iTime);break;
    		case "m": dDay.setMinutes(dDay.getMinutes()-iTime);break;
    		case "s": dDay.setSeconds(dDay.getSeconds()-iTime);break;
    		default:return false;
    	}
    }
    return dDay.format(style);
}
catch(ex){return "";} 
};
/**********************************/
//功能：格式化日期输出
//参数：style(格式，默认yyyy-MM-dd hh:mm:ss)
/**********************************/
Date.prototype.format = function(style){
    if(typeof(style) == "undefined" || style == ""){style="yyyy-MM-dd hh:mm:ss";} 
    var o = {
        "M+" : this.getMonth() + 1, 
        "d+" : this.getDate(),
        "h+" : this.getHours(),
        "m+" : this.getMinutes(), 
        "s+" : this.getSeconds(),
        "w+" : "天一二三四五六".charAt(this.getDay()), 
        "q+" : Math.floor((this.getMonth() + 3) / 3), 
        "S" : this.getMilliseconds()
    };
    if(/(y+)/.test(style)){
        style = style.replace(RegExp.$1,(this.getFullYear() + "").substr(4 - RegExp.$1.length));
    }
    for(var k in o){
        if(new RegExp("("+ k +")").test(style)){
            style = style.replace(RegExp.$1,RegExp.$1.length == 1 ? o[k] :("00" + o[k]).substr(("" + o[k]).length));
        }
    }
    return style;
};
/**********************************/
//功能：将字符串转为日期类型
//参数：style(日期格式，默认yyyy-MM-dd hh:mm:ss)
/**********************************/
String.prototype.toDate = function(style){
try{
    if(typeof(style) == "undefined" || style == "") {style="yyyy-MM-dd hh:mm:ss";}
    var y = this.substring(style.indexOf('y'),style.lastIndexOf('y')+1);
    var m = this.substring(style.indexOf('M'),style.lastIndexOf('M')+1);
    var d = this.substring(style.indexOf('d'),style.lastIndexOf('d')+1);
    var h = this.substring(style.indexOf('h'),style.lastIndexOf('h')+1);
    var i = this.substring(style.indexOf('m'),style.lastIndexOf('m')+1);
    var s = this.substring(style.indexOf('s'),style.lastIndexOf('s')+1);
    var dDateNow = new Date();
    if(isNaN(y)){y = dDateNow.getFullYear();} 
    if(isNaN(m)){m = dDateNow.getMonth();} 
    if(isNaN(d)){d = dDateNow.getDate();} 
    if(isNaN(h)){h = dDateNow.getHours();} 
    if(isNaN(i)){i = dDateNow.getMinutes();} 
    if(isNaN(s)){s = dDateNow.getSeconds();} 
    var dt ;
    eval ("dt = new Date('"+ y+"', '"+(m-1)+"','"+ d +"','"+ h +"','"+ i+"','"+ s +"')");
    return dt;
}
catch(ex){return false;}
};
/**//*
* 日历类
* @param   beginYear 1990
* @param   endYear   2010
* @param   lang      0(中文)|1(英语) 可自由扩充
* @param   dateFormatStyle "yyyy-MM-dd";
*/
function Calendar(beginYear, endYear, lang, dateFormatStyle){
    this.beginYear = 1990;
    this.endYear = 2010;
    this.lang = 0;//0(中文) | 1(英文)
    this.dateFormatStyle = "yyyy-MM-dd";

    if (beginYear != null && endYear != null){
        this.beginYear = beginYear;
        this.endYear = endYear;
    }

    if (lang != null){this.lang = lang;}

    if (dateFormatStyle != null){this.dateFormatStyle = dateFormatStyle;}

    this.dateControl = null;
    this.panel = this.getElementById("calendarPanel");
    this.container = this.getElementById("ContainerPanel");
    this.form = null;

    this.date = new Date();
    this.year = this.date.getFullYear();
    this.month = this.date.getMonth();

    this.colors = {
        "cur_word"      : "#000000", //当日日期文字颜色
        "cur_bg"        : "#99ccff", //当日日期单元格背影色
        "sel_bg"        : "#a1b1d0", //已被选择的日期单元格背影色
        "sun_word"      : "#FF0000", //星期天文字颜色
        "sat_word"      : "#333333", //星期六文字颜色
        "td_word_light" : "#333333", //单元格文字颜色
        "td_word_dark" : "#CCCCCC", //单元格文字暗色
        "td_bg_out"     : "#ecf5ff", //单元格背影色
        "td_bg_over"    : "#ffcc00", //单元格背影色
        "tr_word"       : "#333333", //日历头文字颜色
        "tr_bg"         : "#cee6ff", //日历头背影色
        "input_border" : "#6699cc", //input控件的边框颜色
        "input_bg"      : "#ecf5ff"   //input控件的背影色
    };

    this.draw();
    this.bindYear();
    this.bindMonth();
    this.changeSelect();
    this.bindData();
};
/**//*
* 日历类属性（语言包，可自由扩展）
*/
Calendar.language ={
    "year"   : [[""], [""]],
    "months" : [["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],
            ["JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"]
             ],
    "weeks" : [["日","一","二","三","四","五","六"],
            ["SUN","MON","TUR","WED","THU","FRI","SAT"]
             ],
    "abort" : [["时间"], ["TIME"]],
    "clear" : [["清空"], ["CLS"]],
    "today" : [["今天"], ["TODAY"]],
    "close" : [["关闭"], ["CLOSE"]],
    "sure" : [["确定"],["CONFIRM"]]
};

Calendar.prototype.draw = function(){
    calendar = this;

    var mvAry = [];
    mvAry[mvAry.length] = ' <div name="calendarForm" style="margin: 0px;">';
    mvAry[mvAry.length] = '    <table width="100%" border="0" cellpadding="0" cellspacing="1" style="background:#99ccff;" >';
    mvAry[mvAry.length] = '      <tr>';
    mvAry[mvAry.length] = '        <th align="left" width="1.5%" ><input style="border: 1px solid ' + calendar.colors["input_border"] + ';background-color:' + calendar.colors["input_bg"] + ';width:23px;height:20px;" name="prevYear" type="button" id="prevYear" value="<<" /></th>';
    mvAry[mvAry.length] = '        <th align="left" width="1%" ><input style="border: 1px solid ' + calendar.colors["input_border"] + ';background-color:' + calendar.colors["input_bg"] + ';width:16px;height:20px;" name="prevMonth" type="button" id="prevMonth" value="<" /></th>';
    mvAry[mvAry.length] = '        <th align="center" width="95%" nowrap="nowrap" ><input type="text" name="calendarYear" id="calendarYear" style="width:43px;text-align:center;font-size:12;" onclick="calYearClick(this);" onchange="calYearChange();" onblur="calBlur(this);"/>';
    mvAry[mvAry.length] = '              <input type="text" name="calendarMonth" id="calendarMonth" numMonth = "" style="width:37px;text-align:center;font-size:12;" onclick="calMonthClick(this);" onchange="calMonthChange();" onblur="calBlur(this);"/></th>';
    mvAry[mvAry.length] = '        <th align="right" width="1%"><input style="border: 1px solid ' + calendar.colors["input_border"] + ';background-color:' + calendar.colors["input_bg"] + ';width:16px;height:20px;" name="nextMonth" type="button" id="nextMonth" value=">" /></th>';
    mvAry[mvAry.length] = '        <th align="right" width="1.5%"><input style="border: 1px solid ' + calendar.colors["input_border"] + ';background-color:' + calendar.colors["input_bg"] + ';width:23px;height:20px;" name="nextYear" type="button" id="nextYear" value=">>" /></th>';  
    mvAry[mvAry.length] = '      </tr>';
    mvAry[mvAry.length] = '    </table>';
    mvAry[mvAry.length] = '    <table id="calendarTable" width="100%" style="background-color:#FFFFFF">';
    mvAry[mvAry.length] = '      <tr>';
    for(var i = 0; i < 7; i++){
        mvAry[mvAry.length] = '      <th style="font-size:12px;background-color:' + calendar.colors["tr_bg"] + ';color:' + calendar.colors["tr_word"] + ';">' + Calendar.language["weeks"][this.lang][i] + '</th>';
    }
    mvAry[mvAry.length] = '      </tr>';
    for(var i = 0; i < 6;i++){
        mvAry[mvAry.length] = '    <tr align="center">';
        for(var j = 0; j < 7; j++){
            if (j == 0){
                mvAry[mvAry.length] = ' <td style="cursor:default;color:' + calendar.colors["sun_word"] + ';"></td>';
            } 
            else if(j == 6){
                mvAry[mvAry.length] = ' <td style="cursor:default;color:' + calendar.colors["sat_word"] + ';"></td>';
            } 
            else{
                mvAry[mvAry.length] = ' <td style="cursor:default;"></td>';
            }
        }
        mvAry[mvAry.length] = '    </tr>';
    }

    mvAry[mvAry.length] = '      <tr id="timeTR" align="center" style="font-size:12px; background:#ecf5ff;">';
    mvAry[mvAry.length] = '        <td name="abort" id="abort" colspan="1" style="cursor:default;">' + Calendar.language["abort"][this.lang] + '</td>';
    mvAry[mvAry.length] = '        <td colspan="6"><input type="text" style="width:30px;text-align:right;font-size:12;" name="calendarHour" id="calendarHour" onclick="calHourClick(this);" onchange="calHourChange();" onblur="calBlur(this);"/>';
    mvAry[mvAry.length] = '&nbsp;&nbsp;：<input type="text" style="width:30px;text-align:right;font-size:12;" name="calendarMinute" id="calendarMinute" onclick="calMinuteClick(this);" onchange="calMinuteChange();" onblur="calBlur(this);"/>';
    mvAry[mvAry.length] = '&nbsp;&nbsp;：<input type="text" style="width:30px;text-align:right;font-size:12;" name="calendarSecond" id="calendarSecond" onclick="calSecondClick(this);" onchange="calSecondChange();" onblur="calBlur(this);"/>';
    mvAry[mvAry.length] = '      </td></tr>';

    mvAry[mvAry.length] = '      <tr style="background-color:' + calendar.colors["input_bg"] + ';">';
    mvAry[mvAry.length] = '        <th colspan="2"><input name="calendarClear" type="button" id="calendarClear" value="' + Calendar.language["clear"][this.lang] + '" style="border: 1px solid ' + calendar.colors["input_border"] + ';background-color:#99ccff;width:100%;height:20px;font-size:12px;" /></th>';
    mvAry[mvAry.length] = '        <th colspan="3"><input name="calendarToday" type="button" id="calendarToday" value="' + Calendar.language["today"][this.lang] + '" style="border: 1px solid ' + calendar.colors["input_border"] + ';background-color:#99ccff;width:100%;height:20px;font-size:12px;"/></th>';
    mvAry[mvAry.length] = '        <th colspan="2"><input name="calendarClose" type="button" id="calendarClose" value="'+Calendar.language["sure"][this.lang] +'" style="border: 1px solid ' + calendar.colors["input_border"] + ';background-color:#99ccff;width:100%;height:20px;font-size:12px;"/></th>';
    mvAry[mvAry.length] = '      </tr>';
    mvAry[mvAry.length] = '    </table>';
    mvAry[mvAry.length] = ' </div>';
    this.panel.innerHTML = mvAry.join("");

    var obj = this.getElementById("prevMonth");
    obj.onclick = function (){calendar.goPrevMonth(calendar);};
    obj.onblur = function (){calendar.onblur();};
    this.prevMonth= obj;

    obj = this.getElementById("nextMonth");
    obj.onclick = function (){calendar.goNextMonth(calendar);};
    obj.onblur = function (){calendar.onblur();};
    this.nextMonth= obj;
    
    var obj = this.getElementById("prevYear");
    obj.onclick = function (){calendar.goPrevYear(calendar);};
    obj.onblur = function (){calendar.onblur();};
    this.prevYear= obj;

    obj = this.getElementById("nextYear");
    obj.onclick = function (){calendar.goNextYear(calendar);};
    obj.onblur = function (){calendar.onblur();};
    this.nextYear= obj;

    obj = this.getElementById("calendarClear");
    obj.onclick = function (){calendar.dateControl.value = "";calendar.hide();};
    this.calendarClear = obj;

    obj = this.getElementById("calendarClose");
    obj.onclick = function (){
        if(calendar.dateControl.value==""){
            var isRightClose = calendar.update(calendar);
            if(isRightClose){
                if(calendar.dateControl.value==""){var selectdate = new Date();} 
                else{var selectdate=calendar.dateControl.value.toDate(calendar.dateFormatStyle);} 
                calendar.dateControl.value = new Date(calendar.date.getFullYear(),
                                                calendar.date.getMonth(),
                                                selectdate.getDate(),
                                                calendar.date.getHours(),
                                                calendar.date.getMinutes(),
                                                calendar.date.getSeconds()).format(calendar.dateFormatStyle);
                calendar.hide();        
            }        
        }
        else{
            calendar.update(calendar);
            if(isPreOrNext){
                if(calendar.dateControl.value==""){var selectdate = new Date();} 
                else{var selectdate=calendar.dateControl.value.toDate(calendar.dateFormatStyle);} 
                calendar.dateControl.value = new Date(calendar.date.getFullYear(),
                                                calendar.date.getMonth(),
                                                selectdate.getDate(),
                                                selectdate.getHours(),
                                                selectdate.getMinutes(),
                                                selectdate.getSeconds()).format(calendar.dateFormatStyle);                                  
            }
           calendar.hide();   
        }
    };
    this.calendarClose = obj;

    obj = this.getElementById("calendarYear");
    this.calendarYear = obj;

    obj = this.getElementById("calendarMonth");
    this.calendarMonth = obj;
    
    obj = this.getElementById("calendarHour");
    this.calendarHour = obj;

    obj = this.getElementById("calendarMinute");
    this.calendarMinute = obj;
    
    obj = this.getElementById("calendarSecond");
    this.calendarSecond = obj;

    obj = this.getElementById("calendarToday");
    obj.onclick = function (){
        var today = new Date();
        calendar.date = today;
        calendar.year = today.getFullYear();
        calendar.month = today.getMonth();
        calendar.changeSelect();
        calendar.bindData();
        calendar.dateControl.value = today.format(calendar.dateFormatStyle);
        calendar.hide();
    };
    this.calendarToday = obj;
};
//年份下拉框绑定数据
Calendar.prototype.bindYear = function(){
    var cy = this.calendarYear;
    cy.value = this.date.getFullYear();
};
//月份下拉框绑定数据
Calendar.prototype.bindMonth = function(){
    var cm = this.calendarMonth;
    var month = this.date.getMonth()+1;
    cm.value = month>9?month:"0"+month;
};
//获取小时的数据
Calendar.prototype.getHour = function(){
    return this.calendarHour.value;
};
//获取分钟数据
Calendar.prototype.getMinute = function(){
    return this.calendarMinute.value;
};
//获取秒数据
Calendar.prototype.getSecond = function(){
    return this.calendarSecond.value;
};
//向前一月
Calendar.prototype.goPrevMonth = function(e){
    isPreOrNext = true;
    document.getElementById("intervalDiv").style.display = "none"; 
    this.year = this.calendarYear.value;
    this.month = this.calendarMonth.value-1;
    if (this.year == 1900 && this.month == 0){return;}
    this.month--;
    if (this.month == -1){
        this.year--;
        this.month = 11;
    }
    this.date = new Date(this.year, this.month, 1,this.getHour(),this.getMinute(),this.getSecond());
    this.changeSelect();
    this.bindData();
};
//向后一月
Calendar.prototype.goNextMonth = function(e){
    isPreOrNext = true;
    document.getElementById("intervalDiv").style.display = "none"; 
    this.year = this.calendarYear.value;
    this.month = this.calendarMonth.value-1;
    if (this.year == 2099 && this.month == 11){return;}
    this.month++;
    if (this.month == 12){
        this.year++;
        this.month = 0;
    }
    this.date = new Date(this.year, this.month, 1,this.getHour(),this.getMinute(),this.getSecond());
    this.changeSelect();
    this.bindData();
};
//向前一年
Calendar.prototype.goPrevYear = function(e){
    isPreOrNext = true;
    document.getElementById("intervalDiv").style.display = "none"; 
    this.year = this.calendarYear.value;
    this.month = this.calendarMonth.value-1;
    if(this.year <= 1900){return;}
    this.year = this.calendarYear.value;
    this.year--;
    this.date = new Date(this.year, this.month, 1,this.getHour(),this.getMinute(),this.getSecond());
    this.changeSelect();
    this.bindData();
};
//向后一年
Calendar.prototype.goNextYear = function(e){
    isPreOrNext = true;
    document.getElementById("intervalDiv").style.display = "none"; 
    this.year = this.calendarYear.value;
    this.month = this.calendarMonth.value-1;
    if(this.year >= 2099){return;}
    this.year++;
    this.date = new Date(this.year, this.month, 1,this.getHour(),this.getMinute(),this.getSecond());
    this.changeSelect();
    this.bindData();
};
//改变SELECT选中状态
Calendar.prototype.changeSelect = function(){
    var cy = this.calendarYear;
    var cm = this.calendarMonth;
    var ch = this.calendarHour;
    var ci = this.calendarMinute;
    var cs = this.calendarSecond;

    cy.value = this.date.getFullYear();
    var month = this.date.getMonth()+1;  
    cm.value = month>9?month:"0"+month; 
    var hour = this.date.getHours();
    ch.value = hour>9?hour:"0"+hour;
    var minute = this.date.getMinutes();
    ci.value = minute>9?minute:"0"+minute;
    var second = this.date.getSeconds();
    cs.value = second>9?second:"0"+second;
};
//更新年、月
Calendar.prototype.update = function(e){
	//点击时验证年、月、时、分、秒是否正确 
    var isNum = /^\d*$/; 
    var year = e.calendarYear.value;
    var month = parseInt(e.calendarMonth.value,10); 
    var hour = e.calendarHour.value;
    var minute = e.calendarMinute.value;
    var second = e.calendarSecond.value;
    var daysOfMonth = new Date(year, month, 0).getDate();
    if(!isNum.test(year) || year.length>4 || year< 1900 || year > 2099){alert("输入有误！");setTimeout(function(){document.getElementById("calendarYear").select();},100);return false;}
    else if(!isNum.test(month) || month.length>2 ||  month<1 || month >12 ){alert("输入有误！");setTimeout(function(){document.getElementById("calendarMonth").select();},100);return false;}   
    else if(!isNum.test(hour) || hour.length>2 ||  hour < 0 || hour > 23){alert("输入有误！");setTimeout(function(){document.getElementById("calendarHour").select();},100);return false;}
    else if(!isNum.test(minute) || minute.length>2 ||  minute < 0 || minute > 59){alert("输入有误！");setTimeout(function(){document.getElementById("calendarMinute").select();},100);return false;}
    else if(!isNum.test(second) || second.length>2 ||  second < 0 || second > 59){alert("输入有误！");setTimeout(function(){document.getElementById("calendarSecond").select();},100);return false;}

    this.year = e.calendarYear.value;
    this.month = month-1; 
    this.month = this.month>9?this.month:"0"+this.month;
    this.date = new Date(this.year, this.month, 1,hour,minute,second);
    this.changeSelect();
    this.bindData();
    return true;
};
//绑定数据到月视图
var chooseDayNum = null;//记录被选中的日 2009.10.21 (zl)
Calendar.prototype.bindData = function(){
    var calendar = this;
    var dateArray = this.getMonthViewArray(this.date.getFullYear(), this.date.getMonth());
    var tds = this.getElementById("calendarTable").getElementsByTagName("td");
    var currentMonth = (new Date()).getMonth();
    var currentYear = (new Date()).getFullYear();
    var currentDayNum = null;//记录今天的td号 2009.10.21 (zl)
    for(var i = 0; i < tds.length; i++){
        tds[i].style.backgroundColor = calendar.colors["td_bg_out"];
        tds[i].onclick = function(){return;};
        tds[i].onmouseover = function(){return;};
        tds[i].onmouseout = function(){return;};
        if (i > dateArray.length - 1) break;
        tds[i].innerHTML = dateArray[i];
        if (dateArray[i] != " "){
          tds[i].onclick = function (){
            document.getElementById("intervalDiv").style.display = "none";  
            if(calendar.dateControl != null){
			//点击时验证年、月、时、分、秒是否正确 
            var isNum = /^\d*$/; 
            var year = document.getElementById("calendarYear").value;
            var month = document.getElementById("calendarMonth").value;
            var hour = document.getElementById("calendarHour").value;
            var minute = document.getElementById("calendarMinute").value;
            var second = document.getElementById("calendarSecond").value;
            var daysOfMonth = new Date(year, month, 0).getDate();
            if(!isNum.test(year) || year.length>4 || year< 1900 || year > 2099){alert("输入有误！");document.getElementById("calendarYear").select();return false;}
            else if(!isNum.test(month) || month.length>2 ||  month<1 || month >12 ){alert("输入有误！");document.getElementById("calendarMonth").select();return false;}   
            else if(!isNum.test(hour) || hour.length>2 ||  hour < 0 || hour > 23){alert("输入有误！");document.getElementById("calendarHour").select();return false;}
            else if(!isNum.test(minute) || minute.length>2 ||  minute < 0 || minute > 59){alert("输入有误！");document.getElementById("calendarMinute").select();return false;}
            else if(!isNum.test(second) || second.length>2 ||  second < 0 || second > 59){alert("输入有误！");document.getElementById("calendarSecond").select();return false;}
            
            for(var j=0;j<tds.length;j++){
                if(tds[j].innerHTML == chooseDayNum){
                    tds[j].style.backgroundColor = calendar.colors["td_bg_out"];
                }
            }
            
            if (currentMonth == calendar.date.getMonth() && currentYear == calendar.date.getFullYear()) {
                tds[currentDayNum].style.backgroundColor = calendar.colors["cur_bg"];
            }
            calendar.dateControl.value = new Date(year,
                                                    month-1,
                                                    this.innerHTML,
                                                    calendar.getHour(),
                                                    calendar.getMinute(),
                                                    calendar.getSecond()).format(calendar.dateFormatStyle);
            }
            this.style.backgroundColor = calendar.colors["sel_bg"];
            chooseDayNum = this.innerHTML;
            currentObj.focus();
          };
          tds[i].ondblclick=function(){calendar.hide();};
          tds[i].onmouseover = function(){
            this.style.backgroundColor = calendar.colors["td_bg_over"];
          };
          tds[i].onmouseout = function(){
            if (this.innerHTML == chooseDayNum) {
                this.style.backgroundColor = calendar.colors["sel_bg"];
            }        
            else{
                this.style.backgroundColor = calendar.colors["td_bg_out"];
            }
          };

          
          if (new Date().format("yyyy-MM-dd") ==
              new Date(calendar.date.getFullYear(),
                       calendar.date.getMonth(),
                       dateArray[i]).format("yyyy-MM-dd")) {
            tds[i].style.backgroundColor = calendar.colors["cur_bg"];
            currentDayNum = i;
            tds[i].onmouseover = function () {
              this.style.backgroundColor = calendar.colors["td_bg_over"];
            };
            tds[i].onmouseout = function () {
              this.style.backgroundColor = calendar.colors["cur_bg"];
            };
          }
          //设置已被选择的日期单元格背影色
          if (calendar.dateControl != null && calendar.dateControl.value == new Date(calendar.date.getFullYear(),
                       calendar.date.getMonth(),
                       dateArray[i],
                       calendar.getHour(),
                       calendar.getMinute(),
                       calendar.getSecond()).format(calendar.dateFormatStyle)) {
            tds[i].style.backgroundColor = calendar.colors["sel_bg"];
          }
        }
    }
};
//根据年、月得到月视图数据(数组形式)
Calendar.prototype.getMonthViewArray = function(y, m){
    var mvArray = [];
    var dayOfFirstDay = new Date(y, m, 1).getDay();
    var daysOfMonth = new Date(y, m + 1, 0).getDate();
    for (var i = 0; i < 42; i++) {
        mvArray[i] = " ";
    }
    for (var i = 0; i < daysOfMonth; i++){
        mvArray[i + dayOfFirstDay] = i + 1;
    }
    return mvArray;
};
//扩展 document.getElementById(id) 多浏览器兼容性 from meizz tree source
Calendar.prototype.getElementById = function(id){
    if (typeof(id) != "string" || id == ""){return null;} 
    if (document.getElementById){return document.getElementById(id);} 
    if (document.all) {return document.all(id);}
    try {return eval(id);} catch(e){return null;}
};
//扩展 object.getElementsByTagName(tagName)
Calendar.prototype.getElementsByTagName = function(object, tagName){
    if (document.getElementsByTagName){return document.getElementsByTagName(tagName);} 
    if (document.all){return document.all.tags(tagName);} 
};
//取得HTML控件绝对位置
Calendar.prototype.getAbsPoint = function (e){
    var x = e.offsetLeft;
    var y = e.offsetTop;
    while(e = e.offsetParent){
        x += e.offsetLeft;
        y += e.offsetTop;
    }
    return {"x": x, "y": y};
};
//显示日历
Calendar.prototype.show = function(dateObj, popControl){
    if (dateObj == null){
        throw new Error("arguments[0] is necessary");
    }
    this.dateControl = dateObj;

    this.date = (dateObj.value.length > 0) ? new Date(dateObj.value.toDate(this.dateFormatStyle)) : new Date();//若为空则显示当前月份
    this.year = this.date.getFullYear();
    this.month = this.date.getMonth()+1;
    this.changeSelect();
    this.bindData();
    if (popControl == null){
        popControl = dateObj;
    }
    var xy = this.getAbsPoint(popControl);
    this.panel.style.left = xy.x -25 + "px";
    this.panel.style.top = (xy.y + dateObj.offsetHeight) + "px";

    this.panel.style.display = "";
    this.container.style.display = "";

    dateObj.onblur = function(){calendar.onblur();};
    this.container.onmouseover = function(){isFocus=true;};
    this.container.onmouseout = function(){isFocus=false;};
};
//隐藏日历
Calendar.prototype.hide = function(){
    this.panel.style.display = "none";
    this.container.style.display = "none";
    document.getElementById("intervalDiv").style.display = "none"; 
    isFocus=false;
    if(this.dateControl.value != ""){
        this.dateControl.value = checkAndChange(this.dateControl.value);                      
    }
    if(callbackfun!=null){callbackfun();} 
};
//检查日期格式
function CheckText(text){
    var rr=/^(?:1|2)[0-9][0-9][0-9]-(?:(?:0[1-9])|(?:1[0-2]))-(?:(?:[0-2][1-9])|(?:[1-3][0-1])) (?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]:[0-5][0-9]$/;
    var rv=/^(?:1|2)[0-9][0-9][0-9]-((?:(?:0[1-9])|(?:1[0-2]))|([1-9]))-((?:(?:[0-2][1-9])|(?:[1-3][0-1]))|([1-9])) ((?:(?:[0-2][0-3])|(?:[0-1][0-9]))|([0-9]))?:?(([0-5][0-9])|([0-9]))?:?(([0-5][0-9])|([0-9]))? *$/;
    if(rr.test(text)){return 1;}
    else if(rv.test(text)){return 0;}
    else{return -1;}
};
//检查日期字符串,将正确的格式化，不正确的置为"".
function checkAndChange(str){
    if(datetime){
        if(CheckText(str + " ") == -1)
        {
            var changedStr = str;
            changedStr = changedStr.strToSpeTimeStr();
            if (changedStr) {
                str = changedStr;
                if (CheckText(str + " ") == -1) {
                    alert('请输入正确的时间格式！');
                    str="";
                    isFocus = false;
                }   
            }
            else{
                alert('请输入正确的时间格式！');
                str="";
                isFocus = false;   
            }
            
        }
        else if (CheckText(str + " ") == 0) {
            var timeData = str;
            str = timeData.formatTimeData();
        }
    }
    else{
        if(CheckText(str+" 00:00:00") == -1){
            var changedStr = str;
            changedStr = changedStr.strToSpeTimeStr();
            if (changedStr) {
                str = changedStr;
                if (CheckText(str+" 00:00:00") == -1) {
                    alert('请输入正确的时间格式！');
                    str="";
                    isFocus = false;
                }       
            }
            else{
                alert('请输入正确的时间格式！');
                str="";
                isFocus= false; 
            }
        }
        else if (CheckText(str+" 00:00:00") == 0) {
            var timeData = str;
            str = timeData.formatTimeData();
        }
    }
    return str; 
};
//焦点转移时隐藏日历
Calendar.prototype.onblur = function(){
    if(!isFocus && isTimeRight){this.hide();}
};
//将不标准的日期格式转换成标准的“yyyy-MM-dd hh:mm:ss”(修改于2009.10.21(zl))
String.prototype.formatTimeData = function(){
    var data = this.replace(/:/g,"-");
    var finData = data.replace(/\s/g,"-");
    finData = finData.split("-");
    var newTimeData = new Array();
    for(var i=0;i<finData.length;i++){
        if(finData[i].length == 1){
            finData[i] = "0"+finData[i].toString();    
        }
        newTimeData.push(finData[i]);        
    }
    var finArr = new Array();
    for(var j=0;j<newTimeData.length;j++){
        if (newTimeData[j]!=""){
            finArr.push(newTimeData[j]);
        }
    }
    if (finArr.length==5){
        finArr.push(new Date().getSeconds());   
    }
    else if (finArr.length==4) {
        finArr.push((new Date()).getMinutes());
        finArr.push((new Date()).getSeconds());
    }
    else{
        finArr.push((new Date()).getHours());
        finArr.push((new Date()).getMinutes());
        finArr.push((new Date()).getSeconds()); 
    }   
    var timeDate =  new Date(finArr[0],finArr[1]-1,finArr[2],finArr[3],finArr[4],finArr[5]);    
    if (datetime){   
        return (timeDate.format("yyyy-MM-dd hh:mm:ss")).toString();
    }
    else{
        return (timeDate.format("yyyy-MM-dd")).toString();
    }
};
//将带有非数字字符的时间字符串转换成时间字符串(修改于2009.10.21(zl))
String.prototype.strToSpeTimeStr = function(){
    var str = this.replace(/[^0-9]/g,"-");
    var strArr = str.split("-");
    var midArr = new Array();
    for(var i=0;i<strArr.length;i++){
        midArr.push(strArr[i]);
    }
    var finArr = new Array();
    for(var j=0;j<midArr.length;j++){
        if (midArr[j]!="") {
        finArr.push(midArr[j]);
        }
    }
    if (finArr.length<=6){
        if (finArr[1]!=0 && finArr[2]!=0){
			//验证年、月、时、分、秒是否正确 
            var isNum = /^\d*$/; 
            var year = finArr[0];
            var month = finArr[1];
            var day = finArr[2];
           if(datetime){
                var hour = finArr[3];
                var minute = finArr[4];
                var second = finArr[5];           
           } else{
                var hour = 0;
                var minute = 0;
                var second = 0;   
           }

            var daysOfMonth = new Date(year, month, 0).getDate();
            if(!isNum.test(year) || year.length>4 || year< 1900 || year > 2099){return false;}
            else if(!isNum.test(month) || month.length>2 ||  month<1 || month >12 ){return false;}
            else if(!isNum.test(day) || day.length>2 ||  day< 1 || day >daysOfMonth) {return false;}    
            else if(!isNum.test(hour) || hour.length>2 ||  hour < 0 || hour > 23){return false;}
            else if(!isNum.test(minute) || minute.length>2 ||  minute < 0 || minute > 59){return false;}
            else if(!isNum.test(second) || second.length>2 ||  second < 0 || second > 59){return false;}
        
            if (datetime){
                var timeDate =  new Date(finArr[0],finArr[1]-1,finArr[2],finArr[3],finArr[4],finArr[5]);
                if (timeDate.toString() != "NaN") {
                    return (timeDate.format("yyyy-MM-dd hh:mm:ss")).toString();
                }
                else {return false;}
            }
            else{
                var timeDate =  new Date(finArr[0],finArr[1]-1,finArr[2],0,0,0);
                if (timeDate.toString() != "NaN") {
                     return (timeDate.format("yyyy-MM-dd")).toString();
                }
                else {return false;}
            }       
        }
    }
    else{return false;} 
};
//同时兼容火狐和IE下得到event事件
function getEvent(){ 
    if(document.all) { return window.event;}       
    func = getEvent.caller;            
    while(func != null){    
        var arg0 = func.arguments[0];
        if(arg0){
            if( (arg0.constructor == Event || arg0.constructor == MouseEvent)
                     || (typeof(arg0) == "object" && arg0.preventDefault && arg0.stopPropagation) ){    
                return arg0;
            }
        }
        func=func.caller;
    }
    return null;
};
//日期文本框的onkeydown事件处理函数（可用↑或↓控制日期“加”或“减”一天）（修改于2009.10.24 (zl)）
function onObjKeyDown(){
    if (currentObj.value != ""){
        var currentEvent = getEvent();
        if (currentEvent.keyCode == 38 || currentEvent.keyCode == 40){
            isFocus = true;
            currentObj.value = checkAndChange(currentObj.value);
            if (currentObj.value!=""){
                if (datetime) { var selectdate=currentObj.value.toDate("yyyy-MM-dd hh:mm:ss");}
                else{ var selectdate=currentObj.value.toDate("yyyy-MM-dd");}
                
                var y = selectdate.getFullYear();
                var m = selectdate.getMonth();
                var daysOfMonth = new Date(y, m + 1, 0).getDate();
                var dayTime = selectdate.getDate();
                if(currentEvent.keyCode == 40){
                    if ((dayTime+1)<=daysOfMonth){
                        dayTime += 1;
                    }
                    else {dayTime = 1;}
                }
                else{
                    if ((dayTime-1)>=1){
                        dayTime -= 1;
                    }
                    else{dayTime = daysOfMonth;} 
                }
                chooseDayNum = dayTime; 
                var finNewDate = new Date(selectdate.getFullYear(),
                                                    selectdate.getMonth(),
                                                    dayTime,
                                                    selectdate.getHours(),
                                                    selectdate.getMinutes(),
                                                    selectdate.getSeconds());
                if (datetime){ currentObj.value = finNewDate.format("yyyy-MM-dd hh:mm:ss");}
                else{ currentObj.value = finNewDate.format("yyyy-MM-dd");}
                
                if (cal!=null){
                    cal.dateControl.value = currentObj.value;
                    cal.update(cal);
                }
            } 
            else if(cal!=null){
                cal.dateControl.value = "";
                cal.hide();      
            }                      
        }  
    }
    if (currentEvent) {currentEvent.keyCode = 0;}
    return null; 
};
var isHMSBlur = true;//选择时分秒是否真正onblur
var isTimeRight = true;
function calBlur(obj){
    if(cal.dateControl.value!=""){
        if(isHMSBlur && isTimeRight){
            document.getElementById("intervalDiv").style.display = "none";
            cal.onblur();
        }
        else if(isHMSBlur && !isTimeRight){}
        else{currentObj.focus();cal.onblur();}         
    }
    else if(preNextClose){currentObj.focus();}
};
function tdOnMouseover(td){
    isHMSBlur = false;
     preNextClose = true;
    td.style.backgroundColor="#b0d8ff";
};

function tdOnMouseout(td){
    isHMSBlur = true;
     preNextClose = false;
    td.style.backgroundColor="white";
};
//时
function calHourClick(obj){
       isHMSBlur = false;
       preNextClose = false;
       document.getElementById("intervalDiv").style.display = "none";
       var hourArr = new Array();

       hourArr[hourArr.length] = '<table style="width:auto;">';
       hourArr[hourArr.length] = '<tr><td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="hourTdClick(this);">00</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">01</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">02</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">03</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">04</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">05</td>';
       hourArr[hourArr.length] = '</tr>';
       
       hourArr[hourArr.length] = '<tr><td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">06</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">07</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">08</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">09</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">10</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">11</td>';
       hourArr[hourArr.length] = '</tr>';
       
       hourArr[hourArr.length] = '<tr><td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">12</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">13</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">14</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">15</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">16</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">17</td>';
       hourArr[hourArr.length] = '</tr>';
       
       hourArr[hourArr.length] = '<tr><td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">18</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">19</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">20</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">21</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">22</td>';
       hourArr[hourArr.length] = '<td style="cursor:pointer;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="hourTdClick(this);">23</td>';
       hourArr[hourArr.length] = '</tr>';
       hourArr[hourArr.length] = '</table>';
       
       document.getElementById("intervalDiv").innerHTML = hourArr.join("");
       
       var intervalDiv = document.getElementById("intervalDiv");
       intervalDiv.style.display = "block";
       intervalDiv.style.position = "absolute";
       var height = parseInt(document.getElementById("calendarPanel").offsetHeight); 
       intervalDiv.style.top = parseInt(document.getElementById("calendarPanel").offsetTop)+height-122+"px";
       intervalDiv.style.left = parseInt(document.getElementById("calendarPanel").offsetLeft)+32+"px";  
};

function hourTdClick(td){
    document.getElementById("intervalDiv").style.display = "none";
    document.getElementById("calendarHour").value = td.innerHTML;
    calHourChange();  
};

function calHourChange(){
   if(cal.dateControl != null){
       var isRightHour = cal.update(cal);
       if(isRightHour){
           isTimeRight = true; 
            if (cal.dateControl != null){
                if(cal.dateControl.value==""){var selectdate = new Date();}  
                else{var selectdate=cal.dateControl.value.toDate(cal.dateFormatStyle);}
                cal.dateControl.value = new Date(cal.date.getFullYear(),
                                                    cal.date.getMonth(),
                                                    selectdate.getDate(),
                                                    cal.date.getHours(),
                                                    cal.date.getMinutes(),
                                                    cal.date.getSeconds()).format(cal.dateFormatStyle);
            }        
       }
       else{isTimeRight = false;}
   }
};
//分
function calMinuteClick(obj){
       isHMSBlur = false;
       preNextClose = false;
       document.getElementById("intervalDiv").style.display = "none";
       var minuteArr = new Array();

       minuteArr[minuteArr.length] = '<table style="width:auto;">';
       minuteArr[minuteArr.length] = '<tr><td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="minuteTdClick(this);">00</td>';
       minuteArr[minuteArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="minuteTdClick(this);">05</td>';
       minuteArr[minuteArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="minuteTdClick(this);">10</td>';
       minuteArr[minuteArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="minuteTdClick(this);">15</td>';
       minuteArr[minuteArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="minuteTdClick(this);">20</td>';
       minuteArr[minuteArr.length] = '<td style="cursor:pointer;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="minuteTdClick(this);">25</td>';
       minuteArr[minuteArr.length] = '</tr>';
       
       minuteArr[minuteArr.length] = '<tr><td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="minuteTdClick(this);">30</td>';
       minuteArr[minuteArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="minuteTdClick(this);">35</td>';
       minuteArr[minuteArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="minuteTdClick(this);">40</td>';
       minuteArr[minuteArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="minuteTdClick(this);">45</td>';
       minuteArr[minuteArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="minuteTdClick(this);">50</td>';
       minuteArr[minuteArr.length] = '<td style="cursor:pointer;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="minuteTdClick(this);">55</td>';
       minuteArr[minuteArr.length] = '</tr>';
       minuteArr[minuteArr.length] = '</table>';
       
       document.getElementById("intervalDiv").innerHTML = minuteArr.join("");
       
        var intervalDiv = document.getElementById("intervalDiv");
       intervalDiv.style.display = "block";
       intervalDiv.style.position = "absolute";
       var height = parseInt(document.getElementById("calendarPanel").offsetHeight);
       intervalDiv.style.top = parseInt(document.getElementById("calendarPanel").offsetTop)+height-86+"px";
       intervalDiv.style.left = parseInt(document.getElementById("calendarPanel").offsetLeft)+60+"px";       
};

function minuteTdClick(td){
    document.getElementById("intervalDiv").style.display = "none"; 
    document.getElementById("calendarMinute").value = td.innerHTML;
    calMinuteChange();
};

function calMinuteChange(){
    if(cal.dateControl != null){
       var isRightMinute = cal.update(cal);
       if(isRightMinute){
           isTimeRight = true;  
            if (cal.dateControl != null){
                if(cal.dateControl.value==""){var selectdate = new Date();}  
                else{var selectdate=cal.dateControl.value.toDate(cal.dateFormatStyle);}
                cal.dateControl.value = new Date(cal.date.getFullYear(),
                                                    cal.date.getMonth(),
                                                    selectdate.getDate(),
                                                    cal.date.getHours(),
                                                    cal.date.getMinutes(),
                                                    cal.date.getSeconds()).format(cal.dateFormatStyle);
            }        
       }
       else{isTimeRight = false;}
    }
};
//秒
function calSecondClick(obj){
       isHMSBlur = false;
       preNextClose = false;
       document.getElementById("intervalDiv").style.display = "none";
       var secondArr = new Array();

       secondArr[secondArr.length] = '<table style="width:auto;">';
       secondArr[secondArr.length] = '<tr><td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="secondTdClick(this);">00</td>';
       secondArr[secondArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="secondTdClick(this);">10</td>';
       secondArr[secondArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="secondTdClick(this);">20</td>';
       secondArr[secondArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="secondTdClick(this);">30</td>';
       secondArr[secondArr.length] = '<td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="secondTdClick(this);">40</td>';
       secondArr[secondArr.length] = '<td style="cursor:pointer;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);"onclick="secondTdClick(this);">50</td>';
       secondArr[secondArr.length] = '</tr>';
       secondArr[secondArr.length] = '</table>';
       
       document.getElementById("intervalDiv").innerHTML = secondArr.join("");
       
        var intervalDiv = document.getElementById("intervalDiv");
       intervalDiv.style.display = "block";
       intervalDiv.style.position = "absolute";
       var height = parseInt(document.getElementById("calendarPanel").offsetHeight);
       intervalDiv.style.top = parseInt(document.getElementById("calendarPanel").offsetTop)+height-68+"px";
       intervalDiv.style.left = parseInt(document.getElementById("calendarPanel").offsetLeft)+76+"px";        
};

function secondTdClick(td){
    document.getElementById("intervalDiv").style.display = "none"; 
    document.getElementById("calendarSecond").value = td.innerHTML;
    calSecondChange();    
};

function calSecondChange(){
    if(cal.dateControl != null){
       var isRightSecond = cal.update(cal);
       if(isRightSecond){
           isTimeRight = true;  
            if (calendar.dateControl != null){
                if(cal.dateControl.value==""){var selectdate = new Date();}  
                else{var selectdate=cal.dateControl.value.toDate(cal.dateFormatStyle);}
                cal.dateControl.value = new Date(cal.date.getFullYear(),
                                                    cal.date.getMonth(),
                                                    selectdate.getDate(),
                                                    cal.date.getHours(),
                                                    cal.date.getMinutes(),
                                                    cal.date.getSeconds()).format(cal.dateFormatStyle);
            }       
       }
       else{isTimeRight = false;}
    }
};
//月
function calMonthClick(obj){
       isHMSBlur = false;
       document.getElementById("intervalDiv").style.display = "none";
       var monthArr = new Array();

       monthArr[monthArr.length] = '<table  id="monthPanel" style="font-size:11;width:auto;">';
       monthArr[monthArr.length] = '<tr><td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="monthTdClick(this);">一月</td>';
       monthArr[monthArr.length] = '<td style="cursor:pointer;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="monthTdClick(this);">七月</td>';
       monthArr[monthArr.length] = '</tr>';
 
       monthArr[monthArr.length] = '<tr><td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="monthTdClick(this);">二月</td>';
       monthArr[monthArr.length] = '<td style="cursor:pointer;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="monthTdClick(this);">八月</td>';
       monthArr[monthArr.length] = '</tr>';
       
       monthArr[monthArr.length] = '<tr><td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="monthTdClick(this);">三月</td>';
       monthArr[monthArr.length] = '<td style="cursor:pointer;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="monthTdClick(this);">九月</td>';
       monthArr[monthArr.length] = '</tr>';
       
       monthArr[monthArr.length] = '<tr><td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="monthTdClick(this);">四月</td>';
       monthArr[monthArr.length] = '<td style="cursor:pointer;" value="10" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="monthTdClick(this);">十月</td>';
       monthArr[monthArr.length] = '</tr>';

       monthArr[monthArr.length] = '<tr><td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="monthTdClick(this);">五月</td>';
       monthArr[monthArr.length] = '<td style="cursor:pointer;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="monthTdClick(this);">十一</td>';
       monthArr[monthArr.length] = '</tr>';
       
       monthArr[monthArr.length] = '<tr><td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="monthTdClick(this);">六月</td>';
       monthArr[monthArr.length] = '<td style="cursor:pointer;"  onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="monthTdClick(this);">十二</td>';
       monthArr[monthArr.length] = '</tr>';     
       monthArr[monthArr.length] = '</table>';
       
       document.getElementById("intervalDiv").innerHTML = monthArr.join("");
       
        var intervalDiv = document.getElementById("intervalDiv");
       intervalDiv.style.display = "block";
       intervalDiv.style.position = "absolute";
       intervalDiv.style.top = parseInt(document.getElementById("calendarPanel").offsetTop)+23+"px";
       intervalDiv.style.left = parseInt(document.getElementById("calendarPanel").offsetLeft)+92+"px";
       
       var monthPanelTd = document.getElementById("monthPanel").getElementsByTagName("td");
       monthPanelTd[0].valNum = "01";
       for(var i=1;i<monthPanelTd.length;i++){
            if(i%2==0){monthPanelTd[i].valNum = parseInt(monthPanelTd[i-2].valNum,10) + 1;}
           else{monthPanelTd[i].valNum = parseInt(monthPanelTd[i-1].valNum,10) + 6;} 
       }        
};

function monthTdClick(td){
    document.getElementById("intervalDiv").style.display = "none"; 
    document.getElementById("calendarMonth").value = td.valNum;
    document.getElementById("calendarMonth").numMonth = td.valNum; 
    calMonthChange();    
};

function calMonthChange(){
    if(cal.dateControl != null){
       var isRightMonth = cal.update(cal);
       if(isRightMonth){
           isTimeRight = true;  
            if (cal.dateControl != null){
                if(document.getElementById("calendarMonth").numMonth!=""){
                    var month = parseInt(document.getElementById("calendarMonth").numMonth,10);
                }else{
                    var month = parseInt(document.getElementById("calendarMonth").value,10); 
                }
               if(cal.dateControl.value==""){var selectdate = new Date();}   
               else{var selectdate=cal.dateControl.value.toDate(cal.dateFormatStyle);}
               cal.dateControl.value = new Date(cal.date.getFullYear(),
                                                    month-1,
                                                    selectdate.getDate(),
                                                    cal.date.getHours(),
                                                    cal.date.getMinutes(),
                                                   cal.date.getSeconds()).format(cal.dateFormatStyle);
            }       
       }
       else{isTimeRight = false;} 
    }
    document.getElementById("calendarMonth").numMonth = ""; 
};
//年
function calYearClick(obj){
       isHMSBlur = false;
       document.getElementById("intervalDiv").style.display = "none";
       var currentYear = document.getElementById("calendarYear").value;
        var isNum = /^\d*$/; 
        if(!isNum.test(currentYear) || currentYear.length>4 ||  currentYear < 1900 || currentYear > 2099){currentYear = new Date().getFullYear();}
       
       var yearPanelArr = new Array();
        yearPanelArr[0]= parseInt(currentYear)-6;
       for(var i=1;i<12;i++){
            yearPanelArr[i] = yearPanelArr[i-1]+1;
       }   
       var yearArr = new Array();

       yearArr[yearArr.length] = '<table id="yearPanel" style="font-size:11;width:auto;">';
       yearArr[yearArr.length] = '<tr><td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="yearTdClick(this);">'+yearPanelArr[0]+'</td>';
       yearArr[yearArr.length] = '<td style="cursor:pointer;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="yearTdClick(this);">'+yearPanelArr[6]+'</td>';
       yearArr[yearArr.length] = '</tr>';
 
       yearArr[yearArr.length] = '<tr><td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="yearTdClick(this);">'+yearPanelArr[1]+'</td>';
       yearArr[yearArr.length] = '<td style="cursor:pointer;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="yearTdClick(this);">'+yearPanelArr[7]+'</td>';
       yearArr[yearArr.length] = '</tr>';
       
       yearArr[yearArr.length] = '<tr><td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="yearTdClick(this);">'+yearPanelArr[2]+'</td>';
       yearArr[yearArr.length] = '<td style="cursor:pointer;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="yearTdClick(this);">'+yearPanelArr[8]+'</td>';
       yearArr[yearArr.length] = '</tr>';
       
       yearArr[yearArr.length] = '<tr><td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="yearTdClick(this);">'+yearPanelArr[3]+'</td>';
       yearArr[yearArr.length] = '<td style="cursor:pointer;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="yearTdClick(this);">'+yearPanelArr[9]+'</td>';
       yearArr[yearArr.length] = '</tr>';

       yearArr[yearArr.length] = '<tr><td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="yearTdClick(this);">'+yearPanelArr[4]+'</td>';
       yearArr[yearArr.length] = '<td style="cursor:pointer;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="yearTdClick(this);">'+yearPanelArr[10]+'</td>';
       yearArr[yearArr.length] = '</tr>';
       
       yearArr[yearArr.length] = '<tr><td style="cursor:pointer;padding-right:3px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="yearTdClick(this);">'+yearPanelArr[5]+'</td>';
       yearArr[yearArr.length] = '<td style="cursor:pointer;"  onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="yearTdClick(this);">'+yearPanelArr[11]+'</td>';
       yearArr[yearArr.length] = '</tr>';
       yearArr[yearArr.length] = '</table>'; 
       
       yearArr[yearArr.length] = '<table style="width:auto" align="center">';
       yearArr[yearArr.length] = '<tr ><td id="preYearP" style="cursor:pointer;padding-right:4px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="preYearPanel();">←</td>';
       yearArr[yearArr.length] = '<td id="closeYearP" style="cursor:pointer;padding-right:4px;padding-left:4px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="closeYearPanel();">×</td>';
       yearArr[yearArr.length] = '<td id="nextYearP" style="cursor:pointer;padding-left:4px;" onmouseover="tdOnMouseover(this);" onmouseout="tdOnMouseout(this);" onclick="nextYearPanel();">→</td>';
       yearArr[yearArr.length] = '</tr>';     
       yearArr[yearArr.length] = '</table>';
       
       document.getElementById("intervalDiv").innerHTML = yearArr.join("");
       
       var intervalDiv = document.getElementById("intervalDiv");
       intervalDiv.style.display = "block";
       intervalDiv.style.position = "absolute";
       intervalDiv.style.top = parseInt(document.getElementById("calendarPanel").offsetTop)+23+"px";
       intervalDiv.style.left = parseInt(document.getElementById("calendarPanel").offsetLeft)+42+"px";
       
       var tablePanelTD = document.getElementById("yearPanel").getElementsByTagName("td");
       var readOnlyPreYear = false;
       var readOnlyNextYear = false;
       for(var j=0;j<tablePanelTD.length;j++){
            if(tablePanelTD[j].innerHTML>2051){tablePanelTD[j].style.color = "#C0C0C0";readOnlyNextYear=true;}
           else if(tablePanelTD[j].innerHTML==2051){readOnlyNextYear=true;} 
           else if(tablePanelTD[j].innerHTML<1956){tablePanelTD[j].style.color = "#C0C0C0";readOnlyPreYear=true;}
           else if(tablePanelTD[j].innerHTML==1956){readOnlyPreYear=true;} 
       } 
       if(readOnlyPreYear){document.getElementById("preYearP").style.color = "#C0C0C0";document.getElementById("preYearP").readonly = true;}
       if(readOnlyNextYear){document.getElementById("nextYearP").style.color = "#C0C0C0";document.getElementById("nextYearP").readonly = true;}
};

function yearTdClick(td){
    currentObj.focus();
    if(td.innerHTML>2051 || td.innerHTML < 1956){return;}
    document.getElementById("intervalDiv").style.display = "none"; 
    document.getElementById("calendarYear").value = td.innerHTML;
    calYearChange();    
};

function calYearChange(){
    if(cal.dateControl != null){
       var isRightYear = cal.update(cal);
       if(isRightYear){
            isTimeRight = true;  
            if (cal.dateControl != null){
                 if(cal.dateControl.value==""){var selectdate = new Date();} 
                 else{var selectdate=cal.dateControl.value.toDate(cal.dateFormatStyle);}
                 cal.dateControl.value = new Date(cal.date.getFullYear(),
                                                        cal.date.getMonth(),
                                                        selectdate.getDate(),
                                                        cal.date.getHours(),
                                                        cal.date.getMinutes(),
                                                        cal.date.getSeconds()).format(cal.dateFormatStyle);
            }       
       } 
       else{isTimeRight = false;}
    }
};

var preNextClose = false;
function preYearPanel(){
    document.getElementById("nextYearP").style.color = "#000000";
    var tablePanelTD = document.getElementById("yearPanel").getElementsByTagName("td");
    if(tablePanelTD[0].innerHTML>1956){
        for(var i=0;i<tablePanelTD.length;i++){
            tablePanelTD[i].style.color = "#000000";
            tablePanelTD[i].innerHTML = parseInt(tablePanelTD[i].innerHTML)-12;
            if(tablePanelTD[i].innerHTML<1956){tablePanelTD[i].style.color = "#C0C0C0";} 
            else if(tablePanelTD[i].innerHTML>2051){tablePanelTD[i].style.color = "#C0C0C0";} 
        }  
        if(tablePanelTD[0].innerHTML<=1956){
            document.getElementById("preYearP").readonly = true;
            document.getElementById("preYearP").style.color = "#C0C0C0";
        }
        if(tablePanelTD[tablePanelTD.length-1].innerHTML>=2051){
            document.getElementById("nextYearP").readonly = true;
            document.getElementById("nextYearP").style.color = "#C0C0C0";
       }       
     }
    else{
        document.getElementById("preYearP").readonly = true;
        document.getElementById("preYearP").style.color = "#C0C0C0";
    }
    currentObj.focus();
};

function nextYearPanel(){
    document.getElementById("preYearP").style.color = "#000000";
    var tablePanelTD = document.getElementById("yearPanel").getElementsByTagName("td");
    if(tablePanelTD[tablePanelTD.length-1].innerHTML<2051){
        for(var i=0;i<tablePanelTD.length;i++){
            tablePanelTD[i].style.color = "#000000"; 
            tablePanelTD[i].innerHTML = parseInt(tablePanelTD[i].innerHTML)+12;
            if(tablePanelTD[i].innerHTML>2051){tablePanelTD[i].style.color = "#C0C0C0";}
            else if(tablePanelTD[i].innerHTML<1956){tablePanelTD[i].style.color = "#C0C0C0";}   
        }
       if(tablePanelTD[tablePanelTD.length-1].innerHTML>=2051){
            document.getElementById("nextYearP").readonly = true;
            document.getElementById("nextYearP").style.color = "#C0C0C0";
       }
       if(tablePanelTD[0].innerHTML<=1956){
            document.getElementById("preYearP").readonly = true;
            document.getElementById("preYearP").style.color = "#C0C0C0";
        }    
    } 
    else{
        document.getElementById("nextYearP").readonly = true;
        document.getElementById("nextYearP").style.color = "#C0C0C0";
    }
    currentObj.focus();
};

function closeYearPanel(){
    document.getElementById("preYearP").readonly = false;
    document.getElementById("nextYearP").readonly = false;
    document.getElementById("intervalDiv").style.display = "none";
    currentObj.focus();
};
