//////////////////////////////////////////////////////////////////////////////////
//	OBJET	:	Classe et fonctions javascript, permettant la gestion des menus	//
//				contextuels d'une page DHTML									//
//	DATE	:	13 février 2005													//
//	AUTEUR	:	GOLINSKI Ludwig													//
//////////////////////////////////////////////////////////////////////////////////



// VARIABLE GLOBALE À UTILISER POUR AJOUTER UN MENU CONTEXTUEL
var menuContext = new MenuContext()

// CLASSE PERMETTANT DE STOCKER ET D'ACCÉDER AUX MENUS DE LA PAGE AINSI QUE DE CHANGER LE MENU ACTIF
function MenuContext()
{
	// Tableau contenant les menus de la page
	this.tableauMenus = new Array

	// Chaine contenant l'index du menu actif
	this.indexMenuActif = 0

	// Méthodes de la classe
	this.Add = MenuContext_Add
	this.Start = MenuContext_Start
	this.ChangeMenuActif = MenuContext_ChangeMenuActif
}

// MÉTHODE PERMETTANT D'AJOUTER UN MENU À LA PAGE
function MenuContext_Add( styleMenu )
{
	// Recherche le prochain emplacement libre du tableau
	var indice = 0
	while( this.tableauMenus[ indice ] != null )
		indice ++

	// Crée puis stocke le menu vide
	this.tableauMenus[ indice ] = new Menu( indice, styleMenu )

	// Retourne le menu pour pouvoir y ajouter des items
	return this.tableauMenus[ indice ]
}

// FONCTION APPELÉE LORS D'UN CLICK SUR LA PAGE, PERMETTANT DE CACHER LE MENU ACTIF
function HideMenu()
{
	// Vérifie que le menu actif est affiché
	if( menuContext.tableauMenus[ menuContext.indexMenuActif ].isVisible )
	{
		// Récupère l'instance sur le menu actif et le cache
		menuContext.tableauMenus[ menuContext.indexMenuActif ].Hide()
	}

	// Retourne false pour que le menu contextuel du navigateur ne se lance pas
	// si la fonction a été appelé lors d'un click droit
	return false
}

// FONCTION APPELÉE LORSQUE LE CURSEUR SE DÉPLACE SUR LA PAGE, PERMETTANT DE DÉTECTER PUIS MODIFIER L'ITEM AYANT LE FOCUS
function FocusChange( evenementSouris )
{
	// Fait appel à la méthode du menu actif
	menuContext.tableauMenus[ menuContext.indexMenuActif ].FocusChange( evenementSouris )
}

// FONCTION APPELÉE LORSQUE L'UTILISATEUR CLIQUE DANS LA PAGE
function OnSelect( evenementSouris )
{
	// Fait appel à la méthode du menu actif
	menuContext.tableauMenus[ menuContext.indexMenuActif ].OnSelect( evenementSouris )
}

// FONCTION APPELÉE LORSQUE L'UTILISATEUR COMMENCE UNE SÉLECTION OU FAIT UN CLICK DROIT
// ( PERMET D'ARRÊTER L'ACTION )
function NoMenu()
{
	return false
}



// MÉTHODE PERMETTANT DE CONSTRUIRE LES MENUS. A APPELER EN DERNIER POUR QUE LES MENU SOIENT AU PREMIER PLAN
// menuForPage : booléen indiquant si le menu doit s'afficher lors d'un click droit dans la page
function MenuContext_Start( menuForPage )
{
	// Capture les évènements (pour les navigateurs Netscape)
	if( ! document.all )
		document.captureEvents( Event.MOUSEMOVE | Event.CLICK | Event.SELECTSTART )

	// Le menu concerne toute la page
	if( menuForPage )
		document.onmouseover = ShowMenu

	// Modifie les fonctions à appeler lorsqu'un évènement se produit dans la page
	document.onmousemove = FocusChange
	document.onclick = OnSelect
	document.onselectstart = NoMenu

	// Parcourt le tableau de menus
	var indice = 0
	while( this.tableauMenus[ indice ] != null )
	{
		// Construit le menu ,ces items et ces sous-menus
		this.tableauMenus[ indice ].Draw()

		// Passe au menu suivant
		indice ++
	}
}

// MÉTHODE PERMETTANT DE CHANGER LE MENU ACTIF C'EST À DIRE, CELUI QUI APPARAÎTERA LORS DE L'APPEL A LA FONCTION 'ShowMenu'
function MenuContext_ChangeMenuActif( indexMenuActif )
{
	// Cache le menu actuellement actif
	menuContext.tableauMenus[ menuContext.indexMenuActif ].Hide()

	// Modifie le menu actif
	this.indexMenuActif = indexMenuActif
}


// FONCTION APPELÉE LORS D'UN CLICK DROIT, PERMETTANT D'AFFICHER LE MENU ACTIF
function ShowMenu( evenementSouris )
{
	// Cache puis affiche le menu actif
	menuContext.tableauMenus[ menuContext.indexMenuActif ].Hide()
	menuContext.tableauMenus[ menuContext.indexMenuActif ].Show( evenementSouris )

	// Retourne false pour que le menu contextuel du navigateur ne se lance pas
	return false
}



// FONCTION PERMETTANT D'OBTENIR UN ELEMENT DE LA PAGE, D'APRES SON ID
function GetElement( idElement )
{
	if( document.all )
		return document.all[ idElement ]

	return document.getElementById( idElement )
}
