//http://plugins.jquery.com/project/jqTooltip
/**
 *  jQuery Tooltip Plugin
 *@requires jQuery v1.2.6
 *  http://www.socialembedded.com/labs
 *
 *  Copyright (c)  Hernan Amiune (hernan.amiune.com)
 *  Dual licensed under the MIT and GPL licenses:
 *  http://www.opensource.org/licenses/mit-license.php
 *  http://www.gnu.org/licenses/gpl.html
 * 
 *  Version: 1.3
 */
 
(function($) {
	$.fn.tooltip = function(options) {

		var defaults = {
			cssClass: "",			// CSS class or classes to style the tooltip
			delay: 100,				// The number of milliseconds before displaying the tooltip
			duration: 500,			// The number of milliseconds after moving the mouse cusor before removing the tooltip.
			xOffset: 10,			// X offset will allow the tooltip to appear offset by x pixels.
			yOffset: 10,			// Y offset will allow the tooltip to appear offset by y pixels.
			opacity: 0,				// 0 is completely opaque and 100 completely transparent
			fadeDuration: 400,		// [toxi20090112] added fade duration in millis (default = "normal")
			toolTipContainer: 'divTooltip'
		};

		var options = $.extend(defaults, options);

		return this.each(function(index) {

			var $this = $(this);

			//use just one div for all tooltips
			// [toxi20090112] allow the tooltip div to be already present (would break currently)
			// dbs $tooltip = $("#divTooltip");
			$tooltip = $('#' + options.toolTipContainer);
			if ($tooltip.length == 0) {
				//$tooltip = $('<div id="divTooltip"></div>');
				$tooltip = $('<div id="divTooltip"><div id="divTooltipText"></div></div>');
				$('body').append($tooltip);
				$tooltip.hide();
			}

			function displayTooltip(e) {
				//compatibility issue
				e = e ? e : window.event;

				//don't hide the tooltip if the mouse is over the element again
				clearTimeout($tooltip.data("hideTimeoutId"));

				//set the tooltip class
				$tooltip.removeClass($tooltip.attr("class"));
				$tooltip.css("width", "");
				$tooltip.css("height", "");
				$tooltip.addClass(options.cssClass);
				$tooltip.css("opacity", 1 - options.opacity / 100);
				$tooltip.css("position", "absolute");

				//save the title text and remove it from title to avoid showing the default tooltip
				$tooltip.data("title", $this.attr("title"));
				$this.attr("title", "");
				$tooltip.data("alt", $this.attr("alt"));
				$this.attr("alt", "");

				//set the tooltip content

				//dbs $tooltip.html($tooltip.data("title"));
				var $tooltipText = $('#' + options.toolTipContainer + 'Text', $tooltip);
				$tooltipText.removeClass($tooltip.attr("class"));
				$tooltipText.html($tooltip.data("title"));
				$tooltipText.addClass(options.cssClass);

				// [toxi20090112] only use ajax if there actually is an href attrib present
				var href = $this.attr("lang"); // [Steve Favorito] Changed from "href" to "lang" (allows for use on img tags with xhtml validation, without using anchor tags)
				// [Peter] href!="" added
				if (href != undefined && href != "" && href != "#")
					$tooltip.html($.ajax({ url: $this.attr("lang"), async: false }).responseText); // [Steve Favorito] Changed from "href" to "lang" (allows for use on img tags with xhtml validation, without using anchor tags)

				//set the tooltip position
				winw = $(window).width();
				w = $tooltip.width();
				xOffset = options.xOffset;

				//right priority
				if (w + xOffset + 50 < winw - e.clientX)
					$tooltip.css("left", $(document).scrollLeft() + e.clientX + xOffset);
				else if (w + xOffset + 50 < e.clientX)
					$tooltip.css("left", $(document).scrollLeft() + e.clientX - (w + xOffset));
				else {
					//there is more space at left, fit the tooltip there
					if (e.clientX > winw / 2) {
						$tooltip.width(e.clientX - 50);
						$tooltip.css("left", $(document).scrollLeft() + 25);
					}
					//there is more space at right, fit the tooltip there
					else {
						$tooltip.width((winw - e.clientX) - 50);
						$tooltip.css("left", $(document).scrollLeft() + e.clientX + xOffset);
					}
				}

				winh = $(window).height();
				h = $tooltip.height();
				yOffset = options.yOffset;
				// place below cursor if room, then above, else at top...
				if (e.clientY + yOffset + 10 + h < winh)
					$tooltip.css("top", $(document).scrollTop() + e.clientY + yOffset + 2);
				else if (e.clientY - (yOffset + h) > $(document).scrollTop())
					$tooltip.css("top", $(document).scrollTop() + e.clientY - (yOffset + h));
				else
					$tooltip.css("top", $(document).scrollTop() + 2);

				//start the timer to show the tooltip
				$tooltip.data("showTimeoutId", setTimeout("$tooltip.fadeIn(" + options.fadeDuration + ")", options.delay));
			}



			//displays the tooltip
			$this.mouseover(function(e) {
				displayTooltip(e);
			});

			$this.mouseout(function(e) {
				//restore the title
				$this.attr("title", $tooltip.data("title"));
				$this.attr("alt", $tooltip.data("alt"));
				//don't show the tooltip if the mouse left the element before the delay time
				clearTimeout($tooltip.data("showTimeoutId"));
				//start the timer to hide the tooltip
				//[toxi20090112] modified to make use of fadeDuration option
				$tooltip.data("hideTimeoutId", setTimeout("$tooltip.fadeOut(" + options.fadeDuration + ")", options.duration));

			});

			// dbs
			//$this.click(function(e){
			//    e.preventDefault();
			//});

		});

	}
})(jQuery);
