/*********************************************************
*    使用方法
*        控件调用onclick="fPopCalendar(event,this,this)"
*    如下，给控件设置为readonly
*    <input type="text" style="border:1px solid #cccccc;"
*        size="15" onclick="fPopCalendar(event,this,this)"
*        onfocus="this.select()" readonly="readonly" />
*   
*    如果页面乱码，把下面包含汉字的定义项放到页面中即可
********************************************************/
var gMonths=new Array("JAN","FEB","MAR","APR","MAY","JUN","JUY","AUG","SEP","OCT","NOV","DEC");
var WeekDay = new Array("SUN","MON","TUE","WED","THU","FRI","SAT");  // "SUN","MON","TUE","WED","THU","FRI","SAT"
var strToday="Today";
//var strYear= "年" ;
//var strMonth= "月" ;
//var strDay= "日" ;
var splitChar="-";
var startYear=2000;
var endYear=2050;
var dayTdHeight=15;
var dayTdTextSize=12;
var gcNotCurMonth="#808080";
var gcRestDay="#FF0000";
var gcWorkDay="#444444";
var gcMouseOver="#ffff00";
var gcMouseOut="#cccccc";
var gcToday="#444444";
var gcTodayMouseOver="#ffff00";
var gcTodayMouseOut="#79D0FF";
var gdCtrl=new Object();
var goSelectTag=new Array();
var gdCurDate=new Date();
var giYear=gdCurDate.getFullYear();
var giMonth=gdCurDate.getMonth()+1;
var giDay=gdCurDate.getDate();

function $(){
	var elements=new Array();
	for(var i=0;i<arguments.length;i++) {
		var element=arguments[i];
		if(typeof(arguments[i])=='string'){
			element=document.getElementById(arguments[i]);
		}
		if(arguments.length==1){
			return element;
		}
		elements.Push(element);
	}
	return elements;
}

Array.prototype.Push=function(){
	var startLength=this.length;
	for(var i=0;i<arguments.length;i++){
		this[startLength+i]=arguments[i];
	}
	return this.length;
}

String.prototype.HexToDec=function(){
	return parseInt(this,16);
}

String.prototype.cleanBlank=function(){
	return this.isEmpty()?"":this.replace(/\s/g,"");
}

function checkColor(){
	var color_tmp=(arguments[0]+"").replace(/\s/g,"").toUpperCase();
	var model_tmp1=arguments[1].toUpperCase();
	var model_tmp2="rgb("+arguments[1].substring(1,3).HexToDec()+","+arguments[1].substring(1,3).HexToDec()+","+arguments[1].substring(5).HexToDec()+")";
	model_tmp2=model_tmp2.toUpperCase();
	if(color_tmp==model_tmp1 ||color_tmp==model_tmp2){
		return true;
	}
	return false;
}

function $V(){
	return $(arguments[0]).value;
}

function fPopCalendar(evt,popCtrl,dateCtrl){
	evt.cancelBubble=true;
	gdCtrl=dateCtrl;
	fSetYearMon(giYear,giMonth);
	var point=fGetXY(popCtrl);
	with($("calendardiv").style){
		left=point.x+"px";
		top=(point.y+popCtrl.offsetHeight+1)+"px";
		visibility='visible';
		zindex='99';
		position='absolute';
	}
	$("calendardiv").focus();
}

function fSetDate(iYear,iMonth,iDay){
	var iMonthNew=new String(iMonth);
	var iDayNew=new String(iDay);
	if(iMonthNew.length<2){
		iMonthNew="0"+iMonthNew;
	}
	if(iDayNew.length<2){
		iDayNew="0"+iDayNew;
	}
	gdCtrl.value=iYear+splitChar+iMonthNew+splitChar+iDayNew;
	fHideCalendar();
}

function fHideCalendar(){
	$("calendardiv").style.visibility="hidden";
	for(var i=0;i<goSelectTag.length;i++){
		goSelectTag[i].style.visibility="visible";
	}
	goSelectTag.length=0;
}

function fSetSelected(){
	var iOffset=0;
	var iYear=parseInt($("tbSelYear").value);
	var iMonth=parseInt($("tbSelMonth").value);
	var aCell=$("cellText"+arguments[0]);
	aCell.bgColor=gcMouseOut;
	with(aCell){
		var iDay=parseInt(innerHTML);
		if(checkColor(style.color,gcNotCurMonth)){
			iOffset=(innerHTML>10)?-1:1;
		}
		iMonth+=iOffset;
		if(iMonth<1){
			iYear--;
			iMonth=12;
		}
		else if(iMonth>12){
			iYear++;iMonth=1;
		}
	}
	fSetDate(iYear,iMonth,iDay);
}

function Point(iX,iY){
	this.x=iX;
	this.y=iY;
}

function fBuildCal(iYear,iMonth){
	var aMonth=new Array();
	for(var i=1;i<7;i++){
		aMonth[i]=new Array(i);
	}
	var dCalDate=new Date(iYear,iMonth-1,1);
	var iDayOfFirst=dCalDate.getDay();
	var iDaysInMonth=new Date(iYear,iMonth,0).getDate();
	var iOffsetLast=new Date(iYear,iMonth-1,0).getDate()-iDayOfFirst+1;
	var iDate=1;
	var iNext=1;
	for(var d=0;d<7;d++){
		aMonth[1][d]=(d<iDayOfFirst)?(iOffsetLast+d)*(-1):iDate++;
	}
	for(var w=2;w<7;w++){
		for(var d=0;d<7;d++){
			aMonth[w][d]=(iDate<=iDaysInMonth)?iDate++:(iNext++)*(-1);
		}
	}
	return aMonth;
}

function fDrawCal(iYear,iMonth,iCellHeight,iDateTextSize){
	var colorTD=" bgcolor='"+gcMouseOut+"' bordercolor='"+gcMouseOut+"'";
	var styleTD=" valign='middle' align='center'  style='line-height:"+iCellHeight+"px;font-weight:bolder;font-size:"+iDateTextSize+"px;";
	var dateCal="";
	dateCal+="<tr>";
	for(var i=0;i<7;i++){
		dateCal+="<td "+colorTD+styleTD+"color:#990099;'>"+WeekDay[i]+"</td>";
	}
	dateCal+="</tr>";
	for(var w=1;w<7;w++){
		dateCal+="<tr>";
		for(var d=0;d<7;d++){
			var tmpid=w+""+d;
			dateCal+="<td"+styleTD+"cursor:pointer;' onclick='fSetSelected("+tmpid+")'>";
			dateCal+="<span id='cellText"+tmpid+"'></span>";
			dateCal+="</td>";
		}
		dateCal+="</tr>";
	}
	return dateCal;
}

function fUpdateCal(iYear,iMonth){
	var myMonth=fBuildCal(iYear,iMonth);
	var i=0;
	for(var w=1;w<7;w++){
		for(var d=0;d<7;d++){
			with($("cellText"+w+""+d)){
				parentNode.bgColor=gcMouseOut;
				parentNode.borderColor=gcMouseOut;
				parentNode.onmouseover=function(){
					this.bgColor=gcMouseOver;
				};
				parentNode.onmouseout=function(){
					this.bgColor=gcMouseOut;
				};
				if(myMonth[w][d]<0){
					style.color=gcNotCurMonth;
					innerHTML=Math.abs(myMonth[w][d]);
				}
				else{
					style.color=((d==0)||(d==6))?gcRestDay:gcWorkDay;
					innerHTML=myMonth[w][d];
					if(iYear==giYear && iMonth==giMonth && myMonth[w][d]==giDay){
						style.color=gcToday;
						parentNode.bgColor=gcTodayMouseOut;
						parentNode.onmouseover=function(){
							this.bgColor=gcTodayMouseOver;
						};
						parentNode.onmouseout=function(){
							this.bgColor=gcTodayMouseOut;
						};
					}
				}
			}
		}
	}
}

function fSetYearMon(iYear,iMon){
	$("tbSelMonth").options[iMon-1].selected=true;
	for(var i=0;i<$("tbSelYear").length;i++){
		if($("tbSelYear").options[i].value==iYear){
			$("tbSelYear").options[i].selected=true;
		}
	}
	fUpdateCal(iYear,iMon);
}

function fPrevMonth(){
	var iMon=$("tbSelMonth").value;
	var iYear=$("tbSelYear").value;
	if(--iMon<1){
		iMon=12;
		iYear--;
	}
	fSetYearMon(iYear,iMon);
}

function fNextMonth(){
	var iMon=$("tbSelMonth").value;
	var iYear=$("tbSelYear").value;
	if(++iMon>12){
		iMon=1;
		iYear++;
	}
	fSetYearMon(iYear,iMon);
}

function fGetXY(aTag){
	var oTmp=aTag;
	var pt=new Point(0,0);
	do{
		pt.x+=oTmp.offsetLeft;
		pt.y+=oTmp.offsetTop;
		oTmp=oTmp.offsetParent;
	}
	while(oTmp.tagName.toUpperCase()!="BODY");
	return pt;
}

function getDateDiv(){
	var noSelectForIE="";
	var noSelectForFireFox="";
	if(document.all){
		noSelectForIE="onselectstart='return false;'";
	}
	else{
		noSelectForFireFox="-moz-user-select:none;";
	}
	var dateDiv="";
	dateDiv+="<div id='calendardiv' onclick='event.cancelBubble=true' "+noSelectForIE+" style='"+noSelectForFireFox+"position:absolute;z-index:99;visibility:hidden;border:1px solid #999999;'>";
	dateDiv+="<table border='0' bgcolor='#6699cc' cellpadding='1' cellspacing='1' >";
	dateDiv+="<tr>";
	dateDiv+="<td><input type='button' id='PrevMonth' value='<' style='height:20px;width:20px;font-weight:bolder;padding-left:1pt !important;padding-left:0pt;text-align:center !important;text-align:center;' onclick='fPrevMonth()'>";
	dateDiv+="</td><td><select id='tbSelYear' style='border:1px solid;' onchange='fUpdateCal($V(\"tbSelYear\"),$V(\"tbSelMonth\"))'>";
	//for(var i=startYear;i<endYear;i++){
	//	dateDiv+="<option value='"+i+"'>"+i+strYear+"</option>";
	//}
	for(var i=giYear-1;i<=giYear+1;i++) {
		dateDiv+="<OPTION value='"+i+"'>"+i+"</OPTION>";
	}
	dateDiv+="</select></td><td>";
	dateDiv+="<select id='tbSelMonth' style='border:1px solid;' onchange='fUpdateCal($V(\"tbSelYear\"),$V(\"tbSelMonth\"))'>";
	for(var i=0;i<12;i++){
		dateDiv+="<option value='"+(i+1)+"'>"+gMonths[i]+"</option>";
	}
	dateDiv+="</select></td><td>";
	dateDiv+="<input type='button' id='NextMonth' value='>' style='height:20px;width:20px;font-weight:bolder;padding-left:1pt !important;padding-left:0pt;text-align:center !important;text-align:center;' onclick='fNextMonth()'>";
	dateDiv+="</td>";
	dateDiv+="</tr><tr>";
	dateDiv+="<td align='center' colspan='4'>";
	dateDiv+="<div style='background-color:teal'><table width='100%' border='0' cellpadding='2' cellspacing='2'>";
	dateDiv+=fDrawCal(giYear,giMonth,dayTdHeight,dayTdTextSize);
	dateDiv+="</table></div>";
	dateDiv+="</td>";
	dateDiv+="</tr><tr><td align='center' colspan='4' nowrap>";
	dateDiv+="<span style='cursor:pointer;font-weight:bolder;' onclick='fSetDate(giYear,giMonth,giDay)' onmouseover='this.style.color=\""+gcMouseOver+"\"' onmouseout='this.style.color=\"#000000\"'>"+strToday+":"+giYear+"-"+giMonth+"-"+giDay+"</span>";
	dateDiv+="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type='button' name='Clear' value='C' style='height:20;width:20;padding-left:1pt !important;padding-left:0pt;text-align:center !important;text-align:center;' onclick='clearDate()'>";
	dateDiv+="</tr></tr>";
	dateDiv+="</table></div>";
	return dateDiv;
}

function clearDate(){
  gdCtrl.value = "";
  fHideCalendar();
}

with(document){
	onclick=fHideCalendar;
	write(getDateDiv());
}
