/**
 * Le menu masque (opacite & visibilty) les elements
 * TODO : sortir le reglage des effets....
 * TODO : sortir la classe "hover"
 * TODO : placement central ?
 * 
 * @param {Object} theMenuElements
 * @param {Object} theTitle
 * @param {Object} theSubMenu
 */

var ZenMenu = new Class({
	
	smooth: false,
	
	eltMenu_Elements: null,
	
	eltTitle: null,
	eltSubMenu: null,

	initialize: function(theMenuElements, theTitle, theSubMenu, theTotalMenu){
	
		//$$(theTotalMenu).addEvent('mouseout', this.hideAll.bindWithEvent(this));
		this.eltMenu_Elements = new Array();
		
		if (!theMenuElements && !theTitle ) {
			return;
		}
		
		this.eltTitleXPath 	 = theTitle;
		this.eltSubMenuXPath = theSubMenu;
		
		$$(theMenuElements).each(this.initElement, this);
	},
	
	add: function(menuElement){
		this.eltMenu_Elements.push(menuElement);
	},
	
	initElement: function(elt){
		
		var menuElement = new ZenMenu_Element(
			this,
			elt.getElement(this.eltTitleXPath),
			elt.getElement(this.eltSubMenuXPath)
		);
		
		this.eltMenu_Elements.push(menuElement);
	},
	
	hideAll: function(){
		log('HideAll');
		var count = this.eltMenu_Elements.length;
		for(var i=0; i < count; i++){
			this.eltMenu_Elements[i].hide();
		}
		log('/HideAll');
	}
	

});

var ZenMenu_Element = new Class({

	menu: 		null,
	eltTitle: 	null,
	eltSubMenu: null,

	hidden: 0,

	initialize: function(theMenu, theTitleElement, theSubMenuElement){
		this.menu = theMenu;
		this.eltTitle = theTitleElement;
		this.eltSubMenu = theSubMenuElement;
		
		if (this.eltSubMenu && this.eltSubMenu.getStyle('visibility') == 'hidden') {
			this.hidden = 1;
		}
		
		this.addEvents();
	},
	
	/**
	 * Si l'element n'a pas de sous-menu, n'ajoute pas d'evenement.
	 */
	addEvents: function(){
		/*if (! this.eltSubMenu){
			return this.menu.hideAll();
		}*/
		
		this.eltTitle.addEvent('mouseover', this.show.bindWithEvent(this));
		
	},
	
	showOrHide: function(){
		if (this.hidden) {
			this.menu.hideAll();
			return this.show();
		}
		
		this.hide();
	},
	
	show: function(){
		this.menu.hideAll();
		log('show');
		if (! this.eltSubMenu || ! this.hidden){
			return;
		}
		log('show-');
		this.eltSubMenu.getParent().addClass('selected');
		
		log('show--');
		this.eltSubMenu.addClass('selected');
		this.eltTitle.addClass('selected');
				
		log('show---');
		if (this.menu.smooth){
			var myFx_opac = new Fx.Style(this.eltSubMenu, 'opacity', {duration:200}); 
			myFx_opac.start(0,1);
		} else {
			this.eltSubMenu.setStyle('opacity', 1);
		}
		
		
		this.hidden = 0;
		log('show----');
	},
	
	hide: function(){
		log('hide');
		if (! this.eltSubMenu /*|| this.hidden*/){
			return;
		}
		log('hide-');
		this.eltSubMenu.getParent().removeClass('selected');
		this.eltSubMenu.removeClass('selected');
		this.eltTitle.removeClass('selected');
		log('hide--');
		this.eltSubMenu.setStyle('opacity', 0);
		this.hidden = 1;
		log('hide---');
	}
	
	

});
