﻿
var winCal;var dtToday=new Date();var Cal;var docCal;var MonthName=["1","2","3","4","5","6","7","8","9","10","11","12"];var WeekDayName=["日","一","二","三","四","五","六"];var exDateTime;var cnTop="200";var cnLeft="500";var WindowTitle="日曆";var WeekChar=1;var CellWidth=20;var DateSeparator="/";var TimeMode=24;var ShowLongMonth=true;var ShowMonthYear=false;var MonthYearColor="#cc0033";var WeekHeadColor="#0099CC";var SundayColor="#6699FF";var SaturdayColor="#CCCCFF";var WeekDayColor="white";var FontColor="blue";var TodayColor="#FFFF33";var SelDateColor="#FFFF99";var YrSelColor="#cc0033";var ThemeBg="";var nowdate;var futuredate;var time=new Date();var year=time.getYear();if(year<1900){year=year+ 1900;}
function NewCal(pCtrl,pFormat,pBeforeYear,pAfterYear,pShowTime,pTimeMode)
{Cal=new Calendar(dtToday);if((pShowTime!=null)&&(pShowTime))
{Cal.ShowTime=true;if((pTimeMode!=null)&&((pTimeMode=='12')||(pTimeMode=='24')))
{TimeMode=pTimeMode;}}
if(pCtrl!=null)
Cal.Ctrl=pCtrl;if(pFormat!=null)
Cal.Format=pFormat.toUpperCase();exDateTime=document.getElementById(pCtrl).value;if(exDateTime!="")
{var Sp1;var Sp2;var tSp1;var tSp1;var strMonth;var strDate;var strYear;var intMonth;var YearPattern;var strHour;var strMinute;var strSecond;Sp1=exDateTime.indexOf(DateSeparator,0)
Sp2=exDateTime.indexOf(DateSeparator,(parseInt(Sp1)+1));if((Cal.Format.toUpperCase()=="DDMMYYYY")||(Cal.Format.toUpperCase()=="DDMMMYYYY")||(Cal.Format.toUpperCase()=="YYYYMMDD"))
{strMonth=exDateTime.substring(Sp1+1,Sp2);strDate=exDateTime.substring(0,Sp1);}
else if((Cal.Format.toUpperCase()=="MMDDYYYY")||(Cal.Format.toUpperCase()=="MMMDDYYYY"))
{strMonth=exDateTime.substring(0,Sp1);strDate=exDateTime.substring(Sp1+1,Sp2);}
if(isNaN(strMonth))
intMonth=Cal.GetMonthIndex(strMonth);else
intMonth=parseInt(strMonth,10)-1;if((parseInt(intMonth,10)>=0)&&(parseInt(intMonth,10)<12))
Cal.Month=intMonth;if((parseInt(strDate,10)<=Cal.GetMonDays())&&(parseInt(strDate,10)>=1))
Cal.Date=strDate;strYear=exDateTime.substring(Sp2+1,Sp2+5);YearPattern=/^\d{4}$/;if(YearPattern.test(strYear))
Cal.Year=parseInt(strYear,10);if(Cal.ShowTime==true)
{tSp1=exDateTime.indexOf(":",0)
tSp2=exDateTime.indexOf(":",(parseInt(tSp1)+1));strHour=exDateTime.substring(tSp1,(tSp1)-2);Cal.SetHour(strHour);strMinute=exDateTime.substring(tSp1+1,tSp2);Cal.SetMinute(strMinute);strSecond=exDateTime.substring(tSp2+1,tSp2+3);Cal.SetSecond(strSecond);}}
winCal=window.open("","DateTimePicker","toolbar=0,status=0,menubar=0,fullscreen=no,width=195,height=220,resizable=0,top="+cnTop+",left="+cnLeft);if(parseInt(navigator.appVersion)>=4){winCal.window.focus();}
docCal=winCal.document;nowdate=year- pBeforeYear;futuredate=year- pAfterYear;RenderCal();}
function RenderCal()
{var vCalHeader;var vCalData;var vCalTime;var i;var j;var SelectStr;var vDayCount=0;var vFirstDay;docCal.open();docCal.writeln("<html><head><title>"+WindowTitle+"</title><link href='../text.css' rel='stylesheet' type='text/css'>");docCal.writeln("<script>var winMain=window.opener;</script>");docCal.writeln("</head><body background='"+ThemeBg+"' link="+FontColor+" vlink="+FontColor+"><form name='Calendar'>");vCalHeader="<table border=1 cellpadding=1 cellspacing=1 width='100%' align=\"center\" valign=\"top\">\n";vCalHeader+="<tr>\n<td colspan='7'><table border=0 width='100%' cellpadding=0 cellspacing=0><tr><td align='left'>\n";vCalHeader+="\n<select name=\"YearSelector\" onChange=\"javascript:winMain.Cal.SwitchYear(this.value);winMain.RenderCal();\">\n";for(i=nowdate;i<=futuredate;i++)
{if(i==Cal.Year)
SelectStr="Selected";else
SelectStr="";vCalHeader+="<option "+SelectStr+" value="+i+">"+i+"\n";}
vCalHeader+="</select>年</td>";vCalHeader+="\n<td align='right'><select name=\"MonthSelector\" onChange=\"javascript:winMain.Cal.SwitchMth(this.selectedIndex);winMain.RenderCal();\">\n";for(i=0;i<12;i++)
{if(i==Cal.Month)
SelectStr="Selected";else
SelectStr="";vCalHeader+="<option "+SelectStr+" value >"+MonthName[i]+"\n";}
vCalHeader+="</select>月</td>";vCalHeader+="</tr></table></td></tr>\n";if(ShowMonthYear)
vCalHeader+="<tr><td colspan='7'><font face='Verdana' size='2' align='center' color='"+MonthYearColor+"'><b>"+Cal.Year+"年"+Cal.GetMonthName(ShowLongMonth)+"月</b></font></td></tr>\n";vCalHeader+="<tr bgcolor="+WeekHeadColor+">";for(i=0;i<7;i++)
{vCalHeader+="<td align='center'><font face='Verdana' size='2'>"+WeekDayName[i].substr(0,WeekChar)+"</font></td>";}
vCalHeader+="</tr>";docCal.write(vCalHeader);CalDate=new Date(Cal.Year,Cal.Month);CalDate.setDate(1);vFirstDay=CalDate.getDay();vCalData="<tr>";for(i=0;i<vFirstDay;i++)
{vCalData=vCalData+GenCell();vDayCount=vDayCount+1;}
for(j=1;j<=Cal.GetMonDays();j++)
{var strCell;vDayCount=vDayCount+1;if((j==dtToday.getDate())&&(Cal.Month==dtToday.getMonth())&&(Cal.Year==dtToday.getFullYear()))
strCell=GenCell(j,true,TodayColor);else
{if(j==Cal.Date)
{strCell=GenCell(j,true,SelDateColor);}
else
{if(vDayCount%7==0)
strCell=GenCell(j,false,SaturdayColor);else if((vDayCount+6)%7==0)
strCell=GenCell(j,false,SundayColor);else
strCell=GenCell(j,null,WeekDayColor);}}
vCalData=vCalData+strCell;if((vDayCount%7==0)&&(j<Cal.GetMonDays()))
{vCalData=vCalData+"</tr>\n<tr>";}}
docCal.writeln(vCalData);if(Cal.ShowTime)
{var showHour;showHour=Cal.getShowHour();vCalTime="<tr>\n<td colspan='7' align='center'>";vCalTime+="<input type='text' name='hour' maxlength=2 size=1 style=\"WIDTH: 22px\" value="+showHour+" onchange=\"javascript:winMain.Cal.SetHour(this.value)\">";vCalTime+=" : ";vCalTime+="<input type='text' name='minute' maxlength=2 size=1 style=\"WIDTH: 22px\" value="+Cal.Minutes+" onchange=\"javascript:winMain.Cal.SetMinute(this.value)\">";vCalTime+=" : ";vCalTime+="<input type='text' name='second' maxlength=2 size=1 style=\"WIDTH: 22px\" value="+Cal.Seconds+" onchange=\"javascript:winMain.Cal.SetSecond(this.value)\">";if(TimeMode==12)
{var SelectAm=(parseInt(Cal.Hours,10)<12)?"Selected":"";var SelectPm=(parseInt(Cal.Hours,10)>=12)?"Selected":"";vCalTime+="<select name=\"ampm\" onchange=\"javascript:winMain.Cal.SetAmPm(this.options[this.selectedIndex].value);\">";vCalTime+="<option "+SelectAm+" value=\"AM\">AM</option>";vCalTime+="<option "+SelectPm+" value=\"PM\">PM<option>";vCalTime+="</select>";}
vCalTime+="\n</td>\n</tr>";docCal.write(vCalTime);}
docCal.writeln("\n</table>");docCal.writeln("</form></body></html>");docCal.close();}
function GenCell(pValue,pHighLight,pColor)
{var PValue;var PCellStr;var vColor;var vHLstr1;var vHlstr2;var vTimeStr;if(pValue==null)
PValue="";else
PValue=pValue;if(pColor!=null)
vColor="bgcolor=\""+pColor+"\"";else
vColor="";if((pHighLight!=null)&&(pHighLight))
{vHLstr1="color='red'><b>";vHLstr2="</b>";}
else
{vHLstr1=">";vHLstr2="";}
if(Cal.ShowTime)
{vTimeStr="winMain.document.getElementById('"+Cal.Ctrl+"').value+=' '+"+"winMain.Cal.getShowHour()"+"+':'+"+"winMain.Cal.Minutes"+"+':'+"+"winMain.Cal.Seconds";if(TimeMode==12)
vTimeStr+="+' '+winMain.Cal.AMorPM";}
else
vTimeStr="";PCellStr="<td "+vColor+" width="+CellWidth+" align='center'><font face='verdana' size='2'"+vHLstr1+"<a href=\"javascript:winMain.document.getElementById('"+Cal.Ctrl+"').value='"+Cal.FormatDate(PValue)+"';"+vTimeStr+";window.close();\">"+PValue+"</a>"+vHLstr2+"</font></td>";return PCellStr;}
function Calendar(pDate,pCtrl)
{this.Date=pDate.getDate();this.Month=pDate.getMonth();this.Year=pDate.getFullYear();this.Hours=pDate.getHours();if(pDate.getMinutes()<10)
this.Minutes="0"+pDate.getMinutes();else
this.Minutes=pDate.getMinutes();if(pDate.getSeconds()<10)
this.Seconds="0"+pDate.getSeconds();else
this.Seconds=pDate.getSeconds();this.MyWindow=winCal;this.Ctrl=pCtrl;this.Format="ddMMyyyy";this.Separator=DateSeparator;this.ShowTime=false;if(pDate.getHours()<12)
this.AMorPM="AM";else
this.AMorPM="PM";}
function GetMonthIndex(shortMonthName)
{for(i=0;i<12;i++)
{if(MonthName[i].substring(0,3).toUpperCase()==shortMonthName.toUpperCase())
{return i;}}}
Calendar.prototype.GetMonthIndex=GetMonthIndex;function SwitchYear(intYear)
{Cal.Year=intYear;}
Calendar.prototype.SwitchYear=SwitchYear;function SwitchMth(intMth)
{Cal.Month=intMth;}
Calendar.prototype.SwitchMth=SwitchMth;function SetHour(intHour)
{var MaxHour;var MinHour;if(TimeMode==24)
{MaxHour=23;MinHour=0}
else if(TimeMode==12)
{MaxHour=12;MinHour=1}
else
alert("TimeMode can only be 12 or 24");var HourExp=new RegExp("^\\d\\d$");if(HourExp.test(intHour)&&(parseInt(intHour,10)<=MaxHour)&&(parseInt(intHour,10)>=MinHour))
{if((TimeMode==12)&&(Cal.AMorPM=="PM"))
{if(parseInt(intHour,10)==12)
Cal.Hours=12;else
Cal.Hours=parseInt(intHour,10)+12;}
else if((TimeMode==12)&&(Cal.AMorPM=="AM"))
{if(intHour==12)
intHour-=12;Cal.Hours=parseInt(intHour,10);}
else if(TimeMode==24)
Cal.Hours=parseInt(intHour,10);}}
Calendar.prototype.SetHour=SetHour;function SetMinute(intMin)
{var MinExp=new RegExp("^\\d\\d$");if(MinExp.test(intMin)&&(intMin<60))
Cal.Minutes=intMin;}
Calendar.prototype.SetMinute=SetMinute;function SetSecond(intSec)
{var SecExp=new RegExp("^\\d\\d$");if(SecExp.test(intSec)&&(intSec<60))
Cal.Seconds=intSec;}
Calendar.prototype.SetSecond=SetSecond;function SetAmPm(pvalue)
{this.AMorPM=pvalue;if(pvalue=="PM")
{this.Hours=(parseInt(this.Hours,10))+12;if(this.Hours==24)
this.Hours=12;}
else if(pvalue=="AM")
this.Hours-=12;}
Calendar.prototype.SetAmPm=SetAmPm;function getShowHour()
{var finalHour;if(TimeMode==12)
{if(parseInt(this.Hours,10)==0)
{this.AMorPM="AM";finalHour=parseInt(this.Hours,10)+12;}
else if(parseInt(this.Hours,10)==12)
{this.AMorPM="PM";finalHour=12;}
else if(this.Hours>12)
{this.AMorPM="PM";if((this.Hours-12)<10)
finalHour="0"+((parseInt(this.Hours,10))-12);else
finalHour=parseInt(this.Hours,10)-12;}
else
{this.AMorPM="AM";if(this.Hours<10)
finalHour="0"+parseInt(this.Hours,10);else
finalHour=this.Hours;}}
else if(TimeMode==24)
{if(this.Hours<10)
finalHour="0"+parseInt(this.Hours,10);else
finalHour=this.Hours;}
return finalHour;}
Calendar.prototype.getShowHour=getShowHour;function GetMonthName(IsLong)
{var Month=MonthName[this.Month];if(IsLong)
return Month;else
return Month.substr(0,3);}
Calendar.prototype.GetMonthName=GetMonthName;function GetMonDays()
{var DaysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31];if(this.IsLeapYear())
{DaysInMonth[1]=29;}
return DaysInMonth[this.Month];}
Calendar.prototype.GetMonDays=GetMonDays;function IsLeapYear()
{if((this.Year%4)==0)
{if((this.Year%100==0)&&(this.Year%400)!=0)
{return false;}
else
{return true;}}
else
{return false;}}
Calendar.prototype.IsLeapYear=IsLeapYear;function FormatDate(pDate)
{if(this.Format.toUpperCase()=="DDMMYYYY")
return(pDate+DateSeparator+(this.Month+1)+DateSeparator+this.Year);else if(this.Format.toUpperCase()=="YYYYMMDD"){themonth=this.Month+1;themonth=""+themonth;if(themonth.length==1){themonth=""+"0"+ themonth;}
theday=""+pDate;if(theday.length==1){theday=""+"0"+ theday;}
return(this.Year+DateSeparator+themonth+DateSeparator+theday);}
else if(this.Format.toUpperCase()=="DDMMMYYYY")
return(pDate+DateSeparator+this.GetMonthName(false)+DateSeparator+this.Year);else if(this.Format.toUpperCase()=="MMDDYYYY")
return((this.Month+1)+DateSeparator+pDate+DateSeparator+this.Year);else if(this.Format.toUpperCase()=="MMMDDYYYY")
return(this.GetMonthName(false)+DateSeparator+pDate+DateSeparator+this.Year);}
Calendar.prototype.FormatDate=FormatDate;
