/*
* Original Code - Bazillyo's Spiffy DHTML Popup Calendar v. 1.0 @ 2000 S. Ousta
* - freeware with this comment
* - Thanks to Chris for the domlay() function
* - this requires calendarcode.js, calendar.css, and calendarTest.htm
* - works in IE4.x, IE5.x, NS4.75 possibly 4.x, NS6 (with slight cosmetic issues)
* - Netscape does display some controls overtop of the layer so layout is important
*
* Vertebrae rewrite B. Ullman/P. Smith/K. Meaney
* Major changes:
* - Removal of month & year drop down menus, and dependancies on those items (which Netscape didn't handle well)
* - Addition of month and year VCR-type controls.
* - restyle layout to build smaller, neater calendar menu.
* - Allow user to select non-current month values (the grayout dates)
* - Provide method for menu to default to the date shown in the input box.
* - Test on the Macs, and make changes to accomodate them.
*/
// initialize variables...
document.write("");
var ppcIE=((navigator.appName == "Microsoft Internet Explorer") || ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion)==5)));
var ppcNN6=((navigator.appName == "Netscape") && (parseInt(navigator.appVersion)==5));
var ppcNN=((navigator.appName == "Netscape")&&(document.layers));
is_mac= (navigator.userAgent.toLowerCase().indexOf("mac")!=-1);
var is_mac4x=((navigator.userAgent.toLowerCase().indexOf("mac")!=-1)&&(navigator.appName == "Microsoft Internet Explorer")&&(navigator.appVersion.indexOf("5.0")==-1));
agt=navigator.userAgent.toLowerCase();
is_opera6 = ( (agt.indexOf("opera") != -1) &&
(parseInt(navigator.appVersion.substring(0,1)) < 7 ) );
is_NsFour = ( (agt.indexOf("msie") == -1) && (agt.indexOf("opera") == -1) &&
(agt.indexOf("mozilla/4.") != -1) );
var todayDate = new Date, curDate = new Date;
var minDate = new Date, maxDate = new Date;
var IsCalendarVisible=false, valid=true;
var inputCount=0, inputNum=0;
var ppcX = 4, ppcY = 4;
var siteId=0;
var curImg, curDateBox;
var defaultD, gstrDefaultDate
var dteBoxName1, dteBoxName2
var gwhatMonth, gwhatYear
var setMin, setMax
var IsUsingMinMax;
var calfrmName;
var gblnClearDate
var grunFunc
var names = new Array('JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC');
var longnames = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
var days = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var dow = new Array('S','M','T','W','T','F','S');
var dateChar="-";
var imagesDir = ""
//is_mac4x=true; //uncomment for mac testing
var months = new Array(); months = names //from date.js
var now = new Date(); //from date.js
document.write("");
var calenderX = 0;
var calenderY = 0;
// integrated functions from legacy date.js
function y2k(number) { return (number < 1900) ? number + 1900 : number; }
function getFirstofYearOffset(){
var firstofyear = (new Date((new Date().getYear()),0,1)).getTime();
var todaysDate = (new Date((new Date().getYear()),((new Date().getMonth())),(new Date().getDate()))).getTime();
returnedValue = Math.floor(((todaysDate - firstofyear)/(-24 * 60 * 60 * 1000)));
return (returnedValue);
}
function setDate (dayOffset){
var selectedDate = new Date(((new Date()).getTime() + ((parseInt(dayOffset) * 24 * 60 * 60 * 1000))));
return ((selectedDate.getDate() < 10) ? '0' + selectedDate.getDate() : selectedDate.getDate()) + "-" + months[selectedDate.getMonth()] + "-" + y2k(selectedDate.getYear());
}//end integration date.js
function getOffsetLeft (el) {
if (siteId==6901)
return getOffsetLeftDDN(el);
var ol = el.offsetLeft;
while ((el = el.offsetParent) != null)
ol += el.offsetLeft;
return ol;
}
function getOffsetTop (el) {
if (siteId==6901)
return getOffsetTopDDN(el);
var ot = el.offsetTop;
while((el = el.offsetParent) != null)
ot += el.offsetTop;
return ot;
}
// Kludge to fix DDN problems
function getOffsetLeftDDN (el) {
var ol = el.offsetLeft;
while ((el = el.offsetParent) != null)
{
if ((el.nodeName=="FIELDSET") || (el.nodeName=="IMG"))
ol += el.offsetLeft;
}
return ol;
}
function getOffsetTopDDN (el) {
var ot = el.offsetTop;
while((el = el.offsetParent) != null)
{
if ((el.nodeName=="FIELDSET") || (el.nodeName=="IMG"))
ot += el.offsetTop;
}
return ot;
}
function calClick() { window.focus(); }
function domlay(id,trigger,lax,lay,content) {
// Layer visible
if (trigger=="1"){
if (document.layers) document.layers[''+id+''].visibility = "show"
else if (document.all) document.all[''+id+''].style.visibility = "visible"
else if (document.getElementById) document.getElementById(''+id+'').style.visibility = "visible"
}
// Layer hidden
else if (trigger=="0"){
if (document.layers) document.layers[''+id+''].visibility = "hide"
else if (document.all) document.all[''+id+''].style.visibility = "hidden"
else if (document.getElementById) document.getElementById(''+id+'').style.visibility = "hidden"
}
// Set horizontal position
if (lax){
if (document.layers){document.layers[''+id+''].left = lax}
else if (document.all){document.all[''+id+''].style.left=lax}
else if (document.getElementById){document.getElementById(''+id+'').style.left=lax+"px"}
}
// Set vertical position
if (lay){
if (document.layers){document.layers[''+id+''].top = lay}
else if (document.all){document.all[''+id+''].style.top=lay}
else if (document.getElementById){document.getElementById(''+id+'').style.top=lay+"px"}
}
// change content
if (content){
if (document.layers){
var sprite=document.layers[''+id+''];
sprite.document.open();
sprite.document.write(content);
sprite.document.close();
}
else if (document.all)
{
//document.all[''+id+''].innerHTML = content;
var container = document.getElementById(''+id+'');
container.innerHTML = content;
}
else if (document.getElementById)
{
if ( is_opera6 )
{
var container = document.getElementById(''+id+'');
container.document.write(content);
}
else
{
rng = document.createRange();
el = document.getElementById(''+id+'');
rng.setStartBefore(el);
htmlFrag = rng.createContextualFragment(content)
while(el.hasChildNodes()) el.removeChild(el.lastChild);
el.appendChild(htmlFrag);
}
}
}
}
function hideCalendar(){
domlay('popupcalendar',0,ppcX,ppcY);
IsCalendarVisible = false;
}
function Calendar(whatMonth,whatYear) {
var startMonth, startYear;
var datecolwidth, output = '';
gwhatMonth=whatMonth; gwhatYear=whatYear
startMonth=whatMonth; startYear=whatYear;
curDate.setMonth(whatMonth);
curDate.setFullYear(whatYear);
curDate.setDate(todayDate.getDate());
if (ppcNN6) {
output += '
<\/table>';
else if ((is_mac)&&(ppcIE)) output += '
<\/table>';
else output += '
<\/table>';
curDate.setDate(1);
curDate.setMonth(startMonth); curDate.setFullYear(startYear);
return output;
}
function isDayValid(validDay, validMonth, validYear){
curDate.setDate(validDay);
curDate.setMonth(validMonth);
curDate.setFullYear(validYear);
if ((setMin==1)||(setMax==1)){
if ((curDate>=minDate) && (curDate<=maxDate)) {
return true;
}else{
if ((setMin==1)&&(setMax!=1)){
if (curDate>=minDate) return true;
else return false;
}
if ((setMax==1)&&(setMin!=1)){
if (curDate<=maxDate) return true;
else return false;
} } } }
function isDayToday(isDay) {
var objCompare; var objCompare2
if (gstrDefaultDate) { objCompare=today_date; objCompare2=today_date; }
else{ objCompare=curDate; objCompare2=todayDate; }
if (((curDate.getFullYear() == objCompare2.getFullYear()) && (curDate.getMonth() == objCompare2.getMonth()) && (isDay == objCompare2.getDate()))||(((curDate.getFullYear() == todayDate.getFullYear()) && (curDate.getMonth() == todayDate.getMonth()) && (isDay == todayDate.getDate())))) return true;
else return false;
}
function padout(number) { return (number < 10) ? '0' + number : number; }
function clearDay() {
eval('document.' + calfrmName + '.' + curDateBox + '.value = \'\'');
hideCalendar();
}
function cDay(whatDay,greyFlag) { // chooseDay for input
var monthModify=0, yearModify=0;
if (greyFlag){
if (whatDay>15){
monthModify+=-1
if (gwhatMonth==0){ monthModify+=12; yearModify+=-1; }
}else{
monthModify+=1
if (gwhatMonth==11){ monthModify+=-12; yearModify+=1; }
} }
if (whatDay<=9) whatDay="0"+whatDay
eval('document.' + calfrmName + '.' + curDateBox + '.value = "'+ whatDay+ dateChar + names[curDate.getMonth()+monthModify] + dateChar + (curDate.getFullYear()+yearModify) + '"');
eval(grunFunc);
hideCalendar();
}
function changeDate(monthID, YearID){
curDate.setMonth(monthID); curDate.setFullYear(YearID);
if ( !is_opera6 )
{
domlay('popupcalendar',1,ppcX,ppcY,Calendar(curDate.getMonth(),curDate.getFullYear()));
}
else
{
//var strCurDate=curDate.getDate()+dateChar+names[curDate.getMonth()]+dateChar+curDate.getFullYear();
//strCurDate=formatDate(strCurDate,0,frmName,dteBox);
var strCurDate=(curDate.getMonth()+1)+"/"+curDate.getDate()+"/"+curDate.getFullYear();
refreshPage(strCurDate);
}
}
function makeArray0() {
for (i = 0; i31))return false;
if (isNaN(month) || (month<1 || month>12))return false;
if ((year.length==3)||(isNaN(year)))return false;
if(parseInt(year) < 70) year = parseInt(year)+2000;
if ((parseFloat(year)>=3000 || parseFloat(year)<=1900)||((""+year).length>=5))return false;
month=parseFloat(month)-1;
if (month==1){
if (year == Math.round(year / 4) * 4){
if (day > 29)return false;
}else{
if (day > 28)return false;
}
}else if (day>days[month]){ return false; }
}
/*formats date for date.parse for
all but mac ie4x. For mac ie4x, checks valid date and populates the input value for mac ie4x */
function formatDate(dateVal,flag,frmName,dteBox){
if (!dateVal)dateVal="///"
if (dateVal.indexOf("--")>-1) return false
var pattern=eval("/"+dateChar+"/g");
dateVal=(dateVal.replace(pattern,"/")).toUpperCase();
var tempDate;i=0;
if (flag==1 || flag==3){//mac ie4x
var returnVal=true;
if (dateVal.indexOf('/')==-1)return false;
}
var dateArray=dateVal.split('/');
defaultD=parseFloat(dateArray[0]);
if (flag!=2 || flag!=3)dateArray[1]=dateArray[1].toUpperCase();
if (dateArray[1] < "0" || dateArray[1] > "9"){
while (i12)){//mac ie4x
return false;
}
if (flag!=1 && flag!=3){
dateArray[2]=parseFloat(dateArray[2])
if(dateArray[2] < 70) dateArray[2] += 2000;
}
tempDate=dateArray[0];
dateArray[0]=dateArray[1];dateArray[1]=tempDate;
if (!flag==1 && dateArray[1].length==1)dateArray[1]="0"+dateArray[1];
if (flag!=1 && flag!=3){//not mac ie4x
if (dateArray[1].length==1)dateArray[1]="0"+dateArray[1];
if (flag!=2)eval("document."+frmName+"."+dteBox+".value='"+dateArray[1]+dateChar+names[dateArray[0]-1]+dateChar+dateArray[2]+"'");
return dateArray.join("/");
}else{//mac ie4x
if (dateArray[1].substring(1,2)=="")dateArray[1]="0"+dateArray[1]
if (validateDate(dateArray[1],dateArray[0],dateArray[2])==false){
return false;
}else{
if (flag!=3)eval("document."+frmName+"."+dteBox+".value='"+dateArray[1]+dateChar+names[dateArray[0]-1]+dateChar+dateArray[2]+"'");
return true;
} } }
/*validates dates for all browsers- called from formatDate() Also handles y2k */
function checkPlatform(frmName,dteBox,btnName,strMin,strMax,blnClearDate,runFunc, overridePopup, imageDir){
return checkPlatform(frmName,dteBox,btnName,strMin,strMax,blnClearDate,runFunc, overridePopup, imageDir, 0)
}
/*writes proper page elements and their actions based on browser platform*/
function checkPlatform(frmName,dteBox,btnName,strMin,strMax,blnClearDate,runFunc, overridePopup, imageDir, site){
siteId = site;
imagesDir = imageDir;
//if mac ie4x
if (is_mac4x) {
document.write('(DD-MMM-YYYY)');
}else if(!is_mac4x)
{
var strVAlign = 'align="absmiddle" ';
if ( (!overridePopup) && (is_opera6 || is_NsFour) )
{
var range = 1;
var strBoundaryVal = strMin;
if ( (strMin == null) || (strMin.length == 0) )
{
range = 2;
strBoundaryVal = strMax;
}
if ( is_opera6 )
strVAlign = ' ';
document.write('');
}
else
{
document.write('');
}
}
}
function openCalendarPopup( boundaryBoxValRef, valBox, range )
{
var elemVal = '';
if ( !((boundaryBoxValRef == null) || (boundaryBoxValRef.length == 0) ))
{
if ( boundaryBoxValRef.toLowerCase().indexOf('document') != -1 )
elemVal = window.eval(boundaryBoxValRef);
else
elemVal = boundaryBoxValRef;
}
openCalendar( elemVal, valBox, range );
}
/*blurs for ie*/
function checkBlur(frmObj){ if (!is_mac4x) frmObj.blur(); }
/* processes results from checkFields, and returns true on valid entry*/
function checkInvalid(frmName){
if (valid){ return true; }
else{
alert('Please enter a valid date in the format of DD-MM(MM)-YY(YY)');
eval("document."+frmName+".elements["+inputNum+"].focus();");
return false;
} }
function getDayLink(linkDay,isGreyDate,linkMonth,linkYear) {
var templink; valid_day = isDayToday(linkDay);
if (!(IsUsingMinMax)) {
if (isGreyDate){
templink='