var popCalDstFld;
var temp;
var popCalWin;
function popupCal()
{
var tmpDate        =new Date();
var tmpString      ="";
var tmpNum         =0;
var popCalDateVal;
var dstWindowName  ="";
popCalWin=new Object();
if (arguments.length < 2)
{
alert("popupCal(): Wrong number of arguments.");
return void(0);
}
dstWindowName=popupCal.arguments[0];
popCalDstFld=popupCal.arguments[1];
temp=popupCal.arguments[1];
popCalDstFmt=popupCal.arguments[2];
popCalMonths=popupCal.arguments[3];
popCalDays=popupCal.arguments[4]; 
popCalToday=popupCal.arguments[5]; 
popCalClose=popupCal.arguments[6]; 
popCalTitle=popupCal.arguments[7]; 
popCalFirstDayWeek=popupCal.arguments[8];  
if (popCalDstFld!="")
popCalDstFld=document.getElementById(popCalDstFld);
if (popCalDstFmt=="")
popCalDstFmt="m/d/yyyy";
if (popCalMonths=="")
popCalMonths="January,February,March,April,May,June,July,August,September,October,November,December";
if (popCalDays=="")
popCalDays="Sun,Mon,Tue,Wed,Thu,Fri,Sat";
if (popCalToday=="" || typeof popCalToday=="undefined")
popCalToday="Today";
if (popCalClose=="" || typeof popCalClose=="undefined")
popCalClose="Close";
if (popCalTitle=="" || typeof popCalTitle=="undefined")
popCalTitle="Calendar";
tmpString=new String(popCalDstFld.value);  
if(tmpString=="")
popCalDateVal=new Date()
else
{
tmpNum=tmpString.lastIndexOf( "/" );
if ( (tmpString.length - tmpNum)==3 )
{
tmpString=tmpString.substring(0,tmpNum+1)+"20"+tmpString.substr(tmpNum+1);
popCalDateVal=new Date(tmpString);
}
else
{
popCalDateVal=getDateFromFormat(tmpString,popCalDstFmt);
}
}
if( popCalDateVal.toString()=="NaN" || popCalDateVal.toString()=="0")
{
popCalDateVal=new Date();
popCalDstFld.value="";
}
var dateString=String(popCalDateVal.getMonth()+1)+"/"+String(popCalDateVal.getDate())+"/"+String(popCalDateVal.getFullYear());
reloadCalPopup(dateString, dstWindowName);
return void(0);
}
function closeCalPopup()
{
popCalWin.close();
return void(0);
}
function reloadCalPopup()
{
var windowFeatures="toolbar=no, location=no, status=no, menubar=no, scrollbars=no, resizable=no, height=270, width=270, top="+((screen.height - 270)/2).toString()+",left="+((screen.width - 270)/2).toString();
var tmpDate=new Date( reloadCalPopup.arguments[0] );
if (tmpDate.toString()=="Invalid Date")
tmpDate=new Date();
tmpDate.setDate(1);
var popCalData=calPopupSetData(tmpDate,reloadCalPopup.arguments[1]);
if( popCalWin.toString()=="[object Object]" )
{
popCalWin=window.open("",reloadCalPopup.arguments[1],windowFeatures);
popCalWin.opener=self;
popCalWin.focus();
}
else 
{
popCalWin.document.close();
popCalWin.document.clear();
}
popCalWin.document.write(popCalData);
return void(1);
}
function calPopupSetData(firstDay,dstWindowName)
{
var popCalData="";
var lastDate=0;
var fnt=new Array( "<FONT SIZE=\"1\">", "<B><FONT SIZE=\"2\">", "<FONT SIZE=\"2\" COLOR=\"#EF741D\"><B>");
var dtToday=new Date();
var thisMonth=firstDay.getMonth();
var thisYear=firstDay.getFullYear();
var nPrevMonth=(thisMonth==0 ) ? 11 : (thisMonth - 1);
var nNextMonth=(thisMonth==11 ) ? 0 : (thisMonth+1);
var nPrevMonthYear=(nPrevMonth==11) ? (thisYear - 1): thisYear;
var nNextMonthYear=(nNextMonth==0) ? (thisYear+1): thisYear;
var sToday=String((dtToday.getMonth()+1)+"/01/"+dtToday.getFullYear());
var sPrevMonth=String((nPrevMonth+1)+"/01/"+nPrevMonthYear);
var sNextMonth=String((nNextMonth+1)+"/01/"+nNextMonthYear);
var sPrevYear1=String((thisMonth+1)+"/01/"+(thisYear - 1));
var sNextYear1=String((thisMonth+1)+"/01/"+(thisYear+1));
var tmpDate=new Date( sNextMonth );
tmpDate=new Date( tmpDate.valueOf() - 1001 );
lastDate=tmpDate.getDate();
if (this.popCalMonths.split)
{
var monthNames=this.popCalMonths.split(",");
var dayNames=this.popCalDays.split(",");
}
else
{
var monthNames=new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var dayNames=new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat")
}
var styles="<style><!-- body{font-family:Arial,Helvetica,sans-serif;font-size:9pt}; td {  font-family: Arial, Helvetica, sans-serif; font-size: 9pt; color: #666666}; A { text-decoration: none; };TD.day { border-bottom: solid black; border-width: 0px; }--></style>"
var cellAttribs="align=\"center\" class=\"day\" BGCOLOR=\"#F1F1F1\"onMouseOver=\"temp=this.style.backgroundColor;this.style.backgroundColor='#CCCCCC';\" onMouseOut=\"this.style.backgroundColor=temp;\""
var cellAttribs2="align=\"center\" BGCOLOR=\"#F1F1F1\" onMouseOver=\"temp=this.style.backgroundColor;this.style.backgroundColor='#CCCCCC';\" onMouseOut=\"this.style.backgroundColor=temp;\""
var htmlHead="<HTML><HEAD><TITLE>"+popCalTitle+"</TITLE>"+styles+"</HEAD><BODY BGCOLOR=\"#F1F1F1\" TEXT=\"#000000\" LINK=\"#364180\" ALINK=\"#FF8100\" VLINK=\"#424282\">";
var htmlTail="</BODY></HTML>";
var closeAnchor="<CENTER><input type=button value=\""+popCalClose+"\" onClick=\"javascript:window.opener.closeCalPopup()\"></CENTER>";            
var todayAnchor="<A HREF=\"javascript:window.opener.reloadCalPopup('"+sToday+"','"+dstWindowName+"');\">"+popCalToday+"</A>";
var prevMonthAnchor="<A HREF=\"javascript:window.opener.reloadCalPopup('"+sPrevMonth+"','"+dstWindowName+"');\">"+monthNames[nPrevMonth]+"</A>";
var nextMonthAnchor="<A HREF=\"javascript:window.opener.reloadCalPopup('"+sNextMonth+"','"+dstWindowName+"');\">"+monthNames[nNextMonth]+"</A>";
var prevYear1Anchor="<A HREF=\"javascript:window.opener.reloadCalPopup('"+sPrevYear1+"','"+dstWindowName+"');\">"+(thisYear-1)+"</A>";
var nextYear1Anchor="<A HREF=\"javascript:window.opener.reloadCalPopup('"+sNextYear1+"','"+dstWindowName+"');\">"+(thisYear+1)+"</A>";
popCalData+=(htmlHead+fnt[1]);
popCalData+=("<DIV align=\"center\">");
popCalData+=("<TABLE BORDER=\"0\" cellspacing=\"0\" callpadding=\"0\" width=\"250\"><TR><TD width=\"45\">&nbsp</TD>");
popCalData+=("<TD width=\"45\" align=\"center\" "+cellAttribs2);
popCalData+=(" >");
popCalData+=(fnt[0]+prevYear1Anchor+"</FONT></TD>");
popCalData+=("<TD width=\"70\" align=\"center\" "+cellAttribs2);
popCalData+=(" >");
popCalData+=(fnt[0]+todayAnchor+"</FONT></TD>");
popCalData+=("<TD width=\"45\" align=\"center\" "+cellAttribs2);
popCalData+=(" >");
popCalData+=(fnt[0]+nextYear1Anchor+"</FONT></TD><TD width=\"45\">&nbsp</TD>");
popCalData+=("</TR></TABLE>");
popCalData+=("<TABLE BORDER=\"0\" cellspacing=\"0\" callpadding=\"0\" width=\"250\">");          
popCalData+=("<TR><TD width=\"55\" align=\"center\" "+cellAttribs2);
popCalData+=(" >");
popCalData+=(fnt[0]+prevMonthAnchor+"</FONT></TD>");
popCalData+=("<TD width=\"140\" align=\"center\">");
popCalData+=("&nbsp;&nbsp;"+fnt[1]+"<FONT COLOR=\"#000000\">"+monthNames[thisMonth]+", "+thisYear+"&nbsp;&nbsp;</FONT></TD>");
popCalData+=("<TD width=\"55\" align=\"center\" "+cellAttribs2);
popCalData+=(" >");
popCalData+=(fnt[0]+nextMonthAnchor+"</FONT></TD></TR></TABLE><BR>");       
popCalData+=("<TABLE BORDER=\"0\" cellspacing=\"2\" cellpadding=\"1\"  width=\"245\">" );
popCalData+=("");
popCalData+=("<TR>");
var xday=0;
for (xday=0; xday < 7; xday++)
{
popCalData+=("<TD width=\"35\" align=\"center\">"+fnt[1]+"<FONT COLOR=\"#000000\">"+dayNames[(xday+popCalFirstDayWeek)%7]+"</FONT></TD>");
};
popCalData+=("</TR>");
var calDay=0;
var monthDate=1;
var weekDay=firstDay.getDay();
do
{
popCalData+=("<TR>");
for (calDay=0; calDay < 7; calDay++ )
{
if(((weekDay+7-popCalFirstDayWeek)%7!=calDay) || (monthDate > lastDate))
{
popCalData+=("<TD width=\"35\">"+fnt[1]+"&nbsp;</FONT></TD>");
continue;
}
else
{
anchorVal="<A HREF=\"javascript:window.opener.calPopupSetDate(window.opener.popCalDstFld,'"+constructDate(monthDate,thisMonth+1,thisYear)+"');window.opener.closeCalPopup()\">";
jsVal="javascript:window.opener.calPopupSetDate(window.opener.popCalDstFld,'"+constructDate(monthDate,thisMonth+1,thisYear)+"');window.opener.closeCalPopup()";
popCalData+=("<TD width=\"35\" "+cellAttribs+" onClick=\""+jsVal+"\">");
if ((firstDay.getMonth()==dtToday.getMonth()) && (monthDate==dtToday.getDate()) && (thisYear==dtToday.getFullYear()) )
popCalData+=(anchorVal+fnt[2]+monthDate+"</A></FONT></TD>");
else
popCalData+=(anchorVal+fnt[1]+monthDate+"</A></FONT></TD>");

weekDay++;
monthDate++;
}
}
weekDay=popCalFirstDayWeek;
popCalData+=("</TR>");
} while( monthDate <= lastDate );
popCalData+=("</TABLE></DIV><BR>");
popCalData+=(closeAnchor+"</FONT>"+htmlTail);
return( popCalData );
}
function calPopupSetDate()
{
calPopupSetDate.arguments[0].value=calPopupSetDate.arguments[1];
}
function padZero(num)
{
return ((num <= 9) ? ("0"+num) : num);
}
function constructDate(d,m,y)
{
var fmtDate=this.popCalDstFmt
fmtDate=fmtDate.replace ('dd', padZero(d))
fmtDate=fmtDate.replace ('d', d)
fmtDate=fmtDate.replace ('MM', padZero(m))
fmtDate=fmtDate.replace ('M', m)
fmtDate=fmtDate.replace ('yyyy', y)
fmtDate=fmtDate.replace ('yy', padZero(y%100))
return fmtDate;
}
function _isInteger(val) {
var digits="1234567890";
for (var i=0; i < val.length; i++) {
if (digits.indexOf(val.charAt(i))==-1) { return false; }
}
return true;
}
function _getInt(str,i,minlength,maxlength) {
for (var x=maxlength; x>=minlength; x--) {
var token=str.substring(i,i+x);
if (token.length < minlength) { return null; }
if (_isInteger(token)) { return token; }
}
return null;
}
function getDateFromFormat(val,format) {
val=val+"";
format=format+"";
var i_val=0;
var i_format=0;
var c="";
var token="";
var x,y;
var now=new Date();
var year=now.getYear();
var month=now.getMonth()+1;
var date=1;	
while (i_format < format.length) {
c=format.charAt(i_format);
token="";
while ((format.charAt(i_format)==c) && (i_format < format.length)) {
token+=format.charAt(i_format++);
}
if (token=="yyyy" || token=="yy" || token=="y") {
if (token=="yyyy") { x=4;y=4; }
if (token=="yy")   { x=2;y=2; }
if (token=="y")    { x=2;y=4; }
year=_getInt(val,i_val,x,y);
if (year==null) { return 0; }
i_val+=year.length;
if (year.length==2) {
if (year > 70) { year=1900+(year-0); }
else { year=2000+(year-0); }
}
}
else if (token=="MM"||token=="M") {
month=_getInt(val,i_val,token.length,2);
if(month==null||(month<1)||(month>12)){return 0;}
i_val+=month.length;}
else if (token=="dd"||token=="d") {
date=_getInt(val,i_val,token.length,2);
if(date==null||(date<1)||(date>31)){return 0;}
i_val+=date.length;}
else {
if (val.substring(i_val,i_val+token.length)!=token) {return 0;}
else {i_val+=token.length;}
}
}
if (i_val!=val.length) { return 0; }
if (month==2) {
if ( ( (year%4==0)&&(year%100!=0) ) || (year%400==0) ) {
if (date > 29){ return 0; }
}
else { if (date > 28) { return 0; } }
}
if ((month==4)||(month==6)||(month==9)||(month==11)) {
if (date > 30) { return 0; }
}
var newdate=new Date(year,month-1,date);
return newdate;
}