<!--
/**********************************************************
  **  版权信息：infuntion(沈映凡) 版权所有               **
  **  版    本：2                                        **
  **  修改历史：2004.05.10                               **
  **  修改内容：新建                                     **
  **  作    者：沈映凡                                   ** 
  **  修改历史：2004.08.06                               **
  **  修改内容：增加时间输入支持，时间输入验证           **
  **  作    者：沈映凡                                   ** 
  **  修改历史：2005.09.29                               **
  **  修改内容：优化程序，减少500多行代码                **
  **  作    者：沈映凡                                   ** 
  *********************************************************/
 
function WebCalendar(){
	this.regInfo    = "Calendar ver 1.0&#13;"
	this.regInfo   += "作者：infuntion(沈映凡)&#13;";
	this.regInfo   += "关闭控件快捷键：[Esc]&#13;当前时间快捷键：N(Now)&#13;清空时间快捷键：C(Clear)";
	
	this.daysMonth  = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	this.day        = new Array(40);  
	this.dayObj     = new Array(40); 

	this.month      = new Array(12);
	this.monthObj   = new Array(12);

	this.objExport  = null; 
	this.eventSrc   = null; 
	
	this.thisYear   = new Date().getFullYear();
	this.thisMonth  = new Date().getMonth()+ 1;
	this.thisDay    = new Date().getDate();
	this.thisHour   = new Date().getHours(); 
	this.thisMinute = new Date().getMinutes();
	
	this.iframe     = window.frames("infuntionCalendarIframe");
	this.calendar   = getObjectById("infuntionCalendarDiv");

	this.dateReg    = /^(\d{1,4})(-|\/|.)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2})$/;

	this.yearFall   = 50; 

	this.today      = this.thisDay +"/"+ this.thisMonth +"/"+ this.thisYear;

	this.nowTimeStr    = "";
	this.inputTimeStr  = "";

	this.dateStyle  = null;
	
	this.inputDate  = null; 
	
	this.timeType   = "";
	
	this.drag       = true;
	this.darkColor  = "#80A6F6";
	this.lightColor = "#FFFFFF";
	this.btnBgColor = "#FFF5A0"; 
	this.wordColor  = "black";
	this.wordDark   = "#999999"; 
	this.dayBgColor = "#e9effd";
	this.todayColor = "#F5CF84"; 
	this.darkBorder = "#80A66";
	this.overColor = "#CFCFCF";
}   

document.write("<div id=infuntionCalendarDiv style='position: absolute; z-index: 9999;display: none'>");
document.write("<iframe name=infuntionCalendarIframe scrolling=no frameborder=0 width=100% height=100%></iframe></div>");

var webCalendar = new WebCalendar();

function writeIframe(){
    var strIframe =""+
	"<html><head><meta http-equiv='Content-Type' content='text/html; charset=gb2312'>"+
	"<style>"+
    "*{font-size: 12px; font-family: 宋体}"+
    ".bg{  color: "+ webCalendar.lightColor +"; cursor: default; background-color: "+ webCalendar.darkColor +";}"+
    "table#tableWeek td{ color: "+ webCalendar.lightColor +";}"+
    "table#tableDay  td{ font-weight: bold;}"+
    "td#infuntionYearHead, td#infuntionMonthHead{color: "+ webCalendar.wordColor +"}"+
    ".out { text-align: center; border-top: 1px solid "+ webCalendar.lightColor +"; border-left: 1px solid "+ webCalendar.lightColor +";"+
    "border-right: 1px solid "+ webCalendar.darkBorder +"; border-bottom: 1px solid "+ webCalendar.darkBorder +";}"+
    ".over{ text-align: center; border-top: 1px solid #FFFFFF; border-left: 1px solid #FFFFFF;"+
    "border-bottom: 1px solid "+ webCalendar.darkBorder +"; border-right: 1px solid "+ webCalendar.darkBorder +"}"+
    "input{ border: 1px solid "+ webCalendar.darkColor +"; padding-top: 1px; height: 18; cursor: hand;"+
    "       color:"+ webCalendar.wordColor +"; background-color: "+ webCalendar.btnBgColor +"}"+
    "</style>"+
	"</head>"+
	
	"<body onselectstart='return false' style='margin: 0px' oncontextmenu='return false'>"+
	"<form name=meizz>";

	if (webCalendar.drag){ 
	strIframe += ""+
	"<scr"+"ipt language=javascript>"+
    "	var drag=false, cx=0, cy=0, o = parent.webCalendar.calendar; "+
    "	function dragStart(){"+
	"		cx=window.event.clientX; "+
	"		cy=window.event.clientY; "+
	"		drag=true;"+
	"	}"+
	"	function document.onmousemove(){"+
    "		if(drag){"+
	"			if(o.style.left=='') o.style.left=0; "+
	"			if(o.style.top=='') o.style.top=0;"+
    "			o.style.left = parseInt(o.style.left) + window.event.clientX-cx;"+
    "			o.style.top  = parseInt(o.style.top)  + window.event.clientY-cy;"+
	"		}"+
	"	}"+
    "	function document.onkeydown(){ "+
	"		switch(window.event.keyCode){  "+
	"			case 27 : parent.hiddenCalendar(); break;"+
    "			case 37 : parent.prevMonth();break; "+
	"			case 38 : parent.prevYear();break; "+
	"			case 39 : parent.nextMonth();break; "+
	"			case 40 : parent.nextYear();break;"+
    "			case 78 : parent.webCalendar.thisYear=new Date().getFullYear();"+
	"					  parent.webCalendar.thisMonth=new Date().getMonth()+1;"+
	"					  parent.webCalendar.thisDay=new Date().getDate();"+
	"					  parent.webCalendar.thisHour=new Date().getHours();"+
	"					  parent.webCalendar.thisMinute=new Date().getMinutes();"+
	"					  parent.writeCalendar();"+
	"					  parent.returnDate();"+
	"					  break;"+
    "			case 67 : parent.webCalendar.objExport.value='';"+
	"					  break;"+
	"		} "+
	"		window.event.keyCode = 0; "+
	"		window.event.returnValue= false;"+
	"	}"+
	"</scr"+"ipt>"
	}

	strIframe += ""+
	"<select name=tmpYearSelect  onblur='parent.hiddenSelect(this)' style='z-index:1;position:absolute;top:3;left:18;display:none'"+
    "  onchange='parent.webCalendar.thisYear =this.value; parent.hiddenSelect(this); parent.writeCalendar();parent.returnDate()'>"+
	"</select>"+
    "<select name=tmpMonthSelect onblur='parent.hiddenSelect(this)' style='z-index:1; position:absolute;top:3;left:74;display:none'"+
    "  onchange='parent.webCalendar.thisMonth=this.value; parent.hiddenSelect(this); parent.writeCalendar();parent.returnDate()'>"+
	"</select>"+
	"<select name=tmpHourSelect  onblur='parent.hiddenSelect(this)' style='z-index:1;position:absolute;top:3;left:18;display:none'"+
    "  onchange='parent.webCalendar.thisHour =this.value; parent.hiddenSelect(this); parent.writeCalendar();parent.returnDate()'>"+
	"</select>"+
    "<select name=tmpMinuteSelect onblur='parent.hiddenSelect(this)' style='z-index:1; position:absolute;top:3;left:74;display:none'"+
    "  onchange='parent.webCalendar.thisMinute=this.value; parent.hiddenSelect(this); parent.writeCalendar();parent.returnDate()'>"+
	"</select>";

	if(webCalendar.timeType=="yearMonth"){
		strIframe +=""+
		"<table id=tableMain width=98 height=128 class=bg border=0 cellspacing=1 cellpadding=0>"+
		"  <tr height=21>"+
		"    <td width=100% bgcolor='"+ webCalendar.lightColor +"'>"+
		"      <table width=100% id=tableHead border=0 cellspacing=1 cellpadding=0>"+
		"        <tr align=center height=21>"+
		"          <td width=14 class=bg title='向前翻 1 年&#13;快捷键：↑' style='cursor: hand' onclick='parent.prevYear()'><b>&lt;&lt;</b></td>"+
		"          <td width=14 class=bg title='向前翻 1 月&#13;快捷键：←' style='cursor: hand' onclick='parent.prevMonth()'><b>&lt;</b></td>"+
		"          <td width=40 id=infuntionYearHead align=center title='点击此处选择年份' onclick='parent.funYearSelect(parseInt(this.innerText,10))'"+
		"              onmouseover='this.bgColor=parent.webCalendar.overColor; this.style.color=parent.webCalendar.lightColor'"+
		"              onmouseout='this.bgColor=parent.webCalendar.lightColor; this.style.color=parent.webCalendar.wordColor'></td>"+
		"          <td width=14 class=bg title='向后翻 1 月&#13;快捷键：→' style='cursor: hand' onclick='parent.nextMonth()'><b>&gt;</b></td>"+
		"          <td width=14 class=bg title='向前翻 1 年&#13;快捷键：↑' style='cursor: hand' onclick='parent.nextYear()'><b>&gt;&gt;</b></td>"+
		"        </tr>"+
		"      </table>"+
		"    </td>"+
		"  </tr>"+
		"  <tr>"+
		"    <td valign=top width=100% bgcolor='"+ webCalendar.lightColor +"'>"+
		"      <table id=tableMouth width=100% border=0 cellspacing=1 cellpadding=0>";
		for(var i=0; i<3; i++){ 
			strIframe += "<tr height=24>";
			for(var j=0; j<4; j++){
				strIframe += "<td class=out id='infuntion_"+(i*4+j)+"' title='"+webCalendar.thisYear+"年"+(i*4+j+1)+"月' "+
				    "onclick=parent.selectDate('"+(i*4+j+1)+"') "+
					"onmouseover=parent.monthMouseOver() onmouseout=parent.monthMouseOut()>"+(i*4+j+1)+((i*4+j+1)>9?".":"月")+"</td>";
			}
			strIframe += "</tr>";
		}
		strIframe += "<tr height=24>"+
		"               <td colspan=2 align=center style='cursor: hand;' class=out title='"+ webCalendar.regInfo +"'>使用说明</td>"+
		"               <td colspan=2 align=center class=out title='"+ webCalendar.regInfo +"'><input style=' background-color: "+
		webCalendar.btnBgColor +"; width: 100%; height: 100%; border: 0' onfocus='this.blur()'"+
		"                 type=button value='关&nbsp;闭' onclick='parent.hiddenCalendar()'></td></tr>"+
		"      </table>"+
		"    </td>"+
		"  </tr>"+
		"<table>";
		with(webCalendar.iframe)
		{
			document.writeln(strIframe); document.close();
			infuntionCalendarDiv.style.width  = tableMain.width;
			infuntionCalendarDiv.style.height = tableMain.height;
			for(var i=0; i<12; i++){
				webCalendar.monthObj[i] = eval("infuntion_"+ i);
				webCalendar.monthObj[i].onmouseover = monthMouseOver;
				webCalendar.monthObj[i].onmouseout  = monthMouseOut;
				webCalendar.monthObj[i].onclick     = selectDate;
			}
		}
	}else if(webCalendar.timeType=="date"||webCalendar.timeType=="dateTime"){
		infuntionCalendarDiv.style.height=170;
		strIframe +=""+
		"<table id=tableMain width=142 class=bg border=0 cellspacing=1 cellpadding=0>"+
		"  <tr height=19>"+
		"    <td width=140 bgcolor='"+ webCalendar.lightColor +"'>"+
		"      <table width=140 id=tableHead border=0 cellspacing=1 cellpadding=0>"+
		"        <tr align=center height=19>"+
		"          <td width=16 class=bg title='向前翻 1 年&#13;快捷键：↑' style='cursor: hand' onclick='parent.prevYear()'><b>&lt;&lt;</b></td>"+
		"          <td width=16 class=bg title='向前翻 1 月&#13;快捷键：←' style='cursor: hand' onclick='parent.prevMonth()'><b>&lt;</b></td>"+
		"          <td width=43 id=infuntionYearHead align=center title='点击此处选择年份' onclick='parent.funYearSelect(parseInt(this.innerText,10))'"+
		"              onmouseover='this.bgColor=parent.webCalendar.darkColor; this.style.color=parent.webCalendar.lightColor'"+
		"              onmouseout='this.bgColor=parent.webCalendar.lightColor; this.style.color=parent.webCalendar.wordColor'></td>"+
		"          <td width=33 id=infuntionMonthHead align=center title='点击此处选择月份' onclick='parent.funMonthSelect(parseInt(this.innerText,10))'"+
		"              onmouseover='this.bgColor=parent.webCalendar.darkColor; this.style.color=parent.webCalendar.lightColor'"+
		"              onmouseout='this.bgColor=parent.webCalendar.lightColor; this.style.color=parent.webCalendar.wordColor'></td>"+
		"          <td width=16 class=bg title='向后翻 1 月&#13;快捷键：→' style='cursor: hand' onclick='parent.nextMonth()'><b>&gt;</b></td>"+
		"          <td width=16 class=bg title='向前翻 1 年&#13;快捷键：↑' style='cursor: hand' onclick='parent.nextYear()'><b>&gt;&gt;</b></td>"+
		"        </tr>"+
		"      </table>"+
		"    </td>"+
		"  </tr>"+
		"  <tr>"+
		"    <td height=20>"+
		"      <table id=tableWeek border=1 width=140 cellpadding=0 cellspacing=0 ";
		if(webCalendar.drag)
		{
			strIframe += "onmousedown='dragStart()' onmouseup='drag=false' onmouseout='drag=false'";
		}
	
		strIframe += " borderColorLight='"+ webCalendar.darkColor +"' borderColorDark='"+ webCalendar.lightColor +"'>"+
		"        <tr align=center><td height=20>日</td><td>一</td><td>二</td><td>三</td><td>四</td><td>五</td><td>六</td></tr>"+
		"      </table>"+
		"    </td>"+
		"  </tr>"+
		"  <tr>"+
		"    <td valign=top width=140 bgcolor='"+ webCalendar.lightColor +"'>"+
		"      <table id=tableDay width=140 border=0 cellspacing=1 cellpadding=0>";
			 for(var i=0; i<5; i++){
				 strIframe += "<tr height=19>";
			 	 for(var j=0; j<7; j++)
				 	strIframe += "<td class=out id='infuntionDay_"+ (i*7+j) +"'></td>"; strIframe += "</tr>";
			 }
			 strIframe += "<tr height=19>";
			 for(var i=35; i<40; i++) 
				 strIframe += "<td class=out id='infuntionDay_"+ i +"'></td>";
			 strIframe +="<td colspan=2 align=center class=out title='"+ webCalendar.regInfo +"'><input style=' background-color: "+
			 webCalendar.btnBgColor +";cursor: hand; padding-top: 4px; width: 100%; height: 100%; border: 0' onfocus='this.blur()'"+
			 "type=button value='&nbsp; 关闭' onclick='parent.hiddenCalendar()'></td></tr>"+
		"      </table>"+
		"    </td>"+
		"  </tr>";
		if(webCalendar.timeType=="dateTime"){
			infuntionCalendarDiv.style.height=190;
			strIframe +=""+
			"  <tr height=19>"+
			"    <td width=140 bgcolor='"+ webCalendar.lightColor +"'>"+
			"      <table width=140 id=tableTail border=0 cellspacing=1 cellpadding=0>"+
			"        <tr align=center height=19>"+
			"          <td width=16 class=bg title='向前翻 1 小时' style='cursor: hand' onclick='parent.prevHour()'><b>&lt;&lt;</b></td>"+
			"          <td width=16 class=bg title='向前翻 1 分钟' style='cursor: hand' onclick='parent.prevMinute()'><b>&lt;</b></td>"+
			"          <td width=43 id=meizzHour align=center title='点击此处选择小时' onclick='parent.funHourSelect(parseInt(this.innerText,10))'"+
			"              onmouseover='this.bgColor=parent.webCalendar.darkColor; this.style.color=parent.webCalendar.lightColor'"+
			"              onmouseout='this.bgColor=parent.webCalendar.lightColor; this.style.color=parent.webCalendar.wordColor'></td>"+
			"          <td width=33 id=meizzMinute align=center title='点击此处选择分钟' onclick='parent.funMinuteSelect(parseInt(this.innerText,10))'"+
			"              onmouseover='this.bgColor=parent.webCalendar.darkColor; this.style.color=parent.webCalendar.lightColor'"+
			"              onmouseout='this.bgColor=parent.webCalendar.lightColor; this.style.color=parent.webCalendar.wordColor'></td>"+
			"          <td width=16 class=bg title='向后翻 1 分钟' style='cursor: hand' onclick='parent.nextMinute()'><b>&gt;</b></td>"+
			"          <td width=16 class=bg title='向前翻 1 小时' style='cursor: hand' onclick='parent.nextHour()'><b>&gt;&gt;</b></td>"+
			"        </tr>"+
			"      </table>"+
			"    </td>"+
			"  </tr> ";
		}
		strIframe += "<table>";
		strIframe +="</form></div></body></html>";
		   
		with(webCalendar.iframe){
			document.writeln(strIframe); 
			document.close();
			infuntionCalendarDiv.style.width = tableMain.width;
			for(var i=0; i<40; i++){
				webCalendar.dayObj[i] = eval("infuntionDay_"+ i);
				webCalendar.dayObj[i].onmouseover = dayMouseOver;
				webCalendar.dayObj[i].onmouseout  = dayMouseOut;
				webCalendar.dayObj[i].onclick     = selectDate;
			}
		}
	}
}

function yearMonth(){ 
	webCalendar.timeType = "yearMonth";
	calendar(arguments);
}
function date(){ 
	webCalendar.timeType = "date";
	calendar(arguments);
}
function dateTime(){ 
	webCalendar.timeType = "dateTime";
	calendar(arguments);
}

function calendar(para){ 
	if (para.length == 1){
		webCalendar.eventSrc =para[0];
		webCalendar.objExport=para[0];
	}else if(para.length == 0){
		webCalendar.eventSrc =window.event.srcElement;
		webCalendar.objExport=window.event.srcElement;
	}else if(para.length == 2){
		webCalendar.eventSrc =para[0];
		webCalendar.objExport=para[1];
	}else if(para.length > 2){
		alert("对不起！传入本控件的参数太多！");
		return;
	}

	with(webCalendar){
		thisYear   = new Date().getFullYear(); 
		thisMonth  = new Date().getMonth()+ 1; 
		thisDay    = new Date().getDate(); 
		thisHour   = new Date().getHours(); 
		thisMinute = new Date().getMinutes(); 
	}

	writeIframe();
	
	adjustCalendarPosition();
	
	webCalendar.nowTimeStr=(webCalendar.thisYear+"-"+appendZero(webCalendar.thisMonth)+"-"+appendZero(webCalendar.thisDay)+" "+appendZero(webCalendar.thisHour)+":"+appendZero(webCalendar.thisMinute));

	webCalendar.objExport.onkeydown  = checkKeyForTime;
	webCalendar.objExport.onkeyup    = funKeyup;
	webCalendar.objExport.style.imeMode="Disabled";

	matchReg();
	writeCalendar();
	returnDate();
}

function funKeyup(){
	if(matchReg()){
		writeCalendar();
	}else{
		writeCalendar();
		returnDate();
	}
}

function matchReg(){
    try{
		with(webCalendar){
			inputTimeStr=(webCalendar.objExport.value);
			inputTimeStr=inputTimeStr+nowTimeStr.substring(inputTimeStr.length,nowTimeStr.length);
			dateStyle =inputTimeStr.match(dateReg);
			if (dateStyle == null){
				return false;
            }else{
                thisYear  = parseInt(webCalendar.dateStyle[1], 10);
				if (!(thisYear<=9999 && thisYear >=1000))
					thisYear = new Date().getFullYear();
                thisMonth = parseInt(webCalendar.dateStyle[3], 10);
				if(!(thisMonth>0 && thisMonth<13))
					thisMonth = new Date().getMonth()+ 1;
                thisDay   = parseInt(webCalendar.dateStyle[4], 10);
				if(!(thisDay>0&&thisDay<=webCalendar.daysMonth[thisMonth-1])){
					var curDate=new Date().getDate();
					thisDay = curDate<=webCalendar.daysMonth[thisMonth-1]?curDate:webCalendar.daysMonth[thisMonth-1]; 
				}
                thisHour  = parseInt(webCalendar.dateStyle[5], 10);
				if(!(thisHour>=0&&thisHour<24))
					thisHour = new Date().getHours();
                thisMinute = parseInt(webCalendar.dateStyle[6], 10);
				if(!(thisMinute>=0&&thisMinute<60))
					thisMinute = new Date().getMinutes(); 

                inputDate = thisDay +"/"+thisMonth+"/"+thisYear;
				return true;
			}
        }  
    }catch(e){
		return false;
	}
}

function writeCalendar(){ 
    var y = webCalendar.thisYear;
    var m = webCalendar.thisMonth;
    var d = webCalendar.thisDay;
    var h = webCalendar.thisHour;
    var mi= webCalendar.thisMinute;
    webCalendar.inputDate = d +"/"+m+"/"+y;

	webCalendar.daysMonth[1] = (0==y%4 && (y%100!=0 || y%400==0)) ? 29 : 28;
    
	webCalendar.iframe.infuntionYearHead.innerText  = y +"年";
	if(webCalendar.timeType=="yearMonth"){
		for(var i=0;i<12;i++){
			webCalendar.month[i] = (i+1)+"/"+webCalendar.thisYear;
			webCalendar.monthObj[i].bgColor      = webCalendar.dayBgColor;
			webCalendar.monthObj[i].style.color  = webCalendar.wordColor;
			if (webCalendar.thisMonth==(i+1)){
				webCalendar.monthObj[i].bgColor = webCalendar.darkColor; 
				webCalendar.monthObj[i].style.color = webCalendar.lightColor;
			}
			if (webCalendar.month[i] == webCalendar.today.substring(3,10)){ 
				webCalendar.monthObj[i].bgColor = webCalendar.todayColor; 
				webCalendar.monthObj[i].style.color = webCalendar.lightColor;
			}
		}
		return;
	}

    webCalendar.iframe.infuntionMonthHead.innerText = parseInt(m, 10) +"月";
    
	webCalendar.daysMonth[1] = (0==y%4 && (y%100!=0 || y%400==0)) ? 29 : 28; 
    
	var w = new Date(y, m-1, 1).getDay();
    var prevDays = m==1  ? webCalendar.daysMonth[11] : webCalendar.daysMonth[m-2];
    
	for(var i=(w-1); i>=0; i--){ 
        webCalendar.day[i] = prevDays +"/"+ (parseInt(m, 10)-1) +"/"+ y;
        if(m==1) 
			webCalendar.day[i] = prevDays +"/"+ 12 +"/"+ (parseInt(y, 10)-1);
        prevDays--;
    }
    for(var i=1; i<=webCalendar.daysMonth[m-1]; i++) 
		webCalendar.day[i+w-1] = i +"/"+ m +"/"+ y;
    for(var i=1; i<40-w-webCalendar.daysMonth[m-1]+1; i++){
        webCalendar.day[webCalendar.daysMonth[m-1]+w-1+i] = i +"/"+ (parseInt(m, 10)+1) +"/"+ y;
        if(m==12) webCalendar.day[webCalendar.daysMonth[m-1]+w-1+i] = i +"/"+ 1 +"/"+ (parseInt(y, 10)+1);
    }
	
    for(var i=0; i<40; i++){ 
        var a = webCalendar.day[i].split("/");
        webCalendar.dayObj[i].innerText    = a[0];
        webCalendar.dayObj[i].title        = a[2] +"年"+ a[1] +"月"+ a[0]+"日";
        webCalendar.dayObj[i].bgColor      = webCalendar.dayBgColor;
        webCalendar.dayObj[i].style.color  = webCalendar.wordColor;
        if ((i<10 && parseInt(webCalendar.day[i], 10)>20) || (i>27 && parseInt(webCalendar.day[i], 10)<12))
            webCalendar.dayObj[i].style.color = webCalendar.wordDark;
        if (webCalendar.inputDate==webCalendar.day[i]) {
			webCalendar.dayObj[i].bgColor = webCalendar.darkColor; 
			webCalendar.dayObj[i].style.color = webCalendar.lightColor;
		}
        if (webCalendar.day[i] == webCalendar.today){
			webCalendar.dayObj[i].bgColor = webCalendar.todayColor; webCalendar.dayObj[i].style.color = webCalendar.lightColor;
		}
    }
	if(webCalendar.timeType=="dateTime"){
		webCalendar.iframe.meizzHour.innerText  = webCalendar.thisHour +"时";
		webCalendar.iframe.meizzMinute.innerText = webCalendar.thisMinute +"分";
	}
}

function adjustCalendarPosition() {
	var objEventSrc=webCalendar.eventSrc;

	var styleOfCalendar = webCalendar.calendar.style; 

    if(webCalendar.timeType!="yearMonth")
		webCalendar.iframe.tableWeek.style.cursor = webCalendar.drag ? "move" : "default";
	
	var t = objEventSrc.offsetTop,  h = objEventSrc.clientHeight, l = objEventSrc.offsetLeft, p = objEventSrc.type;
	while (objEventSrc = objEventSrc.offsetParent){
		t += objEventSrc.offsetTop; 
		l += objEventSrc.offsetLeft;
	}
    
	styleOfCalendar.display = ""; 
    
	var cw = webCalendar.calendar.clientWidth, ch = webCalendar.calendar.clientHeight;
    var dw = document.body.clientWidth, dl = document.body.scrollLeft, dt = document.body.scrollTop;
    
    if (document.body.clientHeight + dt - t - h >= ch) 
		styleOfCalendar.top = (p=="image")? t + h : t + h + 6;
    else 
		styleOfCalendar.top  = (t - dt < ch) ? ((p=="image")? t + h : t + h + 6) : t - ch;
    if (dw + dl - l >= cw) 
		styleOfCalendar.left = l; 
	else 
		styleOfCalendar.left = (dw >= cw) ? dw - cw + dl : dl;
}

function funYearSelect(){ 
    var n = webCalendar.yearFall;
    var e = webCalendar.iframe.document.forms[0].tmpYearSelect;
    var y = isNaN(parseInt(webCalendar.thisYear, 10)) ? new Date().getFullYear() : parseInt(webCalendar.thisYear,10);
	y = (y <= 1000)? 1000 : ((y >= 9999)? 9999 : y);
    
	var min = (y - n >= 1000) ? y - n : 1000;
    var max = (y + n <= 9999) ? y + n : 9999;
	min = (max == 9999) ? max-n*2 : min;
	max = (min == 1000) ? min+n*2 : max;
    
	for (var i=min; i<=max; i++) e.options.add(new Option(i +"年", i));
    e.style.display = ""; e.value = y; 
	e.focus();
	window.status = e.style.top;
}
function funMonthSelect() {
    var m = isNaN(parseInt(webCalendar.thisMonth,10)) ? new Date().getMonth() + 1 : parseInt(webCalendar.thisMonth,10);
    var e = webCalendar.iframe.document.forms[0].tmpMonthSelect;
    for (var i=1; i<13; i++) e.options.add(new Option(i +"月", i));
    e.style.display = ""; e.value = m; e.focus(); 
	window.status = e.style.top;
}
function funHourSelect() {
    var h = isNaN(parseInt(webCalendar.thisHour,10)) ? new Date().getHours(): parseInt(webCalendar.thisHour,10);
    var e = webCalendar.iframe.document.forms[0].tmpHourSelect;
	e.style.left=35;
	e.style.top =168;
    for (var i=0; i<24; i++) e.options.add(new Option(i +"时", i));
    e.style.display = ""; e.value = h; e.focus(); 
	window.status = e.style.top;
}
function funMinuteSelect(){
    var m = isNaN(parseInt(webCalendar.thisMinute,10)) ? new Date().getMinutes(): parseInt(webCalendar.thisMinute,10);
    var e = webCalendar.iframe.document.forms[0].tmpMinuteSelect;
	e.style.left=60;
	e.style.top=168;
    for (var i=0; i<60; i++) e.options.add(new Option(i +"分", i));
    e.style.display = ""; e.value = m; e.focus(); 
	window.status = e.style.top;
}
function hiddenSelect(e){
	for(var i=e.options.length; i>-1; i--)
		e.options.remove(i); 
	e.style.display="none";
}

function prevYear(){
	if(webCalendar.thisYear<=1000)
		return;
	webCalendar.thisYear--;	
	writeCalendar();
	returnDate();
}
function nextYear(){
	if(webCalendar.thisYear>=9999)
		return;
	webCalendar.thisYear++; 
	writeCalendar();
	returnDate();
}
function prevMonth(){
    if (webCalendar.thisMonth==1){
        webCalendar.thisMonth=12;
		prevYear();
        return;
    }
	if (webCalendar.thisDay>webCalendar.daysMonth[webCalendar.thisMonth-2]){
        webCalendar.thisDay=webCalendar.daysMonth[webCalendar.thisMonth-2];
    }
    webCalendar.thisMonth--;	
	writeCalendar();
	returnDate();
}
function nextMonth(){
    if (webCalendar.thisMonth==12){
        webCalendar.thisMonth=1;
        nextYear();
		return;
    }
	if (webCalendar.thisDay>webCalendar.daysMonth[webCalendar.thisMonth]){
        webCalendar.thisDay=webCalendar.daysMonth[webCalendar.thisMonth];
    }
    webCalendar.thisMonth++;	
	writeCalendar();
	returnDate();
}
function prevDay(){
    if (webCalendar.thisDay==1){
		webCalendar.thisDay=webCalendar.daysMonth[webCalendar.thisMonth-2];
        prevMonth();
		return;
	}
	webCalendar.thisDay--;	
	writeCalendar();
	returnDate();
}
function nextDay(){
	if (webCalendar.thisDay==webCalendar.daysMonth[webCalendar.thisMonth-1]){
        webCalendar.thisDay=1;
        nextMonth();
		return;
	}
    webCalendar.thisDay++;	
	writeCalendar();
	returnDate();
}
function prevHour(){
    if (webCalendar.thisHour==0){
		webCalendar.thisHour=23;
        prevDay();
		return;
	}
	webCalendar.thisHour--;	
	writeCalendar();
	returnDate();
}
function nextHour(){
	if (webCalendar.thisHour==23){
        webCalendar.thisHour=0;
        nextDay();
		return;
	}
    webCalendar.thisHour++;	
	writeCalendar();
	returnDate();
}
function prevMinute(){
    if (webCalendar.thisMinute==0){
		webCalendar.thisMinute=59;
        prevHour();
		return;
    }
    webCalendar.thisMinute--;	
	writeCalendar();
	returnDate();
}
function nextMinute(){
    if (webCalendar.thisMinute==59){
        webCalendar.thisMinute=0;
        nextHour();
		return;
    }
    webCalendar.thisMinute++; 
	writeCalendar();
	returnDate();
}

function getObjectById(id){ 
	if(document.all) 
		return(eval("document.all."+ id)); 
	return(eval(id)); 
}

function appendZero(n){
	return(("00"+ n).substr(("00"+ n).length-2));
}

String.prototype.trim=function(){
	return this.replace(/(^\s*)|(\s*$)/g,"");
}

function monthMouseOver(){
    this.className = "over";
    this.style.backgroundColor = webCalendar.overColor;
    if(webCalendar.month[this.id.substr(10)] == webCalendar.thisMonth)
    	this.style.color = webCalendar.lightColor;
}

function monthMouseOut(){
    this.className = "out"; 
	var m = webCalendar.month[this.id.substr(10)];
    this.style.removeAttribute('backgroundColor');
    if( m == webCalendar.thisMonth)
    {
        this.style.color = webCalendar.lightColor;
        this.style.color = webCalendar.wordColor;
    }
}

function dayMouseOver(){
    this.className = "over";
    this.style.backgroundColor = webCalendar.overColor;
    if(webCalendar.day[this.id.substr(13)].split("/")[1] == webCalendar.thisMonth)
		this.style.color = webCalendar.lightColor;
}

function dayMouseOut(){
    this.className = "out"; 
	var d = webCalendar.day[this.id.substr(13)], a = d.split("/");
    this.style.removeAttribute('backgroundColor');
    if(a[1] == webCalendar.thisMonth && d != webCalendar.today)
    {
        if(webCalendar.dateStyle && a[0] == parseInt(webCalendar.dateStyle[4], 10))
        this.style.color = webCalendar.lightColor;
        this.style.color = webCalendar.wordColor;
    }
}

function hiddenCalendar(){
	if(webCalendar.objExport&&webCalendar.objExport.value!=""){
		matchReg();
		returnDate();
	}
	webCalendar.calendar.style.display = "none";
}

function selectDate(para){
	with(webCalendar){
		if(timeType=="yearMonth"){
			var a = webCalendar.month[this.id.substr(10)].split("/");
			thisMonth=a[0];
			thisYear=a[1];
		}else{
			var a = webCalendar.day[this.id.substr(13)].split("/");
			thisDay=a[0];
			thisMonth=a[1];
			thisYear=a[2];
		}
	}
	returnDate();
	hiddenCalendar();
}

function returnDate(){ 
	with(webCalendar){
		if(objExport){
			var returnValue;
			if(timeType=="yearMonth"){
				returnValue=thisYear+"-"+appendZero(thisMonth);
			}else if(timeType=="date"){
				returnValue=thisYear+"-"+appendZero(thisMonth)+"-"+appendZero(thisDay);
			}else if(timeType=="dateTime"){
				returnValue=thisYear+"-"+appendZero(thisMonth)+"-"+appendZero(thisDay)+" "+appendZero(thisHour)+":"+appendZero(thisMinute);
			}
			objExport.value=returnValue;
		}
    }
}

document.onmousedown=function(){
    if(webCalendar.eventSrc != window.event.srcElement)
		hiddenCalendar();
}

function isLeapForTimeInput(theDate){
	var theYear=parseInt((theDate).substring(0,4));
	if((theYear % 4 == 0 && (theYear % 100 != 0 || theYear % 400 == 0)))
		return true;
	else
		return false;
}

function isSmallMonthForTimeInput(theDate){
	var theMonth=parseInt((theDate).substring(5,7));
	if(theMonth==4||theMonth==6||theMonth==9||theMonth==11)
		return true;
	else if(theMonth!=2)
		return false;
}

function getCursorPosForTimeInput(obj){
	var strLength=(obj.value).length;
	var length1;
	var length2;
	obj.focus();
	var s=document.selection.createRange();
	s.setEndPoint("EndToStart",obj.createTextRange());
	length2=s.text.length;

	obj.focus();
	var s=document.selection.createRange();
	s.setEndPoint("StartToStart",obj.createTextRange());
	length1=s.text.length;
	if(length2==length1){
		return length2;
	}else if(length1-length2==strLength){
		return -1;
	}
}

function moveCursorForTimeInput(obj,n){ 
	obj.focus(); 
	var rng=document.selection.createRange(); 
	rng.move("character", n); 
	rng.select(); 
}

function moveCursorToSelect(obj,n){
	obj.focus(); 
	var rng=document.selection.createRange(); 
	rng.moveStart("character", n); 
	rng.select(); 
}

function checkKeyForTime(){
	var obj=webCalendar.objExport;
	var strValue=obj.value;
	var strLength=strValue.length;

	if(webCalendar.timeType=="dateTime"&&strLength>16){
		obj.value=strValue.substring(0,16);
	}else if(webCalendar.timeType=="date"&&strLength>10){
		obj.value=strValue.substring(0,10);
	}else if(webCalendar.timeType=="yearMonth"&&strLength>7){
		obj.value=strValue.substring(0,7);
	}

	strValue=obj.value;
	strLength=strValue.length;

	var position=getCursorPosForTimeInput(obj);
	
	if(event.keyCode>=96&&event.keyCode<=105){
	  event.keyCode=event.keyCode-48;
	}
	
	if(!(event.keyCode>=37&&event.keyCode<=40)&&event.keyCode!=45&&event.keyCode!=9&&!(event.keyCode>=16&&event.keyCode<=18)){
		if(event.keyCode==8){
			if(position>=strLength||position==-1){
				event.returnValue=true;
			}else if(position==5||position==8||position==11||position==14){
				moveCursorForTimeInput(obj,-1);
				event.returnValue=false;
			}else if(position==1||position==7||position==10||position==13){
				obj.value=strValue.substring(0,position-1)+"1"+strValue.substring(position,strValue.length);
				moveCursorForTimeInput(obj,position-strValue.length-1);
				event.returnValue=false;
			}else if(position>0){
				obj.value=strValue.substring(0,position-1)+"0"+strValue.substring(position,strValue.length);
				moveCursorForTimeInput(obj,position-strValue.length-1);
				event.returnValue=false;
			}
		}else if(event.keyCode==46){
			if(position>=strLength||position==-1){
				event.returnValue=true;
			}
			else if(position==4||position==7||position==10||position==13){
				moveCursorForTimeInput(obj,1);
				event.returnValue=false;
			}else if(position==0||position==6||position==9||position==12||position==15){
				obj.value=strValue.substring(0,position)+"1"+strValue.substring(position+1,strValue.length);
				moveCursorForTimeInput(obj,position-strValue.length+1);
				event.returnValue=false;
			}else if(position>=0){
				obj.value=strValue.substring(0,position)+"0"+strValue.substring(position+1,strValue.length);
				moveCursorForTimeInput(obj,position-strValue.length+1);
				event.returnValue=false;
			}
		}else if(event.keyCode>=48&&event.keyCode<=57){
			if(position>=strLength){
				if(position==0&&event.keyCode==48){
					event.returnValue=false;
				}else if(position==4){
					obj.value=(obj.value)+"-";
					if(!(event.keyCode>=48&&event.keyCode<=49)){
						event.returnValue=false;
					}
				}else if(position==5&&!(event.keyCode>=48&&event.keyCode<=49)){
					event.returnValue=false;
				}else if(position==6&&(obj.value).substring(5,6)=="1"&&!(event.keyCode>=48&&event.keyCode<=50)){
					event.returnValue=false;
				}else if(position==7){
					if(webCalendar.timeType=="yearMonth"){
						event.returnValue=false;
					}else{
						obj.value=(obj.value)+"-";
						if((obj.value).substring(5,7)=="02"){
							if(!(event.keyCode>=48&&event.keyCode<=50))
								event.returnValue=false;
						}else{
							if(!(event.keyCode>=48&&event.keyCode<=51))
								event.returnValue=false;
						}
					}
				}else if(position==8){
					if((obj.value).substring(5,7)=="02"){
						if(!(event.keyCode>=48&&event.keyCode<=50))
							event.returnValue=false;
					}
					else{
						if(!(event.keyCode>=48&&event.keyCode<=51))
							event.returnValue=false;
					}
				}else if(position==9){
					if(isLeapForTimeInput(obj.value)==true&&((obj.value).substring(5,7)=="02")&&(obj.value).substring(8,9)=="2"&&!(event.keyCode>=48&&event.keyCode<=56))
						event.returnValue=false;
					else if(isSmallMonthForTimeInput(obj.value)==true&&(obj.value).substring(8,9)=="3"&&(event.keyCode!=48))
						event.returnValue=false;
					else if(isSmallMonthForTimeInput(obj.value)==false&&(obj.value).substring(8,9)=="3"&&!(event.keyCode>=48&&event.keyCode<=49))
						event.returnValue=false;
				}else if(position==10){
					if(webCalendar.timeType!="dateTime"){
						event.returnValue=false;
					}else{
						obj.value=(obj.value)+" ";
						if(!(event.keyCode>=48&&event.keyCode<=50))
							event.returnValue=false;
					}
				}else if(position==11){
					if(!(event.keyCode>=48&&event.keyCode<=50))
						event.returnValue=false;
				}else if(position==12){
					if((obj.value).substring(11,12)=="2"&&!(event.keyCode>=48&&event.keyCode<=52))
						event.returnValue=false;
				}else if(position==13){
					obj.value=(obj.value)+":";
					if(!(event.keyCode>=48&&event.keyCode<=53))
						event.returnValue=false;
				}else if(position==14){
					if(!(event.keyCode>=48&&event.keyCode<=53))
						event.returnValue=false;
				}else if(position==16){
					event.returnValue=false;
				}
			}else{
				if(position==0&&event.keyCode==48){
					event.returnValue=false;
				}else if(position==4){
					if(!(event.keyCode>=48&&event.keyCode<=49)){
						event.returnValue=false;
					}
					else{												
						moveCursorToSelect(obj,2);
						moveCursorToSelect(obj,-1);
					}
				}else if(position==5){

					 if(!(event.keyCode>=48&&event.keyCode<=49))
						event.returnValue=false;
					else{												
						moveCursorToSelect(obj,1);
						moveCursorToSelect(obj,-1);
					}
				}else if(position==6){
					if((obj.value).substring(5,6)=="1"&&!(event.keyCode>=48&&event.keyCode<=50))
						event.returnValue=false;
					else{												
						moveCursorToSelect(obj,1);
						moveCursorToSelect(obj,-1);
					}
				}else if(position==7){
					if(!(event.keyCode>=48&&event.keyCode<=51))
						event.returnValue=false;
					else{												
						moveCursorToSelect(obj,2);
						moveCursorToSelect(obj,-1);
					}
				}else if(position==8){
					if(isLeapForTimeInput(obj.value)==true&&(obj.value).substring(5,7)=="02"){
						if(!(event.keyCode>=48&&event.keyCode<=50))
							event.returnValue=false;
					}else if(!(event.keyCode>=48&&event.keyCode<=51)){
							event.returnValue=false;
					}else{												
						moveCursorToSelect(obj,1);
						moveCursorToSelect(obj,-1);
					}
				}else if(position==9){
					if(isLeapForTimeInput(obj.value)==true&&(obj.value).substring(8,9)=="2"&&!(event.keyCode>=48&&event.keyCode<=56))
						event.returnValue=false;
					else if(isSmallMonthForTimeInput(obj.value)==true&&(obj.value).substring(8,9)=="3"&&(event.keyCode!=48))
						event.returnValue=false;
					else if(isSmallMonthForTimeInput(obj.value)==false&&(obj.value).substring(8,9)=="3"&&!(event.keyCode>=48&&event.keyCode<=49))
						event.returnValue=false;
					else{												
						moveCursorToSelect(obj,1);
						moveCursorToSelect(obj,-1);
					}
				}else if(position==10){
					if(!(event.keyCode>=48&&event.keyCode<=49))
						event.returnValue=false;
					else{												
						moveCursorToSelect(obj,2);
						moveCursorToSelect(obj,-1);
					}
				}else if(position==11){
					if(!(event.keyCode>=48&&event.keyCode<=50))
						event.returnValue=false;
					else{												
						moveCursorToSelect(obj,1);
						moveCursorToSelect(obj,-1);
					}
				}else if(position==12){
					if((obj.value).substring(11,12)=="2"&&!(event.keyCode>=48&&event.keyCode<=52))
						event.returnValue=false;
					else{												
						moveCursorToSelect(obj,1);
						moveCursorToSelect(obj,-1);
					}
				}else if(position==13){
					if(!(event.keyCode>=48&&event.keyCode<=53))
						event.returnValue=false;
					else{												
						moveCursorToSelect(obj,2);
						moveCursorToSelect(obj,-1);
					}
				}else if(position==14){
					if(!(event.keyCode>=48&&event.keyCode<=53))
						event.returnValue=false;
					else{												
						moveCursorToSelect(obj,1);
						moveCursorToSelect(obj,-1);
					}
				}else if(position==16){
					event.returnValue=false;
				}else{
					moveCursorToSelect(obj,1);
					moveCursorToSelect(obj,-1);
				}
			}
		}
		else{
			event.returnValue=false;
		}
	}
}
//-->