/**
 * @author lpillonel
 */

var ListManager = new Class({
	Implements : Options,

	options: {
		FxDuration	: 400
	},

	initialize : function(list, options){
		this.setOptions(options);
		this.list = list;
		
		//we hide all submenus
		if(this.list.getFirst())
			this.build();
		else
			this.hide();
		
		//we add events on li with submenu
		this.addActions();
	},
	
	build : function() {
		//we add selected class to li
		this.list.getElements('li a').each(function(a){
			if (a.hasClass('s')) {
				a.getParent().addClass('selected');
				if (a.getParent().getParent().getParent().get('tag') == 'li')
					a.getParent().getParent().getParent().addClass('selected');
			}
		});
		this.list.getChildren().each(function(el){
			if (el.getLast().get('tag') == 'ul') {
				//we move the ul out
				var submenu = el.getLast().addClass('submenu').injectInside('menu');
				if(el.getFirst().id == 'category43') submenu.addClass('two-cols');
				el.slider = new Fx.Slide(submenu, {
					duration	: this.options.FxDuration,
					transition	: Fx.Transitions.Quad.easeOut,
					wait		: false,
					mode		: 'horizontal',
					onComplete: function(){
						this.toggleMenus();
					}.bind(this)
				});
				el.slider.wrapper.setStyle('float', 'left');
				if(el.hasClass('selected')) {
					this.selectedSubmenu = this.currentSubmenu = el.getFirst();
					
				} else {
					el.slider.hide();
				}
				//we close the submenu
				el.addEvents({
					'click' : function(e){
						//new Event(e).stop();
					}
				});
			} else {
				//we close the submenu
				el.addEvents({
					'mouseenter': function(){
						this.closeSubmenu();
					}.bind(this)
				});
			}
		}, this);
		$('menu').addEvent('mouseleave', function(){
			if (this.currentSubmenu != this.selectedSubmenu)
				this.openSubmenu(this.selectedSubmenu);
		}.bind(this));
	},
	
	toggleMenus : function(){
		if (this.toOpen) {
			this.toOpen.getParent().slider.slideIn();
			this.currentSubmenu = this.toOpen;
		} else {
			this.FxRunning = false;
		}
		this.toOpen = false;
	},
	
	closeSubmenu : function() {
		if (this.currentSubmenu) {
			this.currentSubmenu.getParent().slider.slideOut();
			this.currentSubmenu = false;
			this.FxRunning = true;
		}
	},
	
	openSubmenu : function(a) {
		this.FxRunning = true;
		if (this.currentSubmenu) {
			this.toOpen = a;
			this.closeSubmenu();
		} else if(a) {
			this.currentSubmenu = a;
			a.getParent().slider.slideIn();
		}
	},
	
	addActions : function() {
		this.list.getElements('a').each(function(a){
			if (a.getParent().slider) {
				a.addEvent('mouseenter', function(e){
					if (this.currentSubmenu != a)
						this.openSubmenu(a);
				}.bind(this));
			} else {
				//we close current submenu
				a.addEvent('mouseenter', function(e){
					this.closeSubmenu();
				}.bind(this));
			}
		}, this);
	},

	hide : function() {
		this.list.setStyle('width', 0);
	}
});
