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 maxYears=108
var myCal
myCal=new Calendar(dtToday)
var YearName=new Array()
for(var yearCount=0;yearCount<=maxYears;yearCount++){
YearName[yearCount]=myCal.Year--}
var WeekDayName=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]
var exDateTime
var cnTop="200"
var cnLeft="500"
var WindowTitle="Calendar"
var WeekChar=2
var CellWidth=20
var DateSeparator="/"
var TimeMode=24
var ShowLongMonth=true
var ShowLongYear=true
var ShowMonthYear=true
var MonthYearColor="black"
var WeekHeadColor="#99BFEA"
var SundayColor="#99BFEA"
var SaturdayColor="#99BFEA"
var WeekDayColor="#E5EFF9"
var FontColor="black"
var TodayColor="#0099CC"
var SelDateColor="#0099CC"
var YrSelColor="black"
var ThemeBg=""
function NewCal(pCtrl,pFormat,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")){
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=200,resizable=0,top="+cnTop+",left="+cnLeft)
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 bgcolor='"+ThemeBg+"' link="+FontColor+" vlink="+FontColor+"><form name='Calendar'>")
vCalHeader="<table border=1 cellpadding=0 cellspacing=0 width='100%' align=\"center\" valign=\"top\" bordercolor=\"#AFCDEC\">\n"
vCalHeader+="<tr>\n<td colspan='7'><table border=0 width='100%' cellpadding=0 cellspacing=0 bgcolor=\"#99BFEA\"><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'> "
vCalHeader+="<select name=\"YearSelector\" onChange=\"javascript:winMain.Cal.SwitchYear(this.selectedIndex);winMain.RenderCal();\">\n"
for(j=0;j<=maxYears;j++){
if(YearName[j]==Cal.Year)
SelectStr2="Selected"
else
SelectStr2=""
vCalHeader+="<option "+SelectStr2+" value >"+YearName[j]+"\n"}
vCalHeader+="</select></td></tr></table></td></tr>"
if(ShowMonthYear)
vCalHeader+="<tr><td colspan='7'><font face='Verdana' size='2' align='center' color='"+MonthYearColor+"'><b>"+Cal.GetMonthName(ShowLongMonth)+" "+Cal.GetYearName(ShowLongYear)+"</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="";}
Cal.ShowTime=false
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 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 SwitchYear(intYear)
{Cal.Year=YearName[intYear];}
Calendar.prototype.SwitchYear=SwitchYear
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 GetYearName(IsLong){
if(IsLong)
return this.Year}
Calendar.prototype.GetYearName=GetYearName
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()=="DDMMMYYYY")
return(pDate+DateSeparator+this.GetMonthName(false)+DateSeparator+this.GetYearName(false))
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

