function animate(elementID, newLeft, newTop, newWidth, newHeight, time, callback)
{	
	var el = document.getElementById(elementID);
	
	if(el == null)
		return;

	el.style.visibility='visible';
	
	var cLeft = parseInt(el.style.left);
	var cTop = parseInt(el.style.top);
	var cWidth = parseInt(el.style.width);
	var cHeight = parseInt(el.style.height);

	var totalFrames = 1;
	if(time> 0)
		totalFrames = time/40;

	var fLeft = newLeft - cLeft;
	if(fLeft != 0)
		fLeft /= totalFrames;

	var fTop = newTop - cTop;
	if(fTop != 0)
		fTop /= totalFrames;

	var fWidth = newWidth - cWidth;
	if(fWidth != 0)
		fWidth /= totalFrames;

	var fHeight = newHeight - cHeight;
	if(fHeight != 0)
		fHeight /= totalFrames;

	doFrame(elementID, cLeft, newLeft, fLeft, 
		cTop, newTop, fTop, cWidth, newWidth, fWidth, 
		cHeight, newHeight, fHeight, callback);
}

function doFrame(eID, cLeft, nLeft, fLeft,
	cTop, nTop, fTop, cWidth, nWidth, fWidth, 
	cHeight, nHeight, fHeight, callback)
{	
	var el = document.getElementById(eID);
	if(el == null)
		return;

	cLeft = moveSingleVal(cLeft, nLeft, fLeft);
	cTop = moveSingleVal(cTop, nTop, fTop);
	cWidth = moveSingleVal(cWidth, nWidth, fWidth);
	cHeight = moveSingleVal(cHeight, nHeight, fHeight);
	
	el.style.left = Math.round(cLeft) + 'px';
	el.style.top = Math.round(cTop) + 'px';
	el.style.width = Math.round(cWidth) + 'px';
	el.style.height = Math.round(cHeight) + 'px';

	if(cLeft == nLeft && cTop == nTop && cHeight == nHeight 
		&& cWidth == nWidth)
	{
		if(callback != null)
			callback();
		return;
	}

	setTimeout( 'doFrame("'+eID+'",'+cLeft+','+nLeft+','+fLeft+','
		+cTop+','+nTop+','+fTop+','+cWidth+','+nWidth+','+fWidth+','
		+cHeight+','+nHeight+','+fHeight+','+callback+')', 40);
}

function moveSingleVal(currentVal, finalVal, frameAmt)
{
	if(frameAmt == 0 || currentVal == finalVal)
		return finalVal;

	currentVal += frameAmt;
	if((frameAmt> 0 && currentVal>= finalVal) 
		|| (frameAmt <0 && currentVal <= finalVal))
	{
		return finalVal;
	}
	return currentVal;
}