fb.category = {
    loaded: false,
    catId: 0,

    init: function() {
        debug('fb.category.init');
        fb.observers.subscribe(this._activateTab, 'context', 'activate', { tab: 'cats' });
    },

    initBranch: function(el) {
        debug('fb.category.initBranch: id = ' + el.attr('id'));
        el.find('a.cat-expand, a.cat-collapse').live('click', fb.category.traverse);
//         el.find('a.cat-name').live('click', fb.category.select);
    },

    traverse: function() {
        var a = $(this);
        if (a.is('.cat-expand')) {
            fb.category.expand(a);
        } else {
            fb.category.collapse(a);
        }
        return false;
    },

    collapse: function(a) {
        debug('fb.category.collapse: a = ' + a.href);
        a.nextAll('ul').hide();
        a.removeClass('cat-collapse')
         .addClass('cat-expand');
    },

    expand: function(a) {
        debug('fb.category.expand: a = ' + a.href);

        var cat = a.closest('li');
        var list = a.nextAll('ul');

        if (list.length) {
            list.show();
            a.removeClass('cat-expand')
             .addClass('cat-collapse');
        } else {
            var id = cat.attr('id').substr(4);
            a.removeClass('cat-expand')
             .addClass('cat-loading');
            $.get('/_getCategoryTree.php', { id : id }, function(data){
                    cat.append(data);
                    a.removeClass('cat-loading')
                     .addClass('cat-collapse');
                    fb.category.initBranch(cat);
            });
        }
    },

    load: function() {
        var slot = fb.context.getSlot('cats').addClass('loading');
        var container = $('#categories');
        $.get('/_getCategoryTree.php', { id : this.catId, full: true }, function(data){
            container.html(data);
            fb.category.initBranch(container);
            fb.category.loaded = true;
            slot.removeClass('loading');
        });
    },

    _activateTab: function(args) {
        debug('fb.category._activateTab: args = ' + this);
        if (!fb.category.loaded) {
            fb.category.load();
        }
    }
}
