// SCROLLER
// --------
var scrollPaneHeights = [];
var scrollAmount = [];
var scrollInterval = [];
var scrollTimer = [];
var scrollBoxTop = [];
var alignImages = [];
var offSetXs = [];
var offSetYs = [];

// when user clicks on scroll button...
function scrollScrollBox( i, direction )
{
	if (direction == 'up')	// scroll up => move box down
	{
		if (scrollBoxTop[i] < 0)
			scrollBoxTop[i] += scrollAmount[i];
	}
	else	// scroll down => move box up
	{
		if (scrollBoxTop[i] + getScrollBoxHeight( i ) > scrollPaneHeights[i])
			scrollBoxTop[i] -= scrollAmount[i];
	}
	setScrollBoxTop( i );
}

function startScrolling( i, direction )
{
	stopScrolling( i );
	scrollScrollBox( i, direction );
	scrollTimer[i] = setInterval( "scrollScrollBox(" + i + ",'" + direction + "')", scrollInterval[i] );
}

function stopScrolling( i )
{
	if (scrollTimer[i] != null)
	{
		clearInterval( scrollTimer[i] );
		scrollTimer[i] = null;
	}
}

function getScrollBoxHeight( i )
{
	if (document.getElementById)
		return document.getElementById( 'scrollBox' + i ).offsetHeight;
	else if (document.all)
		return document.all[ 'scrollBox' + i ].offsetHeight;
	else
		return document.layers[ 'scrollPane' + i ].document.layers[ 'scrollBox' + i ].document.height;
}

function setScrollBoxTop( i )
{
	if (document.getElementById)
		document.getElementById( 'scrollBox' + i ).style.top = scrollBoxTop[i];
	else if (document.all)
		document.all[ 'scrollBox' + i ].style.top = scrollBoxTop[i];
	else
		document.layers[ 'scrollPane' + i ].document.layers[ 'scrollBox' + i ].top = scrollBoxTop[i];
}

function makeScrollArrow( i, scrollImageSrc, scrollArrowWidth, scrollArrowHeight, direction )
{
	return '<a href="javascript:scrollScrollBox(' + i + ',\'' + direction + '\');" onMouseOver="startScrolling(' + i + ',\'' + direction + '\')" onMouseOut="stopScrolling(' + i + ')"><img src="' + scrollImageSrc + '" width="' + scrollArrowWidth + '" height="' + scrollArrowHeight + '" alt="" border="0" /></a>';
}

// e.g. openScrollBox( 'myImgName', 150, 200, 'scroll_up.gif', 'scroll_down.gif', 10, 10 );
function openScrollBox( alignImage, scrollPaneWidth, scrollPaneHeight, offSetX, offSetY, scrollUpImageSrc, scrollDownImageSrc, scrollArrowWidth, scrollArrowHeight, optional_scrollAmount, optional_scrollInterval )
{
	var i = scrollBoxTop.length;
	alignImages[i] = alignImage;
	scrollBoxTop[i] = 0;
	scrollTimer[i] = null;
	scrollPaneHeights[i] = scrollPaneHeight;
	scrollAmount[i] = (optional_scrollAmount != null ? optional_scrollAmount : 10);
	scrollInterval[i] = (optional_scrollInterval != null ? optional_scrollInterval : 100);
	offSetXs[i] = offSetX;
	offSetYs[i] = offSetY;
	if (document.layers)
	{
		document.write( '<layer name="scrollup' + i + '" top="0" left="' + scrollPaneWidth + '" height="' + scrollArrowHeight + '" width="' + scrollArrowWidth + '" visibility="hide">' + makeScrollArrow( i, scrollUpImageSrc, scrollArrowWidth, scrollArrowHeight, 'up' ) + '</layer>' );
		document.write( '<layer name="scrolldown' + i + '" top="' + (scrollPaneHeights[i] - scrollArrowHeight) + '" left="' + scrollPaneWidth + '" height="' + scrollArrowHeight + '" width="' + scrollArrowWidth + '" visibility="hide">' + makeScrollArrow( i, scrollDownImageSrc, scrollArrowWidth, scrollArrowHeight, 'down' ) + '</layer>' );
		document.write( '<layer name="scrollPane' + i + '" z-index="1000" top="0" left="0" height="' + scrollPaneHeights[i] + '" width="' + scrollPaneWidth + '" clip="' + scrollPaneWidth + ',' + scrollPaneHeights[i] + '" visibility="hide"><layer name="scrollBox' + i + '" width="' + scrollPaneWidth + '">' );
	}
	else
	{ 
		document.write( '<div id="scrollup' + i + '" style="position: absolute; top: 0px; left: ' + scrollPaneWidth + 'px; height: ' + scrollArrowHeight + 'px; width: ' + scrollArrowWidth + 'px; visibility: hidden;">' + makeScrollArrow( i, scrollUpImageSrc, scrollArrowWidth, scrollArrowHeight, 'up' ) + '</div>' );
		document.write( '<div id="scrolldown' + i + '" style="position: absolute; top: ' + (scrollPaneHeights[i] - scrollArrowHeight) + 'px; left: ' + scrollPaneWidth + 'px; height: ' + scrollArrowHeight + 'px; width: ' + scrollArrowWidth + 'px; visibility: hidden;">' + makeScrollArrow( i, scrollDownImageSrc, scrollArrowWidth, scrollArrowHeight, 'down' ) + '</div>' );
		document.write( '<div id="scrollPane' + i + '" style="position: absolute; top: 0px; left: 0px; height: ' + scrollPaneHeights[i] + 'px; width: ' + scrollPaneWidth + 'px; clip:rect(0,' + scrollPaneWidth + ',' + scrollPaneHeights[i] + ',0); overflow: hidden; visibility: hidden;"><div id="scrollBox' + i + '" style="position: absolute; top: 0px; left: 0px; width: ' + scrollPaneWidth + 'px;">' );
	}
}

//NB: please write </layer></layer> manually before this function call, or Netscape 4 will break
function closeScrollBox()
{
	if (!document.layers)
		document.write( '</div></div>' );
}

function arrangeScrollers()
{
	for (var i = 0; i < alignImages.length; i++)
	{
		var upX = getPageX( getLayer( 'scrollup' + i ) );
		var upY = getPageY( getLayer( 'scrollup' + i ) );
		var downX = getPageX( getLayer( 'scrolldown' + i ) );
		var downY = getPageY( getLayer( 'scrolldown' + i ) );
		var paneX = getPageX( getLayer( 'scrollPane' + i ) );
		var paneY = getPageY( getLayer( 'scrollPane' + i ) );
		
		var alignX = getImageX( alignImages[i] );
		var alignY = getImageY( alignImages[i] );

		setDivProperty( 'scrollPane' + i, 'left', alignX + offSetXs[i]);
		setDivProperty( 'scrollPane' + i, 'top', alignY + offSetYs[i]);
		setDivProperty( 'scrollup' + i, 'left', alignX + upX - paneX + offSetXs[i]);
		setDivProperty( 'scrollup' + i, 'top', alignY + upY - paneY + offSetYs[i]);
		setDivProperty( 'scrolldown' + i, 'left', alignX + downX - paneX + offSetXs[i]);
		setDivProperty( 'scrolldown' + i, 'top', alignY + downY - paneY + offSetYs[i]);

		setDivProperty( 'scrollPane' + i, 'visibility', 'visible' );
		if (getScrollBoxHeight( i ) > scrollPaneHeights[i])
		{
			setDivProperty( 'scrollup' + i, 'visibility', 'visible' );
			setDivProperty( 'scrolldown' + i, 'visibility', 'visible' );
		}
	}
}

function backToTop() {
	setDivProperty('scrollBox0', 'top', 0);
	scrollBoxTop['0'] = 0;
}