/**
 * Tooltip plugin
 *
 * @name $.cooltip
 * @cat Plugins/Cookie
 * @author Olivier Farlotti/olivierfarlotti@oric-ak.fr
*/

/**
*@desc Display a tooltip based on html content according options set
*
*@example $('a').cooltip({sep:'|',attr:'title',id:'tlp',tag : 'span'});
*
*@params String attr : attribute from where tooltip content is build
*@params String sep : separator used to split string value from tag attribute "attr"
*@params String id : id of tooltip container && suffixe of inner tag class
*@params String tag : tag used to separate tooltip contents
*/

jQuery.fn.cooltip = function(opts)
{
	if($(this).length != 0)
	{
	var _options = opts || {};
	var sep = _options.sep || '|'; //separateur de données
	var attr = _options.attr || 'title'; //attribut dont on utilise le contenu
	var tlp_id = _options.id || 'tlp'; //id & class utilisé par le tooltip
	var tag = _options.tag || 'span'; //tag injecté dans le tooltip pour séparer les données

	//div tempon pour l'initialisation du contenu de chaque tooltip
	var tlp_tmp = document.createElement('div');

	var handler = this;


	//init du conteneur du tooltip
	var tlp = document.createElement('div');
	$(tlp).attr({id:tlp_id});
	$(tlp).css({left:'-2000px',top:0,position:'absolute',zIndex:1000});
	$('body').append(tlp);


	var getHookData = function(o)
	{
			var chaine = o.attr(attr);
			var t_chaine = chaine.split(sep);
			var inner_tooltip = '';
				
			//construit le contenu du tooltip à partir
			//de la valeur de l'attribut "attr"
			$.each(t_chaine,
				function(i,str)
				{
					var tmp_tag = document.createElement(tag);
					$(tmp_tag).addClass(tlp_id+i).html(str);
					$(tmp_tag).appendTo(tlp_tmp);
				}
			);
			//set le contenu du tooltip via le data de l'objet DOM
			o.data('tlp_content',$(tlp_tmp).html());

			$(tlp_tmp).html('');
			
			if(attr == 'title')
			{
				o.removeAttr('title');
			}
	}
	
	
	//rempli le tooltip avec le contenu de l'objet courant
	var setTlpContent = function(o)
	{
		$(tlp).html(o.data('tlp_content'));
	}
	
	
	var setMouseOver = function (o)
	{
			var o = o;
			//redéfini le comportement mouseover
			$(o).one(
				'mouseover',	
				function(e)
				{
					setTlpContent($(this));
					setMouseOut($(this));
				}
			);
	}
	
	var setMouseOut = function (o)
	{
		var o = o;
		//vide le tooltip et le repositionne en dehors de la fenêtre
		$(o).one(
			'mouseout',	
			function(e)
			{
				$(tlp).css({left:'-2000px',top:0});
				setMouseOver($(this));
			}
		);
	}
	
	var setMouseMove = function(o)
	{
		//positionne le tooltip par rapport à la souris
		$(o).mousemove(
			function(e)
			{
				$(tlp).css({left:e.pageX+5,top:e.pageY});
			}
		);
	}
	
	
	
	//INIT
	$(this).each(
		function()
		{
			getHookData($(this));
			
			setMouseOver($(this));
			setMouseOut($(this));
			setMouseMove($(this));
		
			$(this).focus(
			function()
			{
					$(tlp).css({left:'-2000px',top:0});
					$(this)
					.unbind('mouseout')
					.unbind('mouseover')
					.unbind('mousemove');
				}
			);
			
			$(this).blur (
				function()
				{
					setMouseOver($(this));
					setMouseOut($(this));
					setMouseMove($(this));
				}	
			);
		}	
	);


		
	}
}