﻿(function ($) {
	jQuery.fn.tooltip = function (options) {

		var defaults = {
			tooltip: "",
			width: "",
			height: "",
			position: "mouse", //top, right, bottom, left
			offsetX: "10",
			offsetY: "10",
			attr: "",
			cssclass: "",
			parentID: ""
		};

		var options = jQuery.extend({}, defaults, options);

		this.each(function () {
			obj = jQuery(this);
			var left, top;
			if (options.attr == "") {
				tooltip = jQuery(options.tooltip);
			} else {
				var parentID;

				if (obj.attr("id") == "") {
					parentID = options.parentID;
				} else {
					parentID = obj.attr("id");
				}

				jQuery("body").append('<div id="tt_' + parentID + '"></div>');
				jQuery("#tt_" + parentID).html(obj.attr(options.attr)).addClass(options.cssclass);
				options.tooltip = jQuery("#tt_" + parentID);
				tooltip = jQuery(options.tooltip);
			}

			tooltip.hide();

			offset = jQuery(this).offset();


			switch (options.position) {
				case "top":
					top = (parseInt(jQuery(this).offset().top) - (parseInt(tooltip.height()))) - parseInt(options.offsetY);
					left = parseInt(jQuery(this).offset().left) + parseInt(options.offsetX);

					break;
				case "left":
					left = (parseInt(jQuery(this).offset().left) - (parseInt(tooltip.width()))) - parseInt(options.offsetX);
					top = parseInt(jQuery(this).offset().top) + parseInt(options.offsetY);

					break;
				case "right":
					left = (parseInt(jQuery(this).offset().left) + (parseInt(obj.width()))) + parseInt(options.offsetX);
					top = parseInt(jQuery(this).offset().top) + parseInt(options.offsetY);
					break;
				case "bottom":
					top = (parseInt(jQuery(this).offset().top) + (parseInt(obj.height()))) + parseInt(options.offsetY);
					left = parseInt(jQuery(this).offset().left) + parseInt(options.offsetX);

					break;
				default:
					obj.bind("mouseenter", function () {
						jQuery(options.tooltip).fadeIn("fast");
					});

					obj.bind("mousemove", function (e) {
						jQuery(options.tooltip).css({
							'top': e.pageY + parseInt(options.offsetY),
							'left': e.pageX + parseInt(options.offsetX),
							'position': 'absolute',
							'width': options.width + "px",
							'height': options.height + "px"
						});
					});
			}

			if (options.position != "mouse") {
				obj.bind("mouseenter", function () {
					jQuery(options.tooltip).fadeIn("fast");
				});

				jQuery(options.tooltip).css({
					'position': 'absolute',
					'top': top,
					'left': left,
					'width': options.width + "px",
					'height': options.height + "px"
				});
			}

			obj.mouseleave(function () {
				jQuery(options.tooltip).fadeOut("fast");
				if (options.attr != "") {
					// $(options.tooltip).remove();
				}
			});

		});

		return this;
	};
})(jQuery);

