var caller_menu_opened = null;
var menu_opened = null;
var callers_id = new Array();
var menus_id = new Array();
var hoverMenu = false;

function initMenu(id_menu){
	var indexMenu = 0;
	var menu = document.getElementById(id_menu);

	var uls = menu.childNodes;
	for (var i=0; i<uls.length; i++){
		if (uls[i].nodeName.toLowerCase() == 'ul'){
			var lis = uls[i].childNodes;
			for (j=0; j<lis.length; j++){
				if (lis[j].nodeName.toLowerCase() == 'li'){
					indexMenu++;
					
					var ssuls = lis[j].childNodes;
					for (k=0; k<ssuls.length; k++){
						if (ssuls[k].nodeName.toLowerCase() == 'ul'){
							ssuls[k].id = 'ssmenu_' + indexMenu;
							ssuls[k].className = 'ssmenu';
							ssuls[k].style.display = 'none';
							lis[j].id = 'menujs_' + indexMenu;
							callers_id.push(lis[j].id);
							menus_id.push(ssuls[k].id);
							
							lis[j].onclick = function(){
								addClassName(this, 'hover');
								var id = this.id.substr(7);
								var thisMenu = document.getElementById('ssmenu_' + id);
								if (thisMenu != menu_opened){
									if (menu_opened != null){
										removeClassName(caller_menu_opened, 'hover');
								    	hoverMenu = false;
										menu_opened.style.display = 'none';
									}
									thisMenu.style.display = 'block'; 
									menu_opened = thisMenu;
								}
								caller_menu_opened = this;
							};
							
							/* Suppression de l'attribut title des liens */
							var links = lis[j].getElementsByTagName('a');
							if (links[0]){
								links[0].onclick = function(){ return false; }
							}
						} 
					}
				}
			}
		}
	}
}

function removeClassName (obj, className){
	if (typeof(obj) == 'object' && obj instanceof Array){
		for (i in obj){
			removeClassName(obj[i], className);
		}
	} 
	else {
		if (typeof(obj) == 'string'){
			obj = byId(obj);
		}
		if (obj){
			var classes = obj.className.split(/\s+/);
			obj.className = '';
			for (var i=0; i<classes.length; i++){
				if (classes[i] != className){
					obj.className += (obj.className == '' ? '' : ' ') + classes[i];
				}
			}
		}
	}
}

function addClassName (obj, className){
	if (typeof(obj) == 'object' && obj instanceof Array){
		for (i in obj){
			addClassName(obj[i], className);
		}
	} 
	else {
		removeClassName(obj, className);
		if (typeof(obj) == 'string'){
			obj = byId(obj);
		}
		if (obj){
			obj.className += (obj.className == '' ? '' : ' ') + className;
		}
	}
}

function mouseDown(event){
	if (menu_opened !== null){
		var el = event.target ? event.target : event.srcElement;
		while (true){
		    if (el.nodeType == 1){
			    if (el.id == menu_opened.id){
			    	hoverMenu = true;
				    return true;
			    }
			    for (var i=0; i<callers_id.length; i++){
				    if (el.id == callers_id[i]){
				    	closeMenu();
					    return false;
				    }
			    }
			    for (var i=0; i<menus_id.length; i++){
				    if (el.id == menus_id[i]){
				    	hoverMenu = true;
					    return true;
				    }
			    }
			    if (el.nodeName.toLowerCase() == 'body' || el.nodeName.toLowerCase() == 'html'){
			    	closeMenu();
				    return false;
			    }
		    }
			el = el.parentNode;
	    }
	}
}

function closeMenu(){
	if (null !== caller_menu_opened){
		removeClassName(caller_menu_opened, 'hover');
		caller_menu_opened = null;
	}
	hoverMenu = false;
	if (null !== menu_opened){
		menu_opened.style.display = "none";
		menu_opened = null;
	}
}		

if (document.addEventListener){
	document.addEventListener("mousedown", mouseDown, false );
} else if (document.attachEvent){
	document.attachEvent("onmousedown", function () { mouseDown(window.event); } );
}

