﻿/*
RITS specific validation
*/

/* Client validator for date fields (see DateValidator.cs) */
Sys.Mvc.ValidatorRegistry.validators["rits-date"] = function(rule) 
{
    // Return the validation function
    return function(enteredValue, context)
    {
        var validDate = false;
        var trimmedInput = jQuery.trim(enteredValue)
        
        // Empty fields are valid
        if (trimmedInput == '') 
        {
            validDate = true;
        }
        else 
        {
            // Basic check 
            var validFormat = /^\d{1,2}\-\w{1,3}\-\d{2,4}$/
            if (validFormat.test(trimmedInput)) {
                // Parts (without leading zeros)
                var dayPart = trimmedInput.split("-")[0].replace(/^[0]+/g, "");
                var monthPart = trimmedInput.split("-")[1].replace(/^[0]+/g, "");
                monthPart = monthPart.substr(0, 1).toUpperCase() + monthPart.substr(1).toLowerCase();
                var yearPart = trimmedInput.split("-")[2];
                var cleanedInput = dayPart + "-" + monthPart + "-" + yearPart;

                // Attempt to validate the date against a number of formats
                validDate = tryParseDate(cleanedInput, "d-m-yy");               // 14 8 2009
                validDate = validDate || tryParseDate(cleanedInput, "d-M-yy");  // 14 Aug 2009
                validDate = validDate || tryParseDate(cleanedInput, "d-m-y");   // 14 8 09
                validDate = validDate || tryParseDate(cleanedInput, "d-M-y");   // 14 Aug 09
            }
        }
        
        return validDate ? validDate : rule.ErrorMessage;
    };
};

function tryParseDate(dateValue, dateFormat) 
{
    var validDate = false;
    try 
    {
        jQuery.datepicker.parseDate(dateFormat, dateValue);
        validDate = true;
    }
    catch (e) { }
    return (validDate);
}
