var DefaultDateFormat="YYYY-MM-DD",HideWait=3,Y2kPivotPoint=76,UnselectedMonthText="",FontSize=11,FontFamily="Tahoma",CellWidth=18,CellHeight=16,ImageURL="../inc/img/calendar.jpg",NextURL="../inc/img/next.gif",PrevURL="../inc/img/prev.gif",CalBGColor="white",TopRowBGColor="buttonface",DayBGColor="lightgrey",ZCounter=100,Today=new Date,WeekDays=new Array("S","M","T","W","T","F","S"),MonthDays=new Array(31,28,31,30,31,30,31,31,30,31,30,31),MonthNames=new Array("January","February","March","April","May",
"June","July","August","September","October","November","December");with(document){writeln("<style>");writeln("td.calendarDateInput {letter-spacing:normal;line-height:normal;font-family:"+FontFamily+",Sans-Serif;font-size:"+FontSize+"px;}");writeln("select.calendarDateInput {letter-spacing:.06em;font-family:Verdana,Sans-Serif;font-size:11px;}");writeln("input.calendarDateInput {letter-spacing:.06em;font-family:Verdana,Sans-Serif;font-size:11px;}");writeln("</style>")}
function YearDigitsOnly(a){a=a.keyCode?a.keyCode:a.which;return a==8||a==9||a==37||a==39||a==46||a>47&&a<58}function GetTagPixels(a,b){for(var c=b=="LEFT"?a.offsetLeft:a.offsetTop;a.tagName!="BODY"&&a.tagName!="HTML";){a=a.offsetParent;c+=b=="LEFT"?a.offsetLeft:a.offsetTop}return c}function BehindCal(a,b,c,e,g,f){var d=GetTagPixels(a,"LEFT"),h=d+a.offsetWidth;a=f+a.offsetHeight;return f<g&&a>e&&d<c&&h>b}
function FixSelectLists(a){if(navigator.appName=="Microsoft Internet Explorer"){var b=this.getCalendar(),c=b.offsetLeft,e=c+b.offsetWidth;b=b.offsetTop;var g=b+CellHeight*9,f=false,d=this.formNumber;a:for(;d<document.forms.length;d++)for(var h=0;h<document.forms[d].elements.length;h++)if(typeof document.forms[d].elements[h].type=="string"){if(document.forms[d].elements[h].type=="hidden"&&document.forms[d].elements[h].name==this.hiddenFieldName){f=true;h+=3}if(f)if(document.forms[d].elements[h].type.substr(0,
6)=="select"){ListTopY=GetTagPixels(document.forms[d].elements[h],"TOP");if(ListTopY<g){if(BehindCal(document.forms[d].elements[h],c,e,b,g,ListTopY))document.forms[d].elements[h].style.visibility=a?"hidden":"visible"}else break a}}}}
function DayCellHover(a,b,c,e){a.style.backgroundColor=b?DayBGColor:c;if(b)if(this.yearValue==Today.getFullYear()&&this.monthIndex==Today.getMonth()&&e==Today.getDate())self.status="Click to select today";else{a=e.toString();switch(a.substr(a.length-1,1)){case "1":a+=e==11?"th":"st";break;case "2":a+=e==12?"th":"nd";break;case "3":a+=e==13?"th":"rd";break;default:a+="th";break}self.status="Click to select "+this.monthName+" "+a}else self.status="";return true}
function PickDisplayDay(a){this.show();var b=this.getMonthList(),c=this.getDayList(),e=this.getYearField();FixDayList(c,GetDayCount(this.displayed.yearValue,this.displayed.monthIndex));for(var g=0;g<b.length;g++)if(b.options[g].value==this.displayed.monthIndex)b.options[g].selected=true;for(b=1;b<=c.length;b++)if(b==a)c.options[b-1].selected=true;this.setPicked(this.displayed.yearValue,this.displayed.monthIndex,a);e.value=this.picked.yearPad;e.defaultValue=e.value}
function BuildCalendarDays(){var a=5;if(this.displayed.dayCount==31&&this.displayed.firstDay>4||this.displayed.dayCount==30&&this.displayed.firstDay==6)a=6;else if(this.displayed.dayCount==28&&this.displayed.firstDay==0)a=4;for(var b='<table width="'+CellWidth*7+'" cellspacing="0" cellpadding="1" style="cursor:default">',c=0;c<a;c++){b+="<tr>";for(var e=1;e<=7;e++){Day=c*7+(e-this.displayed.firstDay);if(Day>=1&&Day<=this.displayed.dayCount){if(this.displayed.yearValue==this.picked.yearValue&&this.displayed.monthIndex==
this.picked.monthIndex&&Day==this.picked.day){TextStyle="color:white;font-weight:bold;";BackColor=DayBGColor}else{TextStyle="color:black;";BackColor=CalBGColor}if(this.displayed.yearValue==Today.getFullYear()&&this.displayed.monthIndex==Today.getMonth()&&Day==Today.getDate())TextStyle+="border:1px solid darkred;padding:0px;";b+='<td align="center" class="calendarDateInput" style="cursor:default;height:'+CellHeight+";width:"+CellWidth+";"+TextStyle+";background-color:"+BackColor+'" onClick="'+this.objName+
".pickDay("+Day+')" onMouseOver="return '+this.objName+".displayed.dayHover(this,true,'"+BackColor+"',"+Day+')" onMouseOut="return '+this.objName+".displayed.dayHover(this,false,'"+BackColor+"')\">"+Day+"</td>"}else b+='<td class="calendarDateInput" style="height:'+CellHeight+'">&nbsp;</td>'}b+="</tr>"}return b+="</table>"}function GetGoodYear(a){if(a.length==4)return a;else{var b=a<Y2kPivotPoint?2000:1900;return b+parseInt(a,10)}}
function GetDayCount(a,b){return b==1&&(a%400==0||a%4==0&&a%100!=0)?29:MonthDays[b]}function VirtualButton(a,b){if(b){a.style.borderLeft="buttonshadow 1px solid";a.style.borderTop="buttonshadow 1px solid";a.style.borderBottom="buttonhighlight 1px solid";a.style.borderRight="buttonhighlight 1px solid"}else{a.style.borderLeft="buttonhighlight 1px solid";a.style.borderTop="buttonhighlight 1px solid";a.style.borderBottom="buttonshadow 1px solid";a.style.borderRight="buttonshadow 1px solid"}}
function NeighborHover(a,b,c){if(b){VirtualButton(a,false);self.status="Click to view "+c.fullName}else{a.style.border="buttonface 1px solid";self.status=""}return true}function FixDayList(a,b){var c=a.selectedIndex+1;if(b!=a.length){for(var e=a.length,g=Math.min(b,e);g<Math.max(b,e);g++)g>=b?(a.options[b]=null):(a.options[g]=new Option(g+1,g+1));c=Math.min(c,b);a.options[c-1].selected=true}return c}
function FixYearInput(a){var b=new RegExp("\\d{"+a.defaultValue.length+"}");if(!b.test(a.value))a.value=a.defaultValue}function CalIconHover(a){var b=this.isShowing()?"hide":"show";self.status=a?"Click to "+b+" the calendar":"";return true}function CalTimerReset(){eval("clearTimeout("+this.timerID+")");eval(this.timerID+"=setTimeout('"+this.objName+".show()',"+HideWait*1000+")")}function DoTimer(a){if(a)eval("clearTimeout("+this.timerID+")");else{eval(this.timerID+"=null");this.resetTimer()}}
function ShowCalendar(){if(this.isShowing()){var a=true;this.getCalendar().style.zIndex=--ZCounter;this.getCalendar().style.visibility="hidden";this.fixSelects(false)}else{a=false;this.fixSelects(true);this.getCalendar().style.zIndex=++ZCounter;this.getCalendar().style.visibility="visible"}this.handleTimer(a);self.status=""}
function SetElementStatus(a){this.getDayList().style.visibility=a?"hidden":"visible";this.getYearField().style.visibility=a?"hidden":"visible";this.getCalendarLink().style.visibility=a?"hidden":"visible"}
function CheckMonthChange(a){var b=this.getDayList();if(a.options[a.selectedIndex].value==""){b.selectedIndex=0;this.hideElements(true);this.setHidden("")}else{this.hideElements(false);if(this.isShowing()){this.resetTimer();this.getCalendar().style.zIndex=++ZCounter}b=FixDayList(b,GetDayCount(this.picked.yearValue,a.options[a.selectedIndex].value));this.setPicked(this.picked.yearValue,a.options[a.selectedIndex].value,b)}}
function CheckDayChange(a){this.isShowing()&&this.show();this.setPicked(this.picked.yearValue,this.picked.monthIndex,a.selectedIndex+1)}function CheckYearInput(a){if(a.value.length==a.defaultValue.length&&a.defaultValue!=a.value){if(this.isShowing()){this.resetTimer();this.getCalendar().style.zIndex=++ZCounter}var b=GetGoodYear(a.value),c=this.getMonthList();c=FixDayList(this.getDayList(),GetDayCount(b,this.picked.monthIndex));this.setPicked(b,this.picked.monthIndex,c);a.defaultValue=a.value}}
function dateObject(){if(Function.call)var a=this,b=0;else{a=arguments[0];b=1}a.date=arguments.length==b+1?new Date(arguments[b+0]):new Date(arguments[b+0],arguments[b+1],arguments[b+2]);a.yearValue=a.date.getFullYear();a.monthIndex=a.date.getMonth();a.monthName=MonthNames[a.monthIndex];a.fullName=a.monthName+" "+a.yearValue;a.day=a.date.getDate();a.dayCount=GetDayCount(a.yearValue,a.monthIndex);b=new Date(a.yearValue,a.monthIndex,1);a.firstDay=b.getDay()}
function storedMonthObject(a,b,c,e){Function.call?dateObject.call(this,b,c,e):dateObject(this,b,c,e);this.yearPad=this.yearValue.toString();this.monthPad=this.monthIndex<9?"0"+String(this.monthIndex+1):this.monthIndex+1;this.dayPad=this.day<10?"0"+this.day.toString():this.day;this.monthShort=this.monthName.substr(0,3).toUpperCase();if(a.indexOf("YYYY")==-1)this.yearPad=this.yearPad.substr(2);b=a.indexOf("/")>=0?"/":a.indexOf("-")>=0?"-":"";if(/DD?.?((MON)|(MM?M?))/.test(a)){this.formatted=this.dayPad+
b;this.formatted+=RegExp.$1.length==3?this.monthShort:this.monthPad}else if(/((MON)|(MM?M?))?.?DD?/.test(a)){this.formatted=RegExp.$1.length==3?this.monthShort:this.monthPad;this.formatted+=b+this.dayPad}this.formatted=a.substr(0,2)=="YY"?this.yearPad+b+this.formatted:this.formatted+b+this.yearPad}
function displayMonthObject(a,b,c,e){Function.call?dateObject.call(this,b,c,e):dateObject(this,b,c,e);this.displayID=a.hiddenFieldName+"_Current_ID";this.getDisplay=new Function("return document.getElementById(this.displayID)");this.dayHover=DayCellHover;this.goCurrent=new Function(a.objName+".getCalendar().style.zIndex=++ZCounter;"+a.objName+".setDisplayed(Today.getFullYear(),Today.getMonth());");if(a.formNumber>=0)this.getDisplay().innerHTML=this.fullName}
function neighborMonthObject(a,b,c){Function.call?dateObject.call(this,c):dateObject(this,c);this.buttonID=a.hiddenFieldName+"_"+b+"_ID";this.hover=new Function("C","O","NeighborHover(C,O,this)");this.getButton=new Function("return document.getElementById(this.buttonID)");this.go=new Function(a.objName+".getCalendar().style.zIndex=++ZCounter;"+a.objName+".setDisplayed(this.yearValue,this.monthIndex);");if(a.formNumber>=0)this.getButton().title=this.monthName}
function SetDisplayedMonth(a,b){this.displayed=new displayMonthObject(this,a,b,1);this.previous=new neighborMonthObject(this,"Previous",this.displayed.date.getTime()-86400000);this.next=new neighborMonthObject(this,"Next",this.displayed.date.getTime()+86400000*(this.displayed.dayCount+1));if(this.formNumber>=0)this.getDayTable().innerHTML=this.buildCalendar()}
function SetPickedMonth(a,b,c){this.picked=new storedMonthObject(this.format,a,b,c);this.setHidden(this.picked.formatted);this.setDisplayed(a,b)}
function calendarObject(a,b,c){this.hiddenFieldName=a;this.monthListID=a+"_Month_ID";this.dayListID=a+"_Day_ID";this.yearFieldID=a+"_Year_ID";this.monthDisplayID=a+"_Current_ID";this.calendarID=a+"_ID";this.dayTableID=a+"_DayTable_ID";this.calendarLinkID=this.calendarID+"_Link";this.timerID=this.calendarID+"_Timer";this.objName=a+"_Object";this.format=b;this.formNumber=-1;this.next=this.previous=this.displayed=this.picked=null;this.setPicked=SetPickedMonth;this.setDisplayed=SetDisplayedMonth;this.checkYear=
CheckYearInput;this.fixYear=FixYearInput;this.changeMonth=CheckMonthChange;this.changeDay=CheckDayChange;this.resetTimer=CalTimerReset;this.hideElements=SetElementStatus;this.show=ShowCalendar;this.handleTimer=DoTimer;this.iconHover=CalIconHover;this.buildCalendar=BuildCalendarDays;this.pickDay=PickDisplayDay;this.fixSelects=FixSelectLists;this.setHidden=new Function("D","if (this.formNumber >= 0) this.getHiddenField().value=D");this.getHiddenField=new Function("return document.forms[this.formNumber].elements[this.hiddenFieldName]");
this.getMonthList=new Function("return document.getElementById(this.monthListID)");this.getDayList=new Function("return document.getElementById(this.dayListID)");this.getYearField=new Function("return document.getElementById(this.yearFieldID)");this.getCalendar=new Function("return document.getElementById(this.calendarID)");this.getDayTable=new Function("return document.getElementById(this.dayTableID)");this.getCalendarLink=new Function("return document.getElementById(this.calendarLinkID)");this.getMonthDisplay=
new Function("return document.getElementById(this.monthDisplayID)");this.isShowing=new Function("return !(this.getCalendar().style.visibility != 'visible')");function e(j){for(var i=0;i<MonthNames.length;i++)if(MonthNames[i].substr(0,3).toUpperCase()==j.toUpperCase())break;return i}function g(j,i){j.setPicked(Today.getFullYear(),Today.getMonth(),Today.getDate());i&&alert("WARNING: The supplied date is not in valid '"+b+"' format: "+c+".\nTherefore, the current system date will be used instead: "+
j.picked.formatted)}if(c!="")if(this.format=="YYYYMMDD"&&/^(\d{4})(\d{2})(\d{2})$/.test(c))this.setPicked(RegExp.$1,parseInt(RegExp.$2,10)-1,RegExp.$3);else if(this.format.substr(0,2)=="YY"&&/^(\d{2,4})(-|\/)/.test(c)){a=GetGoodYear(RegExp.$1);if(/(-|\/)(\w{1,3})(-|\/)(\w{1,3})$/.test(c)){var f=RegExp.$2,d=RegExp.$4;if(/D$/.test(this.format)){var h=d;f=f}else{h=f;f=d}f=/\d{1,2}/i.test(f)?parseInt(f,10)-1:e(f);this.setPicked(a,f,h)}else g(this,true)}else if(/(-|\/)(\d{2,4})$/.test(c)){a=GetGoodYear(RegExp.$2);
if(/^(\w{1,3})(-|\/)(\w{1,3})(-|\/)/.test(c)){if(this.format.substr(0,1)=="D"){h=RegExp.$1;f=RegExp.$3}else{f=RegExp.$1;h=RegExp.$3}f=/\d{1,2}/i.test(f)?parseInt(f,10)-1:e(f);this.setPicked(a,f,h)}else g(this,true)}else g(this,true)}
function DateInput(a,b,c,e){if(arguments.length==0)document.writeln('<span style="color:red;font-size:'+FontSize+"px;font-family:"+FontFamily+";\">ERROR: Missing required parameter in call to 'DateInput': [name of hidden date field].</span>");else{if(arguments.length<3){c=DefaultDateFormat;if(arguments.length<2)b=false}else if(/^(Y{2,4}(-|\/)?)?((MON)|(MM?M?)|(DD?))(-|\/)?((MON)|(MM?M?)|(DD?))((-|\/)Y{2,4})?$/i.test(c))c=c.toUpperCase();else{var g="WARNING: The supplied date format for the '"+a+"' field is not valid: "+
c+"\nTherefore, the default date format will be used instead: "+DefaultDateFormat;c=DefaultDateFormat;if(arguments.length==4){var f=new storedMonthObject(c,Today.getFullYear(),Today.getMonth(),Today.getDate());g+="\n\nThe supplied date ("+e+") cannot be interpreted with the invalid format.\nTherefore, the current system date will be used instead: "+f.formatted;e=f.formatted}alert(g)}f||(f=new storedMonthObject(c,Today.getFullYear(),Today.getMonth(),Today.getDate()));if(arguments.length<4)e=b?f.formatted:
"";eval(a+"_Object=new calendarObject('"+a+"','"+c+"','"+e+"')");if(b||arguments.length==4){g="";var d=eval(a+"_Object.picked.formatted")}else{g=' style="visibility:hidden"';d="";eval(a+"_Object.setPicked("+Today.getFullYear()+","+Today.getMonth()+","+Today.getDate()+")")}with(document){writeln('<input type="hidden" name="'+a+'" value="'+d+'">');for(d=0;d<forms.length;d++)for(var h=0;h<forms[d].elements.length;h++)if(typeof forms[d].elements[h].type=="string")if(forms[d].elements[h].type=="hidden"&&
forms[d].elements[h].name==a){eval(a+"_Object.formNumber="+d);break}writeln('<table cellpadding="0" cellspacing="2"><tr>'+String.fromCharCode(13)+'<td valign="middle">');writeln('<select class="calendarDateInput" id="'+a+'_Month_ID" onChange="'+a+'_Object.changeMonth(this)">');if(!b){d=e==""?" selected":"";writeln('<option value=""'+d+">"+UnselectedMonthText+"</option>")}for(d=0;d<12;d++){MonthSelected=e!=""&&eval(a+"_Object.picked.monthIndex")==d?" selected":"";writeln('<option value="'+d+'"'+MonthSelected+
">"+MonthNames[d].substr(0,3)+"</option>")}writeln("</select>"+String.fromCharCode(13)+"</td>"+String.fromCharCode(13)+'<td valign="middle">');writeln("<select"+g+' class="calendarDateInput" id="'+a+'_Day_ID" onChange="'+a+'_Object.changeDay(this)">');for(d=1;d<=eval(a+"_Object.picked.dayCount");d++){DaySelected=e!=""&&eval(a+"_Object.picked.day")==d?" selected":"";writeln("<option"+DaySelected+">"+d+"</option>")}writeln("</select>"+String.fromCharCode(13)+"</td>"+String.fromCharCode(13)+'<td valign="middle">');
writeln("<input"+g+' class="calendarDateInput" type="text" id="'+a+'_Year_ID" size="'+eval(a+"_Object.picked.yearPad.length")+'" maxlength="'+eval(a+"_Object.picked.yearPad.length")+'" title="Year" value="'+eval(a+"_Object.picked.yearPad")+'" onKeyPress="return YearDigitsOnly(window.event)" onKeyUp="'+a+'_Object.checkYear(this)" onBlur="'+a+'_Object.fixYear(this)">');write('<td valign="middle">'+String.fromCharCode(13)+"<a"+g+' id="'+a+'_ID_Link" href="javascript:'+a+'_Object.show()" onMouseOver="return '+
a+'_Object.iconHover(true)" onMouseOut="return '+a+'_Object.iconHover(false)"><img src="'+ImageURL+'" align="baseline" title="Calendar" border="0"></a>&nbsp;');writeln('<span id="'+a+'_ID" style="position:absolute;visibility:hidden;width:'+CellWidth*7+"px;background-color:"+CalBGColor+';border:1px solid dimgray;" onMouseOver="'+a+'_Object.handleTimer(true)" onMouseOut="'+a+'_Object.handleTimer(false)">');writeln('<table width="'+CellWidth*7+'" cellspacing="0" cellpadding="1">'+String.fromCharCode(13)+
'<tr style="background-color:'+TopRowBGColor+';">');writeln('<td id="'+a+'_Previous_ID" style="cursor:default" align="center" class="calendarDateInput" style="height:'+CellHeight+'" onClick="'+a+'_Object.previous.go()" onMouseDown="VirtualButton(this,true)" onMouseUp="VirtualButton(this,false)" onMouseOver="return '+a+'_Object.previous.hover(this,true)" onMouseOut="return '+a+'_Object.previous.hover(this,false)" title="'+eval(a+"_Object.previous.monthName")+'"><img src="'+PrevURL+'"></td>');writeln('<td id="'+
a+'_Current_ID" style="cursor:pointer" align="center" class="calendarDateInput" style="height:'+CellHeight+'" colspan="5" onClick="'+a+'_Object.displayed.goCurrent()" onMouseOver="self.status=\'Click to view '+f.fullName+'\';return true;" onMouseOut="self.status=\'\';return true;" title="Show Current Month">'+eval(a+"_Object.displayed.fullName")+"</td>");writeln('<td id="'+a+'_Next_ID" style="cursor:default" align="center" class="calendarDateInput" style="height:'+CellHeight+'" onClick="'+a+'_Object.next.go()" onMouseDown="VirtualButton(this,true)" onMouseUp="VirtualButton(this,false)" onMouseOver="return '+
a+'_Object.next.hover(this,true)" onMouseOut="return '+a+'_Object.next.hover(this,false)" title="'+eval(a+"_Object.next.monthName")+'"><img src="'+NextURL+'"></td></tr>'+String.fromCharCode(13)+"<tr>");for(f=0;f<7;f++)writeln('<td width="'+CellWidth+'" align="center" class="calendarDateInput" style="height:'+CellHeight+";width:"+CellWidth+';font-weight:bold;border-top:1px solid dimgray;border-bottom:1px solid dimgray;">'+WeekDays[f]+"</td>");writeln("</tr>"+String.fromCharCode(13)+"</table>"+String.fromCharCode(13)+
'<span id="'+a+'_DayTable_ID">'+eval(a+"_Object.buildCalendar()")+"</span>"+String.fromCharCode(13)+"</span>"+String.fromCharCode(13)+"</td>"+String.fromCharCode(13)+"</tr>"+String.fromCharCode(13)+"</table>")}}};
