﻿$(document).ready(function() {
    // make sure the panes are reset on page load
    managePanes(null);

    // load form element values
    $("#DOBYear").loadDobYears();
    $("#HowHeard").loadHowHeard();
    $("#CCExpYear").loadCreditCardExpYears();

    $("#FirstName").focus();

    $("input.ZipCodeMask").mask("99999");
    $("input.PhoneMask").mask("999-999-9999");

    $.metadata.setType("attr", "validate");

    $("form").validate({
        groups: {
            DateOfBirth: "DOBMonth DOBDay DOBYear"
        },
        rules: {
            FirstName: {
                required: true,
                minlength: 2
            },
            LastName: {
                required: true,
                minlength: 2
            },

            Phone: {
                required: true
            },
            PhoneType: "required",
            Email: {
                required: true,
                email: true
            },
            DOBMonth: "required",
            DOBDay: "required",
            DOBYear: "required",
            AdviceQuestion: {
                required: true,
                maxWords: 250
            },
            CCName: {
                required: true
            },
            Street1: {
                required: true
            },
            City: {
                required: true
            },
            State: {
                required: true
            },
            PostalCode: {
                required: true,
                minlength: 5
            },
            CCType: {
                required: true
            },
            CCNumber: {
                required: true,
                creditcard: true
            },
            CCCode: {
                required: true,
                minlength: 3
            },
            IAgree: "required"
        },
        messages: {
            FirstName: {
                required: "Please enter your first name",
                minlength: "Please enter your valid first name"
            },
            LastName: {
                required: "Please enter your last name",
                minlength: "Please enter your valid last name"
            },
            Phone: "Please enter your contact phone",
            PhoneType: "You must select your phone type",
            Email: {
                required: "Please enter your email",
                email: "Please enter your valid email"
            },
            DOBMonth: "Please select your date of birth",
            DOBDay: "Please select your date of birth",
            DOBYear: "Please select your date of birth",
            AdviceQuestion: {
                required: "Please enter your question",
                maxWords: "You have entered more than 250 words"
            },
            CCName: {
                required: "Please enter the name on the credit card"
            },
            Street1: {
                required: "Please enter your billing street"
            },
            City: {
                required: "Please enter your billing city"
            },
            State: {
                required: "Please enter your billing state"
            },
            PostalCode: {
                required: "Please enter your billing zip code",
                minlength: "Please enter a valid zip code"
            },
            CCType: {
                required: "Please select the credit card type"
            },
            CCNumber: {
                required: "Please enter the credit card number"
            },
            CCCode: {
                required: "Please enter the security code",
                minlength: "Please enter a valid security code"
            },
            IAgree: "You must agree to our Privacy Policy and Members' Lounge Agreement"
        },
        errorElement: "p",
        errorClass: "errorField",
        errorPlacement: function(error, element) {
            error.insertBefore(element.prev("label"));
        }
    });

    // validate the other two selects when one changes to update the whole group
    var dateOfBirthSelects = $("#DateOfBirthGroup select").click(function() {
        dateOfBirthSelects.not(this).valid();
    });

    // Bind the ajax form submit
    $("form").bind('submit', function() {
        // Create object and load with form values
        var adviceSignupForm = {
            FirstName: $('#FirstName').val(),
            LastName: $('#LastName').val(),
            Phone: $('#Phone').val(),
            PhoneType: $('#PhoneType').val(),
            Email: $('#Email').val(),
            EmailConfirm: $('#EmailConfirm').val(),
            DateOfBirth: $('#DOBMonth').val() + "/" + $('#DOBDay').val() + "/" + $('#DOBYear').val(),
            Gender: $("input[@name='Gender']:checked").val(),
            HowHeard: $('#HowHeard').val(),
            AdviceQuestion: $('#AdviceQuestion').val(),
            CCName: $('#CCName').val(),
            Street1: $('#Street1').val(),
            Street2: $('#Street2').val(),
            City: $('#City').val(),
            State: $('#State').val(),
            PostalCode: $('#PostalCode').val(),
            CCType: $('#CCType').val(),
            CCNumber: $('#CCNumber').val(),
            CCExpMonth: $('#CCExpMonth').val(),
            CCExpYear: $('#CCExpYear').val(),
            CCCode: $('#CCCode').val(),
            SessionID: $('#SessionID').val(),
            RemoteAddress: $('#RemoteAddress').val(),
            EntryPage: $('#EntryPage').val(),
            Referrer: $('#Referrer').val(),
            Browser: browser,
            Platform: osName
        };

        // Convert the object to a json object
        var formData = Sys.Serialization.JavaScriptSerializer.serialize(adviceSignupForm);

        // Create an proxy instance and send ajax call
        Proxy = new serviceProxy("/services/formservice.svc/");
        Proxy.invoke("saveadvicesignupform", formData, onSuccess, onError);

        // Return false to prevent form postback
        return false;
    });
});

// pre-submit callback 
function preRequest(formData, jqForm, options) {
    // trigger the form validation
    return $("form").validate().form();
}

// ajax response callback
function onSuccess(result) {
    //alert(result);
    eval('var z=' + result);

    switch (z.ServiceStatusCode) {
        case 201:
            managePanes("success", null);
            break;
        case 400:
            managePanes("error", z.ServiceMessage);
            break;
        default:
            managePanes("error", null);
            break;
    }
}

// ajax error callback
function onError(error) {
    managePanes("error", error);
}

// ajax complete callback
function onComplete() {

}

function managePanes(status, message) {
    var inputPane = $("#FormInputPane");
    var errorPane = $("#FormErrorPane");
    //var successPane = $("#FormSuccessPane");

    if (status == "error") {
        inputPane.show();
        if (message != null) {
            errorPane.find("p:first").text(message).end().show();
        } else {
            errorPane.show();
        }
        //successPane.hide();
    } else if (status == "success") {
        inputPane.hide();
        errorPane.hide();
        window.location = "/secure/get-advice/complete";
        //successPane.show();
        //$("div.message-container").show();
    } else {
        inputPane.show();
        errorPane.hide();
        //successPane.hide();
    }
}
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();