var months = new Array("一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"); 
var days   = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var weeks  = new Array("日","一","二","三","四","五","六");
var weekenable  = new Array("0","1","1","1","1","1","1");
var today;
var pX;
var pY;

document.writeln("<div id='Calendar' style='position:absolute; z-index:1; visibility: hidden;'></div>");

function getDays(month,year){
    if(1 == month){
        return ((0 == year % 4) && (0 != (year % 100))) || (0 == year % 400) ? 29 : 28;
    }else{
        return days[month];
	}
}
function getToday(){
    var date  = new Date();
    this.year = date.getFullYear();
    this.month= date.getMonth();
    this.day  = date.getDate();
}
function getSelectDay(str){
    var str=str.split("-");
    
    var date  = new Date(parseFloat(str[0]),parseFloat(str[1])-1,parseFloat(str[2]));
    this.year = date.getFullYear();
    this.month= date.getMonth();
    this.day  = date.getDate();
}

function ShowDays() {
	var obj_Year =get_object('Year');
	var obj_Month=get_object('Month');

    var parseYear = parseInt(obj_Year.options[obj_Year.selectedIndex].value);
    var Seldate = new Date(parseYear,obj_Month.selectedIndex,1);
    var day = -1;
    var startDay = Seldate.getDay();
    var daily = 0;
    
    if((today.year == Seldate.getFullYear()) &&(today.month == Seldate.getMonth())){
        day = today.day;
	}
    var tableDay = get_object('Day');
    var DaysNum  = getDays(Seldate.getMonth(),Seldate.getFullYear());
    for(var intWeek = 1;intWeek < tableDay.rows.length;intWeek++){
        for(var intDay = 0;intDay < tableDay.rows[intWeek].cells.length;intDay++){
            var cell = tableDay.rows[intWeek].cells[intDay];
            if(intDay == startDay && 0 == daily){
                daily = 1;
			}            
            if(daily > 0 && daily <= DaysNum){				
				cell.style.cssText = 'cursor:pointer;border-right:1px solid #BBBBBB; border-bottom:1px solid #BBBBBB; color:#215DC6; font-family:Verdana; font-size:12px';
				if(day==daily){
					cell.style.background='#6699CC';
					cell.style.color='#FFFFFF';
				} else if(intDay==6){
					cell.style.color='green';
				} else if(intDay==0){
					cell.style.color='red';
				}
				if(weekenable[intDay]==0)
				{
					cell.onclick="function(){return false;}";
				}
				cell.innerHTML = daily;
                daily++;
            } else{
				cell.style.cssText = '';
                cell.innerHTML = '';
			}
        }
	}
}

function GetDate(idname,e){
    var sDate;
		var getElement =e.target||event.srcElement;
    if(getElement.tagName == "TD"){
        if(getElement.innerHTML != ""){
			var intMonth = get_object('Month').value;
			intMonth = (intMonth.length < 2 ? "0" : "") + intMonth;
			var intDay = getElement.innerHTML;
			intDay = (intDay.length <2 ? "0" : "") + intDay;
            sDate = get_object('Year').value + "-" + intMonth + "-" + intDay;
			var newDate = new Date();
			var curDate = newDate.getFullYear()+"-"+(newDate.getMonth()+1)+"-"+newDate.getDate();
			if(sDate=='2010-07-01'){
				get_object(idname).value='';
			}
			else{
				if(checkDateEarlier(sDate,curDate,0)){
					get_object(idname).value='';
				}
				else{
					get_object(idname).value=sDate;
					HiddenCalendar();
				}
			}
        }
	}
} 

function InitDate(idname){
    var sDate;

	var intMonth = get_object('Month').value;
	intMonth = (intMonth.length < 2 ? "0" : "") + intMonth;
	var intDay = "01";
	sDate = get_object('Year').value + "-" + intMonth + "-" + intDay;
	get_object(idname).value=sDate;

} 

function ClearCalendar(idname,e){
    
	get_object(idname).value='';
	HiddenCalendar();

} 

function HiddenCalendar(){
    get_object('Calendar').style.visibility='hidden';
}

function ShowCalendar(idname){
    var x,y,i,intWeeks,intDays;
    var table;
    var year,month,day;
    var obj=get_object(idname);
    var thisyear;
    
    thisyear=new Date();
    thisyear=thisyear.getFullYear();
    
    today = obj.value;
    if(isDate(today)){
        today = new getSelectDay(today);
	}else{
        today = new getToday();
	}
    
    x=obj.offsetLeft;
    y=obj.offsetTop;
    while(obj=obj.offsetParent){
        x+=obj.offsetLeft;
        y+=obj.offsetTop;
    }
	var Cal=get_object('Calendar');
    Cal.style.left=x+2+'px';
    Cal.style.top=y+20+'px';
    Cal.style.visibility="visible";
    
    table="<table border='0' cellspacing='0' style='border:1px solid #0066FF; background-color:#FFFFFF'>";
    table+="<tr>";
    table+="<td style='border-bottom:1px solid #0066FF; background-color:#84AACE'>";
    
    table+="<select name='Year' id='Year' onChange='ShowDays();' style='font-family:Verdana; font-size:12px'>";
    for(i = thisyear - 15;i < (thisyear + 15);i++){ 
        table+="<option value=" + i + " " + (today.year == i ? "Selected" : "") + ">" + i + "</option>"; 
	}
	table+="</select>";

    table+="<select name='Month' id='Month' onChange='ShowDays();' style='font-family:Verdana; font-size:12px'>";
    for(i = 0;i < months.length;i++){
        table+="<option value= " + (i + 1) + " " + (today.month == i ? "Selected" : "") + ">" + months[i] + "</option>";
	}

	table+="</select>";
    table+="</td>";
    table+="<td style='border-bottom:1px solid #0066FF; background-color:#84AACE; font-weight:bold; font-family:Wingdings 2,Wingdings,Webdings; font-size:16px; padding-top:2px; color:#4477FF; cursor:hand' align='center' title='清空' onClick='javascript:ClearCalendar(\"" + idname + "\",event)'><img src='images/clear.gif' align='absmiddle' title='清空' style='width:14px;height:14px;'/></td><td style='border-bottom:1px solid #0066FF; background-color:#84AACE; font-weight:bold; font-family:Wingdings 2,Wingdings,Webdings; font-size:16px; padding-top:2px; color:#4477FF; cursor:hand' align='center' title='关闭' onClick='javascript:HiddenCalendar()'><img src='images/close.gif' align='absmiddle' style='width:14px;height:14px;' title='关闭'/></td>";
    table+="</tr>";
    table+="<tr><td align='center' colspan='3'>";
    table+="<table id='Day' border='0' width='100%'>";
    table+="<tr>";

    for(i = 0;i < weeks.length;i++){
        table+="<td align='center' style='font-size:12px;'>" + weeks[i] + "</td>";
	}
	table+="</tr>";

    for(intWeeks = 0;intWeeks < 6;intWeeks++){
        table+="<tr>";
        for (intDays = 0;intDays < weeks.length;intDays++){
            table+="<td onClick='GetDate(\"" + idname + "\",event)' align='center'></td>";
		}
        table+="</tr>";
    }
    table+="</table></td></tr></table>";

    Cal.innerHTML=table;
    ShowDays();
}

function isDate(dateStr){
    var datePat = /^(\d{4})(\-)(\d{1,2})(\-)(\d{1,2})$/;
    var matchArray = dateStr.match(datePat);
    if (matchArray == null) return false;
    var month = matchArray[3];
    var day = matchArray[5];
    var year = matchArray[1];
    if (month < 1 || month > 12) return false;
    if (day < 1 || day > 31) return false;
    if ((month==4 || month==6 || month==9 || month==11) && day==31) return false;
    if (month == 2){
        var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
        if (day > 29 || (day==29 && !isleap)) return false;
    }
    return true;
}
function get_object(idname){
	if(document.getElementById){
		return document.getElementById(idname);
	}else if (document.all){
		return document.all[idname];
	}else if (document.layers){
		return document.layers[idname];
	}else{
		return null;
	}
}

function checkDateEarlier(strStart,strEnd,equal)
{
    if(isDate(strStart) == false || isDate(strEnd) == false)
        return false;
    if (( strStart == "" ) || ( strEnd == "" ))
        return true;
    var arr1 = strStart.split("-");
    var arr2 = strEnd.split("-");
    var date1 = new Date(arr1[0],parseInt(arr1[1].replace(/^0/,""),10) - 1,arr1[2]);
    var date2 = new Date(arr2[0],parseInt(arr2[1].replace(/^0/,""),10) - 1,arr2[2]);
    if(arr1[1].length == 1)
        arr1[1] = "0" + arr1[1];
    if(arr1[2].length == 1)
        arr1[2] = "0" + arr1[2];
    if(arr2[1].length == 1)
        arr2[1] = "0" + arr2[1];
    if(arr2[2].length == 1)
        arr2[2]="0" + arr2[2];
    var d1 = arr1[0] + arr1[1] + arr1[2];
    var d2 = arr2[0] + arr2[1] + arr2[2];
	if(equal){
		if(parseInt(d1,10) == parseInt(d2,10)){
			return false;
		}
	}

    if(parseInt(d1,10) > parseInt(d2,10))
       return false;
    else
       return true;
}

Date.prototype.format = function(format){
     var o =
     {
         "M+" : this.getMonth()+1, //month
         "d+" : this.getDate(),     //day
         "h+" : this.getHours(),    //hour
         "m+" : this.getMinutes(), //minute
         "s+" : this.getSeconds(), //second
         "q+" : Math.floor((this.getMonth()+3)/3),   //quarter
         "S" : this.getMilliseconds() //millisecond
     }
     if(/(y+)/.test(format))
     format=format.replace(RegExp.$1,(this.getFullYear()+"").substr(4 - RegExp.$1.length));
     for(var k in o)
     if(new RegExp("("+ k +")").test(format))
     format = format.replace(RegExp.$1,RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));
     return format;
}

/**
function:checktime 、FormatDate
add by Gavin
2009-12-29
**/
function checktime(datefield) {
	var tempdate, parameter, blnErr

	parameter = datefield.value
	
	if(parameter != "") 
	{
				
		parameter = parameter.split(':');
		if(parameter.length != 2 || parameter[0].length != 2 || parameter[1].length != 2)
		{
			alert("请输入时间格式类似'小时:分钟'");
			datefield.focus();
			datefield.select();
			return false;
		}
		
		if(parameter[0] < 0 || parameter[0] > 23 || parameter[1] < 0 || parameter[1] > 59)
		{
			alert("您输入的时间 "+datefield.value+" 有误,请重新输入");
			datefield.focus();
			datefield.select();
			return false;
		}
	}
	else
	{
		datefield.value = "00:00"
	}
	
	return true
}

function FormatDate(incomingdatetime, e) {
  var inttempposition
  var whichCode = (window.Event) ? e.which : e.keyCode;
  var strCheck = '48,49,50,51,52,53,54,55,56,57,96,97,98,99,100,101,102,103,104,105,32,186,111,191';

  inttempposition = -1
  inttempposition = strCheck.indexOf(whichCode)
  if(whichCode != 8) {
	if (inttempposition != -1 && incomingdatetime.value.length <= 5) {
	  if(incomingdatetime.value.length == 2) {
	    incomingdatetime.value = incomingdatetime.value + ":"
	  }
	}
	else {
	  incomingdatetime.value = incomingdatetime.value.substr(0,incomingdatetime.value.length-1)
	}
  }

}

function checkTimeEarlier(strStart,strEnd,equal)
{
    if (( strStart == "" ) || ( strEnd == "" ))
        return true;
    var arr1 = strStart.split(":");
    var arr2 = strEnd.split(":");

    if(arr1[0].length == 1)
        arr1[0] = "0" + arr1[0];
    if(arr1[1].length == 1)
        arr1[1] = "0" + arr1[1];
    if(arr2[0].length == 1)
        arr2[0] = "0" + arr2[0];
    if(arr2[1].length == 1)
        arr2[1]="0" + arr2[1];
    var t1 = arr1[0] + arr1[1];
    var t2 = arr2[0] + arr2[1];
	if(equal){
		if(parseInt(t1,10) == parseInt(t2,10)){
			return false;
		}
	}
//alert(parseInt(t1,10));
//alert(parseInt(t2,10));
    if(parseInt(t1,10) > parseInt(t2,10))
       return false;
    else
       return true;
}