var iDistanceDevider 			= 10;
var intervalTime 				= 10;
var scrollerId 					= "slider";
var isScrolling 				= false;

function getScrollDiv()
{
	return document.getElementById(scrollerId);
}

function enableScrolling()
{
	// log("enable scrolling");
	
	if(isScrolling == false)
	{
		isScrolling = true;
		//showLockPanel();
	}
}

function disableScrolling()
{
	//log("disable scrolling");
	
	if(isScrolling == true)
	{
		isScrolling = false;
		//hideLockPanel();
		//showSliderImage();
	}
}

function scrollToY(y)
{
	scrollDiv = getScrollDiv();
	
	if(isObj(scrollDiv))
	{
		scrollDiv.scrollTop = y;
	}
}

function scrollToX(x)
{
	scrollDiv = getScrollDiv();
	
	if(isObj(scrollDiv))
	{
		scrollDiv.scrollLeft = x;
	}
	/*if(isScrolling == true)
	{
		scrollDiv = getScrollDiv();
		
		if(isObj(scrollDiv))
		{
			scrollLeftPosition = x;
			scrollDiv.scrollLeft = x;
		}
	}*/
}

// @position = up / down - 
// @from = initial value 
// @to = what the value should be

function slideBoxFromTo(sPosition, from, to)
{
	//if(isScrolling == false)
	//{
		//log(sPosition + " " + from + " " + to);
		
		enableScrolling();
		
		_slideBoxFromTo(sPosition, from, to);
	//}
}

function _slideBoxFromTo(sPosition, from, to)
{
	if(isScrolling == true)
	{		
		var iMoveTo = 0; // This can be an X or an Y coordinate
		
		switch(sPosition)
		{
			case 'down':
				if(to > from)
				{
					iMoveTo = from + Math.ceil((to - from) / iDistanceDevider);
					
					if((to - iMoveTo) < 1)
					{
						iMoveTo++;
					}
					
					if(iMoveTo <= to)
					{
						//log('Move down to ' + iMoveTo);
						//log("step " + (iMoveTo - from));
						
						scrollToY(iMoveTo);
						
						if(to > iMoveTo)
						{
							var oCallback = function()
							{
								_slideBoxFromTo(sPosition, iMoveTo, to);
							};
							
							setTimeout(oCallback, intervalTime);
						}
						else
						{
							scrollToY(to);
							disableScrolling();
						}
					}
					else
					{	// End point
						scrollToY(to);
						disableScrolling();
					}
				}
				else
				{
					disableScrolling();
				}
			break;
			case 'up':
				if(to < from)
				{
					iMoveTo = from - Math.ceil((from - to) / iDistanceDevider);
					
					if((iMoveTo - to) < 1)
					{
						iMoveTo--;
					}
					
					if(iMoveTo >= to)
					{
						//log('Move up to ' + iMoveTo);
						
						scrollToY(iMoveTo);
						
						if(to < iMoveTo)
						{
							var oCallback = function()
							{
								_slideBoxFromTo(sPosition, iMoveTo, to);
							};
							
							setTimeout(oCallback, intervalTime);
						}
						else
						{
							scrollToY(to);
							disableScrolling();
						}
					}
					else
					{	// End point
						scrollToY(to);
						disableScrolling();
					}
				}
				else
				{
					disableScrolling();
				}
			break;
			case 'left':
				if(to < from)
				{
					iMoveTo = from - Math.ceil((from - to) / iDistanceDevider);
					
					if((iMoveTo - to) < 1)
					{
						iMoveTo--;
					}
					
					if(iMoveTo >= to)
					{
						//log('Move up to ' + iMoveTo);
						
						scrollToX(iMoveTo);
						
						if(to < iMoveTo)
						{
							var oCallback = function()
							{
								_slideBoxFromTo(sPosition, iMoveTo, to);
							};
							
							setTimeout(oCallback, intervalTime);
						}
						else
						{
							scrollToX(to);
							disableScrolling();
						}
					}
					else
					{	// End point
						scrollToX(to);
						disableScrolling();
					}
				}
				else
				{
					disableScrolling();
				}
			break;
			case 'right':
				if(to > from)
				{
					iMoveTo = from + Math.ceil((to - from) / iDistanceDevider);
					
					if((to - iMoveTo) < 1)
					{
						iMoveTo++;
					}
					
					if(iMoveTo <= to)
					{
						//log('Move down to ' + iMoveTo);
						//log("step " + (iMoveTo - from));
						
						scrollToX(iMoveTo);
						
						if(to > iMoveTo)
						{
							var oCallback = function()
							{
								_slideBoxFromTo(sPosition, iMoveTo, to);
							};
							
							setTimeout(oCallback, intervalTime);
						}
						else
						{
							scrollToX(to);
							disableScrolling();
						}
					}
					else
					{	// End point
						scrollToX(to);
						disableScrolling();
					}
				}
				else
				{
					disableScrolling();
				}
			break;
		}
	}
}