/*
NAVIGATEURS TESTES:
	
	PlateForme: Win
			Client:
			IE4, IE5, IE6
			NC4, NC6
			Mozilla 0.9.8
			Opera 5 (Sauf Selection de l'item : selectedColor), Opera 6 (a revoir Onresize)
	       
	PlateForme: Mac
		    Client: 
			IE5, NC4



DETAILS DU MODELE :
	OBJET : Arborescence
	Constructeur Arborescence()
		Collection:
			all			-->	contient tous les items ajoutes dans l'ordre de leur declaration (Array)
			index			-->	contient tous les items dans l'ordre de la structure finale (le rendu HTML) (Array)
		Propriete:	
			id			-->	identifiant unique d'une instance Arborescence (numeric)
			maxLevel		-->	profondeur de l'arborescence (numeric)
			selectedId		-->	id de l'item selectionne (numeric)
			selectedColor		-->	couleur appliquee, au niveau du rendu, à l'item selectionne (couleur Html : #CCCCCC) ou "none" pour ne pas surligner l'item en couleur
			heightItem		-->	hauteur d'un item (numeric)
			top			-->	position superieur du rendu (numeric)
			left			-->	position gauche du rendu (numeric)
			img_dir			-->	dossier contenant les images utilisees (Chaine)
			img_blank		-->	nom de l'image transparante (Chaine)
			img_item		-->	nom de l'image representant un item (sans sous-item) ne se trouvant pas en derniere position (Chaine)
			img_last_item		-->	nom de l'image representant un item (sans sous-item) se trouvant en derniere position (Chaine)
			img_node_closed		-->	nom de l'image representant un item (avec sous-item) ne se trouvant pas en derniere position et dont les sous-item ne sont pas visible (Chaine)
			img_node_open		-->	nom de l'image representant un item (avec sous-item) ne se trouvant pas en derniere position et dont les sous-item sont visible (Chaine)
			img_last_node_closed	-->	nom de l'image representant un item (avec sous-item) se trouvant en derniere position et dont les sous-item ne sont pas visible (Chaine)
			img_last_node_open	-->	nom de l'image representant un item (avec sous-item) se trouvant en derniere position et dont les sous-item sont visible (Chaine)
			img_root		-->	nom de l'image associee au premier item de l'arborescence (Chaine)
			img_line		-->	nom de l'image liant, au niveau du rendu, les diferents items(Chaine)
			cookieName		-->	nom du cokie devant contenir un id item (utilise pour la persitence de l'arborescence) (Chaine)
			baseTarget		-->	cible de base pour les liens des items. Represente une chaine d'acces a la propriete de l'objet permetant de cibler le lien ex : "window.location.href" (Chaine)
			itemClass		-->	classe css associee aux items simple (chaine)
			nodeClass		-->	classe css associee aux items avec sous item (chaine)
			falseTranspColor	-->	fausse couleur transparante pour les clients qui n'implémentent pas la transparance (--> couleur d'arriere plan de l'arborescence)
		 Methode:
			addItem			-->	ajoute un item à l'arborescence
			createIndex		-->	construit la collection index
			build			-->	realise le rendu de l'ensemble de l'arborescence
			buildExpanded		-->	realise le rendu de l'ensemble de l'arborescence en laissant déplié l'ensemble de la structure
			buildItem		-->	realise le rendu d'un item
			showHideItem		-->	ouvre ou ferme (plie ou deplie) un element de l'arborescence
			moveEnd			-->	deplace la fin de l'arborescence a chaque showHideItem
			selectItem		-->	selectionne un item mais sans effectuer l'ouverture ou la fermeture
			loadCookie		-->	lit un cookie contenant l'id d'un item et le selectionne
			loadItem		-->	selectionne l'item dont l'objet item a ete passe en parametre
			expandAll		-->	deplie l'ensemble de la structure
			collapseAll		-->	ferme l'ensemble de la structure
			expandLevel     --> ouvre l'ensemble de la structure avec une profondeur maximale d'exploration
		Objet:
			browser			-->	Regroupe les proprietes du navigateur client
	
	
	OBJET : browser
	Constructeur : BrowserSniff()
		Propriete:
			dom			-->	represente un navigateur implementant la methode getElementById (Booleen)
			ns4			-->	represente un navigateur implementant la collection document.layers (Netscape 4) (Booleen)
			ie			-->	represente un navigateur implementant la collection document.all (Internet Explorer) (Booleen)
			ie4			-->	represente un navigateur implementant "ie" mais pas "dom" (Booleen)
	
	
	OBJET : Item
	Constructeur : Item(libelle,link,target)
		Collection:
			children		-->	contient tous les sous-items directe (Array)
		Propriete:
			id				-->	identifiant unique de l'item (incrementation a chaque instance de Item) correspond a la position dans arborescence.all (numeric)
			indexId			-->	position de l'item dans la collection Arborescence.index (numeric)
			level			-->	niveau de l'item dans la structure Arborescence (numeric)
			arborescenceId	-->	reference vers l'intance Arborescence associee a l'item
			parentId		-->	reference de l'item parent dans la collection Arborescence.all (correspond a la propriete id de l'item parent) (numeric)
			childrenId		-->	position de l'item dans la collection children de l'item parent (numeric)
			lastPosition	-->	booleen specifiant si l'item est en derniere position (booleen)
			visible			-->	booleen specifiant si l'item est visible (affiche) ou non (booleen)
			state			-->	etat de l'item courant (open ou closed) (chaine)
			libelle			-->	libelle de l'item (chaine)
			link			-->	lien de l'item (chaine)
			leftSide		-->	code Html represantant l'ensemble du rendu pour la partie structure (cote gauche de l'item) (chaine)
			target			-->	cible du lien de l'item. Represente une chaine d'acces a la propriete de l'objet permetant de cibler le lien ex : "window.location.href" (chaine)
		Methode:
			subItem			-->	retourne le nombre total de sous-item direct et indirecte de l'item courant
			addItem			-->	ajoute à l'item courant un sous-item
			setPopup		-->	initialise une popup pour la cible du lien
			loadPopup		-->	Charge le lien associee a l'item dans un popup
		Objet:
			style			-->	objet html permetant de garder une reference de l'objet style
			linkStyle		-->	objet html permetant de garder une reference de la partie lien de l'item (utilise pour modifier la couleur de l'item selectionne)
			image			-->	reference a un objet image pourvant etre modifiee (item avec sous item pouvant etre ferme ou ouvert)
'-------------------------------------------------------------------------------------------------
*/
arborescences = new Array();

/*CONSTRUCTEUR: ARBORESCENCE
Role:
	INITIALISE L'ENSEMBLES DES METHODES ET PROPRIETES
Parametre:
	- Atop: position haute de l'Arborescence
	- Aleft: position gauche de l'Arborescence
Retour:
	-
Action:
	- initialise l'ensemble des methodes et proprietes
*/
function Arborescence(Atop,Aleft) {
	this.all = new Array();
	this.index = new Array();
	this.id = arbo_id();
	this.maxLevel = 0;
	this.addItem = arbo_addItem;
	this.createIndex = arbo_createIndex;
	this.selectedId = null;
	this.selectedColor = "none"; //"#FFEEB0";
	this.heightItem = 22;
	this.top = Atop?Atop:0;
	this.left = Aleft?Aleft:0;
	this.browser = new BrowserSniff();
	this.build = arbo_build;
	this.buildExpanded = arbo_buildExpanded
	this.buildItem = arbo_buildItem;
	this.showHideItem = arbo_showHideItem;
	this.moveEnd = arbo_moveEnd;
	this.selectItem = arbo_selectItem;
	this.expandAll = arbo_expandAll;
	this.expandLevel = arbo_expandLevel;
	this.collapseAll = arbo_collapseAll;
	this.img_dir = "image/menu/";
	this.img_blank = this.img_dir + "blank.gif";
	this.img_item = this.img_dir + "Item.gif";
	this.img_last_item = this.img_dir + "Item_Last.gif";
	this.img_node_closed = this.img_dir + "Node_Closed.gif";
	this.img_node_open = this.img_dir + "Node_Open.gif";
	this.img_last_node_closed = this.img_dir + "Node_Last_Closed.gif";
	this.img_last_node_open = this.img_dir + "Node_Last_Open.gif";
	this.img_root = this.img_dir + "root.gif";
	this.img_line = this.img_dir + "Line.gif";
	this.loadCookie = arbo_loadCookie;
	this.loadItem = arbo_loadItem;
	this.cookieName = null;
	this.baseTarget = "window.location.href";
	this.itemClass = "itemContent";
	this.nodeClass = "nodeContent";
	this.falseTranspColor = "#FFFFFF";
}

function arbo_id() {
	arborescences[arborescences.length] = this;
	return arborescences.length-1;
}

function arbo_addItem(libelle,link,target) {
	var itemObject;
	itemObject = new Item(libelle,link,target);
	itemObject.arborescenceId = this.id;
	itemObject.id = this.all.length;
	this.all[this.all.length] = itemObject;
	arborescences[this.id] = this;
	return itemObject;
}

function arbo_createIndex() {
	var level, i, nbItem, childrenId, indexElement;
	this.index = new Array();
	this.all[0].indexId = 0;
	// De level = a 1 au level max
	for (level = 1; level <= this.maxLevel; level ++) {
		// Et de i=0 au nombre d'element de l'arborescence
		for (i = 0; i < this.all.length; i++) {
			// si le niveau de l'element est egal a la variable level
			if (this.all[i].level == level) {
		 		nbItem = 1;
		 		// De childrenId =0 a la valeur childrenId de l'element 
				for (childrenId = 0; childrenId < this.all[i].childrenId; childrenId++) {
					// On calcul le nombre d'item existant avant l'element courant a partir de l'element pere (frere plus ancien et neuveu )
					nbItem = nbItem + this.all[this.all[i].parentId].children[childrenId].subItem()+1;
				}
				// L'indexId de l'element est = a l'indexId du pere plus le nombre d'element precedant
				this.all[i].indexId = this.all[this.all[i].parentId].indexId + nbItem;
			}
		}
	 }
	// De indexElement = 0 a indexElement egal au nombre d'item de l'arborescence
	for (indexElement = 0; indexElement < this.all.length; indexElement++) {
		// De i = 0 a i = Nombre d'item de l'arborescence
	 	for (i = 0; i < this.all.length; i++) {
	 		if (this.all[i].indexId == indexElement) {
	 			this.index[indexElement] = this.all[i];
	 			break;
	 		}
	 	}
	 }
}

function BrowserSniff() {
	this.dom = (document.getElementById) ? true : false;
	this.ns4 = (document.layers) ? true : false;
	this.ie = (document.all) ? true : false;
	this.ie4 = this.ie && !this.dom;
}

function arbo_build() {
	var count;
	if (this.all[0].style!=null) {return;}
	this.buildExpanded();
	// ON REMBALLE LE MENU
	for (count = 1; count < this.index.length ; count++) {
		this.showHideItem(this.index[count],"close");
	}
	arborescences[this.id] = this;
	
}

function arbo_buildExpanded() {
	var i, count;
	if (this.all[0].style!=null) {return;}
	this.createIndex();
	// ON INSERT UN IMAGE DE LA HAUTEUR DU MENU POUR PREVOIR LE DEBORDEMENT DE FENETRE ET AJOUTER LA SCROLLBAR
	if (this.browser.ie4) {
		document.write('<div style="position:absolute;top:' + this.top + ';left:' + this.left + '"><img src="' + this.img_blank + '" border="0" width="1" hspace="0" vspace="0" height="' +  (this.heightItem * this.index.length)  + '"></div>');
	}
	if (this.browser.ns4) {
		document.write('<layer position="absolute" top="' + this.top + '" left="' + this.left + '"><img src="' + this.img_blank + '" border="0" width="1" hspace="0" vspace="0" height="' +  (this.heightItem * this.index.length)  + '"></layer>');
	}
	if (this.browser.dom) {
		document.write('<div style="position:absolute;top:' + this.top + ';left:' + this.left + '"><img src="' + this.img_blank + '" border="0" width="1" hspace="0" vspace="0" height="' +  (this.heightItem * this.index.length)  + '"></div>');
	}
	for (i = 0; i < this.index.length; i++) {
		this.buildItem(this.index[i]);
	}
	arborescences[this.id] = this;
	// POUR LA PREMIERE INSTANCE DE LA PAGE ON COMPLETE L'EVENEMENT ONRESIZE POUR NS4
	if ((this.id==0) && (this.browser.ns4)) {
		extendEvent(window,"onresize","window.location.reload()","after");
	}
}

function arbo_buildItem(objItem) {
	var htmlCode, whithChild, itemName, imageName, linkName, thetop, linkContainerStart, linkContainerEnd, subItemCount, nextItemIndexId;
	htmlCode = "";
	whithChild = objItem.children.length!=0?true:false;
	itemName = "Arbo" + this.id + "Item" + objItem.id;
	imageName = itemName + "Img";
	linkName = itemName + "Link";
	thetop = (this.top + this.heightItem  * objItem.indexId);
	if (this.browser.ie4) {
		linkContainerStart = '<TD ID="' +  linkName +  '" NOWRAP>';
		linkContainerEnd = '</TD>';
		htmlCode = '<DIV STYLE="POSITION:ABSOLUTE;VISIBILITY:VISIBLE;TOP:' + thetop + ';LEFT:' + this.left + '" ID="' + itemName + '" HEIGHT="' + this.heightItem + '" ><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0"><TR>';
	}
	if (this.browser.ns4) {
		linkContainerStart = '<TD><ILAYER ID="' +  linkName +  '"><NOBR>';
		linkContainerEnd = '</NOBR></ILAYER></TD>';
		htmlCode = '<LAYER VISIBILITY="VISIBLE" TOP="' + thetop + '" LEFT="' + this.left + '" NAME="' + itemName + '" HEIGHT="' + this.heightItem + '" ><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0"><TR>';
	}
	if (this.browser.dom) {
		linkContainerStart = '<TD ID="' +  linkName +  '" NOWRAP valign="middle">';
		linkContainerEnd = '</TD>';
		htmlCode = '<DIV STYLE="POSITION:ABSOLUTE;VISIBILITY:VISIBLE;TOP:' + thetop + ';LEFT:' + this.left + '" ID="' + itemName + '" HEIGHT="' + this.heightItem + '" ><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0"><TR>';
	}
	if (objItem.level == 0) {
		objItem.leftSide = '';
		htmlCode = htmlCode + '<TD><IMG HEIGHT="' + this.heightItem + '" SRC="'+this.img_root+'"></TD>';
	} else {
		subItemCount = objItem.subItem();
		nextItemIndexId = objItem.indexId + subItemCount + 1;
		if (nextItemIndexId >= this.index.length) {
			// Dernier
			objItem.lastPosition= true;
			objItem.leftSide = this.all[objItem.parentId].leftSide + '<TD><IMG HEIGHT="' + this.heightItem + '" SRC="' + this.img_blank + '"></TD>';
		} else {
			if (objItem.level != this.index[nextItemIndexId].level) {
				// Dernier
				objItem.lastPosition= true;
				objItem.leftSide = this.all[objItem.parentId].leftSide + '<TD><IMG HEIGHT="' + this.heightItem + '" SRC="' + this.img_blank + '"></TD>';
			} else {
				// Non Dernier
				objItem.lastPosition= false;
				objItem.leftSide = this.all[objItem.parentId].leftSide + '<TD><IMG HEIGHT="' + this.heightItem + '" SRC="'+this.img_line+'"></TD>';
			}
		}
		if (whithChild) {
			if (objItem.lastPosition) {
				htmlCode = htmlCode + this.all[objItem.parentId].leftSide + '<TD><A HREF="javascript:openItem(' + this.id + ',' + objItem.id + ');" target="_self"><IMG HEIGHT="' + this.heightItem + '" SRC="'+this.img_last_node_open+'" ID="'  +  imageName + '" NAME="'  +  imageName + '" BORDER="0"></A></TD>';
			} else {
				htmlCode = htmlCode + this.all[objItem.parentId].leftSide + '<TD><A HREF="javascript:openItem(' + this.id + ',' + objItem.id + ');" target="_self"><IMG HEIGHT="' + this.heightItem + '" SRC="'+this.img_node_open+'" ID="'  +  imageName + '" NAME="'  +  imageName + '" BORDER="0"></A></TD>';
			}
		} else {
			if (objItem.lastPosition) {
				htmlCode = htmlCode + this.all[objItem.parentId].leftSide + '<TD><IMG HEIGHT="' + this.heightItem + '" SRC="'+this.img_last_item+'" ID="'  +  imageName + '" NAME="'  +  imageName + '"></TD>';
			} else {
				htmlCode = htmlCode + this.all[objItem.parentId].leftSide + '<TD><IMG HEIGHT="' + this.heightItem + '" SRC="'+ this.img_item +'" ID="'  +  imageName + '" NAME="'  +  imageName + '"></TD>';
			}
		}
	}
	if (whithChild) {
		htmlCode = htmlCode + linkContainerStart + '&nbsp;<A HREF="javascript:clickOnItem(' + this.id + ',' + objItem.id + ');" CLASS="' + this.nodeClass + '" target="_self">' + objItem.libelle + '</A>&nbsp;' + linkContainerEnd;
	} else {
		htmlCode = htmlCode + linkContainerStart + '&nbsp;<A HREF="javascript:clickOnItem(' + this.id + ',' + objItem.id + ');" CLASS="' + this.itemClass + '" target="_self">' + objItem.libelle + '</A>&nbsp;' + linkContainerEnd;
	}
	if (this.browser.ie4) {
		htmlCode = htmlCode + '</TR></TABLE></DIV>';
		document.write(htmlCode);
		objItem.style = document.all.item(itemName).style;
		objItem.linkStyle = document.all.item(linkName).style;
		objItem.image = document.all.item(imageName);
	}
	if (this.browser.ns4) {
		htmlCode = htmlCode + '</TR></TABLE></LAYER>';
		document.write(htmlCode);
		objItem.style = document.layers[itemName];
		objItem.linkStyle = document.layers[itemName].document.layers[linkName];
		objItem.image = document.layers[itemName].document.images[imageName];
	}
	if (this.browser.dom) {
		htmlCode = htmlCode + '</TR></TABLE></DIV>';
		document.write(htmlCode);
		objItem.style = document.getElementById(itemName).style;
		objItem.linkStyle = document.getElementById(linkName).style;
		objItem.image = document.getElementById(imageName);
	}
	objItem.visible = true;
	objItem.state = "open";
}

function arbo_showHideItem(objItem,state) {
	var whithChild, childWidthChild, nbChild, nextIndexId, visibilityTest, visibilityNew, moveEndSens, imgNewSrc, j, objParent;
	if (objItem.level !=0) {
		whithChild = objItem.children.length!=0?true:false;
		nbChild = objItem.subItem();
		// INDEXID DU PROCHAIN ITEM DE MEME NIVEAU
		nextIndexId = objItem.indexId + nbChild + 1;
		if (state=="close") {
			if (objItem.state == "closed") {return;}
			objItem.state ="closed";
			visibilityTest = this.browser.ie4?"visible":this.browser.ns4?"show":this.browser.dom?"visible":null;
			visibilityNew = this.browser.ie4?"hidden":this.browser.ns4?"hidden":this.browser.dom?"hidden":null;
			// SENS PASSEE A LA METHODE MOVEEND
			moveEndSens = "up";
		} else if (state=="open") {
			if (objItem.state == "open") {return;}
			objItem.state = "open";
			visibilityTest = this.browser.ie4?"hidden":this.browser.ns4?"hide":this.browser.dom?"hidden":null;
			visibilityNew = this.browser.ie4?"visible":this.browser.ns4?"visible":this.browser.dom?"visible":null;
			moveEndSens = "down";
		}
		// MISE A JOUR DE LA SRC POUR LE FUTUR CHANGEMENT D'IMAGE
		if (whithChild) {
			if (objItem.lastPosition) {
				imgNewSrc = eval("this.img_last_node_" + objItem.state);
			} else if (!objItem.lastPosition) {
				imgNewSrc = eval("this.img_node_" + objItem.state)
			}
		} else {
			if (objItem.lastPosition) {
				imgNewSrc = this.img_last_item;
			} else if (!objItem.lastPosition) {
				imgNewSrc = this.img_item;
			}
		}
		
		for (j = (objItem.indexId + 1); j < nextIndexId; j++) {
			objParent = this.all[this.index[j].parentId];
			if (this.index[j].style.visibility.toLowerCase() == visibilityTest) {
				if ((parseInt(this.index[j].level)-1) == objItem.level) {
					this.index[j].style.visibility = visibilityNew;
					if (state == "close") {this.index[j].visible = false;}
					if (state == "open") {this.index[j].visible = true;}
					this.moveEnd(j+1,moveEndSens,(1 * this.heightItem));
					continue;	
				}
				if (state == "open") {
					if (objParent.visible && objParent.state == "open") {
						this.index[j].style.visibility = visibilityNew;
						this.index[j].visible = true;
						this.moveEnd(j+1,moveEndSens,(1 * this.heightItem));
						continue;
					}
				}
				if (state == "close") {
					this.index[j].style.visibility = visibilityNew;
					this.index[j].visible = false;
					this.moveEnd(j+1,moveEndSens,(1 * this.heightItem));
					continue;
				}
			}
			
		}
		// MISE A JOUR DE L'IMAGE DE L'ITEM
		objItem.image.src = imgNewSrc;
	}
}

function arbo_moveEnd(firstIndexId,sens,px) {
	var ope, i, newTop, regPx;
	if (px!=0) {
		if (sens == "up") {ope = "-";}
		if (sens == "down") {ope = "+";}
		for (i=firstIndexId; i < this.index.length; i++) {
			newTop = this.index[i].style.top;
			// POUR IE4 ET DOM LE style.top comporte la mention px (pour pixel) (SAUF OPERA)
			regPx = /px/;
			if (regPx.test(newTop)) {
				newTop = newTop.substring(0,newTop.length-2);
			}
			newTop = eval('parseInt(newTop)' + ope + px);
			this.index[i].style.top = newTop;
		}
	}
}

function arbo_selectItem(objItem) {
	var parentObject, level, bgCProp, transpColor;
	// Si on veut selectionner un objet dans l'arboressence dont le parent n'est pas ouvert
	if (objItem.level > 1) {
		parentObject = this.all[objItem.parentId];
		invLevel = new Array();
		for (level = objItem.level; level > 0; level --) {
			invLevel[invLevel.length] = parentObject;
			//this.showHideItem(parentObject,"open");
			parentObject = this.all[parentObject.parentId];
		}
		for (parentCount = (invLevel.length-1); parentCount >= 0; parentCount--) {
			this.showHideItem(invLevel[parentCount],"open");
		}
	}
	if (this.selectedColor!="none") {
		if (this.browser.ie4) {
			bgCProp = ".backgroundColor";
			transpColor = "transparent";
		}
		if (this.browser.ns4) {
			bgCProp = ".bgColor";
			transpColor = null;
		}
		if (this.browser.dom) {
			bgCProp = ".backgroundColor";
			transpColor = "transparent";
		}
		if(this.selectedId!=null) {
			// POUR LES CLIENTS QUI N'IMPLEMENTE PAS LA COULEUR TRANSPARENTE (OPERA 6)
			eval("this.all[this.selectedId].linkStyle" + bgCProp + " = " + "this.falseTranspColor");
			eval("this.all[this.selectedId].linkStyle" + bgCProp + " = " + "transpColor");
		}
		eval("objItem.linkStyle" + bgCProp + " = \"" + this.selectedColor + "\"");
	}
	this.selectedId = objItem.id;
}

function arbo_loadCookie() {
	var idItem, objItem;
	if (this.cookieName!=null) {
		idItem = GetCookie(this.cookieName);
	} else {
		idItem = null;	
	}
	if ((idItem != null) && (idItem < this.all.length)) {
	 	objItem = this.all[idItem];
	} else {
	 	objItem = this.all[0];
	}
	if (objItem.style==null) {this.build();}
	this.selectItem(objItem);
	if (objItem.level != 0) this.showHideItem(objItem,"open");
}

function arbo_loadItem(objItem) {
	if (objItem.style==null) {this.build();}
	this.selectItem(objItem);
	if (objItem.level != 0) {
		this.showHideItem(objItem,"open");
	}
}

function arbo_expandAll() {
	// ON DEBALLE LE MENU
	for (count = 1; count < this.index.length ; count++) {
		this.showHideItem(this.index[count],"open");
	}
	arborescences[this.id] = this;
}

function arbo_expandLevel(iLevel) {
    // ON DÉBALLE LE MENU
    for (count = 1; count < this.index.length ; count++) {
        if (this.index[count].level < iLevel)
            this.showHideItem(this.index[count],"open");
        else
            this.showHideItem(this.index[count],"close");
    }
    arborescences[this.id] = this;
}

function arbo_collapseAll() {
	// ON REMBALLE LE MENU
	for (count = 1; count < this.index.length ; count++) {
		this.showHideItem(this.index[count],"close");
	}
	arborescences[this.id] = this;
}

function Item(libelle,link,target) {
	this.id = null;
	this.indexId = null;
	this.level = 0;
	this.arborescenceId = null;
	this.parentId = null;
	this.childrenId = null;
	this.lastPosition = null;
	this.children = new Array();
	this.subItem = item_subItem;
	this.addItem = item_addItem;
	this.state = null;
	this.libelle = libelle?libelle:"Item";
	this.style = null;
	this.linkStyle = null;
	this.image = null;
	this.leftSide = null;
	this.state = null;
	this.link = link?link:null;
	this.target= target?target:null;
	// NEW: SI EST AFFICHE OU NON
	this.visible = null;
	// POPUP
	this.setPopup = item_setPopup;
	this.loadPopup = item_loadPopup;
}

function item_subItem() {
	var i, si;
	i = 0;
	si = this.children.length;
	for (i=0; i < this.children.length; i++){
		si = si + this.children[i].subItem();
	}
	return si;
}

function item_addItem(libelle,link,target) {
	var structure, subItemObject;
	if (this.arborescenceId == null) {
		alert("Vous ne pouver rajouter un Item sans creer un objet structure de type \"Arborescence\"");
		return false;
	} else {
		structure = arborescences[this.arborescenceId];
		subItemObject = structure.addItem(libelle,link,target);
		this.children[this.children.length] = subItemObject;
		subItemObject.childrenId = this.children.length - 1;
		subItemObject.parentId = this.id;
		subItemObject.level = this.level+1;
		if (structure.maxLevel < subItemObject.level) {structure.maxLevel = subItemObject.level;}
		return subItemObject;
	}
}

function item_setPopup(name) {
	// ON MET A JOUR LA PROPRIETE TARGET
	this.target="popup";
	this.poName = name?name:"_blank";
	
}

function item_loadPopup() {
	// ONVERIFI L'EXECUTION DE LA METHODE setPopup
	if (!this.poName) {this.setPopup();}
	
	window.open(this.link,this.poName);
}

function clickOnItem(ArboId,ItemId) {
	var objArbo, objItem, action;
	if (ArboId < arborescences.length) {
		objArbo = arborescences[ArboId];
		if (ItemId < objArbo.all.length) {
			objItem = objArbo.all[ItemId];
			objArbo.selectItem(objItem);
			if (objItem.level != 0) {
				action = objItem.state=="closed"?"open":"close";
				objArbo.showHideItem(objArbo.all[ItemId],action);
			}
			if (objItem.link != null) {
				// Mise a jour du cookie
				if (objArbo.cookieName!=null) {
					SetCookie(objArbo.cookieName, objItem.id, null,"/");
				}
				// EVOCATION DU LIEN
				if (objItem.target=="popup") {
					objItem.loadPopup();
				} else if (objItem.target!=null) {
					eval(objItem.target + " = objItem.link");
				} else {
					eval(objArbo.baseTarget + " = objItem.link ");
				}
			}
		}
	}
}

function openItem(ArboId,ItemId) {
	var objArbo, objItem, action;
	if (ArboId < arborescences.length) {
		objArbo = arborescences[ArboId];
		if (ItemId < objArbo.all.length) {
			objItem = objArbo.all[ItemId];
			if (objItem.level != 0) {
				action = objItem.state=="closed"?"open":"close";
				objArbo.showHideItem(objArbo.all[ItemId],action);
			}
		}
	}
}

function extendEvent(objDOMobject,strEventName,strNewEvent,strPos) {
	var strOldEvent = new String(eval("objDOMobject." + strEventName));
	var intStart = strOldEvent.indexOf("{") + 1;
	var intLen = (strOldEvent.lastIndexOf("}")- intStart);
	var strOldEventBody = strOldEvent.substr(intStart, intLen);
	if (strPos == "before") {
		var strNewEventBody = strNewEvent + strOldEventBody;
	} else if (strPos == "after") {
		var strNewEventBody = strOldEventBody + strNewEvent;
	}
	eval("objDOMobject." + strEventName + " = new Function(strNewEventBody)");
}
/* */
/*METHODE: GLOBALE
	SOURCE RECUPERABLE SUR http://www.hidaho.com/
*/
function getCookieVal (offset) {
	var endstr = document.cookie.indexOf (";", offset);
	if (endstr == -1) endstr = document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
}

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;
}

function SetCookie (name,value,expires,path,domain,secure) {
	document.cookie = name + "=" + escape (value) +
		((expires) ? "; expires=" + expires.toGMTString() : "") +
		((path) ? "; path=" + path : "") +
		((domain) ? "; domain=" + domain : "") +
		((secure) ? "; secure" : "");
}