//	autonav.js -- GSSI Auto-highlighting script

//	http://www.graphicallyspeaking.ca/

//	Version 1.7.0

//	Requires yahoo-dom-event.js

//

//	CHANGELOG

//	2009-01-12	Fixed still-broken regex

//				Added auto-breadcrumbs

//	2008-12-09	Fixed templateParentPage index page bug

//	2008-11-04	Removed short variables pointing to YAHOO namespaces 

//				(causing variable naming conflict with Prototype)

//  2008-10-30  Fixed violently broken regex in extractPageName() -- Damien

//  2008-10-29	Added IE6 / IE7 bug fix for templateParentPage

//  2008-10-23	Added style block that hides navigation until classes are added.

//	2008-09-16	Re-introduced navigationList variable, fixed invalid href bug

//				Replaced the replace with a regular expression





var templateParentPage;

var navigationList = 'subnav';

	

document.write('<style type="text/css"> #' + navigationList + ' { display: none; } </style> ');



YAHOO.util.Event.onAvailable(navigationList, function() {

		menuItems = YAHOO.util.Dom.getElementsBy(function() { return true; },'a',navigationList);

		if (!templateParentPage) {

			setActiveMenu(menuItems, extractPageName(document.URL));

		}

		else {

			var link = document.createElement('a');

			link.setAttribute('href', templateParentPage);

				

			if(link.href) {

				var newLink = '';

				if(link.href.indexOf(document.domain) == -1) {

					if(link.href.indexOf('https://') != -1)

						newLink = 'https://' + document.domain + link.href;

					else

						newLink = 'http://' + document.domain + link.href;

				}

				else

					newLink = link.href;

				setActiveMenu(menuItems, extractPageName(newLink));

			}



		}

		sublists = YAHOO.util.Dom.getElementsBy(function() { return true; },'ul',navigationList);

		setActiveList(sublists);

		

		YAHOO.util.Dom.get(navigationList).style.display = 'block';

		var breadcrumbs = YAHOO.util.Dom.get('breadcrumbs');

		if(breadcrumbs) buildBreadcrumbs(breadcrumbs);

});



	function extractPageName(uStr) {

		var currentPage = uStr;

		if (currentPage.indexOf('#') > -1) {

			currentPage = currentPage.substr(0,currentPage.indexOf('#'));

		}

		if (currentPage.indexOf('?') > -1) {

			currentPage = currentPage.substr(0,currentPage.indexOf('?'));

		}

		currentPage = currentPage.replace(/(default|index)\.(html|htm|aspx|asp|php)/, '');

		

		return currentPage;

	}

	



	function setActiveList(arr) {

		var topNode = YAHOO.util.Dom.get(navigationList);

		for(var i=0; i < arr.length; i++) {

			if (arr[i].id != navigationList) {

				if(!YAHOO.util.Dom.hasClass(arr[i],'active')) {

					YAHOO.util.Dom.addClass(arr[i],'inactive');	

				}

				YAHOO.util.Dom.addClass(YAHOO.util.Dom.getAncestorByTagName(arr[i],'LI'),'more');

			}

		}

	}

	// search through all the links in array, if one points to

	// the same file, apply the class .active to it and to all its parents

	// until it reaches the top node



	function setActiveMenu(arr, crtPage) {

		var topNode = YAHOO.util.Dom.get(navigationList);

		for(var i=0; i < arr.length; i++) {

			  if((arr[i].href) && (extractPageName(arr[i].href) == crtPage)) {

				YAHOO.util.Dom.addClass(arr[i],'active');

				var currNode = arr[i];

				while(currNode != topNode) {

					YAHOO.util.Dom.addClass(currNode,'active');

					if (currNode.tagName=='LI') {

						YAHOO.util.Dom.addClass(YAHOO.util.Dom.getFirstChild(currNode),'active');

					}

					currNode = currNode.parentNode;

				}

			  }

	  }

	}

	function buildBreadcrumbs(target) {

		var els = YAHOO.util.Dom.getElementsByClassName('active','a',navigationList);

		var bStr = '';

		

		if (els.length == 0) {

			bStr = '<span>Home</span>';

		}

		else {

			bStr = '<a href="/">Home</a>';

		}

		for (var i=0; i<els.length; i++) {

			if (i == els.length-1 && !templateParentPage) {

				bStr = bStr + ' &#62; <span>' + els[i].innerHTML + '</span>';

			}

			else {

				bStr = bStr + ' &#62; <a href="' + els[i].href + '">' + els[i].innerHTML + '</a>';

			}

		}

		if (templateParentPage) {

			bStr = bStr + ' &#62; <span>' + thisPageName + '</span>';

		}

		target.innerHTML = bStr;

	}



	
