﻿function getMonthNumber(monthName) {
    var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];

    for (var index = 0; index < months.length; index++) {
        if (months[index] == monthName) {
            return index + 1;
        }
    }

    return -1;
}

function daysInMonth(month, year) {
    return new Date(year, month, 0).getDate();
}

function validateUSDate(date) {

    var valid = false;
    var rxDate = /^([1-9]|1[0-2])\/([1-9]|1\d|2\d|3[0-1])\/(\d{4})$/;

    var match = rxDate.exec(date);
    
    if (match) {
        if (match.length == 4) {
            var month = match[1];
            var day = match[2];
            var year = match[3];
            
            if (day <= daysInMonth(month, year))
                valid = true;
        }
    }
    
    return valid;
}

function validateEUDate(date) {

    var valid = false;
    var rxDate = /^([1-9]|1\d|2\d|3[0-1])-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{4})$/;

    var match = rxDate.exec(date);

    if (match) {
        if (match.length == 4) {
            var day = match[1];
            var month = getMonthNumber(match[2]);
            var year = match[3];

            if (day <= daysInMonth(month, year))
                valid = true;
        }
    }

    return valid;
}

function validateShortDate(source, arguments) {
    var shortDateFormat = $("#ShortDateFormat").val();

    switch (shortDateFormat) {
        case "M/d/yyyy":
            arguments.IsValid = validateUSDate(arguments.Value);
            break;

        case "d-MMM-yyyy":
            arguments.IsValid = validateEUDate(arguments.Value);
            break;

        default:
            arguments.IsValid = validateUSDate(arguments.Value);
            break;
    }
}

function getFirstThreeOfMonthByNumber(monthNumber) {
    var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];

    return months[monthNumber];
}

function addThreeDays(fromDateId, toDateId) {
    var dateArr;
    var fromDatePlus3Days;
    var shortDateFormat = $("#ShortDateFormat").val();
    
    switch (shortDateFormat) {
        case "M/d/yyyy":
            fromDatePlus3Days = new Date($("#" + fromDateId).val());
            break;
        case "d-MMM-yyyy":
            dateArr = $("#" + fromDateId).val().split("-");
            fromDatePlus3Days = new Date(dateArr[1] + " " + dateArr[0] + ", " + dateArr[2]);
            break;
    }
    
    fromDatePlus3Days = fromDatePlus3Days.setDate(fromDatePlus3Days.getDate() + 3);
    var toDate = new Date(fromDatePlus3Days);
    if (shortDateFormat == "d-MMM-yyyy") {
        $("#" + toDateId).val(toDate.getDate() + "-" + getFirstThreeOfMonthByNumber(toDate.getMonth()) + "-" + toDate.getFullYear());
    }
    else {
        $("#" + toDateId).val((parseInt(toDate.getMonth())+1) + "/" + toDate.getDate() + "/" + toDate.getFullYear());
    }
}
