/********************************************/
/* Variables global pour les menus                              */
/********************************************/
var tmr = new Array(); //gestionnaire de timer
var isLtR = new Array(); //savoir quel menu defile dans quel sens (change en chemin si deborde a droite)
var vertical = new Array(); //savoir par menu si le menu est vertical ou non
var menuleftpos = new Array(); //sauvegarde derniere position
var menuisleftpos = new Array();
var cM = new Array(); 
var m = new Array();
var om = new Array();

/********************************************/
/* Fonction hdem                                                           */
/* Hide Element - met l'element invisible                   */
/********************************************/
function hdem(id, noMenu){
  if(id!='m' + noMenu){
	document.getElementById(id).style.visibility="hidden";
  }
}

/********************************************/
/* Fonction swpc                                                           */
/* Swap Colors - Interchange les couleurs                 */
/* d'un id.                                                                      */
/********************************************/
function swpc(id,c1,c2,t1,t2){
  if(gtC(document.getElementById(id).style.backgroundColor).toUpperCase()=="#"+c2.toUpperCase()){
    document.getElementById(id).style.backgroundColor="#"+c1;
  } else {
    document.getElementById(id).style.backgroundColor="#"+c2;
  }
  if(gtC(document.getElementById('t'+id).style.color).toUpperCase()=="#"+t2.toUpperCase()){
    document.getElementById('t'+id).style.color="#"+t1;
  } else {
    document.getElementById('t'+id).style.color="#"+t2;
  }
}

/********************************************/
/* Fonction clearTimeoutE                                           */
/* Ferme un timer dynamic dans un array                   */
/* concu pour le menu                                                   */
/********************************************/
function clearTimeoutE(noMenu) {
  clearTimeout(tmr[noMenu]);
}

/********************************************/
/* Fonction hded                                                           */
/********************************************/
function hded(noMenu){
  if(eval(tmr[noMenu])!=undefined){
    clearTimeoutE(noMenu);
  }
  tmr[noMenu]=setTimeout("clrm('" + noMenu + "')",500);
}

/********************************************/
/* Fonction gtC                                                              */
/* (getColor): retourne la couleur hexa                       */
/* a partir d'une propriete .style.backgroundColor    */
/* (voir swpc)                                                                 */
/*********************************************/
function gtC(c){
  if (document.all){
    return c;
  }else{
    var cl = new String(c);
    cl = cl.substr(4,eval(cl.length-5)).split(",");
    var tempo=new String();
    tempo=tempo.concat(gtH(Math.floor(cl[0]/16)));
    tempo=tempo.concat(gtH(cl[0]%16));
    tempo=tempo.concat(gtH(Math.floor(cl[1]/16)));
    tempo=tempo.concat(gtH(cl[1]%16));
    tempo=tempo.concat(gtH(Math.floor(cl[2]/16)));
    tempo=tempo.concat(gtH(cl[2]%16));
    return "#"+tempo; 
  }
}

/******************************************/
/* Fonction gtH                                                           */
/* (getHexa): retourne le code hexa                        */
/* Ex: 15 retourne F, utilisé pour créer une            */
/* couleur héxadecimale.                                          */
/* IE a deja #FF0000, mais d'autres navigateurs */
/* convertise la couleur en decimale... voir gtC()   */
/******************************************/
function gtH(n){
  if (n>9){
    switch(n){
      case 10:return "A";
      case 11:return "B";
      case 12:return "C";
      case 13:return "D";
      case 14:return "E";
      case 15:return "F";
    }
  }else{
    return n;
  }
}

/*******************************************/
/* Fonction clrm                                                          */
/*******************************************/
function clrm(noMenu){
  if (isLtR[noMenu] == false) {
    isLtR[noMenu] = true; /* RESET IT */ 
  } 
  cM[noMenu] = null;
  for(var i=0;i<om[noMenu][0].length;i++){
    if(om[noMenu][0][i]!='m' + noMenu){
      document.getElementById(om[noMenu][0][i]).style.visibility="hidden";
    }
  }
  om[noMenu] = [['m' + noMenu],[true],['m' + noMenu]];
}

/*******************************************/
/* Fonction hdsm                                                         */
/*******************************************/
function hdsm(id, noMenu){
  for (var i=0;i<om[noMenu][0].length;i++){
    if (om[noMenu][2][i ]==id){
      cM[noMenu] = om[noMenu][0][i-1];
      for ( var j = i; j < om[noMenu][0].length; j++ ){ 
        hdem( om[noMenu][0][j] , noMenu);
      }
      om[noMenu][0] = om[noMenu][0].slice(0,i);
      om[noMenu][1] = om[noMenu][1].slice(0,i);
      om[noMenu][2] = om[noMenu][2].slice(0,i);
      break;
    }
  }
}


/*******************************************/
/* Fonction shwm                                                         */
/* Fonction principal qui gere le positionnement     */
/* des menus à déployer                                              */
/*                                                                                   */
/* menu:
/* par:
/* id:
/* widthMenu:
/* noMenu:
/*******************************************/
function shwm(menu,par,id, widthMenu, noMenu){
	if(cM[noMenu]!=menu){
		var leftpos=0;
 		if (par.substring(0,1) == "m") {
			obj = document.getElementById(id); 
			var foundtable = 0; 
			var foundtbody = 0; 
			var foundtr = 0;
			var foundtrvalue = 0;  
			toppos=0; 
			while (obj) { 
					/* Les seuls bons calculs, c'est la premier offset de la premiere table, + le tr ou td dans la table - J'ai choisis le tr */ 
					/* On doit aussi verifier si le offset du TR est du a la bordure, si oui, ne pas en tenir compte */ 
					if (obj.nodeName.toUpperCase() == "TABLE") { 
						++foundtable;
						if (foundtable > 2) { 
							toppos+= obj.offsetTop;  
							if (document.all) {
								toppos+=1; /* IE */
							}
						}
					}   
					if (obj.nodeName.toUpperCase() == "DIV") { 
						toppos+= obj.offsetTop; 
						if (vertical[noMenu] == true) {
							toppos+=1; /* IE */
						}
					} 

					if (obj.nodeName.toUpperCase() == "TR") { 
							toppos+= obj.offsetTop;
							foundtrvalue = obj.offsetTop;
							++foundtr;
					} 
					if ((obj.nodeName.toUpperCase() == "TBODY") && (foundtbody <= 1)) {
						if (foundtbody == 1) { 
							if (foundtrvalue == obj.offsetTop) {
								toppos-= obj.offsetTop;
							}
						}
						++foundtbody;
					}
				obj = obj.parentNode; 
			}
			if (vertical[noMenu] == false) {
				leftpos = document.getElementById('m' + noMenu).offsetLeft + document.getElementById(par).offsetWidth - ((((document.getElementById(par).offsetWidth) - (document.getElementById(id).offsetWidth)) / 2));  
             toppos+=1;    
			} else { 
				if ((foundtable > 2) && (document.all)) {
					toppos-=1; /* IE */
				}
				toppos-=1;
				leftpos = document.getElementById('m' + noMenu).offsetLeft;
	            toppos+=document.getElementById(id).offsetHeight;
             toppos+=(((document.getElementById(par).offsetWidth) - (document.getElementById(id).offsetWidth)) / 2);
			}   
		} else {
                            
			obj = document.getElementById(id).parentNode.parentNode; 
			var foundtable = 0; 
			var foundtr = 0; 
			var foundtrvalue = 0; 
			var foundtbody = 0; 
			var num = 0; 
			toppos=document.getElementById(id).offsetTop; 
			while (obj) { 
 					/* Les seuls bons calculs, c'est la premier offset de la premiere table, + le tr ou td dans la table - J'ai choisis le tr */ 
					/* On doit aussi verifier si le offset du TR est du a la bordure, si oui, ne pas en tenir compte */ 
    					if ((obj.nodeName.toUpperCase() == "TABLE") && (foundtable < 2)) {  
							  toppos+= obj.offsetTop; 
							  ++foundtable; 
					}   
					if ((obj.nodeName.toUpperCase() == "TR") && (foundtr == 0)) { 
						toppos+= obj.offsetTop; 
						foundtr = 1; 
						foundtrvalue = obj.offsetTop; 
					} 
					if ((obj.nodeName.toUpperCase() == "TBODY") && (foundtbody == 0)) { 
						/* LE TR va toujours passer avant le tbody, donc on va toujorus avoir une valeur a comparer entre le tr et le tbody */ 
						if (foundtrvalue == obj.offsetTop) { 
						  toppos-= obj.offsetTop; 
						  foundtbody = 1; 
						} 
					}					 
				obj = obj.parentNode; 
			}  
			toppos+=1; /* DECALLAGE */ 
		} 
		var window;
		if (document.all){window=document.body.clientWidth;}else{window=document.width}
		cM[noMenu] = par;
		cM[noMenu] = menu;
		hdsm(par, noMenu);
		var level = om[noMenu][0].length;
		if ((par.substring(0,1) != "m")) {
			/* SOUS NIVEAUX */ 
			leftpos = menuleftpos[level - 1]; /* POSITIONNEMENT A GAUCHE DU DERNIER */ 
			if (isLtR[noMenu]) { 
				/* VERS LA DROITE */ 
				leftpos += document.getElementById(par).offsetWidth; /* R'AJOUT DU WIDTH DU DERNIER */ 
				leftpos -= (((document.getElementById(par).offsetWidth) - (document.getElementById(id).offsetWidth)) / 2);
			} else { 
				/* VERS LA GAUCHE */ 
				leftpos -= document.getElementById(menu).offsetWidth; /* R'AJOUT DU WIDTH DU DERNIER */ 
				leftpos += (((document.getElementById(par).offsetWidth) - (document.getElementById(id).offsetWidth)) / 2);
				isLtR[noMenu] = true; 
			} 
			menuleftpos[level] = leftpos; 
			menuisleftpos[level] = true; 
		} else { 
			/* MENU PRINCIPAL */ 
			menuisleftpos = 0; 
			menuleftpos[0] = leftpos;   
		} 
		/* DEPASSEMENT VERS LA DROITE  VALIDATION */ 
		if (eval(leftpos + document.getElementById(menu).offsetWidth) > eval(window)) { 
			/* AVANT DE FORCER VERS LA GAUCHE, VERIFIER SI IL ENTRE A GAUCHE */ 
			if (eval(leftpos - document.getElementById(id).offsetWidth - document.getElementById(menu).offsetWidth) > 0) {
				if (par.substring(0,1) == "m") { 
					isLtR[noMenu]=false; 
					leftpos=window - document.getElementById(menu).offsetWidth; 
					menuleftpos[level] = leftpos; 
				} else { 
					leftpos=menuleftpos[level - 1] - document.getElementById(menu).offsetWidth + ((((document.getElementById(par).offsetWidth) - (document.getElementById(id).offsetWidth)) / 2));  
					menuleftpos[level] = leftpos; 
				}
			}
		} 
		om[noMenu][0][om[noMenu][0].length]=menu; 
		om[noMenu][1][om[noMenu][1].length]=isLtR[noMenu]; 
		om[noMenu][2][om[noMenu][2].length]=par; 
		if(document.all){ 
			document.getElementById(menu).style.top=toppos; 
			document.getElementById(menu).style.left=leftpos; 
			document.getElementById(menu).style.width=widthMenu; 
		}else{ 
		    document.getElementById(menu).setAttribute("style","left: " + leftpos + "px;top: " + toppos + "px;");
		} 
		document.getElementById(menu).style.zIndex=eval(1000+om[noMenu][0].length); 
		document.getElementById(menu).style.visibility="visible"; 
	}
}
