var slider = getBounds(document.getElementById("slider"));
var imageLinks = new Array();
var thumbWidth = 174;
var centeredIndex = null;
var offset = 0;
var currentSpeed = 0;
var speed = null;
var slowDown = null;
var currentMoveId = 0;
var overImage = false;

function initializeSlider()
{
	var links = slider.getElementsByTagName('A');
	var length = links.length;

	for (var i = 0; i < length; i++)
	{
		if(links[i].className == 'active')
		{
			centeredIndex = i;
			continue;
		}
	}

	if (length > 3) {
	    slider.onmouseover = function(event) { return start(event); };
	    slider.onmousemove = function(event) { return move(event); };
	    slider.onmouseout = function(event) { return stop(event); };
	}
	else {
	    centeredIndex = (length - 1) / 2;
	}

	if (centeredIndex != null) offset = ((slider.clientWidth - thumbWidth) / 2) - (centeredIndex * thumbWidth);
	
	for (var i = 0; i < length; i++)
	{
		links[i].left = ((i * thumbWidth) + offset);
		links[i].style.left = ((i * thumbWidth) + offset) + "px";
		imageLinks[i] = links[i];
	}
}

var speedMultiplier = 2;
var multiplier = speedMultiplier * 20 / slider.clientWidth;
var addition = -slider.left * multiplier - 10 * speedMultiplier;

function getSpeed(evt) {

	if (!evt) var evt = window.event;
    
	speed = multiplier * (evt.clientX + document.body.scrollLeft) + addition;
		
	if (Math.abs(speed) < 2) {
		speed = 0;
	}
	
    return speed * -1;
}

function getBounds(element)
{
	var e = element;
	var curleft = curtop = 0;

	do
	{
		curleft += e.offsetLeft;
		curtop += e.offsetTop;
	}
	while (e = e.offsetParent);

	element.left 		= curleft;
	element.top 		= curtop;
	element.right		= element.left + element.offsetWidth;
	element.bottom 		= element.top + element.offsetHeight;
	
	return element;
}

function start(evt) {slowDown = null;}

function stop(event)
{
	if (!event) 	event = window.event;
	
	var temp_x, temp_y;
	
	if (event.pageX || event.pageY)
	{
		temp_x = event.pageX;
		temp_y = event.pageY;
	}
	else if (event.clientX || event.clientY)
	{
		temp_x = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		temp_y = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}

	if(temp_x < slider.left || temp_x > slider.right || temp_y < slider.top || temp_y > slider.bottom)
	{
		slowDown = speed;
		speed = null;
	}
}

function move(evt)
{
	if (speed)	speed = getSpeed(evt);
	else
	{
		speed = getSpeed(evt);
		doMove(++currentMoveId);
	}
}

function getRelativePos(obj)
{
	var isIE = navigator.appName.indexOf("Microsoft") != -1;
	var offset_left = 0;
    var offset_top = 0;

    while (obj != null)
	{
        offset_left += obj.offsetLeft;
		offset_top += obj.offsetTop;
		obj = isIE ? obj.parentElement : obj.offsetParent;
    }

	return [offset_left, offset_top];
}

var centerImageLeft = (slider.clientWidth - thumbWidth) / 2;
var centerImageRight = (slider.clientWidth + thumbWidth) / 2;
var max = 8;

function doMove(moveId)
{
	if (moveId != currentMoveId) {
		return;
	}

	var actualSpeed = speed;
       
	//slowdown
    if (!actualSpeed)
    {
		if (slowDown)
		{
        	if (Math.abs(slowDown) < 0.5)
        	{
            	slowDown = 0;
            }
            else
           	{
            	slowDown *= 0.9;
                actualSpeed = slowDown;
            }
       	}
    }

    if (actualSpeed) 
    {
		var change = actualSpeed;

		//Stop at center
		if (imageLinks[0].left + actualSpeed >= centerImageLeft && actualSpeed > 0)
		{
			change = centerImageLeft - imageLinks[0].left;
		}
		else if (imageLinks[imageLinks.length - 1].left + thumbWidth + actualSpeed <= centerImageRight && actualSpeed < 0)
		{
			change = centerImageRight - (thumbWidth + imageLinks[imageLinks.length - 1].left);
		}

		if (Math.abs(change) > Math.abs(actualSpeed))
		{
			change = (change < 0) ? change = -Math.abs(actualSpeed): change = Math.abs(actualSpeed);
		}
		
		
		if (change > max) {
			change = max;
		} else if (change < -max) {
			change = -max;
		}
		
		if (change > 0 && change > currentSpeed) {
			change = currentSpeed + (change - currentSpeed) * 0.1;
		}
		else if (change < 0 && change < currentSpeed) {
			change = currentSpeed - (currentSpeed - change) * 0.1;
		}
		
		currentSpeed = change;
		var length = imageLinks.length;
		
		for (var i = 0; i < length; i++)
		{
			imageLinks[i].left += change;
		    imageLinks[i].style.left = imageLinks[i].left + "px";
		}

		setTimeout("doMove(" + moveId + ")", 30);
	}
}

