﻿function SolarDateChooserValidation(source, clientside_arguments)
{
    var solarValid = IsDateValid_Validator(clientside_arguments.Value);      
    var gregorianValid = G_IsDateValid_Validator(clientside_arguments.Value);
    
    if( solarValid || gregorianValid )
    {        
        clientside_arguments.IsValid = true;
    }
    else
    {
        clientside_arguments.IsValid = false;
    }
}

function SplitString_Validator( st, delim )
{
    var parts = new Array();
    var text = new String(st);
    
    var currentPart = "";
    
    for( var i = 0; i < text.length; i++)
    {
        if( text.charAt(i) == delim )
        {
            parts.push( currentPart );                     
            currentPart = "";        
        }
        else
        {
            currentPart += text.charAt(i);
        }
    } 
    
    parts.push( currentPart );
    
    return parts;   
}

function IsLeap_Validator(year)
{
    if( year % 33 == 1 || year % 33 == 5 || year % 33 == 9 ||
        year % 33 == 13 || year % 33 == 17 || year % 33 == 22 ||
        year % 33 == 26 || year % 33 == 30 )
    {
        return true;    
    }
}

function IsDateValid_Validator(currentDate) 
{      
    var dateParts = SplitString_Validator(currentDate, '/');

    if( dateParts.length != 3 )
        return false;
        
    var year = parseInt( dateParts[0] );
    var month = parseInt( dateParts[1] );
    var day = parseInt( dateParts[2] );            
    
    if( isNaN(year) || isNaN(month) || isNaN(day))
        return false;    

    if (year < 1300 || (year > 1400)) {
        return false;
    }
    if (month < 1 || (month > 12)) {
        return false;
    }
    if (day < 1 || (day > 31)) {
        return false;
    }
    if (month > 6 && (day > 30)) {
        return false;
    }
    if (  !IsLeap_Validator(year) && month == 12 && (day == 30)) {
        return false;
    }
    
    return true;
}



function G_SplitString_Validator( st, delim )
{
    var parts = new Array();
    var text = new String(st);
    
    var currentPart = "";
    
    for( var i = 0; i < text.length; i++)
    {
        if( text.charAt(i) == delim )
        {
            parts.push( currentPart );                     
            currentPart = "";        
        }
        else
        {
            currentPart += text.charAt(i);
        }
    } 
    
    parts.push( currentPart );
    
    return parts;   
}

function G_IsLeap_Validator(year)
{
    if( year % 400 == 0 )
        return true;
    
    if( year % 100 == 0)
        return false;
        
    if( year % 4 == 0)
        return true;
    
    return false;
}

function G_IsDateValid_Validator(currentDate) 
{      
    var dateParts = new Array( G_SplitString_Validator(currentDate, '/'));

    if( dateParts[0].length != 3 )
        return false;
        
    var year = parseInt( dateParts[0][2] );
    var month = parseInt( dateParts[0][0] );
    var day = parseInt( dateParts[0][1] );            
    
    if( isNaN(year) || isNaN(month) || isNaN(day))
        return false;    

    if (year > 2100 || (year < 1900)) {
        return false;
    }
    if (month < 1 || (month > 12)) {
        return false;
    }
    if (day < 1 || (day > 31)) {
        return false;
    }
    
    var monthLen = G_GetMonthDays_Validator(year, month);
    if( day > monthLen)
        return false;
    
    return true;
}

function G_GetMonthDays_Validator(year, month) 
{
    if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12 )
        return 31;
    
    if( month == 4 || month == 6 || month == 1 || month == 9 || month == 11 )
        return 30;
        
    if( G_IsLeap_Validator(year) && month == 2 )    
        return 29;
    else
        return 28;   
}








if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
