/****************************************
OngletMgr v1.0
Auteur : Pierre Pornin - mars 2006
testé pour IE uniquement
Voir exemple http://xln05tlsdiiw.france.airfrance.fr/LOTUSWORKFLOWDEV/REFERENCE/application.nsf/Exemple+OngletMgr?OpenPage
-----------------------------------------
Gestion de l'affichage des onglets pour les applications utilisant la charte intranet v3
Modifié par Michael le 9-6-2006
Voir les exemples plus loin

Modifié par Nicolas G. 09/04/2009 pour être supporté par Firefox (testé sous 3.0.8)
(remplacement des "getElementsByName" par des "getElementById")
Restriction : chaque onglet doit avoir 1 seul div de contenu
*****************************************/


/*
########################################
UTLISATION avec la charte v3, en 3 étapes :
---------------------------------------
1. HTML : Définir les onglets

<DIV id="ongletMgr" class="onglet">
<A id="onglet1" href="#">Destinataires</A>
<A id="onglet2" href="#">Contenu</A>
</DIV>

---------------------------------------
2. HTML : Définir le contenu des onglets

<DIV id="onglet1Contenu" class="onglet_contenu"></DIV>
<DIV id="onglet2Contenu" class="onglet_contenu"></DIV>


-----------------------------------------------------
3. JS : Initialiser l'objet OngletMgr
 
<script>
var ongletMgr = new OngletMgr('ongletMgr', 'onglet1') // onglet2 ouvert par défaut
</script>

'-----------------------------------------------------
' AUTRES EXEMPLES

- Ouvrir un onglet avec l'objet...
ongletMgr.switchOnglet('onglet1')
...et sans l'objet ...
switchOnglet('onglet1)
...et même pour un sous-onglet !
switchOnglet('onglet1/onglet4_3')

- Masquer un onglet
ongletMgr.desactivate ('onglet2')

- Démasquer un onglet
ongletMgr.reactivate ('onglet2')

- Tout ouvrir (très pratique pour imprimer : par exemple dans l'event onbeforeprint)...
ongletMgr.expandAll()
...et revenir à l'état précédent (par exemple dans l'event onafterprint)
ongletMgr.repaint()
######################################################## 
*/

//Classe de la feuille de style correspondant à l'onglet actuellement ouvert (à modifier suivant la charte utilisée)
CLASS_ONGLET_ON="on";

//Classe de la feuille de style correspondant à l'onglet (ou aux onglets) actuellement fermé(s)
CLASS_ONGLET_OFF="off";

function OngletMgr(sOngletMgrId ,sOngletON){
	this.aStatus= new Array()

	this.init = OngletMgr_init //  initialise tous les onglets d'après l'id sOngletMgrId
	this.switchOnglet = OngletMgr_switchOnglet // force un onglet et rafraichit
	this.repaint = OngletMgr_repaint // rafraichit l'écran (utile après expandAll)
	this.expandAll = OngletMgr_expandAll // ouvre tous les contenus
	this.desactivate = function(sOnglet){this.aStatus[sOnglet]= -1;this.repaint()}
	this.reactivate = function(sOnglet){this.aStatus[sOnglet]= false;this.repaint()}
	this.renameOnglet = OngletMgr_renameOnglet

	this.init(sOngletMgrId ,sOngletON)

}

function OngletMgr_renameOnglet (sOnglet, sNewName){	
	// var ob = document.getElementsByName(sOnglet)[0]
	var ob = document.getElementById(sOnglet)	
	if (ob) ob.innerText=sNewName
}

function OngletMgr_switchOnglet (sOnglet){
//Basculer vers l'onglet défini par son id
	this.sCurrent = sOnglet
	for (var x in this.aStatus ) {
		// mettre à jour l'array
		if (this.aStatus[x]!=-1) { this.aStatus[x] = ((x==sOnglet)?true:false) }
		}
	this.repaint()
}

function OngletMgr_repaint(){
	for (var x in this.aStatus ) {
		// changer la classe et rafraichir l'affichage
		// var ob = document.getElementsByName(x)[0]
		var ob = document.getElementById(x)
		if (ob)  {
			switch (this.aStatus[x]) {
			case true :
				//OLD charte V2 : ob.className='ongletOn';
				ob.className=CLASS_ONGLET_ON;
				ob.style.display='inline';
				// ob.style.display='block';
				showHideDiv( true, x+'Contenu');
				break;
			case -1 :
				// onglet désactivé
				ob.style.display='none';
				//OLD Charte V2 ob.className='ongletOff' ;
				ob.className=CLASS_ONGLET_OFF;
				showHideDiv( false, x+'Contenu');
				break;
			default :
				ob.className='ongletOff' ;
				ob.style.display='inline';
				// ob.style.display='block';
				showHideDiv( false, x+'Contenu');
			}
		}
	}
}


function OngletMgr_expandAll (){
	for (var x in this.aStatus ) {
		// force l'affichage sauf pour les onglet désactivés
		if (this.aStatus[x] != -1){
		  showHideDiv( true, x+'Contenu')
		  // changer la classe 
		  // var ob = document.getElementsByName(x)[0]
		  var ob = document.getElementById(x)
		  if (ob)  ob.className=CLASS_ONGLET_ON
		}
	}		
}

function OngletMgr_init (sOngletMgrId ,sOngletON){
// initialise tous les onglets d'après l'id ongletMgr-- sOngletON est l'id de l'onglet à mettre ON

	// var oMgr = document.getElementsByName(sOngletMgrId)[0]
	var oMgr = document.getElementById(sOngletMgrId)
	if (! oMgr) return false;

	oMgr.ongletMgr=this // pour pouvoir remonter à l'objet à partir de l'id
	
	var allTags = oMgr.getElementsByTagName('A')
				
	for(var y=0; y < allTags.length ; y++){
		var node = allTags[y] ;
		if (node.id !='') {
			this.aStatus[node.id]= false;
			var tmp = this
			node.onclick = function () {tmp.switchOnglet(this.id)} 
			node.ongletMgr=this // pour pouvoir remonter à l'objet à partir de l'id
		}
	} 
	
	if (sOngletON) {
		this.aStatus[sOngletON]= true
	} else {
		// prendre le 1er onglet par défaut
		for (var x in this.aStatus ) {
			this.aStatus[x] = true
			break
		}
	}
	
	this.repaint()
}
function switchOnglet(sOnglet){
// ouverture d'un onglet sans connaître la référence de l'objet OngletMgr qui le gère
// on passe simplement l'id de l'onglet désiré
// il est possible d'ouvrir un sous-onglet en passant la hiérarchie
// exemple : 'onglet3/onglet3_3'
  var isError
  
  var aIds = sOnglet.split('/')
  for(var i=0; i < aIds.length ; i++){
    var sId = aIds[i]
  	var node = document.getElementById(sId)
      try {
		    node.onclick()//ok
		    //node.ongletMgr.switchOnglet(sId)//ok aussi
	     } catch(e) {
          alert ('Erreur : ' + sId)
		      isError = true
	     }
	  }
	  
	  if (isError) return false; else return true
}

function showHideDiv(show, id, doc){
	if (!doc) doc=document
	var disp= (show)?"inline":"none";
	// var disp= (show)?"block":"none";
	
	var elts= doc.getElementById(id);
	elts.style.display=disp;
	/*var elts= doc.getElementsByName(id);
	if (elts.length > 0){
		for (var i=0; i<elts.length; i++){
			elts[i].style.display=disp;
		}
	}*/
}

