﻿$(document).ready(initInfobulles);


function initInfobulles(e, $selecteurDepart)
{

	// Enlever les eventuels DIV infobulles qui auraient pu etre deja créés (AJAX)
	$("#infoBulle").remove();

	var strSelecteurArray = ".BulleInfo";
		
    // Libellés pour la bulle d'aide, les textes traduits sont définies dans l'entete de la page.
    if (!$.dpTextBulle) {

        $.dpTextBulle = {
            bulleTextFermer: '[x] Fermer'
        }
    }

    // Création d'un tableau contenant l'ensemble des objets ayant un class="infobulle"
    var arrayBulleInfo

    if (typeof ($selecteurDepart) != "undefined" && $selecteurDepart != null)
        arrayBulleInfo = $selecteurDepart.find(strSelecteurArray);
    else
        arrayBulleInfo = $(strSelecteurArray);
        
    // Création du div de la bulle
    $("body").append("<div class=\"infoBulle\" id=\"infoBulle\" style=\"display:none\"><div class=\"fermerBulle\"><span id='tme'>" + $.dpTextBulle.bulleTextFermer + "</span></div><p></p></div>");

    var laBulle = $("#infoBulle");
    
    // Corrige le problème des select qui s'affiche a travers les divs dans ie6
    laBulle.bgiframe();

    // Fonction appliquée sur chacun des objets contenu dans le tableau 'arrayBulleInfo' 
    jQuery.each(arrayBulleInfo,
	function() {

	    // Modification au fonctionnement (2009-01-15)
	    // - Transferer le contenu du title du P dans le title d'un SPAN cache
	    // - Eliminer le title du P pour eviter le mouseover
	    // - Utiliser le title du SPAN comme source pour l'affichage

	    // On récupère le ID du controle 
	    var controlID = $(this).attr("id");    
	    
	    // Recuperer le texte
	    var textePourInfobulle = $(this).attr("title");  // 2009-01-15   
	    
	    // Enlever l'attribut title
	     $(this).removeAttr("title"); // 2009-01-15 
	    
	    // Pour aider au dimensionnement du wrapper: si on a deja la dimension du parent, l'appliquer aussi au wrapper
	    var enonceWidthWrapper = "";

	    //if ($(this).parent().width() > 0)
		//    enonceWidthWrapper = ";width:" + $(this).parent().width() + "px;";
		  	
		
	    // On cherche un div parent pour faciliter le positionement du bouton
	    $('#' + controlID).wrap("<div style=\"position:relative" + enonceWidthWrapper  + "\" class=\"controlWrapper\" id=\"controlWrapper" + controlID + "\"></div>");
	    var parentDiv = $("#controlWrapper" + controlID);

	    // On ajoute le div du bouton avant la fermeture du div controlWrapper
	    // et creer le span cache (2009-01-15)
	    parentDiv.append("<div class=\"btnInfoBulle\"><span title=\"" + textePourInfobulle + "\"></span></div>");
	    
	});

    // Attache une fonction a l'évennement Clic du bouton de l'infobulle
	$(".btnInfoBulle").click(function(e)
	{

	    // Récupère le premier objet précédent ayant un class="BulleInfo"
	    var monObj = $(this).prev(".BulleInfo");
	    var monSelecID = monObj.attr("id");
	    var correctionPosition = 0;

	    // Dans le calendrier, la bulle doit apparaitre plus a droite
	    if ($(this).parent().parent().attr("id") == "listeDrapeaux")
	        correctionPosition = -208;

	    // Récupère le texte dans l'attibut title du SPAN interne (2009-01-15)
	    var infoText = $(this).find("span").attr("title");

	    // Insère le texte dans le "p" du "div" de l'infobulle   
	    $(".infoBulle p").html(infoText);

	    // Calcul de la position de la bulle - tenir compte des cas extremes ou la bulle sortirait du viewport 
	    // verticalement ou horizontalement 
	    var posIcon = $(this).offset(); // position de l'icone [?]
	    var scrollTop = $(window).scrollTop();
	    var iconHeight = $(this).outerHeight();
	    var docHeight = $(window).height();
	    var docWidth = $(window).width();
	    var spaceBottom = docHeight + scrollTop - posIcon.top;
	    var offset = 15;
	    var topPos;
	    var leftPos;
	    

	    if (laBulle.outerHeight({ margin: true }) + offset <= spaceBottom)
	        topPos = posIcon.top;
	    else
	        topPos = posIcon.top - laBulle.height();

	   
	    if (docWidth - posIcon.left < (laBulle.outerWidth({ margin: true }) + offset))
			correctionPosition = correctionPosition - 208 - offset;
	        
	    leftPos = posIcon.left + correctionPosition;
	    
	    // Applique le style 'left' et 'top' sur la bulle et la rend visible	    
	    laBulle.css({
	        left: (posIcon.left + correctionPosition),
	        top: topPos,
	        display: "block"
	    });

	});

    // Attache une fonction a l'évennement Clic du bouton Fermer
	$(".fermerBulle").click(function()
	{
	    laBulle.css({
	        display: "none"
	    });

	});
	
	
	return false;
}
