/**
* SCRIPT INFO BULLE 
* 
* 
* @author   mabaakouk@alcyoins.fr
* @version  0.1 
* @since    13/05/2004
* @package  alcyonis
*
* utilisation du script :
*	<balise_html onmouseover="show_info_bulle(this,'id_du_div _contenant_l_info_bulle')">....</balise_html>
*
* TODO :
*	finir position auto
*	ajouter decalage_vertical
*	ajouter position_vertical="centrer";
*

**/
// reclage du script

var repositionner_si_depassement_zone_affichage;
var position_horizontal;
var decalage_horizontal;
var decalage_vertical;
var temps_affichage;
var hauteur_maximun;
var donnees_info_bulle_en_cours;

/* DEBUT DU SCRIPT */
var id_info_bulle_en_cours="";
var timeout_info_bulle_en_cours;
var timeout_show_info_bulle_en_cours;

//variable a true si le curseur de souris et sur l'info bulle
var popup_open=false;

//fonction qui cache l'info bulle en cours lors que l'on clic n'importe ou sauf dans l'info bulle
function infobulle_body_click(){

	if (!popup_open){
		window.clearTimeout(timeout_info_bulle_en_cours);
		real_hide_info_bulle();
	}
	popup_open=false;

}
// Ferme l'info bulle apres 'temps_affichage' milisecond 
function hide_info_bulle(){
	timeout_info_bulle_en_cours=window.setTimeout('real_hide_info_bulle()',temps_affichage);
}

// Ferme l'info bulle immédiatement
function real_hide_info_bulle(){
	if (id_info_bulle_en_cours!="")
		document.getElementById(id_info_bulle_en_cours).style.display='none';
	id_info_bulle_en_cours="";
	window.clearTimeout(timeout_info_bulle_en_cours);
}
//Affiche l'info bulle aprés 600 millisecond
function show_info_bulle(element_actif,id_info_bulle,config_info_bulle){
	donnees_info_bulle_en_cours=Array();
	donnees_info_bulle_en_cours['element_actif']=element_actif;
	donnees_info_bulle_en_cours['id_info_bulle']=id_info_bulle;
	donnees_info_bulle_en_cours['config_info_bulle']=config_info_bulle;

	// on efface la temporisation d'ouverture de l'info bulle précédente au cas ou elle ne c pas pas encore ouverte
	if (timeout_show_info_bulle_en_cours){
		window.clearTimeout(timeout_show_info_bulle_en_cours);
	}
	//***

	//On temporise l'ouverture de l'info bulle
	timeout_show_info_bulle_en_cours=window.setTimeout("show_info_bulle_real(donnees_info_bulle_en_cours)",00);	

	// on efface la temporisation d'ouverture de l'info bulle en cours lors que l'on ne reste pas sur le lien
	if (document.addEventListener) {
		element_actif.addEventListener("mouseout", function(){window.clearTimeout(timeout_show_info_bulle_en_cours);}, true);
	} else {/* pour ie */
		element_actif.onmouseout = function(){window.clearTimeout(timeout_show_info_bulle_en_cours);} ;
	}
}
//Affiche imédiantement l'infobulle et cache la précédent
//function show_info_bulle_real(element_actif,id_info_bulle,config_info_bulle){
function show_info_bulle_real(donnees_info_bulle_en_cours){
	var element_actif=donnees_info_bulle_en_cours['element_actif'];
	var id_info_bulle=donnees_info_bulle_en_cours['id_info_bulle'];
	var config_info_bulle=donnees_info_bulle_en_cours['config_info_bulle'];

	// on efface la temporisation d'ouverture de l'info bulle parcequ'on va l'ouvrir
	window.clearTimeout(timeout_show_info_bulle_en_cours);

	if (!config_info_bulle){
		repositionner_si_depassement_zone_affichage=false;
		position_horizontal="gauche";//gauche, droite, centrer
		decalage_horizontal=0;
		decalage_vertical=0;
		temps_affichage=1000; //milisecond
		hauteur_maximun=false;
	} else {
		repositionner_si_depassement_zone_affichage=config_info_bulle['repositionner_si_depassement_zone_affichage'];
		position_horizontal=config_info_bulle['position_horizontal'];//gauche, droite, centrer
		decalage_horizontal=config_info_bulle['decalage_horizontal'];
		decalage_vertical=config_info_bulle['decalage_vertical'];
		temps_affichage=config_info_bulle['temps_affichage']; //milisecond
		hauteur_maximun=config_info_bulle['hauteur_maximun'];
	}
	// on cache l'info bulle précédente et efface la temporisation pour la fermeture automatique
	if (timeout_info_bulle_en_cours){
		window.clearTimeout(timeout_info_bulle_en_cours);
		real_hide_info_bulle();
	}


	id_info_bulle_en_cours=id_info_bulle;
	var info_bulle_old=document.getElementById(id_info_bulle);

	var info_bulle = info_bulle_old.cloneNode(true);
	info_bulle_old.parentNode.removeChild(info_bulle_old)
	//info_bulle_old.removeAttribute("id");
	document.getElementsByTagName('body')[0].insertBefore(info_bulle,document.getElementsByTagName('body')[0].firstChild);

	//Hauteur et largeur de la info_bulle
	info_bulle.style.display="block"
	var info_bulle_hauteur=info_bulle.offsetHeight;
	var info_bulle_largeur=info_bulle.offsetWidth;	

	//Hauteur et largeur de l'element actif
	var element_actif_hauteur=element_actif.offsetHeight;
	var element_actif_largeur=element_actif.offsetWidth;

	// Calcul du positionnement du haut et la gauche de la info_bulle (info_bulle a 20px a gauche de la zone survoler)
	var topNode=element_actif;
	var topCoord=0;
	var leftCoord=0;	
	while(topNode){
		if ( !isNaN(topNode.offsetTop) )
			topCoord+=topNode.offsetTop;
		if ( !isNaN(topNode.offsetLeft) )			
			leftCoord+=topNode.offsetLeft;
		topNode=topNode.offsetParent;
	}
	var info_bulle_top=topCoord;
	info_bulle_top=info_bulle_top+decalage_vertical+element_actif_hauteur;

	var info_bulle_left=0
	if (position_horizontal=="gauche")
		info_bulle_left=leftCoord-info_bulle_largeur-decalage_horizontal;
	if (position_horizontal=="droite")
		info_bulle_left=leftCoord+element_actif_largeur+decalage_horizontal;
	if (position_horizontal=="centrer")
		info_bulle_left=leftCoord+(element_actif_largeur/2)-(info_bulle_largeur/2)+decalage_horizontal;


	
	//Position de la scrollbar
	var fenetre_top;
	if (document.getElementsByTagName("html")[0].scrollTop)
		fenetre_top=document.getElementsByTagName("html")[0].scrollTop;
	else /* ie 5 */
		fenetre_top=document.body.scrollTop;

	var fenetre_left;
	if (document.getElementsByTagName("html")[0].scrollLeft)
		fenetre_left=document.getElementsByTagName("html")[0].scrollLeft;
	else /* ie 5 */
		fenetre_left=document.body.scrollLeft;

	//Calcul hauteur et largeur de la fenetre du navigateur
	var fenetre_hauteur;
	if (document.all)
		if (document.getElementsByTagName("html")[0].clientHeight)/* ie 6 */
			fenetre_hauteur=document.getElementsByTagName("html")[0].clientHeight;
		else /* ie 5 */
			fenetre_hauteur=document.body.clientHeight;
	else
		fenetre_hauteur=window.innerHeight;
	var fenetre_largeur;
	if (document.all)
		if (document.getElementsByTagName("html")[0].clientWidth)/* ie 6 */
			fenetre_largeur=document.getElementsByTagName("html")[0].clientWidth;
		else /* ie 5 */
			fenetre_largeur=document.body.clientWidth;
	else
		fenetre_largeur=window.innerWidth;

	var offset_scroll_bar_top=(document.all?0:15);
	var offset_scroll_bar_left=(document.all?0:15);
	//alert(fenetre_hauteur+" - "+hauteur_maximun);
	if (hauteur_maximun && fenetre_hauteur>hauteur_maximun-fenetre_top){
		//alert(fenetre_hauteur+" - "+hauteur_maximun);
		fenetre_hauteur=hauteur_maximun-fenetre_top;
	}
	//RePositionnement de la info_bulle si elle depasse de la zone visible de la fenetre du navigateur
	if (repositionner_si_depassement_zone_affichage){
		if (fenetre_top>info_bulle_top) {
			info_bulle.style.top=fenetre_top+"px";
		} else {
			//alert(fenetre_top+"+"+fenetre_hauteur+"<"+info_bulle_top+"+"+info_bulle_hauteur);
			if (fenetre_top+fenetre_hauteur<info_bulle_top+info_bulle_hauteur) {
				info_bulle.style.top=fenetre_hauteur-info_bulle_hauteur+fenetre_top-offset_scroll_bar_left+"px";
				//alert(info_bulle.style.top);
			} else {		
				info_bulle.style.top=info_bulle_top+"px";
			}
		}

		if (fenetre_left>info_bulle_left) {
			info_bulle.style.left=fenetre_left+"px";
		} else {
			//alert(fenetre_top+"+"+fenetre_hauteur+"<"+info_bulle_top+"+"+info_bulle_hauteur);
			if (fenetre_largeur<info_bulle_left+info_bulle_largeur) {
				info_bulle.style.left=fenetre_largeur-info_bulle_largeur+fenetre_left-offset_scroll_bar_top+"px";
			} else {		
				info_bulle.style.left=info_bulle_left+"px";
			}
		}
	} else {
		info_bulle.style.top=info_bulle_top+"px";
		info_bulle.style.left=info_bulle_left+"px";
	}

	//*********
	
	// Ajout des mouseover et mouseout a la info_bulle
	if (document.addEventListener) {
		element_actif.addEventListener("mouseout", hide_info_bulle, true);
		info_bulle.addEventListener("mouseout", hide_info_bulle, true);
		info_bulle.addEventListener("mouseover", function(){clearTimeout(timeout_info_bulle_en_cours);}, true);
	} else {/* pour ie */
		element_actif.onmouseout = hide_info_bulle;
		info_bulle.onmouseout = hide_info_bulle;
		info_bulle.onmouseover = function(){clearTimeout(timeout_info_bulle_en_cours);} ;
	}
}