
/* gcBrigde
** container : ID ou élément qui va contenir le menu
** inMenu    : tableau de menu, cf. CLIENT_declare.js
** inNiveau  : tableau de structures par niveau
*/
function gcBridge(inContainer, inMenu, inNiveaux, inMaxLevel, inTraitement) {
	this.container = $(inContainer);
	this.niveaux = inNiveaux;
	this.menu = inMenu;
	this.maxLevel = inMaxLevel;
	this.traitement = inTraitement;

	/* Contient l'intégralité de la structure
	** que l'on écrit à la fin dans le container
	 */
	this.structure;
	
	/* Permet de savoir quel niveau l'on traite
	** incrémenté à chaque passage dans writeStructure();
	** permet de sélectionner le bon niveau dans le tableau des niveaux
	 */
	this.niveau_en_cours = -1;
	if(this.container == null) throw ("Impossible de créer le menu, le conteneur " + inContainer + " n'existe pas");
	
	this.build = buildStructure;
	this.init = initialisation;
}

function initialisation(inAction) {
	if(this.traitement == 1) {
		new MenuDeroulant(this.container, inAction);
	} else {
		var children = $(this.container).firstDescendant().childElements();
		for(var i=0;i<children.length;i++) {
			if($(children[i]).select("ul").length > 0) {
				new MenuDeroulant($(children[i]).select("ul")[0], inAction);
			}
		}
	}
}

function buildStructure() {
	add(0, this.container, this.menu, this.niveaux, this.maxLevel);
}

function add(inNiveau, inParent, inMenu, inNiveaux, inMaxLevel) {
	
	var structureNiveau;
	if(inNiveau >= inNiveaux.length) {
		structureNiveau = inNiveaux[inNiveaux.length-1].cloneNode(true);
	} else {
		structureNiveau = inNiveaux[inNiveau].cloneNode(true);
	}

	var itemTemplate_tmp = getItemTemplate(structureNiveau);
	
	var itemTemplate = itemTemplate_tmp.cloneNode(true);
	var container_des_items = itemTemplate_tmp.parentNode;
	
	container_des_items.removeChild(itemTemplate_tmp);
	
	for(var i=1; i<inMenu.length; i++) {
		itemTemplate_tmp =  $(itemTemplate.cloneNode(true));
		var tmp = "";
		if(inMenu[i][2] != "") {
			
			tmp = inMenu[i][2].substring(inMenu[i][2].lastIndexOf("_")+1);
			
		} else {
			tmp = inMenu[i][1].substring(inMenu[i][1].lastIndexOf("--")+2, inMenu[i][1].lastIndexOf("."));
			
		}
		
		if(inNiveau == 0 && current2 != "" && current2 == tmp) {
		  	var liencurrent=itemTemplate_tmp.firstChild;

			var vernav = navigator.appVersion.substring(0,23);
				if (vernav == '4.0 (compatible; MSIE 7') {
					
					liencurrent.addClassName("current");
				}
				if (vernav >= '4.0 (compatible; MSIE 8') {
					
					liencurrent.setAttribute("class","current");
				}
		}
		
		if(itemTemplate_tmp.select("a").length > 0) {
			if(itemTemplate_tmp.select("a:first-of-type")[0].select("*[class~='_txt']")[0]) {
				itemTemplate_tmp.select("a:first-of-type")[0].select("*[class~='_txt']")[0].insert(inMenu[i][0]);
			} else {
				itemTemplate_tmp.select("a:first-of-type")[0].insert(inMenu[i][0]);
			}
			
			if(inMenu[i][1] != "") {
				itemTemplate_tmp.select("a:first-of-type")[0].href = cheminRep+inMenu[i][1];
			}
			
		} else {
			itemTemplate_tmp.select("*[class~='_txt']")[0].insert(inMenu[i][0]);
		}
		
		try {
			itemTemplate_tmp.removeChild(itemTemplate_tmp.select("fils:first-of-type")[0]);
		} catch(e) {}

		
		if (inMenu[i][0]=='Ev&eacute;nementiel'){

			var vernav = navigator.appVersion.substring(0,23);

			if (vernav == '4.0 (compatible; MSIE 7') {
				
				itemTemplate_tmp.addClassName("jaune");
			}
			if (vernav >= '4.0 (compatible; MSIE 8') {
				
				itemTemplate_tmp.setAttribute("class","jaune");
			}
		
		}else if (inMenu[i][0]=='Extranet Ev&eacute;nementiel'){

			var vernav = navigator.appVersion.substring(0,23);

			if (vernav == '4.0 (compatible; MSIE 7') {
				
				itemTemplate_tmp.addClassName("jaune jaune2");
			}
			if (vernav >= '4.0 (compatible; MSIE 8') {
				
				itemTemplate_tmp.setAttribute("class","jaune jaune2");
			}
			
		}else if (inMenu[i][0]=='Mariage & Ev&eacute;nements priv&eacute;s'){

			var vernav = navigator.appVersion.substring(0,23);

			if (vernav == '4.0 (compatible; MSIE 7') {
				
				itemTemplate_tmp.addClassName("orange");
			}
			if (vernav >= '4.0 (compatible; MSIE 8') {
				
				itemTemplate_tmp.setAttribute("class","orange");
			}
		}else if (inMenu[i][0]=='Extranet Mariage'){

			var vernav = navigator.appVersion.substring(0,23);

			if (vernav == '4.0 (compatible; MSIE 7') {
				
				itemTemplate_tmp.addClassName("orange orange2");
			}
			if (vernav >= '4.0 (compatible; MSIE 8') {
				
				itemTemplate_tmp.setAttribute("class","orange orange2");
			}	
		}else if ((inMenu[i][0]=='Traiteur Delivery')||(inMenu[i][0]=='Extranet Traiteur')){

			var vernav = navigator.appVersion.substring(0,23);

			if (vernav == '4.0 (compatible; MSIE 7') {
				
				itemTemplate_tmp.addClassName("vert");
			}
			if (vernav >= '4.0 (compatible; MSIE 8') {
				
				itemTemplate_tmp.setAttribute("class","vert");
			}
			
		}

		if(inMenu[i][2] != "" && (inNiveau+1 < inMaxLevel || inMaxLevel == -1)) {
			if(inNiveau==0){
				
				var liencurrent=itemTemplate_tmp.firstChild;
				
				if(current != "" && current == tmp) {
				  	var liencurrent=itemTemplate_tmp.firstChild;

					var vernav = navigator.appVersion.substring(0,23);
						if (vernav == '4.0 (compatible; MSIE 7') {
							
							liencurrent.addClassName("current");
						}
						if (vernav >= '4.0 (compatible; MSIE 8') {
							
							liencurrent.setAttribute("class","current");
						}
				}
			}
			
		}
		
		add(inNiveau + 1, itemTemplate_tmp, getArbo(inMenu[i][2]), inNiveaux, inMaxLevel);
		container_des_items.appendChild(itemTemplate_tmp);
	}
	if(structureNiveau.innerHTML!=""){
		inParent.appendChild(structureNiveau);
	}

	
}

/* Retourne l'élément qui correspond à un item
** ici il s'agit d'un li
 */
function getItemTemplate(inOb) {
	var ob = $(inOb);
	
	if(ob.select("*[class*=\"_item\"]").length == 0) {
		return ob;
	} else {
		return ob.select("*[class*=\"_item\"]")[0];
	}
}

/* Entour le text par les éléments passés en paramètre
** inText          : le text à traiter
** inElementsArray : tableau de String correspondant aux éléments à créer
** return          : NodeElement;
*/ 
function surroundTextWith(inText, inElementsArray) {
	
	var rootElement = document.createElement(inElementsArray[0]);
	
	var deeperElement = null;
	for(var i=1;i<inElementsArray.length;i++) {
		
		deeperElement = document.createElement(inElementsArray[1]);
		rootElement.appendChild(deeperElement);
	}
	
	if(deeperElement != null) {
		deeperElement.appendChild(document.createTextNode(MYunescapeHTML(inText)));
	} else {
		rootElement.appendChild(document.createTextNode(MYunescapeHTML(inText)));
	}

	return rootElement;
}

/* Retourne un text nettoyé du code html
** Utilise la méthode interne d'échapement du navigateur
** en attendant que String#unescapeHTML de prototype fonctionne sous ie
** html : String, le contenu html/texte à échapper
*/
function MYunescapeHTML(html) {
   var htmlNode = document.createElement("DIV");
   htmlNode.innerHTML = html;
   if(htmlNode.innerText)
      return htmlNode.innerText; // IE
   return htmlNode.textContent; // FF
}

function getArbo(nom){
	var result=new Array();
	for(var rt=0;rt<window.Dmc_declars.length;rt++){
		if(window.Dmc_declars[rt][0][0]==nom){
			result=window.Dmc_declars[rt];
			break;
		}
	}
	return result;
}
