/**  
 * Tool Tips  
 * par Kevin Levain 
 */  
(function($) {  
$.fn.infobulles = function(settings) {      
    options =  {  
        offsetX:  10,    // positionnement X par rapport au pointeur 
        offsetY:  -5,    // positionnement Y par rapport au pointeur 
        baseLine: 'top', // alignement de par rapport au pointeur 
        delay:    500,   // délai avant l'ouverture de l'infobulle 
        click:    true   // autorise ou non le clic sur le lien 
    };  
    var options = $.extend(options, settings);  
      
    return this.each(function(){  
        var aJqObj = $(this);  
        var aTitle   = aJqObj.attr('title') || '';  
        var aHref    = aJqObj.attr('href')  || '';  
        var aRel     = aJqObj.attr('rel')   || '';  
        var aInfoBulle = $("<div></div>"); 
        var aCaption = ''; 
        var aImage; 
        var timer; 
        var offsetX = 1; 
        var offsetY = 1; 
 
        // Quand le curseur survole un élément  
        aJqObj.mouseover(function(e) {            
            // Supprime le Title pour éviter l'infoBulle par défaut du navigateur  
            aJqObj.attr('title', '');
            // Si un attribut Rel est présent dans le lien et qu'il mène à une image  
            // on passe en mode Vignette
            if (aRel.match(/\.(png|jpg|jpeg|gif)$/)) {  
                aImage = $('<img src="'+ aRel +'" />'); 
                aInfoBulle = $('<div class="infoBulle-vignette">'+ aCaption +'</div>');
				
            // Si un Title est présent, on fait un block pour la légende
            if (aTitle != '') {
                aCaption = '<div class="toolTip-caption"><span>'+ aTitle +'</span></div>';
            }
			
            // Si le lien est un lien vers une image  
            // on passe en mode Prévisualisation  
            } else if (aHref.match(/\.(png|jpg|jpeg|gif)$/)) {  
                aImage = $('<img src="'+ aHref +'" />'); 
                aInfoBulle = $('<div class="infoBulle-previsualisation">'+ aCaption +'</div>');  
                 
            // Sinon on pas en mode Texte 
            } else if (aTitle != '') {  
                aInfoBulle = $("<div class='infoBulle-texte'><span>"+ aTitle +"</span></div>");      
            }  
 
            // Le infoBulle précédemment créé est ajouté au Body et masqué 
            aInfoBulle.appendTo("body").hide().css({ position:'absolute', top:0, left:0});
 
            // On attend le chargement de l'image éventuellement contenue 
            // dans le infoBulle pour ajuster le placement selon la hauteur finale 
            if ((aImage)) { 
                aImage.load(function() { 
                    aImage.prependTo(aInfoBulle); 
                     
                    // Quelques ajustements selon les préférences utilisateurs 
                    offsetX = options.offsetX; 
                    if (options.baseLine == 'bottom') { 
                        offsetY = options.offsetY - aInfoBulle.height(); 
                    } else if (options.baseLine == 'middle') { 
                        offsetY = options.offsetY - (aInfoBulle.height() / 2); 
                    } 
 
                    // Place le infoBulle aux coordonnées voulues 
                    aInfoBulle.css({ 
                        left: parseInt(aInfoBulle.css('left')) + offsetX + "px", 
                        top:  parseInt(aInfoBulle.css('top'))  + offsetY + "px"                             
                    }); 
                }); 
            } 
 
            // On déplace le infoBulle en même temps que la souris  
            aJqObj.mousemove(function(e) {  
                aInfoBulle.css({ 
                    left: e.pageX + offsetX + "px", 
                    top:  e.pageY + offsetY + "px"                             
                }); 
            });  
             
            // On attend quelques fractions de seconde avant d'afficher le infoBulle 
            timer = setTimeout( function() { aInfoBulle.show() }, options.delay); 
        })  
             
        // Quand le curseur ne survole plus un élément  
        aJqObj.mouseout(function(e) {
            clearTimeout(timer); 
            // On remet le Title en place  
            aJqObj.attr("title", aTitle);    
            // On supprime le suivi de déplacement  
            aJqObj.unbind("mousemove");       
            // On supprime le infoBulle  
            aInfoBulle.remove();  
        });  
     
        // Bloque éventuellement le clic sur le lien 
        aJqObj.click(function() {
           // On remet le Title en place  
           aJqObj.attr("title", aTitle);
           return options.click; 
        });         
    });  
};  
})(jQuery); 
