﻿var monthSize = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

function checkDate(myInput, myOldDate, altArray) {
    var rv = false;
    var myId = $(myInput).attr("id");
    var v = validateDate(myInput);
        
    if (!v.rval) {
        $(myInput).attr("value", myOldDate);
        alert('Error: ' + v.errMesg + ".");
        rv = false; 
    }
    else {
        changeAllowableDates($(myInput).val(), myInput, altArray);
        rv = true;
    }

    return rv;
}
 
function validateDate(myInput) {
    var myId = $(myInput).attr("id");    
    var isValid = true;
    var err = "";

    var dateFields = $(myInput).val().split("/");

    //verify date parses
    if (dateFields.length != 3) {
        isValid = false;
        err = 'Invalid date format.  Use MM/DD/YYYY';
    }
    else {
        if ((!(dateFields[0].length == 1 || dateFields[0].length == 2))
            || (!(dateFields[1].length == 1 || dateFields[1].length == 2))
            || (dateFields[2].length != 4)) {
            isValid = false;
            err = 'Invalid date length.  Use MM/DD/YYYY';
        }
        else {
            if (isNaN(dateFields[0]) || isNaN(dateFields[1]) || isNaN(dateFields[2])) {
                isValid = false;
                err = 'Invalid date format';
            }
            else {
                if ((parseInt(dateFields[0], 10) > 12) || (parseInt(dateFields[0], 10) < 1)) {
                    isValid = false;
                    err = 'Invalid Month specified';
                }
                else if ((parseInt(dateFields[1], 10) > monthSize[parseInt(dateFields[0], 10) - 1]) || (parseInt(dateFields[1], 10) < 1)) {
                    isValid = false;
                    err = 'Invalid day specified';
                }
            }
        }
    }

    myDate = new Date($(myInput).val());    

    //verify date is within current start/end range
    if (isValid) {
        
        var today = new Date();
                    
        if ($(myInput).hasClass("endDate")) {
            //has to be on or after the min date
            if (dateLessThan(myDate, $(myInput).datepicker("option", "minDate"))) {
                isValid = false;
                err = "End date must be on or after " + formatToMMDDYYYY($(myInput).datepicker("option", "minDate"));
            }            
        }
        else {            
            //has to be on or after today AND less than maxdate
            if (dateLessThan(myDate, today)) {
                isValid = false;
                err = "End date must be on or after " + formatToMMDDYYYY(today);
            }
            else if ($(myInput).datepicker("option", "maxDate") != null) {
                if (dateGreaterThan(myDate, $(myInput).datepicker("option", "maxDate"))) {
                    isValid = false;
                    err = "End date must be on or before " + formatToMMDDYYYY($(myInput).datepicker("option", "maxDate"));
                }
            }
        }
    }
    
    return { rval: isValid, errMesg: err };
}

function formatToMMDDYYYY(inDate) {
    var strMonth = "";
    var month = inDate.getMonth() + 1;
    if (month < 10)
        strMonth = "0" + month;
    else
        strMonth = month;

    var day = inDate.getDate();
    var year = inDate.getFullYear();

    return strMonth + "/" + day + "/" + year;
}

function formatStringToYYYYMMDD(inStr) {

    var c = inStr.split("/");

    var year = c[2];

    var day;
    if (parseInt(c[1], 10) < 10)
        day = "0" + parseInt(c[1], 10);
    else
        day = c[1];

    var month;
    if (parseInt(c[0], 10) < 10)
        month = "0" + parseInt(c[0], 10);
    else
        month = c[0];

    return year + month + day;
}

function changeAllowableDates(dateText, inst, altArray) {
    var myId = $(inst).attr("id");
    var setType = $("#" + myId).hasClass("endDate") ? "maxDate" : "minDate";

    $("#" + altArray[myId]).datepicker("option", setType, new Date(dateText));
    /*
    if ((myId == "eventstartdate") || (myId == "eventenddate"))
        $("#" + eventUCAlternateDate[myId]).datepicker("option", setType, new Date(dateText));
    else if ((myId == "hotelstartdate") || (myId == "hotelenddate"))
        $("#" + hotelUCAlternateDate[myId]).datepicker("option", setType, new Date(dateText));    
    else if ((myId == "eventsearchstartdate") || (myId == "eventsearchenddate"))
        $("#" + eventSearchAlternateDate[myId]).datepicker("option", setType, new Date(dateText));
    */
}

function dateLessThan(a, b) {
    rv = false;
    if (a.getFullYear() < b.getFullYear())
        rv = true;
    else if ((a.getFullYear() == b.getFullYear()) && (a.getMonth() < b.getMonth()))
        rv = true;
    else if ((a.getFullYear() == b.getFullYear()) && (a.getMonth() == b.getMonth()) && (a.getDate() < b.getDate()))
        rv = true;

    return rv;
}

function dateGreaterThan(a, b) {
    rv = false;
    if (a.getFullYear() > b.getFullYear())
        rv = true;
    else if ((a.getFullYear() == b.getFullYear()) && (a.getMonth() > b.getMonth()))
        rv = true;
    else if ((a.getFullYear() == b.getFullYear()) && (a.getMonth() == b.getMonth()) && (a.getDate() > b.getDate()))
        rv = true;

    return rv;
}

