Function.prototype.scope = function(context) {
    var fun = this;
    return function(){
        return fun.apply(context, arguments);
    };
};

Function.prototype.scope = function(context) {
    var fun = this;
    return function(){
        return fun.apply(context, arguments);
    };
};

Pages = {
    months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October',
             'November', 'December'],
    
    hideError: function(formName) {
        jQuery('#' + formName + ' .field').removeClass('error');
        jQuery('#' + formName + ' .alert-box').removeClass('error');
    },
    
    showError: function(formName, inputName, message) {
        jQuery('#' + formName + ' .field.' + inputName).addClass('error');
        jQuery('#' + formName + ' .' + inputName + '-message').html('<div><span></span>' + message + '</div>');
        jQuery('#' + formName + ' .' + inputName + '-message').addClass('error');
    },
    
    getInputValue: function(formName, inputName) {
        return jQuery('#' + formName + ' .field.' + inputName)[0].value;
    },
    
    setInputValue: function(formName, inputName, value) {
        jQuery('#' + formName + ' .field.' + inputName)[0].value = value;
    },
    
    clearInputValue: function(formName) {
        jQuery('#' + formName + ' .field').each(function () {
            this.value = '';
        });
    },

    getDomain: function(id) {
        var result;
        jQuery.each(ArboreusSource.QuestionDomains, function(index, item) {
            if (item.id == id) {
                item.basePrice = parseFloat(item.basePrice);
                item.totalQuestions = parseFloat(item.totalQuestions);

                result = item;
            }
        });

        return result;
    },

    getTestCategory: function(id) {
        var result;
        ArboreusSource.TestCategories.each(function (item) {
            if (item.id == id) {
                result = item;
            }
        });

        return result;
    },
    
    getSubdomains: function(domainId) {
        var result = {};
        ArboreusSource.QuestionDomains.each(function (item) {
            if (item.parentID == domainId) {
                result[item.id] = item;
            }
        });
        
        return result;
    },

    isSubdomain: function (domain) {
        return domain.parentID > 0 ? true : false;
    },

    showPopup: function (popupContainer) {
        popupContainer = jQuery(popupContainer);
        popupContainer.appendTo("body");

        var opaco = jQuery('#opaco');

        if (jQuery.browser.msie) {
            opaco.height(jQuery(document).height()).toggleClass('hidden');
        } else { //in all the rest browsers - fade slowly
            opaco.height(jQuery(document).height()).toggleClass('hidden').fadeTo('slow', 0.7)
        }

        opaco[0].onclick = function () {
            opaco.toggleClass('hidden').removeAttr('style').unbind('click');
            popupContainer.toggleClass('hidden');
        }

        popupContainer.alignCenter().toggleClass('hidden');
    },

    getMonthTitle: function (date) {
        return Pages.months[date.getMonth()];
    },

    showRestoreShoppingCarPopup: function() {
        function onHidePopup() {
            jQuery.ajax({
              type: 'POST',
              url: oState.baseUrl + 'ajax/restore_shopping_cart.php',
              data: {'restore': false},
              dataType: 'json'
            });
        }

        var popup = new Arboreus.Components.Popup({
            'content': ArboreusSource.tr.I18N_RESTORE_CART_POPUP_CONTENT,
            'buttons': [{
                title: ArboreusSource.tr.I18N_OK,
                callback: function () {

                    popup.hide(false);

                    jQuery.ajax({
                      type: 'POST',
                      url: oState.baseUrl + 'ajax/restore_shopping_cart.php',
                      data: {'restore': true},
                      success: function (o) {
                          if (o.success) {
                              document.location = oState.baseUrl;
                          }
                      },
                      dataType: 'json'
                    });

                    return false;
                }.scope(this)
            },{
                title: ArboreusSource.tr.I18N_POPUP_CANCEL,
                callback: function () {
                    popup.hide();
                }
            }]
        });

        popup.on('hide', onHidePopup);

        popup.show();
    },

    onChangeLanguage: function () {
        jQuery.ajax({
            url: oState.baseUrl + "ajax/lang.php",
            data: {
                'lang': jQuery(this).attr('lang')
            },
            type: "POST",
            dataType: 'json',
            success: function(result) {
                if (result.success) {
                    window.location.reload();
                }
            }
        });

        return false;
    }
}

jQuery(document).ready(function(){
    jQuery('.share-this-button').each(function(){
        var el = jQuery(this);
        var params = {};
        if (!el.attr('share-title')) {
            return;
        }
        
        params.title = el.attr('share-title');
        
        if (el.attr('share-url')) {
            params.url = el.attr('share-url');
        }
        
        if (el.attr('share-summary')) {
            params.summary = Pages.Renderer.revertEscapedHtmlRenderer(el.attr('share-summary'));
        } else if (el.parent().find('.share-summary').length > 0) {
            var text = el.parent().find('.share-summary').html();
            params.summary = Pages.Renderer.revertEscapedHtmlRenderer(text);
        }
        
        if (el.attr('share-icon')) {
            params.icon = el.attr('share-icon');
        }
        var object = SHARETHIS.addEntry(params, {button:false,onmouseover:false} );
        object.attachButton(this);
    });

    jQuery('#lang-en').click(Pages.onChangeLanguage);
    jQuery('#lang-fr').click(Pages.onChangeLanguage);

    if (Arboreus.isNeedRestoreCart) {
        Pages.showRestoreShoppingCarPopup();
    }
});

