//	Smart Mini Tabs by Rob L Glazebrook.
//	Last edited: Feb. 10, 2006
//	This script is based on slayeroffice's focus slide navigation:		
//	http://slayeroffice.com/code/focus_slide/

//  DC: http://www.sgclark.com/sandbox/minislide/

// window.onload = init;

var d=document;			// These four variables
var activeLI = -1;		// should not be
var currentLI = -1;		// edited unless you
var zInterval = null;	// really know your stuff

var SLIDE_STEP = 6;		// # of pixels to slide each step (higher is faster)
var RESIZE_STEP = 3;	// # of pixels to resize each step (higher is faster)

function initSlider() {

	if(!document.getElementById || window.opera)return;

	mObj = d.getElementById("navheader");
	liObj = mObj.getElementsByTagName("li");
	aObj = mObj.getElementsByTagName("a");

	for(i=0;i<liObj.length;i++) { // create mouseovers/mouseouts for the li's and the ul
		liObj[i].xid = i;
		liObj[i].onmouseover = function() { initSlide(this.xid); }
	}
	mObj.onmouseout = function() { initSlide(currentLI); }

	// create the slider object
	slideObj = mObj.appendChild(d.createElement("div"));
	slideObj.id = "slider";

	// position the slider over the current li
	initActive(); 

	// -1 means that there no current LI exists, therefore calculate with the first LI, but set the width to "0"
	calcLI = activeLI;
	if(activeLI == -1) {
	    calcLI = 0;
	}
	
	x = liObj[calcLI].offsetLeft;
	y = liObj[calcLI].offsetTop;
	w = liObj[calcLI].offsetWidth-1;
	h = liObj[calcLI].offsetHeight-3; 

	if(activeLI == -1) {
	    w = 0;
	}

	slideObj.style.top = y + "px";
	slideObj.style.left = x + "px";
	slideObj.style.width = w + "px";
	slideObj.style.height = h + "px";

}

function initActive() { // discover the current tab by comparing anchor hrefs to the window href

    var currentLiIdentified = false;
	
	for(i=0;i<aObj.length;i++) {
		
		if(aObj[i].className == "navheader-activelink") {
			activeLI = currentLI = i;
			currentLiIdentified = true;
			break;
		}
/*	disabled automatic detection of current Li by scanning the URI	

		if(d.location.href.indexOf(aObj[i].href)>=0) {
			activeLI = currentLI = i;
			currentLiIdentified = true;
		}
*/
	}
	
	if(currentLiIdentified) {
		liObj[currentLI].className="current";	//set a class so the li can be styled
		if(currentLI > 0) {
			liObj[currentLI-1].className="predecessor";
		}
    }
}

function doSlide(dX) { // move the slider div
	x = slideObj.offsetLeft;
	if(x+SLIDE_STEP<dX) {
		// if the x-value is less than its destination, move it to the right
		x+=SLIDE_STEP;
		slideObj.style.left = x + "px";
		doResize(destW);
	} else if (x-SLIDE_STEP>dX) {
		// if the x-value is more than its destination, move to the left
		x-=SLIDE_STEP;
		slideObj.style.left = x + "px";
		doResize(destW);
	} else  {
		// if the div is within SLIDE_STEP pixels, move it to the proper location
		slideObj.style.left = dX + "px";
		slideObj.style.width = destW +"px";
		clearInterval(zInterval);
		zInterval = null;
	}
}

function doResize(dW) { // resize the slider div -- similar in execution to doSlide
	w = slideObj.offsetWidth;
	if (slideObj.offsetWidth!=dW) {
		if (w+RESIZE_STEP<dW) {
			w+=RESIZE_STEP;
			slideObj.style.width = w + "px";
		} else if (w-RESIZE_STEP>dW) {
			w-=RESIZE_STEP;
			slideObj.style.width = w + "px";
		} else {
			slideObj.style.width = dW + "px";
		}
	}
}

function initSlide(objIndex) {
	if(objIndex == activeLI && activeLI != -1)return;
	clearInterval(zInterval);
	activeLI = objIndex;
	
    // -1 means that there no current LI exists, therefore calculate with the first LI, but set the width to "0"
	calcLI = activeLI;
	if(activeLI == -1) {
	    calcLI = 0;
	}
	
	destX = liObj[calcLI].offsetLeft;		// the desination location
	destW = liObj[calcLI].offsetWidth;	// the destination size
	if(activeLI == -1) {
	    destW = 0;
	}
	intervalMethod = function() { doSlide(destX); }
	zInterval = setInterval(intervalMethod,10);
}