
var oContentTabsObj = Array();


function ContentTab(sUID, iTabIndex, oLiElement)
{
  debug("ContentTab::construct");
  this.miTabIndex          = iTabIndex;
  this.mbTabActive         = false;
  this.moTabLiElement      = oLiElement;
  this.sUID                = sUID;
  
  var oContent = document.getElementById('contentTabContent'+this.sUID+this.miTabIndex);
  if (oContent)
  {
    this.moTabContentElement = oContent;
  }
  else
  {
      debug("failed to find 'contentTabContent"+this.miTabIndex+"'");
  }
}

ContentTab.prototype = 
{
  setContent : function(oContentElement)
  {
    this.moTabContentElement = oContentElement;
  }
  ,
  addEvent : function()
  {
    var that = oContentTabsObj[this.sUID];
    this.moTabLiElement.onclick = function() {that.switchTabs(this); }
  }
  ,
  display : function()
  {
    debug("ContentTab::display::"+this.moTabLiElement.id);
    this.mbTabActive = true;
    this.moTabLiElement.className = this.moTabLiElement.className.replace("inactive", "active");
    if (this.moTabContentElement)
    {
      this.moTabContentElement.style.display = "block";
    }
  }
  ,
  hide : function()
  {
    debug("ContentTab::hide::"+this.moTabLiElement.id);
    this.mbTabActive = false;
    if (this.moTabLiElement.className.indexOf("inactive") == -1)
    {
      this.moTabLiElement.className = this.moTabLiElement.className.replace(/active/, "inactive");
    }
    if (this.moTabContentElement)
    {
      this.moTabContentElement.style.display = "none";
    }
  }
};

function ContentTabs(sUID)
{
  this.miTabCount = 0;
  this.maoTabs = Array();
  this.sUID = sUID;
  oContentTabsObj[sUID] = this;
  debug("ContentTabs::construct");
}


ContentTabs.prototype = 
{
  initialize : function()
  {
    debug("ContentTabs::initialize");
    
    var oRegEx = new RegExp(/[^in]active/);
    
    // loads 'iTabCount' tabs from id="tabList" in to object
    var oTabLinkList = document.getElementById('tabList'+this.sUID);
    
    if (oTabLinkList)
    {
      var oTabLinks = oTabLinkList.getElementsByTagName('LI');
      
      if (oTabLinks)
      {
        this.miTabCount = oTabLinks.length
        debug("got "+this.miTabCount+" tab link elements");
        for (iCounter = 0; iCounter < oTabLinks.length; iCounter++)
        {
          debug("processing tab "+iCounter);
          this.maoTabs[iCounter] = new ContentTab(this.sUID, iCounter, oTabLinks[iCounter]);
          this.maoTabs[iCounter].addEvent();
            
          if (oRegEx.test(oTabLinks[iCounter].className))
          {
            this.maoTabs[iCounter].display();
          }
        }
      }
      else
      {
        debug("no 'oTabLinks'");
      }
    }
    else
    {
      debug("failed to find 'tabList"+this.sUID+"'");
    }
  }
  ,
  switchTabs : function(oElement)
  { 
    debug("ContentTabs::switchTabs");
    var iSelectedId = oElement.id.replace(/[^0-9]/gi,'');
    debug("Selected tab ("+this.sUID+"): "+iSelectedId);
    for (iCounter = 0; iCounter < oContentTabsObj[this.sUID].maoTabs.length; iCounter++)
    {
      if (iCounter == iSelectedId)
      {
        oContentTabsObj[this.sUID].maoTabs[iCounter].display();
      }
      else
      {
        oContentTabsObj[this.sUID].maoTabs[iCounter].hide();
      }
    }
  }
};
