function addLoadEvent(func)
{	
	var oldonload = window.onload;
	if (typeof window.onload != 'function'){
    	window.onload = func;
	} else {
		window.onload = function(){
		oldonload();
		func();
		}
	}

}
addLoadEvent(upstart);
//js "bootloader". Loads all functions that need to run after the page is loaded
function upstart(){
	/*we're using a ternary operator. If the function exists, execute it. 
	If it doesn't, don't give an error. Great for code reuse.*/
	(window.makeMailLinks)?(makeMailLinks()):(null); //create mail links: (at) -> @
	(window.activateTabs)?(activateTabs()):(null); //tabs
	defer = window.setTimeout('deferred();',100); /* work around browser bugs (*cough* IE *cough*)  by delaying execution a bit */
	}
function deferred()
	{
	(window.load)?(load()):(null); //load google maps
	}
/* 
<span class="email'>x (at) x.com</span> ->
 <a href="mailto:x@x.com">x@x.com</a>*/
function makeMailLinks()
	{
	if (!document.getElementsByTagName && !document.createElement && !document.createTextNode)
		return;
	var spans = document.getElementsByTagName("span");
	for(var i=0;i<spans.length;i++)
		{
		if (spans[i].className=="email")
			{
			var theNode = spans[i];
			var theAddress = theNode.firstChild.nodeValue;
			
			theAddress = theAddress.replace(/ \(at\) /, "@");
			theAddressNode = document.createElement('A');
			theAddressNode.setAttribute("href", "mailto:" + theAddress);
			theAddressNode.appendChild(document.createTextNode(theAddress));
			theNode.parentNode.replaceChild(theAddressNode, theNode);
			i--; /*because we implicitly removed a <span> from the spans array by making it an <a>; Otherwise it'll skip the next span*/
			}
		}
	}
/*tabbed document inteface*/
var tabs = new Array;
function activateTabs()	{
	if(document.getElementById('tdi'))
		{
		var tablinks = getElementsByClassName('li','tablink');
		tabs = getElementsByClassName('div','tab');
		for(var i = 0;i<tablinks.length; i++)
			{
			tablinks[i].onclick= function(){
				var getTabId = this.firstChild.href.split('#')[1];
				for(var i=0;i<tabs.length;i++)
					{
					if(tabs[i].id!=getTabId)
						{
						tabs[i].style.display='none';
						}else{
						tabs[i].style.display='block';
						}
					}
					for(var i = 0;i<tablinks.length;i++)
						{
						removeClass(tablinks[i].firstChild,'active');
						}
					addClass(this.firstChild,'active');
					return false;
				}
			}
		}
	}

/* common functions */
function addClass(element,classname)
	{
	var classes = new Array;
	if(element.className!=undefined)
		{
		classes = element.className.split(' ');
		}
	classes.push(classname);
	element.className=classes.join(' ');
	}
function removeClass(element,classname)
	{
	var classes = new Array;
	if(element.className!=undefined)
		{
		classes = element.className.split(' ');
		}
	var temp=new Array;
	for(var i = 0;i < classes.length;i++)
		{
		if(classes[i]!=classname)
			{
			temp.push(classes[i]);
			}
		}
	element.className=temp.join(' ');
	}
//as long as browsers don't support getElementsByClassName, let's just write our own!
//extra functionality browsers won't support ever: 
//-values can be added by appending them in brackets. example: required(*@*.*),, popup(500,400), ...
function getElementsByClassName(tag, classname)	{
	var xyzzy=document.getElementsByTagName(tag);
	var elements = new Array;
	var regulexp= new RegExp("(^|\\s)"+classname+"(\\s|$|\\(.*\\))");
	for(i=0;i<xyzzy.length;i++)
		{
		if(regulexp.test(xyzzy[i].className))
			{
			elements[elements.length]=xyzzy[i];
			}
		}
	return elements;
	}
//extract the variables passed between {}'s
function getClassVariables(e,classname)	{
	vars = new Array;
	varstring = e.className;
	//var regulexp= new RegExp("(^|\\s)"+classname+"(\\s|$|{.*})");
	var regulexp= new RegExp(classname+"\\((.*)\\)");
	varr=varstring.match(regulexp);
	varstring = varr[1];
	vars=varstring.split(',');
	return vars;
	}

