var BUA = navigator.userAgent;
var BIE = BUA.indexOf("MSIE");
var BIsIE = BIE>=0;
var BIsMaccak = BUA.indexOf("Mac")!=-1;
var BVer = BIE>=0?parseFloat(BUA.substring(BIE+5, BIE+6)+"."+BUA.substring(BIE+7, BIE+8)):parseInt(navigator.appVersion.substring(0,1));

var NODE_ID = 0;
var PARENT_NODE = 1;
var DISPLAY_TEXT = 2;
var HELP = 3;
var URL = 4;
var URL_TARGET = 5;

/* ----------------- browsers DOM extensions -------------------------*/
//this is included to implement the Array.push function in ieMac
if (typeof Array.prototype.push == 'undefined') {
	Array.prototype.push=function(){
		var i=0;
	    b=this.length,a=arguments;
		for(i;i<a.length;i++)this[b+i]=a[i];
	    return this.length
	}
}

//this is included to implement the Array.inArray function
if (typeof Array.prototype.inArray == 'undefined') {
	Array.prototype.inArray = function(value){
		for (var i=0; i<=this.length-1; i++) {
			if (this[i] == value) {
				return true;
			}
		}

		return false;
	}
}
/* -----------------  end browsers DOM extensions -------------------------*/


var siteNavigation = new SiteNavigation();

function SiteNavigation() {
	this._linksNavigationId = 0;
	this._mainNavigationId = -1;
	this._selectedNavId = null;
	this._footerNavigationId = 0;
	this._clientTemplatePath = '';
	this._selectedNavId = 0;
	
	this._pageTitle = '';
	this._bannerText = '';
	this._bannerImage = '';
	this._bannerImageId = 'bnrImg';
	
	this._mainNavDepthLimit = -1;  //-1 = no limit on depth 
	this._menuCount = 0;
	this._rootNavId = -1;
	this._trail = new Array();
	this._mainNavDOMId = "mainNav";
	this._menuULs = Array(); //internal variable for detecting menu direction

	this.initBeforeLoad = function(){
		this._makeTrail();
	}
	
	this.initAfterLoad = function() {
	}
	
	this.setSelectedNavId = function(selectedNavId) {
		this._selectedNavId = selectedNavId;
	}
	
	this.setPageTitle = function(pageTextStr) {
		this._pageText = pageTextStr;
	}
	
	this.setBannerText = function(bannerTextStr) {
		this._bannerText = bannerTextStr;
	}

	this.setBannerImage = function(bannerImageStr) {
		this._bannerImage = bannerImageStr;
	}
	
	this.setClientTemplatePath = function(path) {
		this._clientTemplatePath = path;		
	}	
	
	this.buildNavTitle = function() {
		//finds the of the page from the following hirachy
		// bannerText then pageTitle then selectedNavItem title else nothing
		
		if (this._bannerText != '') {
			return this._bannerText;
		} else if (navItemExists(this._selectedNavId)) {
			return getNavItem(this._selectedNavId)[DISPLAY_TEXT];
		} else if (this._pageTitle != '') {
			return this._pageTitle;
		} else {
			return '';
		}
	}
	
	this.buildLinksNav = function() {
		var out = '';
		
		out = '<ul>';
		
		for (var i=0; i<= NavItems.length-1; i++) {
			if (NavItems[i][PARENT_NODE] == this._linksNavigationId) {
				out += "<li>";
				out += "<a href=\""+NavItems[i][URL]+"\" "+(NavItems[i][URL_TARGET] != '' ? 'target="'+NavItems[i][URL_TARGET]+'"' : '')+">"+NavItems[i][DISPLAY_TEXT]+"</a>";
				out += "</li>";
			}
		}
		
		out += '</ul>';
		return out;
	}
	
	this.buildMainNav = function() {
		var out = '';
		var parentNodeId = -1;
		
		if (!navItemExists(this._mainNavigationId) && this._mainNavigationId!=-1) return '';
		else parentNodeId=this._mainNavigationId;

		out = '<ul>';
		for (var i=0; i <= NavItems.length-1; i++) {
			if (NavItems[i][PARENT_NODE] == parentNodeId) {
				out += '<li class="'+(NavItems[i][NODE_ID]==this._selectedNavId ? 'selected' : '')+'">';
				out += '<a '+(NavItems[i][URL]!=''?'href="'+NavItems[i][URL]+'" ':'')+(NavItems[i][URL_TARGET] != '' ? 'target="'+NavItems[i][URL_TARGET]+'"' : '')+'>'+NavItems[i][DISPLAY_TEXT]+'</a>';
				if (hasChildren(NavItems[i][NODE_ID])) {
					out += '<ul>';
					for (var s=0; s <= NavItems.length-1; s++) {
						if (NavItems[s][PARENT_NODE] == NavItems[i][NODE_ID]) {
							out += '<li class="'+(NavItems[s][NODE_ID]==this._selectedNavId ? 'selected' : '')+'">';
							out += '<a '+(NavItems[s][URL]!=''?'href="'+NavItems[s][URL]+'" ':'')+(NavItems[s][URL_TARGET] != '' ? 'target="'+NavItems[s][URL_TARGET]+'"' : '')+'>'+NavItems[s][DISPLAY_TEXT]+'</a>';
							out += '</li>';
						}
					}
					out += '</ul>';
				}
				out += '</li>';
			}
		}
		out += '</ul>';
		
		return out;
	}
	
	this.buildFooterNav = function() {
		var out = '';
		var count = 0;
		var licount = 0;
		
		out = '<ul>';
		
		for (var i=0; i<= NavItems.length-1; i++) {
			if (NavItems[i][PARENT_NODE] == this._footerNavigationId) {count++;}
		}		
		
		for (var i=0; i<= NavItems.length-1; i++) {
			if (NavItems[i][PARENT_NODE] == this._footerNavigationId) {
				licount++
				out += '<li '+(count == licount ? 'style="border-right:none"' : '')+'>';
				out += "<a href=\""+NavItems[i][URL]+"\" "+(NavItems[i][URL_TARGET] != '' ? 'target="'+NavItems[i][URL_TARGET]+'"' : '')+">"+NavItems[i][DISPLAY_TEXT]+"</a>";
				out += " | </li>";
			}
		}
		
		out += '</ul>';
		return out;
	}
	
	this.buildBannerImage = function() {
		if (this._bannerImage != '') {
			document.getElementById('bnrImg').src = this._bannerImage;
		}
	}
	
	this._isSelectedNavIdValid = function(){
		return ((this._selectedNavId > 0) && (getNavItem(this._selectedNavId).length > 0));
	}
	
	this.buildTrail = function(){
		var out = Array();
		var foundMainNav = false;
		
		for (var i=0; i<this._trail.length; i++) {
			if (foundMainNav) {
				var navItem = getNavItem(this._trail[i]);
				out.push('<a href="'+navItem[URL]+'">'+navItem[DISPLAY_TEXT]+'</a>');
			} else if (this._trail[i] == this._mainNavigationId) {
				foundMainNav = true;
			}
		}
		
		return out.join(' > ');
	}
	
	this._makeTrail = function(){
		if (!this._isSelectedNavIdValid()) {return '';}
		this._makeTrailRc(this._selectedNavId);
		this._trail.reverse();
	}
	
	this._makeTrailRc = function(nodeId){
		if (nodeId != this._rootNavId) {
			this._trail.push(nodeId);
	
			var node = getNavItem(nodeId);
			this._makeTrailRc(node[PARENT_NODE]);
		}
	
		if (nodeId == this._rootNavId){
			this._trail.push(this._rootNavId);
		}
	}
}

/* ----------------- functions for manipulating the NavItems array -------------------------*/
function hasChildren(navId){
	for (var i=0; i<=NavItems.length-1; i++) {
		if (NavItems[i][PARENT_NODE] == navId) {
			return true
		}
	}

	return false;
}


function getNavItem(id){
	//returns an array containing the data from NavItems for the given id
	//

	var navItem = Array();

	for (var i=0; i<NavItems.length; i++) {
		if (NavItems[i][NODE_ID] == id) {
			navItem[NODE_ID] = NavItems[i][NODE_ID];
			navItem[PARENT_NODE] = NavItems[i][PARENT_NODE];
			navItem[DISPLAY_TEXT] = NavItems[i][DISPLAY_TEXT];
			navItem[HELP] = NavItems[i][HELP];
			navItem[URL] = NavItems[i][URL];
			navItem[URL_TARGET] = NavItems[i][URL_TARGET];
		}
	}

	return navItem;
}

function navItemExists(id){
	//returns true or false depending on the existance of the name item

	var navItem = getNavItem(id)
	return navItem.length > 0;
}