﻿var DefaultDateFormat = 'MM/DD/YYYY';
var HideWait = 3; 
var Y2kPivotPoint = 76;
var FontSize = 11;
var FontFamily = 'Verdana';
var CellWidth = 25;
var CellHeight = 21;
var ImageURL = 'search/images/calendar.gif';
var NextURL = '/images/search/main/next.gif';
var PrevURL = '/images/search/main/prev.gif';
var CalBGColor = '#ffffff';
var DayBGColor = '#ff9933';
var ZCounter = 100;
var Today = new Date();
var WeekDays = new Array('S','M','T','W','T','F','S');
var MonthDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var MonthNames = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
var fieldPrefix = new Array();
var fieldPrefixToUse = '';

with (document) {
    writeln('<style>');
    writeln('td.calDateInput {letter-spacing:normal;line-height:normal;font-family:' + FontFamily + ',Sans-Serif;font-size:' + FontSize + 'px;}');
    writeln('select.calDateInput {letter-spacing:.06em;font-family:Verdana,Sans-Serif;font-size:11px;}');
    writeln('input.calDateInput {letter-spacing:.06em;font-family:Verdana,Sans-Serif;font-size:11px;}');
    writeln('</style>');
}

function NeighborHover(Cell, Over) {
    if (Over) 
        VirtualButton(Cell, false);
    else 
        Cell.style.border = 'buttonface 1px solid';
    return true;
}

function DayCellHover(Cell, Over, Color) {
   Cell.style.backgroundColor = (Over) ? DayBGColor : Color;
}

function GetDayCount(SomeYear, SomeMonth) {
   return ((SomeMonth == 1) && ((SomeYear % 400 == 0) || ((SomeYear % 4 == 0) && (SomeYear % 100 != 0)))) ? 29 : MonthDays[SomeMonth];
}

function PickDisplayDay(mm, dd, yy, basename, nextname) {
	eval('document.getElementById(\'' + fieldPrefixToUse + basename + '\').value =\''+(++mm)+'/'+dd+'/'+yy+'\'');
	HideCalendar(basename);
	var newMM = 0;
	var newDD = 0;
	var newYY = 0;
	var dayCount1 = GetDayCount(yy, mm-1);
	if((dd+2) > dayCount1) {
	    if((dd+1) > dayCount1){
	        if(mm+1 > 12){
	            newMM = 1;
	          newDD = 2;
	          newYY = yy+1;
	        }else{
	        newMM = mm + 1;
	          newDD = 2;
	          newYY = yy;
	        }
	    }
	    else {
	       newDD = 1;
	       if(mm+1 > 12) {
	           newMM = 1;
	           newYY = yy + 1;
	      }
	      else{
	          newMM = mm + 1;
	          newYY = yy;
	      }
       }
  }
  else{
      newMM = mm;
      newDD = dd + 2;
      newYY = yy;
  }

  if (nextname != '') {
      eval('document.getElementById(\'' + fieldPrefixToUse + nextname + '\').value =\'' + (newMM) + '/' + newDD + '/' + newYY + '\'');
      eval('if(document.getElementById(\'' + fieldPrefixToUse + nextname + '\').type == \'text\'){ document.getElementById(\'' + fieldPrefixToUse + nextname + '\').select(); document.getElementById(\'' + fieldPrefixToUse + nextname + '\').focus()}');
  }
}

function BehindCal(SelectList, CalLeftX, CalRightX, CalTopY, CalBottomY, ListTopY) {
   var ListLeftX = GetTagPixels(SelectList, 'LEFT');
   var ListRightX = ListLeftX + SelectList.offsetWidth;
   var ListBottomY = ListTopY + SelectList.offsetHeight;
   return (((ListTopY < CalBottomY) && (ListBottomY > CalTopY)) && ((ListLeftX < CalRightX) && (ListRightX > CalLeftX)));
}

function GetTagPixels(StartTag, Direction) {
   var PixelAmt = (Direction == 'LEFT') ? StartTag.offsetLeft : StartTag.offsetTop;
   while ((StartTag.tagName != 'BODY') && (StartTag.tagName != 'HTML')) {
      StartTag = StartTag.offsetParent;
      PixelAmt += (Direction == 'LEFT') ? StartTag.offsetLeft : StartTag.offsetTop;
   }
   return PixelAmt;
}

function FixSelectLists(Over, basename) {
    if (IE) {
        if (Over) {
            hideAllSelects();
        }
        else {
            showAllSelects();
        }
    }
}

function BuildCalendarDays(mm, dd, yy, basename, displayMM, displayYY, nextname) {
	var nextMM = displayMM;
	var nextYY = displayYY;
	if (nextMM == 11) {
		nextMM = 0;
		nextYY++;
	}
	else
		nextMM++;

	var prevMM = displayMM;
	var prevYY = displayYY;
	if (prevMM == 0) {
		prevMM = 11;
		prevYY--;
	}
	else
		prevMM--;

    var HTML = '<table cellspacing="0" cellpadding="0" style="z-index:10;">' + String.fromCharCode(13);
    HTML += '<tr>';
        //month 1 
        HTML += '<td valign="top">';
            HTML += renderMonth(1, displayYY, displayMM, mm, dd, yy, basename, prevMM, prevYY, nextname, nextMM, nextYY);
        HTML += '</td>';

	    var prevMM = displayMM;
	    var prevYY = displayYY;
	    if (prevMM == 0)
	    {
		    prevMM = 11;
		    prevYY--;
	    }
	    else
		    prevMM--;

	    if (nextMM == 0)
	    {
	        displayMM = 0;
		    displayYY++;
		}
	    else
	        displayMM++;

        //month 2
        HTML += '<td valign="top" style="background-color:#ffffff;border-left:1px solid #003399">';
            HTML += renderMonth(2, displayYY, displayMM, mm, dd, yy, basename, prevMM, prevYY, nextname, nextMM, nextYY);
        HTML += '</td>';
    HTML += '</tr>';        
   HTML += '</table>';

   return HTML += '<table width="' + ((CellWidth * 7) * 2 + 1) + 'px" cellspacing="0" cellpadding="1"><tr><td align="right" style="cursor:pointer;background-color:#c6d7e9;border-top:1px solid #003399;height:22px;color:#003399;font-family:Arial;font-size:11px;text-decoration:underline;" onclick="HideCalendar(\''+basename+'\')">close window</td></tr></table>';   
}

function renderMonth(index, displayYY, displayMM, mm, dd, yy, basename, prevMM, prevYY, nextname, nextMM, nextYY) {
	var FirstDate = new Date(displayYY, displayMM, 1);
	var firstDay = FirstDate.getDay();
    var Rows = 5;
    var dayCount = GetDayCount(displayYY, displayMM);

    if (((dayCount == 31) && (firstDay > 4)) || ((dayCount == 30) && (firstDay == 6))) 
        Rows = 6;
    else if ((dayCount == 28) && (firstDay == 0)) 
        Rows = 4;
    
    mHTML = '<table width="' + (CellWidth * 7) + 'px" cellspacing="0" cellpadding="0" style="cursor:default;z-index:10;">';
    mHTML += '<td colspan="7">';
   	mHTML += '<table width="100%" cellspacing="0" cellpadding="1">';
	mHTML += '<tr style="background-color:#003399;color:#ffffff;font-family:verdana;font-size:11px;font-weight:bold;height:22px;">';
	var yearLabel = displayYY.toString();
	yearLabel = yearLabel.substring(2, 4);
    switch (index)
    {
        case 1:
        	if (displayYY > Today.getFullYear() || displayYY == Today.getFullYear() && displayMM > Today.getMonth())
            {
                mHTML += '<td id="StartDate_Previous_ID" onclick="document.getElementById(\'' + basename + '_DayTable_ID\').innerHTML = BuildCalendarDays('+mm+','+dd+','+yy+',\''+basename+'\','+prevMM+','+prevYY+',\''+nextname+'\')"';
                mHTML += ' style="cursor:pointer;" align="left" class="calDateInput" style="height:' + CellHeight + 'px" >';
                mHTML += '<img src="' + PrevURL + '" style="width:16px;height:15px;" />';
                mHTML += '</td>';
            }
            else 
                mHTML += '<td style="height:20px;"><img src="/images/layout/blank.gif" style="width:16px;height:15px;" /></td>';
                
            mHTML += '<td id="StartDate_Current_ID" align="center" class="calDateInput" style="height:' + CellHeight + 'px" colspan="5">'+ MonthNames[displayMM] +' \'' + yearLabel + '</td>';
        break;
        case 2:
            mHTML += '<td id="StartDate_Current_ID" style="cursor:default" align="center" class="calDateInput" style="height:' + CellHeight + 'px" colspan="5">'+ MonthNames[displayMM] +' \'' + yearLabel + '</td>';
        	mHTML += '<td id="StartDate_Next_ID"  style="cursor:pointer;height:20px;" onclick="document.getElementById(\'' + basename + '_DayTable_ID\').innerHTML = BuildCalendarDays('+mm+','+dd+','+yy+',\''+basename+'\','+nextMM+','+nextYY+',\''+nextname+'\')" style="cursor:default;height:20px;" align="right" class="calDateInput" style="height:' + CellHeight + 'px" >';
            mHTML += '<img src="' + NextURL + '" style="width:16px;height:15px;" /></td>';
        break;
	}
    mHTML +='</tr>';
    mHTML +='</table>';
    mHTML += '</td>';
    mHTML += '</tr>';
  
    mHTML +='<tr>';
    for (var w=0;w<7;w++) 
        mHTML +='<td align="center" class="calDateInput" style="height:' + CellHeight + 'px;width:' + CellWidth + 'px;font-weight:bold;color:#003399">' + WeekDays[w] + '</td>';

    eval('thedate = document.getElementById(\'' + fieldPrefixToUse + basename + '\').value');
    mHTML +='</tr>';   
    for (var j=0;j<Rows;j++) 
    {
        mHTML += '<tr>';
        for (var i = 1; i <= 7; i++) 
        {
         Day = (j * 7) + (i - firstDay);
         if ((Day >= 1) && (Day <= dayCount)) {
            if (thedate == ((displayMM + 1) + '/' + Day + '/' + displayYY)) {
               TextStyle = 'color:white;font-weight:bold;'
               BackColor = DayBGColor;
            }
            else {
               TextStyle = 'color:black;'
               BackColor = CalBGColor;
            }
            
            if ((displayYY == Today.getFullYear()) && (displayMM == Today.getMonth()) && (Day == Today.getDate())) TextStyle += 'border:1px solid #c0c0c0;padding:0px;';
            mHTML += '<td align="center" class="calDateInput"';
            if ((displayYY == Today.getFullYear()) && (displayMM == Today.getMonth())) {
	            if (Day >= Today.getDate())
		            mHTML += ' onmouseover="DayCellHover(this,true,\'' + BackColor + '\')" onmouseout="DayCellHover(this,false,\'' + BackColor + '\')" onclick="PickDisplayDay('+displayMM+','+Day+','+displayYY+',\''+basename+'\',\''+nextname+'\')" ';
	            else
		            TextStyle = 'color:#c3c2c2;';
            }
            else {
	            if (displayMM < Today.getMonth()){
		            if(displayYY < Today.getFullYear())
			            TextStyle = 'color:#c3c2c2;';
		            else
			            mHTML += ' onmouseover="DayCellHover(this,true,\'' + BackColor + '\')" onmouseout="DayCellHover(this,false,\'' + BackColor + '\')" onclick="PickDisplayDay('+displayMM+','+Day+','+displayYY+',\''+basename+'\',\''+nextname+'\')" ';
	            }
	            else {
		            if(displayYY < Today.getFullYear())
			            TextStyle = 'color:#c3c2c2;';
		            else
			            mHTML += ' onmouseover="DayCellHover(this,true,\'' + BackColor + '\')" onmouseout="DayCellHover(this,false,\'' + BackColor + '\')" onclick="PickDisplayDay('+displayMM+','+Day+','+displayYY+',\''+basename+'\',\''+nextname+'\')" ';
	            }
            }
            mHTML += ' style="cursor:default;height:' + CellHeight + 'px;width:' + CellWidth + 'px;' + TextStyle + ';background-color:' + BackColor + '">' + Day + '</td>';
         }
         else 
            mHTML += '<td class="calDateInput" style="height:' + CellHeight + 'px">&nbsp;</td>';
        }
        mHTML += '</tr>';
    }
    mHTML += '</table>';

   return mHTML;
}
    
var calDiv = document.createElement("div");
function ShowCalendar(basename, nextname, baseCalendarType) {
    for (i = 0; i < fieldPrefix.length; i++) {
        var tmp = document.getElementById(fieldPrefix[i] + basename)
        if (tmp != null) {
            fieldPrefixToUse = fieldPrefix[i];
            break;
        }
    }

    var pixelsTop = 0;
    if (navigator.appName == "Microsoft Internet Explorer")
        pixelsTop = document.documentElement.scrollTop;
    else
        pixelsTop = window.pageYOffset;

    var yAdj = -209 - parseInt(yAdjTop);
    if (!IE) {
        yAdj = yAdj - 5;
    }
    if (pixelsTop > 70) {
        yAdj = 12 + parseInt(yAdjBtm);

        if (IE) {
            yAdj = yAdj + 15;
        }
    }

   switch (baseCalendarType)
    {
        case "StartDate":
            var startDate_yPos = getTop(document.getElementById('startDateCon' + basename)) + yAdj;
            if (startDate_yPos < pixelsTop) {
                startDate_yPos = 0;
            }
            var startDate_xPos = getLeft(document.getElementById('startDateCon' + basename));
            var Today = new Date();
            calDiv.style.cssText = "position:absolute;z-index:100;top:" + startDate_yPos + "px;left:" + startDate_xPos + "px;";
            calDiv.innerHTML = '<span id="' + basename + '_ID" style="position:absolute;display:none;width:' + ((CellWidth * 7) * 2 + 1) + 'px;background-color:' + CalBGColor + ';border:2px solid #003399;"><span id="' + basename + '_DayTable_ID"></span></span>';
            document.body.appendChild(calDiv);
            break;
        case "EndDate":
            var endDate_yPos = getTop(document.getElementById('endDateCon' + basename)) + yAdj;
            if (endDate_yPos < pixelsTop) {
                endDate_yPos = 0;
            }
            var endDate_xPos = getLeft(document.getElementById('endDateCon' + basename));
            var Today = new Date();
            calDiv.style.cssText = "position:absolute;z-index:100;top:" + endDate_yPos + "px;left:" + endDate_xPos + "px;";
            calDiv.innerHTML =  '<span id="' + basename + '_ID" style="position:absolute;display:none;width:' + ((CellWidth * 7)*2 + 1) + 'px;background-color:' + CalBGColor + ';border:2px solid #003399;"><span id="' + basename + '_DayTable_ID"></span>';
            document.body.appendChild(calDiv);
        break;        
    }

    eval('thedate = document.getElementById(\'' + fieldPrefixToUse + basename + '\').value');

    if (document.getElementById(fieldPrefixToUse + basename).value != 'mm/dd/yyyy' && nextname != '' && document.getElementById(fieldPrefixToUse + nextname).value == 'mm/dd/yyyy')
        thedate = document.getElementById(fieldPrefixToUse + basename).value;
    	
	var firstslash = thedate.search('/');
	var mm = thedate.substring(0,firstslash);
	var thedayyear = thedate.substring(firstslash+1,thedate.length);
	var secondslash = thedayyear.search('/');
	var dd = thedayyear.substring(0, secondslash);
	var yy = thedayyear.substring(secondslash+1,thedayyear.length);
	
	if (isNaN (mm) || isNaN (dd) || isNaN (yy))	{
		dd = Today.getDate();
		mm = Today.getMonth();
		yy = Today.getFullYear();
	}
	
	if (dd > 0 && mm > 0 && yy > 0) {
		if (yy.length == 4 && mm > 0 && mm < 12)	{
			if (dd <= GetDayCount(yy, mm)) {
				mm = --mm;
				yy = yy;
				dd = dd;
			}
			else {
				dd = Today.getDate();
				mm = Today.getMonth();
				yy = Today.getFullYear();
			}
		}
		else {
			dd = Today.getDate();
			mm = Today.getMonth();
			yy = Today.getFullYear();
		}
	}
	else {
		dd = Today.getDate();
		mm = Today.getMonth();
		yy = Today.getFullYear();
	}
	
	eval('document.getElementById(\''+basename+'_DayTable_ID\').innerHTML = BuildCalendarDays(mm,dd,yy,basename,mm,yy,nextname)');	
	eval('document.getElementById(\'' + basename + '_ID\').style.display = \'inline\'');

	FixSelectLists(true, basename);	
}

function HideCalendar(basename) {    
    if (eval('document.getElementById(\'' + basename + '_ID\') != null'))
    	eval('document.getElementById(\'' + basename + '_ID\').style.display = \'none\'');
	FixSelectLists(false, basename);
}

//user defined adjustment
var yAdjTop = 0;
var yAdjBtm = 0;
function set_yAdj(top, btm) {
    yAdjTop = top;
    yAdjBtm = btm;
}