﻿/// <reference path="jquery-1.3.1-vsdoc.js"/>
/// <reference path="Logger.js"/>

/// Handpicked.Login - deals specifically at the Login popup
if (Handpicked.Login == null || typeof (Handpicked.Login) != "object") {
    Handpicked.Login = function () {

        var options = {
            closeHandle: ".popupContactClose, #backgroundPopup",
            errorContainer: "#popupContent .errors",
            loginUrl: "/LoginHandler.ashx",
            cookieUrl: "/SetAuthenticationCookieHandler.ashx",
            forgotUrl: '/ForgotPasswordHandler.ashx'
        };

        var login_username_id = "#login_username";
        var login_password_id = "#login_password";
        var login_rememberme_id = "#login_rememberme";
        var login_button_id = "#login_botton";
        var login_spinner_id = "#login_spinner";
        var errors_ul_id = "#" + options.errorContainerId;
        var login_content_id = "#login_content";
        var login_success_content_id = "#login_success";
        var login_popup = $("#loginPopup");
        var dialog = null;
        var checkingForgottenPassword = false;
        var successPageUrl = null;

        function initialise() {

            $.extend(options, { 'onClose': function () {
                $('.popupMainTitle').removeClass('sIFR-replaced').text('Please Sign In');
                $('div.default', login_popup).removeClass('jsHide').siblings('div').addClass('jsHide');
            }
            });

            dialog = new Handpicked.Dialog(login_popup, options);

            $(".showLogin").click(function () {
                var url = $(this).attr('href');
                if (url !== "#" && url !== "") {
                    successPageUrl = url;
                }
                else {
                    successPageUrl = getFromQuerystring();
                }

                dialog.open();
                $('#loginBtn', login_popup).hover(function () {
                    $(this).attr('src', '/images/popups/sign_in_on.png');
                }, function () {
                    $(this).attr('src', '/images/popups/sign_in.png');
                });
                return false;
            });

            $(".showLogout").click(function () {
                //log out
                $.post(options.loginUrl, { logout: "True" }, function () {
                    window.location = '/';
                });
                return false;
            });

            $(".showPasswordReminder").click(function () {
                matches = /(\#[a-z_]+)/.exec(this.href);
                $(matches[1]).removeClass('jsHide');
                $('#login_content').addClass('jsHide');
                $(options.errorContainer).html("").hide();
                $('.popupMainTitle').removeClass('sIFR-replaced').text('Password Reminder');
                $('#reminderBtn', login_popup).hover(function () {
                    $(this).attr('src', '/images/popups/submit_on.png');
                }, function () {
                    $(this).attr('src', '/images/popups/submit.png');
                });
                return false;
            });

            $(document).keypress(function (e) {

                var browser = navigator.appName;

                if (e.keyCode == 13 && e.target.id == "login_password") {
                    var loginBtn = document.getElementById("loginBtn");
                    loginBtn.focus();
                    loginBtn.click();
                }
            });
        }

        function getFromQuerystring() {
            var retUrl = $.QueryString["ReturnUrl"]
            if (retUrl != null && retUrl !== "")
                return retUrl;
            return null;
        }

        function reminder() {

            var data = { IsPostBack: "True", Username: $('#forgot_email').val() };

            if (validateLogin() && !checkingForgottenPassword) {
                checkingForgottenPassword = true;
                var forgotDiv = $('#forgot_errors');
                forgotDiv.before('<div id="forgot_checking" class="ui-state-hightlight"><img src="/images/ajax-loader.gif"/><strong>Checking your email address</strong></div>');
                $.ajax({
                    type: "POST",
                    url: options.forgotUrl,
                    dataType: "json",
                    data: data,
                    success: PasswordReminderSuccess,
                    timeout: 500000000000,
                    error: function (data) {
                        checkingForgottenPassword = false;
                        $('#forgot_checking').remove();
                        dialog.errors(["Something went wrong on the server. Please try again"]);
                    }
                });
            }
        }

        function PasswordReminderSuccess(data) {

            var forgotDiv = $('#forgot_content');
            var forgotSuccessDiv = $('#forgot_success');
            $('#forgot_checking').remove();
            checkingForgottenPassword = false;

            if (data.Success) {
                forgotDiv.addClass('jsHide');
                forgotSuccessDiv.removeClass('jsHide');
            }
            else {
                dialog.errors(data.Errors);
            }
        }

        function goToSuccessPage() {
            if (successPageUrl) {
                window.setTimeout("window.location.href = '" + successPageUrl + "'", 1500);
            }
            else {
                window.setTimeout('location.reload()', 3000);
            }
        }

        function login() {
            var data = "username=" + login_popup.find(login_username_id).val() + "&password=" + login_popup.find(login_password_id).val() + "&rememberme=" + document.getElementById("login_rememberme").checked;
            dialog.clearErrors();
            show_spinner();
            $.ajax({
                type: "POST",
                url: options.loginUrl,
                dataType: "json",
                data: data,
                success: function (data) {
                    if (data.Success) {
                        show_success_message();
                        set_cookie();
                        goToSuccessPage();
                    }
                    else {
                        hide_spinner();
                        dialog.errors(data.Errors);
                    }
                },
                timeout: 30000,
                error: function () {
                    hide_spinner();
                    dialog.errors(["Something went wrong on the server. Please try again"]);
                }
            });
        }

        function show_success_message() {
            login_popup.find(login_content_id).hide();
            login_popup.find(login_success_content_id).show();
        }

        function set_cookie() {
            var date = new Date();
            var time = "?" + date.getTime();
            var cookieUrl = options.cookieUrl + time;
            $.post(cookieUrl, null, function () {
                //setTimeout(show_errors, 500);
            });
        }

        function show_spinner() {
            login_popup.find(login_button_id).hide();
            login_popup.find(login_spinner_id).show();
        }

        function hide_spinner() {
            login_popup.find(login_button_id).show();
            login_popup.find(login_spinner_id).hide();
        }

        function cancel() {
            dialog.close();
        }

        return {
            init: initialise,
            login: login,
            cancel: cancel,
            reminder: reminder
        }
    } ();

}

function validateLogin() {

    var errors = [];
    ValidateForgotPasswordDetails(errors);
    if (errors.length > 0) {
        var errorMessage = "";
        var error = null;
        for (var i = 0; i < errors.length; i++) {
            errorMessage += errors[i] + "\n";
        }
        alert(errorMessage);
        return false;
    }

    return true;
}

function ValidateForgotPasswordDetails(errors) {

    if ($("#forgot_email").val() == "") { errors.push("Please provide your username, which is your email address."); }

    if (!regexValidate($("#forgot_email").val(), /[\w!#$%*\/?|\^\{\}\'~\.]+@(\w+\.)*\w{2,3}/)) {
        errors.push("Please enter a valid email address");
    }
}

function regexValidate(value, regexExpression) {
    if (!value || !regexExpression) return false;

    return regexExpression.test(value);
}

//allow access to the querystring params throught $.QueryString['name']
(function ($) {
    $.QueryString = (function (a) {
        if (a == "") return {};
        var b = {};
        for (var i = 0; i < a.length; ++i) {
            var p = a[i].split('=');
            if (p.length != 2) continue;
            b[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " "));
        }
        return b;
    })(window.location.search.substr(1).split('&'))
})(jQuery);
