// Onglets.js
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
// Historique de mise à jour
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
// 2007-01-28 : Vincent
//				Création du script





function Onglets() {
	var aDivs = document.getElementsByTagName("div");
	for ( var cDivs = 0; cDivs < aDivs.length; cDivs++ ) {
		var eDiv = aDivs[cDivs];
		if (eDiv.className.indexOf("Onglets_Groupe") != -1) {
			new Onglets_Object(eDiv);
		}
	}
}





function Onglets_Object( eOnglets ) {
	// Propriétés de l'objet
	this.elementContenus = "div";
	this.ongletActif     = null;
	this.contenusActifs  = new Array();
	this.navigation      = null;
	this.contenu         = null;
	this.classeActive    = "Onglets_Actif";
	this.useHashLinks    = true;
	this.trackingName    = eOnglets.className.split(" ")[1] ? eOnglets.className.split(" ")[1].substring(eOnglets.className.split(" ")[1].indexOf("track-") + 6) : ""; // Tracking Name
	
	// Méthodes
	this.afficher          = Onglets_Afficher;
	this.retournerContenus = Onglets_RetournerContenus;
	this.trackView         = Onglets_TrackView;
	
	// EDIT :: Interferes with tracking function
	// Redéfini l'élément de contenu à afficher si définit
	//if ( eOnglets.className.split(" ")[1] )
	//	this.elementContenus = eOnglets.className.split(" ")[1];
	// END :: EDIT
	
	
	// Tente d'aller chercher les éléments de navigation et du contenu du groupe d'onglet au premier niveau des childNodes
	for ( var cNodes = 0; cNodes < eOnglets.childNodes.length; cNodes++ ) {
		var node = eOnglets.childNodes[cNodes] ;
		if ( node.nodeType == 1 ) {
			// On semble avoir touvé la navigation 
			if ( node.className.indexOf("Onglets_Navigation") != -1 )
				this.navigation = node;
				
			// On semble avoir touvé le contenu
			if ( node.className.indexOf("Onglets_Contenu") != -1 )
				this.contenu = node;
		}
	}
	
	
	// Vérifie si l'on a la navigation et le contenu, sinon on arrête le programme
	if ( this.navigation && this.contenu ) {
		// Ajoute les méthodes d'affichage au ancres de la navigation
		var aAncres = this.navigation.getElementsByTagName("a");
		for ( var cAncres = 0; cAncres < aAncres.length; cAncres++ ) {
			var boutonOnglet = aAncres[cAncres];
			boutonOnglet.refObject = this;
			boutonOnglet.contenus  = this.retournerContenus(boutonOnglet);
			boutonOnglet.onclick   = function () { this.refObject.afficher(this); return false; };
			
			if ( this.useHashLinks ) {
				var hashString = window.location.hash;
				while ( hashString.indexOf("#") == 0 )
					hashString = hashString.substring(1);
				
				if ( hashString ) {
					if ( boutonOnglet.className == hashString )
						boutonOnglet.onclick();
				}
			}
		}
		
		// Active le premier bouton du groupe
		if ( !this.ongletActif )
			aAncres[0].onclick();
	}
}





// Retourne un tableau des éléments de contenus associés à un onglet
function Onglets_RetournerContenus( bouton ) {
	var aNomContenus  = bouton.className.split(" ");
	var aElements     = this.contenu.getElementsByTagName(this.elementContenus);
	var aContenusLies = new Array();
	
	for ( var cNomContenus = 0; cNomContenus < aNomContenus.length; cNomContenus++ ) {
		var nomContenu = aNomContenus[cNomContenus];
		
		for ( var cElements = 0; cElements < aElements.length; cElements++ ) {
			var eElement = aElements[cElements];
			
			if ( eElement.className.indexOf(nomContenu) != -1 ) {
				aContenusLies.push(eElement);
				eElement.style.display  = "none";
				eElement.style.opacity  = "0";
				eElement.style.filter   = "alpha(opacity=0)";
				/*eElement.style.position = "absolute";
				eElement.style.top      = "0";*/
			}
		}
	}
	
	return aContenusLies;
}





// Affiche l'onglet et le contenu demandé
function Onglets_Afficher( bouton ) {
	// Désactive l'onglet courant ainsi que son contenu
	if ( this.ongletActif && this.ongletActif != bouton ) {
		this.ongletActif.className = this.ongletActif.className.replace(this.classeActive + " ", "");
		for ( var cContenus = 0; cContenus < this.contenusActifs.length; cContenus++ ) {
			//this.contenusActifs[cContenus].className = this.contenusActifs[cContenus].className.replace(this.classeActive, "");
			this.contenusActifs[cContenus].style.zIndex = "1";
			this.contenusActifs[cContenus].style.display = "none";
			this.contenusActifs[cContenus].style.opacity = "0";
			this.contenusActifs[cContenus].style.filter = "alpha(opacity=0)";
			
			/*var fx = new Fx.Styles(this.contenusActifs[cContenus], {duration: 400, wait:false});	
			fx.start({'opacity': 0});*/
		}
	}
	
	if ( this.ongletActif != bouton ) {
		// Active l'onglet courant ainsi que son contenu
		this.ongletActif = bouton;
		if ( this.useHashLinks )
			window.location.hash = this.ongletActif.className;
		this.ongletActif.className = this.classeActive + " " + this.ongletActif.className;
		this.contenusActifs = this.ongletActif.contenus;
		
		// Affiche les contenus de l'onglet
		for ( var cContenus = 0; cContenus < this.ongletActif.contenus.length; cContenus++ ) {
			//this.ongletActif.contenus[cContenus].className = "Onglets_Actif " + this.ongletActif.contenus[cContenus].className;
			this.ongletActif.contenus[cContenus].style.zIndex = "2";
			var fx = new Fx.Styles(this.ongletActif.contenus[cContenus], {duration: 400, wait:false});	
			fx.start({'opacity': 1});
			this.ongletActif.contenus[cContenus].style.display = "block";
		}
	}
	
	this.trackView();
}




// Tracks Google Analytics
function Onglets_TrackView() {
	if ( this.trackingName ) {
		try {
			pageTracker._trackEvent(this.trackingName, "click", this.ongletActif.innerHTML);
		} catch (err) {}
	}
}





// Attache l'événement au chargement de la page
if ( window.addEventListener )
	window.addEventListener("load", Onglets, false);
else if ( window.attachEvent )
	window.attachEvent("onload", Onglets);
