
var winCal;var dtToday=new Date();var Cal;var docCal;var MonthName=["January","February","March","April","May","June","July","August","September","October","November","December"];var WeekDayName=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var exDateTime;var cnTop="200";var cnLeft="500";var WindowTitle="Date Selector";var WeekChar=2;var CellWidth=20;var DateSeparator="/";var TimeSeparator=":";var TimeMode=24;var ShowSeconds=true;var ShowLongMonth=true;var ShowMonthYear=true;var MonthYearColor="#000000";var WeekHeadColor="#639ace";var SundayColor="#e5e5e5";var SaturdayColor="#e5e5e5";var WeekDayColor="white";var FontColor="blue";var TodayColor="#639ace";var SelDateColor="#FFFF99";var YrSelColor="red";var ThemeBg=ctx+"/Images/calBckgrnd.jpg";function NewCal(pCtrl,pFormat,pShowTime,pTimeMode,pShowSeconds)
{Cal=new Calendar(dtToday);if((pShowTime!=null)&&(pShowTime))
{Cal.ShowTime=true;if((pTimeMode!=null)&&((pTimeMode=='12')||(pTimeMode=='24')))
{TimeMode=pTimeMode;}}
if((pShowSeconds!=null)&&typeof(pShowSeconds)=="boolean")
{ShowSeconds=pShowSeconds;}
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"))
{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(TimeSeparator,0)
if(tSp1>=2)
{strHour=exDateTime.substring((tSp1)-2,tSp1);Cal.SetHour(strHour);strMinute=exDateTime.substring(tSp1+1,tSp1+3);Cal.SetMinute(strMinute);tSp2=exDateTime.indexOf(TimeSeparator,(parseInt(tSp1)+1));if(tSp2==(tSp1+3))
{strSecond=exDateTime.substring(tSp2+1,tSp2+3);Cal.SetSecond(strSecond);}}}}
winCal=window.open("","DatePicker","toolbar=0,status=0,menubar=0,fullscreen=no,width=195,height=240,resizable=0,top="+cnTop+",left="+cnLeft);winCal.focus();docCal=winCal.document;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>");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+="<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+="\n<td align='right'><a href=\"javascript:winMain.Cal.DecYear();winMain.RenderCal()\"><b><font color=\""+YrSelColor+"\"><</font></b></a><font face=\"Verdana\" color=\""+YrSelColor+"\" size=2><b> "+Cal.Year+" </b></font><a href=\"javascript:winMain.Cal.IncYear();winMain.RenderCal()\"><b><font color=\""+YrSelColor+"\">></font></b></a></td></tr></table></td>\n";vCalHeader+="</tr>";if(ShowMonthYear)
vCalHeader+="<tr><td colspan='7'><font face='Verdana' size='2' align='center' color='"+MonthYearColor+"'><b>"+Cal.GetMonthName(ShowLongMonth)+" "+Cal.Year+"</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+=" "+TimeSeparator+" ";vCalTime+="<input type='text' name='minute' maxlength=2 size=1 style=\"WIDTH: 22px\" value="+Cal.Minutes+" onchange=\"javascript:winMain.Cal.SetMinute(this.value)\">";if(ShowSeconds)
{vCalTime+=" "+TimeSeparator+" ";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()"+"+'"+TimeSeparator+"'+"+"winMain.Cal.Minutes";if(ShowSeconds)
{vTimeStr+="+'"+TimeSeparator+"'+"+"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 IncYear()
{Cal.Year++;}
Calendar.prototype.IncYear=IncYear;function DecYear()
{Cal.Year--;}
Calendar.prototype.DecYear=DecYear;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(pDay)
{var monthStr=""+(this.Month+1);if(monthStr.length==1)
{monthStr="0"+monthStr;}
var dayStr=""+pDay;if(dayStr.length==1)
{dayStr="0"+dayStr;}
if(this.Format.toUpperCase()=="DDMMYYYY")
return(dayStr+DateSeparator+monthStr+DateSeparator+this.Year);else if(this.Format.toUpperCase()=="DDMMMYYYY")
return(dayStr+DateSeparator+this.GetMonthName(false)+DateSeparator+this.Year);else if(this.Format.toUpperCase()=="MMDDYYYY")
return(monthStr+DateSeparator+dayStr+DateSeparator+this.Year);else if(this.Format.toUpperCase()=="MMMDDYYYY")
return(this.GetMonthName(false)+DateSeparator+dayStr+DateSeparator+this.Year);}
Calendar.prototype.FormatDate=FormatDate;