﻿SignInSignOutRegister = function() {

    var ProfileManager = "/_assets/dynamic/Modules/ProfileTools/WS/ProfileManager.asmx";

    var InitUI = function() {


        // Setup for when user not signed in	    
        $(".sign-in-or-register, li.sign-in").unbind("click").click(function() {
            VH.CAL.OnHideCalendar();
            ShowSignInOrRegister(false)
        });

        // Setup for when user signed in
        $(".sign-out a.signout").unbind("click").click(function() {

            $.cookie('credentials', null); // clear cookie

            $.getJSON(
			    $.CreateDotNetRemoteMethodCall(
			        ProfileManager,
			        "DoSignOut"
			    ),
			    null,
			    DoSignOut
			);
        });
    };

    var ShowSignInOrRegister = function(IsRegistering) {
        $.getJSON(
	        $.CreateDotNetRemoteMethodCall(
	            ProfileManager,
	            "ShowSignInOrRegister",
	            IsRegistering
	        ),
	        null,
	        DoShowSignInOrRegister
	    );
    };


    ///// CALLBACK FUNCTIONS BELOW /////

    var DoShowSignInOrRegister = function(response) {
        // Hide search form selects (for !$%#ing IE6) 
        $("select").addClass("hide");
        close_myitinerary()
        if ((jQuery.browser.msie) && (jQuery.browser.version.indexOf("6.") != -1)) {
            $("select").css("visibility", "hidden");
        }

        // Inject html for sign in window
        $("#signInOrRegisterContainer").html(response.Html);

        $("#MyItinerarySignIn").prepend('<div class="shadowSide"><div class="top"></div><div class="mid"></div></div>')
        $("#MyItinerarySignIn").append('<div class="shadowFooter"><div class="lft"></div><div class="rgt"></div><div class="mid"></div></div>')

        // Show sign in window
        $("#signInOrRegister").removeClass("hide").addClass("show");

        // Decide which screen to display i.e sign in or register
        if (response.Properties.IsRegistering) {
            $("#signInContainer").removeClass("show").addClass("hide");
            $("#registerContainer").removeClass("hide").addClass("show");
            $("#register_displayname").focus();
        }
        else {
            // Focus on the email address field
            $("#signin_emailaddress").focus();
        }

        // Register "Enter" key event...
        $("#signInContainer").unbind("keypress").keypress(function(e) {
            if (e.which == 13) {
                e.preventDefault();
                $("#doSignIn").click();
            }
        });

        $("#registerContainer").unbind("keypress").keypress(function(e) {
            if (e.which == 13) {
                e.preventDefault();
                $("#doRegister").click();
            }
        });

        $("#generateNewPasswordContainer").unbind("keypress").keypress(function(e) {
            if (e.which == 13) {
                e.preventDefault();
                $("#doGenerateNewPassword").click();
            }
        });

        $("#MyItinerarySignIn .close").unbind("click").click(function() {
            $("#signInOrRegister").removeClass("show").addClass("hide");
            // Show search form selects again (for !$%#ing IE6)
            $("#SearchForm select").removeClass("hide");

            if ((jQuery.browser.msie) && (jQuery.browser.version.indexOf("6.") != -1)) {
                $("select").css("visibility", "visible");
            }

        });

        $("#showSignInContainer").unbind("click").click(function() {
            $("#registerContainer").removeClass("show").addClass("hide");
            $("#generateNewPasswordContainer").removeClass("show").addClass("hide");
            $("#signInContainer .error").removeClass("show").addClass("hide");
            $("#signInContainer").removeClass("hide").addClass("show");
            $("#signin_emailaddress").focus();
        });

        $("#showRegisterContainer").unbind("click").click(function() {
            $("#signInContainer").removeClass("show").addClass("hide");
            $("#generateNewPasswordContainer").removeClass("show").addClass("hide");
            $("#registerContainer .error").removeClass("show").addClass("hide");
            $("#registerContainer").removeClass("hide").addClass("show");
            $("#register_displayname").focus();
        });

        $("#showGenerateNewPasswordContainer").unbind("click").click(function() {
            $("#signInContainer").removeClass("show").addClass("hide");
            $("#registerContainer").removeClass("show").addClass("hide");
            $("#generateNewPasswordContainer .error").removeClass("show").addClass("hide");
            $("#generateNewPasswordContainer").removeClass("hide").addClass("show");
            $("#generatenewpassword_emailaddress").focus();
        });

        $("#showTermsInfoContainer").unbind("click").click(function() {
            $("#registerInfoContainer").removeClass("show").addClass("hide");
            $("#termsInfoContainer").removeClass("hide").addClass("show");
        });

        $("#doSignIn").unbind("click").click(function() {

            var height = $("#signInContainer .box").height();
            $("#signInContainer .box").removeClass("show").addClass("hide");
            
            $("#signInContainer .loading").removeClass("hide").addClass("show")
            if (height != null) {
                $("#signInContainer .loading").height(height);
            }
            
            $("#signInContainer .error p").text("");
            $.getJSON(
		        $.CreateDotNetRemoteMethodCall(
		            ProfileManager,
		            "DoSignIn",
		            $("#signin_emailaddress").val(),
		            $("#signin_password").val()
		        ),
		        null,
		        DoSignIn
		    );
        });

        $("#doRegister").unbind("click").click(function() {

            $("#registerContainer .error p").text("");
            if (!$("#userAgreement").attr("checked")) {
                DoRegister({ Success: false, Response: "You must agree to our terms and conditions to register." });
            }
            else if ($.trim($("#register_displayname").val()) == "") {
                DoRegister({ Success: false, Response: "You must enter a display name or we won't know what to call you." });
            }
            else if ($.trim($("#register_emailaddress").val()) == "") {
                DoRegister({ Success: false, Response: "You must enter an email address to register with Virgin Holidays" });
            }
            else if ($.trim($("#register_password1").val()) == "") {
                DoRegister({ Success: false, Response: "You must enter a password so that you can log in again." });
            }
            else if ($("#register_password1").val() != $("#register_password2").val()) {
                DoRegister({ Success: false, Response: "Your passwords don't match. Please enter them again." });
            }
            else {
                var height = $("#registerContainer .box").height();
                $("#registerContainer .box").removeClass("show").addClass("hide");
                
                $("#registerContainer .loading").removeClass("hide").addClass("show")
                
                if (height != null) {
                    $("#signInContainer .loading").height(height);
                }
                
                $.getJSON(
		            $.CreateDotNetRemoteMethodCall(
		                ProfileManager,
		                "DoRegister",
		                $("#register_displayname").val(),
		                $("#register_emailaddress").val(),
		                $("#register_password1").val()
		            ),
		            null,
		            DoRegister
		        );
            }
        });

        $("#doGenerateNewPassword").unbind("click").click(function() {
            var height = $("#generateNewPasswordContainer .box").height();
            $("#generateNewPasswordContainer .box").removeClass("show").addClass("hide");
            $("#generateNewPasswordContainer .infoBox").removeClass("show").addClass("hide");
            $("#generateNewPasswordContainer .error").removeClass("show").addClass("hide");
            $("#generateNewPasswordContainer .loading").removeClass("hide").addClass("show").height(height);

            $.cookie('credentials', null, { expires: -1 }); // clear cookie

            $.getJSON(
			    $.CreateDotNetRemoteMethodCall(
			        ProfileManager,
			        "DoGenerateNewPassword",
		            $("#generatenewpassword_emailaddress").val()
			    ),
			    null,
			    DoGenerateNewPassword
			);
        });
    };

    var DoSignIn = function(response) {
        if (response.Success == true) {
            $("#signInContainer").removeClass("show").addClass("hide");
            $("#logginginContainer").removeClass("hide").addClass("show");
            if ($("#signin_remember")[0].checked) {
                $.cookie('credentials', response.Properties.Credentials, { expires: 90, path: "/" });
            }
            // Refresh the page
            cmCreateRegistrationTag($("#signin_emailaddress").val(), $("#signin_emailaddress").val())
            var location = document.location.href.replace(/#.*/, "");
            document.location.href = location;
        }
        else {
            // Sign in failed so show inline error
            $("#signInContainer .loading").removeClass("show").addClass("hide");
            $("#signInContainer .box").removeClass("hide").addClass("show");

            $("#signInContainer .error p").text("Invalid username or password.")
            $("#signInContainer .error").removeClass("hide").addClass("show");
        }
    };

    var DoSignOut = function() {
        // Return to homepage
        document.location.href = "/";
    };

    var DoRegister = function(response) {
        if (response.Success == true) {
            // Hide the sign in window
            $("#signInOrRegister").removeClass("show").addClass("hide");
            // Show search form selects again (for !$%#ing IE6)
            $("#SearchForm select").removeClass("hide");

            // Refresh the page
            cmCreateRegistrationTag($("#register_emailaddress").val(), $("#register_emailaddress").val())
            var location = document.location.href.replace(/#.*/, "");
            document.location.href = location;
        }
        else {
            // Inform the user that registration was unsuccessful
            $("#registerContainer .loading").removeClass("show").addClass("hide");
            $("#registerContainer .box").removeClass("hide").addClass("show");

            $("#registerContainer .error p").text(response.Response)
            $("#registerContainer .error").removeClass("hide").addClass("show");
        }
    };

    var DoGenerateNewPassword = function(response) {
        $("#generateNewPasswordContainer .loading").removeClass("show").addClass("hide");
        $("#generateNewPasswordContainer .box").removeClass("hide").addClass("show");

        if (response.Success == true) {
            $("#generateNewPasswordContainer .infoBox p").text(response.Response)
            $("#generateNewPasswordContainer .infoBox").removeClass("hide").addClass("show");
        }
        else {
            $("#generateNewPasswordContainer .error p").text(response.Response)
            $("#generateNewPasswordContainer .error").removeClass("hide").addClass("show");
        }
    };

    return {
        InitUI: InitUI,
        ShowSignInOrRegister: ShowSignInOrRegister
    };

} ();
  