CatList = function(config) {
  // configurable {
  this.selector = ''; // require
  this.cat_links_selector = '.cat_link';
  this.subitems_selector = '.subitems';
  // }
  
  $.extend(this, config);
  
  this.init();
}

CatList.prototype = {
  init: function() {
    this.initEvents();
    //this.hideNotActive();
  },
  
  initEvents: function() {
    this.getLinks().click($.proxy(this.onClickLink, this));
  },
  
  hideNotActive: function() {
    this.getSubitems().each(function() {
      if($('a.act', this).length == 0)
          $(this).hide();
    });
  },
  
  getLinks: function() {
    return $(this.cat_links_selector, this.getEl());
  },
  
  getSubitemByLink: function(el) {
    return $(el).next();
  },
  
  getSubitems: function() {
    return $(this.subitems_selector, this.getEl());
  },
  
  getEl: function() {
    return $(this.selector);
  },
  
  onClickLink: function(e) {
    var $subitem = this.getSubitemByLink(e.target);
    if($subitem.is(':visible')) {
      $subitem.slideUp();
    } else {
      //this.getSubitems().filter(':visible').slideUp();
      $subitem.slideDown();
    }
    return false;
  }
}

