/*////////////////////////////////////////////////////////////////////
Auteur : Marc ISIDORE
Date : 14 Janvier 2007
Version  : 1.0.0
copyright : addonline
////////////////////////////////////////////////////////////////////*/
if(!Prototype){throw("requiere la librairie Prototype JavaScript framework, version 1.6.0");}
if (!window.MenuDeroulants){var MenuDeroulants = new Object();}
/*Stock des menus*/
var MenuDeroulants = {
 menus:[],
 version:"1.0.0",
 ajoute:function(element){
	if(this.menus.length==0){
		var t = this;
		this.eventMouseUp  = this.mouseUp.bindAsEventListener(t);
    Event.observe(document, "click", this.eventMouseUp);
		this.menus.push(element);
	}
 },
 /*Object menu sélectionné*/
 isSelected:null,
/* quand on clique sur le document*/
 mouseUp : function(event){
		if(this.isSelected){
			this.isSelected.getFirstParent().clearTimer();
			this.isSelected.fermer(event);
			this.isSelected.getFirstParent().initFirst(event);
			this.isSelected =null;
		}
 },
 setSelected : function(event,element){	
		if(!this.isSelected){
			this.isSelected = element;		
		}else{
			if(this.isSelected != element){
			
				if(element.getIsLie()){
					this.isSelected.getFirstParent().clearTimer();
					this.isSelected.fermer(event);
					//this.isSelected.getFirstParent().initFirst(event);
				}
				this.isSelected = element;
			}
		}
 }
};
/*Objet Menu new MenuDeroulant(id)*/
var MenuDeroulant  = Class.create({
	/* element id du premier menu doit avoir ol juste en dessous */	  
	initialize: function(element) {	
		/** Les variables de défauts peuvent être remplacées dans l'object passe en argument [1]
		*/
		
	   var defauts = {
		  	_timer : 1000,
			_timeout:null,
			_isfirst:true,
			/*no utilisee va servir pour specifier si le lenu de type first est cachable pas le cas pour le moment */
			_isCachable:false,
			_isFirstOlAbsolute:true,
			/* Permet de specifier que ce menu est lie aux autres et les fermera*/
			_isLie:true,
			_nbLigneSelectedFirst:null,
			_ligneSelectedFirst:null,
			_ligneSelectedFirstOk : false,
			_ligneSelectedFirstRoll : false,
			/* permet de specifier que les liens html de _h ne sont pas utilises dans ce cas vous devez mettre les actions dans 
			_optionsLigne
			*/
			_noLienHtml : false,
			/*Css destines au premier menu _isfirst=true */
			 firstCss:{
					ligne:{normale:"hnormale",hover:"hhover",hoverfils:"hhoverl"},
					bordureLeft:{normale:"lignelnormale",hover:"lignelhover",hoverfils:"lignelhoverl"},
					bordureRight:{normale:"lignernormale",hover:"lignerhover",hoverfils:"lignerhoverl"},
					bordureTop:{normale:"lignetnormale",hover:"lignethover",hoverfils:"lignethoverl"},
					bordureBottom:{normale:"lignebnormale",hover:"lignebhover",hoverfils:"lignebhoverl"}
			},
			/*Css destines aus menus qui ne sont pas _isfirst=true*/
			otherCss:{
					ligne:{normale:"snormale",hover:"shover",hoverfils:"shoverl"},
					bordureLeft:{normale:"slignelnormale",hover:"slignelhover",hoverfils:"slignelhoverl"},
					bordureRight:{normale:"slignernormale",hover:"slignerhover",hoverfils:"slignerhoverl"},
					bordureTop:{normale:"slignetnormale",hover:"slignethover",hoverfils:"slignethoverl"},
					bordureBottom:{normale:"slignebnormale",hover:"slignebhover",hoverfils:"slignebhoverl"}
			},
			setHover : function(event,defautCss){},
			setNormale : function(event,defautCss){},
			setLigneNormale : this.setLigneNormale,
			setLigneHover : this.setLigneHover,
			/* permer d'associer des valeurs a un menu "0_1":{}, "0_1" = _niveaux du _h si il  y a une fonction onclick dans 0_1":{onclick:function())
				cette derniere est executee au niveau du _h
			*/
			_optionsLigne:{}				
		};
		this.menu = $(element);
		//alert(this.menu)
		var defaut=Object.clone(defauts)
		var options = Object.extend(defaut, arguments[1] || { });
		Object.extend(this.menu,options);
		
		Object.extend(this.menu,{
				getLigneSelectedFirstOk:function(){
						return this.getFirstParent()._ligneSelectedFirstOk;
				},
				setLigneSelectedFirstOk:function(valeur){
					this.getFirstParent()._ligneSelectedFirstOk = valeur; return valeur;
				},
				getLigneSelectedFirstRoll:function(){
						return this.getFirstParent()._ligneSelectedFirstRoll;
				},
				initFirst : function(event){ 					
					var f = this.getLigneSelectedFirst();
					if(!f){return;}
					this.setLigneHover(event,f,f.getDefautCss(true));
					this.setLigneSelectedFirstOk(true);
				},
				clearTimer:function(){
					clearTimeout(this._timeout);
				},
				getOptions :function(valeur){
					var op = $H(this._optionsLigne); return op.get(valeur);
				},
				setTimer:function(){
					this._timeout = setTimeout(this.fermer.bind(this),this._timer);
				}
		});
		
		this.getfils(this.menu,0);
		MenuDeroulants.ajoute(this);	
		
	},
	getOL: function(element) {
		Element.cleanWhitespace(element);
		if(element && element.nodeType == 1 && (element.tagName.toLowerCase() == "ol" || element.tagName.toLowerCase() == "ul")){
			//alert("Retur type 1 et ol")
			return (element);
		}
		if(element && element.nodeType != 1){
			element = element.nextSibling;
		}else{
			element = element.firstChild;
		}
		return this.getOL(element);
  },
	getfils : function(elements,niveaux){
		var menuPrincipal = this.menu;
		var menuConteneur = elements;
		Element.cleanWhitespace(menuConteneur); 
		
		/*correspond au conteneur du menu*/
		Object.extend(menuConteneur,{
			_isDisable:false,
			_filsSelected:null,
			_ligneSelected:null,
			_ligneParent:null,
			_index:niveaux,
			_niveaux:niveaux,
			fermer:this.fermerConteneur.bindAsEventListener(menuConteneur),
			afficher:this.afficherConteneur.bindAsEventListener(menuConteneur),
			eventBeforeFermer:(this.menu.beforeFermer)? this.menu.beforeFermer.bindAsEventListener(menuConteneur) : this.beforeFermer.bindAsEventListener(menuConteneur),
			eventAfterFermer:(this.menu.afterFermer)? this.menu.afterFermer.bindAsEventListener(menuConteneur) : this.afterFermer.bindAsEventListener(menuConteneur),
			getFirstParent : function(element){return element;}.bind(menuConteneur,menuPrincipal),
			getLigneSelected : function(){return this._ligneSelected;},
			setLigneSelected: function(element){ this._ligneSelected = element ;return this._ligneSelected;},
			getFilsSelected : function(){return this._filsSelected;},
			setFilsSelected : function(element){ this._filsSelected = element;   return this._filsSelected;},
			getIsfirstMenu : function(){ return this._isfirst;},
			getDisable : function(){return this._isDisable;},
			setDisable : function(boolean){ this._isDisable = boolean; return boolean;},
			getLigneParent : function(){return this._ligneParent;},
			getIsLie: function(){return this.getFirstParent()._isLie;},
			getDefautCss : function(parentIsfirst){ if(parentIsfirst){return this.getFirstParent().firstCss;} return this.getFirstParent().otherCss; },
			getLigneSelectedFirst: function(){return this.getFirstParent()._ligneSelectedFirst;},
			setLigneSelectedFirst : function(element){this.getFirstParent()._ligneSelectedFirst = element;return element;},
			getNbLigneSelectedFirst: function(){return this.getFirstParent()._nbLigneSelectedFirst;},
			eventMouseOver : function(event){this.getFirstParent().clearTimer()},
			eventMouseOut : function(event){this.getFirstParent().setTimer()},
			getNiveaux : function(chemin){return this._niveaux;},
			getAllNiveaux : function(element,chemin){ 
					var element = element;
					if(element != this.getFirstParent()){
						var  ligneParent = element.getLigneParent();
						chemin = ligneParent.getNiveaux()+"|"+chemin;
						chemin = this.getAllNiveaux(ligneParent.getParentMenu(),chemin);
					}
					return chemin;
			}
		});
		/*recupère la liste*/
		var ol = this.getOL(menuConteneur);
		Element.cleanWhitespace(ol); 
		if(menuConteneur._isfirst && menuPrincipal._isFirstOlAbsolute){
				Element.setStyle(ol,{position:"absolute"});
				Element.setStyle(menuPrincipal,{height:ol.offsetHeight+"px"});
		}

		var childs = ol.childNodes;
		elements.childs  = childs;
		var nbligne = 0;
	  for(var i=0;i<childs.length;i++){
		  /*parcours les lignes*/
		 var parentHandleLigne = childs[i];
		 var getLesElementss = this.getLesElements(parentHandleLigne);
		 	
		  Object.extend(parentHandleLigne, { 
				_handles:getLesElementss
	  	});
		var leniveaux = niveaux+"_"+i;
		  if(parentHandleLigne._handles.ligne){
			  	var handle = parentHandleLigne._handles.ligne;
					Object.extend(handle, { 
						_index:i,
						_niveaux:leniveaux,
						_isClick:this.testIsClicable(handle.href),
						eventMouseOut : function(event){Event.stop(event);this.getFirstParent().setTimer()}.bindAsEventListener(handle),
						eventClick : this.ligneClick.bindAsEventListener(handle),
						eventBeforeClick : (this.menu.beforeClick )? this.menu.beforeClick.bindAsEventListener(handle) : this.beforeClick.bindAsEventListener(handle),
						eventMouseOver : this.ligneMouseOver.bindAsEventListener(handle),
						eventBeforeAfficher :(this.menu.beforeAfficher)? this.menu.beforeAfficher.bindAsEventListener(handle) : this.beforeAfficher.bindAsEventListener(handle),
						eventAfterAfficher : (this.menu.afterAfficher)? this.menu.afterAfficher.bindAsEventListener(handle) : this.afterAfficher.bindAsEventListener(handle),
						eventMouseDown : (this.menu.mouseDown)? this.menu.mouseDown.bindAsEventListener(handle) : this.mouseDown.bindAsEventListener(handle),
						setLigneHover : function(event,element,defautCss){return this.getFirstParent().setLigneHover(event,element,defautCss);},
						getFirstParent : function(){return this.getParentMenu().getFirstParent();},
						getParentLigne : function(element){return element;}.bind(handle,parentHandleLigne),
						getParentMenu : function(element){return element;}.bind(handle,menuConteneur),
						getHandles : function(){return this.getParentLigne()._handles;},
						getFilsSelected : function(){return this.getParentMenu()._filsSelected;},
						setFilsSelected : function(element){ return this.getParentMenu().setFilsSelected(element);},
						getLigneSelected : function(){return this.getParentMenu().getLigneSelected();},
						setLigneSelected: function(element){return this.getParentMenu().setLigneSelected(element);},
						getChild : function(){return this.getHandles().child;},
						getDisable : function(){return this.getParentMenu().getDisable();},
						setDisable : function(boolean){return this.getParentMenu().setDisable(boolean);},
						getIsfirstMenu : function(){ return this.getParentMenu().getIsfirstMenu();},
						getLigneSelectedFirst: function(){return this.getFirstParent()._ligneSelectedFirst;},
						getNbLigneSelectedFirst: function(){return this.getFirstParent()._nbLigneSelectedFirst;},
						getDefautCss : function(parentIsfirst){return this.getFirstParent().getDefautCss(parentIsfirst); },
						getNiveaux : function(){return this._niveaux;},
						getAllNiveaux :function(){return this.getParentMenu().getAllNiveaux(this.getParentMenu(),this.getNiveaux())},
						getOptionsLigne :function(){return this.getFirstParent().getOptions(this.getNiveaux());},
						getOptionsLigneClick :function(event){var o = this.getFirstParent().getOptions(this.getNiveaux());if(o && o.onclick){return o.onclick.bind(this,event)();return true;}},
						getIsClick : function(){return this._isClick;},
						getNolienHtml : function(){return this.getFirstParent()._noLienHtml;}
					});
					Event.observe(handle,"mouseover", handle.eventMouseOver);
					Event.observe(handle, "mouseout", handle.eventMouseOut);
					Event.observe(handle, "click", handle.eventClick);
					Element.cleanWhitespace(handle); 
				if(menuConteneur.getNbLigneSelectedFirst() === i && menuConteneur.getIsfirstMenu()){
						menuConteneur.getFirstParent().setLigneSelectedFirst(handle);
						menuConteneur.getFirstParent().initFirst();
						menuConteneur.setLigneSelected(handle)
				}
			}
		  if(parentHandleLigne._handles.child){
				this.getfils(parentHandleLigne._handles.child,Number(niveaux+1));
			 	parentHandleLigne._handles.child._ligneParent = parentHandleLigne._handles.ligne;
		  }
	  }
	},
	/** defautcssId permet d'identifier un element dans le LI */
	defautcssId : {borderLeft:"_l",borderRight:"_r",borderTop:"_t",borderBottom:"_b",ligne:"_h",child:"_c"},
	getFilsElements :function(element,table){
		 var c = element.childNodes;
		 var b = table;
			for(var i=0;i<c.length;i++){
		 		 if(Object.isElement(c[i])){
 					var classe = (c[i].className).split(" ")
						var classe = (c[i].className).split(" ")
						for(var h =0;h<classe.length;h++){
								if(classe[h]==this.defautcssId.ligne){
								   b.ligne=c[i];
							   }else if(classe[h]==(this.defautcssId.borderLeft)){
								   b.borderLeft=c[i];
							   }else if(classe[h]==(this.defautcssId.borderRight)){
								   b.borderRight=c[i];
							   }else if(classe[h]==(this.defautcssId.borderTop)){
								  b.borderTop=c[i];
							   }else if(classe[h]==(this.defautcssId.borderBottom)){
								   b.borderBottom=c[i];
							   }else if(classe[h]==(this.defautcssId.child)){
								   b.child=c[i];
							   }
							   if(!b.ligne && c[i].tagName=="A"){
									 b.ligne=c[i];
								}
						}
				 }
			}
			return b;
	},
	getLesElements:function(element){
		 	var c = element.childNodes;
			var b = {child:null,borderLeft:null,borderRight:null,borderTop:null,borderBottom:null,ligne:null};
			for(var i=0;i<c.length;i++){
				if(Object.isElement(c[i])){
					var classe = (c[i].className).split(" ");
					b = this.getFilsElements(c[i],b)
					for(var h =0;h<classe.length;h++){
						if(classe[h]==this.defautcssId.ligne){
							 b.ligne=c[i];
						 }else if(classe[h]==(this.defautcssId.borderLeft)){
							 b.borderLeft=c[i];
						 }else if(classe[h]==(this.defautcssId.borderRight)){
							 b.borderRight=c[i];
						 }else if(classe[h]==(this.defautcssId.borderTop)){
							b.borderTop=c[i];
						 }else if(classe[h]==(this.defautcssId.borderBottom)){
							 b.borderBottom=c[i];
						 }else if(classe[h]==(this.defautcssId.child)){
							 b.child=c[i];
						 }
					}
				}
				if(!b.ligne && c[i].tagName=="A"){
						 b.ligne=c[i];
				}
			}
			return b;
	},
	/* Permet de savoir si un _h est cliquable se base sur la valeur href du lien returne une valeur a _isClick*/
	testIsClicable:function(url){var url = url.toString().toLowerCase();if(url.indexOf("#")+1==url.length || url.indexOf("javascript:void(0)")!=-1){return false;}return true;},
	/*----------------------------GESTION DES CLASSES CSS ----------------------*/
	setLigneHover:function(event,element,defautCss){
		/*On se trouve au niveau de defautcssId.ligne:"_h"*/
		var parentLigneselected = element.getLigneSelected();
			if(parentLigneselected && parentLigneselected != element){
						var parentIsfirst = parentLigneselected.getIsfirstMenu()
							var defautCss = parentLigneselected.getDefautCss(parentIsfirst);
							if(parentLigneselected != element.getFirstParent().getLigneSelectedFirst()){
							this.getFirstParent().setLigneNormale(event,parentLigneselected,defautCss);
							}else if(parentLigneselected == element.getFirstParent().getLigneSelectedFirst()){
								if(element.getFirstParent().getLigneSelectedFirstRoll()){
									this.getFirstParent().setLigneNormale(event,parentLigneselected,defautCss);
									this.getFirstParent().setLigneSelectedFirstOk(false);
								}
							}			
			}
			var handles = element.getHandles();	
			/*Recupèrel'element identifier par _c (fils) et applique la feuille de style de type hover*/
			if(handles.child){
				Element.addClassName(element,defautCss.ligne.hoverfils);
				Element.classNames(element).remove(defautCss.ligne.normale) 
			}else{
				Element.addClassName(element,defautCss.ligne.hover);
				Element.classNames(element).remove(defautCss.ligne.normale) 
			}
			/*Recupère l'element identifier par _l et applique la feuille de style de type hover*/
			var borderLeft = handles.borderLeft;
			if(borderLeft){
				if(handles.child){
					Element.addClassName(borderLeft,defautCss.bordureLeft.hoverfils);
					Element.classNames(borderLeft).remove(defautCss.bordureLeft.normale);
				}else{
					Element.addClassName(borderLeft,defautCss.bordureLeft.hover);
					Element.classNames(borderLeft).remove(defautCss.bordureLeft.normale);
				}
			}
			/*Recupère l'element identifier par _r et applique la feuille de style de type hover*/
			var borderRight = handles.borderRight;
			if(borderRight){
				if(handles.child){
					Element.addClassName(borderRight,defautCss.bordureRight.hoverfils);
					Element.classNames(borderRight).remove(defautCss.bordureRight.normale) 
				}else{
					Element.addClassName(borderRight,defautCss.bordureRight.hover);
					Element.classNames(borderRight).remove(defautCss.bordureRight.normale) 
				}
			}
			/*Recupère le l'element identifier par _t et applique la feuille de style de type hover*/
			var borderTop = handles.borderTop;
			if(borderTop){
				if(handles.child){
					Element.addClassName(borderTop,defautCss.bordureTop.hoverfils);
					Element.classNames(borderTop).remove(defautCss.bordureTop.normale) 
				}else{
					Element.addClassName(borderTop,defautCss.bordureTop.hover);
					Element.classNames(borderTop).remove(defautCss.bordureTop.normale) 
				}
			}
			/*Recupère le l'element identifier par _b et applique la feuille de style de type hover*/
			var borderBottom = handles.borderBottom;
			if(borderBottom){
				if(handles.child){
					Element.addClassName(borderBottom,defautCss.bordureBottom.hoverfils);
					Element.classNames(borderBottom).remove(defautCss.bordureBottom.normale) 
				}else{
					Element.addClassName(borderBottom,defautCss.bordureBottom.hover);
					Element.classNames(borderBottom).remove(defautCss.bordureBottom.normale) 
				}
			}
			/* applique d'autre action passe dans le paramètre argument[1] du constructeur sous le nom setHover*/
			element.getFirstParent().setHover.bind(element,event,defautCss)();

	},
	/*Utilise pour remettre les elements au style normale */
	setLigneNormale:function(event,element,defautCss){
		
				var handles = element.getHandles();
					/*Recupère le l'element de type _h et applique la feuille de style de type normale */
					Element.addClassName(element,defautCss.ligne.normale);
					Element.classNames(element).remove(defautCss.ligne.hoverfils);
					Element.classNames(element).remove(defautCss.ligne.hover);
					/*Recupère l'element identifier par _l de l'element passe en paramètre et applique la feuille de style de type normale */
					var borderLeft = handles.borderLeft;
					if(borderLeft){
							Element.addClassName(borderLeft,defautCss.bordureLeft.normale);
							Element.classNames(borderLeft).remove(defautCss.bordureLeft.hoverfils);
							Element.classNames(borderLeft).remove(defautCss.bordureLeft.hover);
					}
					/*Recupère le l'element identifier par _r de l'element passe en paramètre  et applique la feuille de style de type normale */
					var borderRight = handles.borderRight;
					if(borderRight){
						Element.addClassName(borderRight,defautCss.bordureRight.normale);
						Element.classNames(borderRight).remove(defautCss.bordureRight.hoverfils);
						Element.classNames(borderRight).remove(defautCss.bordureRight.hover);
					}
					/*Recupère le l'element identifier par _t de l'element passe en paramètre  et applique la feuille de style de type normale */
					var borderTop = handles.borderTop;
					if(borderTop){
						Element.addClassName(borderTop,defautCss.bordureTop.normale);
						Element.classNames(borderTop).remove(defautCss.bordureTop.hoverfils);
						Element.classNames(borderTop).remove(defautCss.bordureTop.hover);
					}
					/*Recupère le l'element identifier par _b de l'element passe en paramètre  et applique la feuille de style de type normale */
					var borderBottom = handles.borderBottom;
					if(borderBottom){
						Element.addClassName(borderBottom,defautCss.bordureBottom.normale);
						Element.classNames(borderBottom).remove(defautCss.bordureBottom.hoverfils);
						Element.classNames(borderBottom).remove(defautCss.bordureBottom.hover);
					}
					/* applique d'autre action passe dans le paramètre argument[1] du constructeur sous le nom setNormale*/
					element.getFirstParent().setNormale.bind(element,event,defautCss)();
	},
	/*----------------------------EVENEMENT----------------------*/
	/*Fonction globale par defaut est lance avant le onclick specifique au menu voir _optionsLigne
		fonction modifiable vias le paramètre argument[1] 
	*/
	beforeClick: function(event){},
	/* Quand on clique sur le _h */
	ligneClick : function(event){
		if(!this.getDisable()){
			this.eventBeforeClick(event);
			var isClickInfo = this.getOptionsLigneClick(event);
			if(this.getNolienHtml() || !this.getIsClick()){Event.stop(event);}
		}else{Event.stop(event);}
	},
	/*Action sur le mouseover d'un element de type "_h"*/
	ligneMouseOver:function(event){
			var handle = this.getHandles();
			var firstParent = this.getFirstParent();
			var isfirstMenu = this.getIsfirstMenu()
			this.getFirstParent().clearTimer();
			
			if(isfirstMenu && firstParent.getLigneSelectedFirst() != this){
				firstParent.setLigneSelectedFirstOk(false);
			}
			if(firstParent == this.getParentMenu()){
				MenuDeroulants.setSelected(event,firstParent);
			}
			/*Si le menu n'est pas _isDisable=true*/
			if(!this.getDisable()){
					var filsSelect  = this.getFilsSelected();
					/* Ferme le dernier fils ouvert*/
					if(filsSelect!=null){filsSelect.fermer(event);}
					/* remet correctement le _h qui avait ete selectionnne*/
					this.setLigneHover(event,this,this.getDefautCss(isfirstMenu));
					
					this.eventBeforeAfficher(event);
					this.setLigneSelected(this);
					/* Affiche le fils*/
					var fils = this.getChild();
					if(fils!==null){fils.afficher();}
					this.setFilsSelected(fils);
					this.eventAfterAfficher(event);
			}
	},
	/* Affiche un conteneur */
	afficherConteneur:function(event){
		var filsSelect  = this.getFilsSelected();
		Element.setStyle(this,{display:"block",visibility:"visible"});/*bug ie*/
	},
	/*Action qui fermer un element conteneur de menu on se trouve au niveau de l'element conteneur  menuConteneur" */
	fermerConteneur:function(event){
		
					/*Lance un script si definie */
					var firstParent = this.getFirstParent();
					if(this == firstParent){
						var ligneParent = this;
					}else{
						var ligneParent = this.getLigneParent();
					}
					var isfirstMenu = this.getIsfirstMenu();

					if(ligneParent){
							
							var ligneSelected = ligneParent.getLigneSelected();
							var defautCss = this.getDefautCss(isfirstMenu);
							firstParent.setLigneNormale(event,ligneSelected,defautCss);
							this.eventBeforeFermer(event);
							if(!this.getIsfirstMenu()){
								if(this.hasClassName('isvisible')==false){
									Element.setStyle(this,{display:"none",visibility:"hidden"});
								}
									var handle = ligneParent.getHandles()
									if(handle.child){
										var filsligneSelected = handle.child.getLigneSelected();
										if(filsligneSelected){
											firstParent.setLigneNormale(event,filsligneSelected,this.getDefautCss(handle.child.getIsfirstMenu()));
											//alert("firstParent")
										}
									}
							}						
							/* ferme le dernier fils ouver de cet element */
							var filsSelected = this.getFilsSelected();
							if(filsSelected!==null){
								//if(filsSelected.hasClassName('isvisible')==false){
								filsSelected.fermer();
								//}
								//alert("filsSelected")
							}
							/*Lance un script si definie*/
							this.eventAfterFermer(event);
					
					}	
					var ligneSelectedFirst = this.getLigneSelectedFirst()
					if(ligneSelectedFirst && isfirstMenu && !firstParent.getLigneSelectedFirstOk()){
						firstParent.setLigneHover(event,this.getLigneSelectedFirst(),this.getDefautCss(true));
						firstParent.setLigneSelectedFirstOk(true);
						//alert("ligneSelectedFirst")
					}
					this.setFilsSelected(null);
	},
	/* action globale à tous les menus  par defaut qui est execute avant d'afficher le fils et apres les changement de classe du "_h" 
	* peut etre redefinis via l'argument[1] passe au constructeur
	*/
	beforeAfficher:function(event){this.setDisable(true);},
	/* action globale a tous les menus par defaut qui est execute avant de fermer le fils et apres les changement de classe du "_h" 
	* peut etre redefinis via l'argument[1] passe au constructeur
	*/
	beforeFermer:function(event){},
	/* action globale a tous les menus  par defaut qui est execute apres avoir fermer le fils
	* peut etre redefinis via l'argument[1] passe au constructeur
	*/
	afterFermer:function(event){},
	/* action globale a tous les menus  par defaut qui est execute apres avoir afficher le fils
	* peut etre redefinis via l'argument[1] passe au constructeur
	*/
	afterAfficher:function(event){this.setDisable(false);},
	/* Bloque le click si le menu est desactive */
	mouseDown:function(event){if(this.getDisable()){Event.stop(event);}}
}); /*fin MenuDeroulant */
