﻿$.indaco.i.factory({
    className: "SidebarLeft",
    methods: {
        init: function () {
            var self = this;

            this.element = $(this.options.elementId);
            this.initTabs();
            this.initMenu();
            this._addDelegates();
            this.ajaxPubs();
            var url = this.options.keepAliveUrl;
            setInterval(function () { self.keepSessionAlive(url); }, 100000);
        }
        ,
        _addDelegates: function () {
            this.element.find('#btn-show_login').on('click', $.indaco.__bind(
                this.evShowLogin
            , this));
            this.element.find('#btn-resetpass').on('click', $.indaco.__bind(
                this.evResetPass
            , this));
            this.element.find('.reg_menu a').on('click', $.indaco.__bind(
                this.evToggleTabs
            , this));
            $('#panel-login').on("click", "#btn-login", $.indaco.__bind(
                this.evLogin
            , this));
            $('#panel-register').on("click", "#btn-register", $.indaco.__bind(
                this.evRegister
            , this));
            $('#search-txt').on("keydown", $.indaco.__bind(
                this.doSearch
            , this));
            $('#search-txt').parents("form").first().on("submit", function (e) {
                e.preventDefault();
            });
            $('#panel-subscribe input:submit').on('click', $.indaco.__bind(
                this.evSubscribe
            , this));
        }
        ,
        keepSessionAlive: function (url) {
            var localId = $('#session-id').text();
            $.post(url, { id: localId }, function (data) {
                if (data && data.lenght > 0) {
                    if (data.status == "timeout") {
                        //update session id
                        $('#session-id').text(data.id);
                        //force refresh
                    }
                }
            });
        }
        ,
        doSearch: function (event) {
            if (event.keyCode == 13) {
                var btn = $(event.currentTarget);
                if (btn.data('redirect') === true) {
                    event.preventDefault();
                    location.href = this.options.searchUrl + "?text=" + btn.val();
                }
                return;
            }
        }
        ,
        initTabs: function () {
            this.element.find(".account_panel").hide();
            this.element.find("#btn-show_login").addClass("selected");
            var target = this.element.find("#btn-show_login").data("target");
            $("#" + target).show();
        }
        ,
        initMenu: function () {
            var isOn = false;

            if (this.options.indexUrl.indexOf("DueBooks") != -1) {
                $('.header').find('a[id="nav-duebooks"]').addClass('selected');
                isOn = true;
            }

            if (!isOn && (this.options.indexUrl.indexOf("Books") != -1 || this.options.indexUrl.indexOf("Book") != -1)) {
                $('.header').find('a[id="nav-books"]').addClass('selected');
                isOn = true;
            }

            if (this.options.indexUrl.indexOf("Offers") != -1 || this.options.indexUrl.indexOf("Offer") != -1) {
                $('.header').find('a[id="nav-offers"]').addClass('selected');
                isOn = true;
            }

            if (this.options.indexUrl.indexOf("Blog") != -1 || this.options.indexUrl.indexOf("BlogPost") != -1) {
                $('.header').find('a[id="nav-blog"]').addClass('selected');
                isOn = true;
            }

            if (this.options.indexUrl.indexOf("Contact") != -1) {
                $('.header').find('a[id="nav-contact"]').addClass('selected');
                isOn = true;
            }

            if (!isOn) {
                $('.header').find('a[id="nav-home"]').addClass('selected');
            }
        }
        ,
        evToggleTabs: function (event) {

            var btn = $(event.currentTarget);
            event.preventDefault();

            if (btn.text() == 'Contul meu') {
                return;
            }

            this.element.find(".reg_menu a").removeClass("selected");
            btn.addClass("selected");
            var target = btn.data("target");
            this.element.find(".account_panel").hide();
            this.element.find(".profile_panel").hide();
            $("#" + target).show();

        }
        ,
        evShowLogin: function (event) {

            var btn = $(event.currentTarget);

            event.preventDefault();
            this.element.find(".reg_menu a").removeClass("selected");
            btn.addClass("selected");
            var target = btn.data("target");
            this.element.find(".account_panel").hide();
            this.element.find(".profile_panel").show();
            $("#" + target).show();
        }
        ,
        evLogin: function (event) {
            if (this.options.valid) return;
            event.preventDefault();
            var btn = $(event.currentTarget);
            var form = this.element.find("#panel-login form:first");
            if (form.lenght == 0) return;

            form.validate();
            if (form.valid()) {
                this.ajaxLogin($.indaco.h.serialize(form));
            }

            return false;
        }
        ,
        ajaxLogin: function (data) {

            var ajaxOpt = $.extend(true, {}, $.indaco.__ajax);

            // block element
            var btn = this.element.find('#btn-login');
            btn.addClass('loader');
            btn.prop('disabled', true);


            // data
            ajaxOpt.data = data;

            // url
            ajaxOpt.url = this.options.formLoginUrl;

            //success
            ajaxOpt.success = $.indaco.__bind(
                this.ajaxLoginSuccess
            , this);

            // error
            ajaxOpt.error = $.indaco.__bind(
                this.ajaxLoginError
            , this);

            // complete
            ajaxOpt.complete = $.indaco.__bind(
                this.ajaxLoginComplete
            , this);

            // ajax call
            $.ajax(ajaxOpt);

        }
        ,
        ajaxLoginSuccess: function (data) {

            if (data && data.status == "success") {
                //call again with post
                this.options.valid = true;
                $('#panel-login').off('#btn-login');
                $('#panel-login form:first').submit();
                return;
            }

            this.ajaxLoginError(data);

        }
        ,
        ajaxLoginError: function (data) {

            if (data.status) {
                this.element.find('#panel-login').html(data.obj);
            } else {
                //network error
            }
        }
        ,
        ajaxLoginComplete: function () {
            if (!this.options.valid) {
                // unblock element
                var btn = this.element.find('#btn-login');
                btn.removeClass('loader');
                btn.prop('disabled', false);
            }
        }
        ,
        evResetPass: function (event) {
            event.preventDefault();
            var btn = $(event.currentTarget);
            //undefined
            var mail = $('#Mail').val();
            //validate
            if (mail == '' || mail.length < 5) {
                humane.error(INDACO.resources.insertMail);
                return false;
            }

            var ajaxOpt = $.extend(true, {}, $.indaco.__ajax);


            // data
            ajaxOpt.data = "mail=" + mail;

            // url
            ajaxOpt.url = this.options.resetPassUrl;

            //success
            ajaxOpt.success = $.indaco.__bind(
                this.ajaxResetSuccess
            , this);

            // error
            ajaxOpt.error = $.indaco.__bind(
                this.ajaxResetError
            , this);

            // ajax call
            $.ajax(ajaxOpt);
        }
        ,
        ajaxResetSuccess: function (data) {
            if (data && data.obj && data.obj.length > 0) {
                if (data.success == 'success') {
                    humane.success(data.obj);
                } else {
                    humane.info(data.obj);
                }
                return;
            }
        }
        ,
        ajaxResetError: function (data) {
            humane.error([INDACO.resources.fatalError, INDACO.resources.tryAgain]);
        }
        ,
        evRegister: function (event) {
            event.preventDefault();
            var btn = $(event.currentTarget);
            var form = this.element.find("#panel-register form:first");
            if (form.lenght == 0) return;

            form.validate();

            var terms = this.element.find('#Conditions');
            if (terms.is(':visible') && !terms.is(':checked')) {
                humane.error(INDACO.resources.termsConditions);
                return false;
            }

            if (form.valid()) {
                this.ajaxRegister($.indaco.h.serialize(form));
            }

            return false;
        }
        ,
        ajaxRegister: function (data) {

            var ajaxOptions = $.extend(true, {}, $.indaco.__ajax);

            // block element
            var btn = this.element.find('#btn-register');
            btn.addClass('loader');
            btn.prop('disabled', true);


            // data
            ajaxOptions.data = data;

            // url
            ajaxOptions.url = this.options.formRegisterUrl;

            //success
            ajaxOptions.success = $.indaco.__bind(
                this.ajaxRegisterSuccess
            , this);

            // error
            ajaxOptions.error = $.indaco.__bind(
                this.ajaxRegisterError
            , this);

            // complete
            ajaxOptions.complete = $.indaco.__bind(
                this.ajaxRegisterComplete
            , this);

            // ajax call
            $.ajax(ajaxOptions);

        }
        ,
        ajaxRegisterSuccess: function (data) {

            if (data && data.obj && data.obj.length > 0) {

                this.element.find('#panel-register').html(data.obj);

                return;
            }

            this.ajaxRegisterError(data);
        }
        ,
        ajaxRegisterError: function (data) {

            if (data.status) {

            } else {
                //network error
            }
        }
        ,
        ajaxRegisterComplete: function () {

            // unblock element
            var btn = this.element.find('#btn-register');
            btn.removeClass('loader');
            btn.prop('disabled', false);
        }
        ,
        ajaxPubs: function () {
            var ajaxOptions = $.extend(true, {}, $.indaco.__ajax);
            ajaxOptions.url = this.options.pubsUrl;
            ajaxOptions.success = $.indaco.__bind(
                this.ajaxPubsSuccess
            , this);
            // ajax call
            $.ajax(ajaxOptions);
        }
        ,
        ajaxPubsSuccess: function (data) {
            if (data && data.obj && data.obj.length > 0) {
                this.element.find('#panel-pubs div:first').html(data.obj);
            }
            this.element.find('#panel-pubs span:first').remove();
        }
        ,
        evSubscribe: function (event) {
            event.preventDefault();

            var mail = $('#panel-subscribe input:text').val();
            if (mail == '' || !this.isValidEmailAddress(mail)) {
                humane.error(INDACO.resources.invalidEmail);
                return false;
            }

            // block element
            var btn = $(event.currentTarget);
            btn.addClass('loader');
            btn.prop('disabled', true);

            var ajaxOptions = $.extend(true, {}, $.indaco.__ajax);

            // data
            ajaxOptions.data = "mail=" + mail;

            // url
            ajaxOptions.url = this.options.subscribeUrl;

            //success
            ajaxOptions.success = $.indaco.__bind(
                this.ajaxSubscribeSuccess
            , this);

            // error
            ajaxOptions.error = $.indaco.__bind(
                this.ajaxSubscribeError
            , this);

            // complete
            ajaxOptions.complete = $.indaco.__bind(
                this.ajaxSubscribeComplete
            , this);

            // ajax call
            $.ajax(ajaxOptions);
        }
        ,
        ajaxSubscribeSuccess: function (data) {

            if (data && data.obj && data.obj.length > 0) {
                this.element.find('#panel-subscribe').html(data.obj);
                return;
            }

            this.ajaxSubscribeError(data);
        }
        ,
        ajaxSubscribeError: function (data) {
            humane.error([INDACO.resources.fatalError, INDACO.resources.tryAgain, INDACO.resources.fatalErrorRefresh]);
        }
        ,
        ajaxSubscribeComplete: function () {

            // unblock element
            var btn = $('#panel-subscribe input:submit');
            btn.removeClass('loader');
            btn.prop('disabled', false);
        }
        ,
        isValidEmailAddress: function (emailAddress) {
            var pattern = new RegExp(/^(("[\w-+\s]+")|([\w-+]+(?:\.[\w-+]+)*)|("[\w-+\s]+")([\w-+]+(?:\.[\w-+]+)*))(@((?:[\w-+]+\.)*\w[\w-+]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][\d]\.|1[\d]{2}\.|[\d]{1,2}\.))((25[0-5]|2[0-4][\d]|1[\d]{2}|[\d]{1,2})\.){2}(25[0-5]|2[0-4][\d]|1[\d]{2}|[\d]{1,2})\]?$)/i);
            return pattern.test(emailAddress);
        }
    }
});

$.indaco.i.factory({
    className: "SidebarTopSales",
    methods: {
        init: function () {
            var self = this;

            this.element = $(this.options.elementId);
            if (this.element.size() > 0) {
                this.ajaxTopSales();
            }
        }
        ,
        ajaxTopSales: function () {
            var ajaxOptions = $.extend(true, {}, $.indaco.__ajax);
            ajaxOptions.url = this.options.salesUrl;
            ajaxOptions.success = $.indaco.__bind(
                this.ajaxTopSalesSuccess
            , this);
            // ajax call
            $.ajax(ajaxOptions);
        }
        ,
        ajaxTopSalesSuccess: function (data) {
            if (data && data.obj && data.obj.length > 0) {
                this.element.find('div:first').html(data.obj);
            }
            this.element.find('span:first').remove();
        }
    }
});

$.indaco.i.factory({
    className: "SidebarRss",
    methods: {
        init: function () {
            var self = this;

            this.element = $(this.options.elementId);
            if (this.element.size() > 0) {
                this.lawsPubs();
                this.artPubs();
            }
        }
        ,
        lawsPubs: function () {
            var ajaxOptions = $.extend(true, {}, $.indaco.__ajax);
            ajaxOptions.url = this.options.lawsUrl;
            ajaxOptions.success = $.indaco.__bind(
                this.lawsPubsSuccess
            , this);
            // ajax call
            $.ajax(ajaxOptions);
        },
        lawsPubsSuccess: function (data) {
            if (data && data.obj && data.obj.length > 0) {
                this.element.find('#panel-toplaws div:first').html(data.obj);
                this.element.find('#panel-toplaws span:first').remove();
            }

        }
        ,
        lawsPubsError: function () {
            
        }
        ,
        artPubs: function () {
            var ajaxOptions = $.extend(true, {}, $.indaco.__ajax);
            ajaxOptions.url = this.options.artUrl;
            ajaxOptions.success = $.indaco.__bind(
                this.artPubsSuccess
            , this);
            // ajax call
            $.ajax(ajaxOptions);
        }
        ,
        artPubsSuccess: function (data) {
            if (data && data.obj && data.obj.length > 0) {
                this.element.find('#panel-legestart div:first').html(data.obj);
                this.element.find('#panel-legestart span:first').remove();
            }

        }
    }
});

