/**
 * @author     Sebastian Kroll <sek@basecom.eu>
 * @package    showroom
 */

var shItems = 0;
var shItemWidth = 100;
var shCurrentItem = 0;
var shScrollerHandle = null;
var shPickerHandle = null;
var shInterval = 1000;
var shDuration = 1000;
var shRestartAfter = 5000;
var shTimerActive = false;
var shDotsHandle = null;
var shTLRoot = '';
var shTimeoutHandle = null;
var shFX = null;
var shDotActive = '/system/modules/showroom/resources/shDotActive.png';
var shDot = '/system/modules/showroom/resources/shDot.png';
var shFreehand = null;
var shMouseX = null;
var shCurX = null;
var shLastX = null;
var shScrollerX = null;
var shAnimationActive = false;
var shOverScroll = false;

function shInit(items,width,scroller,picker,interval,duration,restartafter,tlroot,enableSwipe)
{
	shItems = items;
	shItemWidth = width;
	shCurrentItem = 0;
	shScrollerHandle = scroller;
	shPickerHandle = picker;
	shInterval = interval;
	shDuration = duration;
	shRestartAfter = restartafter;
	shTimerActive = false;
    shTLRoot = tlroot;	
	shFreehand = false;	
	shMouseX = 0;	
	shAnimationActive = false;	
	
	shFX = new Fx.Morph(shScrollerHandle, {duration: shDuration, transition: Fx.Transitions.Sine.easeOut, onComplete: function() { reset(); }});	
	
	if ($(shPickerHandle)!= null)
	{
		$$('#'+shPickerHandle+' td.left-button a').fade('hide');	
		
		shDotsHandle = $$('#'+shPickerHandle+' a.shDot');
		shDotsHandle[0].getFirst().src = shTLRoot+shDotActive;
		
		for (var _i=0;_i < shDotsHandle.length;_i++)
		{			
			shDotsHandle[_i].addEvent('click', function(e) {
				shScrollTo($(this).rel);	
			});
		} 
	}
	
	if (enableSwipe==true)
	{
		var _shWindow = $(shScrollerHandle).getParent();
		
		_shWindow.onmousedown=function(e) {
			if (!shAnimationActive)
			{	
				var evt=window.event || e;
				shFreehand = true;
				if (shFX != null) {
					shFX.cancel();
				}
				shCurX = evt.clientX;
				shLastX = evt.clientX;
				shMouseX = evt.clientX;
				shScrollerX = $(shScrollerHandle).getStyle('left');
			}
			return false;
		};
		
		_shWindow.onmouseout=function(e){
		
			if (shFreehand == true)
			{
				var evt=window.event || e;
				shFreehand = false;
			
				shCalcTargetPos(evt.clientX,shLastX);	
			}
		}
		
		_shWindow.onmouseup=function(e) {
			if (shFreehand == true)
			{	
				var evt=window.event || e;
				shFreehand = false;
			
				shCalcTargetPos(evt.clientX,shLastX);
			}
			
			return false;
		};	

		_shWindow.onmousemove=function(e) {
			var evt=window.event || e;
			shLastX = shCurX;
			shCurX = evt.clientX;
			shFreehandMove(evt);			
			return false;
		};
	}	
}

function shCalcTargetPos(cur,last)
{
	var _sPos = $(shScrollerHandle).getStyle('left').toInt();
	var _c = Math.round(_sPos/(0-shItemWidth));
	if (Math.abs(cur-last) < 5) { 		
	}
	else if  (Math.abs(cur-last) < 30)
	{
		if (cur-last > 0) {
			_c = _c-1;	}
		else {
			_c = _c+1; }
	}
	else
	{
		if (cur-last > 0) {
			_c = _c-2; }
		else {
			_c = _c+2; }
	}	
	_c = Math.max(0,Math.min(_c,shDotsHandle.length-1));
		
	shScrollTo(_c);	
	return _c;
}

function shFreehandMove(evt)
{
	if (shFreehand == true)
	{
		shTimerActive = false;
		window.clearTimeout(shTimeoutHandle);
		window.clearInterval(shTimeoutHandle);		

		if (shFX != null) {
			shFX.cancel();
		}

		shTimeoutHandle = window.setTimeout('shStart()',shRestartAfter);
		$(shScrollerHandle).setStyle('left',Math.min(0,Math.max(0-((shDotsHandle.length-1)*shItemWidth),shScrollerX.toInt()-(shMouseX-evt.clientX))));		
		shMouseXLast = evt.clientX;
	}
}
function shStart()
{
	shTimerActive = true;	
	shTimeoutHandle = window.setInterval('shScroll(null)',shInterval);
}

function shStop()
{
	shTimerActive = false;
	window.clearInterval(shTimeoutHandle);
}

function shScrollBack()
{
	shScrollTo(Math.max(shCurrentItem-1,0));
}

function shScrollForward()
{
	shScrollTo(Math.min(shCurrentItem+1,shItems-1));
}

function shScrollTo(index)
{
	shTimerActive = false;
	window.clearTimeout(shTimeoutHandle);
	window.clearInterval(shTimeoutHandle);
	
	if (shFX != null) {
		shFX.cancel();
	}
	
	shScroll(index);	
	shTimeoutHandle = window.setTimeout('shStart()',shRestartAfter);
}

function shScroll(index)
{
	shOverScroll = false;
	
	if (shScrollerHandle != null)
	{
		var _shNewItem;	
		if (index !== null)
		{		
			_shNewItem = index;
			shOverScroll = false;
		}
		else
		{				
			if (shCurrentItem == (shItems-1)) {
				_shNewItem = 0;
				shOverScroll = parseInt(shCurrentItem)+1;	}				
			else {
				_shNewItem = parseInt(shCurrentItem)+1;
				shOverScroll = false; }
		}

		if ($(shPickerHandle)!= null)
		{
			shDotsHandle[shCurrentItem].getFirst().src = shTLRoot+shDot;
			shDotsHandle[_shNewItem].getFirst().src = shTLRoot+shDotActive;			
		}
			 
		if (shOverScroll !== false)
		{
			shAnimationActive = true;				
			shFX.start({
			    'left': [$(shScrollerHandle).getStyle('left'), 0-(shOverScroll*shItemWidth)]				
			});				
		}
		else
		{
			shAnimationActive = true;				
			shFX.start({
			    'left': [$(shScrollerHandle).getStyle('left'), 0-(_shNewItem*shItemWidth)]
			});			
		}	
		shCurrentItem = _shNewItem;		
		
		if ($(shPickerHandle)!= null)
		{
			if (_shNewItem == 0)
			{
				$$('#'+shPickerHandle+' td.left-button a').fade('out');
			}
			else
			{
				$$('#'+shPickerHandle+' td.left-button a').fade('in');
			}	
			
			if (_shNewItem == (shDotsHandle.length-1))
			{
				$$('#'+shPickerHandle+' td.right-button a').fade('out');
			}
			else
			{
				$$('#'+shPickerHandle+' td.right-button a').fade('in');
			}
		}		
	}
}

function reset()
{
	shAnimationActive = false;				
	if (shOverScroll !== false)
	{
		$(shScrollerHandle).setStyle('left',0);
	}
}	

