// Affichage d'un menu en DHTML// Auteur: Julien Liˇbert <jliebert@gaya.fr>// Date creation: ven avr  4 14:49:29 CEST 2003// Modification: 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.// dmenupos:     La position du menu, 4 cas sont possible: //		 left, right, top, bottom (right par defaut)// 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=250;var __itemByName=new Object();var __menu;var __item;function __getParentId(obj) {	if( ! obj.parentNode ) {		return false;	}	if( obj.parentNode.id ) {		return obj.parentNode.id;	}	else {		return __getParentId(obj.parentNode);	}}function __setClassAttribute(obj,attribute) {	if( ! obj || ! obj.setAttribute ) return;	obj.setAttribute(attribute,obj.className);	var childs=obj.childNodes;	for( var i=0; i < childs.length; i++ ) {		__setClassAttribute(childs[i],attribute);	}}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(obj) {	if( ! obj || ! obj.getAttribute ) return;	if( ! obj.getAttribute('dmenuoff') ) {		__setClassAttribute(obj,'dmenuoff');	}	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);	var new_layer=document.getElementById(obj.getAttribute('dmenutarget'));	var layer=document.getElementById(__getParentId(obj));	var pos=obj.getAttribute('dmenupos');	var offset_x=+(obj.getAttribute('dmenuoffsetx'));	var offset_y=+(obj.getAttribute('dmenuoffsety'));	var X;	var Y;	if( ! pos ) {		pos="right";	}	if( pos=="left" ) {		X=layer.offsetLeft+obj.offsetLeft-new_layer.offsetWidth-offset_x;		Y=layer.offsetTop+obj.offsetTop-offset_y;	}	if( pos=="right" || ( pos=="left" && X < 0 ) ) {		X=layer.offsetLeft+obj.offsetLeft+obj.offsetWidth+offset_x;		Y=layer.offsetTop+obj.offsetTop+offset_y;		if ( X+new_layer.offsetWidth > window.innerWidth ) {			X=X-obj.offsetWidth-new_layer.offsetWidth-offset_x*2;			if( X < 0 ) {				X=0;			}		}	}	if( pos=="top" ) {		X=layer.offsetLeft+obj.offsetLeft+offset_x;		Y=layer.offsetTop+obj.offsetTop-new_layer.offsetHeight-offset_y;	}	if( pos=="bottom" || ( pos=="top" && Y < 0 ) ) {		X=layer.offsetLeft+obj.offsetLeft+offset_x;		Y=layer.offsetTop+obj.offsetTop+obj.offsetHeight+offset_y;	}	new_layer.style.left=X+'px';	new_layer.style.top=Y+'px';	__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 ) {	window.innerWidth=document.body.clientWidth;}