﻿$.fn.SignInControls = function (options) {
    var container = this;
    var options = jQuery.extend({
        signInOptionsContainer: $("#signInOptionsContainer"),
        siteName: ""
    }, options);
    container.data("signInOptionsContainer", options.signInOptionsContainer);
    container.data("siteName", options.siteName);
    $.SignInControls.Attach(container);
    return this;
};

$.SignInControls = {
    NewUserData: function (title, firstname, lastname, emailAddress, password, activationUrl, webSiteName) {
        this.Title = title;
        this.FirstName = firstname;
        this.LastName = lastname;
        this.EmailAddress = emailAddress;
        this.Password = password;
        this.ActivationUrl = activationUrl;
        this.WebSiteName = webSiteName;
    },

    UserData: function (email, password) {
        this.Email = email;
        this.Password = password;
    },

    ItemCallBack: function (result) {
        eval(result);
    },

    OnError: function (result) {

    },

    Attach: function (container) {
        container.data("signInOptionsContainer").dialog({ autoOpen: false, modal: true, stack: true, resizable: false, draggable: false, width: 800, position: ["center", 80] });
        container.data("signInOptionsContainer").parent().appendTo($("form:first"));
        container.find(".signInLink").unbind("click");
        container.find(".signInLink").click(function () {
            container.data("signInOptionsContainer").dialog("open");
            container.data("signInOptionsContainer").find("#CreateAccount").hide();
            container.data("signInOptionsContainer").find("#ExistingAccount").show();
            return false;
        });

        container.find(".signOutLink").unbind("click");
        container.find(".signOutLink").click(function () {
            jQuery.post("/UserAccounts/Handlers/Logout.ashx",
                { sessionId: GetSessionId() },
                function () {
                    var redirectUrl = GetLogoutRedirectUrl()
                    if (redirectUrl != "") {
                        window.location = redirectUrl;
                    } else {
                        container.find(".login").show();
                        container.find(".loggedIn").hide();
                    }
                    return false;
                });
        });
        var lblAccountPrompt = container.data("signInOptionsContainer").find(".lblAccountPrompt");
        var accountLink = container.data("signInOptionsContainer").find("#accountLink");
        accountLink.unbind("click");
        accountLink.click(function () {
            if ($(this).text() == "Sign up here") {
                $(this).text("Sign In");
                container.data("signInOptionsContainer").find("#CreateAccount").show();
                container.data("signInOptionsContainer").find("#ExistingAccount").hide();
                if (container.data("siteName").length > 0) {
                    lblAccountPrompt.text("Already have a " + container.data("siteName") + " account?");
                } else {
                    lblAccountPrompt.text("Already have an account?");
                }
            } else {
                $(this).text("Sign up here");
                container.data("signInOptionsContainer").find("#ExistingAccount").show();
                container.data("signInOptionsContainer").find("#CreateAccount").hide();
                if (container.data("siteName").length > 0) {
                    lblAccountPrompt.text("If you don't have a " + container.data("siteName") + " account");
                } else {
                    lblAccountPrompt.text("Want an account?");
                }
            }
        });
        var signInForm = $("<form id='signInForm' class='signInForm'/>");
        $("#ExistingAccount").wrapInner(signInForm);
        signInForm = $("#ExistingAccount").find("#signInForm");
        signInForm.validate({
            errorContainer: signInForm.find(".errors"),
            errorLabelContainer: $('ul', signInForm.find(".errors")),
            onfocusout: false,
            errorClass: "error",
            wrapper: "li"
        });

        signInForm.find("#btnSignIn").unbind("click");

        signInForm.find("#btnSignIn").click(function () {
            var user = new $.SignInControls.UserData(
                signInForm.find("#txtEmailAddress").val(),
                signInForm.find("#txtSignInPassword").val()
            );
            _userAccountProxy.SignIn(user, $.SignInControls.ItemCallBack, $.SignInControls.OnError);
            return false;
        });

        var signUpForm = $("<form id='signUpForm' class='signUpForm'/>");
        $("#CreateAccount").wrapInner(signUpForm);
        signUpForm = $("#CreateAccount").find("#signUpForm");
        signUpForm.validate({
            errorContainer: signUpForm.find(".errors"),
            errorLabelContainer: $('ul', signUpForm.find(".errors")),
            onfocusout: false,
            errorClass: "error",
            wrapper: "li",
            rules: { txtSignUpPassword: { minlength: 7 }, txtReEnterPassword: { equalTo: "#txtSignUpPassword"} },
            messages: { txtSignUpPassword: { minlength: "Passwords must be a least 7 characters long" }, txtReEnterPassword: { equalTo: "The passwords do not match"} }
        });

        signUpForm.find("#btnSignUp").unbind("click");
        signUpForm.find("#btnSignUp").click(function () {
            var newAccount = new $.SignInControls.NewUserData(
                signUpForm.find("#ddlTitle").val(),
                signUpForm.find("#txtFirstName").val(),
                signUpForm.find("#txtLastName").val(),
                signUpForm.find("#txtEmail").val(),
                signUpForm.find("#txtSignUpPassword").val(),
                signUpForm.find("#hdnActivationPage").val(),
                container.data("siteName")
            );
            _userAccountProxy.CreateNewAccount(newAccount, $.SignInControls.ItemCallBack, $.SignInControls.OnError);
            return false;
        });
    },

    UserAccountCreated: function (result) {
        if (result) {
            $(".createAccountDetails").hide();
            $(".createAccount>.errors").hide();
            $(".emailNotice").show();
        } else {
            $(".createAccount>.errors>ul").html("<li>Account creation failed please try again</li>");
            $(".createAccount>.errors").show();
        }
    },

    UserSignedIn: function (sessionId) {
        var redirectUrl = $('#hdnLoggedInRedirect').val();
        window.location.href = redirectUrl;
        return false;
    },

    UserNotSignedIn: function (errorMessage) {
        var errorsDiv = $('#loginErrors');

        errorsDiv.text(errorMessage);
        errorsDiv.show();
        return false;
    }
};
