Event.observe(window, "load", function(){
	
	Menu = Class.create({
		
		initialize : function(){
			
			if (!$("nav")){
				return;
			}
			
			var ulNiveau1 = $("nav");
			var aListNiveau1 = ulNiveau1.childElements();
			var nbLiNiveau1 = aListNiveau1.length;
			
			this._aHeight = [];
			this._aShow = [];
			this._aTimer = [];
			this._activeSSMenu = [];
			
			this._durationEffect = 0.3;
			this._durationTimer = 500;
			
			for (var i = 0; i < nbLiNiveau1; i++)
			{
				var num = i + 1;
				var linkNiveau1 = aListNiveau1[i].firstChild;

				Event.observe(linkNiveau1, "mouseover", function(e){
					oMenu.overHandler(e);
				});
				Event.observe(linkNiveau1, "mouseout", function(e){
					oMenu.outHandler(e);
				});
				
				// récupératon de l'id du sous menu associé
				var id = linkNiveau1.readAttribute("ssmenu", "list"+num);
				// liste des sous menus
				this._activeSSMenu.push(id);
				//
				var ulNiveau2 = $(id);
				Element.removeClassName(ulNiveau2, "ssmenu");
				Element.addClassName(ulNiveau2, "ssmenu-js");
				//
				var height = ulNiveau2.getHeight();
				
				Element.setStyle(ulNiveau2, {'height' : height+"px"});
				// fermeture des sous menus
				Effect.BlindUp(id, {
					duration: this._durationEffect
				});
				this._aHeight[id] = height;
				this._aShow[id] = true;
				
				var aListNiveau2 = ulNiveau2.childElements();
				var nbLiNiveau2 = aListNiveau2.length;
				for (var j = 0; j < nbLiNiveau2; j++)
				{
					var linkNiveau2 = aListNiveau2[j].firstChild;
					Event.observe(linkNiveau2, "mouseover", function(e){
						oMenu.overSSmenuHandler(e);
					});
					Event.observe(linkNiveau2, "mouseout", function(e){
						oMenu.outSSmenuHandler(e);
					});
				}
			}
		},
		overHandler : function(e){
			var id_ssmenu =  e.findElement().readAttribute("ssmenu");
			var marginTop = this._getInt($(id_ssmenu).getStyle("marginTop"));
			
			this._swapZIndex(id_ssmenu);
			
			if(marginTop < 0){
				$(id_ssmenu).setStyle({"marginTop" : "60px"});
			}
			
			clearTimeout(this._aTimer[id_ssmenu]);
			
			if ($(id_ssmenu).getStyle("display") == "none"){
				$(id_ssmenu).setStyle({"display" : "none"});
			}
			
		//	console.log(this._aShow);
			
			if (this._aShow[id_ssmenu]){
				this.openMenu(id_ssmenu);
			}
			//else{
			//	console.log(this._aShow[id_ssmenu]);
			//}
		},
		outHandler : function(e){
			var id_ssmenu = e.findElement().readAttribute("ssmenu");

			this._aTimer[id_ssmenu] = setTimeout(function(){
				
				if (!oMenu._aShow[id_ssmenu]) {
				
					oMenu.closeMenu(id_ssmenu);
					
				}
				
			}, this._durationTimer);
		},
		overSSmenuHandler : function(e){
			var id_ssmenu = e.findElement().up().up().readAttribute("id");
			var marginTop = this._getInt($(id_ssmenu).getStyle("marginTop"));
			
			this._swapZIndex(id_ssmenu);
			
			if(marginTop < 0){
				$(id_ssmenu).setStyle({"marginTop" : "60px"});
			}
			
			clearTimeout(this._aTimer[id_ssmenu]);
			
		//	console.log(this._aShow);
			
			if (this._aShow[id_ssmenu]) {
				this.openMenu(id_ssmenu);
			}
		//	else{
		//		console.log(this._aShow[id_ssmenu]);
		//	}
		},
		outSSmenuHandler : function(e){
			var id_ssmenu = e.findElement().up().up().readAttribute("id");

			this._aTimer[id_ssmenu] = setTimeout(function(){
				
				if (!oMenu._aShow[id_ssmenu]) {
					oMenu.closeMenu(id_ssmenu);
				}
			}, this._durationTimer);
		},
		openMenu : function(id_ssmenu){
			var ssmenu = $(id_ssmenu);
			var effectDuration = this._durationEffect;
			
			
			var fx = Effect.BlindDown(id_ssmenu, {
				duration : effectDuration,
				afterFinish : function(){
					oMenu._aShow[id_ssmenu] = false;
					if (Element.getHeight(id_ssmenu) != oMenu._aHeight[id_ssmenu]){
						Element.setHeight(id_ssmenu, {'height' : oMenu._aHeight[id_ssmenu]+"px"});
					}
				}
			});
			fx.inspect();
		},
		closeMenu : function(id_ssmenu){
			var ssmenu = $(id_ssmenu);
			var effectDuration = this._durationEffect;
			
			var fx = Effect.BlindUp(id_ssmenu, {
				duration : effectDuration,
				afterFinish : function(){
					oMenu._aShow[id_ssmenu] = true;
					if (Element.getHeight(id_ssmenu) != oMenu._aHeight[id_ssmenu]){
						Element.setHeight(id_ssmenu, {'height' : oMenu._aHeight[id_ssmenu]+"px"});
					}
				}
			});
			fx.inspect();
		},
		_swapZIndex : function(id_ssmenu){
			this._activeSSMenu.each(function(id){
				if ($(id))
				{
					if (id == id_ssmenu) {
						$(id).setStyle({
							"zIndex": 1000
						});
					}
					else {
						$(id).setStyle({
							"zIndex": 500
						});
					}
				}
			});
		},
		_getInt : function(str){
			var value = str.substr(0, str.length - 2);
			return parseInt(value, 10);
		}
	});
	
	oMenu = new Menu();
	
});


