var scrolling = new Array();

function fn_fade(elem, ease, amount_x, amount_y, time, func)
{
	if(!scrolling[elem])
	{
		scrolling[elem] = true;
		fn_fade_elem(elem, ease, amount_x, amount_y, time, func);
	}
}

function fn_fade_elem(elem, ease, amount_x, amount_y, time, func, step, org_x, org_y)
{
	var obj = getObject(elem);
	
	// actual position
	if(org_x === undefined || org_y === undefined)
	{
		org_x = stripPx(obj.style.left);
		org_y = stripPx(obj.style.top);
	}
	
	// MAX_STEPS NOW "1", WAS "15"
	var max_steps = 1;
	var time_step = Math.ceil(time / max_steps);
	if(step === undefined)
	{
		step = 1;
	}
	
	if(step <= max_steps)
	{
		if(ease == "out")
		{
			var delta = 90 / max_steps;
			var angle = Math.pow(Math.sin((2 * Math.PI * step * delta) / 360), 0.7);
		}
		else if(ease == "in")
		{
			var delta = 90 / max_steps;
			var angle = Math.pow(Math.sin(((2 * Math.PI * step * delta) / 360) - (Math.PI/2)) + 1, 2);
		}
		else if(ease == "in_out")
		{
			var delta = 180 / max_steps;
			var angle = (Math.sin(((2 * Math.PI * step * delta) / 360) - (Math.PI/2)) + 1) / 2;
		}
		if(amount_x != 0)
		{
			var move_x = angle * amount_x;
			obj.style.left = parseInt(org_x) + Math.ceil(move_x) + 'px'; 
		}
		if(amount_y != 0)
		{
			var move_y = angle * amount_y;
			obj.style.top = parseInt(org_y) + Math.ceil(move_y) + 'px'; 
		}
		step++;
		setTimeout('fn_fade_elem(\'' + elem + '\', \'' + ease + '\', \'' + amount_x + '\', \'' + amount_y + '\', \'' + time + '\', \'' + func + '\', \'' + step + '\', \'' + org_x + '\', \'' + org_y + '\')', time_step);
		return true;
	}
	else
	{
		scrolling[elem] = false;

		if(func != "undefined")
		{
			eval(func);
		}
	}
	return true;
}
