﻿/*! Copyright © 2010 General Mills. All Rights Reserved. No permission is granted to use, copy or extend this code. */
QRV.namespace('QRV.Header');
QRV.Header =
{
    init: function (sts, msg, port) {
        QRV.Header.status = sts;
        QRV.Header.message = msg;
        QRV.Header.Port = port;

        $(document).ready(function () {
            QRV.Header.loginHandler = 'https://' + QRV.PageManager.RootUrl + ':' + port + '/handlers/secure/LoginHandler.ashx'

            //inputs
            QRV.Header.txtSearchValue = $('#txtSearchValue');
            QRV.Header.txtLoginEmail = $('#txtLoginEmail');
            QRV.Header.txtLoginPwd = $('#txtLoginPwd');
            QRV.Header.txtForgotPwd = $('#txtForgotPwd');

            //panels & section wrappers
            QRV.Header.registerWrapper = $('#registerWrapper');
            QRV.Header.loggedInWrapper = $('.logged-in-wrapper');
            QRV.Header.popupWrapper = $('#popupWrapper');
            QRV.Header.loginPanel = $('#loginPanel');
            QRV.Header.forgotPwdPanel = $('#forgotPwdPanel');
            QRV.Header.thankYouPanel = $('#thankYouPanel');
            QRV.Header.facetList = $('#facetList');

            //message holders
            QRV.Header.headerError = $('#headerError');
            QRV.Header.successMsg = $('#successMsg');

            //clickable elements
            QRV.Header.logout = $('#logout');
            QRV.Header.profile = $('#userProfile');
            QRV.Header.facetToggle = $('#facetToggle');
            QRV.Header.btnSearch = $('#btnSearch');
            QRV.Header.btnClosePopup = $('.btnClosePopup');
            QRV.Header.btnResetPassword = $('#btnResetPassword');
            QRV.Header.btnShowForgotPwd = $('.forgot-pwd-link');
            QRV.Header.btnLogin = $('#btnLogin');

            //misc elements
            QRV.Header.showAll = $('.ShowToEveryone');
            QRV.Header.smallPopup = $('#ballon-small');
            QRV.Header.openLogin = $('.open-login-popup');
            QRV.Header.loading = $('div.loading');
            QRV.Header.selectedFacet = $('#selectedFacet');

            //hide panels & wrappers
            QRV.Header.popupWrapper.hide();
            QRV.Header.loginPanel.hide();
            QRV.Header.headerError.hide();
            QRV.Header.thankYouPanel.hide();

            //event handling
            QRV.Header.facetList.find('li p').click(QRV.Header.selectFacet);
            QRV.Header.facetToggle.click(QRV.Header.toggleFacetList);
            QRV.Header.txtSearchValue.keypress(QRV.Header.TopSearchBoxCheckEnter);
            QRV.Header.txtLoginPwd.keypress(QRV.Header.LoginCheckEnter);
            QRV.Header.txtForgotPwd.keypress(QRV.Header.ResendPasswordKeyCheck);
            QRV.Header.openLogin.click(QRV.Header.openLoginPopup);
            QRV.Header.btnSearch.click(QRV.Header.TopBoxSearch);
            QRV.Header.btnClosePopup.click(QRV.Header.HideLoginBox);
            QRV.Header.btnResetPassword.click(QRV.Header.SendForgotPasswordForm);
            QRV.Header.btnShowForgotPwd.click(QRV.Header.ShowForgotPasswordPopUp);
            QRV.Header.btnLogin.click(QRV.Header.Login);
            QRV.Header.logout.click(QRV.Header.Logout);
            QRV.Header.profile.click(QRV.Header.UpdateProfile);
            QRV.Header.txtSearchValue.focus(function () { if (QRV.Header.txtSearchValue.val() == 'Escriba su búsqueda') { QRV.Header.txtSearchValue.val(''); } });
            QRV.Header.txtSearchValue.blur(function () { if (QRV.Header.txtSearchValue.val() == '') { QRV.Header.txtSearchValue.val('Escriba su búsqueda'); } });

            QRV.Header.ShowHideElementsByUserType(QRV.PageManager.IsLoggedUser)
            if (QRV.Header.message != null && QRV.Header.message.length > 0) {
                var lnk = $('#loginLink');
                var x = 165;
                var y = 65;
                if (lnk.length > 0) {
                    var pos = lnk.offset();
                    x = pos.left - (QRV.Header.popupWrapper.width() / 2) + (lnk.width() / 2);
                    y = (pos.top + lnk.height());
                }
                QRV.Header.ShowLoginBox(x, y, true);

                if (QRV.Header.status > 0) {
                    QRV.Header.loginPanel.hide();
                    QRV.Header.forgotPwdPanel.hide();
                    QRV.Header.thankYouPanel.show();
                    QRV.Header.successMsg.html(QRV.Header.message);
                }
                else {
                    switch (QRV.Header.status) {
                        case -6:
                        case -5:
                            QRV.Header.loginPanel.show();
                            QRV.Header.forgotPwdPanel.hide();
                            break;
                        case -4:
                            QRV.Header.loginPanel.hide();
                            QRV.Header.forgotPwdPanel.show();
                            break;
                        case -2:
                        case -1:
                            QRV.Header.loginPanel.hide();
                            QRV.Header.forgotPwdPanel.hide();
                            break;
                    }
                    QRV.Header.thankYouPanel.hide();
                    QRV.Header.headerError.html(QRV.Header.message)
                    QRV.Header.headerError.show();
                }
            }
            $('body').append(QRV.Header.popupWrapper);
            $('#toolTipWrapper').pngFix();
        });
    },

    TopBoxSearch: function () {
        var searchTerm = QRV.Header.txtSearchValue.val();
        if (searchTerm != 'Escriba su búsqueda') {
            if (QRV.Header.form == null) {
                $('body').append('<form id="myform" name="myform" method="post"></form>');
                QRV.Header.form = $('#myform');
                QRV.Header.form.append('<input type="text" id="term" name="term" value="' + searchTerm + '" />');
                QRV.Header.form.append('<input type="text" id="facet" name="facet" value="' + QRV.Header.selectedFacet.html() + '" />');
                QRV.Header.form[0].action = '/Busqueda/Resultados.aspx';
                QRV.Header.form[0].submit();
            }
        }
    },

    TopSearchBoxCheckEnter: function (e) {
        if (e.keyCode == 13) {
            QRV.Header.TopBoxSearch();
            return false
        }
        else {
            return true
        }
    },

    LoginCheckEnter: function (e) {
        if (e.keyCode == 13) {
            QRV.Header.Login();
            return false
        }
        else {
            return true
        }
    },

    ResendPasswordKeyCheck: function (e) {
        if (e.keyCode == 13) {
            QRV.Header.SendForgotPasswordForm();
            return false
        }
        else {
            return true
        }
    },

    ShowForgotPasswordPopUp: function () {
        QRV.Header.loginPanel.hide();
        QRV.Header.forgotPwdPanel.show();
    },

    Login: function () {
        var email = QRV.Header.txtLoginEmail.val().replace(' ', '');
        var pwd = QRV.Header.txtLoginPwd.val().replace(' ', '');

        if (QRV.Header.IsValidEmail(email) && pwd.length > 0) {
            if (QRV.Header.form == null) {
                $('body').append('<form id="myform" name="myform" method="post"></form>');
                QRV.Header.form = $('#myform');
                QRV.Header.form.append('<input type="text" id="email" name="email" value="' + email + '" />');
                QRV.Header.form.append('<input type="password" id="pwd" name="pwd" value="' + pwd + '" />');
                QRV.Header.form.append('<input type="hidden" id="do" name="do" value="login" />');
                QRV.Header.form.append('<input type="hidden" id="url" name="url" value="' + QRV.PageManager.canonicalPath + '" />');
                QRV.Header.form[0].action = QRV.Header.loginHandler;
                QRV.Header.form[0].submit();
            }
            else {
                window.location.reload();
            }
        }
        else {
            QRV.Header.headerError.show();
        }
    },

    SendForgotPasswordForm: function () {
        var email = QRV.Header.txtForgotPwd.val();
        if (QRV.Header.IsValidEmail(email)) {
            QRV.Header.headerError.hide();
            QRV.Header.loading.show();

            if (QRV.Header.form == null) {
                $('body').append('<form id="myform" name="myform" method="post"></form>');
                QRV.Header.form = $('#myform');
                QRV.Header.form.append('<input type="text" id="email" name="email" value="' + email + '" />');
                QRV.Header.form.append('<input type="hidden" id="do" name="do" value="resend" />');
                QRV.Header.form.append('<input type="hidden" id="url" name="url" value="' + QRV.PageManager.canonicalPath + '" />');
                QRV.Header.form[0].action = QRV.Header.loginHandler;
                QRV.Header.form[0].submit();
            }
            else {
                window.location.reload();
            }
        }
        else {
            QRV.Header.headerError.show();
        }
    },

    Logout: function () {
        if (QRV.PageManager.IsLoggedUser) {
            QRV.Header.loggedInWrapper.hide();
            if (QRV.Header.form == null) {
                $('body').append('<form id="myform" name="myform" method="post"></form>');
                QRV.Header.form = $('#myform');
                QRV.Header.form.append('<input type="hidden" id="do" name="do" value="logout" />');
                QRV.Header.form.append('<input type="hidden" id="url" name="url" value="' + QRV.PageManager.canonicalPath + '" />');

                QRV.Header.form[0].action = QRV.Header.loginHandler;
                QRV.Header.form[0].submit();
            }
            else {
                window.location.reload();
            }
        }
    },

    UpdateProfile: function () {
        if (QRV.PageManager.IsLoggedUser) {
            location.href = 'https://' + QRV.PageManager.RootUrl + ':' + QRV.Header.Port + '/Cuenta/ActualizarPerfil.aspx';
        }
    },

    IsValidEmail: function (email) {
        return (/^[^@]+@[^@]+.[a-z]{2,}$/i).test(email)
    },

    ShowLoginBox: function (marginLeft, marginTop, flipY) {
        QRV.Header.popupWrapper.css({ 'left': marginLeft + 'px', 'top': marginTop + 'px' });
        QRV.Header.forgotPwdPanel.hide();
        QRV.Header.thankYouPanel.hide();
        QRV.Header.popupWrapper.show();
        QRV.Header.loginPanel.show();
        if (flipY) {
            QRV.Header.smallPopup.addClass('invert');
        }
        else {
            QRV.Header.smallPopup.removeClass('invert');
        }
    },

    HideLoginBox: function () {
        QRV.Header.popupWrapper.hide();
        QRV.Header.loginPanel.hide();
        QRV.Header.loading.hide();
        QRV.Header.headerError.hide();
        QRV.Header.forgotPwdPanel.hide();
        QRV.Header.thankYouPanel.hide();

        QRV.Header.txtForgotPwd.val('');
        QRV.Header.txtLoginEmail.val('');
        QRV.Header.txtLoginPwd.val('');
    },

    openLoginPopup: function (e) {
        if (!QRV.PageManager.IsLoggedUser) {
            //try to get reference to clicked element
            var t = $(e.currentTarget);
            var x;
            var y;
            var verticalOffset = 0;

            if (t.length > 0) {
                //get clicked element's top left position (x,y)
                var pos = t.offset();

                //positions the pop-up so it will be centered horizontally along the target elements x axis
                if (t.get(0).tagName == "AREA") {
                    var coords = t.attr('coords').split(',');
                    var mapElement = t.parent().parent();
                    x = parseInt(mapElement.offset().left) + parseInt(coords[0]);
                    x = x - (QRV.Header.popupWrapper.width() / 2) + (coords[1] / 2);

                    y = parseInt(mapElement.offset().top);
                    y = y - (QRV.Header.popupWrapper.height() - coords[1]);
                }
                else {
                    x = pos.left - (QRV.Header.popupWrapper.width() / 2) + (t.width() / 2);
                    //positions the top-edge of the pop-up with the top edge of the target element
                    y = pos.top;
                }
                //additional height offset in case pop-up needs to be inverted...
                verticalOffset = t.height();
            }
            else {
                //positions the pop-up on the mouse click's x/y coordinates
                x = e.pageX;
                y = e.pageY;

                //default offset for pop-up inversion
                verticalOffset = 15;
            }

            var flipStyle = false;

            //if the click point is too close to the top edge of the page...
            if (y < QRV.Header.popupWrapper.height() + verticalOffset) {
                //then invert the pop-up and move it below the target
                flipStyle = true;
                y += verticalOffset; 
            }
            else {
                //else move the pop-up above the target element
                y -= (QRV.Header.popupWrapper.height()); //+ verticalOffset
            }
            QRV.Header.ShowLoginBox(x, y, flipStyle);
        }

        if (QRV.PageManager.IsLoggedUser) {
            QRV.Header.loggedInWrapper.show();
        }
        else {
            QRV.Header.registerWrapper.show();
        }

        QRV.Header.ShowHideElementsByUserType(QRV.PageManager.IsLoggedUser);
    },

    ShowHideElementsByUserType: function (isAuthenticated) {
        if (isAuthenticated) {
            QRV.Header.showAll.hide();
        }
        else {
            QRV.Header.showAll.show();
        }
    },

    toggleFacetList: function () {
        if (QRV.Header.facetList.isVisible) {
            QRV.Header.facetList.hide();
            QRV.Header.facetList.isVisible = false;
        }
        else {
            QRV.Header.facetList.show();
            QRV.Header.facetList.isVisible = true;
        }
    },

    selectFacet: function (e) {
        var p = $(this);
        var value = p.html();
        QRV.Header.selectedFacet.html(value);
        QRV.Header.toggleFacetList();
    }
};

