var Tooltip=Class.create();Tooltip.prototype={initialize:function(element,tool_tip){if(!document.getElementById(element)){document.getElementById(tool_tip).style.display='none';return;}
var options=Object.extend({default_css:false,margin:"0px",padding:"5px",backgroundColor:"#d6d6fc",min_distance_x:15,min_distance_y:15,delta_x:0,delta_y:0,zindex:9999},arguments[2]||{});this.element=$(element);this.options=options;this.options.position=options.position!=null?options.position:'tl';if($(tool_tip)){this.tool_tip=$(tool_tip).update($(tool_tip).innerHTML);if(this.options.replaceText!=null){this.tool_tip.innerHTML=this.tool_tip.innerHTML.replace(this.options.replaceText,this.options.replaceWith);}}
else{this.tool_tip=$(document.createElement("div"));document.body.appendChild(this.tool_tip);this.tool_tip.addClassName("tooltip");this.tool_tip.appendChild(document.createTextNode(tool_tip));}
this.tool_tip.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);},registerEvents:function(){Event.observe(this.element,"mouseover",this.eventMouseOver);Event.observe(this.element,"mouseout",this.eventMouseOut);Event.observe(this.element,"mousemove",this.eventMouseMove);},moveTooltip:function(event){Event.stop(event);var mouse_x=Event.pointerX(event);var mouse_y=Event.pointerY(event);var mouseX=Event.pointerX(event);var mouseY=Event.pointerY(event);var dimensions=Element.getDimensions(this.tool_tip);var element_width=dimensions.width;var element_height=dimensions.height;var x=mouse_x;var y=mouse_y;this.scroll=this.getScrollXY();this.pageoffset=this.getWindowDimensions();mouse_y-=this.scroll[1];mouse_x-=this.scroll[0];var bodyWidth=this.getWindowWidth();var bodyHeight=this.getWindowHeight();if(this.options.position.substr(0,1)=='t'){if(mouse_y-this.options.min_distance_y-element_height>0){y=mouse_y-this.options.min_distance_y-element_height+this.scroll[1];}
else{y=mouse_y+this.options.min_distance_y+this.scroll[1];}}
else{if(mouse_y+this.options.min_distance_y+element_height<bodyHeight)
{y=mouse_y+this.options.min_distance_y+this.scroll[1];}
else{y=mouse_y-this.options.min_distance_y-element_height+this.scroll[1];}}
if(this.options.position.substr(1,1)=='l'){if(mouse_x-this.options.min_distance_x-element_width>0){x=mouse_x-this.options.min_distance_x-element_width+this.scroll[0];}
else{x=mouse_x+this.options.min_distance_x+this.scroll[0];}}
else{if(mouse_x+this.options.min_distance_x+element_width<bodyWidth){x=mouse_x+this.options.min_distance_x+this.scroll[0];}
else{x=mouse_x-this.options.min_distance_x-element_width+this.scroll[0];}}
this.setStyles(x,y);Event.stopObserving(this.element,"mousemove",this.eventMouseMove);},showTooltip:function(event){Event.stop(event);this.moveTooltip(event);new Element.show(this.tool_tip);},setStyles:function(x,y){Element.setStyle(this.tool_tip,{position:'absolute',top:y+this.options.delta_y+"px",left:x+this.options.delta_x+"px",zindex:this.options.zindex});if(this.options.default_css){Element.setStyle(this.tool_tip,{margin:this.options.margin,padding:this.options.padding,backgroundColor:this.options.backgroundColor,zindex:this.options.zindex});}},hideTooltip:function(event){new Element.hide(this.tool_tip);},getScrollXY:function(){var scrOfX=0,scrOfY=0;if(typeof(window.pageYOffset)=='number'){scrOfY=window.pageYOffset;scrOfX=window.pageXOffset;}else if(document.body&&(document.body.scrollLeft||document.body.scrollTop)){scrOfY=document.body.scrollTop;scrOfX=document.body.scrollLeft;}else if(document.documentElement&&(document.documentElement.scrollLeft||document.documentElement.scrollTop)){scrOfY=document.documentElement.scrollTop;scrOfX=document.documentElement.scrollLeft;}
return[scrOfX,scrOfY];},getWindowDimensions:function()
{var myWidth=0,myHeight=0;if(typeof(window.innerWidth)=='number')
{myWidth=window.innerWidth;myHeight=window.innerHeight;}
else if(document.documentElement&&(document.documentElement.clientWidth||document.documentElement.clientHeight))
{myWidth=document.documentElement.clientWidth;myHeight=document.documentElement.clientHeight;}
else if(document.body&&(document.body.clientWidth||document.body.clientHeight))
{myWidth=document.body.clientWidth;myHeight=document.body.clientHeight;}
return{'width':myWidth,'height':myHeight};},getWindowHeight:function(){return this.getWindowDimensions().height;},getWindowWidth:function(){return this.getWindowDimensions().width;}}
