var xTotalDistance;
var yTotalDistance;
var xDestination;
var yDestination;
var xMoveAmount = 0;
var yMoveAmount = 0;
var xStatus = false;
var yStatus = false;
var done = false;
var yPos;
var xPos;
var jumpRock = false;

function InitVar()
{
	xTotalDistance = 0;
	yTotalDistance = 0;
	xDestination = 0;
	yDestination = 0;
	xMoveAmount = 0;
	yMoveAmount = 0;
	xStatus = false;
	yStatus = false;
	done = false;
	yPos = 0;
	xPos = 0;
}

function SetDestination(idDestination)
{
	var oDestDiv = document.getElementById(idDestination);
	
	xDestination = oDestDiv.offsetLeft;
	yDestination = oDestDiv.offsetTop;
}

function GetPosition()
{
	if(typeof window.pageXOffset != 'undefined' || typeof window.pageYOffset != 'undefined')
	{
		xPos = window.pageXOffset;
		yPos = window.pageYOffset;
		return;
	}

	if(typeof document.documentElement.scrollLeft != 'undefined' || typeof document.documentElement.scrollTop != 'undefined')
	{
		xPos = document.documentElement.scrollLeft;
		yPos = document.documentElement.scrollTop;
		return;
	}
}

function CalcMove()
{
	window.setTimeout('Move()','4');
}

function smoothScroll(idDest)
{
	if(jumpRock == true)
	{
		InitVar();
		SetDestination(idDest);
		window.scrollTo(xDestination, yDestination);
		return 1;
	}
	
	if(xStatus == false && yStatus == false)
	{
		InitVar();
		SetDestination(idDest);
		GetPosition();
		xTotalDistance = (xDestination - xPos);
		yTotalDistance = (yDestination - yPos);
		xStatus = true;
		yStatus = true;
		CalcMove();
		return 1;
	}
}

function Move()
{
	GetPosition();
	
    var xDistancePerInterval = (xDestination - xPos) / 20.0;
    var yDistancePerInterval = (yDestination - yPos) / 20.0;
	
	var dx = 0;
	var dy = 0;
	
	if(xPos > xDestination)
	{
		if(xMoveAmount > xTotalDistance)
		{
			xMoveAmount += xDistancePerInterval;
			dx = xDistancePerInterval;
		}
		else
		{
			xMoveAmount = 0;
			xStatus = false;
		}
	}
	else
	{
		if(xMoveAmount < xTotalDistance)
		{
			xMoveAmount += xDistancePerInterval;
			dx = xDistancePerInterval;
		}
		else
		{
			xMoveAmount = 0;
			xStatus = false;
		}
	}
	
	if(yPos > yDestination)
	{
		if(yMoveAmount > yTotalDistance)
		{
			yMoveAmount += yDistancePerInterval;
			dy = yDistancePerInterval;
		}
		else
		{
			yMoveAmount = 0;
			yStatus = false;
		}
	}
	else
	{
		if(yMoveAmount < yTotalDistance)
		{
			yMoveAmount += yDistancePerInterval;
			dy = yDistancePerInterval;
		}
		else
		{
			yMoveAmount = 0;
			yStatus = false;
		}
	}
	
	if(xStatus == true || yStatus == true)
	{
	    window.scrollBy(dx, dy);
	}

    if(xStatus == false && yStatus == false)
    {
        done = true;
    }

    if(done == false)
	{
	    CalcMove();
	}	
	
	return;
}
