var objectTimeout;
var menuOn = false;
var fermeture_millisec = 1200;

	//--------------------------------------------------------------------------------------------------------
	//--------------------------------------------------------------------------------------------------------
	// Ce que le code fait ? il redéfinit les fonctions “children, firstchild, lastchild” pour Firefox,
	// comme ca elles ont le meme comportement que sur IE. On a mis children plutot que childNodes car
	// pour définir children il faut faire appel à childNodes, il y aurait donc eu une référence circulaire.
	var ie = /MSIE/.test(navigator.userAgent);
	var moz = !ie && navigator.product == "Gecko";
	if (moz) {
	 HTMLElement.prototype.__defineGetter__("children", function() {
		   var arr = new Array(), i = 0, l = this.childNodes.length;
		   for ( i = 0; i < l; i++ ) {
			   if ( this.childNodes[ i ].nodeType == 1 ) {
					arr.push( this.childNodes[ i ] );
			   }
		   }
	  return arr;
	  });
	  HTMLElement.prototype.__defineGetter__("firstChild", function() {
			var node = this.childNodes[ 0 ];
			while (node.nodeType != 1) node = node.nextSibling;
				 return node;
			});
	 HTMLElement.prototype.__defineGetter__("lastChild", function() {
	 var node = this.childNodes[ this.childNodes.length - 1 ];
	 while (node.nodeType != 1) node = node.previousSibling;
		   return node;
	  });
	}
	//--------------------------------------------------------------------------------------------------------
	//--------------------------------------------------------------------------------------------------------
	var idNiv1Actif=null;
	function drawMenu(type_menu) {
	
		if(!Dom('childMenu'+type_menu)) return;
		
		idNiv1Actif=type_menu;
		menuOn = true;
		
		// Au changement de niveau 1 on efface le niveau 2 s'il existe
		hideMenuNiv2();
		
		//posXMenuBase = fDomOffset(Dom('menuBase'),'offsetLeft'); // Récup posX du menu principal
		posXMenuBase = 0; // Récup posX du menu principal
		
		Dom('menuFlottant').style.display = 'block'; // Affiche le sous-menu
		
		// Récup posX du sous-menu (selon <ul>) + ajout posX du menu principal
		addOffsetX=0;
		addOffsetX = Dom('childMenu'+type_menu).style.left;
		addOffsetX = parseInt( addOffsetX.substring(0,addOffsetX.length-2) );
//		addOffsetX = 300;
//		alert(type_menu);
		addOffsetX = document.getElementById('A'+type_menu).style.left;
		addOffsetX = fDomOffset(Dom('A'+type_menu),'offsetLeft');
		Dom('menuFlottant').style.left = (addOffsetX+posXMenuBase)+'px';
		
		// Récup largeur du sous-menu (selon <ul>)
		widthTMP = Dom('childMenu'+type_menu).style.width; 
		Dom('menuFlottant').style.width =  parseInt(widthTMP.substring(0,widthTMP.length-2) )+'px';
		
		// Récup contenu du sous-menu (selon <ul>) + ajout des params JS (variables de tempo du menu)
		var WriteMenu = ''; 
		WriteMenu += Dom('childMenu'+type_menu).innerHTML;
		var expLI=new RegExp("<li>","gi");
		WriteMenu = WriteMenu.replace(expLI,'<li style=\'width:'+widthTMP+';\' onmouseover=\'menuOn=true; activeItem(this);\' onmouseout=\'menuOn=false; unactiveItem(this);\'>');
		Dom('menuFlottant').innerHTML = WriteMenu;
		
		// Parcours des LI à la recherche d'un sous-niveau
		var nbItems = Dom('childMenu'+type_menu).getElementsByTagName('li').length;
		for(iSsMenu=0;iSsMenu<nbItems;iSsMenu++) {
			// Recherche du <ul> sous-niveau
			testExist = Dom('childMenu'+type_menu+'_'+(iSsMenu+1));
			if(testExist) {
				// Intégre une flèche si niv2 détecté
				Dom('menuFlottant').children[iSsMenu].style.backgroundImage='url(./graphs/puce1.gif)';
				// Intégre le mouseover pour l'ouverture du menu niveau 2
				idNiveau2 = parseInt(iSsMenu)+1;
				Dom('menuFlottant').children[iSsMenu].id=idNiveau2;
				Dom('menuFlottant').children[iSsMenu].onmouseover = function() { activeItem(this); activeNiveau2(this); bugIESelect(0,2); }
			} 
			else {
				// Si pas de sous-menu on cache le sous-menu en cours quel qu'il soit
				Dom('menuFlottant').children[iSsMenu].onmouseover = function() { activeItem(this); hideMenuNiv2(); bugIESelect(0,1); }
			}
		}
		objectTimeout = window.setTimeout("hideMenu()",fermeture_millisec);
		
		//bugIESelect(1,1);
		
		//-------------------------------------------------------------------------------------------------------------------------------
		//-------------------------------------------------------------------------------------------------------------------------------
	}

	activeNiveau2 = function(domLI) {
		
		idniv2 = domLI.id;
		decalageX_CSS=4; // Décalage provoqué par CSS (à détecter en javascript dans le futur...)
		hauteurItem_CSS=21; // Hauteur configurée en CSS (à détecter en javascript dans le futur...)
		
		if(Dom('childMenu'+idNiv1Actif+'_'+idniv2)) {
			// Récup posX du niveau 1
			OffsetXniv1 = Dom('menuFlottant').style.left;	
			OffsetXniv1 = parseInt( OffsetXniv1.substring(0,OffsetXniv1.length-2) );
			// Récup largeur du niveau 1
			widthNiv1 = Dom('childMenu'+idNiv1Actif).style.width; 
			widthNiv1 = parseInt( widthNiv1.substring(0,widthNiv1.length-2) );
			OffsetXniv1 += widthNiv1;
			// Récup largeur du niveau 2
			widthTMP = Dom('childMenu'+idNiv1Actif+'_'+idniv2).style.width; 
			widthTMP = widthTMP.substring(0,widthTMP.length-2);
			widthTMP = parseInt(widthTMP);
			// Récup posX du niveau 2
			OffsetYniv1 = fDomOffset(Dom('menuFlottant'),'offsetTop');
			OffsetYniv1 = OffsetYniv1 + (hauteurItem_CSS*(idniv2-1)); // Ajoute 'idniv2' fois la hauteur d'un item du menu (arrive en face du papa comme ça !)
			// Positionnement du niveau 2
			azimutLI = Dom('childMenu'+idNiv1Actif+'_'+idniv2).style.azimuth;
			
				//Si la propriété CSS azimut est configurée on inverse la position du menu niv2
				if( azimutLI!=undefined && azimutLI.lastIndexOf('behind')!=-1)
					Dom('menuFlottant2').style.left = OffsetXniv1-widthTMP-widthNiv1-decalageX_CSS+'px';
				else
					Dom('menuFlottant2').style.left = OffsetXniv1+decalageX_CSS+'px';
					
			Dom('menuFlottant2').style.top = OffsetYniv1+'px';
			Dom('menuFlottant2').style.display = 'block';
			// Récup contenu du niveau 2 + ajout des params JS (variables de tempo du menu)
			var WriteMenu = ''; var expLI=new RegExp("<li>","gi");
			Dom('menuFlottant2').style.width =  widthTMP+'px';
			WriteMenu += Dom('childMenu'+idNiv1Actif+'_'+idniv2).innerHTML;
			WriteMenu = WriteMenu.replace(expLI,'<li style=\'width:'+widthTMP+';\' onmouseover=\'menuOn=true; activeItem(this);\' onmouseout=\'menuOn=false; unactiveItem(this);\'>');
			Dom('menuFlottant2').innerHTML = WriteMenu;
		}
	}

	function hideMenuNiv2() {
		if(Dom('menuFlottant2')) {
			bugIESelect(1,2);
			Dom('menuFlottant2').style.display = 'none';
			Dom('menuFlottant2').innerHTML = '';
		}
	}
	
	function hideMenu() {
	
		if(menuOn==false) {
			//-------------------------------------------------------------------------------------------
			//-------------------------------------------------------------------------------------------
			bugIESelect(1,1);

			if(Dom('menuFlottant').style.display!='none') {
				Dom('menuFlottant').style.display = 'none';
			}
			if(Dom('menuFlottant').innerHTML!='') {
				Dom('menuFlottant').innerHTML = '';
			}
			hideMenuNiv2();
			window.clearTimeout(objectTimeout);
		}else{bugIESelect(0,1);}
		objectTimeout = window.setTimeout('hideMenu()',fermeture_millisec);
	}
	
	function bugIESelect(afficher, niveau) {
		//-------------------------------------------------------------------------------------------------------------------------------
		// cache les <SELECT> de la page en cours
		if(niveau==1) strMenu = 'menuFlottant'; else  strMenu = 'menuFlottant2';
		if(afficher==0) {
			var x = document.getElementsByTagName("select"); var status;
			for (i=0;i < x.length; i++) {
				topSelect = fDomOffset(x[i], 'offsetTop'); // Position Y du select
				leftSelect = fDomOffset(x[i], 'offsetLeft'); // Position X du select
				widthSelect = x[i].offsetWidth; // Largeur du select
				YMaxMenu = fDomOffset(Dom(strMenu), 'offsetTop')+Dom(strMenu).offsetHeight; // Position Y du bas du menu affiché
				leftOffsetMenu = fDomOffset(Dom(strMenu), 'offsetLeft'); // Position X du départ du menu affiché
				widthOffsetMenu = Dom(strMenu).offsetWidth; // Largeur du menu affiché
				
				isGaucheTouche=false; isDroiteTouche=false; isEnsembleTouche=false; 
				if(leftOffsetMenu>leftSelect && leftOffsetMenu<leftSelect+widthSelect) isGaucheTouche=true;
				if(leftOffsetMenu<leftSelect && leftOffsetMenu+widthOffsetMenu>leftSelect) isDroiteTouche=true;
				if(leftOffsetMenu>=leftSelect && leftOffsetMenu+widthOffsetMenu<=leftSelect+widthSelect) isDroiteTouche=true;
				
				// Si le select empiète sur le menu, on le cache
				if( topSelect<YMaxMenu && (isGaucheTouche || isDroiteTouche || isEnsembleTouche) ) {
					x[i].style.visibility = 'hidden';
				}
			}
			// cache les <SELECT> de toutes les iframes
			tabFrames = window.frames;
			/*for(iFrame=0;iFrame<tabFrames.length;iFrame++) {
				tmpFrame = tabFrames[iFrame];
				x = tmpFrame.document.getElementsByTagName("select"); 
				for (ifr=0;ifr < x.length; ifr++) {
					x[ifr].style.visibility = 'hidden';
				}
			}*/
		}else {
			//-------------------------------------------------------------------------------------------
			// Affiche les <SELECT>
			var x = document.getElementsByTagName("select");var status;
			for (i=0;i < x.length; i++)
				x[i].style.visibility = 'visible';
			// Affiche les <SELECT> de toutes les iframes
			tabFrames = window.frames;
			/*for(iFrame=0;iFrame<tabFrames.length;iFrame++) {
				tmpFrame = tabFrames[iFrame];
				x = tmpFrame.document.getElementsByTagName("select"); 
				for (ifr=0;ifr < x.length; ifr++) {
					x[ifr].style.visibility = 'visible';
				}
			}*/
		}
	}
	
	function menuOff() {menuOn = false;}
	function activeItem (domLI) {
		domLI.style.backgroundColor = '#FFFFFF';
		if(domLI.getElementsByTagName('a')[0])
			domLI.getElementsByTagName('a')[0].style.color = '#005C9C';
		else
			domLI.style.color = '#005C9C';
	}
	function unactiveItem (domLI) {
		//hideMenuNiv2();
		domLI.style.backgroundColor = 'transparent';
		if(domLI.getElementsByTagName('a')[0])
			domLI.getElementsByTagName('a')[0].style.color = '#FFFFFF';
		else
			domLI.style.color = '#FFFFFF';
	}
	function Dom(chaine) {
		return document.getElementById(chaine);
	}
	fDomOffset = function(oObj, sProp) {
		// oObj : [Object] - Objet dont on désire le positionnement
		// sProp : [String] - Propriété désirée : offsetLeft - offsetTop
		var iVal = 0;
		// On boucle tant que l'on n'est pas à la racine du document
		while (oObj && oObj.tagName != 'BODY') {
			eval('iVal += oObj.' + sProp + ';');
			oObj = oObj.offsetParent;
		}
		return iVal;
	} 
