var Tooltip=Class.create();Tooltip.prototype={initialize:function(b,c,a){this.options=Object.extend({css:"tooltip",style:{},position:{},offset:{},stem:{}},a||{});this.element=$(b);this.options.position=Object.extend({target:"mouse",tip:"bottomleft",anchor:null},this.options.position||{});this.options.offset=Object.extend({x:0,y:0},this.options.offset||{});this.options.style=Object.extend({zindex:1000,position:"absolute"},this.options.style||{});this.options.stem=Object.extend({enabled:false,position:"bottomleft"},this.options.stem||{});if(typeof c=="string"&&$(c)){this.tooltip=$(c)}else{if(c.template&&c.content){this.tooltip=$(document.createElement("div"));document.body.appendChild(this.tooltip);this.tooltip.innerHTML=new Template(c.template,/(^|.|\r|\n)({{(\w+)}})/).evaluate({content:c.content})}else{this.tooltip=$(document.createElement("div"));document.body.appendChild(this.tooltip);this.tooltip.innerHTML=c}}if(!this.tooltip.hasClassName(this.options.css)){this.tooltip.addClassName(this.options.css)}this.tooltip.setStyle(this.options.style);this.tooltip.hide();this.eventMouseOver=this.showTooltip.bindAsEventListener(this);this.eventMouseOut=this.hideTooltip.bindAsEventListener(this);this.eventMouseMove=this.moveTooltip.bindAsEventListener(this);this.registerEvents()},destroy:function(){Event.stopObserving(this.element,"mouseover",this.eventMouseOver);Event.stopObserving(this.element,"mouseout",this.eventMouseOut);Event.stopObserving(this.element,"mousemove",this.eventMouseMove);Event.stopObserving(this.tooltip,"mouseover",this.eventMouseOver);Event.stopObserving(this.tooltip,"mouseout",this.eventMouseOut)},registerEvents:function(){Event.observe(this.element,"mouseover",this.eventMouseOver);Event.observe(this.element,"mouseout",this.eventMouseOut);Event.observe(this.element,"mousemove",this.eventMouseMove);Event.observe(this.tooltip,"mouseover",this.eventMouseOver);Event.observe(this.tooltip,"mouseout",this.eventMouseOut)},moveTooltip:function(a){Event.stop(a);this.setPosition(this.calculatePosition(a))},calculatePosition:function(e){var d={x:0,y:0};var f=Element.getDimensions(this.element);var c={x:0,y:0};var a=Element.getDimensions(this.tooltip);if(!this.options.position.target){}else{if(this.options.position.target.toLowerCase()=="viewport"){d.x=document.viewport.getScrollOffsets().left;d.y=document.viewport.getScrollOffsets().top}else{if(this.options.position.target.toLowerCase()=="mouse"){d.x=Event.pointerX(e);d.y=Event.pointerY(e)}else{var b=this.element;if($(this.options.position.anchor)){var b=$(this.options.position.anchor)}d.x=b.cumulativeOffset().left;d.y=b.cumulativeOffset().top;switch(this.options.position.target.toLowerCase()){case"topmiddle":d.x+=Math.round(f.width/2);break;case"topright":case"righttop":d.x+=f.width;break;case"rightmiddle":d.x+=f.width;d.y+=Math.round(f.height/2);break;case"rightbottom":case"bottomright":d.x+=f.width;d.y+=f.height;break;case"bottommiddle":d.x+=Math.round(f.width/2);d.y+=f.height;break;case"bottomleft":case"leftbottom":d.y+=f.height;break;case"leftmiddle":d.y+=Math.round(f.height/2);break}}}}c.x=d.x+this.options.offset.x;c.y=d.y+this.options.offset.y;switch(this.options.position.tip.toLowerCase()){case"topmiddle":c.x-=Math.round(a.width/2);break;case"topright":case"righttop":c.x-=a.width;break;case"rightmiddle":c.x-=a.width;c.y-=Math.round(a.height/2);break;case"rightbottom":case"bottomright":c.x-=a.width;c.y-=a.height;break;case"bottommiddle":c.x-=Math.round(a.width/2);c.y-=a.height;break;case"bottomleft":case"leftbottom":c.y-=a.height;break;case"leftmiddle":c.y-=Math.round(a.height/2);break}return c},showTooltip:function(a){Event.stop(a);this.moveTooltip(a);new Element.show(this.tooltip)},setPosition:function(a){Element.setStyle(this.tooltip,{top:a.y+"px",left:a.x+"px"})},hideTooltip:function(a){new Element.hide(this.tooltip)}};
