
/* ***************************** TABBERGUPPY pour GuppY v4.6 ******************************
                   Ludo - f5swn.2.free.fr - avril 2008


Source de ce script : http://www.barelyfitz.com/projects/tabber/
ce fichier tabber.js est à utiliser conjointement avec la feuille de style tabber.css
ces deux fichiers placés dans le répertoire /file de GuppY v4.6
voir le mode d'emploi joint pour l'utilisation et la structure à adopter pour les articles.

 Version permettant une sélection de la position des onglets en fonction de l'id du div tabber.

 Le div class="tabber" reçoit un id="haut" sinon les onglets sont en bas par défaut.
 Lorsque les onglets sont en bas (pas d'id), ils sont centrés et un haut de page automatique est activé.
 Le haut de page peut être désactivé en mettant un id="inerte".
 
 Les div class="tabbertab" sont renommées dynamiquement afin de permettre l'application de styles différents (onglets haut et bas
 sur la même page).
 La feuille de style est donc en deux parties permettant d'appliquer un style différent selon la position des onglets. Elle doit
 exclusivement être employée avec cette version de tabber.js

  */

var choice;

/* Pour le haut de page */

function remonte () {
location.href = '#debut';
}

/* Haut de page auto seulement si onglets bas */

var tabberOptions = {

'onClick': function(argsObj) {
    if (argsObj.tabber.id != 'inerte'){
       if (argsObj.tabber.id != 'haut') {
      	  remonte();
	  }
      }
    }
  };



/*  script tabber v 1.9  modifié  */

function tabberObj(argsObj)
{
  var arg;
  this.div = null;
  this.choice = 1;
  this.classMain = "tabber";
  this.classMainLive = "tabberlive";
  this.classMainLiveb = "tabberliveb";
  this.classTab = "tabbertab";
  this.classTabLive = "tabbertablive";
  this.classTabLiveb = "tabbertabliveb";
  this.classTabDefault = "tabbertabdefault";
  this.classNav = "tabbernav";
  this.classNavb = "tabbernavb";
  this.classTabHide = "tabbertabhide";
  this.classNavActive = "tabberactive";
  this.classNavActiveb = "tabberactiveb";
  this.titleElements = ['h2','h3','h4','h5','h6'];
  this.titleElementsStripHTML = true;
  this.removeTitle = true;
  this.addLinkId = false;
  this.linkIdFormat = '<tabberid>nav<tabnumberone>';
  for (arg in argsObj) { this[arg] = argsObj[arg]; }
  this.REclassMain = new RegExp('\\b' + this.classMain + '\\b', 'gi');
  this.REclassMainLive = new RegExp('\\b' + this.classMainLive + '\\b', 'gi');
  this.REclassMainLiveb = new RegExp('\\b' + this.classMainLiveb + '\\b', 'gi');
  this.REclassTab = new RegExp('\\b' + this.classTab + '\\b', 'gi');
  this.REclassTabLive = new RegExp('\\b' + this.classTabLive + '\\b', 'gi');
  this.REclassTabLiveb = new RegExp('\\b' + this.classTabLiveb + '\\b', 'gi');
  this.REclassTabDefault = new RegExp('\\b' + this.classTabDefault + '\\b', 'gi');
  this.REclassTabHide = new RegExp('\\b' + this.classTabHide + '\\b', 'gi');
  this.tabs = new Array();
  if (this.div) {
    this.init(this.div);
    this.div = null;
  }
}

tabberObj.prototype.init = function(e)
{
  var
  childNodes,
  i, i2,
  t,
  tlive,       
  defaultTab=0,
  DOM_ul,
  DOM_li,
  DOM_a,
  aId,
  headingElement;

  if (!document.getElementsByTagName) { return false; }



  if (e.id) {
    this.id = e.id;

     if (this.id == 'haut') {
                 this.choice = 0;
                   }
        }

  this.tabs.length = 0;

  childNodes = e.childNodes;
  for(i=0; i < childNodes.length; i++) {

    if(childNodes[i].className &&
       childNodes[i].className.match(this.REclassTab)) {
      t = new Object();
      t.div = childNodes[i];
      
      this.tabs[this.tabs.length] = t;
      if (childNodes[i].className.match(this.REclassTabDefault)) {
	defaultTab = this.tabs.length-1;
      }
        tlive = t.div
         if (this.choice == 1) {
         tlive.className = tlive.className.replace(this.REclassTab, this.classTabLiveb);
         }
         else {
              tlive.className = tlive.className.replace(this.REclassTab, this.classTabLive);
              }
       
       

     }
  }

  DOM_ul = document.createElement("ul");

  if (this.choice == 1) {
  DOM_ul.className = this.classNavb;
  }
  else {
    DOM_ul.className = this.classNav;
  }  


  for (i=0; i < this.tabs.length; i++) {

    t = this.tabs[i];
    t.headingText = t.div.title;
    if (this.removeTitle) { t.div.title = ''; }
    if (!t.headingText) {
        for (i2=0; i2<this.titleElements.length; i2++) {
	headingElement = t.div.getElementsByTagName(this.titleElements[i2])[0];
	if (headingElement) {
	  t.headingText = headingElement.innerHTML;
	  if (this.titleElementsStripHTML) {
	    t.headingText.replace(/<br>/gi," ");
	    t.headingText = t.headingText.replace(/<[^>]+>/g,"");
	  }
	  break;
	}
      }
    }

    if (!t.headingText) {
      t.headingText = i + 1;
    }

    DOM_li = document.createElement("li");
    t.li = DOM_li;
    DOM_a = document.createElement("a");
    DOM_a.appendChild(document.createTextNode(t.headingText));
    DOM_a.href =" javascript:void(null);"
    DOM_a.title = t.headingText;
    DOM_a.onclick = this.navClick;
    DOM_a.tabber = this;
    DOM_a.tabberIndex = i;
    if (this.addLinkId && this.linkIdFormat) {
      aId = this.linkIdFormat;
      aId = aId.replace(/<tabberid>/gi, this.id);
      aId = aId.replace(/<tabnumberzero>/gi, i);
      aId = aId.replace(/<tabnumberone>/gi, i+1);
      aId = aId.replace(/<tabtitle>/gi, t.headingText.replace(/[^a-zA-Z0-9\-]/gi, ''));

      DOM_a.id = aId;
    }

    DOM_li.appendChild(DOM_a);
    DOM_ul.appendChild(DOM_li);
  }
  
  if (this.choice == 1) {
    e.appendChild(DOM_ul, e.firstChild);                                      // onglets en bas
    
    }
  else {
    e.insertBefore(DOM_ul, e.firstChild);

  }

  if (this.choice == 1) {
  e.className = e.className.replace(this.REclassMain, this.classMainLiveb);
  }
  else {
       e.className = e.className.replace(this.REclassMain, this.classMainLive);
  }

  
  this.tabShow(defaultTab);
  if (typeof this.onLoad == 'function') {
    this.onLoad({tabber:this});
  }
  return this;
};

tabberObj.prototype.navClick = function(event)
{
  var
  rVal,
  a,
  self,
  tabberIndex,
  onClickArgs;

  a = this;
  if (!a.tabber) { return false; }

  self = a.tabber;
  tabberIndex = a.tabberIndex;
  a.blur();
  
   if (typeof self.onClick == 'function') {
    onClickArgs = {'tabber':self, 'index':tabberIndex, 'event':event};
    if (!event) { onClickArgs.event = window.event; }
     rVal = self.onClick(onClickArgs);
    if (rVal === false) { return false; }
  }
  self.tabShow(tabberIndex);
  return false;
};
tabberObj.prototype.tabHideAll = function()
{
  var i;
   for (i = 0; i < this.tabs.length; i++) {
    this.tabHide(i);
  }
};


tabberObj.prototype.tabHide = function(tabberIndex)
{
  var div;
  if (!this.tabs[tabberIndex]) { return false; }
  div = this.tabs[tabberIndex].div;
  if (!div.className.match(this.REclassTabHide)) {
    div.className += ' ' + this.classTabHide;
  }
  this.navClearActive(tabberIndex);

  return this;
};
tabberObj.prototype.tabShow = function(tabberIndex)
{
  var div;
  if (!this.tabs[tabberIndex]) { return false; }
  this.tabHideAll();
  div = this.tabs[tabberIndex].div;
  div.className = div.className.replace(this.REclassTabHide, '');
  this.navSetActive(tabberIndex);
  if (typeof this.onTabDisplay == 'function') {
    this.onTabDisplay({'tabber':this, 'index':tabberIndex});
  }
  return this;
};
tabberObj.prototype.navSetActive = function(tabberIndex)
{
  if (this.choice == 1) {
    this.tabs[tabberIndex].li.className = this.classNavActiveb;
  }
  else {
       this.tabs[tabberIndex].li.className = this.classNavActive;
  }
  
  return this;
};


tabberObj.prototype.navClearActive = function(tabberIndex)
{
  this.tabs[tabberIndex].li.className = '';
  return this;
};


function tabberAutomatic(tabberArgs)
{
  var
    tempObj,
    divs,
    i;
  if (!tabberArgs) { tabberArgs = {}; }
  tempObj = new tabberObj(tabberArgs);
  divs = document.getElementsByTagName("div");
  for (i=0; i < divs.length; i++) {
    if (divs[i].className &&
	divs[i].className.match(tempObj.REclassMain)) {
      tabberArgs.div = divs[i];
      divs[i].tabber = new tabberObj(tabberArgs);
    }
  }
  
  return this;
}


/* Permet l'appel depuis GuppY */ 

function tabberguppy() {
if (typeof tabberOptions == 'undefined') {

    tabberAutomatic();

} else {

  if (!tabberOptions['manualStartup']) {
    tabberAutomatic(tabberOptions);
  }
}
}


/* permet de masquer l'article tant que tabber n'est pas lancé */
document.write('<style type="text/css">.tabber{display:none;}<\/style>');

