window.addEvent('domready',function(){

	$$('.menu_vertical_config,.menu_horizontal_config').each(function(config) {
		
		var menu = config.getParent().getNext();
		config = JSON.decode(config.get('html'));

		switch (config.type) {
		
			case 'accordeon' :
				
				var togglers = [];
				var elements = [];
				var t_index = 0;
				menu.getChildren('li').each(function(item, index) {
					
					var ul = item.getChildren('ul');
					if (ul.length > 0) {
						item.index = t_index;
						togglers.push(item);
						elements.push(ul[0]);
						ul.setStyles({
							display: '',
							visibility: 'hidden'
						});
						
						new Elements(ul.getElements('a.menu_vertical_sous_lien').flatten()).addEvent('click', function() {
							Cookie.write('menu_item', this.getParent('li').getParent('li').index);
							return true;
						});
						
						t_index ++;
					}
				
				});

				var fx = new Fx.Accordion(togglers, elements, {
					trigger: config.ouverture,
					display: Cookie.read('menu_item'),
					onActive: function(li) {
						li.addClass('open');	
					},
					onBackground: function(li) {
						var func = 	function(li) {li.removeClass('open');};
						func.delay(this.options.duration, this, li);
					}
				});
				
				togglers.each(function(toogler) {
					toogler.fx = fx;
				});

				menu.getElements('a.menu_vertical_lien').each(function(a){
					if (a.get('href') == '#') {
						a.removeProperty('href');
					}
				});
			
				break;
			
			case 'plate' :
				new menuPlate(menu);
				break;
			
			default :
			
				if (config.mirroir) {
					
					menu.getElements('a.menu_horizontal_lien').each(function(a, index) {
						a.index = index;
						a.addEvent('click', function() {
							var li = $$('.menu_vertical')[0].getElements('a.menu_vertical_lien')[this.index].getParent('li');
							li.fx.display(li.index);
						});
					});

				} else {
					new UvumiDropdown(menu,{
						mode: menu.hasClass('menu_vertical') ? 'vertical' : 'horizontal',
						duration: 100,
						closeDelay: 50
					});
				
					menu.getElements('li').each(function(li) {
						if (li.retrieve('animation')) {
							var fx = li.retrieve('animation');
							fx.addEvent('complete', function(ul) {
								if (ul.getStyle('visibility') == 'visible') {
									li.addClass('open');
								} else {
									li.removeClass('open');
								}
							});
						}
					});
					
					$$('.menu_horizontal').getElements('a').flatten().each(function(a) {
						if (a.get('href') != '' && a.get('href') != '#') {
							a.addEvent('click', function() {
								Cookie.dispose('menu_item');
								return true;
							});
						}
					});
				}
				
				break;
		
		}
		
	});
	

});

var menuPlate = new Class({
	initialize: function(ul)
	{
		this.ul = ul;
		this.li = this.ul.getChildren('li').setStyle('float', 'left');
		
		if (this.li[0]) {
			this.li[0].size = this.li[0].getComputedSize({styles: ['margin', 'border', 'padding']});
			this.height = this.li[0].size.height + this.li[0].size.computedTop + this.li[0].size.computedBottom;
		}
		
		new Element('li', {styles: {
			clear: 'both',
			width: 0,
			height: 0,
			margin: 0,
			padding: 0,
			paddingTop: this.height,
			lineHeight: 0,
			overflow: 'hidden'
		}}).inject(this.ul);

		this.size = ul.getSize();
		for (var i = this.li.length - 1 ; i >= 0 ; i--) {
			this.buildLi(this.li[i]);
		}

	},
	
	buildLi: function(li)
	{

		li.size = li.getComputedSize({styles: ['margin', 'border', 'padding']});

		var position = li.getPosition(this.ul);
		li.setStyles({
			position: 'absolute',
			left: position.x,
			top: position.y
		});

		if (li.getElement('ul')) {
			var ul = li.getElement('ul').setStyles({
				overflow: 'hidden',
				zoom: 1
			});
			
			ul.size = ul.getComputedSize({styles: ['margin', 'border', 'padding']});
			ul.setStyles({
				display: '',
				visibility: 'hidden'
			});			
			
			var over = false;
			var width = 0;
			ul.getElements('li').setStyle('float', 'left').each(function(sli) {
				var size = sli.getComputedSize({styles: ['margin', 'border', 'padding']});
				
				if (width + size.totalWidth > this.size.x) {
					sli.setStyle('display', 'none');
					over = true;
				} else {
					width+= size.totalWidth;
				}
			}, this);

			if (over) {
				ul.setStyles({
					position: 'absolute',
					left: -position.x + (this.size.x - width - ul.size.computedLeft - ul.size.computedRight),
					top: li.size.height + li.size.computedTop + li.size.computedBottom
				});
			}
			
			ul.setStyle('width', width);
			
			li.addEvents({
				mouseenter: this.open,
				mouseout: this.close
			});

		}
	
	},
	
	open: function()
	{
		this.getElement('ul').setStyle('visibility', 'visible');
	},
	close: function()
	{
		this.getElement('ul').setStyle('visibility', 'hidden');
	}

});

