﻿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 = '';
var startBaseToUse = '';

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) {
    if (document.getElementById('' + fieldPrefixToUse + basename + '') == null) {
        HideCalendar(basename);
        return;
    }
    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">' + 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>';

    if (document.getElementById('' + fieldPrefixToUse + startBaseToUse + '') != null) {
    eval('thedate = document.getElementById(\'' + fieldPrefixToUse + startBaseToUse + '\').value');
    }
    else {
        useEndDateAsStart = true;
        isStartDate = true;
    }
    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)) {
                displayDD = (Day < 10) ? '0' + Day : Day;
                formatMM = (displayMM + 1 < 10) ? '0' + (displayMM + 1) : displayMM + 1;
                if (!useEndDateAsStart && (thedate == ((displayMM + 1) + '/' + displayDD + '/' + displayYY) || thedate == ((displayMM + 1) + '/' + Day + '/' + displayYY)
                    || thedate == (formatMM + '/' + displayDD + '/' + displayYY) || thedate == (formatMM + '/' + 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() || (!isStartDate && Date.parse(thedate) > Date.parse((displayMM + 1) + '/' + Day + '/' + displayYY))) {
                        TextStyle += 'color:#c3c2c2;';
                    }
                    else
                        mHTML += ' onmouseover="DayCellHover(this,true,\'' + BackColor + '\')" onmouseout="DayCellHover(this,false,\'' + BackColor + '\')" onclick="PickDisplayDay(' + displayMM + ',' + Day + ',' + displayYY + ',\'' + basename + '\',\'' + nextname + '\')" ';
                }
                else {
                    if (displayMM < Today.getMonth()) {
                        if (displayYY < Today.getFullYear() || (!isStartDate && Date.parse(thedate) > Date.parse((displayMM + 1) + '/' + Day + '/' + displayYY)))
                            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() || (!isStartDate && Date.parse(thedate) > Date.parse((displayMM + 1) + '/' + Day + '/' + displayYY)))
                            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");
var isStartDate = false;
var useEndDateAsStart = false;
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)) - xAdjLft;
            var Today = new Date();
            calDiv.style.cssText = "position:absolute;z-index:1001;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);
            isStartDate = true;
            useEndDateAsStart = false;
            startBaseToUse = basename;
            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)) - xAdjLft;
            var Today = new Date();
            calDiv.style.cssText = "position:absolute;z-index:1001;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);
            isStartDate = (useEndDateAsStart) ? true : false;
            if (startBaseToUse == '') {
                isStartDate = true;
                useEndDateAsStart = true;
                startBaseToUse = basename;
            }
            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 - 1)) {
                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);
    set_yAdj(0, 0); 
}

function HideCalendar(basename) {
    if (eval('document.getElementById(\'' + basename + '_ID\') != null'))
        eval('document.getElementById(\'' + basename + '_ID\').style.display = \'none\'');
    FixSelectLists(false, basename);
    set_yAdj(0, 0);
}

var yAdjTop = 0;
var yAdjBtm = 0;
var xAdjLft = 0;
function set_yAdj(top, btm, lft) {
    yAdjTop = top;
    yAdjBtm = btm;
    xAdjLft = lft;
}
