﻿var textEx = /\S[a-zA-Z]{1}/; //looks for at least 3 characters
var emailEx = /^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i;
var phoneEx = /[0-9]{3}/;
var yearEx = /^([1][9]\d\d|2010)$/;  //1900 - 2059
var dayEx = /^\d{1,2}/;
var numberEx = /^\d{1,10}$/;

///////////////////////// Core Methods /////////////////////////////////

function val_validatecombo(id) {
    var validated = true;
    if ($("#MainContent_" + id + " input.igdd_ValueDisplay").length > 0) {
        if (!textEx.test($("#MainContent_" + id + " input.igdd_ValueDisplay").attr("value"))) { validated = false; }

        if (validated) {
            $("#MainContent_" + id + " input.igdd_ValueDisplay").css("padding-left", "10px");
            $("img#val" + id).remove();
        }
        else {
            $("#MainContent_" + id + " input.igdd_ValueDisplay").css("padding-left", "15px");
            $("<img id='val" + id + "' src='/Images/Validation_Failed.png' alt='Invalid or Incomplete' style='position:absolute; margin:5px 0px 0px 3px; z-index:10' />").insertBefore("input[id*=" + id + "]");
        }
    }
    return validated;
}

function val_validatemonthcombo(id) {
    var validated = true;
    if ($("#MainContent_" + id + " input.igdd_ValueDisplay").length > 0) {
        if (!textEx.test($("#MainContent_" + id + " input.igdd_ValueDisplay").attr("value"))) { validated = false; }

        if (validated) {
            val_checkIfDayIsValid();
            $("#MainContent_" + id + " input.igdd_ValueDisplay").css("padding-left", "10px");
            $("img#val" + id).remove();
        }
        else {
            $("#MainContent_" + id + " input.igdd_ValueDisplay").css("padding-left", "15px");
            $("<img id='val" + id + "' src='/Images/Validation_Failed.png' alt='Invalid or Incomplete' style='position:absolute; margin:5px 0px 0px 3px; z-index:10' />").insertBefore("input[id*=" + id + "]");
        }
    }
    return validated;
}
function val_validatefield(id) {
    var validated = true;
    //alert("validating: " +id+ " | found: "+$("input[id*=" + id + "]").length);
    if ($("input[id*=" + id + "]").length > 0) {
        var value = $("input[id*=" + id + "]").attr("value");
        switch ($("input[id*=" + id + "]").attr("accessKey")) {
            case "Text":
                if (!textEx.test(value)) { validated = false; }
                break;
            case "Email":
                //alert("validating an email textfield");
                if (!emailEx.test(value)) { validated = false; }
                break;
            case "Phone":
                //alert("validating a telphone textfield");
                if (!phoneEx.test(value)) { validated = false; }
                break;
            case "Password":
                //alert("validating a password textfield");
                if (value.length < 3) { validated = false; }
                break;
            case "Year":
                //alert("validating a year textfield");
                if (!yearEx.test(value)) { validated = false; }
                else { val_checkIfDayIsValid(); }
                break;
            case "Day":
                //alert("validating a day textfield");
                val_checkIfDayIsValid();
                if (!dayEx.test(value)) { validated = false; }
                break;
            case "Number":
                //alert("validating a number textfield");
                if (!numberEx.test(value)) { validated = false; }
                break;
            case "":
            case null:
            case undefined:
                if (!textEx.test(value)) { validated = false; }
                break;
        }

        if (validated) {
            $("input[id*=" + id + "]").css("padding-left", "10px");
            $("img#val" + id).remove();
        }
        else {
            $("input[id*=" + id + "]").css("padding-left", "25px"); 
            $("<img id='val" + id + "' src='/Images/Validation_Failed.png' alt='Invalid or Incomplete' style='position:absolute; margin:5px 0px 0px 3px; z-index:10' />").insertBefore("input[id*=" + id + "]");
        }
    }
    return validated;
}

function val_validatetextarea(id) {
    var validated = true;
    if ($("textarea[id*=" + id + "]").length > 0) {
        var value = $("textarea[id*=" + id + "]").attr("value");
        switch ($("textarea[id*=" + id + "]").attr("accessKey")) {
            case "Text":
                if (!textEx.test(value)) { validated = false; }
                break;
            case "Number":
                if (!numberEx.test(value)) { validated = false; }
                break;
            case "":
            case null:
            case undefined:
                if (!textEx.test(value)) { validated = false; }
                break;
        }

        if (validated) {
            $("textarea[id*=" + id + "]").css("padding-left", "10px");
            $("img#val" + id).remove();
        }
        else {
            $("textarea[id*=" + id + "]").css("padding-left", "25px");
            $("<img id='val" + id + "' src='/Images/Validation_Failed.png' alt='Invalid or Incomplete' style='position:absolute; margin:10px 0px 0px 4px; z-index:10' />").insertBefore("textarea[id*=" + id + "]");
        }
    }
    return validated;
}

///////////////////////// Validate-Via-Page-Specfic-Calls Methods /////////////////////////////////

function validateRegistrationForm() {
    var validated = true;
    if (!val_validatecombo("cboCampRegistry")) { validated = false; }

    if (!val_validatefield("txtFirstName")) { validated = false; }
    if (!val_validatefield("txtLastName")) { validated = false; }

    if (!val_validatecombo("cboMonth")) { validated = false; }
    if (!val_validatefield("txtDay")) { validated = false; }
    if (!val_validatefield("txtYear")) { validated = false; }

    if (!val_validatecombo("cboShirtSize")) { validated = false; }

    if (!val_validatefield("txtParentFirstName")) { validated = false; }
    if (!val_validatefield("txtParentLastName")) { validated = false; }
    if (!val_validatefield("txtAddress")) { validated = false; }
    if (!val_validatecombo("cboCountry")) { validated = false; }
    if (!val_validatefield("txtPostalCode")) { validated = false; }
    if (!val_validatecombo("cboProvince")) { validated = false; }
    if (!val_validatefield("txtCity")) { validated = false; }
    if (!val_validatefield("txtParentHomePhone")) { validated = false; }
    if (!val_validatefield("txtParentEmailAddress")) { validated = false; }
    if (!val_validatefield("txtEmergencyContactName")) { validated = false; }
    if (!val_validatefield("txtEmergencyContactPhone")) { validated = false; }
    if (!val_validatefield("txtEmergencyContactRelationship")) { validated = false; }
    return validated;
}
function validateContactForm() {
    var validated = true;
    if (!val_validatefield("txtName")) { validated = false; }
    if (!val_validatefield("txtEmail")) { validated = false; }
    if (!val_validatetextarea("txtMessage")) { validated = false; }
    return validated;
}
function validateNewsletterForm() {
    var validated = true;
    if (!val_validatefield("txtNewsletterName")) { validated = false; }
    if (!val_validatefield("txtNewsletterEmail")) { validated = false; }
    return validated;
}

///////////////////////// Validate-Via-Registration Methods /////////////////////////////////


var val_registered_ids = new Array();
function val_registerfield(id) {
    val_registered_ids(id);
}
function val_validateRegisteredControls() {
    var validated = true;
    $("img[src*='/Images/Validation_Failed.png']").remove();
    for (var i = 0; i < val_registered_ids.length; i++) {
        if (val_validatefield(val_registered_ids[i]) == false) {
            validated = false;
            return validated;
        }
    }
    return validated;
}

///////////////////////// Other Internal/Utility Methods /////////////////////////////////

function val_webDropDownValueChanged(sender, eventArgs) {
    var targetField = sender._element;
    //we pass .name because .id has changed (id: ct$100_Maincontent_cboRole, name: cboRole)
    val_validatecombo(targetField.name);
}
function val_webDropDownGainedFocus(sender, eventArgs) {
    var targetField = sender._element;
    var parentDiv = $("#" + targetField.id).parent()[0];
    if ($(parentDiv).find(">div").length > 1) {
        $(parentDiv).find(">div:eq(0)").remove(); //delete icon
        $("#" + targetField.id + " input.igdd_ValueDisplay").css("margin-left", "10px");
        $("#" + targetField.id + " input.igdd_ValueDisplay").css("width", $("#" + targetField.id + " td:eq(0)").width() - 30 + "px");
    }
}
function val_webMonthDropDownValueChanged(sender, eventArgs) {
    var targetField = sender._element;
    //we pass .name because .id has changed (id: ct$100_Maincontent_cboRole, name: cboRole)
    val_validatemonthcombo(targetField.name);
}

function val_daysInMonth(month, year) {
    var m = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    if (month != 2) return m[month - 1];
    if (year % 4 != 0) return m[1];
    if (year % 100 == 0 && year % 400 != 0) return m[1];
    return m[1] + 1;
}
function val_checkIfDayIsValid() {
    var days;
    if ($("#txtYear").val() == "") { days = val_daysInMonth($find("MainContent_cboMonth").get_selectedItem().get_value(), new Date().getFullYear()); }
    else { days = val_daysInMonth($find("MainContent_cboMonth").get_selectedItem().get_value(), $("#txtYear").val()); }

    if (days == undefined) {
        //either month or year wasnt available at time of checking,
        if ($("#txtDay").val() > 31) { $("#txtDay").attr("value", 31); validated = false; }
    }
    else {
        if ($("#txtDay").val() > days) { $("#txtDay").attr("value", days); validated = false; }
        else { validated = true; }
    }
}

///////////////////////// Show Loading Button /////////////////////////////////

function ShowLoadingAnimation(mode, element_id) {
    //alert("ShowLoadingAnimation("+mode+ ","+element_id+")");
    if (mode.toUpperCase() == "SHOW") {
        //alert($("#" + element_id).length);
        $("#" + element_id).css("display", "none");
        if (element_id.indexOf("fbActionLink") <= 0) { $("<img src='/Images/buttonsDeativateAnimation.gif' id='" + element_id + "LoadingAnimation' alt='Loading' style='float:right; margin-top:20px'/>").insertBefore("#" + element_id); }
        else { $("<img src='/Images/buttonsDeativateAnimation.gif' id='" + element_id + "LoadingAnimation' alt='Loading' style='margin-top:20px' />").insertBefore("#" + element_id); }
    }
    else if (mode.toUpperCase() == "HIDE" && $("#" + element_id).length > 0) {
        //alert($("#" + element_id).length);
        $("#" + element_id).css("display", "block");
        $("#" + element_id + "LoadingAnimation").remove();
    }
}
