﻿$(document).ready(function() {

    // Expand Panel
    $("a.open").click(function() {
        $("div.accounts_panel").slideDown("slow");
        $("div.accounts_panel").removeClass("hidden")
        $("div.accounts_panel").addClass("visible")
    });

    // Collapse Panel
    $("a.close").click(function() {
        $("div.accounts_panel").slideUp("slow");
        $("div.accounts_panel").removeClass("visible")
        $("div.accounts_panel").addClass("hidden")
    });

    if ($("div.accounts_panel").hasClass("visible")) {
        $("#toggle a.open").hide();
        $("#toggle a.close").show();
    }

    // Switch buttons from "Log In | Register" to "Close Panel" on click
    $("#toggle a").click(function() {
        $("#toggle a").toggle();
    });
    
    // Account Panel Navigation (once logged in).
    $("ul.account-panel-navigation li").click(function() {
        $("ul.account-panel-navigation > li").removeAttr("class");
        $(this).addClass("active");        
    });
    
    $("ul.account-panel-navigation li").click(function() {
        $("form.account.panel fieldset").hide();
        $("form.account.panel fieldset." + $(this).attr("id")).show();
        enableValidation($(this).attr("id"));
    });
    
    $("ul.account-panel-navigation li#panelAccountMyAccount").click(function() {
        window.location.href = "/accounts/content/accounts.aspx";
    });
    
    /* Validation - START */
    
    //When lggoing out, no validation should be processed - as such remove all rules for validation, oherwise it will still try to validate the fields.
    $("input.logout").click(function() {
	    $("form.account.panel input").each(
	        function() {
	            $(this).rules("remove");
	        }
	    );        
    });
    
    //Extend validator to allow regex to be passed in for validation.
    $.validator.addMethod(
            "regex",
            function(value, element, regexp) {
                if (regexp.constructor != RegExp)
                    regexp = new RegExp(regexp);
                else if (regexp.global)
                    regexp.lastIndex = 0;
                return this.optional(element) || regexp.test(value);
            }            
    );
	
	//Initiate validation.
	$("form.account.panel").validate();	
	if ($("input#hdnCurrentAction").val() == "EditInfo")
	{
	    enableValidation("panelAccountManagement");
	}
	else if ($("input#hdnCurrentAction").val() == "ResetPassword")
	{
	    enableValidation("panelAccountPassword");
    }
	
	
	//This function is called whenever the state is changed on the panels. e.g. from 'View My Details' to 'Edit My Details'.
	//It is used to enable validation rules for the current section that is displayed.  As validation processes an entire form - and all our sections
	//live inside one form - we need to enable validation rules for the current section only and remove all other rules.
	function enableValidation(reqFieldset)
	{
	    $("form.account.panel input").each(
	        function() {
	            $(this).rules("remove");
	        }
	    );
	    
	    if (reqFieldset == "panelAccountManagement")
	    {
            $("div.fullName input").rules("add", {
               required: true,
               messages: { required: "Please enter your full name." } 
            });	
            $("div.addressOne input").rules("add", {
               required: true,
               messages: { required: "Please enter the first line of your address." } 
            });	
            $("div.addressTwo input").rules("add", {
               required: true,
               messages: { required: "Please enter the second line of your address." } 
            });	
            $("div.town input").rules("add", {
               required: true,
               messages: { required: "Please enter your town." } 
            });	
            $("div.postcode input").rules("add", {
               required: true,
               regex: /^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z]))))[ ]{0,1}[0-9][A-Za-z]{2})$/,
               messages: { required: "Please enter a valid postcode.", regex: "Please enter a valid postcode." } 
            });	
            $("div.telephone input").rules("add", {
               required: true,
               regex: /^((\(?0\d{4}\)?\s?\d{3}\s?\d{3})|(\(?0\d{3}\)?\s?\d{3}\s?\d{4})|(\(?0\d{2}\)?\s?\d{4}\s?\d{4}))(\s?\#(\d{4}|\d{3}))?$/,
               messages: { required: "Please enter a valid telephone number.", regex: "Please enter a valid telephone number." } 
            });	
            $("div.mobile input").rules("add", {
               required: true,
               regex: /^(\+44\s?7\d{3}|\(?07\d{3}\)?)\s?\d{3}\s?\d{3}$/,
               messages: { required: "Please enter a valid mobile number.", regex: "Please enter a valid mobile number." } 
            });	
            $("div.email input").rules("add", {
               required: true,
               email: true,
               messages: { required: "Please enter a valid email address." } 
            });	
            $("div.rss input").rules("add", {
               required: true,
               url: true,
               messages: { required: "Please enter a valid RSS feed url." } 
            });	
	    } 
	    
	    if (reqFieldset == "panelAccountPassword")
	    {
            $("div.password-current input").rules("add", {
               required: true,
               messages: { required: "Please enter your current password." } 
            });
            $("div.password-new input").rules("add", {
               required: true,
               minlength: 5,
               messages: { required: "Please enter a valid password." } 
            });
            $("div.password-retype input").rules("add", {
               required: true,
               minlength: 5,
               equalTo: "div.password-new > input",
               messages: { required: "Passwords do not match.", equalTo: "Passwords do not match." } 
            });
            $("div.password-hint-new input").rules("add", {
               required: true,
               messages: { required: "Please enter a hint for your new password." } 
            });
	    }
	}
	/* Validation - FINISH */
});