/* Copyright (c) 2008 Kean Loong Tan http://www.gimiti.com/kltan
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* Copyright notice and license must remain intact for legal use
* jHelpertip
* Version: 1.0 (Jun 2, 2008)
* Requires: jQuery 1.2+
*/
(function($) {
$.fn.jHelperTip = function(options) {
// merge users option with default options
var opts = $.extend({}, $.fn.jHelperTip.defaults, options);
// default actions
// create a ttC is not found
if ($(opts.ttC).length == 0)
$('
').appendTo("body");
// create a dC is not found
if ($(opts.dC).length == 0)
$('').appendTo("body");
if ($(opts.aC).length == 0)
$('').appendTo("body");
// initialize our tooltip and our data container and also the close box
$(opts.ttC).add(opts.aC).css({
position: "absolute",
display: "inline"
}).hide();
$(opts.dC).hide();
// close the tooltip box
var closeBox = function(){
if (opts.source == "attribute")
$(opts.aC).hide().empty();
else
$(opts.ttC).hide().empty();
};
$(".jHelperTipClose").bind("click", closeBox);
$(opts.ttC).bind("mouseover",function(){
$(opts.ttC).show();
return false;
});
// the sources of getting data
var getData = function(obj,e){
if (opts.source == "ajax") {
getPosition(e);
$(opts.ttC).html('
'+opts.loadingText+'
').show();
$.ajax({
type: opts.type,
url: opts.url,
data: opts.data,
success: function(msg){
$(opts.ttC).html(msg);
// reInitialize the close controller
$(".jHelperTipClose").unbind("click", closeBox);
$(".jHelperTipClose").bind("click", closeBox);
}
});
}
else if (opts.source == "container"){
$(opts.ttC).empty().show();
$(opts.dC).clone(true).appendTo(opts.ttC).show();
}
if (opts.source == "attribute"){
$(opts.aC).html($(obj).attr(opts.attrName));
}
};
// used to position the tooltip
var getPosition = function (e){
var top = e.pageY+opts.topOff;
var left = e.pageX+opts.leftOff;
if (opts.source == "attribute"){
$(opts.aC).css({
top: top,
left: left,
opacity: opts.opacity
}).show();
}
else {
$(opts.ttC).css({
top: top,
left: left,
opacity: opts.opacity
}).show();
}
};
// just close tool tip when not needed usually trigger by anything outside out tooltip target
if (opts.trigger == "hover") {
$(this).bind("mouseover", function(e){
e.preventDefault();
getData(this, e);
return false;
});
$(this).bind("mousemove", function(e){
getPosition(e);
return false;
});
$(this).bind("mouseout", function(e){
if (opts.source == "attribute")
$(opts.aC).hide().empty();
else
$(opts.ttC).hide().empty();
return false;
});
}
else if (opts.trigger == "click") {
$(this).bind("click", function(e){
getData(this, e);
getPosition(e);
$(document).bind("click", function(e){
if (opts.autoClose) {
if (opts.source == "attribute")
$(opts.aC).hide().empty();
else
$(opts.ttC).hide().empty();
}
});
return false;
});
}
};
$.fn.jHelperTip.defaults = {
trigger: "click",
topOff: 3,
leftOff: 10,
source: "container", /* attribute, container, ajax */
attrName: '',
ttC: "#jHelperTipContainer", /* tooltip Container*/
dC: "#jHelperTipDataContainer", /* data Container */
aC: "#jHelperTipAttrContainer", /* attr Container */
opacity: 1.0,
loadingImg: "ajax-loader.gif",
loadingText: "Loading...",
type: "GET", /* data can be inline or CSS selector */
//url: '',
//data: '',
autoClose: true
};
})(jQuery);