﻿
if (typeof(LinkDev) == 'undefined')
{
    LinkDev = new Object();
}

if (typeof(LinkDev.WebMonkey) == 'undefined')
{
    LinkDev.WebMonkey = new Object();
}

if (typeof(LinkDev.WebMonkey.Dates) == 'undefined')
{
    LinkDev.WebMonkey.Dates = new Object();
}

if (typeof(LinkDev.WebMonkey.Dates.Gregorian) == 'undefined')
{
    LinkDev.WebMonkey.Dates.Gregorian = new Object();
}

if (typeof(LinkDev.WebMonkey.Dates.Julian) == 'undefined')
{
    LinkDev.WebMonkey.Dates.Julian = new Object();
}

if (typeof(LinkDev.WebMonkey.Dates.Persian) == 'undefined')
{
    LinkDev.WebMonkey.Dates.Persian = new Object();
}

if (typeof(LinkDev.WebMonkey.Dates.ThaiBuddist) == 'undefined')
{
    LinkDev.WebMonkey.Dates.ThaiBuddist = new Object();
}

if (typeof(LinkDev.WebMonkey.Dates.Taiwan) == 'undefined')
{
    LinkDev.WebMonkey.Dates.Taiwan = new Object();
}

if (typeof(LinkDev.WebMonkey.Dates.Korean) == 'undefined')
{
    LinkDev.WebMonkey.Dates.Korean = new Object();
}

if (typeof(LinkDev.WebMonkey.Dates.Japanese) == 'undefined')
{
    LinkDev.WebMonkey.Dates.Japanese = new Object();
}

                                            
LinkDev.WebMonkey.Dates.GregorianMonthLen = new Array( 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );

LinkDev.WebMonkey.Dates.IsLeapYear = function (calendarType, year)
{
    if(calendarType == "Gregorian")
    {
        return (year % 400 == 0) || (year % 100 != 0 && year % 4 == 0);
    }
    
    var functionName = 'LinkDev.WebMonkey.Dates.' + calendarType + '.IsLeapYear';
    
    if(eval('typeof(' + functionName + ')') == 'function')
    {
        return eval(functionName + '(' + year.toString() + ')');
    }
    return LinkDev.WebMonkey.Dates.IsLeapYear("Gregorian", LinkDev.WebMonkey.Dates.GetGregorianYear(calendarType, year));
}

LinkDev.WebMonkey.Dates.GetDaysInMonth = function (calendarType, year, month)
{
    var functionName = 'LinkDev.WebMonkey.Dates.' + calendarType + '.GetDaysInMonth';
    if(eval('typeof(' + functionName + ')') == 'function')
    {
        return eval(functionName + '(' + year.toString() + "," + month.toString() + ')');
    }
    else
    {
        if(LinkDev.WebMonkey.Dates.IsLeapYear(calendarType, year) && month == 2)
            return 29;
        return LinkDev.WebMonkey.Dates.GregorianMonthLen[month];
    }
}

LinkDev.WebMonkey.Dates.GetMonthsInYear = function (calendarType, year)
{
    var functionName = 'LinkDev.WebMonkey.Dates.' + calendarType + '.GetMonthsInYear';
    if(eval('typeof(' + functionName + ')') == 'function')
    {
        return eval(functionName + '(' + year.toString() + ')');
    }
    return 12;
}

LinkDev.WebMonkey.Dates.GetDate = function (calendarType, year, month, day, adjustment)
{
    if(adjustment == null)
        adjustment = 0;
    var functionName = 'LinkDev.WebMonkey.Dates.' + calendarType + '.GetDate';
    if(eval('typeof(' + functionName + ')') == 'function')
    {
        return eval(functionName + '(' + year.toString() + "," + month.toString() + "," + day.toString() + "," + adjustment.toString() + ')');
    }
    else if(calendarType == 'Gregorian')
    {
        return new Date(year, month - 1, day);
    }
    else
    {
        return new Date(LinkDev.WebMonkey.Dates.GetGregorianYear(calendarType, year), month - 1, day);
    }
}
