var TipsX3=new Class({options:{onShow:function(A){A.setStyle("visibility","visible")},onHide:function(A){A.setStyle("visibility","hidden")},maxTitleChars:30,showDelay:300,hideDelay:100,className:"tool",offsets:{x:16,y:16},fixed:false,loadingText:"Loading...",errTitle:"Oops..",errText:"There was a problem retrieving the tooltip."},initialize:function(B,A){this.setOptions(A);this.toolTip=new Element("div",{"class":this.options.className+"-tip",styles:{position:"absolute",top:"0",left:"0",visibility:"hidden","z-index":"10000"}}).inject(document.body);this.wrapper=new Element("div").inject(this.toolTip);$$(B).each(this.build,this);if(this.options.initialize){this.options.initialize.call(this)}},build:function(B){B.myTitle=(B.href&&B.get("tag")=="a")?B.href.replace("http://",""):(B.rel||false);if(B.title){if(B.title.test("^DOM:","i")){B.title=$(B.title.split(":")[1].trim()).innerHTML}if(B.title.test("^AJAX:","i")){B.title=this.options.loadingText+"::"+B.title}var C=B.title.split("::");if(C.length>1){B.myTitle=C[0].trim();B.myText=C[1].trim()}else{B.myText=B.title}B.removeAttribute("title")}else{B.myText=false}if(B.myTitle&&B.myTitle.length>this.options.maxTitleChars){B.myTitle=B.myTitle.substr(0,this.options.maxTitleChars-1)+"&hellip;"}B.addEvent("mouseenter",function(D){this.start(B);if(!this.options.fixed){this.locate(D)}else{this.position(B)}}.bind(this));if(!this.options.fixed){B.addEvent("mousemove",this.locate.bindWithEvent(this))}var A=this.end.bind(this);B.addEvent("mouseleave",A);B.addEvent("trash",A)},start:function(A){this.wrapper.empty();if(A.myText&&A.myText.test("^AJAX:","i")){this.ajax=new Request({url:A.myText.replace(/AJAX:/i,""),onComplete:function(B,C){A.title=B;this.build(A);this.start(A)}.bind(this),onFailure:function(){A.title=this.options.errTitle+"::"+this.options.errText;this.build(A);this.start(A)}.bind(this),method:"get"}).send();A.myText='<div class="'+this.options.className+'-loading">&nbsp;</div>'}if(A.myText&&A.myText.test("^IMG:","i")){this.title=new Asset.image(A.myText.replace(/IMG:/i,""),{id:"myImage"}).inject(new Element("span").inject(new Element("div",{"class":this.options.className+"-img"}).inject(this.wrapper)))}else{if(A.myTitle){this.title=new Element("span").inject(new Element("div",{"class":this.options.className+"-title"}).inject(this.wrapper)).set("html",A.myTitle)}if(A.myText){this.text=new Element("span").inject(new Element("div",{"class":this.options.className+"-text"}).inject(this.wrapper)).set("html",A.myText)}}$clear(this.timer);this.timer=this.show.delay(this.options.showDelay,this)},end:function(A){$clear(this.timer);this.timer=this.hide.delay(this.options.hideDelay,this)},position:function(A){var B=A.getPosition();this.toolTip.setStyles({left:B.x+this.options.offsets.x,top:B.y+this.options.offsets.y})},locate:function(B){var D={x:window.getWidth(),y:window.getHeight()};var A={x:window.getScrollLeft(),y:window.getScrollTop()};var C={x:this.toolTip.offsetWidth,y:this.toolTip.offsetHeight};var G={x:"left",y:"top"};for(var E in G){var F=B.page[E]+this.options.offsets[E];if((F+C[E]-A[E])>D[E]){F=B.page[E]-this.options.offsets[E]-C[E]}this.toolTip.setStyle(G[E],F)}},show:function(){if(this.options.timeout){this.timer=this.hide.delay(this.options.timeout,this)}this.fireEvent("onShow",[this.toolTip])},hide:function(){this.fireEvent("onHide",[this.toolTip])}});TipsX3.implement(new Events,new Options);