var Tabs = function(config) {
  var config = config || {};
  this.tabClass = config.tabClass || 'tab';
  this.selectedTabClass = config.selectedTabClass || 'tab_on';
  this.tabLinkContainer = config.tabLinkContainer || document;

  this.tabElms = gweb.dom.getElementsByTagNameAndClass('a',
      this.tabClass,
      this.tabLinkContainer)
    this.tabs = [];
  this.currentTab = false;

  gweb.array.forEach(this.tabElms, function(el, i) {
      var tab = new Tabs.Tab(el, this, i);
      this.tabs.push(tab);
      tab.hide();
      }, this);

  this.tabs[0].show();
};

Tabs.RE = /#tab-(.*?)$/;

Tabs.Tab = function(elm, parent, index) {
  this.index = index;
  this.elm = elm;
  this.parent = parent;

  this.targetElm = gweb.dom.getElement(elm.href.match(Tabs.RE)[1]);

  gweb.events.listen(this.elm, 'click', this.show, false, this);
};

Tabs.Tab.prototype.show = function() {
  if (this != this.parent.currentTab) {
    if (this.parent.currentTab) {
      this.parent.currentTab.hide();
    }
    this.targetElm.style.display = 'block';
    gweb.dom.classes.add(this.elm, this.parent.selectedTabClass);
    this.parent.currentTab = this;
    return true;
  }
  return false;
};

Tabs.Tab.prototype.hide = function() {
  this.targetElm.style.display = 'none';
  gweb.dom.classes.remove(this.elm, this.parent.selectedTabClass);
  return true;
};