function Calcul (id, x, y, nb_pas, sleepTime) {
  var o = document.getElementById(id);
  var posX = o.offsetLeft; 
  var posY = o.offsetTop;
  
  pasX=Math.abs(x-posX)/nb_pas;
  pasY=Math.abs(y-posY)/nb_pas;
  
  deplace (id, x, y, Math.ceil(pasX), Math.ceil(pasY), sleepTime);
} // Calcul ()

function deplace (id, x, y, pasX, pasY, sleepTime) {
  var o = document.getElementById(id);
  var posX = o.offsetLeft; 
  var posY = o.offsetTop;
    
  if(posX < x) posX += parseInt(pasX, 10); 
  else posX -= parseInt(pasX, 10);
  
  if(posY < y) posY += parseInt(pasY, 10);
  else posY -= parseInt(pasY, 10);
  
  finX = false;
  finY = false;

  if (Math.abs(x-posX)<=pasX) {
    posX = x;
    finX = true;
  }
  
  if(Math.abs(y-posY)<=pasY) {
    posY = y;
    finY = true;
  } 

  o.style.left = posX + 'px';
  o.style.top = posY + 'px';
  
  if (!finX || !finY) 
    setTimeout('deplace("'+id+'", '+x+', '+y+', '+pasX+', '+pasY+', '+sleepTime+');', sleepTime);
} // deplace ()

function Remonter (MenuTab, IdPere, decal, go_up_slow) {
  for(var i=0; i<MenuTab.length; ++i) {
    if(MenuTab[i][2] == MenuTab[IdPere][2] && i > IdPere) {
      var dest_R=parseInt(document.getElementById(i).style.top)-decal;
      if(dest_R < menu_size)
        document.getElementById(i).style.visibility="visible";
      if (!go_up_slow) document.getElementById(i).style.top = dest_R; 
      else Calcul(i, parseInt(document.getElementById(i).style.left), dest_R, nb_pas, tps_pause);
    }
  }
  IdPere=MenuTab[IdPere][2];
  if(IdPere == -1) return;
  Remonter (MenuTab, IdPere, decal_total, go_up_slow);
} // Remonter ()

function fermerFils (MenuTab, IdPere, id_click) {
  if(id_click == '') id_menu = -1;
  var go_up_slow=false;
  var decal=0;
  // Cache les fils 
  for(var i=0; i<MenuTab.length; ++i) {
    if(MenuTab[i][2] == IdPere && MenuTab[i][6]=='oui')
    { // Tester si le menu que l'on ferme n'a pas des "PETITS FILS" affichés (qu'il faudraient alors cacher) :
      fermerFils (MenuTab, i); 
      /*if(FondMove) 
        document.getElementById(i).style.backgroundImage = (MenuTab[i][2] == -1) ? "url('"+imgInitDad+"')" : "url('"+imgInitSon+"')";*/
      document.getElementById(i).style.top = parseInt(document.getElementById(MenuTab[i][2]).style.top)+marge_befor_fils;
      document.getElementById(i).style.visibility="hidden";
      MenuTab[i][6]='non';

      if(MenuTab[i][2] == id_click) { // alert(id_menu+' '+MenuTab[i][1]);
        go_up_slow=true; }
      ++decal;
    }
  }
   
  // inutile de de faire appel à Remonter si pas de décallage 
  if(decal > 0) {
    decal_total=val_decal_fils_t*decal+marge_befor_fils+marge_after_fils;
    // Remonte les pères et les grands-pères 
    Remonter (MenuTab, IdPere, decal_total, go_up_slow);
  }
} // fermerFils ()

function Descendre (MenuTab, id_menu, decal) {
  for (var i=id_menu; i<MenuTab.length; ++i) { 
    if(i > id_menu) // Ne descendre que les menus PERES situés en dessous des menus fils
      if(MenuTab[i][2] == MenuTab[id_menu][2]) { // Permet de decaler les "FRERES" du menu que l'on ouvre
        var dest=parseInt(document.getElementById(i).style.top)+decal;
        MenuTab[i][6]='oui';
        if(dest > menu_size) 
          document.getElementById(i).style.visibility="hidden";
        
        Calcul(i, parseInt(document.getElementById(i).style.left), dest, nb_pas, tps_pause);
      }    
  }
  // Descendre les frères du père
  IdPere=MenuTab[id_menu][2];
  if (IdPere == -1) return;
  Descendre (MenuTab, IdPere, decal);
} // Descendre ()

function  Menu (MenuTab, id_menu, pas, lien)
{ 
  if(FondMove) 
    Fond (id_menu);
//alert(MenuTab[id_menu][1]+' '+document.getElementById(id_menu).style.backgroundImage);
  nb_pas = pas;
  var IdFilsTab = new Array();
  var TabLg = MenuTab.length;
    
  // Recherche & collecte les FILS :
  //===============================
  for (var i=id_menu; i<TabLg; ++i) { 
    if(MenuTab[i][2] == id_menu) { 
      IdFilsTab.push(i); // => contient tous les ids des fils
    }
  }
  
  // Renvoi le lien 
  // ===============  
  if(MenuTab[id_menu][4] != '') {
    if(lien != 'non') { 
      if(IdFilsTab.length != 0) 
        SetCookie ("fils_deploy", MenuTab[IdFilsTab[0]][6]);
      window.location.replace('?module=index&act_idx='+MenuTab[id_menu][4]);
    } 
  } 
  else { // pour que les menus sans lien, sans fils ne soient pas cliquables
    if(IdFilsTab.length == 0) 
      document.getElementById(id_menu).style.backgroundImage = (MenuTab[id_menu][2] == -1) ? "url("+imgInitDad+")" : (MenuTab[id_menu][7] == 'Last') ? "url("+imgInitLastSon+")" : "url("+imgInitSon+")";
  }
  
  // Quitte si pas de FIlS
  // =====================
  if(IdFilsTab.length == 0) {
    return; 
  } 

  // Ouverture du PERE : montrer les fils:
  //=========================================  
  if (MenuTab[IdFilsTab[0]][6] == 'non')
  { // Avant toute ouverture, regarder si des menus ne sont pas à fermer 
    for (var i=0; i<TabLg; ++i)
      if(MenuTab[i][2] == MenuTab[id_menu][2])
        fermerFils(MenuTab, i);
        
    var i=0;
    var decal=val_decal_fils_t;

    // Décalage des menus FILS :
    //==========================
    if (MenuTab[IdFilsTab[i]][6] == 'oui') return;
    for ( ; i<IdFilsTab.length; ++i){ 
      MenuTab[IdFilsTab[i]][6]='oui';
      var dest=parseInt(document.getElementById(IdFilsTab[i]).style.top)+decal;
      if (dest < menu_size)
        document.getElementById(IdFilsTab[i]).style.visibility="visible";
      Calcul(IdFilsTab[i], parseInt(document.getElementById(IdFilsTab[i]).style.left), dest, nb_pas, tps_pause);
      decal+=val_decal_fils_t;
    } 
    
    decal_final=i*val_decal_fils_t+marge_befor_fils+marge_after_fils; // => Récupération du nombre de px à décaler (vers le bas)
    
    // Décalage des menus PERES positionnés en dessous du menu PERE à ouvrir :
    //========================================================================
    Descendre (MenuTab, id_menu, decal_final);
  }
  else
  { // Il faut refermer le menu id_menu
    //var imgFond = (MenuTab[id_menu][2] == -1) ? "url("+imgInitDad+")" : (MenuTab[id_menu][7] == 'Last') ? "url("+imgInitLastSon+")" : "url("+imgInitSon+")";
    //changeFond (id_menu, imgFond);
    fermerFils (MenuTab, id_menu, id_menu); 
  }
} // Menu ()

// Fonction récursive pour remplir le tableau des menus FILS
function MakeTab (MenuTab, nb_level, id, level)  {
  /*for (var k=0; k<MenuTab.length; k++){
    
  }*/
  for (var j=0; j<MenuTabTmp.length; ++j) {
    if (MenuTabTmp[j][3] == level) {
      for (var k=0; k<MenuTabTmp.length; k++) {
        if(MenuTabTmp[k][0] == MenuTabTmp[j][2]) {
          MenuTabTmp[j][5] = id;
          if (MenuTabTmp[j][4] == 'true')
            MenuTab[id] = new Array (id, MenuTabTmp[j][1], MenuTabTmp[k][5], 0, MenuTabTmp[j][0], MenuTabTmp[j][3], 'non');           
          else 
            MenuTab[id] = new Array (id, MenuTabTmp[j][1], MenuTabTmp[k][5], 0, '', MenuTabTmp[j][3], 'non');
          ++id;
          break;
        }
      }
    }
  }
  ++level;
  if(level <= nb_level && level <= level_bottom)
    MakeTab (MenuTab, nb_level, id, level);
  else return; 
} // MakeTab ()

// Classe dans IdPereTab les id des pères de Id
// =============================================
function SearchDad (MenuTab, Id, Num) {
  if(Id != -1) {
    if(Num == 1) IdPereTab.push(Id);
    else IdTab.push(Id);
    SearchDad (MenuTab, MenuTab[Id][2], Num);
  }
  else return; 
} // SearchDad ()

function SetCookie (name, value) {
	var argv=SetCookie.arguments;
	var argc=SetCookie.arguments.length;
	var expires=(argc > 2) ? argv[2] : null;
	var path=(argc > 3) ? argv[3] : null;
	var domain=(argc > 4) ? argv[4] : null;
	var secure=(argc > 5) ? argv[5] : false;
	document.cookie=name+"="+escape(value)+
		((expires==null) ? "" : ("; expires="+expires.toGMTString()))+
		((path==null) ? "" : ("; path="+path))+
		((domain==null) ? "" : ("; domain="+domain))+
		((secure==true) ? "; secure" : "");
} // SetCookie ()

function getCookieVal(offset) {
	var endstr=document.cookie.indexOf (";", offset);
	if (endstr==-1)
      		endstr=document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
} // getCookieVal ()

function GetCookie (name) {
	var arg=name+"=";
	var alen=arg.length;
	var clen=document.cookie.length;
	var i=0;
	while (i<clen) {
		var j=i+alen;
		if (document.cookie.substring(i, j)==arg)
      return getCookieVal (j);
    i=document.cookie.indexOf(" ",i)+1;
    if (i==0) break;
  }
	return null;
} // GetCookie ()

function changeFond (elem, img) {
  img_old = document.getElementById(elem).style.backgroundImage;
  document.getElementById(elem).style.backgroundImage="url("+img+")";
  document.getElementById(elem).style.color='white';
  //alert(img);
}

function Roll_Out (elem) {
  var pos_url = img_old.indexOf("url(", 0)+4;
  var pos_img = img_old.indexOf(")", pos_url);
  var url_img = img_old.substring(pos_url, pos_img);
  var longueur = url_img.length;
  var debut = longueur-6; 
  var end_img = url_img.substring(debut,longueur);
  document.getElementById(elem).style.backgroundImage="url("+url_img+")"; // mettre url_img entre cotes pour que ça fonctionne sous Mozilla ( "url('"+url_img+"')"; )
  if (end_img!='on.gif'){
    document.getElementById(elem).style.color='#99CC33';
  }
  //alert('Roll : '+MenuTab[elem][1]+' '+document.getElementById(elem).style.backgroundImage);
} 

function Fond (id_menu) {
  // met tout le monde Off (Init)
  for (var i=0; i<MenuTab.length; ++i) 
    document.getElementById(i).style.backgroundImage = (MenuTab[i][2] == -1) ? "url("+imgInitDad+")" : (MenuTab[i][7] == 'Last') ? "url("+imgInitLastSon+")" : "url("+imgInitSon+")";

  IdTab = new Array ();
  SearchDad (MenuTab, id_menu, 2);
  var Menu;
  // met l'arborescence du menu On (Down) 
  for (var i=0; i<IdTab.length; ++i) { 
    Menu = IdTab[i];
    document.getElementById(Menu).style.backgroundImage = (MenuTab[Menu][2] == -1) ? "url("+imgDownDad+")" : (MenuTab[Menu][7] == 'Last') ? "url("+imgDownLastSon+")" : "url("+imgDownSon+")";
  } 
  img_old = (MenuTab[id_menu][2] == -1) ? "url("+imgDownDad+")" : (MenuTab[id_menu][7] == 'Last') ? "url("+imgDownLastSon+")" : "url("+imgDownSon+")";

  // met On le id_menu si ses fils sont montrés 
  for (var i=0; i<MenuTab.length; ++i)
    if(MenuTab[i][2] == id_menu)
      if(MenuTab[i][6] == 'oui') { //alert(MenuTab[id_menu][1]+' : ici');
        document.getElementById(id_menu).style.backgroundImage = (MenuTab[id_menu][2] == -1) ? "url("+imgInitDad+")" : (MenuTab[id_menu][7] == 'Last') ? "url("+imgInitLastSon+")" : "url("+imgInitSon+")";
        img_old = (MenuTab[id_menu][2] == -1) ? "url("+imgInitDad+")" : (MenuTab[id_menu][7] == 'Last') ? "url("+imgInitLastSon+")" : "url("+imgInitSon+")";
        break;
      }
} // Fond ()