var TipsX3=new Class({options:{onShow:function(c){c.setStyle('visibility','visible')},onHide:function(c){c.setStyle('visibility','hidden')},maxTitleChars:30,showDelay:100,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(c,a){this.setOptions(a);this.toolTip=new Element('div',{'class':this.options.className+'-tip','styles':{'position':'absolute','top':'0','left':'0','visibility':'hidden'}}).inject(document.body);this.wrapper=new Element('div').inject(this.toolTip);$$(c).each(this.build,this);if(this.options.initialize)this.options.initialize.call(this)},build:function(a){a.myTitle=(a.href&&a.get('tag')=='a')?a.href.replace('http://',''):(a.rel||false);if(a.title){if(a.title.test('^DOM:','i')){a.title=$(a.title.split(':')[1].trim()).innerHTML}if(a.title.test('^AJAX:','i')){a.title=this.options.loadingText+'::'+a.title}var b=a.title.split('::');if(b.length>1){a.myTitle=b[0].trim();a.myText=b[1].trim()}else{a.myText=a.title}a.removeAttribute('title')}else{a.myText=false}if(a.myTitle&&a.myTitle.length>this.options.maxTitleChars)a.myTitle=a.myTitle.substr(0,this.options.maxTitleChars-1)+"&hellip;";a.addEvent('mouseenter',function(c){this.start(a);if(!this.options.fixed)this.locate(c);else this.position(a)}.bind(this));if(!this.options.fixed)a.addEvent('mousemove',this.locate.bindWithEvent(this));var e=this.end.bind(this);a.addEvent('mouseleave',e);a.addEvent('trash',e)},start:function(b){this.wrapper.empty();if(b.myText&&b.myText.test('^AJAX:','i')){this.ajax=new Request({url:b.myText.replace(/AJAX:/i,''),onComplete:function(c,a){b.title=c;this.build(b);this.start(b)}.bind(this),onFailure:function(){b.title=this.options.errTitle+'::'+this.options.errText;this.build(b);this.start(b)}.bind(this),method:'get'}).send();b.myText='<div class="'+this.options.className+'-loading">&nbsp;</div>'}if(b.myTitle){this.title=new Element('span').inject(new Element('div',{'class':this.options.className+'-title'}).inject(this.wrapper)).set('html',b.myTitle)}if(b.myText){this.text=new Element('span').inject(new Element('div',{'class':this.options.className+'-text'}).inject(this.wrapper)).set('html',b.myText)}$clear(this.timer);this.timer=this.show.delay(this.options.showDelay,this)},end:function(c){$clear(this.timer);this.timer=this.hide.delay(this.options.hideDelay,this)},position:function(c){var a=c.getPosition();this.toolTip.setStyles({'left':a.x+this.options.offsets.x,'top':a.y+this.options.offsets.y})},locate:function(c){var a={'x':window.getWidth(),'y':window.getHeight()};var b={'x':window.getScrollLeft(),'y':window.getScrollTop()};var e={'x':this.toolTip.offsetWidth,'y':this.toolTip.offsetHeight};var g={'x':'left','y':'top'};for(var d in g){var f=c.page[d]+this.options.offsets[d];if((f+e[d]-b[d])>a[d])f=c.page[d]-this.options.offsets[d]-e[d];this.toolTip.setStyle(g[d],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);