/* This script and many more are available free online at
The JavaScript Source!! http://javascript.internet.com */

/******************************************************
	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!

******************************************************/

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
var OrigLI = 0			// per tornare indietro alla voce originale
var zInterval = null;	// interval variable

var SLIDE_STEP = 5;	// how many pixels to move the sliding div at a time
var SLIDER_WIDTH = 50;	// 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 don't care enough to do it
	// this does NOT break opera, it just wont get the sliding thing
	
	
	if(!document.getElementById || window.opera)return;
	origLI = activeLI;
	// create references to the LI's
	mObj = d.getElementById("mContainer");
	liObj = mObj.getElementsByTagName("li");
	window.onresize = function() { x = liObj[activeLI].offsetLeft - 22;	y = liObj[activeLI].offsetTop -5;slideObj.style.top = y + "px"; slideObj.style.left = x + "px";}
	
	// set up the mouse events
	for(i=0;i<liObj.length;i++) {
		liObj[i].xid = i;
		liObj[i].onmouseover = function() { initSlide(this.xid); }
		liObj[i].onmouseout = function() { initSlide(origLI); }
	}
	
	
	// create the slider object
	slideObj = mObj.appendChild(d.createElement("div"));
	slideObj.id = "slider";

	// position the slider over the first LI
	x = liObj[activeLI].offsetLeft - 22;
	y = liObj[activeLI].offsetTop -5;

	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_WIDTH/3))-18;
	destinationX = liObj[activeLI].offsetTop -5;
	// start the interval
	intervalMethod = function() { doSlide(destinationX); }
	zInterval = setInterval(intervalMethod,5);
}


function doSlide(dX) {
	y = slideObj.offsetTop;

	if(y+SLIDE_STEP<dX) {
		// div is less than its destination, move it to the right
		y+=SLIDE_STEP;
		slideObj.style.top = y + "px";
	} else if (y-SLIDE_STEP>dX) {
		// div is more than its destination, move to the left
		y-=SLIDE_STEP;
		slideObj.style.top = y + "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;
	}
	
}

// Multiple onload function created by: Simon Willison
// http://simonwillison.net/2004/May/26/addLoadEvent/
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

addLoadEvent(function() {
  init();
});
