Array.prototype.contains=function(value){
for(var i=0;i<this.length;i++){
if(this[i]==value){
return true}}
return false}
var Tooltip={
showEvent: "click",
hideEvent: "click",
fade: 0.5,
closeText: "",
showMethod: Effect.Appear,
hideMethod: Effect.Fade,
autoFollowMouse: false,
autoHideTimeout: 40,
autoHideClick: true,
autoMoveToCursor: true,
CURRENT_TOOLTIP: 1,
_current: false,
setup: function(){
match_class=new RegExp("^(.*)\s?tooltip\s?(.*)$",'i')
match_for=new RegExp("^.*\s?for_(.*)\s?.*$",'i')
var divs=document.getElementsByTagName('div')
var for_result
if(divs.length>0){
if(Tooltip.autoFollowMouse&&Tooltip.autoHideTimeout){
Tooltip.hideEvent[Tooltip.hideEvent.length]="mouseout"}
if(Tooltip.autoHideClick){
Tooltip._attachEvent(document.getElementsByTagName("body").item(0),"clickanywhere")}
for(var i=0;i<divs.length;i++){
if(divs.item(i).className.match(match_class)){
for_result=divs.item(i).className.match(match_for)
if(for_result&&for_result.length>0){
if(document.getElementById(for_result[1])){
var activator=document.getElementById(for_result[1])}
}else{
var foundPrevious=false
var activator=divs.item(i)
while(foundPrevious==false){
activator=activator.previousSibling
if(activator.tagName){
foundPrevious=true
break}}}
activator.Tooltip=divs.item(i)
if(!activator.id){
activator.id="tt"+i}
activator.Tooltip.activator=activator.id
Tooltip.init(activator)}}}
},
init: function(activator){
var tooltip=activator.Tooltip
activator.Tooltip.style.visibility="hidden"
Tooltip._attachEvent(activator,"toggle")
if(activator.tagName.toLowerCase()=="a"){
try{
activator.removeAttribute("href")
activator.style.cursor=(document.links[0].style.cursor.length>0)? document.links[0].style.cursor : "pointer"}
catch(e){}}
tooltip.style.zIndex="1000"
if(Tooltip.autoFollowMouse !=true){
var p=document.createElement('p')
p.style.textAlign="right"
p.style.padding.padding="0"
p.style.margin="0"
p.className="close"
var link=document.createElement('a')
link.Tooltip=tooltip
link.style.cursor="pointer"
Tooltip._attachEvent(link,"click")
var close=document.createTextNode(Tooltip.closeText)
link.appendChild(close)
p.appendChild(link)
tooltip.appendChild(p,tooltip.firstChild)}
},
add: function(activator,tooltip){
if(typeof activator=='string'){
activator=document.getElementById(activator)}
if(typeof tooltip=='string'){
tooltip=document.getElementById(tooltip)}
activator.Tooltip=tooltip
Tooltip.init(activator)
},
toggle: function(activator,event){
try{
if(activator==1){
activator=document.getElementById(window._currentTT)}}
catch(e){}
if(Tooltip.autoHideClick&&event.type=="click"){
var close_class=new RegExp("^(.*)\s?close\s?(.*)$",'i')
var tooltip_class=new RegExp("^(.*)\s?tooltip\s?(.*)$",'i')
if(event.srcElement){
var node=event.srcElement
}else if(event.fromElement){
var node=event.fromElement
}else if(event.target){
var node=event.target}
if(node.className==null || !node.className.match(close_class)){
var isWithinTooltip=false
while(!isWithinTooltip&&node.parentNode){
if(node.className&&node.className.match(close_class)){
break}
if(node.className&&node.className !=null&&node.className.match(tooltip_class)){
isWithinTooltip=true
break}
node=node.parentNode}}
if(isWithinTooltip){
return}}
try{
if(activator.Tooltip.isVisible){
Tooltip._hide(activator,event)
}else{
Tooltip._show(activator,event)}}
catch(e){
try{
Tooltip._hide(activator,event)}
catch(e){}}
event.cancelBubble=true
try{
event.stopPropagation()}
catch(e){}
},
_show: function(activator,event,ignore_event){
if(Tooltip.autoHideClick&&window._currentTT){
Tooltip._hide(document.getElementById(window._currentTT),event,true)}
window._currentTT=activator.id
if(ignore_event==true || typeof Tooltip.showEvent=="string" || Tooltip.showEvent.constructor&&Tooltip.showEvent.constructor==Array&&Tooltip.showEvent.contains(event.type)){
activator.Tooltip.isVisible=true
if(Tooltip.autoFollowMouse || Tooltip.autoMoveToCursor){
Tooltip._follow(activator,event)}
try{
if(typeof Effect){
Element.setOpacity(activator.Tooltip,0.1)
activator.Tooltip.style.visibility="visible"
Tooltip.showMethod(activator.Tooltip,{duration:Tooltip.fade})
}else{
activator.Tooltip.style.visibility="visible"}}
catch(e){
try{
activator.Tooltip.style.visibility="visible"}
catch(e){}}
if(Tooltip.autoFollowMouse){
Tooltip._attachEvent(activator,"follow")}
if(Tooltip.autoHideTimeout&&!Tooltip.autoFollowMouse){
activator.timer=setTimeout(function(){
try{
Tooltip.hideMethod(activator.Tooltip,{duration:Tooltip.fade})}
catch(e){
activator.Tooltip.style.visibility="hidden";}
},Tooltip.autoHideTimeout*1000)}
return}
},
_hide: function(activator,event,ignore_event){
if(!activator){
return}
event=event.type
var tooltip=activator.Tooltip
if(event=="mouseout"&&Tooltip.autoFollowMouse){
activator.timer=setTimeout(function(){
try{
Tooltip.hideMethod(tooltip,{duration:Tooltip.fade})}
catch(e){
activator.Tooltip.style.visibility="hidden";}
},Tooltip.autoHideTimeout*1000)
}else if(ignore_event==true ||((typeof Tooltip.hideEvent=="string"&&Tooltip.hideEvent==event)|| Tooltip.hideEvent.constructor&&Tooltip.hideEvent.constructor==Array&&Tooltip.hideEvent.contains(event))){
activator.Tooltip.isVisible=false
try{
Tooltip.hideMethod(tooltip,{duration:Tooltip.fade})}
catch(e){
activator.Tooltip.style.visibility="hidden"}
if(Tooltip.autoFollowMouse){
Tooltip._removeEvent(activator,"follow")}
window._currentTT=false
return}
},
_follow: function(activator,event){
if(activator.timer){
try{
clearTimeout(activator.timer)}
catch(e){}}
var winWidth,winHeight,d=document
if(typeof window.innerWidth!='undefined'){
winWidth=window.innerWidth
winHeight=window.innerHeight
}else{
if(d.documentElement&&typeof d.documentElement.clientWidth!='undefined'&&d.documentElement.clientWidth!=0){
winWidth=d.documentElement.clientWidth
winHeight=d.documentElement.clientHeight
}else{
if(d.body&&typeof d.body.clientWidth!='undefined'){
winWidth=d.body.clientWidth
winHeight=d.body.clientHeight}}}
var tooltipWidth,tooltipHeight
if(activator.Tooltip.currentStyle){
tooltipWidth=activator.Tooltip.currentStyle.width
tooltipHeight=activator.Tooltip.currentStyle.height
}else if(window.getComputedStyle){
tooltipWidth=window.getComputedStyle(activator.Tooltip,null).width
tooltipHeight=window.getComputedStyle(activator.Tooltip,null).height}
activator.Tooltip.style.position="absolute"
if(event.pageY){
var top=event.pageY
var left=event.pageX
}else if(event.clientY){
if(document.body.scrollTop>document.documentElement.scrollTop){
var top=event.clientY+document.body.scrollTop
}else{
var top=event.clientY+document.documentElement.scrollTop}
if(document.body.scrollLeft>document.documentElement.scrollLeft){
var left=event.clientX+document.body.scrollLeft
}else{
var left=event.clientX+document.documentElement.scrollLeft}}
if((left+parseInt(tooltipWidth))>winWidth){
left=winWidth-parseInt(tooltipWidth)*1.2}
activator.Tooltip.style.top=top+"px"
activator.Tooltip.style.left=left+"px"
},
_attachEvent: function(element,event){
var i
var events=new Array()
if(event=="toggle"){
if(Tooltip.showEvent.constructor&&Tooltip.showEvent.constructor==Array){
for(i=0;i<Tooltip.showEvent.length;i++){
events.push(Tooltip.showEvent[i])
if(element.addEventListener){
element.addEventListener(Tooltip.showEvent[i],function(e){Tooltip.toggle(element,e,false);return false;},false)
}else if(element.attachEvent){
element.attachEvent('on'+Tooltip.showEvent[i],function(e){Tooltip.toggle(element,e,false);return false;})}}
}else{
events.push(Tooltip.showEvent)
if(element.addEventListener){
element.addEventListener(Tooltip.showEvent,function(e){Tooltip.toggle(element,e,false);return false;},false)
}else if(element.attachEvent){
element.attachEvent('on'+Tooltip.showEvent,function(e){Tooltip.toggle(element,e,false);return false;})}}
if(Tooltip.hideEvent.constructor&&Tooltip.hideEvent.constructor==Array){
for(i=0;i<Tooltip.hideEvent.length;i++){
if(!events.contains(Tooltip.hideEvent[i])){
events.push(Tooltip.hideEvent[i])
if(element.addEventListener){
element.addEventListener(Tooltip.hideEvent[i],function(e){Tooltip.toggle(element,e,false);return false;},false)
}else if(element.attachEvent){
element.attachEvent('on'+Tooltip.hideEvent[i],function(e){Tooltip.toggle(element,e,false);return false;})}}}
}else{
if(!events.contains(Tooltip.hideEvent)){
events.push(Tooltip.hideEvent)
if(element.addEventListener){
element.addEventListener(Tooltip.hideEvent,function(e){Tooltip.toggle(element,e,false);return false;},false)
}else if(element.attachEvent){
element.attachEvent('on'+Tooltip.hideEvent,function(e){Tooltip.toggle(element,e,false);return false;})}}}
}else if(event=="load"){
if(element.addEventListener){
element.addEventListener("load",function(){Tooltip.setup();},false)
}else if(element.attachEvent){
element.attachEvent('on'+"load",function(){Tooltip.setup();})}
}else if(event=="click"){
if(element.addEventListener){
element.addEventListener("click",function(e){Tooltip.toggle(element,e,true);},false)
}else if(element.attachEvent){
element.attachEvent('on'+"click",function(e){Tooltip.toggle(element,e,true);})}
}else if(event=="follow"){
if(element.addEventListener){
element.addEventListener("mousemove",function(e){Tooltip._follow(element,e);},false)
}else{
element.attachEvent('onmousemove',function(e){Tooltip._follow(element,e);})}
}else if(event=="clickanywhere"){
if(element.addEventListener){
element.addEventListener("click",function(e){Tooltip.toggle(Tooltip.CURRENT_TOOLTIP,e,false);},false)
}else{
element.attachEvent('onclick',function(e){Tooltip.toggle(Tooltip.CURRENT_TOOLTIP,e,false);})}}
},
_removeEvent: function(element,event){
try{
if(event=="follow"){
if(element.addEventListener){
element.removeEventListener("mousemove",function(e){Tooltip._follow(element,e);},false)
}else{
element.dettachEvent('onmousemove',function(e){Tooltip._follow(element,e);})}}}
catch(e){}}}
try{
Tooltip._attachEvent(window,'load')}
catch(e){}