﻿//jQuery Form Validation for ShopRite Family
//resource:http://docs.jquery.com/Plugins/Validation

///<reference path="lib/jquery-1.2.6-vsdoc.js" />
///<reference path="lib/jquery.validate.js" />
///<reference path="lib/jquery.maskedinput.js" />
///<reference path="lib/jquery.metadata.js" />

$(function() {

    //display correct amount of rows determined by hidden field(hf)
    updateRows("hf");

    $(".dob").mask("99/99/9999");

    var validator = $("#frmRegister").validate({
        debug: true,
        errorElement: "em",
        errorContainer: $("#summary"),
        errorPlacement: function(error, element) { error.appendTo(element.parent("td")); },
        submitHandler: function(form) {
            //insert loading gif to show that something is happening
            $("#captchaCell").append("<img id='captchaLoading' src='themes/default/images/loading.gif' alt='loading...'/>");

            //ensure that the result field does not exist prior to ajax call(only needed for testing)    
            if ($("#captchaResult")) $("#captchaResult").remove();

            var challengeField = $("input#recaptcha_challenge_field").val();
            var responseField = $("input#recaptcha_response_field").val();

            $.get("RecaptchaHelper.aspx", "challenge=" + challengeField + "&response=" + responseField,
                    function(data) {
                        $("#captchaLoading").remove(); //remove loading gif
                        $("#captchaCell").append(data);
                        if ($("#captchaResult").val() == "fail" && $("#captchaResult").attr("errorCode") == "incorrect-captcha-sol") {
                            Recaptcha.reload(); //get a new captcha 
                            $("#captchaCell").append("<em id='captchaErr' class='error'>The words entered were not correct, please try again.</em>");
                            $("#captchaResult").remove(); //remove hidden field to prevent duplicates
                        }
                        else if ($("#captchaResult").val() == "fail" && $("#captchaResult").attr("errorCode") != "incorrect-captcha-sol") {
                            Recaptcha.reload(); //get a new captcha 
                            $("#captchaCell").append("<em id='captchaErr' class='error'>There was en error processing your captcha. Please try again later.</em>");
                            $("#captchaResult").remove(); //remove hidden field to prevent duplicates
                        }
                        else if ($("#captchaResult").val() == "pass") {
                            //alert("Form Sumbitted.");
                            form.postBack.value = 1; form.submit();
                        }
                    }, "html");
        },
        rules: {//validation rules are defined here
            numkids: {
                required: true,
                min: 0
            },
            waiver: {
                required: true
            }
        },
        messages: {
            cFname0: {
                required: "A first name is required.",
                minlength: "The first name must be at least 2 characters.",
                maxlength: "The first name cannot exceed 12 characters."
            },
            cLname0: {
                required: "A last name is required.",
                minlength: "The last name must be at least 2 characters.",
                maxlength: "The last name cannot exceed 18 characters."
            },
            cFname1: {
                required: "A first name is required.",
                minlength: "The first name must be at least 2 characters.",
                maxlength: "The first name cannot exceed 12 characters."
            },
            cLname1: {
                required: "A last name is required.",
                minlength: "The last name must be at least 2 characters.",
                maxlength: "The last name cannot exceed 18 characters."
            },
            cFname2: {
                required: "A first name is required.",
                minlength: "The first name must be at least 2 characters.",
                maxlength: "The first name cannot exceed 12 characters."
            },
            cLname2: {
                required: "A last name is required.",
                minlength: "The last name must be at least 2 characters.",
                maxlength: "The last name cannot exceed 18 characters."
            },
            cFname3: {
                required: "A first name is required.",
                minlength: "The first name must be at least 2 characters.",
                maxlength: "The first name cannot exceed 12 characters."
            },
            cLname3: {
                required: "A last name is required.",
                minlength: "The last name must be at least 2 characters.",
                maxlength: "The last name cannot exceed 18 characters."
            },
            cFname4: {
                required: "A first name is required.",
                minlength: "The first name must be at least 2 characters.",
                maxlength: "The first name cannot exceed 12 characters."
            },
            cLname4: {
                required: "A last name is required.",
                minlength: "The last name must be at least 2 characters.",
                maxlength: "The last name cannot exceed 18 characters."
            },
            cFname5: {
                required: "A first name is required.",
                minlength: "The first name must be at least 2 characters.",
                maxlength: "The first name cannot exceed 12 characters."
            },
            cLname5: {
                required: "A last name is required.",
                minlength: "The last name must be at least 2 characters.",
                maxlength: "The last name cannot exceed 18 characters."
            },
            cFname6: {
                required: "A first name is required.",
                minlength: "The first name must be at least 2 characters.",
                maxlength: "The first name cannot exceed 12 characters."
            },
            cLname6: {
                required: "A last name is required.",
                minlength: "The last name must be at least 2 characters.",
                maxlength: "The last name cannot exceed 18 characters."
            },
            cFname7: {
                required: "A first name is required.",
                minlength: "The first name must be at least 2 characters.",
                maxlength: "The first name cannot exceed 12 characters."
            },
            cLname7: {
                required: "A last name is required.",
                minlength: "The last name must be at least 2 characters.",
                maxlength: "The last name cannot exceed 18 characters."
            },
            cFname8: {
                required: "A first name is required.",
                minlength: "The first name must be at least 2 characters.",
                maxlength: "The first name cannot exceed 12 characters."
            },
            cLname8: {
                required: "A last name is required.",
                minlength: "The last name must be at least 2 characters.",
                maxlength: "The last name cannot exceed 18 characters."
            },
            cFname9: {
                required: "A first name is required.",
                minlength: "The first name must be at least 2 characters.",
                maxlength: "The first name cannot exceed 12 characters."
            },
            cLname9: {
                required: "A last name is required.",
                minlength: "The last name must be at least 2 characters.",
                maxlength: "The last name cannot exceed 18 characters."
            }
        }
    });

    //Validation for frmLogin - found on multiple pages    
    $("#frmLogin").validate({
        errorPlacement: function(error, element) { error.appendTo($('#loginErrLbl')); },
        submitHandler: function(form) { form.submit(); },
        rules: {
            login_email: {
                required: true,
                email: true
            },
            login_password: {
                required: true
            }
        },
        messages: {
            login_email: {
                required: "Enter your email address.",
                email: "Invalid email entered."
            },
            login_password: {
                required: "Enter your password."
            }
        }
    });

    var validator = $("#frmContactUs").validate({
        debug: true,
        errorElement: "em",
        submitHandler: function(form) { form.postBack.value = 1; form.submit(); },
        rules: {//validation rules are defined here
            fName: {
                required: true,
                minlength: 2
            },
            lName: {
                required: true,
                minlength: 2
            },
            email: {
                required: true,
                email: true
            },
            msg: {
                required: true,
                minlength: 10
            }
        }
    });
});

function updateRows(source) {//dynamically updates child rows (handles display && jQuery validation)
    
    switch (source) {
        case "dd": howmany = $("#numkids").val(); break; //get row val from dropDown
        case "hf": howmany = $("#kidRows").val(); break; //get row val from hidden field (for postback validation || return users)
    }
    
    if (howmany >= 0) {
        var count = 10 - ($(".childRow:hidden").length); //Count = All - Hidden

        if (howmany > count) {//add rows
            for (var i = count; i < howmany; i++) {
                //show row
                $("#r" + i).show("slow");
                //apply validation rules
                $("#cFname" + i).rules("add", { required: true, minlength: 2, maxlength: 12 });
                $("#cMname" + i).rules("add", { maxlength: 1 });
                $("#cLname" + i).rules("add", { required: true, minlength: 2, maxlength: 18 });
                $("#cGender" + i).rules("add", { required: true });
                $("#cDOB" + i).rules("add", { required: true, date: true });
            }
        } 
        else if (howmany < count) {//remove rows
            for (var i = count - 1; i >= howmany; i--) {
                //hide row
                $("#r" + i).hide("slow");
                //remove validation rules
                $("#cFname" + i).rules("remove");
                $("#cMname" + i).rules("remove");
                $("#cLname" + i).rules("remove");
                $("#cGender" + i).rules("remove");
                $("#cDOB" + i).rules("remove");
            }
        }
    }
}
