var Menu = Class.create({
	
	initialize:function(menu,pere,objPere){
		
		this.pere =  pere;
		this.objPere = objPere;
		this.menu = menu;
		this.noeuds = new Array();
		this.fils = new Array();
		this.containerMenu = new Element('body').update('&nbsp;');
		this.display = false;
		
		$$('body')[0].appendChild(this.containerMenu);
		this.containerMenu.setStyle({
			'position':'absolute',
			'z-index':'1000',
			'top':'0px',
			'left':'0px'
		});
		this.start();
		this.sousMenusNiveau1 = this.containerMenu.childElements();
		for(var i=0;i<this.sousMenusNiveau1.length;i++){
			this.sousMenusNiveau1[i].hide();
		};
		
		menu.observe('mouseout',this.hideM.bindAsEventListener(this));
	},
	
	start:function(){
		this.noeuds = this.getSousMenu(this.menu);
		var obj = this;

		this.noeuds.each(function(ul,index){
			ul.setStyle({'z-index':'99','position':'absolute'});
			obj.currentMenu = ul;
			obj.positionUl(ul,index);
		});
	},
	
	getSousMenu:function(ulElement){
		var liElements = ulElement.childElements();
		var sousMenus = new Array(); 
		
		var k = 0;
		for(var i=0;i<liElements.length;i++){
			var items = liElements[i].childElements();
			
			for(var j=0;j<items.length;j++){
				if(items[j].tagName == 'ul' || items[j].tagName == 'UL'){
					sousMenus.push(items[j]);
					liElements[i].enfant = items[j];
					liElements[i].enfant.num = k;
					liElements[i].observe('mouseover',this.showM.bindAsEventListener(this));
					k++;
				}
			}

		}
		return sousMenus;
	},
	
	positionUl:function(ul,index){
		var ul = this.currentMenu;
		var liParent = ul.getOffsetParent();
		var newUl = ul.cloneNode(true);
		ul.remove();
		this.containerMenu.appendChild(newUl);
		newUl.setStyle({
			'position'	: 'absolute',
			'top'		: liParent.cumulativeOffset()[1]+'px',
			'left'		: liParent.cumulativeOffset()[0]+'px',
			'z-index'	:'99'
		});
		//this.fils.push(newUl);
		//new Menu(newUl);
		this.noeuds[index] = newUl;
		this.fils.push(new Menu(newUl,liParent,this));
	},
	
	showM:function(event){
		var a = Event.element(event);
		var sousMenu = this.sousMenusNiveau1[a.parentNode.enfant.num];
		//sousMenu.obj = this;
		sousMenu.show();
		sousMenu.observe('mouseout',this.hideM.bindAsEventListener(this));//.bindAsEventListener(sousMenu));
		this.display=true;
	},
	/**
	 * 
	 * @param {Object} event
	 * @param {Boolean} force : le hide est-il forcé (event inutile)
	 */
	hideM:function(event,force){
		var targetIsChild = false;
		
		if(force == null){
			force==false;
			for (var i = 0; i < this.fils.length; i++) {
				if(this.fils[i].pere != null){
					if(!event.relatedTarget.descendantOf(this.fils[i].pere)){
						this.fils[i].hideM(event);
					}
				}
			}
			/**
			 * Si on quitte le ul : on cache tout
			 */
			if (!event.relatedTarget.descendantOf(this.containerMenu)) {
				//Event.stop(event);
				for (var i = 0; i < this.fils.length; i++) {
					for (var j = 0; j < this.fils[i].noeuds.length; j++) {
						if (!event.relatedTarget.descendantOf(this.fils[i].noeuds[j])) {
							this.fils[i].hideM(event);
						}
						else {
							targetIsChild = true;
						}
					}
				}
				if (!targetIsChild) {
					for (var i = 0; i < this.noeuds.length; i++) {
						this.noeuds[i].hide();
					}
					this.display = false;
				}
			}
		}
	}
	
});

Event.observe(window,'load',function(){new Menu($('menu'),null,null);});
