fb.basket = {
    loaded: false,
    container: null,

    init: function() {
        debug('fb.basket.init');
        this.container = $('#basket');
        fb.observers.register('basket', 'reset');
        fb.observers.subscribe(this._activateTab, 'context', 'activate', { tab: 'basket' });
        fb.observers.subscribe(this._addItem, 'images', 'toBasket');
        fb.observers.subscribe(this._removeItem, 'images', 'fromBasket');
        fb.context.getSlot('basket').children('.actions').children('.action-reset').click(this.reset);

        $('#basket .ia-basket').live('click', fb.images.updateBasket);
        this.updateCount();

    },

    updateCount: function() {
        $('#basket-cnt').text(this.count);
    },

    load: function() {
        debug('fb.basket.load');
        var that = fb.basket;
        var slot = fb.context.getSlot('basket').addClass('loading');
        $.get('/_basket.php', { getList: true }, function(data){
            that.container.append(data);
//             fb.images.bind(that.container.find('.im'));
            that.loaded = true;
            that._queued();
            slot.removeClass('loading');
        });
    },

    reset: function() {
        debug('fb.basket.reset');
        var that = fb.basket;
        var unselect = [];

        $.post('_basket.php', { action: 'reset' } );

        that.container.find('.im').each(function(){
            unselect.push($(this).id());
        });

        that.container.empty();
        that.count = 0;
        that.updateCount();
        fb.observers.emit('basket', 'reset', { items: unselect });
        return false;
    },

    _activateTab: function(msg, args) {
        debug('fb.basket._activateTab: fb.basket.loaded = ' + fb.basket.loaded + ', args.tab = ' + args.tab);
        if (!fb.basket.loaded) {
            fb.basket.load();
        } else {
            fb.basket._queued();
        }
    },

    _queued: function(){},

    _addItem: function(msg, args) {
        debug('fb.basket._addItem: args = ' + args);
        var that = fb.basket;
        that._queued = function() {
            that._queued = function(){};
            $.post('_basket.php', { action: 'add', id: args.id } );
            var item = args.item.clone(true);
            item.attr('id', 'b' + args.id);
            item.removeClass('selected hover');
            item.hide();
            that.container.prepend(item);
            item.show('normal');
            that.count++;
            that.updateCount();
        }
        fb.observers.emit('basket', 'add', { id: args.id });
        fb.context.activate('basket');
    },

    _removeItem: function(msg, args) {
        debug('fb.basket._removeItem: args = ' + args);
        var that = fb.basket;

        fb.post('_basket.php', { action: 'remove', id: args.id } );
        fb.observers.emit('basket', 'remove', { id: args.id });
        var remove = $('#b' + args.id);
        if (remove.length) {
            remove.hide('normal')
            remove.queue(function () {
                $(this).remove()
                       .dequeue();
            });
            that.count--;
            that.updateCount();
        }
    }
}
