/**********************************
*   Sliding Menu Arrow Script     *
*   by Baz (barrygoodman.co.uk)   *
**********************************/


// Slides the menu arrow smoothly to the left or right to 
// center above the given page. 

// call moveNavArrow(page) to move arrow. 
// also need to call setupNavArrow() on window load. 

// NB: requires mainPages array from main scripts file.



// Changeable Variables

//amount of times to add 1 per timeout 
//lets the arrow move more px per timeout without going over
var Mloops = 6;

//speed up for IE:
if (BrowserDetect.browser == 'Explorer') { 
	Mloops = 18;
}

//time of setTimeout setTimout(func(), MtimeScale) <
var MtimeScale = 10;
//start pos of arrow from left
var Mstart = 10;

//ignore the rest as its all needed
//set VARs to globalise them
var menuArr;
var McurrentPos;
var Mnav;
var Mnav_row;
var	Mnav_columns;
//all links
var Mlinkz = new Array();
//all links tds
var Mwidths = new Array();
//all nav tds
var Mtdz = new Array();
//timer
var Mtimer;
//how much to slide by
var MslideBy = 1;




//Load the data into the vars when the page loads
function setupNavArrow() { 

	//get menu arrow
	menuArr = document.getElementById('menuarr');
	//set the current start position so we can access it
	menuArr.style.left = Mstart + "px";
	//get nav table
	Mnav = document.getElementById("nav");
	
	//get links
	all_links = Mnav.getElementsByTagName("a");
	//counter for correct links
	r = 0;
	//sort into main links
	for(i=0; i < all_links.length; i++) {	
		if(all_links[i].className == "navmainlink")
		{
			Mlinkz[r] = all_links[i];
			r++;
		}		
	}
	
	//get all tds
	tds = Mnav.getElementsByTagName("td");	
	//get all tds widths
	for(i=0; i < Mnav.getElementsByTagName("td").length; i++) {
		Mtdz[i] = tds[i].scrollWidth;
	}	
	
	//get links tds
	for(i = 0; i < Mlinkz.length; i++) {
		Mwidths[i] = Mlinkz[i].parentNode;
	}	

};	




function moveNavArrow(page) {	
	//reset l
	l = 0;
	//reset ok
	ok = false;
	//check if the page passed is legit
	while(ok == false && l < mainPages.length)
	{
		if(page == mainPages[l])
		{
			ok = true;
			key = l;
		}
		//incriment count
		else{
			l++;
		}
	}

	
	if(ok)
	{
		//stop anything being done atm
		if(Mtimer){
			clearTimeout(Mtimer);	
		}
		
		//get currentPosition
		McurrentPos = menuArr.style.left;	
	
		//ok lets move it
		//clear new left distant
		newLeft = 0;
		//reset i
		i = 0;
		//total up all the previous TD's	
		while(tds[i] != Mwidths[key]){
			//add the td to the new left
			newLeft += tds[i].scrollWidth;
			//incriment i
			i++;
		}
		//Add half the links td (-9 as there is a +9 on the first one for some reason =/)
		newLeft += Math.round(Mwidths[key].scrollWidth / 2) - 9;

		//get current left minus px
		oldLeft = menuArr.style.left.split("px")[0];

		//if we need to move the arrow
		if(oldLeft != newLeft)
		{
			//if the arrow needs to slide left
			if(oldLeft > newLeft){
				slideNavArrLeft(oldLeft,newLeft);
			}
			//else it needs to slide righ
			else{
				slideNavArrRight(oldLeft,newLeft);
			}
			
		}

	}
}




/*Sliding Functions*/

function slideNavArrLeft(Mstart,target) {

	newPos = (parseInt(Mstart));
	
	for(i = 0; i < Mloops; i++) {
		//new position
		newPos -= MslideBy;
		//if it is not their already
		if(newPos >= target) {	
			menuArr.style.left = newPos + "px";
		}
	}	
	
	//if we need to slide
	if(newPos != target){
		Mtimer = setTimeout("slideNavArrLeft(" + newPos + "," + target + ")", MtimeScale);
	}

}



function slideNavArrRight(Mstart,target) {
	
	newPos = (parseInt(Mstart));
	
	for(i = 0; i < Mloops; i++) {
		//new position
		newPos += MslideBy;
		//if it is not their already
		if(newPos <= target) {	
			menuArr.style.left = newPos + "px";
		}
	}

	//if we need to slide
	if(newPos != target){
		Mtimer = setTimeout("slideNavArrRight(" + newPos + "," + target + ")", MtimeScale);
	}

}



