var links = document.getElementsByTagName("link");

for (var i = 0; i < links.length; i++)
{
	if (links[i].title == "Scroller")
	{
		links[i].disabled = true;
		links[i].disabled = false;
	}
}

schedule("righthere", initScroller);
schedule("window", initScrollerSizing);


function initScroller()
{
	var firstItemOffset = 10;
	var scrollerButtonLeft = document.getElementById("scrollerButtonLeft");
	var scrollerButtonRight = document.getElementById("scrollerButtonRight");
	var scrollerItems = document.getElementById("scrollerItems");
	var gallery = scrollerItems.getElementsByTagName("div");
	
	for (var i = 0; i < gallery.length; i++)
	{
		if (gallery[i].className == "gallery")
		{
			gallery = gallery[i];
			
			break;
		}
	}
	
	gallery.style.left = gallery.getElementsByTagName("dl").length * -191 + "px";
	gallery.leftFloat = parseInt(gallery.style.left);
	gallery.currItem = 0;
	gallery.moving = false;
	gallery.maxItem = gallery.getElementsByTagName("dl").length - 1;
	
	scrollerButtonLeft.className = "disabled";
	scrollerButtonRight.className = "disabled";
	
	return true;
};




function initScrollerSizing()
{
	var firstItemOffset = -10;
	var increment = 25;
	var decelerator = 6;
	var minIncrement = 0.25;
	var scrollerItems = document.getElementById("scrollerItems");
	var gallery = scrollerItems.getElementsByTagName("div");
	
	for (var i = 0; i < gallery.length; i++)
	{
		if (gallery[i].className == "gallery")
		{
			gallery = gallery[i];
			
			break;
		}
	}
	
	var currLeft = parseInt(gallery.style.left);

	if (Math.abs(increment) > Math.abs((firstItemOffset - gallery.leftFloat) / decelerator))
	{
		increment = (firstItemOffset - gallery.leftFloat) / decelerator;
		
		if (Math.abs(increment) < minIncrement)
		{
			increment = minIncrement * increment / Math.abs(increment);
		}
	}

	if (currLeft + increment > firstItemOffset)
	{
		gallery.leftFloat = firstItemOffset;
		gallery.style.left = firstItemOffset + "px";
		
		var scrollerButtonLeft = document.getElementById("scrollerButtonLeft");
		var scrollerButtonRight = document.getElementById("scrollerButtonRight");
		
		scrollerButtonLeft.onclick = scrollIt;
		
		scrollerButtonRight.className = "";
		scrollerButtonRight.onclick = scrollIt;
	}
	else
	{
		gallery.leftFloat += increment;
		gallery.style.left = parseInt(gallery.leftFloat + increment) + "px";
		setTimeout("initScrollerSizing()", 25);
	}
	
	return true;
};




function scrollIt()
{
	var scrollerButtonLeft = document.getElementById("scrollerButtonLeft");
	var scrollerButtonRight = document.getElementById("scrollerButtonRight");
	var scrollerItems = document.getElementById("scrollerItems");
	var gallery = scrollerItems.getElementsByTagName("div");
	
	for (var i = 0; i < gallery.length; i++)
	{
		if (gallery[i].className == "gallery")
		{
			gallery = gallery[i];
			
			break;
		}
	}

	if (this.id == "scrollerButtonRight")
	{
		scrollerButtonLeft.className = "";
		
		if (gallery.currItem < (gallery.maxItem-1))
		{
			gallery.currItem += 1;
			
			if (gallery.currItem == (gallery.maxItem-1))
			{
				this.className = "disabled";
			}
		}
	}
	else
	{
		scrollerButtonRight.className = "";
		
		if (gallery.currItem > 0)
		{
			gallery.currItem -= 1;
			
			if (gallery.currItem == 0)
			{
				this.className = "disabled";
			}
		}
	}
	
	if (!gallery.moving)
	{
			gallery.moving = true;
			moveGallery();
	}
	
	return false;
};




function moveGallery()
{
	var firstItemOffset = 10;
	var destinationLeft = 0;
	var itemWidth = 191;
	var scrollerItems = document.getElementById("scrollerItems");
	var gallery = scrollerItems.getElementsByTagName("div");
	var increment = 25;
	var minIncrement = 0.25;
	var decelerator = 6;

	for (var i = 0; i < gallery.length; i++)
	{
		if (gallery[i].className == "gallery")
		{
			gallery = gallery[i];
			
			break;
		}
	}
	
	destinationLeft = -gallery.currItem * itemWidth - firstItemOffset;
	increment = (destinationLeft - gallery.leftFloat) / Math.abs(destinationLeft - gallery.leftFloat) * increment;
	
	if (Math.abs(increment) > Math.abs((destinationLeft - gallery.leftFloat) / decelerator))
	{
		increment = (destinationLeft - gallery.leftFloat) / decelerator;
		
		if (Math.abs(increment) < minIncrement)
		{
			increment = minIncrement * increment / Math.abs(increment);
		}
	}

	if ((increment < 0 && gallery.leftFloat + increment > destinationLeft) || (increment > 0 && gallery.leftFloat + increment < destinationLeft))
	{
		gallery.leftFloat = gallery.leftFloat + increment;
		gallery.style.left = Math.round(gallery.leftFloat) + "px";
		setTimeout("moveGallery(" + destinationLeft + ")", 25);
	}
	else
	{
		gallery.leftFloat = destinationLeft;
		gallery.style.left = destinationLeft + "px";
		gallery.moving = false;
	}
	

	return true;
};




function schedule(objectID, functionCall, increment)
{
	if (typeof increment == "undefined")
	{
		increment = 0;
	}
	else if (increment > 200)
	{
		return false;
	}
	
	if (objectID == "window")
	{
		var oldonload = window.onload;
		
		if (typeof window.onload != "function")
		{
			window.onload = functionCall;
		}
		else
		{
			window.onload = function()
			{
				oldonload();
				functionCall();
			}
		}
	}
	else if (document.getElementById(objectID))
	{
		functionCall();
	}
	else
	{
		setTimeout(function(){schedule(objectID, functionCall, ++increment)}, 50);
	}
	
	return true;
};
