(function($, undefined){
	
	$.fn.menuDeroulant = function(params){
		
		params = params || {};

		var config = $.extend({
				//tps en ms d'ouverture du sous-menu
			durationOpen: 250,
				//tps en ms de fermeture du sous-menu
			durationClose: 150,
				//tps de latence en ms avant de fermer le sous-menu
			closeLatency: 250,
				//quel élément s'élargit pour prendre toutes la largeur possible 
			enlargeItemNum: ':eq(4)'
		}, params);
		
			//on masque les sous-menus
		this.find("li ul").hide();
		
			//classes des éléments de menu adjacents
		var activeItem = this.find("li.current_menu");
		activeItem.prev().addClass("left-of-active");
		activeItem.next().addClass("right-of-active");
		
			//on élargit un éléments si besoin
		if(config.enlargeItemNum !== null) {
			enlargeItem(this, config.enlargeItemNum);
		}
		
		this.children("li").each(function(){
				//le menu de niveau 1
			var $this = $(this);
				//le titre du menu
			var $head = $this.find('a.head');
				//le sous-menu
			var $submenu = $this.find('ul');
				//variable pour gérer le temps de latence et éviter 
				//l'effet accordéon lors des passages un peu rapides
			var opened = false;
			
			
			$this.hover(
				function(){
					opened = true;
					$head.addClass('hover');
					$this.prev().addClass("left-of-hover");
					$this.next().addClass("right-of-hover");
					if($submenu.length){
						$submenu.slideDown(config.durationOpen);
					}
				},
				function(){
					opened = false;
					setTimeout(function(){
						if(!opened){
							$head.removeClass('hover');
							$this.prev().removeClass("left-of-hover");
							$this.next().removeClass("right-of-hover");
							if($submenu.length){
								$submenu.slideUp(config.durationClose);
							}
						}
					}, config.closeLatency);
				}
			);				
			
		});
		
		
		/**
		 * Ajoute la largeur disponible à un élément de menu
		 * @param itemSet objet jQuery contenant le menu pricipal
		 * @param num sélecteur de l'élément (en tant que paramètre de eq()
		 */
		function enlargeItem(itemSet, num){
			itemSet.each(function(){
				var $this = $(this);
				var item = $this.children('li'+num).find('a.head');
				if(item.length){
					var itemsWidth = 0;
					$this.children('li').each(function(){
						itemsWidth += $(this).outerWidth();
					});
					var delta = $this.width() - itemsWidth;
					item.width(item.width()+delta-1);
				}
			});
		}
	}
	
})(window.jQuery);
