﻿// 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 SlidingTooltip(id,isAnimated,aniSpeed,initialXOffset, initialYOffset, postFunctionCall)
{ 
	var isInit = -1;
	var div,divWidth,divHeight;
	var xincr=10,yincr=10;
	var animateToolTip =false;
	var html;
	var initXOffset = initialXOffset;
	var initYOffset = initialYOffset;
	var postFunction = postFunctionCall;

	function Init(id)
	{
		div = document.getElementById(id);
		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++; 
	}


	this.Show =  function(e, dir)
	{
		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 curPosx = (e.x)?parseInt(e.x):parseInt(e.clientX);
		var curPosy = (e.y)?parseInt(e.y):parseInt(e.clientY);
		
		//alert(curPosx + ' -- ' + curPosy);

		/*if(strHTML!=null)
		{html = strHTML;
		div.innerHTML=html;}*/

		if (!(dir))
		{
			//alert(curPosx + ' - ' + divWidth);
			if (curPosx < divWidth)
			dir = "lr";
			else
			dir = "rl";
		}
		//alert(dir);
		if (!((curPosx+divWidth+10)< width))
			dir = "rl";
		//alert(dir);
		if(((curPosx+divWidth+10)< width) || (dir == "rl"))
			newPosx= curPosx+10;
		else
			newPosx = curPosx-divWidth;

		if(((curPosy+divHeight)< height) || (dir == "rl"))
			newPosy= curPosy;
		else
			newPosy = curPosy-divHeight-10;

		if (dir == "lr")
		{
			if(window.pageYOffset)
			{ 
				newPosy= newPosy+ window.pageYOffset;
				newPosx = newPosx + window.pageXOffset;
			}
			else
			{
				newPosy= newPosy+ document.body.scrollTop;
				newPosx = newPosx + document.body.scrollLeft;
			}
			
			newPosy = newPosy + initYOffset;
			newPosx = newPosx + initXOffset;
		}

		//debugger;
		//alert(document.body.scrollTop);
		

		//div.focus();
		if(animateToolTip)
		{
			div.style.height= "0px";
			div.style.width= "0px";
			
			var parentOffsetX = 0;
			var parentOffsetY = 0;
			
			if (div.parentNode.style.position == "absolute")
			{
				parentOffsetX = -(parseInt(div.parentNode.style.left));
				parentOffsetY = -(parseInt(div.parentNode.style.top));
			}
			
			div.style.top= newPosy - 28 + "px";
			div.style.left= newPosx + "px";
			
			//alert(div.style.top + ' == ' + parentOffsetY);

			SlidingTooltip.animate(div.id,divHeight,divWidth,newPosy,newPosx,dir,parentOffsetX,parentOffsetY);
		}
		else
		{
			div.style.top= newPosy + "px";
			div.style.left= newPosx+ "px";
		}
	}

	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;
	}

	SlidingTooltip.animate = function(a,iHeight,iWidth,iTop,iLeft,dir,iOffsetX,iOffsetY)
	{ 
		a = document.getElementById(a);

		if (dir == "lr")
		{
			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 (iOffsetX != 0)
			{
				a.style.left = (iLeft + iOffsetX) + "px";
			}
			
			a.style.display = 'block';

			if(!((i > iWidth) && (j > iHeight)))      
				setTimeout( "SlidingTooltip.animate('"+a.id+"',"+iHeight+","+iWidth+","+iTop+","+iLeft+",'"+dir+"'," + iOffsetX + "," + iOffsetY + ")",1);
			else
			{
				a.focus();
			
				if (postFunction != null)
				{
					postFunction();
				}	
			}
		}
		else
		{
			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";
			}

			var s = parseInt(parseInt(a.style.width) / xincr);
			if (iOffsetX == 0)
				a.style.left = (iLeft - parseInt(a.style.width) - s) + "px";
			else
				a.style.left = (iLeft - parseInt(a.style.width) - s) + iOffsetX + "px";
			
			//if (iOffsetY != 0)
			//	a.style.top = iTop + iOffsetY + "px";
				
			a.style.display = 'block';

			if(!((i > iWidth) && (j > iHeight) ))      
				setTimeout( "SlidingTooltip.animate('"+a.id+"',"+iHeight+","+iWidth+","+iTop+","+iLeft+",'"+dir+"'," + iOffsetX + "," + iOffsetY + ")",1);
			else
			{
				a.focus();
				
				if (postFunction != null)
				{
					postFunction();
				}
			}
			//else
			//	alert(iLeft + ' -- ' + iTop + ' -- ' + a.style.left);
		}
	}

	Init(id);
}

