(function($){
	
	// Déclaration de la fonction
	$.fn.esiteMenu = function(options){
		
		/**
		 * Liste des paramètres par défaut
		 */
		var defaults = {
			rootNode: null,
			listRootLi: []
		}
		
		/**
		 * $.extends se charge de récupérer les paramètres par défaut
		 * si les paramètres ne sont pas fournis à la fonction.
		 * 
		 * opts est le nouveau jeu de paramètre à utilliser dans le plugin 
		 */
		var opts = $.extend(defaults,options);
		
		/**
		 * Initialisation
		 */
		function init()
		{
			opts.listRootLi = $(opts.rootNode).find('>li');
			var f = true;
			$(opts.rootNode).find('>li').each(function(){
				var $self = $(this);
				if ($self.find('>ul').length){
					if (f == true) { $self.addClass('noImage'); f = false; }
					$self.find('>a').click(function(e){e.preventDefault();});
					mouseClickEvent($self);
					
					if (displaySubMenus != '' && 'item_'+displaySubMenus == $self.attr('id')){
						$('.rootmenu-shadow').css({
							background: 'url(images/rootmenu-shadow3.png) no-repeat top',
							height: '15px'
						});
						$self.find('>ul').addClass('hover');
						$self.find('>ul').slideDown(100);
						changeBg($self);
					}
				} else {
					if (displaySubMenus != '' && 'item_'+displaySubMenus == $self.attr('id')){
						changeBg($self);
					}
				}
			});
		}
		
		function changeBg($self)
		{
			var rootUl = $self.parent();
			$(rootUl).css({'background':'url(images/bg-menu'+$self.attr('id')+'.png) no-repeat center'});
		}
		
		function mouseClickEvent($self)
		{
			$self.bind('click', function(event){
				$ul = $self.find('>ul');
				changeBg($self);
				$ul.addClass('hover');
				
				var position = $self.position();
				$ul.css({
					'padding-left': position.left -100
				})
				
				if ($ul.css('display') == 'none')
				{
					$ul.find('>li').each(function(){
						$(this).addClass('nv2');
						$(this).css({opacity: 0});
					});
					
					$('.rootmenu-shadow').css({
						background: 'url(images/rootmenu-shadow3.png) no-repeat top',
						height: '15px'
					});
					
					$ul.slideDown(150, function(){
						var liArray = $ul.find('>li');
						var total = liArray.length;
						var exec = '';
						for (var i = 0; i<total;i++){
							var id = $(liArray[i]).attr('id');
							exec += "$('#"+id+"').animate({opacity:1}, 20, function(){";
						}
						for (var i = 0; i<total;i++){
							exec += "});";
						}
						$.globalEval(exec);
					});
				} else {
					$ul.slideUp(100);
					$ul.find('>li').each(function(){
						$(this).css({opacity:0});
					});
					
				}
				
			});
		}
		
		
		// 0. On lance la fonction d'initialisation
		opts.rootNode = this;
		init();
		
		// Toujours renvoyer l'objet jQuery pour le chaînage
		return this;
	}
})(jQuery);
