var NS = (document.layers) ? true : false;
var IE = (document.all) ? true : false;

var listeMenus = new Array();
var rootMenu = new Array();
var emptyString = "<img src=\"images/common/transparent.gif\" width=\"0\" height=\"0\">";

if(!Array.push) Array.prototype.push=function()
{
  for(var i=0;i!=arguments.length;i++)
  {
    this[this.length]=arguments[i];
  }
  return this.length;
}

/************************
*        CLASSES        *
************************/
// classe navMenu
function navMenu (idMenu,idParent,strMenuContent){

	/* proprietes */
	this.id = idMenu;
	this.divObject = null;
	this.isOpen = false;
	this.content = (typeof strMenuContent != "undefined")?strMenuContent:emptyString;
	this.parentMenu = (typeof idParent != "undefined")?getMenuObject(idParent):null;
	this.rootMenu = (this.parentMenu == null)?this:this.parentMenu.rootMenu;
	this.childList = new Array();
	this.timer = null;

	/* Methodes */

	// ajoute un enfant à ce menu
	this.addChild = function(objChildMenu){
		this.childList.push(objChildMenu);
		return this.childList.length;
	};

	// ouvre le menu
	this.open = function (){
		if(this.parentMenu != null)
			this.parentMenu.open();
		this.isOpen = true;
		this.stopTimer();
	};

	// ferme le menu
	this.close = function (){
		this.isOpen = false;
		if(this.parentMenu != null)
			this.parentMenu.close();
	};

	// ferme les menu enfants
	this.closeChildren = function (){
		for(var i=0;i<this.childList.length;i++){
			this.childList[i].close();
		}	
	};	

	//rafraichit l'affichage du menu déroulé.
	this.refreshMenuTree = function(){
		if(this.rootMenu.id == this.id)
		{
			this.divObject.innerHTML = this.show();
		}
		else
		{
			this.rootMenu.refreshMenuTree();
		}
	}

	// affiche le menu
	this.show = function (){
		var StrReturnContent = this.content;
		if(this.isOpen)
		{
			for(var i=0;i<this.childList.length;i++){
				StrReturnContent += (this.childList[i].isOpen)?this.childList[i].show():this.childList[i].content;
			}
		}
		return StrReturnContent;
	};

	// lance le timer de fermeture du menu
	this.startTimer = function(){
		this.timer = setTimeout("rootMenu[\""+this.rootMenu.id+"\"].refreshMenuTree()",1000);
	}	

	// arrete le timer de fermeture du menu
	this.stopTimer = function(){
		clearTimeout(this.timer);
		this.timer = null;
	}

	/* construction de l'objet */

	// référence l'objet dans la liste des menus.
	listeMenus[idMenu] = this;
}

/************************
*  FONCTIONS PUBLIQUES  *
************************/

// renvoie l'objet navMenu correspondant à l'idMenu
function getMenuObject(idMenu){
	var currentMenu = (listeMenus[idMenu])?listeMenus[idMenu]:null;
	return currentMenu;
}

// lorsqu'on survole le menu
function showMenu(idMenu){
	var currentMenu = getMenuObject(idMenu);
	if(!currentMenu.isOpen)
	{
		currentMenu.open();
		currentMenu.refreshMenuTree();
	}
}

// lorsqu'on quitte un menu
function leaveMenu(idMenu){
	var currentMenu = getMenuObject(idMenu);
	currentMenu.close();
	currentMenu.closeChildren();
	currentMenu.startTimer();
}

// crée les menus niveau 0.
function createRootMenu(idMenu){
	rootMenu[idMenu] = new navMenu (idMenu);
	rootMenu[idMenu].divObject = (IE)?(eval ("document.all[\"" + idMenu+"\"]")):(document.getElementById(idMenu));
	return;
}

// crée les sous menus.
function createSubMenu(idMenu,idParent,strMenuContent){
	var objParentMenu = getMenuObject(idParent);
	var objNewMenu = new navMenu (idMenu,idParent,strMenuContent);
	//attachement de l'objet à son parent.
	if(objParentMenu != null)
		objParentMenu.addChild(objNewMenu);
	return objNewMenu;
}


//////////////////////////////////////////////////////
function debug(strDebugText,strDebugMode){
	var debugArea = (IE)?document.all["debug"]:document.getElementById("debug");
	switch(strDebugMode)
	{
		case "noadd":
			debugArea.value = strDebugText;
			break;
		default:
			debugArea.value += "\n"+strDebugText;
			break;
	}
}
