var basket = function()
{
    var options = {
        url                : '',
        basketQuantId      : 'basket_quant',
        basketPriceId      : 'basket_price',
        basketButtonPrefix : 'basket_button_'
    }

    function extendOptions(newOptions)
    {
        $.extend(options, newOptions);
    }

    function updateBasketInfo(totalPrice, totalProducts)
    {
        $('#' + options.basketQuantId).text(totalProducts);
        $('#' + options.basketPriceId).text(totalPrice);
    }

    function hideLoading(id, mode, div)
    {
        if (mode == 'add') {
            var html = '<a href="#" onclick="basket.remove(' + id + ', this.parentNode);return false;"><img src="/templates/www/intim812/images/no_buy.gif" width="61" height="25" alt="Убрать из корзины" /></a>';
        } else {
            var html = '<a href="#" onclick="basket.add(' + id + ', this.parentNode);return false;"><img src="/templates/www/intim812/images/buy.gif" width="61" height="25" alt="Добавить в корзину" /></a>';
        }

        var div = getDivByButton(div);

        div.html(html);
    }

    function showLoading(id, button)
    {
        var div = getDivByButton(button);

        div.text('Загрузка...');
    }

    function getDivByButton(div)
    {
        var div = $(div);

        return div;
    }

    return {
        init : function(iOptions)
        {
            if (typeof(iOptions) != 'undefined') {
                extendOptions(iOptions);
            }
        },

        add : function(id, div)
        {
            showLoading(id, div);
            $.post(options.url, {mode:'add', id:id}, function(data){
                if (data.result) {
                    hideLoading(data.id, data.mode, div);
                    updateBasketInfo(data.total_price, data.total_products);
                }
            }, 'json');
        },

        remove : function(id, div)
        {
            showLoading(id, div);
            $.post(options.url, {mode:'remove', id:id}, function(data){
                if (data.result) {
                    hideLoading(data.id, data.mode, div);
                    updateBasketInfo(data.total_price, data.total_products);
                }
            }, 'json');
        }
    }
} ();
