//======================================//
// Menu accordeon à mutliple level		     //
// Internet evolution				    //
// 2009								    //
//=====================================//
(function($)
{
	$.myMenu = function(params)
	{
		parametres = jQuery.extend(
			{
				menu 		:'#leftMenu',
				evenement	:'click', 
				submenu 	:'.submenu',
				duree		:600,
				level 		: 0,
				parcours 	: 0
			},params);
		//=====================//
		// variables globales  	   //
		//=====================//
		var _mymenu			= this;
		var _menu 			= $(parametres.menu);
		var  etat_click 	= new Array();
		var _submenu 		= parametres.submenu;
		var _hauteur		= '25px'; //_menu.children('li').css('height');
		var _h_sub			= 0;
		var _sub_level;
		_mymenu.Initialize = function()
		{
			_menu.children("li").each(function(i)
			{	
				//if($(this).hasClass('active')){ etat_click[i] = 1; }else{etat_click[i] = 0;}
				if(_mymenu.HasSubmenu($(this)))
				{
					$(this).children('a').attr('href','#')
					$(this).css('cursor','pointer');
					children = $(this).children(_submenu);
					
					children.children('li').css('height','auto');
					children.children('li').children('a').css('height','auto');
					
					if(!_mymenu.IsSubLevel(children))
					{
						children.attr('id','level_'+i+'_'+parametres.level);
					}else
					{	
						_l = _mymenu.RecupLevel(children.parents('ul.submenu').attr('id'));
						_mymenu.addBranche(children);
						children.attr('id','level_'+_l[0]+'_'+i);
					}
					if($(this).hasClass('active'))
					{
						if(!_mymenu.IsSubLevel(children))
						{
							hauteur = parseInt($(this).height()) + parseInt(children.height());
							children.css('display','block');
							children.children('.active').children('a').css('color','#a9bb62');
							$(this).css({height:hauteur});
						}else
						{	
							children.children('.active').children('a').css('color','#a9bb62');
							
							_decal = parseInt(_hauteur.substring(0,_hauteur.length-2));
							hauteur = parseInt($(this).height()) + parseInt(children.height());
							
							children.children('li').css('height','auto');
							children.children('li').children('a').css('height','auto');
							
							children.css(
							{
								display 	: 'block',
								marginLeft	: '10px'
							});
							$(this).css({height:hauteur+_decal});
							_mymenu.GetLevelHeight(children.attr('id'));
						}
					}
					switch(parametres.evenement)
					{
						case 'click':
							_mymenu.Even_click($(this),i);
						break;
						case 'mouse':
							_mymenu.Even_mouse($(this));
						break;
					}
					_mymenu.Recursive(children,i);
				}
			});
		}
		_mymenu.addBranche = function(parent)
		{
			_li = parent.children('li');
			_size = _li.size();
			_li.each(function(i)
			{
				_class = (i==(_size-1)) ? 'branche_last' : 'branche';
				$(this).children('a').addClass(_class)
			});
		}
		_mymenu.HasSubmenu = function(elem)
		{
			child = elem.children();
			if(child.hasClass(parametres.submenu)){return true;}else{return false;}
		}
		_mymenu.IsSubLevel  = function(elem)
		{
			p = elem.parents('ul.submenu')
			if(p.attr('id')!=null){	return true;}else{ return false;}
		}
		_mymenu.GetLevelHeight = function(level)
		{
			_h_sublevel		= 0;
			_index			= 0;
			_tab_level		= new Array();
			_h_level		= new Array();
			_lev 			= _mymenu.RecupLevel(level);
			_lev_ref		= _lev;
			
			//$(_submenu).not('#level_'+_lev[0]).each(function()
			$(_submenu).each(function()
			{			
				_id_lev = $(this).attr('id');
				_lev_sub    = _mymenu.RecupLevel(_id_lev);
				if(_lev_ref[0] ==_lev_sub[0])					
				{
					_display = $(this).css('display');
					if(_display=="block")
					{
						_tab_level[_index] = $(this).attr('id');
						_h_level[_index] = $(this).height();
						_h_sublevel+=$(this).height();
						_index++;
					}
				}
			});
			_h_sub = _h_level[0] + parseInt(_hauteur.substring(0,_hauteur.length-2));
			_sublevel = '#'+_tab_level[0];
			$('#'+_tab_level[0]).parent('li').height(_h_sub)
		}
		_mymenu.Even_mouse = function(elem)
		{
			_submenu.removeClass("active");
			elem.hover(function(){_mymenu.Affiche(elem);},function(){_mymenu.Cache(elem);});
		}
		_mymenu.Even_click = function(elem,i)
		{
			elem.children('a').click(function()
			{
				_sub = elem.children('.submenu');
				_display = _sub.css('display');
				if(_display=="block")
				{
					_mymenu.Cache(elem);
				}else
				{
					_mymenu.Affiche(elem);
				}
			});
		}
		_mymenu.Cache = function(elem)
		{
			var children = elem.children(_submenu);
			if(!_mymenu.IsSubLevel(children))
			{
				elem.stop().animate( {height:_hauteur},parametres.duree,function(){children.css('display','none');});
			}else
			{
				_mymenu.GetLevelHeight(children.attr('id'));
				_h = elem.height();
				_decal = parseInt(_hauteur.substring(0,_hauteur.length-2));
				_new_h = (parseInt(_h_sub)-parseInt(_h));
				
				elem.stop().animate( {height:_hauteur},parametres.duree,function(){
					$(_sublevel).parents('li').height(_new_h+_decal);
					children.css('display','none');
					$(_sublevel).parent('li').css('hauteur',parseInt(_h_sub)-parseInt(elem.height()))
				});
			}
		}
		_mymenu.Affiche = function(elem)
		{
			var children = elem.children(_submenu);
			_h_elem 	 = elem.height();
			_h_child	 = children.height();
			
			if(!_mymenu.IsSubLevel(children))
			{
				_height = _h_elem+_h_child;
				children.css('display','block');
				elem.stop().animate( {height:_height},parametres.duree);
			}else
			{
				_height = _h_elem+_h_child;
				_decal = parseInt(_hauteur.substring(0,_hauteur.length-2));
				children.children('li').css('height','auto');
				children.children('li').children('a').css('height','auto');
				children.css({
					display : 'block',
					marginLeft	: '10px'
					});
				elem.css({height:_height+_decal});
				_mymenu.GetLevelHeight(children.attr('id'));
			}
		}
		_mymenu.Recursive = function(elem,i)
		{
			elem.children('li').each(function()
			{
				if(_mymenu.HasSubmenu($(this)))
				{
					_newmenu = $.myMenu({evenement:'click',submenu : '.submenu', level : parametres.level+1, menu :'#level_'+i+'_'+parametres.level});
					_newmenu.Initialize();
				}
			});
		}
		_mymenu.RecupLevel = function(level)
		{
			_lev = level.split('_');
			return[parseInt(_lev[1]),parseInt(_lev[2]),parseInt(_lev[3])];
		}
		return _mymenu;
	}
	
})(jQuery);