function Menu( indexMenu, styleMenu )
{
	this.index = indexMenu
	this.style = styleMenu
	this.isVisible = false
	this.tableauItems = new Array
	this.isMainMenu = false
	this.Draw = Menu_Draw
	this.Add = Menu_Add
	this.Show = Menu_Show
	this.Hide = Menu_Hide
	this.FocusChange = Menu_FocusChange
	this.OnSelect = Menu_OnSelect
	this.SetPosition = Menu_SetPosition
	this.SetToMainMenu = Menu_SetToMainMenu
}
function Menu_Draw()
{
	document.write( "<DIV ID = 'MENU_" + this.index + "' " )
	document.write( "CLASS = '" + this.style + "' " )
	if( ! this.isMainMenu )
		document.write( "STYLE = 'position: absolute; display: none;' >" )
	else
		document.write( "STYLE = 'position: absolute; left: " + mainMenu.left + "; top: " + mainMenu.top + "; display: inline;' >" )
	var indice = 0
	while( this.tableauItems[ indice ] != null )
	{
		this.tableauItems[ indice ].Draw()
		indice ++
	}
	document.write( "</DIV>" )
	var indice = 0
	while( this.tableauItems[ indice ] != null )
	{
		if( this.tableauItems[ indice ].sousMenu != null )
			this.tableauItems[ indice ].sousMenu.Draw()
		indice ++
	}
}
function Menu_Add( imageItem, texteItem, styleItem, styleOnFocus )
{
	var indice = 0
	while( this.tableauItems[ indice ] != null )
		indice ++
	this.tableauItems[ indice ] = new Item( this.index + "_" + indice, imageItem, texteItem, styleItem, styleOnFocus )
	return this.tableauItems[ indice ]
}
function Menu_Show( evenementSouris )
{
	var cadreMenu = GetElement( "MENU_" + this.index )
	cadreMenu.style.display = "inline"
	this.isVisible = true
	var positionX
	var positionY
	if( document.all )
	{
		positionX = event.clientX + document.body.scrollLeft;
		positionY = event.clientY + document.body.scrollTop;
	}
	else
	{
		positionX = evenementSouris.pageX;
		positionY = evenementSouris.pageY;
	}
	if( positionX + cadreMenu.offsetWidth > document.body.clientWidth + document.body.scrollLeft )
		cadreMenu.style.left = document.body.clientWidth + document.body.scrollLeft - cadreMenu.offsetWidth - 1
	else
		cadreMenu.style.left = positionX
	if( positionY + cadreMenu.offsetHeight > document.body.clientHeight + document.body.scrollTop )
		cadreMenu.style.top = document.body.clientHeight + document.body.scrollTop - cadreMenu.offsetHeight - 1
	else
		cadreMenu.style.top = positionY
	var indice = 0
	while( this.tableauItems[ indice ] != null )
	{
		var cadreItem = GetElement( "ITEM_" + this.tableauItems[ indice ].index )
		this.tableauItems[ indice ].MakeUnfocused()
		if( this.tableauItems[ indice ].sousMenu != null )
		{
			var cadreFleche = GetElement( "FLECHE_ITEM_" + this.tableauItems[ indice ].index )
			if( cadreFleche != null )
				cadreFleche.style.left = cadreMenu.offsetWidth - cadreFleche.offsetWidth
			this.tableauItems[ indice ].sousMenu.SetPosition( this.index, this.tableauItems[ indice ].index, true )
		}
		indice ++
	}
}
function Menu_SetToMainMenu()
{
	this.isMainMenu = true
	this.isVisible = true
}
function Menu_SetPosition( indexMenuParent, indexItemParent, positionDroite )
{
	var cadreMenuParent = GetElement( "MENU_" + indexMenuParent )
	var cadreItem = GetElement( "ITEM_" + indexItemParent )
	var cadreMenu = GetElement( "MENU_" + this.index )
	cadreMenu.style.display = "inline"
	var positionX = cadreMenuParent.offsetLeft + cadreMenuParent.offsetWidth + 1
	if( positionDroite && positionX + cadreMenu.offsetWidth < document.body.clientWidth + document.body.scrollLeft )
	{
		cadreMenu.style.left = positionX
	}
	else
	{
		cadreMenu.style.left = cadreMenuParent.offsetLeft - cadreMenu.offsetWidth - 1
		positionDroite = false
	}
	var positionY = cadreMenuParent.offsetTop + cadreItem.offsetTop - 1
	if( positionY + cadreMenu.offsetHeight < document.body.clientHeight + document.body.scrollTop )
	{
		cadreMenu.style.top = positionY
	}
	else
	{
		cadreMenu.style.top = document.body.clientHeight + document.body.scrollTop - cadreMenu.offsetHeight
	}
	var indice = 0
	while( this.tableauItems[ indice ] != null )
	{
		if( this.tableauItems[ indice ].sousMenu != null )
		{
			this.tableauItems[ indice ].sousMenu.SetPosition( this.index, this.tableauItems[ indice ].index, positionDroite )
		}
		indice ++
	}
	cadreMenu.style.display = "none"
}
function Menu_Hide()
{
	if( ! this.isMainMenu )
	{
		var cadreMenu = GetElement( "MENU_" + this.index )
		cadreMenu.style.display = "none"
		this.isVisible = false
	}
	var indice = 0
	while( this.tableauItems[ indice ] != null )
	{
		if( this.tableauItems[ indice ].sousMenu != null && this.tableauItems[ indice ].sousMenu.isVisible )
			this.tableauItems[ indice ].sousMenu.Hide()
		this.tableauItems[ indice ].MakeUnfocused()
		indice ++
	}
}
function Menu_FocusChange( evenementSouris )
{
	if( this.isVisible )
	{
		var indiceItem = 0
		while( this.tableauItems[ indiceItem ] != null )
		{
			if( this.tableauItems[ indiceItem ].sousMenu != null )
			{
				if( this.tableauItems[ indiceItem ].sousMenu.isVisible )
				{
					if( this.tableauItems[ indiceItem ].sousMenu.FocusChange( evenementSouris ) )
						return true
				}
			}
			indiceItem ++
		}
		var cadreMenu = GetElement( "MENU_" + this.index )
		indiceItem = 0
		while( this.tableauItems[ indiceItem ] != null )
		{
			var cadreItem =	GetElement( "ITEM_" + this.index + "_" + indiceItem )
			var mouseX = 0
			var mouseY = 0
			if( ! document.all )
			{
				mouseX = evenementSouris.pageX
				mouseY = evenementSouris.pageY
			}
			else
			{
				mouseX = event.clientX
				mouseY = event.clientY
			}
			var isOver = IsCursorOverItem( cadreMenu, cadreItem, mouseX, mouseY )
			if( isOver )
			{
				this.tableauItems[ indiceItem ].MakeFocused()
				if( this.tableauItems[ indiceItem ].sousMenu != null && ! this.tableauItems[ indiceItem ].sousMenu.isVisible )
				{
					if( this.isMainMenu )
						this.tableauItems[ indiceItem ].sousMenu.SetPosition( this.index, this.tableauItems[ indiceItem ].index, true )
					var sousMenu = GetElement( "MENU_" + this.tableauItems[ indiceItem ].sousMenu.index )
					sousMenu.style.display = "inline"
					this.tableauItems[ indiceItem ].sousMenu.isVisible = true
				}
				var indice = 0
				while( this.tableauItems[ indice ] != null )
				{
					if( indice != indiceItem && this.tableauItems[ indice ].isFocused )
					{
						if( this.tableauItems[ indice ].sousMenu != null )
							this.tableauItems[ indice ].sousMenu.Hide()

						this.tableauItems[ indice ].MakeUnfocused()
					}
					indice ++
				}
				return true
			}
			indiceItem ++
		}
	}
	return false
}
function Menu_OnSelect( evenementSouris )
{
	if( this.isVisible )
	{
		var cadreMenu = GetElement( "MENU_" + this.index )
		var indiceItem = 0
		while( this.tableauItems[ indiceItem ] != null )
		{
			var cadreItem =	GetElement( "ITEM_" + this.index + "_" + indiceItem )
			if( this.tableauItems[ indiceItem ].sousMenu != null && this.tableauItems[ indiceItem ].sousMenu.isVisible )
				this.tableauItems[ indiceItem ].sousMenu.OnSelect( evenementSouris )
			var mouseX = 0
			var mouseY = 0
			if( ! document.all )
			{
				mouseX = evenementSouris.pageX
				mouseY = evenementSouris.pageY
			}
			else
			{
				mouseX = event.clientX
				mouseY = event.clientY
			}
			var isSelect = IsCursorOverItem( cadreMenu, cadreItem, mouseX, mouseY )
			if( isSelect )
			{
				var item = this.tableauItems[ indiceItem ]

				if( item.functionOnClick != "none" )
					eval( item.functionOnClick + "( '" + item.index + "', '" + item.texte + "' )" )
				if( item.URLOnClick != "none" )
					eval( "location.href = '" + item.URLOnClick + "'" )
				return true
			}
			else
			{
				this.tableauItems[ indiceItem ].MakeUnfocused()
			}
			indiceItem ++
		}
		HideMenu()
	}
}
function IsCursorOverItem( cadreMenu, cadreItem, mouseX, mouseY )
{
	if( ! document.all )
	{
		if( mouseX > cadreMenu.offsetLeft + cadreItem.offsetLeft &&
		mouseX - 1 < cadreMenu.offsetLeft + cadreItem.offsetLeft + cadreItem.offsetWidth &&
		mouseY > cadreMenu.offsetTop + cadreItem.offsetTop &&
		mouseY - 1 < cadreMenu.offsetTop + cadreItem.offsetTop + cadreItem.offsetHeight )
			return true
	}
	else
	{
		if( mouseX + document.body.scrollLeft - 2 > cadreMenu.offsetLeft + cadreItem.offsetLeft &&
		mouseX + document.body.scrollLeft - 3 < cadreMenu.offsetLeft + cadreItem.offsetLeft + cadreItem.offsetWidth &&
		mouseY + document.body.scrollTop - 2 > cadreMenu.offsetTop + cadreItem.offsetTop &&
		mouseY + document.body.scrollTop - 3 < cadreMenu.offsetTop + cadreItem.offsetTop + cadreItem.offsetHeight )
			return true
	}

	return false
}