/* cool tooltips */
/* adds the cooltip-htmlelement to the end of the page, */
/* then listens for rollovers on .cooltipped elements */
/* showonce = only show cooltip at first rollover */
/* interactive = delay rolloff for 0.5sec, in order to let user become interactive and interact with the cooltip (like clicking a link) */
var cooltip_timeout;
function initCooltip () {
	$(".cooltipped").mousemove(function (e) {
		clearTimeout(cooltip_timeout);
		var tippedText = $("#"+this.id+" .cooltent").html();
		
		var changed_cooltip_content = tippedText!=$("#cooltip .body").html();
		var is_type_interactive = $(this).hasClass("interactive");
		var cooltip_is_hidden = $("#cooltip").css("display")=="none";
		
		if ( ( tippedText != "" ) && ( !is_type_interactive || cooltip_is_hidden || changed_cooltip_content ) ) {
			$("#cooltip .body").html(tippedText);
			var mouseX = e.pageX;
			var mouseY = e.pageY;
			var cooltipHeight = $("#cooltip").height();
			var targetX = mouseX - 10;
			var targetY = mouseY - cooltipHeight -28;
			
			var box_border = 15;
			var clipped_on_top = false;
			/* clipping top */
			if ( targetY < box_border+document.documentElement.scrollTop ) {
				targetX = mouseX + 15 + box_border;
				targetY = box_border+document.documentElement.scrollTop;
				clipped_on_top = true;
			}
			/* clipping right */
			if ( targetX+$("#cooltip").width() > $('body').width() - box_border ) {
				targetX = $('body').width() - $("#cooltip").width() - box_border;
				if (clipped_on_top) {
					targetY = mouseY + 15 + box_border;
				}
			}
			/* clipping left */
			if ( targetX < box_border+document.documentElement.scrollLeft ) {
				targetX = box_border+document.documentElement.scrollLeft;
			}
			
			$("#cooltip").css( "left", targetX+"px" );
			$("#cooltip").css( "top", targetY+"px" );
			$("#cooltip").show();
		}
	});
	
	$(".cooltipped").mouseleave(function () {
		if ($(this).hasClass("interactive")) {
			cooltip_timeout = setTimeout(function(){ hideCooltip(this) }, 500);
		}
		else {
			hideCooltip(this);
		}
	});
	
	if ($("#cooltip").size()==0) {
		var cooltip_code = "";
		cooltip_code += '	<div id="cooltip">						';
		cooltip_code += '		<div class="top_left"></div>		';
		cooltip_code += '		<div class="bottom_right"></div>	';
		cooltip_code += '		<div class="top_right"></div>		';
		cooltip_code += '		<div class="bottom_left"></div>		';
		cooltip_code += '		<div class="body"></div>			';
		cooltip_code += '		<div class="pointer"></div>			';
		cooltip_code += '	</div>									';
		$('body').append(cooltip_code);
	}
	
	$("#cooltip").mousemove(function () {
		clearTimeout(cooltip_timeout);
	});
	
	$("#cooltip").mouseleave(function () {
		cooltip_timeout = setTimeout(function(){ hideCooltip(this) }, 500); 
	});
}

function hideCooltip (element) {
	$("#cooltip").fadeOut(0);
	if ( $("#"+element.id).hasClass("showonce") ) {
		$("#"+element.id+" .cooltent").html("");
	}
}

$(document).ready(function(){
	initCooltip();
});
