/* Version 1.1 */

var GlobalMenu;
var currentLinkPos;
var menuId;
var menuDiv;
var menuButtonDiv;
var RedirectArray;
var nextDiv;
var previousDiv;

//include array.indexof method for older versions of IE
if(!Array.indexOf){
	Array.prototype.indexOf = function(obj, start){
	for(var i=(start||0); i<this.length; i++){
		if(this[i]==obj){
		return i;
		}
	}
	return -1;
	}
}

function hideAndExit(){
//check for sitemap and buttons - hide each if present
if(document.getElementById(previousDiv)){document.getElementById(previousDiv).style.display='none';}
if(document.getElementById(nextDiv)){document.getElementById(nextDiv).style.display='none';}
if(document.getElementById(menuDiv)){document.getElementById(menuDiv).style.display = 'none';}
}

function buildNavLinks() {
menuId = 'menuList';
menuDiv = 'sitemap';
menuButtonDiv = 'nextPrev';
nextDiv = 'next-link';
previousDiv ='previous-link' ;
var assetLevelDiv = 'asset-level';
var assetLevelSep = '&gt;';

//get the next and previous links
var LinkNext = document.getElementById(nextDiv);
var LinkPrevious = document.getElementById(previousDiv);

//hide the menu list
if(document.getElementById(menuDiv)){
	document.getElementById(menuDiv).style.display = 'none';
	} else {
	hideAndExit();
	return;
	}

//check if page is the intro page for the section = 2 levels lineage
var AssetPos = document.getElementById(assetLevelDiv).innerHTML.split(assetLevelSep);
if(AssetPos.length == 2) {
	hideAndExit();
	return;
}

GlobalMenu = new Array();
RedirectArray = getRedirectArray(); //redirect array is included as another js file

//get first item
var NodeMenuDiv = document.getElementById(menuDiv);
var NodeMenuRoot = findFirstChildOfType(NodeMenuDiv, 'UL'); 

//get first list item node
var NodeCurrentLi = findFirstChildOfType(NodeMenuRoot, 'LI');
buildMenuSiblings(NodeCurrentLi); 

//show the next previous links
document.getElementById(menuDiv).style.display = 'none';
document.getElementById(menuButtonDiv).style.display = 'block';

//build the next and previous links
var LinkNext = document.getElementById('next-link');
var LinkPrevious = document.getElementById('previous-link'); 

//add link to nextpage if not on the last page
	if (currentLinkPos != (GlobalMenu.length) && GlobalMenu[currentLinkPos] != null){
		LinkNext.href = GlobalMenu[currentLinkPos].href;
	} else {
		LinkNext.style.display='none';
	}

//add link to previous page if not on the first page
	if (currentLinkPos - 2 >= 0){
		addPreviousLink (LinkPrevious);
	} else {
		LinkPrevious.style.display='none';
	}
}

function addPreviousLink (node) {
//check for redirect array - returns false if no redirects
if (RedirectArray) {
	var previousHref = GlobalMenu[currentLinkPos - 2].href;
	//check if previous page is in redirect array
	if (RedirectArray.indexOf(previousHref,0) != -1){
		//check that there is a page before the redirect page
		if (currentLinkPos - 3 >= 0){
			node.href = GlobalMenu[currentLinkPos - 3].href;
			return;
		} else {
			//hide the previous link if no page before redirect page
			node.style.display='none';
			return;
		}
	}
}
		//if no redirect pages or previous page not in redirect array- add link to previous page from the menu array
		if (currentLinkPos - 2 >= 0){
			node.href = GlobalMenu[currentLinkPos - 2].href;
		} else {
			//hide the previous link if no page previous page
			node.style.display='none';
		}
}

function buildMenuSiblings(node) {
var NodeCurrentLi = node;
var NodeNextLi;
var NodeNextUl;
var menuLength = 100;

/*if (node.parentNode.nodeName == 'UL' || node.parentNode.nodeName == 'LI'){
		menuLength = node.parentNode.childNodes.length;
} else {
		menuLength = findFirstChildOfType(NodeCurrentLi,'UL').parentNode.childNodes.length;
}
*/

appendArray(node); 

	for (x=0;x<menuLength;x++) { 
		if (NodeCurrentLi.nodeType != 1){
			break;
		} else {
			NodeNextUl = findFirstChildOfType(NodeCurrentLi,'UL');
			NodeCurrentLi = getNextListItem(NodeCurrentLi);
		}

		if (NodeNextUl != false) {
			buildMenuSiblings(findFirstChildOfType(NodeNextUl,'LI'));
			appendArray(NodeCurrentLi);
		} else {
			if (NodeCurrentLi != false){appendArray(NodeCurrentLi);}
		}
	}
}

function appendArray(node) {
//append the array of nodes
var NodeCurrentA;
	if (node != false){
		NodeCurrentA = findFirstChildOfType(node,'A');
		i = GlobalMenu.push(NodeCurrentA);
		//check for the position of the current page in the menu array
		if (getCleanHref(NodeCurrentA.href) == window.location.href) {currentLinkPos=i;}
	}
}

function getNextListItem(node) {

var foundLi = false;
var CurrentNode = node;

	for (x=0;x<node.parentNode.childNodes.length;x++) {
		if (CurrentNode.nextSibling == null) {return false}
		CurrentNode = CurrentNode.nextSibling;
		if (CurrentNode.nodeName=='LI'){foundLi=CurrentNode;break}
	}
	return foundLi;
}

function findFirstChildOfType(node,nodeName){
//search child nodes for node of nodeName type
	var foundEl = false;
	var el = node;
	if (el == null || !el.hasChildNodes){return false;}

	for (var x=0; x<el.childNodes.length;x++){
		if (el.childNodes[x].nodeName == nodeName){foundEl = el.childNodes[x];}
		if(foundEl != false){break;}
	}
	return foundEl;
}

function showMenu() {
document.getElementById(menuDiv).style.display='block';
}

function getCleanHref(href){
//remove querystring and anchor portions of URL
//added remove _nocache - which matrix uses when previewing
var search = href.search;
var anchor = href.anchor;
var cache = '/_nocache';

var cleanHref = href.replace(search,'');
var cleanHref = href.replace(anchor,'');
var cleanHref = href.replace(cache,'');

return cleanHref;
}