
//
//	gm menu
//	2002/02/26 version
//
var restorePosX=new Array;
var restorePosY=new Array;
var restoreVisibility=new Array;
var layerStatus=new Array;

var isMoving=new Array;
var srcX=new Array;
var srcY=new Array;
var dstX=new Array;
var dstY=new Array;
var lastFrame=new Array;
var currentFrame=new Array;
var timer=new Array;
var	onEndHandler;
var	__onEndTimer;

function MoveLayer(layerID,moveFromX,moveFromY,moveToX,moveToY,msec,onEnd)
{
	onEndHandler=onEnd;
	if( !isMoving[layerID] )
	{
		if( layerStatus[layerID] != "moved" )
		{
			StartMoveLayer(layerID,moveFromX,moveFromY,moveToX,moveToY,msec);
			layerStatus[layerID]="moved";
		}
		else
		{
			StartMoveLayer(layerID,moveFromX,moveFromY,restorePosX[layerID],restorePosY[layerID],msec);
			layerStatus[layerID]="";
		}
	}
}

function StartMoveLayer(layerID,moveFromX,moveFromY,moveToX,moveToY,msec)
{
	var timeSlice=80;
	currentFrame[layerID]=0;
	
	lastFrame[layerID]=Math.ceil( msec/timeSlice );
	if( msec%timeSlice )
		lastFrame[layerID]++;

	var	layerStyle=GetLayerStyle(layerID);
	if( isNaN(moveFromX) ) 
		moveFromX=parseInt( layerStyle.left , 10 );
	if( isNaN(moveFromY) ) 
		moveFromY=parseInt( layerStyle.top , 10 );
//	if( isNaN(moveFromX) ) moveFromX=0;
//	if( isNaN(moveFromY) ) moveFromY=0;
	
	srcX[layerID]=moveFromX;
	srcY[layerID]=moveFromY;
	
	restorePosX[layerID]=srcX[layerID];
	restorePosY[layerID]=srcY[layerID];

	if( layerStatus[layerID]!="moved" )
	{
		restoreVisibility[layerID]=layerStyle.visibility;
//		alert(layerStyle.visibility);
	}
	dstX[layerID]=( isNaN(moveToX) )?srcX[layerID]:moveToX;
	dstY[layerID]=( isNaN(moveToY) )?srcY[layerID]:moveToY;
	
	isMoving[layerID]=true;
	var	alpha=0.2;
//	alert(layerID);
	timer[layerID]=setInterval('LocateLayerAccelerated('+
		alpha +',"' + layerID + '")', timeSlice);
//	alert(t);
//	( timer[layerID] ) =t;
//		alert( timer[layerID] );
}

function LocateLayerAccelerated(alpha,targetLayerID)
{
//	alert(currentFrame[targetLayerID]);
	var layerStyle=GetLayerStyle(targetLayerID);
	currentFrame[targetLayerID]++;
	if( currentFrame[targetLayerID] < lastFrame[targetLayerID] )
	{
//	alert(currentFrame[targetLayerID] + "/"+lastFrame[targetLayerID]);
		var	t=Math.PI * (currentFrame[targetLayerID]/lastFrame[targetLayerID]);
		var	a=Math.cos(t);
		var	p=( 1 + Math.pow( Math.abs(a), alpha ) * ((a>0)?1:-1) ) / 2;
		layerStyle.left=srcX[targetLayerID]*p + dstX[targetLayerID]*(1-p);
//		alert(srcX[targetLayerID]);
//		alert(dstX[targetLayerID]);
		layerStyle.top=srcY[targetLayerID]*p + dstY[targetLayerID]*(1-p);
		layerStyle.visibility="visible";
//		alert(layerStyle.top);
	}
	else
	{
		layerStyle.left=dstX[targetLayerID];
		layerStyle.top=dstY[targetLayerID];
//		alert("end:"+layerStyle.top);
		isMoving[targetLayerID]=false;
//		alert("clsear"+targetLayerID+timer[targetLayerID] );
		clearInterval( timer[targetLayerID] );
		if( layerStatus[targetLayerID]!="moved" )
		{
			layerStyle.visibility=restoreVisibility[targetLayerID];
//			alert( layerStyle.visibility );
		}
		
		if( onEndHandler != null )
		{
			__onEndTimer=setInterval( '__onEndHelper("' + targetLayerID +'")', 0 );
//			onEndHandler(targetLayerID);
		}
//		resizeBy(0,1);
		
	}
}

function __onEndHelper(targetLayerID)
{
//	alert(targetLayerID);
	clearInterval( __onEndTimer );
	onEndHandler(targetLayerID);
}

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

//
// ---- gm menu ends. ----
//

