function TabCategories ()
{
   this.holder = null;
   this.categories = {};
}

TabCategories.prototype = new ObjectEvents();

TabCategories.prototype.init = function (active, remember)
{
   if (!YUKU.get_by_id('directory_default'))
      return;

   var holder = YUKU.make_el('DIV', {id: 'category-tab-holder', className: 'category-tab-holder'});
   var ul = YUKU.make_el('UL', {className: 'category-tab-list'}, holder);
   var h2s = YUKU.get_by_tag('H2', YUKU.get_by_id('wrapper'));
   var first = null;
   var k = 1;

   for (var i = 0; h2 = h2s[i]; i++)
   {
      if (YUKU.class_name.test(h2.parentNode, 'boxheading') && (YUKU.get_by_tag('A', h2)).length != 0)
      {
         var anchor = YUKU.get_by_tag('A', h2)[0];
         if (anchor.name)
         {
            var id = anchor.name.replace('#', '');
            YUKU.remove_el(anchor);

            var title = h2.innerHTML;
            var box = YUKU.get_by_id(id);
            var li = YUKU.make_el('LI', {className: 'category-tab', id: id.replace('dir', 'tab'), control: box}, ul);
            var span = YUKU.make_el('SPAN', {innerHTML: title}, li);

            YUKU.class_name.kill(box, 'collapsed');
            YUKU.class_name.add(li, (k % 2 == 0 ? 'even' : 'odd'));

            if (k == 1) {
               first = box;
               YUKU.class_name.add(li, 'active');
               YUKU.class_name.add(li, 'first');
            } else
               YUKU.class_name.add(box, 'hidden');

            h2.parentNode.style.display = 'none';
            this.categories[id] = {id: id, title: title, box: box, tab: li};

            k++;
         }
      }
   }

   this.remember = remember;
   this.holder = holder;
   this.addEvent(holder, 'click', 'click');

   YUKU.class_name.add(li, 'last');
   YUKU.insert_before(holder, first);

   var default_tab = false;

   if (remember)
      default_tab = YUKU.get_cookie('tabcat', active);
   else
      default_tab = active;

   if (window.location.hash) {
      default_tab = window.location.hash.replace('#', '');
   }

   if (default_tab && this.categories[default_tab])
      this.hide_except(default_tab);

};

TabCategories.prototype.click = function (e)
{
   var src = YUKU.get_target(e);
   var li = YUKU.get_by_test(src, YUKU.step.by_prop('parentNode'),
			                    YUKU.test.for_tag('LI'), 5);

   if (!li || !li.control)
      return;

   this.hide_except(li.control.id);
};

TabCategories.prototype.hide_except = function (id)
{
   for (var i in this.categories)
   {
      var cat = this.categories[i];

      if (i == id)
      {
         YUKU.class_name.kill(cat.box, 'hidden');
         YUKU.class_name.add(cat.tab, 'active');
      }
      else
      {
         YUKU.class_name.add(cat.box, 'hidden');
         YUKU.class_name.kill(cat.tab, 'active');
      }
   }

   if (this.remember)
      YUKU.set_cookie('tabcat', id);
}