
/***********************************************************************************
 *************************** Objet "ItemArborescence" ******************************
 ***********************************************************************************
 Propriétés :
   - ID : identifiant de l'item. Ce devrait être un texte. Eviter les caractères spéciaux
	 - textes : tableau de textes des langues (pour affichage en français, anglais...)
	 - URLs : tableau d'URLs pour les langues (pour liens vers pages français, anglais...)
	 - sousArborescence : si l'item contient un sous-menu 
 ***********************************************************************************/
function ItemArborescence (idItem) {
	this.version = "1.0"
	this.type = "ItemArborescence"
	this.ID = idItem;
	this.textes = new Array(nbLangues);
	this.liens = new Array(nbLangues);
	this.sousArborescence = null;
	this.color = null;
	this.actif = 0;
	// fonctions
	this.modifieLangue = modifieLangue;
	this.modifieSousArborescence = modifieSousArborescence;
	this.rechercheLien = rechercheLien;
}
/*-------------------------------------------------------------
  Affectation d'un texte et d'une URL pour un item donné
  -------------------------------------------------------------*/
function modifieLangue (texte, URL, numLangue) {
	this.textes[numLangue] = texte;
	this.liens[numLangue] = URL;
}
/*-------------------------------------------------------------
	Affectation d'une sous-arborescence à un item
  -------------------------------------------------------------*/
function modifieSousArborescence (uneSousArborescence) {
	this.sousArborescence = uneSousArborescence;
}
/*-------------------------------------------------------------
	Recherche si un item à un lien dans une langue donnée.
	Si pas trouvé, renvoie langue par défaut
	Si pas trouvé, cherche dans le 1er item de sous-arbo (récursif)
	si toujours rien, alors "#"
  -------------------------------------------------------------*/
// recherche un lien possible pour 
function rechercheLien(numLangue) {
	if (this.liens[numLangue]!=null) // lien dans la langue
		return this.liens[numLangue]
	else if (this.liens[langDefaut]!=null) // sinon lien en français
		return this.liens[langDefaut]
	else if (this.sousArborescence!=null) // sinon, on cherche dans le premier item de la sous-arbo
		return this.sousArborescence.items[0].rechercheLien(numLangue)
	else // vraiment rien alors "#"
		return "#"
}

/***********************************************************************************
 *************************** Objet "Arborescence" ******************************
 ***********************************************************************************
 Propriétés :
	 - items : tableau d'items (ItemArborescence) composant le menu
 ***********************************************************************************/

function Arborescence () {
	this.version = "1.0";
	this.type = "Arborescence";
	this.items = new Array();
	// fonctions
	this.incorpore = incorpore;
	this.ajouteItem = ajouteItem;
	this.rechercheItemParNom = rechercheItemParNom;
	this.rechercheItemParID  = rechercheItemParID;
	this.itemNumero = itemNumero;
}
// ajout d'un item à un menu
function ajouteItem (unItem) {
	this.items[this.items.length] = unItem;
}

/*----------------------------------------------------------------------------
	Affectation d'une sous-arborescence à un item
  ----------------------------------------------------------------------------*/
function incorpore (cheminIDs, texte, URL, numLangue, couleur, isactif) {
	var tabItems = cheminIDs.split("--")
	
	var itemArbo = this.rechercheItemParID (tabItems[0])
	
	/******* Est--ce que l'item existe déjà dans l'arborescence ? ********/
	if (itemArbo==null) { 
		// l'item voulu n'existe pas à ce niveau, on le crée
		var itemArbo = new ItemArborescence (tabItems[0])
		// on ajoute au menu l'item fraichement créé
		this.ajouteItem(itemArbo)
	}
	
	// on est sûr d'arriver ici avec un "itemMenu" correct
	/******* Est-ce qu'une sous-arborescence est nécessaire dans cet item ?  ********/
	if (tabItems.length>1) { // il y a un sous-menu
		// on refait un sous chemin (sans le 1er item)
		if (itemArbo.sousArborescence==null) {
			var menuAjout = new Arborescence() // création d'un sous menu vide
			itemArbo.modifieSousArborescence(menuAjout)
		}
		
		var newChemin = "";
		for (i=1; i<tabItems.length-1; i++)	{
			newChemin += tabItems[i] + "--"
		}
		newChemin += tabItems[i]
		// appel recursif sur le sous-menu
		itemArbo.sousArborescence.incorpore(newChemin, texte, URL, numLangue, couleur, isactif)
	} else {
		// on est sur le bon item (pas de sous-arborescence), affectation des textes
		itemArbo.color = couleur;
		itemArbo.actif = isactif;
		itemArbo.modifieLangue (texte, URL, numLangue)
	}	
}
// récupération d'un item d'un menu à une position donnée
function itemNumero (numItem) {
	return this.items[numItem]
}
// récupération d'un item d'un menu à partir du texte français donné
// si non trouvé dans le menu, on renvoie 'null'
function rechercheItemParNom (nomItem) {
	retour = null;
	indice = 0
	while (indice<this.items.length&&retour==null) {
		if (this.items[indice].textes[0]==nomItem)
			retour = this.items[indice]
		indice++;
	}
	return retour;
}
// récupération d'un item d'un menu à partir du texte français donné
// si non trouvé dans le menu, on renvoie 'null'
function rechercheItemParID (IDItem) {
	retour = null;
	indice = 0
	while (indice<this.items.length&&retour==null) {
		if (this.items[indice].ID==IDItem)
			retour = this.items[indice]
		indice++;
	}
	return retour;
}

/***********************************************************************************/
/************** Fonctions d'affichage "simple" de d'arorescence en HTML ************/
/***********************************************************************************/
function afficheArborescence (uneArborescence, niveau, numLangue) {
	var indice = 0;
	for (indice=0; indice<uneArborescence.items.length; indice++) {
		afficheItem(uneArborescence.items[indice], niveau, numLangue);
	}
}
/***********************************************************************************/
function afficheItem (unItem, niveau, numLangue) {
	var itemNumero=0;
	for (itemNumero=0; itemNumero<niveau; itemNumero++) 
		document.write ("&nbsp;|&nbsp;");

	if (unItem.textes[numLangue]==null)
		document.write(unItem.textes[langDefaut]);
	else
		document.write(unItem.textes[numLangue]);
		
	document.writeln("<BR> ");
	if (unItem.sousArborescence!=null)
		afficheArborescence(unItem.sousArborescence, niveau+1, numLangue);
}