/***
**  JQUERY MINITOOLTIP PLUGIN
**	WRITTEN BY TOM ROMBAUT
**  Version 0.1
**  09/2010
**  DEPENDENCIES : JQUERY 1.3.1+ 
***/
var MiniTooltip = function(element, options) {
	var conf = $.extend({}, $.fn.minitooltip.defaults, options);
	var trigger = $(element);
	var content = "";
	var loaded = false;
	var timeout = false;
	var tooltip = null;
	var shown = false;
	
	var _initialize = function(){
		
		if(conf.preload == true){
			_load(false);
		}
		
		trigger.mouseover(function(e){
			if(shown){
				_clearHideTimer();
			}else{
				_show(e);
			}
		});
		trigger.mouseout(function(e){
			_setHideTimer();
		});
		
		
	};
	
	var _load = function(show,e){
		if(conf.source == "ajax"){
			$.ajax({
				type: 		conf.method,
				url: 		conf.url,
				data: 		conf.params,
				dataType: 	conf.datatype,
				success: 	function(data){
					loaded = true;
					content = data;
					if(show){
						_show(e);
					}
				}
			}); 
		}else{
			content = trigger.attr(conf.source);
			loaded = true;
			if(show){
				_show(e);
			}
		}
		
	}
	
	var _show = function(e){
		
		if(!loaded){
			_load(true,e);
		}else{
			tooltip = $("<div class='mtt-container'><div class='mtt-body'></div></div>");
			if(conf.title){
				tooltip.prepend($("<div class='mtt-title'>"+conf.title+"</div>"));
			}
			$(".mtt-body",tooltip).html(content);
			
			/** POSITION **/
			var tooltipLeft = e.pageX;
			var tooltipRight = e.pageY;
			
			tooltip.css({
				left	:	tooltipLeft,
				top		:	tooltipRight
			});
			
			$("body").append(tooltip);
			shown = true;
			
			tooltip.mouseover(function(e){
				if(shown){
					_clearHideTimer();
				}else{
					_show(e);
				}
			});
			tooltip.mouseout(function(e){
				_setHideTimer();
			});
		}
	}
	
	var _hide = function(){
		shown = false;
		tooltip.remove();
	}
	
	var _clearHideTimer = function(){
		if(timeout){
			clearTimeout(timeout);
			timeout = false;
		}
	};
	
	var _setHideTimer = function(){
		if(!timeout){
			timeout = setTimeout(function(){_hide();},conf.timeToHide);
		}
	};
	
	_initialize();
	return trigger;
};

/**
**	JQUERY PLUGIN
**/
(function($) {	
	$.fn.minitooltip = function(options) {
		return this.each(function() {
			var element = $(this);
			if (element.data('minitooltip')) return;
			var w = new MiniTooltip(this, options);
			element.data('minitooltip', w);
		});
	};
})(jQuery);

$.fn.minitooltip.defaults = {
	preload				:	false,
	title				:	"",				//TOOLTIP TITLE 
	source				:	"title",		//source attribute, or ajax
	url					:	'/',			//AJAX REQUEST URL
	method				:	"POST",			//AJAX REQUEST METHOD
	datatype			: 	"json",			//AJAX REQUEST DATATYPE
	params				:	{},
	highlightClass		:	"mt-highlight",
	timeToHide			:	500
};
