var HighlightToday  = true;
var DisablePast    = false;
var MonthNames = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var now = new Date();
var dest = null;
var parent = null;
var ny = now.getFullYear(); // Today's Date
var nm = now.getMonth();
var nd = now.getDate();
var sy = 0; // currently Selected date
var sm = 0;
var sd = 0;
var y = now.getFullYear(); // Working Date
var m = now.getMonth();
var d = now.getDate();
var l = 0;
var t = 0;
var MonthLengths = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
function GetDate() 
{
    EnsureCalendarExists();
    DestroyCalendar();
    // One arguments is required, the rest are optional
    // First arguments must be the ID of the destination control
    if (arguments[0] == null || arguments[0] == "") 
    {
        // arguments not defined, so display error and quit
        alert("ERROR: Destination control required in funciton call GetDate()");
        return;
    } 
    else 
    {
        // copy argument
        //alert(arguments[0]);
        if (arguments[0] != 'undefined')
            dest = document.getElementById(arguments[0]);
        else
            dest = arguments[0];
    }
    y = now.getFullYear();
    m = now.getMonth();
    d = now.getDate();
    sm = 0;
    sd = 0;
    sy = 0;
    var cdval = dest.value;
    if (/\d{1,2}.\d{1,2}.\d{4}/.test(dest.value)) 
    {
        var vParts = cdval.split("/");
        sm = vParts[0] - 1;
        sd = vParts[1];
        sy = vParts[2];
        m=sm;
        d=sd;
        y=sy;
    }
  
    /* 
        Calendar is displayed 125 pixels above the destination element
        or (somewhat) over top of it.
    */
    l = findPosLeft(dest);
    t = findPosTop(dest)+20;

    if (t < 0) 
        t = 0;
    DrawCalendar();
}

function findPosLeft(obj)
{
    var curleft = 0;
    if (obj.offsetParent)
        while (1) 
        {
            curleft += obj.offsetLeft;
            if (!obj.offsetParent)
                break;
            obj = obj.offsetParent;
        }
    else if (obj.x)
        curleft += obj.x;
    return curleft;
}

function findPosTop(obj)
{
    var curtop = 0;
    if (obj.offsetParent)
        while (1)
        {
            curtop += obj.offsetTop;
            if (!obj.offsetParent)
                break;
            obj = obj.offsetParent;
        }
        else if (obj.y)
            curtop += obj.y;
    return curtop;
}

/*
  function DestoryCalendar()
  
  Purpose: Destroy any already drawn calendar so a new one can be drawn
*/
function DestroyCalendar() 
{
    var cal = document.getElementById("dpCalendar");
    if (cal != null) 
    {
        cal.innerHTML = null;
        cal.style.display = "none";
    }
    return
}

function DrawCalendar() 
{
    DestroyCalendar();
    cal = document.getElementById("dpCalendar");
    cal.style.left = l + "px";
    cal.style.top = t + "px";

    var sCal = "<table><tr><td class=\"cellButton\"><a href=\"javascript: PrevMonth();\" title=\"Previous Month\">&lt;&lt;</a></td>"+
    "<td class=\"cellMonth\" width=\"80%\" colspan=\"5\">"+MonthNames[m]+" "+y+"</td>"+
    "<td class=\"cellButton\"><a href=\"javascript: NextMonth();\" title=\"Next Month\">&gt;&gt;</a></td></tr>"+
    "<tr><td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td></tr>";
    var wDay = 1;
    var wDate = new Date(y,m,wDay);
    if (isLeapYear(wDate)) 
    {
        MonthLengths[1] = 29;
    } 
    else 
    {
        MonthLengths[1] = 28;
    }
    var dayclass = "";
    var isToday = false;
    for(var r=1; r<7; r++) 
    {
        sCal = sCal + "<tr>";
        for (var c=0; c<7; c++) 
        {
            var wDate = new Date(y,m,wDay);
            if (wDate.getDay() == c && wDay<=MonthLengths[m]) 
            {
                if(wDate.getDate()==sd && wDate.getMonth()==sm && wDate.getFullYear()==sy) 
                {
                    dayclass = "cellSelected";
                    isToday = true;  // only matters if the selected day IS today, otherwise ignored.
                } 
                else if (wDate.getDate()==nd && wDate.getMonth()==nm && wDate.getFullYear()==ny && HighlightToday) 
                {
                    dayclass = "cellToday";
                    isToday = true;
                } 
                else 
                {
                    dayclass = "cellDay";
                    isToday = false;
                }
                if (((now > wDate) && !DisablePast) || (now <= wDate) || isToday) 
                {
                    // user wants past dates selectable
                    sCal = sCal + "<td class=\""+dayclass+"\"><a href=\"javascript: ReturnDay("+wDay+");\">"+wDay+"</a></td>";
                } 
                else 
                {
                    // user wants past dates to be read only
                    sCal = sCal + "<td class=\""+dayclass+"\">"+wDay+"</td>";
                }
                wDay++;
            } 
            else 
            {
                sCal = sCal + "<td class=\"unused\"></td>";
            }
        }
        sCal = sCal + "</tr>";
    }
    sCal = sCal + "<tr><td colspan=\"4\" class=\"unused\"></td><td colspan=\"3\" class=\"cellCancel\"><a href=\"javascript: DestroyCalendar();\">Cancel</a></td></tr></table>"
    cal.innerHTML = sCal; // works in FireFox, opera
    cal.style.display = "inline";
}

function PrevMonth() 
{
    m--;
    if (m==-1) 
    {
        m = 11;
        y--;
    }
    DrawCalendar();
}

function NextMonth() 
{
    m++;
    if (m==12) 
    {
        m = 0;
        y++;
    }
    DrawCalendar();
}

function ReturnDay(day) 
{
    cDest = document.getElementById(dest);
    dest.value = (m+1)+"/"+day+"/"+y;
    DestroyCalendar();
}

function EnsureCalendarExists() 
{
    if(document.getElementById("dpCalendar") == null) 
    {
        var eCalendar = document.createElement("div");
        eCalendar.setAttribute("id", "dpCalendar");
        document.body.appendChild(eCalendar);
    }
}

function isLeapYear(dTest) 
{
    var y = dTest.getYear();
    var bReturn = false;

    if (y % 4 == 0) 
    {
        if (y % 100 != 0) 
        {
            bReturn = true;
        } 
        else 
        {
            if (y % 400 == 0) 
            {
                bReturn = true;
            }
        }
    }
    return bReturn;
}  