var followDivName = 'followDiv'; // div that is to follow the mouse
                       // (must be position:absolute)
var offX = 15;          // X offset from mouse position
var offY = 15;          // Y offset from mouse position

function mouseX(evt)
{
	if (!evt)
		evt = window.event;
	if (evt.pageX)
		return evt.pageX;
	else if (evt.clientX)
		return evt.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
	else return 0;
}

function mouseY(evt)
{
	if (!evt)
		evt = window.event;
	if (evt.pageY)
		return evt.pageY;
	else if (evt.clientY)
		return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
	else return 0;
}

function follow(evt)
{
	if (document.getElementById)
	{
		var obj = document.getElementById(followDivName).style;
		
		if (milliseconds > 0 &&
			new Date().getTime() - milliseconds > timeout)
		{
			obj.visibility = 'hidden';
		}
		else
		{
			obj.left = (parseInt(mouseX(evt))+offX) + 'px';
			obj.top = (parseInt(mouseY(evt))+offY) + 'px';
		}
	}
}

function startFollow(divName)
{
	if (followTimerID)
		clearTimeout(followTimerID);
	followTimerID = 0;
	milliseconds = 0;
		
	followDivName = divName;
	var obj = document.getElementById(followDivName).style;
	obj.visibility = 'visible';
	document.onmousemove = follow;
}

// Do not stop immediately so that a jump over a border of a cell does not make it flicker
var followTimerID = 0;
var milliseconds = 0;
var timeout = 50;

function stopFollow()
{
	// The timeout function is not started when the user moves the mouse constantly
	// so a second mechanism is used to hide the div in this case - in the 
	// mouse move event
	followTimerID = setTimeout("timerStopFollow()", timeout);
	milliseconds = new Date().getTime();
}

function timerStopFollow()
{
	if (followTimerID)
		clearTimeout(followTimerID);
	followTimerID = 0;
	milliseconds = 0;
	
	var obj = document.getElementById(followDivName).style;
	obj.visibility = 'hidden';
}