﻿/*! Copyright © 2010 General Mills. All Rights Reserved. No permission is granted to use, copy or extend this code. */
PFP.namespace('PFP.SignInManager');
PFP.SignInManager =
{
    init: function (sts, msg, loginHandler)
    {
        PFP.SignInManager.loginHandler = loginHandler;

        $j(document).ready(function ()
        {
            /*** DIALOG COMPONENTS ***/
            PFP.SignInManager.signInWrapper = $j('#signInWrapper').dialog(
            {
                autoOpen: false,
                modal: true,
                width: 600,
                title: 'Sign In',
                dialogClass: 'signin-dialog'
            });
            PFP.SignInManager.dialogTitle = $j('#ui-dialog-title-signInWrapper');

            /*** LINKS ***/
            PFP.SignInManager.link = $j('.sign-in-link');
            PFP.SignInManager.lnkForgotPwd = $j('#lnkForgotPwd');

            /*** PANELS ***/
            PFP.SignInManager.pnlSignIn = $j('.sign-in-content');
            PFP.SignInManager.pnlForgotPwd = $j('.forgot-password-content');
            PFP.SignInManager.pnlSuccess = $j('.reset-password-success');

            /*** INPUTS ***/
            PFP.SignInManager.txtEmail = $j('#txtEmail');
            PFP.SignInManager.txtPassword = $j('#txtPassword');
            PFP.SignInManager.txtForgotPwd = $j('#txtForgotPwd');

            /*** BUTTONS ***/
            PFP.SignInManager.btnResendPwd = $j('#btnResendPwd');
            PFP.SignInManager.btnSignIn = $j('#btnSignIn');

            /*** MESSAGES ***/
            PFP.SignInManager.errMsg1 = $j('#errMsg1');
            PFP.SignInManager.errMsg2 = $j('#errMsg2');
            PFP.SignInManager.successMsg = $j('#successMsg');

            /*** EVENT HANDLING ***/
            PFP.SignInManager.btnSignIn.click(PFP.SignInManager.signIn);
            PFP.SignInManager.btnResendPwd.click(PFP.SignInManager.resend);
            PFP.SignInManager.signInWrapper.find('.cancel-btn').click(function ()
            {
                PFP.SignInManager.signInWrapper.dialog('close');
            });
            PFP.SignInManager.link.click(function () { PFP.SignInManager.showDialog(PFP.SignInManager.pnlSignIn, 'Sign In'); });
            PFP.SignInManager.lnkForgotPwd.click(function () { PFP.SignInManager.showDialog(PFP.SignInManager.pnlForgotPwd, 'Forgot Password'); });

            PFP.SignInManager.showStatus(sts, msg);
        });
    },

    isValidEmail: function (email)
    {
        return (/^[^@]+@[^@]+.[a-z]{2,}$/i).test(email)
    },

    showDialog: function (panel, title)
    {
        PFP.SignInManager.pnlSignIn.hide();
        PFP.SignInManager.pnlForgotPwd.hide();
        PFP.SignInManager.pnlSuccess.hide();

        PFP.SignInManager.txtEmail.val('');
        PFP.SignInManager.txtPassword.val('');
        PFP.SignInManager.txtForgotPwd.val('');

        PFP.SignInManager.errMsg1.text('').hide();
        PFP.SignInManager.errMsg2.text('').hide();
        PFP.SignInManager.successMsg.text('').hide();

        panel.show();
        PFP.SignInManager.dialogTitle.text(title);
        PFP.SignInManager.signInWrapper.dialog('open');

        return false;
    },

    showStatus: function (status, msg)
    {
        switch (status)
        {
            case -4: //InvalidLoginOrPassword
                PFP.SignInManager.showDialog(PFP.SignInManager.pnlSignIn, 'Sign In');
                PFP.SignInManager.errMsg1.text(msg).show();
                break;
            case -3: //InvalidEmailAddress
            case -2: //PasswordResetError
                PFP.SignInManager.showDialog(PFP.SignInManager.pnlForgotPwd, 'Forgot Password');
                PFP.SignInManager.errMsg2.text(msg).show();
                break;
            case 2: //PasswordResetSuccess
                PFP.SignInManager.showDialog(PFP.SignInManager.pnlSuccess, 'Success');
                PFP.SignInManager.successMsg.text(msg).show();
                break;
        }
    },

    signIn: function ()
    {
        var email = PFP.SignInManager.txtEmail.val().replace(' ', '');
        var pwd = PFP.SignInManager.txtPassword.val().replace(' ', '');

        PFP.SignInManager.errMsg1.empty().hide();
        if (!PFP.SignInManager.isValidEmail(email))
        {
            PFP.SignInManager.errMsg1.append($j('<span style="display:block;">The email format is invalid.</span>'));
        }

        if (pwd.length == 0)
        {
            PFP.SignInManager.errMsg1.append($j('<span style="display:block;">Please enter your password.</span>'));
        }

        if (PFP.SignInManager.errMsg1.children().length == 0)
        {
            if (PFP.SignInManager.form == null)
            {
                $j('body').append('<form id="myform" name="myform" method="post"></form>');
                PFP.SignInManager.form = $j('#myform');
                PFP.SignInManager.form.append('<input type="text" id="email" name="email" value="' + email + '" />');
                PFP.SignInManager.form.append('<input type="password" id="pwd" name="pwd" value="' + pwd + '" />');
                PFP.SignInManager.form.append('<input type="hidden" id="doAction" name="doAction" value="login" />');
                PFP.SignInManager.form.append('<input type="hidden" id="url" name="url" value="' + window.location.href + '" />');
                PFP.SignInManager.form[0].action = PFP.SignInManager.loginHandler;
                PFP.SignInManager.form[0].submit();
            }
            else
            {
                window.location.reload();
            }
        }
        else
        {
            //display error messages
            PFP.SignInManager.errMsg1.show();
        }
    },

    resend: function ()
    {
        var email = PFP.SignInManager.txtForgotPwd.val();

        PFP.SignInManager.errMsg2.empty().hide();
        if (!PFP.SignInManager.isValidEmail(email))
        {
            PFP.SignInManager.errMsg2.append($j('<span style="display:block;">The email format is invalid.</span>'));
        }

        if (PFP.SignInManager.errMsg2.children().length == 0)
        {
            if (PFP.SignInManager.form == null)
            {
                $j('body').append('<form id="myform" name="myform" method="post"></form>');
                PFP.SignInManager.form = $j('#myform');
                PFP.SignInManager.form.append('<input type="text" id="email" name="email" value="' + email + '" />');
                PFP.SignInManager.form.append('<input type="hidden" id="doAction" name="doAction" value="resend" />');
                PFP.SignInManager.form.append('<input type="hidden" id="url" name="url" value="' + window.location.toString() + '" />');
                PFP.SignInManager.form[0].action = PFP.SignInManager.loginHandler;
                PFP.SignInManager.form[0].submit();
            }
            else
            {
                window.location.reload();
            }
        }
        else
        {
            PFP.SignInManager.errMsg2.show();
        }
    }
};
