﻿var ageOrDob = false;
var ageOrDobMessage = "Please enter a valid date of birth or age in the fields provided, but not both.";
$(document).ready(function() {

    $('input:text').change(function() {
        $(this).val(jQuery.trim($(this).val()));
    });
    var validateOptions = { errorPlacement: function(error, element) {
        error.appendTo(element.parent(".search-field"));
    },
        focusInvalid: false,
        onfocusout: false,
        onkeyup: false,
        messages: { FormerLegalState: { required: "Required" }, LegalState: { required: "Required" }, FormerLegalZip: { required: "Required" }, LegalZip: { required: "Required" }, State: { required: "Required" }, FirstName: { required: "Required" }, LastName: { required: "Required"} },        
        submitHandler: function(form) {
            convertCityAbbrv("City");
            convertCityAbbrv("LegalCity");
            convertCityAbbrv("FormerLegalCity");
            var formValid = true;
            if (formValid) {
                if (ageOrDob) {
                    if (checkAgeOrDob(form)) {
                        validateCDate(form);
                    }
                    else {
                        uniqueDateRequired();
                    }
                }
                else {
                    if (!bothAgeAndDOB(form)) {
                        validateCDate(form);
                    }
                    else {
                        uniqueDateRequired(form);
                    }
                }
            }
        }
    };
    if ($("#promo-search-myself").length > 0) $('#promo-search-myself form').validate(validateOptions);
    if ($("#promo-search-others").length > 0) $('#promo-search-others form').validate(validateOptions);
    if ($("#cb-landing").length > 0) $('#cb-landing form').validate(validateOptions);
    if ($("#cb-education-form").length > 0) $('#cb-education-form form').validate(validateOptions);
    if ($("#cb-employment-form").length > 0) $('#cb-employment-form form').validate(validateOptions);

});


function validateCDate(form) {
    var month, day, year;
    month = $(form).find('select.mm').not(':hidden').val();
    day = $(form).find('select.dd').not(':hidden').val();
    year = $(form).find('select.yyyy').not(':hidden').val();
    if ((month === '' || month == null) && (day === '' || day == null) && (year === '' || year == null)) {
        form.submit();
    } else if (month === '' || day === '' || year === '') {
        noDateConfirm(form);
    } else if (!dateSanityCheck(month, day)) {
        noDateConfirm(form);
    } else {
        form.submit();
    }
}

function bothAgeAndDOB(form) {
    var month = $(form).find('select.mm').not(':hidden').val();
    var day = $(form).find('select.dd').not(':hidden').val();
    var year = $(form).find('select.yyyy').not(':hidden').val();
    var ageValue = $(form).find('input.age-input').filter(':first').val();
    var test = (!(month === '' || month == null) && !(day === '' || day == null) && !(year === '' || year == null) && !(ageValue === '' || ageValue == null));
    return test;
}

function noDateConfirm(form) {
    var message = "The date you have entered is not valid.<br />Please click cancel to correct this, otherwise the date will not be used in the search.";
    Boxy.confirm(message, function() {
        $('select.mm, select.dd, select.yyyy').val('');
        form.submit();
    },
        { title: "Whoops!" }
    );
}

function dateSanityCheck(month, day) {
    var dateLimits = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    return (day <= dateLimits[month - 1]);
}

function checkAgeOrDob(form) {
    var ageValid, dobValid = false;

    //CHECK AGE
    var ageInput = $(form).find('input.age-input').filter(':first');
    var ageValue = $(ageInput).val();
    ageValid = (ageValue != null && ageValue != '');

    //CHECK DOB
    var month, day, year;
    month = $(form).find('select.mm').not(':hidden').val();
    day = $(form).find('select.dd').not(':hidden').val();
    year = $(form).find('select.yyyy').not(':hidden').val();
    if (month === '' || day === '' || year === '') {
        dobValid = false;
    } else if (dateSanityCheck(month, day)) {
        dobValid = true;
    } else {
        dobValid = false;
    }

    //IF AGE VALID AND NOT DOB, CLEAR DOB TO PREVENT BOXY FROM COMPLAING ABOUT AN INVALID DOB AND SO WE DON'T PASS BOTH
    if (ageValid && !dobValid) {
        $('form').find('.dd, .mm, .yyyy').val('');
    }

    //HAS TO BE EITHER OR, NOT BOTH
    return ((ageValid || dobValid) && !(ageValid && dobValid));
}

function uniqueDateRequired() {
    Boxy.alert(ageOrDobMessage);
}

function convertCityAbbrv(cityNameAttr) {
    var cityval = $('input[name=' + cityNameAttr + ']').val();

    if (cityval != null && cityval != '') {
        //Checking for ST/st and replace with Saint
        if (cityval.toLowerCase().indexOf('st ') > -1) {
            $('input[name=' + cityNameAttr + ']').val(cityval.toLowerCase().replace("st", "Saint"));
        }

        if (cityval.toLowerCase().indexOf('st. ') > -1) {
            $('input[name=' + cityNameAttr + ']').val(cityval.toLowerCase().replace("st.", "Saint"));
        }

        //Checking for MT/mt and replace with Mount              
        if (cityval.toLowerCase().indexOf('mt ') > -1) {
            $('input[name=' + cityNameAttr + ']').val(cityval.toLowerCase().replace("mt", "Mount"));
        }

        if (cityval.toLowerCase().indexOf('mt. ') > -1) {
            $('input[name=' + cityNameAttr + ']').val(cityval.toLowerCase().replace("mt.", "Mount"));
        }

        //Checking for FT/ft and replace with Fort              
        if (cityval.toLowerCase().indexOf('ft ') > -1) {
            $('input[name=' + cityNameAttr + ']').val(cityval.toLowerCase().replace("ft", "Fort"));
        }

        if (cityval.toLowerCase().indexOf('ft. ') > -1) {
            $('input[name=' + cityNameAttr + ']').val(cityval.toLowerCase().replace("ft.", "Fort"));
        }
    }
}


function ValidateDriverLicenseByState(DLNumber) {
    var sErrorMsg = '';
    var state = $('#mvr-promo-search-myself-dlstate').val();
    switch (state) {
        case "AL":
            if (!RegExp("^\\d{7}$|^[A-Za-z]{1}\\d{6}$").test(DLNumber)) {
                sErrorMsg = "Alabama - 7 Numeric, or 1 Alpha + 6 Numeric";
            }
            break;
        case "AR":
            if (!RegExp("^0\\d{8}$|^\\d{9}$").test(DLNumber)) {
                sErrorMsg = "Arkansas - 9 Numeric.";
            }
            break;
        case "AZ":
            if (!RegExp("^(?:[A-Za-z]\\d{8}|\\d{9})$").test(DLNumber)) {
                sErrorMsg = "Arizona - 9 Numeric, or 1 Alpha + 8 Numeric.";
            }
            break;
        case "CO":
            if (!RegExp("^\\d{9}$|^[A-Za-z]{1}\\d{1,6}$").test(DLNumber)) {
                sErrorMsg = "Colorado - 9 Numeric, or 1 Alpha + up to 6 Numeric.";
            }
            break;
        case "CT":
            if (!RegExp("^\\d{9}$").test(DLNumber)) {
                sErrorMsg = "Connecticut - 9 Numeric.";
            }
            break;
        case "DE":
            if (!RegExp("^\\d{1,7}$").test(DLNumber)) {
                sErrorMsg = "Delaware - 1 to 7 Numeric.";
            }
            break;
        case "DC":
            if (!RegExp("^\\d{7}$|^\\d{9}$").test(DLNumber)) {
                sErrorMsg = "Washington - 7 Numbers or 9 Numbers.";
            }
            break;
        case "FL":
            if (!RegExp("^[A-Za-z]{1}\\d{12}$").test(DLNumber)) {
                sErrorMsg = "Florida - 1 Alpha + 12 Numeric.";
            }
            break;
        case "ID":
            if (!RegExp("^[A-Za-z]{2}\\d{6}[A-Za-z]{1}$|^\\d{9}$").test(DLNumber)) {
                sErrorMsg = "Idaho - 2 Alpha + 6 Numeric + 1 Alpha, or 9 Numeric.";
            }
            break;
        case "IN":
            if (!RegExp("^\\d{10}$|^[A-Za-z]{1}\\d{9}$").test(DLNumber)) {
                sErrorMsg = "Indiana - 10 Numeric, or 1 Alpha + 9 Numeric.";
            }
            break;
        case "IA":
            if (!RegExp("^\\d{9}$|^\\d{3}[A-Za-z]{2}\\d{4}$").test(DLNumber)) {
                sErrorMsg = "Iowa - 9 Numeric, or 3 Numeric + 2 Alpha + 4 Numeric.";
            }
            break;
        case "KS":
            if (!RegExp("^\\d{9}$|^[Kk]\\d{8}$").test(DLNumber)) {
                sErrorMsg = "Kansas - 9 Numeric, or 'K' + 8 numeric.";
            }
            break;
        case "KY":
            if (!RegExp("^[A-Za-z]{1}\\d{8}$").test(DLNumber)) {
                sErrorMsg = "Kentucky - 1 Alpha + 8 Numeric.";
            }
            break;
        case "LA":
            if (!RegExp("^\\d{9}$").test(DLNumber)) {
                sErrorMsg = "Louisiana - 9 Numeric.";
            }
            break;
        case "ME":
            if (!RegExp("^\\d{7}$").test(DLNumber)) {
                sErrorMsg = "Maine - 7 Numeric.";
            }
            break;
        case "MD":
            if (!RegExp("^[A-Za-z]{1}\\d{12}$").test(DLNumber)) {
                sErrorMsg = "Maryland - 1 Alpha + 12 Numeric.";
            }
            break;
        case "MA":
            if (!RegExp("^\\d{9}$|^[Ss]\\d{8}$").test(DLNumber)) {
                sErrorMsg = "Massachusetts - 9 Numeric, or “S” + 8 Numeric.";
            }
            break;
        case "MI":
            if (!RegExp("^[A-Za-z]{1}\\d{12}$").test(DLNumber)) {
                sErrorMsg = "Michigan - 1 Alpha + 12 Numeric.";
            }
            break;
        case "MN":
            if (!RegExp("^[A-Za-z]{1}\\d{12}$").test(DLNumber)) {
                sErrorMsg = "Minnesota - 1 Alpha + 12 Numeric.";
            }
            break;
        case "MS":
            if (!RegExp("^\\d{9}$").test(DLNumber)) {
                sErrorMsg = "Mississippi - 9 Numeric.";
            }
            break;
        case "MO":
            if (!RegExp("^\\d{9}$|^[A-Za-z]{1}\\d{5,9}$").test(DLNumber)) {
                sErrorMsg = "Missouri - 9 Numeric, or 1 Alpha + 5-9 Numeric.";
            }
            break;
        case "MT":
            if (!RegExp("^\\d{13}$|^[A-Za-z0-9]{9}$").test(DLNumber)) {
                sErrorMsg = "Montana - 13 Numeric, or 9 alpha-numeric.";
            }
            break;
        case "NE":
            if (!RegExp("^[A-Za-z]{1}\\d{3,8}$").test(DLNumber)) {
                sErrorMsg = "Nebraska - 1 Alpha + 3-8 Numeric.";
            }
            break;
        case "NV":
            if (!RegExp("^\\d{10}$|^\\d{12}$|^[Xx]\\d{8}$").test(DLNumber)) {
                sErrorMsg = "Nevada - 10 Numeric, or 12 Numeric, or “X“ + 8 Numeric.";
            }
            break;
        case "NJ":
            if (!RegExp("^[A-Za-z]{1}\\d{14}$").test(DLNumber)) {
                sErrorMsg = "New Jersey - 1 Alpha + 14 Numeric.";
            }
            break;
        case "NM":
            if (!RegExp("^\\d{9}$").test(DLNumber)) {
                sErrorMsg = "New Mexico - 9 Numeric.";
            }
            break;
        case "NY":
            if (!RegExp("^\\d{9}$|^[A-Za-z]{1}\\d{18}$").test(DLNumber)) {
                sErrorMsg = "New York - 9 Numeric, or 1 Alpha + 18 Numeric.";
            }
            break;
        case "ND":
            if (!RegExp("^\\d{9}$|^[A-Za-z]{3}\\d{6}$").test(DLNumber)) {
                sErrorMsg = "North Dakota - 9 Numeric, or 3 Alpha + 6 Numeric.";
            }
            break;
        case "OK":
            if (!RegExp("^(?!000)([0-6]\\d{2}|7([0-6]\\d|7[012]))([ -]?)(?!00)\\d\\d\\3(?!0000)\\d{4}$|^\\d{9}$|^[A-Za-z]{1}\\d{9}$").test(DLNumber)) {
                sErrorMsg = "Oklahoma - 9 Numeric or 1 Alpha 9 Numeric.";
            }
            break;
        case "RI":
            if (!RegExp("^\\d{7}$|^[Vv]\\d{6}$").test(DLNumber)) {
                sErrorMsg = "Rhode Island - 7 Numeric, or “V” and six numbers for disabled veterans.";
            }
            break;
        case "SC":
            if (!RegExp("^\\d{1,10}$").test(DLNumber)) {
                sErrorMsg = "South Carolina - 1 to 10 Numeric.";
            }
            break;
        case "SD":
            if (!RegExp("^(?!000)([0-6]\\d{2}|7([0-6]\\d|7[012]))([ -]?)(?!00)\\d\\d\\3(?!0000)\\d{4}$|^\\d{6}$|^\\d{8}$").test(DLNumber)) {
                sErrorMsg = "South Dakota - SSN, or 6 Numbers or 8 Numbers.";
            }
            break;
        case "TN":
            if (!RegExp("^\\d{7,9}$").test(DLNumber)) {
                sErrorMsg = "Tennessee - 7 to 9 Numbers.";
            }
            break;
        case "TX":
            if (!RegExp("^\\d{8}$").test(DLNumber)) {
                sErrorMsg = "Texas - 8 Numbers.";
            }
            break;
        case "UT":
            if (!RegExp("^\\d{4,9}$").test(DLNumber)) {
                sErrorMsg = "Utah - 4 to 9 Numeric.";
            }
            break;
        case "VT":
            if (!RegExp("^\\d{8}$|^\\d{7}[A-Za-z]{1}$").test(DLNumber)) {
                sErrorMsg = "Vermont  - 8 Numbers, or 7 Numbers and 1 Alpha.";
            }
            break;
        case "VA":
            if (!RegExp("^\\d{9}$|^[A-Za-z]{1}\\d{8}$").test(DLNumber)) {
                sErrorMsg = "Virginia - 9 Numeric, or 1 Alpha and 8 Numeric.";
            }
            break;
        case "WV":
            if (!RegExp("^[A-Za-z0-9]{7}$").test(DLNumber)) {
                sErrorMsg = "West Virginia - 7 Alpha/Numeric.";
            }
            break;
        case "WI":
            if (!RegExp("^[A-Za-z]{1}\\d{13}$").test(DLNumber)) {
                sErrorMsg = "Wisconsin - 1 Alpha + 13 Numeric.";
            }
            break;
        default:
            sErrorMsg = "State not found for DL validation:";
            break;
    }
    return sErrorMsg;
}
