// Free for any type of use so long as original notice remains unchanged. // Report errors to feedback@ashishware.com //Copyrights 2006, Ashish Patil , ashishware.com ////////////////////////////////////////////////////////////////////////// function ToolTip(id,iframeId,isAnimated,aniSpeed) { var isInit = -1; var div,divWidth,divHeight; var iframeElement; var xincr=10,yincr=10; var xOffset=-10,yOffset=20; var animateToolTip =false; var html; function Init(id) { div = document.getElementById(id); iframeElement = document.getElementById( iframeId ); if(div==null) return; if((div.style.width=="" || div.style.height=="")) {alert("Both width and height must be set"); return;} divWidth = parseInt(div.style.width); divHeight= parseInt(div.style.height); //if(div.style.overflow!="hidden")div.style.overflow="hidden"; if(div.style.display!="none")div.style.display="none"; if(div.style.position!="absolute")div.style.position="absolute"; if(isAnimated && aniSpeed>0) {xincr = parseInt(divWidth/aniSpeed); yincr = parseInt(divHeight/aniSpeed); animateToolTip = true; } isInit++; } function getPosition(e) { var cursor = {x:0, y:0}; var de = document.documentElement; var b = document.body; // If e is null, just return 0,0 if( e == null ) { return cursor; } trace( '(e.pageX,e.pageY)=(' + e.pageX + ',' + e.pageY + ')' ); trace( '(e.clientX,e.clientY)=(' + e.clientX + ',' + e.clientY + ')' ); trace( '(de.scrollLeft,de.scrollTop)=(' + de.scrollLeft + ',' + de.scrollTop + ')' ); trace( '(b.scrollLeft,b.scrollTop)=(' + b.scrollLeft + ',' + b.scrollTop + ')' ); trace( '(de.clientLeft,de.clientTop)=(' + b.clientLeft + ',' + b.clientTop + ')' ); if (e.pageX || e.pageY) { // Use clientX and clientY for Firefox (with adjustment) cursor.x = e.clientX - 10; cursor.y = e.clientY - 20; trace( 'Using clientX, clientY' ); } else { cursor.x = e.clientX + (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0); cursor.y = e.clientY + (de.scrollTop || b.scrollTop) - (de.clientTop || 0); trace( 'Using clientX, clientY and scroll' ); } if( iframeElement != null ) { var iframePos = getElementPosition( iframeElement ); cursor.x += iframePos.x - (de.scrollLeft || b.scrollLeft); cursor.y += iframePos.y - (de.scrollTop || b.scrollTop); } trace( '(cursor.x, cursor.y)=(' + cursor.x + ',' + cursor.y + ')' ); return cursor; } function getElementPosition(element){ var pos = {x:0, y:0}; if (element.offsetParent) { while (element.offsetParent) { pos.x += element.offsetLeft; pos.y += element.offsetTop; element = element.offsetParent; } } else if (element.x){ pos.x = element.x; pos.y = element.y; } return pos; } this.Show = function(e,strHTML) { if(isInit<0) return; var newPosx,newPosy,height,width; if( typeof( document.documentElement.clientWidth ) == 'number' ){ width = document.body.clientWidth; height = document.body.clientHeight; } else { width = parseInt(window.innerWidth); height = parseInt(window.innerHeight); } var cursor = getPosition(e); var curPosx = cursor.x + xOffset; var curPosy = cursor.y + yOffset; if(strHTML!=null) { html = strHTML; div.innerHTML=html; } if( ( curPosx + divWidth + 10 ) < width ) newPosx= curPosx + 10; else newPosx = curPosx-divWidth; if( ( curPosy + divHeight ) < height ) newPosy= curPosy; else newPosy = curPosy - divHeight - 10; if( window.pageYOffset ) { newPosy = newPosy + window.pageYOffset; newPosx = newPosx + window.pageXOffset; } else { newPosy = newPosy + document.body.scrollTop; newPosx = newPosx + document.body.scrollLeft; } div.style.display='block'; //debugger; //alert(document.body.scrollTop); div.style.top = newPosy + "px"; div.style.left = newPosx+ "px"; div.focus(); if( animateToolTip ) { div.style.height = "0px"; div.style.width = "0px"; ToolTip.animate(div.id,divHeight,divWidth); } } this.Hide= function(e) { div.style.display='none'; if(!animateToolTip)return; div.style.height= "0px"; div.style.width= "0px"; } this.SetHTML = function(strHTML){ html = strHTML; div.innerHTML=html; } ToolTip.animate = function(a,iHeight,iWidth){ a = document.getElementById(a); var i = parseInt(a.style.width)+xincr ; var j = parseInt(a.style.height)+yincr; if(i <= iWidth) {a.style.width = i+"px";} else {a.style.width = iWidth+"px"; } if(j <= iHeight) { a.style.height = j+"px"; } else { a.style.height = iHeight+"px"; } if(!((i > iWidth) && (j > iHeight))) setTimeout( "ToolTip.animate('"+a.id+"',"+iHeight+","+iWidth+")",1); } Init(id); }