var isNetscape4 = document.layers;
var isNetscape6 = document.getElementById && !document.all
var isNetscape = isNetscape4 || isNetscape6;
var isIE = document.all && !isNetscape;
var DHTML = document.getElementById || document.all || document.layers;

var Menu = new Object();
var tab_menu = new Array();
var tab_visible = new Array();

function initMenu(nom_menu,
                  abscisse,
                  ordonnee,
                  largeur,
                  hauteur,
                  padding,
                  bordure,
                  texte,
                  texte_survole,
                  fond,
                  fond_survole,
                  style_police,
                  image_sousmenu,
                  image_largeur,
                  image_hauteur,
                  delai) {
  Menu.top_menu = nom_menu;
  Menu.abscisse = abscisse;
  Menu.ordonnee = ordonnee;
  if (isNetscape6) {
    largeur -= padding*2+2;
    hauteur -= padding*2;
  }
  Menu.largeur = largeur;
  Menu.hauteur = hauteur;
  Menu.padding = padding;
  Menu.bordure = bordure;
  Menu.texte = "#FFFFFF";
  Menu.texte_survole = texte_survole;

  Menu.fond = "";
  Menu.fond_survole = fond_survole;
  Menu.style_police = style_police;
  Menu.image_sousmenu = new Image();
  Menu.image_sousmenu.src = image_sousmenu;
  Menu.image_largeur = image_largeur;
  Menu.image_hauteur = image_hauteur;
  Menu.delai = delai;


  document.write("<STYLE>");
  document.write(".menu_bordure { border-color: "+bordure);
  document.write("; border-width: 1;  border-style: solid; z-index:4;}");
  document.write(".item {position: relative; z-index:4; overflow: hidden;");
  document.write(" border-color: "+bordure+"; border-width: 1;");
  document.write(" border-style: solid; width: "+largeur+"px; height: ");
  document.write(hauteur+"px; color: "+texte+"; background-color: ");
  
 document.write(fond+"; padding: "+Menu.padding+"px}");
  if (style_police)
    Menu.classe = style_police;
  else {
    document.write(".menu_police { font-family: verdana; font-size: 10pt }");
  document.write("A { text-decoration: none }");
    Menu.classe = "menu_police";
  }
  document.write("</STYLE>");
  afficherMenu(nom_menu, abscisse, ordonnee);
  }

function afficherMenu(nom_menu, abscisse, ordonnee) {
  var indice = abscisseMenu(nom_menu);
  if (tab_visible[indice] != nom_menu) {
    if (tab_visible[indice] != null)
      cacherMenu(tab_visible[indice]);
    deplacement_absolu("menu_"+nom_menu, abscisse, ordonnee);
    ecriture("menu_"+nom_menu, calculerContenu(nom_menu));
    visibilite("menu_"+nom_menu, true);
    tab_visible[indice] = nom_menu;
  }
}

function cacherTousMenus() {
  for(var i=1; i<tab_visible.length; i++) {
    if (tab_visible[i] != null)
      cacherMenu(tab_visible[i]);
    tab_visible[i] = null;
  }
}

function cacherMenu(nom_menu) {
  if (trouverMenu(nom_menu) != -1)
    visibilite("menu_"+nom_menu, false);
}

function itemOver(item, flag_over, nom_menu, sous_menu, ordonnee_item) {
  var couleur = "", fond= "";
  if (flag_over) {
    var indice = abscisseMenu(nom_menu);
    for(var i=indice+1; i<tab_visible.length; i++) {
      if (tab_visible[i] != null)
        cacherMenu(tab_visible[i]);
      tab_visible[i] = null;
    }
    couleur = Menu.texte_survole;
    fond = Menu.fond_survole;
    if (isNetscape6)
      curseur = "pointer";
    else
      curseur = "hand";
    clearTimeout(Menu.timer);
  }
  else {
    couleur = Menu.texte;
    fond = Menu.fond;
    curseur = "default";
    Menu.timer = setTimeout("cacherTousMenus()", Menu.delai);
  }
  item.style.color = couleur;
  item.style.background = fond;
  if (sous_menu != null && sous_menu.length == 0)
    item.style.cursor = curseur;
  else if (flag_over) {
    abscisse = Menu.abscisse + abscisseMenu(sous_menu) * (Menu.largeur-100);
    ordonnee = Menu.ordonnee + Menu.hauteur * (ordonneeItem(trouverPere(sous_menu), ordonnee_item)+.5*abscisseMenu(sous_menu));
    afficherMenu(sous_menu, abscisse, ordonnee);
  }
}

function trouverOrdonnee(nom_menu) {
  var i = 0;
  var trouve = false;
  var resultat = 0;
  while ((i<tab_menu.length) && !trouve) {
    var j = 1;
    while ((j<tab_menu[i].length) && !trouve) {
      if (tab_menu[i][j][2] == nom_menu) {
        trouve = true;
        resultat = j-1;
      }
      j++;
    }
    i++;
  }
  return(resultat);
}

function ordonneeItem(nom_menu, indice) {
  var resultat = indice;
  var nom_menu_pere = trouverPere(nom_menu);
  if (nom_menu_pere.length > 0)
    resultat += ordonneeItem(nom_menu_pere, 0)+trouverOrdonnee(nom_menu);
  return(resultat);
}

function trouverPere(nom_menu) {
  var i = 0;
  var trouve = false;
  var resultat = "";
  while ((i<tab_menu.length) && !trouve) {
    var j = 1;
    while ((j<tab_menu[i].length) && !trouve) {
      if (tab_menu[i][j][2] == nom_menu) {
        trouve = true;
        resultat = tab_menu[i][0];
      }
      j++;
    }
    i++;
  }
  return(resultat);
}

function abscisseMenu(nom_menu) {
  var nom_menu_pere = trouverPere(nom_menu);
  var resultat = 0;
  if (nom_menu_pere.length > 0)
    resultat = abscisseMenu(nom_menu_pere) + 1;
  return(resultat);
}

function calculerContenu(nom_menu) {
  var indice = trouverMenu(nom_menu);
  var resultat = "<DIV class=menu_bordure ID=id_"+nom_menu+"'>";
  for(var i=1; i<tab_menu[indice].length; i++) {
    var sous_menu = "";
    if (tab_menu[indice][i][2])
      sous_menu = tab_menu[indice][i][2];
    if (tab_menu[indice][i][1].length > 0)
      resultat += "<A HREF='"+tab_menu[indice][i][1]+"'>";
    resultat += "<DIV ID=id_"+nom_menu+i+" class=item onMouseOver='\
           itemOver(this,1,\""+nom_menu+"\",\""+sous_menu+"\","+(i-1)+")'\
           onMouseOut='itemOver(this,0,\""+nom_menu+"\",\""+sous_menu+"\")'>";
    if (tab_menu[indice][i][2]) {
      var largeur = Menu.largeur-Menu.padding;
      if (isIE)
        largeur -= Menu.image_largeur+Menu.padding;
      var hauteur = (Menu.hauteur-Menu.image_hauteur)/2;
      resultat += "<IMG STYLE='position: absolute; left: "+largeur;
      resultat += "; top:"+hauteur+"' BORDER=0";
      resultat += " SRC="+Menu.image_sousmenu.src+">";
    }
    resultat += "<SPAN class="+Menu.classe+">"+tab_menu[indice][i][0];
    resultat += "</SPAN></DIV>";
    if (tab_menu[indice][i][1].length > 0)
      resultat += "</A>";
  }
  resultat += "</DIV>";	
  return(resultat);
}

function ajouterMenu(nom_menu) {
  if (trouverMenu(nom_menu) == -1) {
    var i = tab_menu.length;
    tab_menu[i] = new Array(nom_menu);
    document.write("<DIV ID=menu_"+nom_menu + " STYLE='position: absolute; z-index:4;" );
    document.write("left: 0; top: 0; visibility: hidden '>");
    document.write("</DIV>");
  }
}

function ajouterItem(nom_menu, libelle_item, url_item, nom_sous_menu) {
  var i = trouverMenu(nom_menu);
  if (i != -1)
    tab_menu[i][tab_menu[i].length] = new Array(libelle_item, url_item, nom_sous_menu);
}

function trouverMenu(nom_menu) {
  var i = 0;
  var trouve = false;
  while ((i<tab_menu.length) && !trouve) {
    if (tab_menu[i][0] == nom_menu)
      trouve = true;
    else
      i++;
  }
  if (!trouve)
    i = -1;
  return(i);
}

function afficherArbre(nom_menu, decalage) {
  var resultat = "";
  if (isNaN(decalage)) {
    alert(afficherArbre(nom_menu, 0));
  }
  else {
    var i = trouverMenu(nom_menu);
    if (i != -1) {
      var espace = "|";
      for(var j=0; j<decalage; j++)
        espace += "   |";
      if (decalage == 0)
        resultat += tab_menu[i][0] + "\n";
      espace += "-- ";
      for(var j=1; j<tab_menu[i].length; j++) {
        resultat += espace + tab_menu[i][j][0] + "\n";
        if (tab_menu[i][j][2])
          resultat += afficherArbre(tab_menu[i][j][2], decalage+1);
      }
    }
  }
  return(resultat);
}

function getObjet(nom) {
  if (isNetscape6)
    objet = document.getElementById(nom);
  else if (isNetscape4)
    objet = document.layers[nom];
  else
    objet = document.all[nom];
  return(objet);
}

function getStyle(nom) {
  if (isNetscape6)
    style = document.getElementById(nom).style;
  else if (isNetscape4)
    style = document.layers[nom];
  else
    style = document.all[nom].style;
  return(style);
}

function visibilite(nom, flag) {
  if (!DHTML)
    return;
  getStyle(nom).visibility = (flag) ? 'visible' : 'hidden';
}

function deplacement_absolu(nom, abscisse, ordonnee) {
  if (!DHTML)
    return;
  getStyle(nom).left = abscisse;
  getStyle(nom).top = ordonnee;
}

function ecriture(nom, texte) {
  if (!DHTML)
    return;
  if (isNetscape4) {
    getObjet(nom).document.write(texte);
    getObjet(nom).document.close();
  }
  else
    getObjet(nom).innerHTML = texte;
}

