
(function($){$.tools=$.tools||{version:{}};$.tools.version.tooltip='1.0.2';var effects={toggle:[function(){this.getTip().show();},function(){this.getTip().hide();}],fade:[function(){this.getTip().fadeIn(this.getConf().fadeInSpeed);},function(){this.getTip().fadeOut(this.getConf().fadeOutSpeed);}]};$.tools.addTipEffect=function(name,loadFn,hideFn){effects[name]=[loadFn,hideFn];};$.tools.addTipEffect("slideup",function(){var conf=this.getConf();var o=conf.slideOffset||10;this.getTip().css({opacity:0}).animate({top:'-='+o,opacity:conf.opacity},conf.slideInSpeed||200).show();},function(){var conf=this.getConf();var o=conf.slideOffset||10;this.getTip().animate({top:'-='+o,opacity:0},conf.slideOutSpeed||200,function(){$(this).hide().animate({top:'+='+(o*2)},0);});});function createTooltip(trigger,conf){var that={};useOffsetPos=false;var tip=trigger.next();if(conf.tip){if(conf.tip.indexOf("#")!=-1){tip=$(conf.tip);useOffsetPos=true;}else{tip=trigger.nextAll(conf.tip).eq(0);if(!tip.length){tip=trigger.parent().nextAll(conf.tip).eq(0);useOffsetPos=true;}}}
function bind(name,fn){$(that).bind(name,function(e,args){if(fn&&fn.call(this)===false&&args){args.proceed=false;}});return that;}
$.each(conf,function(name,fn){if($.isFunction(fn)){bind(name,fn);}});var isInput=trigger.is("input, textarea");trigger.bind(isInput?"focus":"mouseover",function(e){e.target=this;that.show(e);tip.hover(function(){that.show();},function(){that.hide();});});trigger.bind(isInput?"blur":"mouseout",function(){that.hide();});tip.css("opacity",conf.opacity);var timer=0;$.extend(that,{useOffsetPos:useOffsetPos,show:function(e){if(e){trigger=$(e.target);}
clearTimeout(timer);if(tip.is(":animated")||tip.is(":visible")){return that;}
var p={proceed:true};$(that).trigger("onBeforeShow",p);if(!p.proceed){return that;}
var offsetParentPos;var offsetLeft=0;var offsetTop=0;if(this.useOffsetPos){offsetParentPos=trigger.offsetParent().position();offsetLeft=offsetParentPos.left;offsetTop=offsetParentPos.top;}
var top=offsetTop+trigger.position().top-tip.outerHeight();var height=tip.outerHeight()+trigger.outerHeight();var pos=conf.position[0];if(pos=='center'){top+=height/2;}
if(pos=='bottom'){top+=height;}
var width=trigger.outerWidth()+tip.outerWidth();var left=offsetLeft+trigger.position().left+trigger.outerWidth();pos=conf.position[1];if(pos=='center'){left-=width/2;}
if(pos=='left'){left-=width;}
top+=conf.offset[0];left+=conf.offset[1];tip.css({position:'absolute',top:top,left:left});effects[conf.effect][0].call(that);$(that).trigger("onShow");return that;},hide:function(){clearTimeout(timer);timer=setTimeout(function(){if(!tip.is(":visible")){return that;}
var p={proceed:true};$(that).trigger("onBeforeHide",p);if(!p.proceed){return that;}
effects[conf.effect][1].call(that);$(that).trigger("onHide");},conf.delay||1);return that;},isShown:function(){return tip.is(":visible, :animated");},getConf:function(){return conf;},getTip:function(){return tip;},getTrigger:function(){return trigger;},onBeforeShow:function(fn){return bind("onBeforeShow",fn);},onShow:function(fn){return bind("onShow",fn);},onBeforeHide:function(fn){return bind("onBeforeHide",fn);},onHide:function(fn){return bind("onHide",fn);}});return that;}
$.prototype.tooltip=function(conf){var el=this.eq(typeof conf=='number'?conf:0).data("tooltip");if(el){return el;}
var opts={tip:null,effect:'slideup',delay:30,opacity:1,position:['top','center'],offset:[0,0],api:false};if($.isFunction(conf)){conf={onBeforeShow:conf};}
$.extend(opts,conf);this.each(function(){el=createTooltip($(this),opts);$(this).data("tooltip",el);});return opts.api?el:this;};})(jQuery);
