var infobulle_chemin = cheminRelatif('finfobulle') ;
var infobulle_inited = false ;

var infoBulle = new InfoBulle() ;

var largeurDocument ;
var hauteurDocument ;

var x ;
var y ;

var xPos ;
var yPos ;

if(navigator.appName.substring(0,3) == "Net") 
	document.captureEvents(Event.MOUSEMOVE) ;

document.onmousemove = deplacerBulle ; 

function InfoBulle()
{
	this.titre = "" ;
	this.icone = "" ;
	this.contenu = "" ; 
	this.couleurTitre = "" ;
}

function deplacerBulle(e)
{		
	x = (navigator.appName.substring(0,3) == "Net") ? e.pageX-document.body.scrollLeft : event.x ;
	y = (navigator.appName.substring(0,3) == "Net") ? e.pageY-document.body.scrollTop : event.y ;
	
	xPos = (navigator.appName.substring(0,3) == "Net") ? e.pageX : event.x+document.body.scrollLeft ;
	yPos = (navigator.appName.substring(0,3) == "Net") ? e.pageY : event.y+document.body.scrollTop ;

	var bulle = document.getElementById('infoBulle') ;

	if(bulle != null)
	{	
		// Si l'info bulle depasse de la largeur du document ö droite on l'affiche ö gauche
		if(x + bulle.offsetWidth >= largeurDocument - 25)
			bulle.style.left = xPos - (bulle.offsetWidth + 15) + 'px' ;
		else
			bulle.style.left = xPos + 15 + 'px' ;
			
		// Si l'info bulle depasse de la hauteur du doc en bas, on l'affiche en haut
		if(y + bulle.offsetHeight >= hauteurDocument - 25)
			bulle.style.top = yPos - (bulle.offsetHeight + 15) + 'px' ;
		else
			bulle.style.top = yPos + 15 + 'px' ;
	}
}

function setTitreInfoBulle(titre,couleur)
{
	infoBulle.titre = titre ;

	if(couleur != null)
	{
		infoBulle.couleurTitre = couleur ;
	}
}

function setMessageInfoBulle(msg)
{
	infoBulle.contenu = msg ;
}

function setIconeInfoBulle(icone)
{
	if(icone != null && icone != '')
	{
		if(icone == 'warning')
			infoBulle.icone = infobulle_chemin+'iconeWarning.gif' ;
	}
	else
		infoBulle.icone = '' ;
}

function afficherInfoBulle(objet,titre,contenu,icone)
{
	if(!infobulle_inited)
		initialiserInfoBulle() ;

	objet.onmouseout = cacherBulle ;
	
	if(titre != null)
		infoBulle.titre = titre ;
		
	if(contenu != null)
		infoBulle.contenu = contenu ;
		
	if(icone != null && icone != '')
		infoBulle.icone = icone ;
	
	var bulle = document.getElementById('infoBulle') ;

	document.getElementById('titreInfoBulle').innerHTML 	= infoBulle.titre ;
	document.getElementById('contenuInfoBulle').innerHTML 	= infoBulle.contenu ;

	if(infoBulle.icone != null && infoBulle.icone != '')
	{
		document.getElementById('iconeInfoBulle').src = infoBulle.icone ; 
		document.getElementById('iconeInfoBulle').style.display = 'block' ; 
	}
	else
	{
		document.getElementById('iconeInfoBulle').style.display = 'none' ; 		
	}
	
	if (document.body)
	{
		largeurDocument = (document.body.clientWidth);
		hauteurDocument = (document.body.clientHeight);
	}
	else
	{
		largeurDocument = (window.innerWidth);
		hauteurDocument = (window.innerHeight);
	}

	if(bulle != null)
	{	
		// Si la couleur du titre a été changée
		if(infoBulle.couleurTitre != null && infoBulle.couleurTitre != '')
		{
			document.getElementById('titreInfoBulle').style.color = infoBulle.couleurTitre ;
		}
		
		// Si le contenu d?passe de la bulle, on l'aggrandi
		var largeurBulle = eval(bulle.style.width.replace(/(px)|%|em/,'')) ;

		if(largeurBulle < document.getElementById('contenuInfoBulle').offsetWidth)
			bulle.style.width = document.getElementById('contenuInfoBulle').offsetWidth + 'px' ; 
			
		// Si l'info bulle d?passe de la largeur du document ö droite on l'affiche ö gauche
		if(x + bulle.offsetWidth >= largeurDocument - 20)
			bulle.style.left = x - (bulle.offsetWidth + 15) + 'px' ;
		else
			bulle.style.left = x + 15 + 'px' ;
			
		// Si l'info bulle d?passe de la hauteur du doc en bas, on l'affiche en haut
		if(y + bulle.offsetHeight >= hauteurDocument)
			bulle.style.top = y - (bulle.offsetHeight + 15) + 'px' ;
		else
			bulle.style.top = y + 15 + 'px' ;

		bulle.style.visibility = "visible" ;

		bulle.opacite = 10 ;

		changerOpaciteBulle() ;
	}
}

function cacherBulle()
{
	if(document.getElementById('infoBulle') != null)
	{
		document.getElementById('infoBulle').style.width = '250px' ;
		document.getElementById('infoBulle').style.visibility = "hidden" ;
	}
}

function changerOpaciteBulle()
{
	var bulle = document.getElementById('infoBulle') ;
	
	if(bulle != null)
	{
		if(bulle.opacite < 75)
		{
			bulle.opacite = bulle.opacite + 5 ;
			
			bulle.style.opacity = bulle.opacite /100;
			bulle.style.filter = "alpha(opacity="+bulle.opacite+")" ;
			
			setTimeout("changerOpaciteBulle()", 20);
		}
	}
}

function initialiserInfoBulle()
{	
	if(!infobulle_inited)
	{
		var infoBulle ;
		var titreInfoBulle ;
		var iconeInfoBulle ;
		var contenuInfoBulle ;
		var html ;

		var navigateur = getNomNavigateur() ;
		
		// On lie la feuille de style
		var lienCss = document.createElement('link');
		lienCss.rel = 'stylesheet' ;
		lienCss.type = 'text/css' ;
		lienCss.href = infobulle_chemin +'infobulle.css' ;

		if(navigateur != 'safari')
			document.getElementsByTagName('head')[0].appendChild(lienCss) ;

		/*html = '<div id="infoBulle">' ;
		html += '<div id="titreInfoBulle"></div>' ;
		html += '<img id="iconeInfoBulle" />' ;
		html += '<span id="contenuInfoBulle"></span>' ;
		html += '</div>' ;
		
		document.body.innerHTML += html ;*/
		
		infoBulle = document.createElement('div') ;
		infoBulle.id = 'infoBulle' ;

		document.body.appendChild(infoBulle) ;

		html =	'<div id="titreInfoBulle"></div>' ;
		html += '<img id="iconeInfoBulle" src="" alt="" />' ;
		html += '<div id="contenuInfoBulle"></div>' ;

		document.getElementById('infoBulle').innerHTML = html ;

		infobulle_inited = true ;
	}
}

function cheminRelatif(id)
{
	var i = 0 ;
	var debut = 0 ;
	var relatif = '' ;
	
	// On recupere le chemin de la librairie
	var cheminLib = document.getElementById(id).src ;
	
	// On recupere le chemin du fichier l'appelant
	var chemin = document.location.href ;

	// On commence par regarder si cheminLib est en relatif ou absolu (pour ie relatif ....)
	if(cheminLib.match(/(http)|(https)/)) // Absolu
	{
		// On calcule le nombre de "niveaux" pour chaque chemin
		var niveauxCheminLib = cheminLib.split('/') ;
		var niveauxChemin = chemin.split('/') ;
		
		var diff = nbNiveauxChemin - nbNiveauxCheminLib ;
		
		// Tant que les chemins sont identiques, on avance
		while(niveauxChemin[i] == niveauxCheminLib[i])
		{
			debut ++ ;
			i++;
		}
		
		// On ne recupere que les enregistrements diff?rents dans les tableaux de niveau
		niveauxCheminLib = niveauxCheminLib.slice(debut,niveauxCheminLib.length) ;
		niveauxChemin = niveauxChemin.slice(debut,niveauxChemin.length) ;
		
		var nbNiveauxCheminLib = niveauxCheminLib.length - 1 ;
		var nbNiveauxChemin = niveauxChemin.length - 1 ;
		
		// Si les 2 fichiers sont au m?me niveau, pas besoin d'aller plus loin, on retourne ./
		if(nbNiveauxCheminLib == 0 && nbNiveauxChemin == 0)
			return './' ;
		
		// Si on a besoin de remonter dans l'arborescence 
		i = 0 ;
		while(i < nbNiveauxChemin)
		{
			relatif += "../" ;
			i++ ;
		}

		// Si on a pas remonté
		if(relatif.length == 0)
			relatif = './' ;
		
		// Si on a besoin de redescendre dans l'arborscence
		i = 0 ;
		while(i < nbNiveauxCheminLib)
		{
			relatif += niveauxCheminLib[i]+"/" ;
			i++ ;
		}
	}
	else
	{
		// On calcule le nombre de "niveaux" pour chaque chemin
		var niveauxCheminLib = cheminLib.split('/') ;
		var nbNiveauxCheminLib = niveauxCheminLib.length - 1 ;

		relatif = niveauxCheminLib.slice(debut,niveauxCheminLib.length - 1).join('/') + '/' ;
	}
	return relatif ;
}

function getNomNavigateur()
{
	var detect = navigator.userAgent.toLowerCase();

	if (detect.indexOf('konqueror') + 1)
		navigateur = "konqueror" ;
	else if (detect.indexOf('safari') + 1)
		navigateur = "safari" ;
	else if (detect.indexOf('omniweb') + 1)
		navigateur = "omniweb" ;
	else if (detect.indexOf('opera') + 1) 
		navigateur = "opera"  ;
	else if (detect.indexOf('webtv') + 1) 
		navigateur = "webtv" ;
	else if (detect.indexOf('icab') + 1) 
		navigateur = "icab" ;
	else if (detect.indexOf('msie') + 1)
		navigateur = "ie" ;
	else if (!detect.indexOf('compatible') + 1)
		navigateur = "netscape"
	else
		navigateur = "inconnu";

	return navigateur ;
}
		