var toScrollDown = null;
var toScrollUp = null;
var iGlobalPanelWidth = 0;

var scroller = function() {
	var currentPosition = 0;
	var lock;

	var sinoidal = function(val) {
	  return (-Math.cos(val * Math.PI) / 2) + 0.5;
	}

	var scroll = function(index) {
		var totalOffset = index * scroller.scrollPanelWidth;
		var desiredOffset = totalOffset - currentPosition;
		var scrollee = $(scroller.scrollPanel);
		var tick = scroller.scrollTime / scroller.ticks;
		var timeIndex = 0;
		var inter;

		function animate() {
			timeIndex += tick;
			var delta = sinoidal(timeIndex / scroller.scrollTime) * desiredOffset;
			if (timeIndex > scroller.scrollTime) {
				clearInterval(inter);
				currentPosition = scrollee.scrollLeft;
				lock = false;
				return;
			}
			scrollee.scrollLeft = currentPosition + delta;
		}

		inter = setInterval(function() { animate(); }, tick);
	}

	var getScrollLinks = function() {
		var links = $$('a[rel=scroll]');
		links.each(function(elem, index) {
			elem.observe('click', function() {
				if (lock) {
					return;
				}
				lock = true;
				scroll(index);
			});
		});
	};

	return {
		scrollTime: 0,
		ticks: 0,
		scrollPanel: '',
		scrollPanelWidth: 0,

		init: function(panel, duration, frames, panelWidth) {
			scroller.scrollPanel = panel;
			scroller.scrollTime = duration || 500;
			scroller.ticks = frames || 32;
			scroller.scrollPanelWidth = panelWidth || iGlobalPanelWidth;
			getScrollLinks();
		},

		doScroll: function(index) {
			scroll(index-1);
		}
	};
}();
