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 ssmenus = document.createElement('div');
	document.getElementById('enveloppe-page').appendChild(ssmenus);
	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++;
					
					lis[j].onmouseover = function(){
						if (menu_opened !== null && !hasClassName(menu_opened, 'ssmenu-fonctions')){
							closeMenu();
						}
					};
					
					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 = 'menu_' + indexMenu;
							callers_id.push(lis[j].id);
							menus_id.push(ssuls[k].id);
							
							if (lis[j].className == 'menu-fonctions'){
								addClassName(ssuls[k], 'ssmenu-fonctions');
								ssmenus.appendChild(ssuls[k]);
							} else {
								lis[j].appendChild(ssuls[k]);
							}
							
							if (lis[j].className == 'menu-fonctions'){
								lis[j].onclick = function(){
									if (menu_opened !== null && hasClassName(menu_opened, 'ssmenu-fonctions')){
										closeMenu();
										return false;
									}
									
									addClassName(this, 'hover');
									var id = this.id.substr(5);
									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;
									return false;
								};
							} 
							else {
								lis[j].onmouseover = function(){
									addClassName(this, 'hover');
									var id = this.id.substr(5);
									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 = document.getElementsByTagName('a');
							for (var i=0; i<links.length; i++){
								if (links[i].hasAttribute && links[i].hasAttribute('title') && links[i].removeAttribute){
									links[i].removeAttribute('title');
								} else if (links[i].title) {
									links[i].title = '';
								}
							}
						} 
					}
				}
			}
		}
	}
}

function hasClassName(elmt, myClassName){
	var classes = elmt.className.split(/\s+/);
	for (var i=0; i<classes.length; i++){
		if (classes[i] == myClassName){
			return true;
		}
	}
	return false;
}

function addClassName(elmt, myClassName){
	removeClassName(elmt, myClassName);	// On retire la class au cas où elle y serait déjà
	elmt.className += ' ' + myClassName;
}

function removeClassName(elmt, myClassName){
	var classes = elmt.className.split(/\s+/);
	elmt.className = '';
	for (var i=0; i<classes.length; i++){
		if (classes[i] != myClassName){
			if (elmt.className != ''){
				elmt.className += ' ';
			}
			elmt.className += classes[i];
		}
	}
}

function mouseMove(event){
	if (menu_opened !== null && !hasClassName(menu_opened, 'ssmenu-fonctions')){
		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]){
				    	hoverMenu = true;
					    return true;
				    }
			    }
			    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 mouseClick(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]){
						hoverMenu = true;
						return true;
					}
				}
				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("mousemove", mouseMove, false );
	document.addEventListener("click", mouseClick, false );
} else if (document.attachEvent){
	document.attachEvent("onmousemove", function () { mouseMove(window.event); } );
	document.attachEvent("onclick", function () { mouseClick(window.event); } );
}
