/********************************

	Scrolling/Expanding List
	Version 1.0
	last revision: 04.26.2004
	steve@slayeroffice.com

	http://slayeroffice.com/code/scroll_menu/

	Please notify me of any improvments you make on this
	code so that I can update the version hosted on
	slayeroffice

	please leave this notice intact.

********************************/

window.onload=function()
{
	init;
	rollover;
}

var d=document;
var expander; 			// object reference for the plus/minus div
var lContainer; 			// object reference for the UL

var currentTop=0;			// the current Y position of the UL
var zInterval = null;		// animation thread interval
var direction;			// direction we're scrolling the UL. 0==up, 1==down
var startTop=0;			// the starting top of the UL

var scrollRate=6;			// initial rate of scrolling
var scrollTick=0;			// keeps track of long we've scrolled so we can slow it down accordingly

var listExpand=true;		// boolean to tell us if we're expanding or contracting the list
var listHeight=1250;			// the current height of the UL
var isExpanded=false;		// boolean to denote if the list is expanded or not. initiliazed to true as it will be set to false as soon as the expand control is clicked.

var MAX_SCROLL_TICK=9;		// the maximum value of scrollTick before it's reset
var LI_PADDING=2;		// the LI's padding value. used to compensate for overall dimensions
var LI_HEIGHT=200;		// the height of the LI
var MAX_LIST_HEIGHT=4780;		// maximum height of the list when fully expanded
var MIN_LIST_HEIGHT=750;		// contracted height of the list
var REBOUND = 0;		// the value of scrollRate when we stop scrolling
var FAST_EXPAND=1250;		// the initial rate of list expansion
var SLOW_EXPAND=1;		// the end rate of expansion
var SPEED_TRANSITION=20;	// when this value + the MAX or MIN list height is reached, we set scrollRate to its slower rate

function init() {
	if(!d.getElementById)return; // bail out if this is an older browser

	up=d.getElementById("upArrow");
	down=d.getElementById("downArrow");
	up2=d.getElementById("upArrow2");
	down2=d.getElementById("downArrow2");

	// apply onclick behaviors to the up arrow, down arrow and expansion control elements
	//down.onclick=function(){scrollObjects(0);}
	//up.onclick=function(){scrollObjects(1);}
	down.onmouseover=function(){scrollObjects(0);}
	down.onmouseout=function(){setMaxTick();}
	up.onmouseover=function(){scrollObjects(1);}
	up.onmouseout=function(){setMaxTick();}
	
	down2.onmouseover=function(){scrollObjects(0);}
	down2.onmouseout=function(){setMaxTick();}
	up2.onmouseover=function(){scrollObjects(1);}
	up2.onmouseout=function(){setMaxTick();}
	//expander=d.getElementById("changeSize");
	//expander.onclick=function(){if(!isExpanded)isExpanded=true;changeListSize(); }

	lContainer = d.getElementById("listContainer");

	d.getElementById("nContainer").style.height=MIN_LIST_HEIGHT+"px";
	rollover();
}

function scrollObjects(dir) {
	if(zInterval)return; // already scrolling.
	//if(isExpanded)return; // list is expanded. no need to scroll.
	if((!dir && currentTop<=-4780) || (dir && currentTop==0))return; // dont scroll up if we're at the top or down if at the bottom of the list
	direction=dir;
	zInterval=setInterval("animate()",1);
	
}

function setMaxTick()
{
		clearInterval(zInterval);
		zInterval = null;
		startTop=currentTop;
		scrollTick=0;
		scrollRate=6;
		
}


function animate() {
	// increment or decrement currentTop based on direction
	
	if(!direction) {
		if(currentTop<=-4780)
		{
			clearInterval(zInterval);
			zInterval=null;
			startTop=currentTop;
			scrollTick=0;
			scrollRate=6;
		}
		else{
		currentTop-=scrollRate;
		}
	} else {
		if(currentTop == 0)
		{
			clearInterval(zInterval);
			zInterval=null;
			startTop=currentTop;
			scrollTick=0;
			scrollRate=6;
		}
		else{		
		currentTop+=scrollRate;
		}
	}
	scrollTick++;
	
	
	
	lContainer.style.top=currentTop+"px";
	
	/*
	

	if(scrollTick>=MAX_SCROLL_TICK) {
		scrollRate--; // slow the scroll rate down for a little style
		scrollTick=0;
	}
	*/
	
/*
	if(scrollRate<=REBOUND) {
		// scroll is finished. clear the interval and reset vars for the next scroll
		clearInterval(zInterval);
		zInterval=null;
		startTop=currentTop;
		scrollTick=0;
		scrollRate=6;
	}
	*/
}

