/*
* Up-Down Scroll
* @Author: Alexander Gavazov
* @Date: 2007-11-22
*/

function UpDown(containerId, contentId, inControlId, outControlId, moveStep, duration, upOffset)
{
	// Vars
	var duration = duration;
	var moveStep = moveStep;
	var container = document.getElementById(containerId);
	var content = document.getElementById(contentId);
	var inControl = document.getElementById(inControlId);
	var outControl = document.getElementById(outControlId);
	var Calculator = new Tween;
	var moveFunction = Tween.strongEaseOut;

	var upOffset = upOffset;
	var goToPosition = 0;

	var properties = {
		containerSize: 0,
		contentSize: 0,
		contentPosition: 0,
		contentRouteSize: 0
	};


	// Init
	init()

	// Functions
	function init()
	{
		elementProperties();

		setControls();

		Calculator.onMotionChanged = onChange;

		goToPosition = properties.contentPosition;

		setArrowStyle('out', 'end');
	}

	function elementProperties()
	{
		properties.containerSize = container.offsetHeight;
		properties.contentSize = content.offsetHeight;

		properties.contentRouteSize = properties.containerSize - properties.contentSize;

		properties.contentPosition = (parseInt(content.style.bottom)) ? parseInt(content.style.bottom) : 0;
	}

	function setControls()
	{
		inControl.onclick = moveIn;
		outControl.onclick = moveOut;
	}

	function calculateGoToPosition(destination)
	{
		properties.contentPosition = (Calculator._pos) ? Calculator._pos : 0;

		if(destination == 'in')
		{
			goToPosition = goToPosition - moveStep;

			if(goToPosition <= properties.contentRouteSize - upOffset)
			{
				goToPosition = properties.contentRouteSize - upOffset;
				setArrowStyle('in', 'end');
			}
			else
			{
				setArrowStyle('in', 'continue');
			}
		}
		else if(destination == 'out')
		{
			goToPosition = goToPosition + moveStep;

			if(goToPosition >= 0)
			{
				goToPosition = 0;
				setArrowStyle('out', 'end');
			}
			else
			{
				setArrowStyle('out', 'continue');
			}
		}
	}

	function onChange(evt)
	{
	}

	function moveIn()
	{
		calculateGoToPosition('in');
		Calculator.init(content.style, 'bottom', moveFunction, properties.contentPosition, goToPosition, duration, 'px');
		Calculator.start();
	}

	function moveOut()
	{
		calculateGoToPosition('out');
		Calculator.init(content.style, 'bottom', moveFunction, properties.contentPosition, goToPosition, duration, 'px');
		Calculator.start();
	}

	function setArrowStyle(destination, action)
	{
		if(destination == 'in' && action == 'end')
		{
			thisSetOpacity(inControl, 40);
			inControl.style.cursor = 'default';
			thisSetOpacity(outControl, 100);
			outControl.style.cursor = 'pointer';
		}
		else if(destination == 'out' && action == 'continue')
		{
			thisSetOpacity(inControl, 100);
			inControl.style.cursor = 'pointer';
		}
		else if(destination == 'out' && action == 'end')
		{
			thisSetOpacity(outControl, 40);
			outControl.style.cursor = 'default';
			thisSetOpacity(inControl, 100);
			inControl.style.cursor = 'pointer';
		}
		else if(destination == 'in' && action == 'continue')
		{
			thisSetOpacity(outControl, 100);
			outControl.style.cursor = 'pointer';
		}
	}

	function thisSetOpacity(element, opacity)
	{
		element.style['opacity'] = opacity / 100;
		if(element.filters)
		{
			element.style.filter = 'alpha(opacity=' + opacity + ')';
		}
	}
}
