﻿var names = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");

function datePickerCheckDate(ctl)
{
    var date = datePickerParseDate(ctl.value);
    
    if(date)
    {
        //
        // Check bounds
        //
        
        var minDate = datePickerParseYYYYMMDD(ctl.getAttribute('minvalue'))
        if(minDate && date < minDate)
        {
            date = minDate;
        }
        var maxDate = datePickerParseYYYYMMDD(ctl.getAttribute('maxvalue'))
        if(maxDate && date > maxDate)
        {
            date = maxDate;
        }
        
        ctl.value = datePickerFormatDate(date, ctl.getAttribute('format'));
    }
    else
    {
        ctl.value = "";
    }
}

function datePickerParseYYYYMMDD(str) //yyyyMMdd format
{
    var parts = /([0-9]{4})([0-9]{2})([0-9]{2})/.exec(str);
    if(parts)
    {
        var date = new Date();
        date.setFullYear(parts[1], parts[2] - 1, parts[3]);
        return date;
    }
    return;
}


function datePickerFormatDate(date, format)
{
    var str = format;
    str = str.replace("dd", datePickerPadZeros(date.getDate(),2));
    str = str.replace("d", date.getDate());
    if(str.indexOf("MMM") > -1)
    {
        str = str.replace("MMM", names[date.getMonth()]);
    }
    else
    {
        str = str.replace("MM", datePickerPadZeros(date.getMonth(),2));
        str = str.replace("M", date.getMonth());
    }
    str = str.replace("yyyy", datePickerPadZeros(date.getFullYear(),4))
    str = str.replace("yy", datePickerPadZeros(date.getFullYear() % 100,2));
    return str;
}

function datePickerPadZeros(val, len)
{
    var str = val.toString();
    while(str.length < len)
    {
        str = "0" + str;
    }
    return str;
}


function datePickerParseDate(val)
{
    var parts = /([0123]?[0-9])\W+([01]?[0-9]|[A-Za-z]{3})\W+([0-9]+)/.exec(val); // /W = non-AlphaNumeric
    
    if(!parts)
    {
        return;
    }
    
    var day = parts[1];
    var month = parts[2];
    var year = parts[3];
  
    if(year.length <= 2)
    {
        //
        // Two digits years are handled as:
        // If > 30 yrs in the future, past century
        // Else current century
        //
        
        year = 2000 + new Number(year);
        if(year > new Date().getFullYear() + 30)
        {
            year -= 100;
        }
    }
    
    //
    // Convert to a number if it is chars
    // Check > 0 and < 12
    //
    
    if(month.length == 3)
    {
        var found = false;
        for(var x = 0; x < names.length; x++)
        {
            if(names[x].toLowerCase() == month.toLowerCase())
            {
                month = x + 1;
                found = true;
                break;
            }
        }
        if(!found)
        {
            return; // Cannot convert to number
        }
    }
    if(month < 1 || month > 12)
    {
        return;
    }

    var maxDays = datePickerGetDaysInMonth(month, year)
    if(day < 0 || day > maxDays)
    {
        day = maxDays;
    }
    
    var date = new Date();
    date.setFullYear(year, month-1, day);
    return date;
}

function datePickerGetDaysInMonth(month, year) {
    if(month == 2)
    {
        // February has 29 days in any year evenly divisible by four,
        // EXCEPT for centurial years which are not also divisible by 400.
        return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
    }
    return month==4 || month==6 || month==9 || month==11 ? 30 : 31;
}
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();