		function $(id) {
			var r;
			r=document.getElementById(id);
			if(r) return r;
			r=document.getElementsByTagName(id);
			if(r.length>0) return r;
			if(document.getElementsByClassName)r=document.getElementsByClassName(id);
			else {var all=document.getElementsByTagName('*');for(i=0;i<all.length;i++)if(all[i].className==id)r[r.length]=all[i];}
			if(r.length>0) return r;
			return false;
			}	
		
		function setVisibleContent() {			
			if(location.hash!=contentHash) {
				contentHash=location.hash;
				$('vis').innerHTML=$(contentHash.substr(1)).innerHTML;
				
				items=$('a');
				for(i=0;i<items.length;i++) {
					if(items[i].hash==contentHash)
						items[i].parentNode.className="selected";
					else items[i].parentNode.className="";
					}
				}
			}
			
		function loop() {
			if (location.hash != contentHash) setVisibleContent();
			setTimeout(loop, 100);
			}

		function initialize() {
			contentHash='';
			if(location.hash=='')goHome();
			loop();
			}
			
		function goHome() {location.hash="15";} // TODO make generic
		
		function setLoading() {
			x=0;loading=setInterval(function (){x++;var dots='';for(i=0;i<x%20;i++)dots+='.';$('topright').innerHTML=dots;}, 200)
			}
			
		function doneLoading() {
			clearInterval(loading);
			$('sig').innerHTML='<span id="slashes">//</span>braveRobot'; // TODO make generic
			}
			
		function post(url,postdata) {
			try{
				xhr=false;
				try{xhr=new ActiveXObject('Msxml2.XMLHTTP')}catch(e){
				try{xhr=new ActiveXObject('Microsoft.XMLHTTP')}catch(E){xhr=false}}
				if(!xhr){try{xhr=new XMLHttpRequest()}catch(e){xhr=false}}
				if(!xhr){try{xhr=window.createRequest()}catch(e){xhr=false}}

				if(!xhr)
					return "";

				xhr.open('POST',url,false);
				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				xhr.send(postdata);
				}
			catch(BigE){return "";}
			return xhr.responseText;
			}
	
		function sendMsg() {
			var fromVal=escape($('from').value);
			var msgVal=escape($('message').value);
			if(msgVal=="") {
				alert("The message field must be filled out for a message to be sent.");
				return;
				}				
			if(fromVal=="") {
				if(!confirm("The from field was not filled out, so I won't be able to respond to your message. Send it anyway?")) return;
				fromVal="None";
				}			
			setLoading();			
			$('vis').innerHTML=post('m.py','from='+fromVal+'&message='+msgVal);
			doneLoading();
			}

