	var results = [];
	var resultPos = [];
	var resultIcon = [];
	var r = 0;
	var resultWin = document.getElementById("resultdiv");
	var mapcont = document.getElementById("map_container");
	var rtpanel = document.getElementById("rt_panel");
	
	//Function to handle the click of "List" at the category level
	function listCategory(cat){
		restore();
		
		for (var x=0; x<markers.length; x++){		
			if (markers[x].category==cat){
				results[r] = markers[x].name;
				resultIcon[r] = markers[x].iconname
				resultPos[r] = x;
				r++;
			}
		}
		sortResults(resultIcon,results);
		showResults();
	}
	
	//Function to handle the click of "List" at the icon level
	function listIcons(iconname){
		restore();
		
		for (var x=0; x<markers.length; x++){
			if (markers[x].iconname==iconname){
				results[r] = markers[x].name;
				resultIcon[r] = markers[x].iconname
				resultPos[r] = x;
				r++;
			}
		}
		sortResults(results,resultIcon);
		showResults();
	}
	
	//creates a function to search the list of marker names and return results
	function look(){
		
		restore();
		var desc = document.getElementById("descRBN");
		var name = document.getElementById("nameRBN");
		var searchTerm = document.getElementById("searchTerm").value.toLowerCase();
		var searchPatt = new RegExp(searchTerm);
		
		for (var x=0; x<markers.length; x++){
		if (desc.checked)
			var compare = markers[x].desc.toLowerCase();
		if (name.checked)
			var compare = markers[x].name.toLowerCase();
			
			if (searchPatt.test(compare)){
				results[r] = markers[x].name;
				resultIcon[r] = markers[x].iconname
				resultPos[r] = x;
				r++;
			}
		}
		sortResults(results,resultIcon);
		showResults();
	}
	
	/*Sort function: Preforms insertion sort based on point name for typed search and icon list
	Uses category name to sort when list clicked at category level*/
	function sortResults(primary, secondary){
		for (var i=1; i<primary.length; i++){
			var value = primary[i];
			var value2 = secondary[i];
			var value3 = resultPos[i];
			var j = i-1;
			while (j >= 0 && primary[j] > value){
				primary[j+1] = primary[j];
				secondary[j+1] = secondary[j];
				resultPos[j+1] = resultPos[j];
				j--;
			}	
		primary[j+1] = value;
		secondary[j+1] = value2;
		resultPos[j+1] = value3;
		}
	}
	
	//Displays results of search
	function showResults(){
			
		mapcont.setAttribute("onclick", "restore();resultWin.style.display = 'none';");
		rtpanel.setAttribute("onclick", "restore();resultWin.style.display = 'none';");
		var text = document.createElement('span');
		text.setAttribute('class', "resultbox");
		text.innerHTML = "Search Results:<br>";
		var text2 = document.createElement('span');
		text2.setAttribute('class', "resultbox2");
		text2.innerHTML = "Points not currently displayed on map will be labeled (Hidden)";
		var closeLink = document.createElement('a');
		closeLink.href = "javascript:void(0);"
		closeLink.setAttribute("onclick", "restore();resultWin.style.display = 'none';");
		closeLink.innerHTML = "[X] Close this window";
		closeLink.setAttribute('class', "closelink");
		closeLink.setAttribute('style', "color:black;");
		resultWin.appendChild(closeLink);
		
		//Search returned results
		if (results.length > 0){
			resultWin.appendChild(text);
			resultWin.appendChild(text2);
			resultWin.appendChild(document.createElement("br"));
			resultWin.appendChild(document.createElement("br"));
			for (var x=0; x<results.length; x++){
				if (!markers[resultPos[x]].isHidden()){
					var a = document.createElement('a');
					a.href = 'javascript:listclick('+resultPos[x]+');';
					a.innerHTML = results[x];
					resultWin.appendChild(a);
					var iconname = document.createTextNode(" - " + resultIcon[x]);
					resultWin.appendChild(iconname);
				}else{
					var a = document.createElement('span');
					a.setAttribute('style', 'color:#969069');
					a.innerHTML = "<u>" + results[x] + "</u> - " + resultIcon[x] + "    <b>(Hidden)</b>";
					resultWin.appendChild(a);
				}
				
				resultWin.appendChild(document.createElement("br"));
			}
			resultWin.appendChild(document.createElement("br"));
			resultWin.appendChild(document.createElement("br"));
			
		}else{ //Search found nothing
			text.innerHTML = "No points match your search.";
			resultWin.appendChild(text);
		}
		resultWin.style.display = 'inline';
		
	}
	
	//User clicked point in results list. Jump to marker to avoid Google Map error, close search pane
	function listclick(i) {
		restore();
		resultWin.style.display = 'none';
		
		map.setZoom(15);
		map.panTo(markers[i].coord);
		var t=setTimeout("GEvent.trigger(markers["+i+"],'click')",50);
				
	}
	
	//Reset search to prepare for new search. Called after most of the above functions.
	function restore(){
		resultWin.innerHTML = "";
		results = [];
		resultIcon = [];
		resultPos = [];
		r = 0;
	}
	
	//Function checks for Enter Key press and runs search if it finds it. Negates need for user to click button.
	function check(e){
		var keynum;
		var keychar;
		var check;

		//Browser dependant code for key press event. Function called from search field on index/city htm files.
		if(window.event){ // IE
			keynum = e.keyCode;
		}else if(e.which){ // Netscape/Firefox/Opera
			keynum = e.which;
		}
		keychar = String.fromCharCode(keynum);
		check = /\r/;
		if(check.test(keychar))
			look();
	}