

function getElement(id)
{
	if (document.getElementById)
		return document.getElementById(id);
	else
		return document.all[id];
}




var g_scroller = null;

function advance()
{
	g_scroller.advance();
}

function Scroller(minPos, startPos, maxPos, distInHundreds, marginLeft, marginRight, msPerFrame)
{
	this.marginLeft = marginLeft;
	this.marginRight = marginRight;
	this.dist = 100 * distInHundreds;
	this.msPerFrame = msPerFrame;
	this.minPos = minPos;
	this.maxPos = maxPos;
	this.cursor = startPos;
	this.books = new Object;
	this.numBooks = 0;

	this.dir = 0;
	this.frame = 0;
	this.interval = null;


	this.getVisibility =	function(left)
							{
								if (left+this.dist>=this.marginLeft && left<this.marginRight)
									return "visible";
								else
									return "hidden";
							}

	this.add =	function (bookID)
				{
					var book = getElement(bookID);
					this.books[ this.numBooks++ ] = book;
					if (book)
						book.style.visibility = this.getVisibility(book.offsetLeft);
				}
	
	this.scroll =	function (dir)
					{
						if (g_scroller != null) // already scrolling... prevent double-click problems
							return;

						var newPos = this.cursor - dir;
						if (newPos<this.minPos-1 || newPos>this.maxPos+1) // +/- 1 allows empty space before/after first/last books
							return;

						g_scroller = this;
						this.dir = dir;
						this.frame = 0;
						this.interval = window.setInterval(advance, this.msPerFrame);
					}

	this.advance =	function ()
					{
						// advance each book
						var step = this.dir * this.dist/100 * (10 - Math.abs(this.frame - 9));
						for (var i=0 ; i<this.numBooks ; i++)
						{
							var book = this.books[i];
							if (book)
							{
								var x = book.offsetLeft + step;
								book.style.left = x + "px";
								book.style.visibility = this.getVisibility(x);
							}
						}

						// maybe stop the scroll
						++this.frame;
						if (this.frame >= 19)
						{
							window.clearInterval(this.interval);
							g_scroller = null;
							this.cursor = this.cursor - this.dir;
							this.dir = 0;
						}
					}
}

