var DELAIS_GLOBAL = 1000;
var VALEUR_NULL = 'null';

var m_arbo;
var m_timerVerifierPuSurMenu;
var m_maxNiveau = 0;

function itemMenu(id, etiquette, adresse, parentId, niveau, tableauSousMenu) {
    this.id = id;
    this.etiquette = etiquette;
    this.adresse = adresse;
    this.statut = "non_focus";
    this.parentId = parentId;
    this.niveau = niveau;
    this.tableauSousMenu = tableauSousMenu;
}

function cacherToutSiPuSurMenu(){

    var isMenuAFocus;

    isMenuAFocus = false;
    for (var i = 0; i < m_arbo.length; i++) {
        
        if (m_arbo[i].statut == "focus") {
            isMenuAFocus = true;
        }
    }
    
    if (isMenuAFocus) {
        m_timerVerifierPuSurMenu = setTimeout("cacherToutSiPuSurMenu()", DELAIS_GLOBAL);
    }
    else {
        clearTimeout(m_timerVerifierPuSurMenu);
        m_timerVerifierPuSurMenu = null;
        for (var i = 0; i < m_arbo.length; i++) {
            if (document.getElementById(m_arbo[i].id + "d")) {
                document.getElementById(m_arbo[i].id + "d").style.display = "none";
            }
        }
    }
}

function genererMenu(){
    var toutMenu;
    var menuCourrant;
	var sousMenu;
	var lien;
	var monItemMenu;
	var tableauSousMenus;
    m_arbo = new Array();
    
    monItemMenu = new itemMenu("conteneurMenu", null, null, VALEUR_NULL, -1, m_menu);
    toutMenu = genererSousMenu(monItemMenu, 0);

	return toutMenu;
}

function genererSousMenu(itemMenuParent, niveau) {
	
	var id;
	var out;
	var lien;
	var monItemMenu;
	var sousMenu;
	
	if (niveau + 1 > m_maxNiveau){
	    m_maxNiveau = niveau + 1;
	}
	
	// Div pour les items déroulants
	out = "<div id=\"" + itemMenuParent.id + "d\" class=\"div" + niveau + "d\">";
    
    // Pour chaque élément sous menu
	for(var i = 0; i < itemMenuParent.tableauSousMenu.length; i++) {

        if (niveau == 0) {
            id = "menu0-" + i;
        }
        else {
            // [idParent]-[index de cet item]
	        id = itemMenuParent.id + "-" + i;
        }

	    
	    monItemMenu = new itemMenu(
	        id,                                     // Id de l'item
	        itemMenuParent.tableauSousMenu[i][0],   // étiquette
	        itemMenuParent.tableauSousMenu[i][1],   // lien
	        itemMenuParent.id,                      // id du parent
	        niveau,                                 // niveau de l'item
	        itemMenuParent.tableauSousMenu[i][2]);  // tableau des enfants
	    
	    // ajout à la liste
	    m_arbo.push(monItemMenu);
	
	    // génère le texte pour l'étiquette
		if (monItemMenu.adresse == null) {
			lien = monItemMenu.etiquette;
		} else {
			lien = "<a href=\"" + monItemMenu.adresse + "\">" + monItemMenu.etiquette + "</a>";
		}
		
		// Génère le texte des sous-menus
		sousMenu = "";
		if (monItemMenu.tableauSousMenu != null) {
		    sousMenu = genererSousMenu(monItemMenu, niveau + 1);
		}
		
		out += "<div id=\"" + id 
		    + "\" onmouseover=\"javascript:gererMouseOver('" + id + "');\" "
		    + "onMouseOut=\"javascript:gererMouseOut('" + id + "');\" " 
		    + "class=\"div" + niveau + "\">" 
		    + "<span>" + lien + "</span>" 
		    + sousMenu + "</div>";
	}
	
	out += "</div>";
	
	return out;
}

function cacherFreres(id) {
    
    var itemCourrant = getItemMenu(id);
    
    if (itemCourrant) {
        for(var i = 0; i < m_arbo.length; i++) {
            if (itemCourrant.parentId == m_arbo[i].parentId) {
                if (m_arbo[i].id != itemCourrant.id)
                {
                    cacherEnfants(m_arbo[i].id);
                }
            }
        }
    }
}

function cacherEnfants(id) {
    var itemCourrant = getItemMenu(id);
    
    if (itemCourrant) {
        for(var i = 0; i < m_arbo.length; i++){
            if (m_arbo[i].parentId == id){
                cacherEnfants(m_arbo[i].id);
                document.getElementById(id + "d").style.display = "none";
            }
        }
    }
}

function gererMouseOver(id) {
    clearTimeout(m_timerVerifierPuSurMenu);
    m_timerVerifierPuSurMenu = setTimeout("cacherToutSiPuSurMenu()", DELAIS_GLOBAL);
    
    var itemCourrant = getItemMenu(id);
    
    if (itemCourrant){
        itemCourrant.statut = "focus";
    }

    // cache le reste
    cacherFreres(id);

    // Montre l'item
    for(var i = 0; i < m_maxNiveau; i++) {
        if(document.getElementById(id).className == "div" + i) {
            if (document.getElementById(id + "d")) {
                document.getElementById(id + "d").style.display = "block";
            }
        }
    }
}

function getItemMenu(id) {
    var item;
    item = null;
    for(var i = 0; i < m_arbo.length; i++) {
        if (m_arbo[i].id == id) {
            item = m_arbo[i];
        }
    }
    return item;
}

function gererMouseOut(id) {
    var itemCourrant = getItemMenu(id);
    clearTimeout(m_timerVerifierPuSurMenu);
    m_timerVerifierPuSurMenu = setTimeout("cacherToutSiPuSurMenu()", DELAIS_GLOBAL);
    
    if (itemCourrant){
        itemCourrant.statut = "non_focus";
    }
}

