
// compatibilité -----------------------------------------------
var ns4= (document.layers);
var ie4= (document.all && !document.getElementById);
if(ie4) {
	document.getElementById= function(id) { return(document.all(id)); }
	document.getElementsByTagName= function(id) { return(document.all.tags(id)); }
}
if(ns4) {
	document.getElementById= function(id) { return(document.layers[id]); }
}


var newCount=0;
var menuType=1;

// Menu principal : c'est un div qui contiendra tous les autres div
// Si le type est :
// 1 : alors on récupère la position courante dans un champ hidden du menu
// 2 : alors on récupère la position courante dans le hash de l'url :  #pos=ID...

function main(type) {
	// ID du main est ID0
	// Le nombre de noeud se trouve dans le champ masque
	var intCount = newCount++;
	var id='ID' + intCount;
	
	if((type==null)||((type!=1)&&(type!=2))) {type=1;}
	menuType=type;
	this.id=id;
	this.count=intCount;
	this.text = '<div id=' + id + '></div><input type="hidden" id=h' + intCount + ' value="0">';
	if(type==1) {this.text += '<input type="hidden" id=posMenu value="">';}
	document.write(this.text);
	this.parent=null;
}


// ------------------------------------------------------------
// Les noeuds principaux : ils sont rattachés au Menu principal
// Ils sont composés d'un div contenant : une image et le titre (sous-div), avec une action possible quand on clique dessus
// et d'un autre sous-div : pour les sous-noeuds qui leur sont accrochés
// S'il y a une image devant le noeud, et si on clique sur le titre ou sur l'image, alors cela développe le sous-div subID
// Quand un sous-noeud lui est rajouté, alors le alt de l'image n'est plus vide, et un l'image devient un '+'.
// Il est egalement possible de rajouter deux images de taille imposée à cote du titre.
// On rajoute dans le champ masqué le numero ID de son parent

function addNode(path, caption,pNode,classe,theURL,tooltip,idMenu) {
	if(classe==null) {classe='';}
	if(theURL==null) {theURL='';}
	if(tooltip==null) {tooltip=caption;}
	if(tooltip.length<=1) {tooltip=caption;}
	// Crée le contenu du noeud : le niveau permet l'indentation
	this.niv = 1;
	intCount = newCount++;
	sText =  '<div title="">';
	sText += '<div class="divmenu" id=ID' + intCount;
	sText += ' onClick="Collapse(\'' + path + '\',' + intCount + ');" ';
	sText += ' onmouseover="this.className=\'divmenu divmenuhover\';" ';
	sText += ' onmouseout="this.className=\'divmenu\';">';
	sText += '<img src="'+path+'img/themes/formalyon/fleche.gif" id="imgID' + intCount + '" alt="' + tooltip + '">';
	if(theURL!='') {
		sText += '<a ' + theURL + ' title="' + tooltip + '" class="' + classe + 'link">' + caption + '</a>';
		sText += '</div>';
	} else {
		sText += '<font class="'+classe+'">' + caption + '</font>';
		sText += '</div>';
		sText += '<div class="submenu" id="SUB' + intCount + '" style="display:none"></div>';
	}
	sText += '<input type="hidden" id=h' + intCount + ' value="' + pNode.count + '" alt="' + tooltip + '">';
	sText += '<input type="hidden" id=corresp' + idMenu + ' value="' + intCount + '">';
	sText += '</div>';
	document.getElementById(pNode.id).innerHTML += sText
	this.id = 'ID' + intCount;
	this.count = intCount;
	this.imgID= 'imgID' + intCount;
	this.subID= 'SUB' + intCount;
	this.hID= 'h' + intCount;
	this.parent = pNode;
	document.getElementById('h0').value = parseInt(document.getElementById('h0').value) + 1;
	return (this);
}

// Les sous-noeuds sont des noeuds rattachés à des noeuds principaux ou secondaires (donc pas au Menu principal)
// S'il y a une action, donc si c'est un lien, on doit re-ouvrir le noeud, et pour cela on met false
// car il doit être fermé (clic sur le lien), puis redéveloppé par le clic sur le div

function addSubNode(path, caption,pNode,classe,theURL,tooltip,idMenu) {
	if(classe==null) {classe='';}
	if(theURL==null) {theURL='';}
	if(tooltip==null) {tooltip=caption;}
	if(tooltip.length<=1) {tooltip=caption;}
	// Modifie l'image et le alt de l'image du titre du noeud parent
	document.getElementById(pNode.imgID).src=path+'img/themes/formalyon/fleche.gif';
//	document.getElementById(pNode.imgID).alt='+';
	// Le niveau est incrémenté de 1 par rapport au noeud parent (pNode)
	this.niv = parseInt(pNode.niv) + 1;
	// Crée le contenu du noeud
	intCount = newCount++;
	sText =  '<div style="display:block;margin-left:' + (this.niv * 2) + 'pt;">';
	sText += '<div class="divmenu" id=ID' + intCount;
	sText += ' onClick="Collapse(\'' + path + '\','  + intCount + ');" ';
	sText += ' onmouseover="this.className=\'divmenu divmenuhover\';" ';
	sText += ' onmouseout="this.className=\'divmenu\';">';
	sText += '<img src="'+path+'img/themes/formalyon/fleche.gif" id="imgID' + intCount + '" alt="' + tooltip + '">';
	if(theURL!='') {
		sText += '<a ' + theURL + ' title="' + tooltip + '" class="' + classe + '">' + caption + '</a>';
		sText += '</div>';
	} else {
		sText += '<font class="'+classe+'">' + caption + '</font>';
		sText += '</div>';
		sText += '<div id="SUB' + intCount + '" style="display:none"></div>';
	}
	sText += '<input type="hidden" id=h' + intCount + ' value="' + pNode.count + '" alt="' + tooltip + '">';
	sText += '<input type="hidden" id=corresp' + idMenu + ' value="' + intCount + '">';
	sText += '</div>';
	document.getElementById(pNode.subID).innerHTML += sText
	this.id = 'ID' + intCount;
	this.count = intCount;
	this.imgID= 'imgID' + intCount;
	this.subID= 'SUB' + intCount;
	this.hID= 'h' + intCount;
	this.parent = pNode;
	document.getElementById('h0').value = parseInt(document.getElementById('h0').value) + 1;
	return (this);
}

// Ouvre ou ferme le noeud s'il a un plus ou un moins
// Si 'open' est renseigné et est true (c'est le booléen pas le string), alors ouvre forcément, si false ferme forcément
function Collapse(path, snode, open) {
	node=document.getElementById('SUB' + snode);
	if(node!=null) {
		img=document.getElementById('imgID' + snode);
		if (img.alt!='') {
			if (open==null) {
				if (node.style.display=='none') {
					node.style.display='block';
					img.src=path+'img/themes/formalyon/fleche.gif';
//					img.alt='-';
			
				} else {
					node.style.display='none';
					img.src=path+'img/themes/formalyon/fleche.gif';
//					img.alt='+';
				}
			} else if (open==false) {
				node.style.display='none';
				img.src=path+'img/themes/formalyon/fleche.gif';
//				img.alt='+';	
			} else if (open==true) {
				node.style.display='block';
				img.src=path+'img/themes/formalyon/fleche.gif';
//				img.alt='-';
			}
		}
	}
}

// Ouvre (open=true) le noeud et tous ses ascendants, ou ouvre (open=false) le noeud et tous ses descendants
function CollapseAll(path, snode,open) {
	var node=document.getElementById('h' + snode);
	var img=document.getElementById('imgID' + snode);
	if (open==true) {
		while(node.value != 0) {
			Collapse(path, node.value,open);
			img=document.getElementById('imgID' + node.value);
			node=document.getElementById('h' + node.value);
		}
	} else if (open==false) {
		Collapse(path, snode,true);
		for (i=1;i<=parseInt(document.getElementById('h0').value);i++) {
			if (isChild(i,snode)) {
				Collapse(path, i,true);
			}
		}
	}
}

// Ouvre (open=true) seulement le noeud et tous ses ascendants en fermant ses voisins
// ou ferme (open=false) le noeud et tous ses descendants
function CollapseOnly(path, snode,open) {
	///var node=document.getElementById('SUB' + snode);
	///var img=document.getElementById('imgID' + snode);
	if (open==true) {
		CollapseOnly(path, getRoot(snode),false);
		CollapseAll(path, snode,true);
	} else if (open==false) {
		Collapse(path, snode,false);
		for (i=1;i<=parseInt(document.getElementById('h0').value);i++) {
			if (isChild(i,snode)) {
				Collapse(path, i,false);
			}
		}
	}
}

// Retourne le noeud parent à la racine
function getRoot(snode) {
	var node = document.getElementById('SUB' + snode);
	var root = parseInt(snode);
	for (i=1;i<=parseInt(document.getElementById('h0').value);i++) {
		if ((isChild(root, i)) && (parseInt(document.getElementById('h' + i).value)==0)) {
			root=i;
		}
	}
	return (root);
}

// Retourne si le cNoeud est un descendant du pNoeud
function isChild(cNoeud,pNoeud) {
	var bool = false;
	if ((parseInt(cNoeud)>1) && (parseInt(pNoeud)>0)) {
		var nParent = document.getElementById('h' + cNoeud).value;
		while ((bool==false) && (parseInt(nParent) > 0)) {
			if (parseInt(nParent) == parseInt(pNoeud)) {
				bool=true
			}
			nParent = document.getElementById('h' + nParent).value;
		}
	}
	return (bool);
}


// Retourne la position active du menu
function posCurrent() {
	if(menuType==1){
		return (document.getElementById('posMenu').value);
	} else if(menuType==2) {
		var temp=location.hash;
		var bool=temp.lastIndexOf('pos=ID');
		if(bool==-1) {
			return ('');
		} else {
			i= 0;
			var pos=temp.substring(bool + 6,temp.length)
			while(isInteger(temp.substring(bool + 6,temp.length - i))==false) {
				pos=temp.substring(bool + 6,temp.length - i);
				i++;
			}
			return (pos);
		}
	}
}

// Définit la nouvelle position active du menu
// Et remet l'ancienne position active avec les class par défaut
function setPos(newPos,oldPos) {
	// ClassPosition est la classe de l'élément actif du menu
	var ClassPosition = 'posmenu';

	if (menuType==1) {document.getElementById('posMenu').value=newPos;}
	if (oldPos!='') {
		document.getElementById('aID' + oldPos).className=document.getElementById('h' + oldPos).alt;
	}
	document.getElementById('aID' + newPos).className=ClassPosition;
}


// Regarde si le texte est un nombre entier
function isInteger(sText)
{
	var ValidChars = "0123456789";
	var isNumber=true;
	var Char;
	for (i = 0; i < sText.length && isNumber == true; i++) {
		Char = sText.charAt(i);
		if (ValidChars.indexOf(Char) == -1) {
			isNumber = false;
		}
	}
	return isNumber;
}

// Déplis le menu sélectionné
function openSelectedMenu (path, tabSeletedMenu)
{
	if(tabSeletedMenu.length>0) {
		var node=document.getElementById('corresp' + tabSeletedMenu[tabSeletedMenu.length-1]);	
		if(node!=null) CollapseOnly(path, node.value,true);
	}
}