// Affichage d'un menu en DHTML
// Auteur: Julien Liébert <jliebert@gaya.fr>
// Date creation: ven avr  4 14:49:29 CEST 2003
// Modification: 01/07/2003 18:45 - Fixe dmenuoff 
//		 27/06/2003 16:46 - Fixe compatibilité IE5.0
//		 19/06/2003 18:09 - Correction compatibilité Mac
//		 10/06/2003 17:10 - Reformatage du code
//		 30/05/2003 17:04 - Ajout des attributs dmenuimgon 
//				    et dmenuimgoff pour les tags img.
//		  
// Les arguments que peut prendre le tag du menu sont:
// dmenutarget:  L'id du menu a afficher.
// dmenuoffsetx: Décalage en pixel horizontale du menu affiché.
// dmenuoffsety: Décalage en pixel verticale du menu affiché.
//
// Les arguments que peuvent prendre le tag du menu et tout les tags fils:
// dmenuon:      La class css utilisé quand le menu est activé.
// dmenuoff:     La class css utilisé quand le menu est désactivé.
// dmenuimgon:   L'image d'un tag img quand le menu est activé.
// dmenuimgoff:  L'image d'un tag img quand le menu est déactivé.


var __menuClearTimeout;
var __menuClearTimeoutValue=500;
var __itemByName=new Object();
var __menu;
var __item;
var __innerWidth=800;
var __hauteurItem = 20;
var __largeurItem = 100;

function __getParentId(obj) {
	if( ! obj.parentNode ) {
		return false;
	}
	if( obj.parentNode.id ) {
		return obj.parentNode.id;
	}
	else {
		return __getParentId(obj.parentNode);
	}
}

function __setClass(obj,attribute) {
	if( ! obj || ! obj.getAttribute ) return;

	var cl=obj.getAttribute(attribute);
	if( cl ) {
		obj.className=cl;
	}

	var childs=obj.childNodes;
	for( var i=0; i < childs.length; i++ ) {
		__setClass(childs[i],attribute);
	}
}

function __setImg(obj,attribute) {
	if( ! obj || ! obj.getAttribute ) return;

	var str=obj.getAttribute(attribute);
	if( str && obj.src ) {		
		obj.src=str;
	}

	var childs=obj.childNodes;
	for( var i=0; i < childs.length; i++ ) {
		__setImg(childs[i],attribute);
	}
}

function __hideMenu(this_name) {
	if( ! this_name ) return;

	var obj=__itemByName[this_name];
	if( obj ) {
		var layer_id=__getParentId(obj);

		if( layer_id ) {
			document.getElementById(this_name).style.visibility='hidden';
			__hideMenu(layer_id);
		}
		__setClass(obj,'dmenuoff');
		__setImg(obj,'dmenuimgoff');
	}
}

function __showMenu(this_name) {
	if( ! this_name ) return;

	var obj=__itemByName[this_name];
	if( obj ) {
		var layer_id=__getParentId(obj);
		if( layer_id ) {
			__showMenu(layer_id);
		}
		__setClass(obj,'dmenuon');
		__setImg(obj,'dmenuimgon');		
	}
	document.getElementById(this_name).style.visibility='inherit';
}

function __hideCurrentMenuAndItem() {
	__hideMenu(__menu);	
	__setClass(__item,'dmenuoff');
	__setImg(__item,'dmenuimgoff'); 	
}

function __showCurrentMenuAndItem() {
	__showMenu(__menu);
	__setClass(__item,'dmenuon');
	__setImg(__item,'dmenuimgon'); 	
}

function dmenuShow_old(obj) {

var nbMenu = 1;

if( ! obj || ! obj.getAttribute ) return;


var target;

if( ! obj.getAttribute('dmenutarget') || 
	    ! document.getElementById(obj.getAttribute('dmenutarget') + nbMenu) ) {
		clearTimeout(__menuClearTimeout);
		
		__hideCurrentMenuAndItem();		
		__menu=__getParentId(obj);
		__item=obj;
		__showCurrentMenuAndItem();		

		return;
}
	
while (!(!obj.getAttribute('dmenutarget') || ! document.getElementById(obj.getAttribute('dmenutarget') + nbMenu)))
{
	alert('deb while' + nbMenu);

	// Création de l'objet sousMenu du menu appelant
	var new_layer=document.getElementById(obj.getAttribute('dmenutarget') + nbMenu);

	// Création de l'objet Menu appelant
	var layer=document.getElementById(obj.id);
	
	// __largeurItem correspond à la largeur des div
	var X=+__largeurItem
	// On ajoute la marge à gauche du body
	X+=+(document.body.getAttribute('leftMargin'));
	X+=+(layer.style.posLeft);
	
	var Y=+(layer.style.posTop)+__hauteurItem*(nbMenu-1);

	new_layer.style.posLeft=X;
	new_layer.style.posTop=Y;
	__menu=obj.getAttribute('dmenutarget') + nbMenu;
	__showMenu(__menu);

nbMenu+=1;
target = obj.getAttribute('dmenutarget') + nbMenu;

}
alert('fin while ');

}

function dmenuShow(obj) {

if( ! obj || ! obj.getAttribute ) return;

	if( ! obj.getAttribute('dmenutarget') || 
	    ! document.getElementById(obj.getAttribute('dmenutarget')) ) { 
		clearTimeout(__menuClearTimeout);

		__hideCurrentMenuAndItem();		
		__menu=__getParentId(obj);
		__item=obj;
		__showCurrentMenuAndItem();		

		return;
	}

	__itemByName[obj.getAttribute('dmenutarget')]=obj;
	clearTimeout(__menuClearTimeout);

	// Création de l'objet sousMenu du menu appelant
	var new_layer=document.getElementById(obj.getAttribute('dmenutarget'));
	// Création de l'objet Menu appelant

	var layer=document.getElementById(obj.id);
	
	// 100 correspond à la largeur des div
	var X=+100
	// On ajoute la marge à gauche du body
	X+=+(document.body.getAttribute('leftMargin'));
	X+=+(layer.style.posLeft);
	var Y=+(layer.style.posTop);

/* à quoi ca sert ?
	var is_msie=(navigator.appVersion.indexOf("MSIE")!=-1);
	var is_mac=(navigator.appVersion.indexOf("Mac")!=-1);

	if( is_mac ) {
		Y-=97;
	}
	else {
		Y-=1;
	}
	if( ! is_msie ) {
		Y-=1;
	}
*/

	new_layer.style.posLeft=X;
	new_layer.style.posTop=Y;
	__hideCurrentMenuAndItem();	
	__menu=obj.getAttribute('dmenutarget');
	__showMenu(__menu);

}

function dsousmenuShow(obj) {

if( ! obj || ! obj.getAttribute ) return;

	if( ! obj.getAttribute('dmenutarget') || 
	    ! document.getElementById(obj.getAttribute('dmenutarget')) ) { 
		clearTimeout(__menuClearTimeout);

		__hideCurrentMenuAndItem();		
		__menu=__getParentId(obj);
		__item=obj;
		__showCurrentMenuAndItem();		

		return;
	}

	__itemByName[obj.getAttribute('dmenutarget')]=obj;
	clearTimeout(__menuClearTimeout);

	// Création de l'objet sousMenu du menu appelant
	var new_layer=document.getElementById(obj.getAttribute('dmenutarget'));
	// Création de l'objet Menu appelant

	var layer=document.getElementById(obj.id);
	// 201 correspond à deux fois la largeur des div + un delta
	var X=+201
	// On ajoute la marge à gauche du body
	X+=+(document.body.getAttribute('leftMargin'));
	X+=+(layer.style.posLeft);
	var Y=+(layer.style.posTop);

/* à quoi ca sert ?
	var is_msie=(navigator.appVersion.indexOf("MSIE")!=-1);
	var is_mac=(navigator.appVersion.indexOf("Mac")!=-1);

	if( is_mac ) {
		Y-=97;
	}
	else {
		Y-=1;
	}
	if( ! is_msie ) {
		Y-=1;
	}
*/

	new_layer.style.posLeft=X;
	new_layer.style.posTop=Y;
	__hideCurrentMenuAndItem();	
	__menu=obj.getAttribute('dmenutarget');
	__showMenu(__menu);

}


function dmenuHide() {
	__menuClearTimeout=setTimeout("__hideCurrentMenuAndItem()",__menuClearTimeoutValue);
}

// Definition de la fonction getElementById si elle n'est pas définit.
if( ! document.getElementById ) {
	if( document.layers )
		document.getElementById=function(id) { return document.layers[id]; }
   	else if( document.all )
        	document.getElementById=function(id) { return document.all[id]; }
}

// Définition d'une variable innerWidth inexistante sous ie
if( ! window.innerWidth ) {
	if( document.body ) {
		__innerWidth=document.body.clientWidth;
	}
}
else {
	__innerWidth=window.innerWidth;
}


