/*--------------------------------------------------------------------------
 *  YOJA-WEB.COM : module menu
 *  Copyright (c) Jamal Chaqouri, Yohann Fontaine, of yoja team (http://www.yoja-web.com)
 *
 *  module menu is a yoja-web.com work.
 *  For details, see the yoja web site: http://www.yoja-web.com
/*--------------------------------------------------------------------------*/

MENU = "<div></div>";
MENU_CLASS = ".yojaMenu";
MENU_DEFAULT_PARAM = "defaultMenu";

var menuParameters = new Array();
menuParameters[MENU_DEFAULT_PARAM]=true;

function Menu(context) {
		this.entries = new Array();
		this.bars = YOJAUtil.cleanAnchor($j("a.cat", context));
		var list = $j("> ul > li", context);
		 for(i = 0; i < list.length; i++ ) {
			 var cat = list[i];
			 if($j("ul",cat)){
				 this.entries.push(YOJAUtil.cleanAnchor($j("ul li:not(:last) a", cat)));
				 var premier = $j("ul li:last a", cat);
				 var bar = $j(this.bars.get(i));
				 bar.attr("href", premier.attr("href"));
				 bar.removeAttr("java-script");
				 bar.removeAttr("onclick");
			 }
		  }
};


MenuFormatter = {
  formater: function(menu) {
    var template = $j(MENU);
 	var niveau0 = menu.bars;
    var niveau1 = menu.entries;
    niveau0.appendTo(template);
    YOJAUtil.wrapUlList(niveau0);
	
    niveau0.each(function(index) {				  
        $j(this).after(niveau1[index]);
       niveau1[index].wrapAll("<div></div>")
	   YOJAUtil.wrapUlList(niveau1[index]);
		
    });
  
    return template;
  }
};


GestionMenu =  {
  traiter : function() {    
   var menu = new Menu($j("div.module_categories").clone());
    return MenuFormatter.formater(menu);
  }
};



function getMenuParameters(menu){
  var parameters = 	menuParameters[menu.attr("id")] || [];
  parameters.menuDisplay = parameters.menuDisplay || "horizontal";
  parameters.subMenuDisplay =  parameters.subMenuDisplay || "vertical";
  parameters.speed =  parameters.speed || 250;
  parameters.opacity =  parameters.opacity || 1;
  return parameters;
}


function initDefaultMenu(defaultMenu){
	defaultMenu.attr("id","defaultMenu");
    var categories =  $j("ul li:has(ul)", defaultMenu);
   
   if(categories.length>0 &&  $j("> ul > li", defaultMenu).length>1){
   
   	var params = getMenuParameters(defaultMenu);
	var addX = params.subMenuX || 0;
	var addY = params.subMenuY || 0;
	var animation = params.animation;
	var maxOpacity = params.opacity;
   
	categories.each(function() {  
							  
			var categorie = $j(this);				
			
			if(!$j("a",categorie).hasClass("current")){
			
  			var lastSubCategorie = $j("ul li:last",categorie);
			var categorieLink = $j(".with_subcat",categorie )
			categorieLink.attr("href",  $j("a", lastSubCategorie).attr("href"));
        	categorieLink.removeAttr("java-script");
			categorieLink.removeAttr("onclick");
			lastSubCategorie.remove();

			var subCategories = $j("ul",  $j(this));
			
			var offestLeft = ($j("body").width()-$j("#root").width())/2;
			var offestTop = 110;// padding-top div.main

			var offset = categorie.offset();

			var defaultTop = offset.top+addY;
			var defaultLeft = categorie.width()+offset.left+addX;
			subCategories.hide();
			subCategories.css({position: "absolute",top:defaultTop-offestTop, left:defaultLeft-offestLeft, zIndex:1000,opacity:maxOpacity});
			
			var submenu = $j("ul",  categorie);
			var heightSubMenu = submenu.height();
			var widthSubMenu = submenu.width();
			
			
    	    categorie.hover(
				   function () {	
					   
				   		if( $j("li",  submenu).length>0){
							
							switch(animation){
			
								case "appear":
									submenu.stop();
									submenu.show();
									submenu.animate({ opacity:maxOpacity},params.speed);
									break;
								
								case "slideVertical":
									submenu.stop();
									submenu.animate({ height:heightSubMenu }, params.speed);
									break;
								
								case "slideHorizontal":
									submenu.stop();
									submenu.animate({ width:widthSubMenu }, params.speed);
								break;						
								
								default:
									submenu.show();
									break;
							}

		
						 }
					}, 
					 function () {

							switch(animation){
			
								case "appear":
								    submenu.stop();
									submenu.animate({opacity:0},params.speed, function () {$j(this).hide();});
									break;
								case "slideVertical":
									submenu.stop();
									submenu.animate({ height:"0px" }, params.speed, function () {$j(this).hide();});
									break;			
								
								case "slideHorizontal":
								    submenu.stop();
									submenu.animate({ width:"0px" }, params.speed, function () {$j(this).hide();});
								break;
								
								default:
									submenu.hide();
									break;
							}

					}
    		);  
			}//fin if not current
     });
   }//fin if menu > 1
}



function initMenu() {

	$j(MENU_CLASS).each(function(){
		var menu = $j(this);
		var params = getMenuParameters(menu);
		var yojaMenu = GestionMenu.traiter();
		
		yojaMenu.addClass(params.menuDisplay).addClass("menu");
		$j("ul li div", yojaMenu).addClass(params.subMenuDisplay).addClass("submenu");
		
		yojaMenu.appendTo(menu);
  
		var categories =  $j("ul li:has(ul)", menu);

		var animation = params.animation;
		var maxOpacity = params.opacity;

		var offestLeft = ($j("body").width()-$j("#root").width())/2;

		if(params.showSubMenu != false){

		categories.each(function() {  
							  
							var categorie = $j(this);				  
							var subCategories = $j("div.submenu",  categorie);
							var offset = categorie.offset();
				           
						   
						   
						    var defaultTop = getTop(categorie, subCategories, params);
							var defaultLeft = getLeft(categorie, subCategories, params);	

							subCategories.css({position: "absolute", top:defaultTop, left:defaultLeft-offestLeft, zIndex:1000, opacity:maxOpacity});
			
			var submenu = $j("div.submenu",  $j(this));
			var heightSubMenu = submenu.height();
			var widthSubMenu = submenu.width();
			
    		categorie.hover(
				   function () {	
							switch(animation){
			
								case "appear":
									submenu.stop();
									submenu.animate({ opacity:maxOpacity},params.speed);
									break;
								case "slideVertical":
									submenu.stop();
									submenu.animate({ height:heightSubMenu },params.speed);
									break;
								case "slideHorizontal":
									submenu.stop();
									submenu.animate({ width:widthSubMenu }, params.speed);
								break;						
								
								default:
									submenu.show();
									break;
							}
					}, 
					 function () {

								switch(animation){
				
									case "appear":
										submenu.stop();
										submenu.animate({ opacity:0},params.speed, function () {$j(this).hide();});
										break;
									case "slideVertical":
										submenu.stop();
										submenu.animate({ height:"0px" },params.speed, function () {$j(this).hide();});
										break;			
									
									case "slideHorizontal":
										submenu.stop();
										submenu.animate({ width:"0px" }, params.speed, function () {$j(this).hide();});
									break;
									
									default:
										submenu.hide();
										break;
								}
					});
		 });  
		
		}
	});
	
	var defaultMenu = $j("div.module_categories");
	if(defaultMenu){
		initDefaultMenu(defaultMenu);
	}
}


function getTop(cat, subCat, params) {
	var offset = cat.offset();
	var top = offset.top;
	var addY = params.subMenuY || 0;
	
	if(params.menuDisplay != "vertical"){
		switch(params.subMenuDirection){
			case "up":
				top -=subCat.height();
				break;
			case "down":
				top += cat.height();
			break;	
			default:
				top += cat.height();
				break;
		}
	}
	
	top+=addY;
	
	return top;
}

function getLeft(cat, subCat, params) {
	
	var offset = cat.offset();
	var left = offset.left;
	var addX = params.subMenuX || 0;
	
	
	if(params.menuDisplay == "vertical"){
	
		switch(params.subMenuDirection){

			case "left":
				left -= subCat.width();
				break;
				
			case "right":
				left += cat.width();
			break;
						
			default:
				left += cat.width();
				break;
		}
		
	
	}
	left+=addX;
	
	return left;
}


DocumentReadyExecuter.addTraitement(initMenu);
