var Html;
Html ='<div id="Bulle" style="position:absolute; left:auto; top:auto; width:auto; height:auto; z-index:0; visibility:hidden"></div>';
if(bSELECT) {
Html +='<iframe id="FBulle" style="position:absolute;visibility:hidden;border:0px;" frameborder="0" scrolling="no">&nbsp;</iframe>';
}
document.write( Html);
//-->
//-------------------------------------------------------------
//  Nom Document : GFBULLE.JS
//  Auteur       : G.Ferraz
//  Objet        : Info Bulle...
//  Création     : 01.12.2003
//-------------------------------------------------------------
//  Mise à Jour  : 29.05.2006
//  Objet        : Compatibilité IE6 et DOCTYPE
//  -----------------------------------------------------------
//  Mise à Jour  : 21.06.2006
//  Objet        : Prise en compte des <SELECT>
//  -----------------------------------------------------------
//  Mise à Jour  : 15.09.2006
//  Objet        : Amélioration et modif suite à commentaires
//  -----------------------------------------------------------
//  Mise à Jour  : 10.11.2006
//  Objet        : Correction Bug sous FF si document <DIV style="float...">
//  -----------------------------------------------------------
var DOM = (document.getElementById ? true : false);
var IE  = (document.all && !DOM ? true : false);
var NAV_OK   = ( DOM || IE );
var NETSCAPE = ( navigator.appName == 'Netscape');
var EXPLORER = ( navigator.appName == 'Microsoft Internet Explorer');
var OPERA    = ( window.opera ? true : false);
var Mouse_X;          // Position X en Cours de la Mouse
var Mouse_Y;          // Position Y en Cours de la Mouse
var Client_Y;          // Position Y de la Mouse relative à la fenêtre
var Decal_X  = -10;   // Décalage X entre Pointeur Mouse et Bulle
var Decal_Y  = -10;   // Décalage Y entre Pointeur Mouse et Bulle
var bBULLE   = false; // Flag Affichage de la Bulle
// Flag pour présence Select sous IE
var bSELECT  = false; // ( navigator.appName =='Microsoft Internet Explorer') && !OPERA;
var bISSET = false;

//-- Pour Test mode Cadre
var ZObjet = new RECT();   // Zone pour MouseMove
var ZBulle = new RECT();
var bCADRE = false;        // Flag Affichage du Cadre
var bINIT  = false;
var Fenetre = new RECT();
//=========================
// Définition pour le Cadre
//=========================
function RECT(){
	this.Left   =0;
	this.Top    =0;
	this.Right  =0;
	this.Bottom =0;
	this.InitRECT = RECT_Set;
	this.PtInRECT = RECT_PtIn;
}
//-------------------------------------------
function RECT_Set( left_, top_, larg_, haut_){
	with( this){
		Left   = ( left_ ? left_ : -1);
		Top    = ( top_  ? top_  : -1);
		Right  = Left + ( larg_ ? (larg_ -1): 0);
		Bottom = Top  + ( haut_ ? (haut_ -1): 0);
	}
}
//-------------------------
function RECT_PtIn( x_, y_){
	with( this){
		return(( x_ > Left) && ( x_ < Right) && ( y_ > Top ) && ( y_ < Bottom));
		if( x_ < Left || x_ > Right)  return( false);
		if( y_ < Top  || y_ > Bottom) return( false);
		return( true);
	}
}
//---------------------
function GetObjet(div_){
	if( DOM) return document.getElementById(div_);
	if( IE)  return document.all[div_];
	return( null);
}
//-----------------------------
function ObjWrite( div_, html_){
	var Obj = GetObjet( div_);
	if( Obj)
	Obj.innerHTML = html_;
}
//-- 10.11.2006 ----------------------------
// correction bug sur <DIV style="float...">
//------------------------------------------
function Get_DimFenetre(){
	var L_Doc;
	var H_Doc;
	var DocRef;

	with( Fenetre){
		if( window.innerWidth){
			with( window){
				Left   = pageXOffset;
				Top    = pageYOffset;
				Right  = innerWidth;
				Bottom = innerHeight;
				//-- Modif du 10.11.2006
				L_Doc = document.body.clientWidth;
				H_Doc = document.body.clientHeight;
				//-- fin modif.
				if( Right  > L_Doc) Right  = L_Doc;
				if( Bottom > H_Doc) Bottom = H_Doc;
			}
		}
		else{ // Cas Explorer à part
			if( document.documentElement && document.documentElement.clientWidth)
			DocRef = document.documentElement;
			else
			DocRef = document.body;

			with( DocRef){
				Left   = scrollLeft;
				Top    = scrollTop;
				Right  = clientWidth;
				Bottom = clientHeight;
			}
		}
		//-- limite Maxi Fenêtre Affichage
		Right  += Left;
		Bottom += Top;
	}
}
//------------------------------------
function ObjShowAll( div_, x_, y_, z_){
	var B_Obj = GetObjet( div_);
	var F_Obj = GetObjet( 'F' +div_);
	var MaxX, MaxY;
	var Haut, Larg;
	var SavY = y_;
	var SavX = x_;
    var Decal_Client_Y = Client_Y - Decal_Y;
	if( B_Obj){
		//-- Récup. dimension du DIV
		if( NETSCAPE){
			Larg = B_Obj.offsetWidth;
			Haut = B_Obj.offsetHeight;
		}
		else{
			Larg = B_Obj.scrollWidth;
			Haut = B_Obj.scrollHeight;
		}
		with( Fenetre){
			//-- Réajuste dimension fenêtre
			MaxX = Right  - Larg;
			MaxY = Bottom - Haut;

			//-- Application Bornage
			if( x_ > MaxX) x_ = MaxX;
			if( x_ < Left) x_ = Left;
			if( y_ > MaxY) y_ = MaxY;
			if( y_ < Top)  y_ = Top;
		}
		
		//-- si en bas On réajuste
		//-- pour que la bulle ne prenne pas le focus
		if( y_== MaxY && (Decal_Client_Y >= Larg)){
			var DeltaY = MaxY -SavY;
			y_ = MaxY - DeltaY -Haut -2*Decal_Y;
		}		
		// Si on est en bas à droite et qu'il ne reste plus assez de place pour l'élément à afficher
		else if(y_ >= MaxY && x_ >= MaxX) {
			/* Et Si la hauteur globale du document est inférieure à la hauteur de l'élement à afficher
			if(MaxX <= 0){
			    // Alors on désactive le bornage sur x pour que l'élement ne fasse pas perdre le focus
				x_ = SavX;
			}*/
			/* On désactive le bornage sur y pour que l'élement ne fasse pas perdre le focus*/
			y_ = SavY;			
		}	

		//-- On place la Bulle
		if( bSELECT){//-- Ajout pour SELECT sous IE
			with(F_Obj.style){
				left       = x_ +"px";
				top        = y_ +"px";
				zIndex     = z_-1;
				visibility = "visible";
			}
		}
		with(B_Obj.style){
			left       = x_ +"px";
			top        = y_ +"px";
			zIndex     = z_;
			visibility = "visible";
		}
		//-- Affectation Zone du Rectangle
		ZBulle.InitRECT( x_, y_, Larg, Haut);
	}
}
//-- 15.09.2006 ------------------------
// Ajout Fonction addEvent
//--------------------------------------
// written by Dean Edwards, 2005
// with input from Tino Zijdel, Matthias Miller, Diego Perini

// http://dean.edwards.name/weblog/2005/10/add-event/

function addEvent(element, type, handler) {
	if (element.addEventListener) {
		element.addEventListener(type, handler, false);
	} else {
		// assign each event handler a unique ID
		if (!handler.$$guid) handler.$$guid = addEvent.guid++;
		// create a hash table of event types for the element
		if (!element.events) element.events = {};
		// create a hash table of event handlers for each element/event pair
		var handlers = element.events[type];
		if (!handlers) {
			handlers = element.events[type] = {};
			// store the existing event handler (if there is one)
			if (element["on" + type]) {
				handlers[0] = element["on" + type];
			}
		}
		// store the event handler in the hash table
		handlers[handler.$$guid] = handler;
		// assign a global event handler to do all the work
		element["on" + type] = handleEvent;
	}
};
// a counter used to create unique IDs
addEvent.guid = 1;

function removeEvent(element, type, handler) {
	if (element.removeEventListener) {
		element.removeEventListener(type, handler, false);
	} else {
		// delete the event handler from the hash table
		if (element.events && element.events[type]) {
			delete element.events[type][handler.$$guid];
		}
	}
};

function handleEvent(event) {
	var returnValue = true;
	// grab the event object (IE uses a global event object)
	event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
	// get a reference to the hash table of event handlers
	var handlers = this.events[event.type];
	// execute each event handler
	for (var i in handlers) {
		this.$$handleEvent = handlers[i];
		if (this.$$handleEvent(event) === false) {
			returnValue = false;
		}
	}
	return returnValue;
};

function fixEvent(event) {
	// add W3C standard event methods
	event.preventDefault = fixEvent.preventDefault;
	event.stopPropagation = fixEvent.stopPropagation;
	return event;
};
fixEvent.preventDefault = function() {
	this.returnValue = false;
};
fixEvent.stopPropagation = function() {
	this.cancelBubble = true;
};
//-- 15.09.2006 ------------------------
// Utilisation de addEvent
//--------------------------------------
function Init_Bulle(){
	//-- Pour les SELECT on supprime l'événement hérite
	var Obj = document.body.getElementsByTagName('SELECT');
	if( Obj && Obj.length){
		for(var i=0; i < Obj.length; i++){
			if( Obj[i].size == 1){
				for(var k=0; k < Obj[i].options.length; k++){
					addEvent( Obj[i].options[k], 'mousemove', BulleHide);
				}
			}
			addEvent( Obj[i], 'mousedown', BulleHide);
			addEvent( Obj[i], 'scroll', BulleHide);
		}
	}
	else
	bSELECT = false; // Pas de SELECT dans le document
	bINIT =true;
}
////////////////////////////
// mode Cadre Indépendant //
////////////////////////////
//------------------------

function CadreWrite( txt_){
	var Html;
	var B_Obj = GetObjet( 'Bulle');
	var F_Obj = GetObjet( 'FBulle');
	if( !bINIT) Init_Bulle();
	if( B_Obj){
		//-- Récup dimension d'affichage
		Get_DimFenetre();
		Decal_X = -10;  // Decalage dans de la Bulle
		Decal_Y = -10;
		Html  = "<table border='1' bordercolor='#062a51' cellspacing=0 cellpadding=2 bgcolor='#e3ecff'>";
		Html += "<tr><td class='Bulle' nowrap>";
		Html += txt_;
		Html += "</td></tr></table>";
		B_Obj.innerHTML = Html;

		if( bSELECT){ //-- Ajout pour SELECT sous IE
			with(F_Obj.style){
				height = B_Obj.offsetHeight;
				width  = B_Obj.offsetWidth;
				left   = B_Obj.offsetLeft;
				top    = B_Obj.offsetTop;
			}
		}
		//-- On affiche le résultat
		//ObjShowAll('Bulle', Mouse_X +Decal_X, Mouse_Y +Decal_Y, 1000);
		bCADRE= true;
		return( true);
	}
	return(false);
}
////////////////////////////
// mode Bulle Indépendant //
////////////////////////////
//-- 15.09.2006 ------------------------
// Ajout paramètre x_ et y_
//--------------------------------------



function BulleWrite( txt_, e_, x_, y_){
	if(!bISSET){
		bISSET=true;
		addEvent( document, 'mousemove', WhereMouse);

		if(e_){
			WhereMouse(e_);
		}
		else {
			var fireOnThis = document/*.getElementById('someID')*/;
			if( document.createEvent ) {
				var evObj = document.createEvent('MouseEvents');
				
				/*if(e_) evObj.initMouseEvent( 'mousemove', true, false, window, 0, e_.screenX, e_.screenY, e_.clientX, e_.clientY, false, false, true, false, 0, null );			
				else*/			
				evObj.initEvent( 'mousemove', true, false );
				fireOnThis.dispatchEvent(evObj);
			} else if( document.createEventObject ) {
				fireOnThis.fireEvent('onmousemove');
			}
		}


	}
	var B_Obj = GetObjet( 'Bulle');
	var F_Obj = GetObjet( 'FBulle');
	var Html;
	if( !bINIT) Init_Bulle();
	if( B_Obj){
		//-- Récup dimension d'affichage
		Get_DimFenetre();
		// Decalage hors de la Bulle
		Decal_X =( x_ ? x_: 15);//    Decal_X = 5 par défaut
		Decal_Y =( y_ ? y_: 15);//    Decal_Y = 5 par défaut
		//-- Ecriture de la Bulle
		//Html  = "<table border=0 cellspacing=0><tr><td bgcolor='#062a51'>";
		//Html += "<table border=0 cellspacing=0 cellpadding=0 width='100%' bgcolor='#e3ecff'>";
		//Html += "<tr><td class='Bulle' nowrap>";
		//Html += txt_;
		Html = txt_;
		//Html += "</td></tr></table></td></tr></table>";
		B_Obj.innerHTML = Html;
		//-- Ajout pour SELECT sous IE
		if( bSELECT){
			with(F_Obj.style){
				height = B_Obj.offsetHeight;
				width  = B_Obj.offsetWidth;
				left   = B_Obj.offsetLeft;
				top    = B_Obj.offsetTop;
			}
		}
		//-----------------------------------------//
		// IMPORTANT on n'affiche pas la Bulle     //
		// l'événement MouseOver va avec MouseMove //
		//-----------------------------------------//
		ObjShowAll('Bulle', Mouse_X +Decal_X, Mouse_Y +Decal_Y, 1000);
		bBULLE= true;
		return( true);
	}
	return(false);
}


//------------------
function BulleHide(){
	var B_Obj = GetObjet( 'Bulle');
	var F_Obj = GetObjet( 'FBulle');

	if( bSELECT){ //-- Ajout pour SELECT sous IE
		F_Obj.style.height = 0 +"px";
	}
	with(B_Obj){
		innerHTML        = "&nbsp;"
		style.left       = -1000 +"px";
		style.top        = -1000 +"px";
		style.zIndex     = 0;
		style.visibility = "hidden";
	}
	//-- Pose les Flags
	bCADRE = false;
	bBULLE = false;
	if(bISSET){
		bISSET=false;
		removeEvent(document, "mousemove", WhereMouse);
	}

	return(true);
}
//--------------------
function WhereMouse(e){
	var DocRef;
	var Obj  = null;
	var bRECT= true;
	//-- On traque les hybrides
	if( e && e.target){
		Mouse_X = e.pageX;
		Mouse_Y = e.pageY;
		Client_Y = e.clientY;
		Obj     = e.target;
		//-- Spécifique FireFox
		if( Obj.boxObject){
			with( Obj){
				//-- La Zone de prise en compte
				ZObjet.InitRECT( boxObject.x, boxObject.y, boxObject.width, boxObject.height);
			}
			//-- Barre de défilement et autre sous FireFox
			Obj = e.originalTarget;
			if( Obj)
			if( Obj.prefix =="xul"){
				BulleHide();
				return( true);
			}
			//-- Test pour SELECT sous FireFox
			bRECT = ZObjet.PtInRECT( Mouse_X, Mouse_Y);
		}
	}//-- Endif NETSCAPE
	else{
		
		var e = window.event||window.Event;
		if( document.documentElement && document.documentElement.clientWidth)
		DocRef = document.documentElement;
		else
		DocRef = document.body;

		Client_Y = e.clientY;
		Mouse_X = e.clientX +DocRef.scrollLeft;
		Mouse_Y = e.clientY +DocRef.scrollTop;
	}
	
	if(window.Event && document.captureEvents) document.captureEvents(Event.MOUSEMOVE);

	if( bBULLE)
	if( bRECT)
	ObjShowAll('Bulle', Mouse_X +Decal_X, Mouse_Y +Decal_Y, 1000);

	if( bCADRE)// on ne move pas on test juste si dans Rect
	if( !ZBulle.PtInRECT( Mouse_X, Mouse_Y))
	BulleHide();

	return( true);
}





