/*	Finds elements on page that match a given CSS selector rule. Some	complicated rules are not compatible.	Based on Simon Willison's excellent "getElementsBySelector" function.	Original code (with comments and description):		http://simon.incutio.com/archive/2003/03/25/getElementsBySelector*/function getElementsBySelector(selector){	var tokens = selector.split(' ');	var currentContext = new Array(document);	for(var i=0;i<tokens.length;i++)	{		token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');		if(token.indexOf('#') > -1)		{			var bits = token.split('#');			var tagName = bits[0];			var id = bits[1];			var element = document.getElementById(id);			if(tagName && element.nodeName.toLowerCase() != tagName)				return new Array();			currentContext = new Array(element);			continue;		}		if(token.indexOf('.') > -1)		{			var bits = token.split('.');			var tagName = bits[0];			var className = bits[1];			if(!tagName)				tagName = '*';			var found = new Array;			var foundCount = 0;			for(var h=0;h<currentContext.length;h++)			{				var elements;				if(tagName == '*')					elements = currentContext[h].all ? currentContext[h].all : currentContext[h].getElementsByTagName('*');				else					elements = currentContext[h].getElementsByTagName(tagName);				for(var j=0;j<elements.length;j++)					found[foundCount++] = elements[j];			}			currentContext = new Array;			var currentContextIndex = 0;			for(var k=0;k<found.length;k++)			{				if(found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b')))					currentContext[currentContextIndex++] = found[k];			}			continue;	    }		if(token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/))		{			var tagName = RegExp.$1;			var attrName = RegExp.$2;			var attrOperator = RegExp.$3;			var attrValue = RegExp.$4;			if(!tagName)				tagName = '*';			var found = new Array;			var foundCount = 0;			for(var h=0;h<currentContext.length;h++)			{				var elements;	        	if(tagName == '*')					elements = currentContext[h].all ? currentContext[h].all : currentContext[h].getElementsByTagName('*');				else					elements = currentContext[h].getElementsByTagName(tagName);				for(var j=0;j<elements.length;j++)					found[foundCount++] = elements[j];			}			currentContext = new Array;			var currentContextIndex = 0;			var checkFunction;			switch(attrOperator)			{				case '=':					checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };					break;				case '~':					checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };					break;				case '|':					checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };					break;				case '^':					checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };					break;				case '$':					checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };					break;				case '*':					checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };					break;				default :					checkFunction = function(e) { return e.getAttribute(attrName); };			}			currentContext = new Array;			var currentContextIndex = 0;			for(var k=0;k<found.length;k++)			{				if(checkFunction(found[k]))					currentContext[currentContextIndex++] = found[k];			}			continue;		}		tagName = token;		var found = new Array;		var foundCount = 0;		for(var h=0;h<currentContext.length;h++)		{			var elements = currentContext[h].getElementsByTagName(tagName);			for(var j=0;j<elements.length; j++)				found[foundCount++] = elements[j];		}		currentContext = found;	}	return currentContext;}function extractText(element){	if(typeof element == "string")		return element;	else if(typeof element == "undefined")		return element;	else if(element.firstChild.innerText)		return element.firstChild.innerText;	else if(element.innerText)		return element.innerText;	var text = "";	var kids = element.childNodes;	for(var i=0;i<kids.length;i++)	{		if(kids[i].nodeType == 1)		text += extractText(kids[i]);		else if(kids[i].nodeType == 3)		text += kids[i].nodeValue;	}	return text;}function addLoadHandler(handler){	if(window.addEventListener)	{		window.addEventListener("load",handler,false);	}	else if(window.attachEvent)	{		window.attachEvent("onload",handler);	}	else if(window.onload)	{		var oldHandler = window.onload;		window.onload = function piggyback()		{			oldHandler();			handler();		};	}	else	{		window.onload = handler;	}}function showDiv(whichDiv){ 	if (document.getElementById)		{ 		var menus;		var numMenus;				menus = getElementsBySelector('div#header li');				for (i = 0 ; i 	< menus.length ; i++)			menus[i].id = "";				for (i = 0 ; i < menus.length ; i++)			{			var menu = menus[i];			var menuText = extractText(menu);			var thisDiv = document.getElementById(menuText);						if (thisDiv.id == extractText(whichDiv))				{				menus[i].id = "current";				thisDiv.style.display = 'block';				}			else				{				thisDiv.style.display = 'none';				}			}		}}function initializeSections(){	if (document.getElementById)		{		var menus;				menus = getElementsBySelector('div#header li');				if (menus.length > 0)			showDiv(menus[0]);		}}addLoadHandler(function(){ initializeSections(); });
