var restorePosX=new Array;
var restorePosY=new Array;
var layerStatus=new Array;

var isMoving;
var targetLayerID;
var srcX,srcY,dstX,dstY;
var lastFrame;
var currentFrame;
var timerID;

function MoveLayer(layerID,moveFromX,moveFromY,moveToX,moveToY,msec)
{
	if( !isMoving )
	{
		if( layerStatus[layerID] != "moved" )
		{
			StartMoveLayer(layerID,moveFromX,moveFromY,moveToX,moveToY,msec);
			layerStatus[layerID]="moved";
		}
		else
		{
			var	layerStyle=GetLayerStyle(layerID);
			moveFromX=parseInt( layerStyle.left , 10 );
			moveFromY=parseInt( layerStyle.top , 10 );
			StartMoveLayer(layerID,moveFromX,moveFromY,restorePosX[layerID],restorePosY[layerID],msec);
			layerStatus[layerID]="";
		}
	}
}

function StartMoveLayer(layerID,moveFromX,moveFromY,moveToX,moveToY,msec)
{
	var timeSlice=60;
	targetLayerID=layerID;
	currentFrame=0;
	
	lastFrame=Math.ceil( msec/timeSlice );
	if( msec%timeSlice )
		lastFrame++;
	
	srcX=moveFromX;
	srcY=moveFromY;
	
	restorePosX[layerID]=srcX;
	restorePosY[layerID]=srcY;
	
	dstX=( isNaN(moveToX) )?srcX:moveToX;
	dstY=( isNaN(moveToY) )?srcY:moveToY;
	
	isMoving=true;
	timerID=setInterval('LocateLayerAccelerated(0.2)',timeSlice);
}

function LocateLayerAccelerated(alpha)
{
	var layerStyle=GetLayerStyle(targetLayerID);
	currentFrame++;
	if( currentFrame < lastFrame )
	{
		var	t=Math.PI * (currentFrame/lastFrame);
		var	a=Math.cos(t);
		var	p=( 1 + Math.pow( Math.abs(a), alpha ) * ((a>0)?1:-1) ) / 2;
		layerStyle.left=srcX*p + dstX*(1-p);
		layerStyle.top=srcY*p + dstY*(1-p);
		layerStyle.visibility="visible";
	}
	else
	{
		layerStyle.left=dstX;
		layerStyle.right=dstY;
		isMoving=false;
		clearInterval(timerID);
	}
}

function GetLayerStyle(layerID)
{
	var s;
	if( navigator.appVersion.search( "(MS)?IE" ) > -1 )
		s=document.all[layerID].style;
	else
	{
		var d=document.getElementsByTagName("div");
		s=d[layerID].style;
	}
	return s;
}

