
var Tooltip=Class.create();Tooltip.prototype={initialize:function(element,content){var options=Object.extend({className:'default',closeButton:false,duration:0.3,delay:0.2,effect:false,fixed:true,hideAfter:false,hideOn:'mouseout',hook:false,offset:{x:0,y:0},showOn:'mouseover',target:'anotherId',title:false,viewport:true},arguments[2]||{});if(typeof element=='object'){this.element=element;}else{this.element=$(element);}
this.content=content;this.options=options;if(typeof element=='object'){this.loadTooltip();this.showTooltip();}else{this.eventLoadWin=this.loadTooltip.bindAsEventListener(this);}
this.eventDisplay=this.displayTooltip.bindAsEventListener(this);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,this.options.showOn,this.eventMouseOver);Event.stopObserving(this.element,this.options.hideOn,this.eventMouseOut);Event.stopObserving(this.element,"mousemove",this.eventMouseMove);if(typeof element!='object')
Event.stopObserving(window,"load",this.eventLoadWin);Event.StopObserving(this.toolTipElement,'mouseover',this.eventDisplay);Event.StopObserving(this.toolTipElement,this.options.hideOn,this.eventMouseOut);},registerEvents:function(){if(typeof element!='object')
Event.observe(window,"load",this.eventLoadWin);Event.observe(this.element,this.options.showOn,this.eventMouseOver);Event.observe(this.element,this.options.hideOn,this.eventMouseOut);Event.observe(this.element,"mousemove",this.eventMouseMove);},loadTooltip:function(){this.toolTipElement=new Element('div');this.toolTipElement.addClassName('tooltip');containerDiv=new Element('div');containerDiv.addClassName(this.options.className);titleDiv=new Element('div');titleDiv.addClassName('title');if(this.options.closeButton){this.closeDiv=new Element('div');this.closeDiv.addClassName('close');titleDiv.appendChild(this.closeDiv);}
if(this.options.title){titleDiv.appendChild(document.createTextNode(this.options.title));}
if(this.options.title||this.options.closeButton){containerDiv.appendChild(titleDiv);}
contentDiv=new Element('div');contentDiv.addClassName('content');contentDiv.update(this.content);containerDiv.appendChild(contentDiv);this.toolTipElement.appendChild(containerDiv);this.toolTipElement.hide();if(this.options.closeButton)
Event.observe(this.closeDiv,'click',this.eventMouseOut);Event.observe(this.toolTipElement,'mouseover',this.eventDisplay);Event.observe(this.toolTipElement,this.options.hideOn,this.eventMouseOut);document.body.appendChild(this.toolTipElement);},moveTooltip:function(event){Event.stop(event);if(this.hideId){window.clearTimeout(this.hideId);}
if(!this.options.fixed){var currentMouseX=Event.pointerX(event);var currentMouseY=Event.pointerY(event);this.toolTipLeft=this.toolTipLeft-this.mouseX+currentMouseX;this.toolTipTop=this.toolTipTop-this.mouseY+currentMouseY;if(this.toolTipLeft&&this.toolTipTop){this.viewportCheck();}
this.mouseX=currentMouseX;this.mouseY=currentMouseY;}},showTooltip:function(){this.loadTooltip();this.mouseX=Event.pointerX(event);this.mouseY=Event.pointerY(event);if(this.options.target!='anotherId'){this.targetElement=$(this.options.target);}else{this.targetElement=this.element;}
var dimensions=this.targetElement.getDimensions();var elementWidth=dimensions.width;var elementHeight=dimensions.height;var positions=this.targetElement.cumulativeOffset();var elementLeft=positions.left;var elementTop=positions.top;var dimensionsToolTip=this.toolTipElement.getDimensions();this.toolTipWidth=dimensionsToolTip.width;this.toolTipHeight=dimensionsToolTip.height;this.toolTipLeft=elementWidth+elementLeft;this.toolTipTop=elementHeight+elementTop;if(this.options.hook&&this.options.fixed){switch(this.options.hook.target)
{case'topLeft':elementContactLeft=elementLeft;elementContactTop=elementTop;break;case'topRight':elementContactLeft=elementLeft+elementWidth;elementContactTop=elementTop;break;case'bottomLeft':elementContactLeft=elementLeft;elementContactTop=elementTop+elementHeight;break;case'bottomRight':elementContactLeft=elementLeft+elementWidth;elementContactTop=elementTop+elementHeight;break;case'topMiddle':elementContactLeft=elementLeft+elementWidth/2;elementContactTop=elementTop;break;case'bottomMiddle':elementContactLeft=elementLeft+elementWidth/2;elementContactTop=elementTop+elementHeight;break;case'leftMiddle':elementContactLeft=elementLeft;elementContactTop=elementTop+elementHeight/2;break;case'rightMiddle':elementContactLeft=elementLeft+elementWidth;elementContactTop=elementTop+elementHeight/2;break;}
switch(this.options.hook.tip)
{case'topLeft':this.toolTipLeft=elementContactLeft;this.toolTipTop=elementContactTop;break;case'topRight':this.toolTipLeft=elementContactLeft-this.toolTipWidth;this.toolTipTop=elementContactTop;break;case'bottomLeft':this.toolTipLeft=elementContactLeft;this.toolTipTop=elementContactTop-this.toolTipHeight;break;case'bottomRight':this.toolTipLeft=elementContactLeft-this.toolTipWidth;this.toolTipTop=elementContactTop-this.toolTipHeight;break;case'topMiddle':this.toolTipLeft=elementContactLeft-this.toolTipWidth/2;this.toolTipTop=elementContactTop;break;case'bottomMiddle':this.toolTipLeft=elementContactLeft-this.toolTipWidth/2;this.toolTipTop=elementContactTop-this.toolTipHeight;break;case'leftMiddle':this.toolTipLeft=elementContactLeft;this.toolTipTop=elementContactTop-this.toolTipHeight/2;break;case'rightMiddle':this.toolTipLeft=elementContactLeft-this.toolTipWidth;this.toolTipTop=elementContactTop-this.toolTipHeight/2;break;}}
if(!this.options.fixed){this.toolTipLeft=Event.pointerX(event);this.toolTipTop=Event.pointerY(event);}
this.toolTipLeft+=this.options.offset.x;this.toolTipTop+=this.options.offset.y;this.viewportCheck();if(this.options.effect=='appear'){Effect.Appear(this.toolTipElement,{duration:this.options.duration,delay:this.options.delay});}else if(this.options.effect=='blind'){Effect.BlindDown(this.toolTipElement,{duration:this.options.duration,delay:this.options.delay});}else{this.toolTipElement.show();}},displayTooltip:function(event){if(this.hideId){window.clearTimeout(this.hideId);}
this.toolTipElement.show();},hideTooltip:function(event){if(this.options.hideAfter){this.hideId=Element.hide.delay(this.options.hideAfter,this.toolTipElement);}else{this.toolTipElement.hide();}
this.toolTipElement.remove();},getWindowHeight:function(){var innerHeight;if(navigator.appVersion.indexOf('MSIE')>0){innerHeight=document.body.clientHeight;}else{innerHeight=window.innerHeight;}
return innerHeight;},getWindowWidth:function(){var innerWidth;if(navigator.appVersion.indexOf('MSIE')>0){innerWidth=document.body.clientWidth;}else{innerWidth=window.innerWidth;}
return innerWidth;},viewportCheck:function(){if(this.options.viewport){var viewportDimensions=document.viewport.getDimensions();var viewportOffsets=document.viewport.getScrollOffsets();if(this.toolTipWidth+this.toolTipLeft>viewportDimensions.width+viewportOffsets.left){this.toolTipLeft=viewportDimensions.width-this.toolTipWidth;}
if(this.toolTipHeight+this.toolTipTop>viewportDimensions.height+viewportOffsets.top){this.toolTipTop=viewportDimensions.height-this.toolTipHeight;}
if(this.toolTipLeft<0){this.toolTipLeft=0;}
if(this.toolTipTop<0){this.toolTipTop=0;}}
this.toolTipElement.setStyle({position:'absolute',left:this.toolTipLeft+"px",top:this.toolTipTop+"px",zindex:1000});}}