/**
 * CPEROLLOVER
 * Powered by DXD2
 */

		var HELPBUBBLE_DATAS;
		var PRELOADED_ELEMENTS = [];

		function viewHelpBubble (help,func) {
			if (help == "#var#") {
				eval("help="+func);
			}
			if (HELPBUBBLE_DATAS[4] == -1) {
				hideHelpBubble();
				return;
			}
			HELPBUBBLE_DATAS[1].style.left = HELPBUBBLE_DATAS[5][0]+HELPBUBBLE_DATAS[3][0]+"px";
			HELPBUBBLE_DATAS[1].style.top = HELPBUBBLE_DATAS[5][1]+HELPBUBBLE_DATAS[3][1]+"px";
			HELPBUBBLE_DATAS[1].innerHTML = HELPBUBBLE_DATAS[0][0] + help + HELPBUBBLE_DATAS[0][1];
			HELPBUBBLE_DATAS[1].style.visibility="visible";
		}
		function hideHelpBubble () {
			HELPBUBBLE_DATAS[1].style.visibility="hidden";
		}

		function moveHelpBubble (e) {
			HELPBUBBLE_DATAS[3] = getMouseCoord (e,0,0);
		}

		function stopHelpBubble() {
			if (HELPBUBBLE_DATAS[4] != -1) {
				window.clearTimeout (HELPBUBBLE_DATAS[4]);
				HELPBUBBLE_DATAS[4] = -1;
			}
			hideHelpBubble();
		}
		function runHelpBubble(help,func) {
			stopHelpBubble();
			HELPBUBBLE_DATAS[4] = window.setTimeout ('viewHelpBubble("'+help+'","'+func+'")',HELPBUBBLE_DATAS[2]);
		}
		//e = event object
		//inum = numero d image, 0 quitte, 1 dessus, 2 click
		//lock = -1 ne change pas l' etat,0 debloque la rollover, 1 bloque la rollover

		function rollElement (e,inum,act) {
			if (e == null) {
				return changeElement (event.srcElement,inum,act);
			}
			else {
				return changeElement (e.currentTarget,inum,act);
			}
		}

		LOCK_ROLLS = 0;
		function waitForImg() {
			LOCK_ROLLS = 1;
			return true;
		}
		function changeElement(ele,inum,act,execclick) {
			if (LOCK_ROLLS == 1) return;
			if (ele == null) return;
			var att = ele.getAttribute ('help');
			if ((att != null) && (att != "")) {
				if (act > -1) {
					stopHelpBubble();
				}
				else {
					runHelpBubble(att,ele.getAttribute("helpvar"));
				}
			}
			att = ele.getAttribute ('reservedstatus');
			if (act < 2) {
				//Unlock requested
				if (act == (att-2)) {
					ele.removeAttribute ('reservedstatus');
					att = -1;
				}
			}
			if (att == null) att = -1;
			if (act > att) {
				ele.setAttribute('reservedstatus',act);
			}
			if (att > 1) return true;
			att = ele.src;
			if ((att != null) && (att != "")) {
				ele.src = getNewSrc (ele,inum);
			}
			att = ele.className;
			if ((att != null) && (att != "")) {
				ele.className = att.substr(0,att.length-1)+inum;
			}
			if (execclick) {
				att = ele.getAttribute ("clickexec");
				if (att != null) {
					eval (att);
				}
			}
			return true;
		}

		function getNewSrc (ele,inum) {
			var tmp = ""+inum;
			var att = ele.src;
			return att.substr (0,att.length-(4+tmp.length))+tmp+att.substr (att.length-4,att.length);
		}

		function mergeEvent (object,eventname,precallmethod) {
			var att = object.getAttribute(eventname+"2");
			if (att == null) {
				att = "";
			}
			else {
				att += ";";
			}
			att = new Function ('e',precallmethod+att);
			eval ("object."+eventname+"="+att+";");
		}

		function preloadElement (ele,inum,prei) {
			if (inum == -1) return;
			if (ele.src == null) return;
			var tmp = "img_"+prei+"_"+inum;
			if (PRELOADED_ELEMENTS[tmp] == null) {
				PRELOADED_ELEMENTS[tmp] = new Image();
				PRELOADED_ELEMENTS[tmp].src = getNewSrc(ele,inum);
			}
		}

		/**
		 * Ajoute les evenement sur un objet
		 * styl = (0= onmove, 1 = onpush, 2 = mixed)
		 * lc = lock click
		 * pre = preload id ou -1
		 */

		function enableEvents (object,iover,iout,iup,idown,iclick,pre,prei) {
			if (pre) {
				preloadElement (object,iout,prei);
				preloadElement (object,iover,prei);
				preloadElement (object,iout,prei);
				preloadElement (object,iup,prei);
				preloadElement (object,idown,prei);
				preloadElement (object,iclick,prei);
			}
			mergeEvent (object,"onmouseover","rollElement (e,'"+iover+"',-1);");
			mergeEvent (object,"onmouseout","rollElement (e,'"+iout+"',0);");
			if (idown != -1) {
				mergeEvent (object,"onmouseup","rollElement (e,'"+iup+"',0);");
				mergeEvent (object,"onmousedown","rollElement (e,'"+idown+"',2);");
			}
			var att = object.getAttribute ('help');
			if ((att !=null) && (att != "")) {
				mergeEvent (object,"onmousemove","moveHelpBubble(e);");
			}
			if (iclick != -1) {
				mergeEvent (object,"onclick","rollElement (e,'"+iclick+"',2);");
			}
		}

		function setRollsTo (name,inum,lock) {
			var ele = document.getElementsByName (name);
			var i;
			for (i=0;i<ele.length;i++) {
				changeElement (ele[i],inum,lock);
			}
		}

		function rollEventElement (e,inum,act,target,execclick) {
			if (e == null) {
				return changeElement (target,inum,act,execclick);
			}
			if (e.srcElement != null) {
				return changeElement (e.srcElement,inum,act,execclick);
			} else {
				return changeElement (e.currentTarget,inum,act,execclick);
			}
		}

		/**
		 * *******************************************************
		 * USER METHODES
		 * *******************************************************
		 */

		/**
		 * Les methodes suivantes peuvent etre utilisé pour
		 * activer les rollover manuellement à tester ...
		 */
		function rollHrefElementOver (e,inum,tid,href) {
			window.status = href;
			return rollEventElement (e,inum,-1,tid,false);
		}
		function rollHrefElementOut (e,inum,tid) {
			window.status = "";
			return rollEventElement (e,inum,0,tid,false);
		}
		function rollElementOver (e,inum,tid) {
			return rollEventElement (e,inum,-1,tid,false);
		}
		function rollElementOut (e,inum,tid) {
			return rollEventElement (e,inum,0,tid,false);
		}
		function rollElementUp (e,inum,tid) {
			return rollEventElement (e,inum,0,tid,false);
		}
		function rollElementDown (e,inum,tid) {
			return rollEventElement (e,inum,2,tid,false);
		}
		function elementMove (e) {
			return moveHelpBubble (e);
		}
		function elementClick (e,inum,tid) {
			return rollEventElement (e,inum,2,tid,true);
		}

		/**
		 * Meme chose que rollRollsTo, mais pour une
		 * seule rollover identifiée par son id
		 */

		function lockRollTo(id,inum) {
			changeElement (document.getElementById(id),inum,3);
		}

		/**
		 * Voir locKRollTo
		 */
		function unLockRollTo(id,inum) {
			changeElement (document.getElementById(id),inum,1);
		}

		/**
		 * Bloque les rollover (name) sur le prefix inum,
		 * jusqu' a ce qu' elles soient debloquées par unLockRollsTo
		 *
		 */
		function lockRollsTo (name,inum) {
			setRollsTo (name,inum,3);
		}

		/**
		 * Voir lockRollsTo
		 */
		function unLockRollsTo (name,inum) {
			lockRollsTo (name,inum,1);
		}

		/**
		 * Applique une rollover sur une image identifié par son id
		 * Parametres:
		 * id= id de l' image
		 * (voir enableImgRollOvers)
		 *
		 */

		function enableRollOver(id,iover,iout,iup,idown,iclic,pre) {
			var ele = document.getElementById(id);
			if (ele == null) return;
			enableEvents (ele,iover,iout,iup,idown,iclic,pre,id);
		}

		/**
		 * Applique une rollover sur un groupe d'image identifiées par leur noms commun
		 *
		 * Parametres:
		 * name: nom du groupe des images
		 *
		 * Les parameters suivant sont ignoré si valent -1.
		 *
		 *
		 * iover: correspond a onmouseover ou -1 si pas de changement
		 * iout: -> onmouseout ..
		 * iup: -> onmouseup ..
		 * idown: -> onmousedown ..
		 * iclic: -> a onclick ..
		 *
		 * pre: true = preload les images.
		 *
		 * ATTENTION: Si par exemple onmouseover est activé et que
		 * l'evenement onmouseover est deja defini sur l' image, ce
		 * dernier sera supprimé. Par contre, si un attribu onmouseover2
		 * est trouvé, il sera activé.
		 */

		function enableRollOvers(name,iover,iout,iup,idown,iclic,pre) {
			var img = document.getElementsByName (name);
			var i;
			for (i=0;i<img.length;i++) {
				enableEvents (img[i],iover,iout,iup,idown,iclic,pre,name+i);
			}
		}

		/**
		 * Initialise les bulle d' aide sur les rollover
		 * Parametres:
		 *   divskeleton = div utilisé comme modele, doit etre invisible et doit contenir la chaine #MESSAGE#
		 *   divview = div affiché, doit etre invisible et vide
		 *   timeout = delai d' attente avant affichage de la bubble sur la rollover
		 */

		function initHelpBubble (divskeleton,divview,ox,oy,timeout) {
			HELPBUBBLE_DATAS = [];
			HELPBUBBLE_DATAS[0] = document.getElementById (divskeleton).innerHTML.split('#MESSAGE#');
			HELPBUBBLE_DATAS[1] = document.getElementById (divview);
			HELPBUBBLE_DATAS[2] = timeout;
			HELPBUBBLE_DATAS[3] = [];
			HELPBUBBLE_DATAS[4] = -1;
			HELPBUBBLE_DATAS[5] = [ ox,oy ];
		}
