/******************************************************

	Focus Slide

	version 1.0

	last revision: 12.17.2004

	steve@slayeroffice.com



	Should you improve upon or

	modify this code, please let me know

	so that I can update the version hosted

	at slayeroffice.



	PLEASE LEAVE THIS NOTICE INTACT!



******************************************************/



window.onload = init;



var d=document;		// shortcut reference to the document object

var activeLI = 0;		// the currently "active" list element - value represents its index in the liObj array

// check if I want to open with a particular item active

if (typeof(activeLIPage) != "undefined") {

		activeLI = activeLIPage;

}



var zInterval = null;	// interval variable



var SLIDE_STEP = 5;	// how many pixels to move the sliding div at a time

var SLIDER_HEIGHT = 20;	// the width of the sliding div. used to calculate its left based on the width and left of the active LI element





function init() {

	// bail out if this is an older browser or Opera which gets the offsets wrong

	// the opera issue is fixable by subtracting the container UL's width from the offsetLefts...but I dont care enough to do it

	// this does NOT break opera, it just wont get the sliding thing



	if(!document.getElementById || window.opera)return;



	// create references to the LI's

	mObj = d.getElementById("mContainer");

	liObj = mObj.getElementsByTagName("li");



	// set up the mouse over events

	for(i=0;i<liObj.length;i++) {

		liObj[i].xid = i;

		liObj[i].onclick = function() { initSlide(this.xid); }

	}



	// create the slider object

	slideObj = mObj.appendChild(d.createElement("div"));

	slideObj.id = "slider";



	// position the slider over the first LI

	y = liObj[activeLI].offsetTop + (liObj[activeLI].offsetHeight/3 - SLIDER_HEIGHT/3)-6;

	x = liObj[activeLI].offsetLeft-9;

	slideObj.style.top = y + "px";

	slideObj.style.left = x + "px";

}





function initSlide(objIndex) {

	// return if the user is mousing over the currently active LI

	if(objIndex == activeLI)return;

	// clear the interval so we can start it over in a few lines to avoid doubling up on intervals

	clearInterval(zInterval);



	// set the active list item to the object index argument

	activeLI = objIndex;

	// figure out the destination for the sliding div element

	destinationX = Math.floor(liObj[activeLI].offsetTop + (liObj[activeLI].offsetHeight/3 - SLIDER_HEIGHT/3))-5;

	// start the interval

	intervalMethod = function() { doSlide(destinationX); }

	zInterval = setInterval(intervalMethod,10);

}



function doSlide(dX) {

	// get the current left of the sliding div

	x = slideObj.offsetTop;

	if(x+SLIDE_STEP<dX) {

		// div is less than its destination, move it to the right

		x+=SLIDE_STEP;

		slideObj.style.top = x + "px";

	} else if (x-SLIDE_STEP>dX) {

		// div is more than its destination, move to the left

		x-=SLIDE_STEP;

		slideObj.style.top = x + "px";

	} else  {

		// div is within the boundaries of its destination. put it where its supposed to be

		// and clear the interval

		slideObj.style.top = dX + "px";

		clearInterval(zInterval);

		zInterval = null;

	}

}