//{{{ modules.loadActions.prototype.tabSets = function(){
modules.loadActions.prototype.contentTabSets = function(){
  
  var tabs = this.contentTabSets;
  
  /* Defined in SiteVars object - loaded in via the tab's display.xsl */
  tabs.rootClassName    = SiteVars.modules.Tabs.className;
  tabs.tabItemClassName = SiteVars.modules.Tabs.tabItemClassName;
  tabs.panelClassName   = SiteVars.modules.Tabs.panelClassName;
  tabs.defaultClassName = SiteVars.modules.Tabs.defaultTabClassName;
  tabs.ids              = SiteVars.modules.Tabs.idPatterns;
  tabs.loadingMSG       = SiteVars.modules.Tabs.loadingMSG;
  tabs.rememberLastTab  = SiteVars.modules.Tabs.rememberLastTab;
  
  tabs.itemids       = 'tab';
  tabs.panelids      = 'panel';
  tabs.activeTab     = false; // leave false for now - set when needed to switch when always fetching new content for panels
  tabs.previousTab   = false;
  tabs.useHash       = (location.hash!='') ? location.hash.substring(2) : '';
  
  
  tabs.load = function(){
    
      tabs.tabSets = $$('.'+tabs.rootClassName);
      if(typeof(tabs.tabSets)!='undefined'){
        
        tabs.tabSets.each(function(set){
          
          set.tabItems = Element.select(set, '.'+tabs.tabItemClassName);
          set.tabItems.each(function(item){
            item.element = Element.select(item, 'a')[0];
            
            item.relAttribute = (Element.readAttribute(item.element, 'rel'))? Element.readAttribute(item.element, 'rel') : '';
    
            if(item.relAttribute.indexOf('params')!=-1 || item.relAttribute.indexOf('url')!=-1){;
              item.getAjaxDirective = modules.sanitizeResponse(item.relAttribute, {});
              item.element.removeAttribute('rel');
            }
            item.setHash = (item.getAjaxDirective) ? item.getAjaxDirective.setHash : '' ;
            if(item.getAjaxDirective){
              delete item.getAjaxDirective.setHash;
              item.hasContent = false;
            }
            
            item.num = item.id.substring(item.id.indexOf(tabs.ids)+tabs.ids.length+tabs.itemids.length)
            item.panel = $(tabs.ids + tabs.panelids + item.num);
            item.show = false;
            item.isDefault = (tabs.useHash!='') ? modules.test(item.setHash, tabs.useHash) : Element.hasClassName(item, tabs.defaultClassName);
            item.parentSetId = set.id;
            item.parentSet = set;
            
            //hide the panel right away
            if(item.isDefault == false){
              item.panel.style.display = 'none';
            } 
            
            tabs.behaviour(item);
            
          });
        });
      }
  }
  
  tabs.behaviour = function(item){
    
    if(item.getAjaxDirective){
      item.hasContent = false;
      item.getAjaxDirective.isStatic = (Element.hasClassName(item, 'static')) ? true : false;
      if(item.getAjaxDirective.isStatic){
        item.getAjaxDirective.sendMethod = 'get';
      }
   
      
      item.getAjaxDirective.evalScripts = true;
      
      item.getAjaxDirective.onCreate = function(){ //onCreate will always get called before onLoading
        tabs.updateProps(item);
        if(!item.getAjaxDirective.isStatic){
          Element.addClassName(item.panel, 'async-loading');
        }
        item.panel.style.height = '200px';
      }
      item.getAjaxDirective.onLoad = function(){
      }
      item.getAjaxDirective.onSuccess = function(){
        modules.removeLoadingClass(item.panel, 'async-loading');
      };
      item.getAjaxDirective.onComplete = function(){
        modules.removeLoadingClass(item.panel, 'async-loading');
        Event.fire(window, 'ajax:tab-complete');
        if ('cmsMenusUI' in window) cmsMenusUI.build(); // moved here because onSuccess wasn't working - first test: SiteVars.sitePrefix !='' && 
      }
      item.getAjaxDirective.updateElem = $(item.panel.id);
    }
    
    
    Event.stopObserving(item.element, 'click'); // have to reset this because it's being called 3 times.

    Event.observe(item.element, 'click', function(e){
        if(item == tabs.activeTab){
        }
        else{
          tabs.tabSets.each(function(set){
            set.tabItems.each(function(allitems){
              if(allitems.getAjaxDirective){
                
                
                
                tabs.activeTab.panel.style.visibility = 'hidden';
                tabs.activeTab.panel.style.display = 'none';
                if(!allitems.getAjaxDirective.isStatic){
                  allitems.panel.innerHTML = '';
                }
              }
              else{
                allitems.panel.style.display = 'none';
              }
              allitems.show = false;
              Element.removeClassName(allitems, 'active');
            });
            tabs.showPanel(item);
          });
          
          if(item.setHash || location.hash != ''){
            location.hash = (item.setHash) ? '!' + item.setHash : '';
          }
        }
      Event.stop(e);
    }.bind(tabs));
    
    if(item.isDefault){
      tabs.showPanel(item);
    }
  }
  
  
  tabs.showPanel = function(item){
    
    Element.addClassName(item, 'active');
    
    if(item.getAjaxDirective){
      if(item.hasContent != true || item.getAjaxDirective.isStatic == false ){
        
        Element.addClassName(item.panel, 'async-loading');
        item.panel.style.height = '200px';
                 
                 
        modules.sendAsync(item.getAjaxDirective);
      }
      else if(item.getAjaxDirective.isStatic == true && item.hasContent == true){
        tabs.updateProps(item);
      }
    }
    else {
      tabs.updateProps(item);
    }
           
    if(tabs.rememberLastTab == 'true'){
      var tabOptions = {
        name:item.parentSetId + 'Default',
        value:item.element.id
      }
      modules.setCMSSiteVar(tabOptions);
    }
    item.hasContent = true;
  }

  
  tabs.updateProps = function(item){
    
    tabs.previousTab = tabs.activeTab;
    if(tabs.previousTab){
      Element.removeClassName(item.parentSet, 'active-' + tabs.panelids + tabs.previousTab.num);
      tabs.previousPanel = tabs.previousTab.panel;
    }
    else{
      Element.removeClassName(item.parentSet, 'active-' + tabs.panelids + '1');
      //alert('skipping this step');
    }
    Element.addClassName(item.parentSet, 'active-' + tabs.panelids + item.num);
    
    item.panel.style.display = 'block';
    item.panel.style.height = 'auto';
    tabs.activeTab = item;
    tabs.activeTab.panel.style.visibility = 'visible';
    if(tabs.previousPanel){
      tabs.previousPanel.style.display = 'none';
    }
    item.show = true;
  }
  
  if($$('.'+tabs.rootClassName)[0]) {
    tabs.load();
  }
} //}}}

