/** 
 * Tool Tips 
 * par Jay Salvat - http://blog.jaysalvat.com/ 
 * Article:
 * http://blog.jaysalvat.com/articles/creez-votre-propre-plugin-jquery-infobulles.php
 * Modifie et ameliore par Loic pour tenir compte du bas de page 
 * http://www.alittlemarket.com 16/02/2009 
 */ 
  
(function($) { 
$.fn.toolTips = function(settings) {     
    options =  { 
		click: true,
        offsetX:    10, // Espace X par rapport a la souris
        offsetY:    -5, // Espace Y 
        delay:      500,
        baseLine:   'top' // ? bottom 
    }; 
    var options = $.extend(options, settings); 
    
    return this.each(function(){ 
        var $$ = $(this); 
        var aTitle   = $$.attr('title') || ''; 

		if (typeof($$.attr('imgatt')) != "undefined") // permet de changer la taille du zoom, il suffit d'ajouter imgatt="middle" par exemple
			var ImgAtt   = "_" + $$.attr('imgatt'); 
		else
			var ImgAtt = '';

        var aHref    = $$.attr('src')  || '';  
        var aToolTip = $("<div></div>");
        var aCaption = '';
        var aImage;
        var timer;

        var offsetX = 1; // Espace X par rapport a la sourie
        var offsetY = 1; // Espace Y 
        var imgX = 1; // Espace X par rapport a la sourie
        var imgY = 1; // Espace Y 
		var NameImg = ''; // Espace Y 

        // Quand le curseur survole un element 
        $$.mouseover(function(e) {       

            // Supprime le Title pour eviter le tooltip par defaut du navigateur 
            $$.attr('title', '');    
             
            // Si un Title est present, on fait un block pour la legende 
            if (aTitle) { 
                aCaption = '<div class="toolTip-caption"><span>'+ aTitle +'</span></div>'; 
            }
			
			// On ajoute l'image zoom.
			if (aHref.match(/\.(png|jpg|jpeg|gif)$/)) 
			{    
				NameImg = aHref.substr(0, aHref.length-10) + ImgAtt + ".jpg";  
                aImage = $('<img id="imgJ" src="'+ NameImg +'" />'); //width="' + img.width + '" 
                aToolTip = $('<div class="toolTip-picture">'+ aCaption +'</div>'); 
            } 

            // Le toolTip precedemment cree est ajoute au Body et masque
            aToolTip.appendTo("body").hide().css({ position:'absolute', top:0, left:0 });

            // On attend le chargement de l'image eventuellement contenue
            // dans le toolTip pour ajuster le placement selon la hauteur finale
            if ((aImage)) {
                aImage.load(function() {
					
					// On recupere la hauteur de la photo, on le fait ici car l'image est charge grace au load precedent.
 					img = new Image();
					img.src = NameImg;
					imgX = img.width;
					imgY = img.height; 

					//alert(e.pageY + ' - scrollTop' + $(document).scrollTop() + ' imgY ' + imgY + ' > ' + $(window).height());
			
					// Positionnement de la toolbox en fonction du scroll de la page, de la taille de la photo, et du possionnement de la sourie.
					// Cas bas de page, on met la toolbox au dessus de la souris
					if (e.pageY - $(document).scrollTop() + imgY > $(window).height()) 
						offsetY = - (options.offsetY + imgY);  
					else
						offsetY = options.offsetY;  // Sinon par defaut en bas.

					// Cas droite de page, on met la tootlbox a gauche de la souris
					if (e.pageX - $(document).scrollLeft() + imgX > $(window).width()) 
						offsetX = - (options.offsetX + imgX);  
					else
						offsetX = options.offsetX; // Sinon par defaut a droite
  
                    aImage.prependTo(aToolTip); // On insere l'image
  
                    // Place le toolTip aux coordonnees voulues en absolute
					if (aToolTip.css('left') != 'auto') // pb avec IE 6 qui fou auto au lieu de la bonne valeur au 2 eme passage !?
					{
						aToolTip.css({
							left: parseInt(aToolTip.css('left')) + offsetX + "px",
							top:  parseInt(aToolTip.css('top'))  + offsetY + "px"                            
						});
					}
                });
            }

            // On deplace le toolTip en meme temps que la souris 
            $$.mousemove(function(e) { 
                aToolTip.css({
                    left: e.pageX + offsetX + "px",
                    top:  e.pageY + offsetY + "px"                            
                });
            }); 
            
            // On attend quelques fractions de seconde avant d'afficher le toolTip
            timer = setTimeout( function() { aToolTip.show() }, options.delay);
        }) 
            
        // Quand le curseur ne survole plus un element 
        $$.mouseout(function(e) { 
            clearTimeout(timer);
            // On remet le Title en place 
            $$.attr("title", aTitle);   
            // On supprime le suivi de deplacement 
            $$.unbind("mousemove");      
            // On supprime le toolTip 
            aToolTip.remove(); 
        });
		
		// Bloque eventuellement le click sur le lien
		$$.click(function() {
			return options.click;
		});     
    }); 
}; 
})(jQuery); 