// Framework de gestion des menus

var oldSelectedItemId = null;

function selectionMenu( e, id, mode, widthMenu ) {

	var sousMenuMode = 
		( id.charAt( 0 ) == 'e' );

	if ( !sousMenuMode ) {

		if (
			( ( oldSelectedItemId == id ) &&
				id ) ) {
			cancelUnSelectMenu();
			return;
		}

		if ( oldSelectedItemId != null ) {
			unSelectMenu(
				e,
				oldSelectedItemId,
				true
			);
		}

	} else {
		
		if ( oldSelectedItemId != null ) {
			unSelectMenu(
				e,
				oldSelectedItemId,
				false
			);
		}

	}

	oldSelectedItemId = id;

	var obj =
		document.getElementById( 
			"item" + id 
		);

	if ( obj == null ) {
		alert(
			"Impossible de trouver l'item " + ( "item" + id ) + "?"
		);
		return;
	}

	obj.saveBackgroundColor = 
		obj.style.backgroundColor;
	obj.style.backgroundColor = 
		"#0c9395";

	var nl = 
		obj.getElementsByTagName( "a" );

	if ( nl.length > 0 ) {
		var child = nl.item( 0 );
		obj.saveColor = child.style.color;
		child.style.color = "white";
		child.style.textDecoration = "underline";
	}

	if ( id ) {

		showMenu( id, obj, mode, widthMenu );

	}

}

var oldMenuObj = null;

// widthMenu : 250 par défaut
function showMenu( idMenu, obj, mode, widthMenu ) {

	var menu = 
		document.getElementById( "menu" + idMenu );

	if ( menu ) {
	
		if (oldMenuObj && ( oldMenuObj != menu ) ) {
			oldMenuObj.style.display = "none";
		}

		oldMenuObj = menu;

		// Reset all the background color

		nl = 
			menu.childNodes;
		for ( var i = 0; i < nl.length; i++ ) {
			var child = nl.item( i );
			if ( child.nodeName == "DIV" ) {
				child.style.backgroundColor = obj.saveBackgroundColor;
				
				var nl2 =
					child.getElementsByTagName( "a" );
				for ( var j = 0; j < nl2.length; j++ ) {
					var child2 = nl2.item( j );
					child2.style.color = "black";
					child2.style.textDecoration = "none";
				}
			}
		}
	
		var menuHeight = absHeight( menu );

		// Reset
		menuHeight = 0;
	
		var x = 
			( absLeft( obj ) + absWidth( obj ) );
		var y = 
			( absTop( obj ) + menuHeight / 2 - ( absHeight( obj ) / 2 ) );
		var width = widthMenu;
	
		// log( "Y / Height Menu=" + absHeight( menu )  );
	
		if ( mode == "down" ) {
			x = absLeft( obj );
			y = absTop( obj ) + absHeight( obj ) + 1;
		}

		menu.style.left = x + "px";
		menu.style.top = y + "px";
		menu.style.width = width + "px";

		menu.style.display = "block";

		menu.saveBackgroundColor = menu.style.backgroundColor;

	}

}

var menuHideCurrentHandle = null;

function cancelUnSelectMenu() {

	if ( menuHideCurrentHandle != null ) {
		clearTimeout( menuHideCurrentHandle	);
		menuHideCurrentHandle = null;
	}

}

function delayedUnSelectMenu( obj, id ) {
	
	cancelUnSelectMenu();

	f = function() {
		unSelectMenu( null, id, true );
	};

	menuHideCurrentHandle = setTimeout( f, 300 );	

}

function unSelectMenu( e, id, hideMenuMode ) {

	// log( "UnselectMenu [" + id + "]" );

	cancelUnSelectMenu();

	obj = 
		document.getElementById( "item" + id );

	var x = 
		absLeft( obj );
	var y = 
		absTop( obj );
	var w = 
		absWidth( obj );
	var h = 
		absHeight( obj );

	obj.style.backgroundColor = 
		obj.saveBackgroundColor;

	var nl = 
		obj.getElementsByTagName( "a" );

	if ( nl.length > 0 ) {
		var child =
			nl.item( 0 );
		if ( child.style ) {
			child.style.color = 
				obj.saveColor;
			child.style.textDecoration = 
				"none";
		}
	}

	if ( hideMenuMode )
		hideMenu( id );

}

function hideMenu( id ) {

	cancelUnSelectMenu();

	var menu = 
		document.getElementById( "menu" + id );
	if ( menu ) {
		menu.style.display = "none";
	}
	
	oldSelectedItemId = null;

}

function itemIn() {
//	log( "itemIn" );

	cancelUnSelectMenu();
	
}

var oldSelectedMenuId = null;

function menuIn( idItem ) {	
//	log( "menuIn [" + idItem + "]" );

	cancelUnSelectMenu();
	oldSelectedMenuId = idItem;

}

function menuOut( idItem ) {	
//	log( "menuOut [" + idItem + "]" );

	itemOut( null, idItem );
	
}

function itemOut( obj, id ) {
	
	if ( id ) {
		// log( "itemOut [" + id + "]" );
		delayedUnSelectMenu( obj, id );
	}
	
}

// ------------------------------------------------------------------

/*

var menusContent = {};
var menus = {};
var lastSelectedMenu;
var lastSelectedItem;
var menuContentHideTimeout;

function buildMenu(
	parent,
	menuId,
	titre,
	couleurFond,
	couleurTexte,
	couleurFondSelection,
	couleurFondTexte,
	couleurPastille,
	taille,
	lien,
	last ) {

	var menu = 
		document.createElement( "div" );

	menu.style.paddingBottom = "3px";
	menu.style.paddingTop = "3px";

	colorMenuObj(
		( lien != null ),
		menu,
		couleurFond,
		couleurTexte,
		couleurFondSelection,
		couleurFondTexte,
		taille,
		last,
		false 
	);

	var content = 
		document.createElement( "div" );
	content.style.display = "inline";

	var textes = titre.split( "/" );

	for ( i = 0; i < textes.length; i++ ) {

		textes[ i ] = textes[ i ].replace( /_/g, " / " );

		var label = 
			document.createTextNode( textes[ i ] );
		if ( i > 0 ) {
			content.appendChild( 
				document.createElement( "br" ) );

			var pastille = buildPastille( couleurPastille );
			content.appendChild( pastille );
		}

		content.appendChild( label );

	}

	var pastille = buildPastille( couleurPastille );
	menu.appendChild( pastille );
	menu.appendChild( content );

	menuFunction = function() {
		displayMenu( menuId );
		colorMenuObj(
			( lien != null ),
			menu,
			couleurFond,
			couleurTexte,
			couleurFondSelection,
			couleurFondTexte,
			taille,
			last,
			true );
		if ( ( lastSelectedMenu != null ) && ( lastSelectedMenu != menu ) ) {
			colorMenuObj(
				true,
				lastSelectedMenu,
				lastSelectedMenu.couleurFond,
				lastSelectedMenu.couleurTexte,
				lastSelectedMenu.couleurFondSelection,
				lastSelectedMenu.couleurFondTexte,
				lastSelectedMenu.taille,
				lastSelectedMenu.last,
				false
			);
		}
		lastSelectedMenu = menu;
	};

	menu.onmouseover = menuFunction;
	menu.onmouseout = hideMenusDelayed;
	content.onmouseover = menuFunction;
	pastille.onmouseover = menuFunction;

	if ( lien != null ) {
		
		actionMenuFunction = function() {
			window.location = lien;
		};

		menu.onmousedown = actionMenuFunction;
		content.onmousedown = actionMenuFunction;

	}

	menus[ menuId ] = menu;
	parent.appendChild( menu );

}

function activerSousMenu(
	menu,
	menuId,
	couleurFond,
	couleurTexte,
	couleurFondSelection,
	couleurFondTexte,
	taille,
	last
 ) {

	displayMenu( menuId );

	colorMenuObj(
		( lien != null ),
		menu,
		couleurFond,
		couleurTexte,
		couleurFondSelection,
		couleurFondTexte,
		taille,
		last,
		true );
	if ( ( lastSelectedMenu != null ) && ( lastSelectedMenu != menu ) ) {
		colorMenuObj(
			true,
			lastSelectedMenu,
			lastSelectedMenu.couleurFond,
			lastSelectedMenu.couleurTexte,
			lastSelectedMenu.couleurFondSelection,
			lastSelectedMenu.couleurFondTexte,
			lastSelectedMenu.taille,
			lastSelectedMenu.last,
			false
		);
	}
	lastSelectedMenu = menu;

}

function buildMenuItem( 
	menuId,
	titre,
	couleurFond,
	couleurTexte,
	couleurFondSelection,
	couleurFondTexte,
	taille,
	lien,
	last ) {

	var content = 
		menusContent[ menuId ];

	if ( content == null ) {
		
		var content = 
			document.createElement( "div" );

		content.style.borderStyle = "solid";
		content.style.borderWidth = "1px";
		content.style.borderColor = "gray";
		content.style.width = "210px";
		content.style.backgroundColor = couleurFond;
		content.style.display = "none";
		content.style.position = "absolute";	

		menusContent[ menuId ] = content;

	}

	var menuItem = 
		document.createElement( "div" );

	menuItem.style.paddingBottom = "2px";
	menuItem.style.paddingTop = "2px";
	menuItem.style.paddingLeft = "4px";

	menuItem.onmousedown = function() {
		window.location = lien;
	};

	menuItem.onmouseout = menuItemOut;
	menuItem.onmousehover = menuItemIn;

	menuItem.onmouseover = function() {
		colorMenuObj(
			true,
			menuItem,
			couleurFond,
			couleurTexte,
			couleurFondSelection,
			couleurFondTexte,
			taille,
			last,
			true
		);

		if ( lastSelectedItem != null ) {
			colorMenuObj(
				true,
				lastSelectedItem, 
				lastSelectedItem.couleurFond, 
				lastSelectedItem.couleurTexte,
				lastSelectedItem.couleurFondSelection,
				lastSelectedItem.couleurFondTexte,		
				lastSelectedItem.taille,
				lastSelectedItem.last,
				false );
		}
		
		lastSelectedItem = menuItem;
		
		if ( menuContentHideTimeout != null ) {
			clearTimeout( menuContentHideTimeout );
			menuContentHideTimeout = null;
		}
		menuContentHideTimeout = setTimeout( 
			hideMenus, 
			3000 
		);
	};

	colorMenuObj( 
		true,
		menuItem, 
		couleurFond, 
		couleurTexte,
		couleurFondSelection,
		couleurFondTexte,		
		taille,
		last,
		false 
	);

	var label = document.createTextNode( titre );
	menuItem.appendChild( label );

	content.appendChild( menuItem );

}

function menuItemIn() {
}

function menuItemOut( e ) {
	
	if ( menuContentHideTimeout != null ) {
		clearTimeout( menuContentHideTimeout );
		menuContentHideTimeout = null;
	}

	if ( e == null )
		e = event;
	var x = e.clientX;
	var y = e.clientY;
	
	y += document.body.scrollTop;
	
	var menuContent = getVisibleMenuContent();
	if ( menuContent != null ) {
			var contentx = ( absLeft( menuContent ) + 5 );
			var contenty = ( absTop( menuContent ) + 5 );
			var contentw = ( absWidth( menuContent ) - 10 );
			var contenth = ( absHeight( menuContent ) - 10 );

			if ( x <= contentx || x >= ( contentx + contentw ) ) {
				hideMenus();
			}
			if ( y <= contenty || y >= ( contenty + contenth ) ) {
				hideMenus();
			}
	}

}

function buildPastille( couleurPastille ) {
	var pastille = document.createElement( "div" );
	pastille.style.backgroundColor = couleurPastille;
	pastille.style.color = couleurPastille;
	pastille.style.display = "inline";
	pastille.style.margin = "0px";
	pastille.style.marginLeft = "1px";
	pastille.style.marginRight = "3px";
	pastille.style.width = "4px";
	pastille.style.height = "16px";
	pastille.appendChild( document.createTextNode( "\u00a0" ) );	
	pastille.style.borderStyle = "none";
	pastille.style.textDecoration = "none";
	return pastille;
}

function colorMenuObj(
		itemMode,
		obj, 
		couleurFond, 
		couleurTexte,
		couleurFondSelection,
		couleurFondTexte,		
		taille,
		last,
		selection ) {

	if ( !selection ) {
		obj.style.backgroundColor = couleurFond;
		obj.style.color = couleurTexte;
		if ( itemMode )
			obj.style.textDecoration = "none";
	} else {
		obj.style.backgroundColor = couleurFondSelection;
		obj.style.color = couleurFondTexte;		
		if ( itemMode )
			obj.style.textDecoration = "underline";		
	}

	obj.couleurFond = couleurFond;
	obj.couleurTexte = couleurTexte;
	obj.couleurFondSelection = couleurFondSelection;
	obj.couleurFondTexte = couleurFondTexte;
	obj.taille = taille
	obj.last = last

	obj.backgroundColor = couleurFond;
	obj.color = couleurTexte;

	obj.style.fontSize = taille + "px";

	if ( navigator.appVersion.indexOf( "MSIE 5" ) == -1 ) {

		if ( itemMode )
			obj.style.cursor = "pointer";
		else
			obj.style.cursor = "default";

	}

	obj.style.fontFamily = "arial";	
	obj.style.fontWeight = "bold";

	if ( !last ) {
		obj.style.borderBottomStyle = "solid";
		obj.style.borderBottomWidth = "1px";
		obj.style.borderBottomColor = "#AAAAAA";
	}

}

function getVisibleMenuContent() {
	for ( var menu in menusContent ) {
		var menuContent = 
			menusContent[ menu ];
		if ( menuContent.style.display == "block" ) {
			return menuContent;
		}
	}
	return null;
}

function hideMenusDelayed() {
	menuContentHideTimeout = setTimeout( hideMenus, 300 );
}

function hideMenus() {

	// Disable the previous display menu

	if ( lastSelectedMenu != null ) {

		colorMenuObj(
			true,
			lastSelectedMenu,
			lastSelectedMenu.couleurFond,
			lastSelectedMenu.couleurTexte,
			lastSelectedMenu.couleurFondSelection,
			lastSelectedMenu.couleurFondTexte,
			lastSelectedMenu.taille,
			lastSelectedMenu.last,
			false
		);
	}

	for ( var menu in menusContent ) {
		var menuContent = 
				menusContent[ menu ];
		if ( menuContent.style.display == "block" ) {
			menuContent.style.display = "none";

			for ( 
					i = menuContent.childNodes.length - 1; 
						i >= 0; 
							i-- ) {

				var item = menuContent.childNodes[ i ];

				item.style.backgroundColor = 
					item.backgroundColor;
				item.style.color =
					item.color; 

			}
		}
	}

	if ( menuContentHideTimeout != null ) {
		clearTimeout( menuContentHideTimeout );
		menuContentHideTimeout = null;
	}

}

function displayMenu( menuId ) {

	hideMenus();

	var menuContent = menusContent[ menuId ];

	if ( menuContent == null ) {
			return;
	}
	
	if ( ( menuContent.parentNode == null || 
			menuContent.parentNode.nodeType == 11 ) ) {		
		document.body.appendChild( menuContent );
	}

	var menuLabel = menus[ menuId ];

	// Force a size
	menuContent.style.display = "block";

	// Put it invisible
	menuContent.style.left = "-1000px";

	// Center the menu
	var x = absLeft( menuLabel ) + absWidth( menuLabel );
	var y = absTop( menuLabel ) + absHeight( menuLabel ) / 2 - ( absHeight( menuContent ) / 2 );

	// Compute the location of the menuContent

	if ( y < absTop( document.body ) ) {
			y = absTop( document.body );
	}

	menuContent.style.left = x + "px";
	menuContent.style.top = y + "px";

}

*/

/*
function absTop( obj ) {
	var iVal = 0;
	while ( obj != null ) {
		iVal += obj.offsetTop;
		obj = obj.offsetParent;
	}
	return iVal;
}

function absLeft( obj ) {
	var iVal = 0;
	while ( obj != null ) {
		iVal += obj.offsetLeft;
		obj = obj.offsetParent;
	}
	return iVal;
}

function absHeight( obj ) {	
	return obj.offsetHeight
}

function absWidth( obj ) {
	return obj.offsetWidth;
}

function windowHeight() {
	if ( window.innerHeight ) {
		return window.innerHeight;
	} else
		return document.body.offsetHeight;
}

function windowWidth() {
	if ( window.innerWidth ) {
		return window.innerWidth;
	} else
		return document.body.offsetWidth;
}

*/
