function initSearch()
{
	if (!isDisabled)
	{
	    var searchValue = document.getElementById("txtSearch").value;
	    if (searchValue == "")
	    	alert("You must type something into the search box");
	    else if (searchValue.length < 2)
	    	alert("The search field must contain at least two characters");
		else
		{    
			while (searchValue[searchValue.length-1] == " ") //remove any hanging white space
				searchValue = searchValue.substring(0, searchValue.length-1);
			showMask();
	    	clearAll(false);
			gmap.setCenter(center, 7);
			searchIDNum++;
			var thisID = searchIDNum;
			showLoadResult("results");
	    	adjustResultDiv();

	    	$.getJSON('api-place-search.action', {
				label: searchValue
				}, function (results){					
						showSearchResults(results, thisID)});      
	    }
    }
	return false;
}
function initLayerSearch()
{
	if (!isDisabled)
	{
		var placesToSearch = "";
		var searchValue = document.getElementById("txtLayerSearch").value;
	    if (searchValue == "")
	    	alert("You must type something into the search box");   	
		else
		{
		     var searchCriteria = [];
		     for (var i=0; i < Layers.length; i++)
		         if(document.getElementById("chkbx_"+Layers[i]).checked)
		             searchCriteria.push(Layers[i]);
		     
		     if (searchCriteria.length < 1)
		         alert("You must check at least one search criteria");
		     else
		     {
		     	showMask();
		     	gmap.setCenter(center, 7);
		         for (var i=0; i < searchCriteria.length; i++)
		             placesToSearch += searchCriteria[i] + ",";
//		             placesToSearch += getDBTableName(searchCriteria[i]) + ",";
		         placesToSearch = placesToSearch.substring(0,placesToSearch.length-1);
		         removeMarkers();
				 searchIDNum++;
		   var thisID = searchIDNum;
		   	showLoadResult("results");
		   	adjustResultDiv();
		   	$.getJSON('api-jurisdiction-search.action', {
					searchValue: searchValue,
					jurises: placesToSearch
					}, function (results){					
						showSearchResults(results, thisID)});   
			}		
		  /*$.get('servlet/DBServlet', 
		  	{
				method: 'search',
				value: searchValue,
				places: placesToSearch
				},showSearchResults);  */
		}
	}
	return false;
}
function initRadialSearch(radius, point, newSearch)
{
	if (!isDisabled)
	{
		var flag = true;
		gmap.closeInfoWindow();
		if (radius.previousSibling)
			if (radius.previousSibling.name  == "ddlMiles")
				radius = radius.previousSibling.previousSibling;
		if (radius.value)
			radius = parseFloat(radius.value);
		if (newSearch)
			circleListDB = [];		
		else //make sure we are not re-searching a specific range
		{
			for (var i=0; i < circleListDB.length; i++)
				if (circleListDB[i].size == radius)
					flag = false;
		}
		if (flag)
		{
			radiusSearchSize = radius;
			var circle;
			if (!point) 
			{
				var bounds = selectedJurisdiction.polygon[0].getBounds();
				point = bounds.getCenter();
				circle = drawCircleForSearch(point, radius, newSearch);
			}
			else if (point == "add")
				circle = drawCircleForSearch(radiusSearchCircle.polyClickPoint, radius, newSearch);
			else
				circle = circleOverlays[circleOverlays.length-1];
			//removePolygon();
			
			showLoadResult("listResults");
			switchTab("#lists");
			adjustListResultDiv();	
			
			var dim = gmap.getSize();
			var idtask = new esri.arcgis.gmaps.IdentifyTask(serviceURL);
			
			var idparams = new esri.arcgis.gmaps.IdentifyParameters();
			idparams.geometry = circle;
			idparams.tolerance = 1;
			idparams.bounds = gmap.getBounds();
			idparams.width = dim.width;
			idparams.height = dim.height;
			idparams.layerOption = "all";  // vs visible, all, top
			idparams.layerIds = [layerID.ParishInfo];
			idparams.returnGeometry = false;
			
			idtask.execute(idparams, displayRadialResults);
		}
	}
}
function initContiguousSearch()
{
	if (!isDisabled)
	{
		showLoadResult("listResults");
		document.getElementById("listResults").innerHTML +="<div id='listBottomMark'></div>";
		switchTab("#lists");
		adjustListResultDiv();
		var idtask = new esri.arcgis.gmaps.IdentifyTask(serviceURL);
		var dim = gmap.getSize();
		var id = getLayerID(selectedJurisdiction.type);
		if (id==layerID.Parish)
			id = layerID.ParishInfo;
		else if (id == layerID.County)
        	id = layerID.CountyInfo;
        else if (id == layerID.Diocese)
        	id = layerID.DioceseInfo;
		var idparams = new esri.arcgis.gmaps.IdentifyParameters();
		
		idparams.geometry = selectedJurisdiction.polygon;
		idparams.tolerance = 1;
		idparams.bounds = gmap.getBounds();
		idparams.width = dim.width;
		idparams.height = dim.height;
		idparams.layerOption = "all";  // vs visible, all, top
		idparams.layerIds = [id];
		idparams.returnGeometry = false;
		
		idtask.execute(idparams, showContiguousResults);			
	}
}
function getMultiContigAsync()
{
	var polygons = selectedJurisdiction.polygon;
	asyncContigData.numOfResults = polygons.length;
	asyncContigData.results = [];
	
	var dim = gmap.getSize();
	var id = getLayerID(selectedJurisdiction.type);
	if (id==layerID.Parish)
		id = layerID.ParishInfo;
	else if (id == layerID.County)
    	id = layerID.CountyInfo;
    else if (id == layerID.Diocese)
    	id = layerID.DioceseInfo;
	
	for (var i=0; i < polygons.length; i++)
	{
		var idtask = new esri.arcgis.gmaps.IdentifyTask(serviceURL);
		
		var idparams = new esri.arcgis.gmaps.IdentifyParameters();		
		idparams.geometry = polygons[i];
		idparams.tolerance = 1;
		idparams.bounds = gmap.getBounds();
		idparams.width = dim.width;
		idparams.height = dim.height;
		idparams.layerOption = "all";  // vs visible, all, top
		idparams.layerIds = [id];
		idparams.returnGeometry = false;		
		idtask.execute(idparams, asyncContigReturnHandler);
	}
}
function asyncContigReturnHandler(results)
{
	asyncContigData.results.push(results);
	if (asyncContigData.results.length == asyncContigData.numOfResults)
	{
		var result = { identifyResults: []};
		for (var i=0; i < asyncContigData.results.length; i++)
			for (var j=0; j <asyncContigData.results[i].identifyResults.length; j++)
				result.identifyResults.push(asyncContigData.results[i].identifyResults[j]);
		
		//remove any duplicates
		for (var i=0; i < result.identifyResults.length; i++) 
			for (var j=i+1; j < result.identifyResults.length; j++)
				if (result.identifyResults[i].feature.attributes.SGUID == result.identifyResults[j].feature.attributes.SGUID)
					result.identifyResults.splice(j--, 1);
		showContiguousResults(result);
	}
}
function getChildren(type)
{
	showLoadResult("listResults");
	document.getElementById("listResults").innerHTML +="<div id='listBottomMark'></div>";
	switchTab("#lists");
	$.getJSON('api-jurisdiction-children.action', {
		sGuid: selectedJurisdiction.mainSguid,
		jurisType: type
		}, showChildrenResults);   
}
/**
 * Converts an array into the javascript form of the array to pass data from one js method to another. 
 */
function arrayAsString(toConvert) {
	var arrayAsString = "[";
	if (toConvert && toConvert.length) {
		for (i = 0; i < toConvert.length; i++) {
			if (arrayAsString.length > 1) {
				arrayAsString += ",";
			}
			arrayAsString += "\"" + toConvert[i] + "\"";
		}
	} else if (toConvert) {
		arrayAsString += "\"" + toConvert + "\"";
	}

	arrayAsString += "]";
	
	return arrayAsString;
}
function showSearchResults(result, searchID)
{
	if (!isAborted(searchID))
	{
		var html ="";
		var headerHtml = "";
		var searchParam = result.searchValue;
		var markerNum = 1;
		result = result.result.results;
		var numOfResults = 0;
		var resultArray = [];
		
		resetLayers();
		
		for (i=0; i<result.length; i++)
			numOfResults += result[i].jurisdictions.length;
		
		if (numOfResults > 0)
		{
			headerHtml = "<img src='images/close.gif' class='listClose' onclick='clearSearch()'>";
			headerHtml +="<div class='resMainHeader'> Search results ("+numOfResults+")</div>";
		 	html = "<div class='layerListing'>";
			html += "<div class='resultSet'>";
			
			var order = ["County", "Parish", "Civil Registration District", "Diocese", "Rural Deanery", "Poor Law Union", "Hundred", "Province"];
			var isOverLimit = false;
			for (var i=0; i < order.length; i++)
			{
				for (var j=0; j < result.length; j++)
				{
					if (order[i] == result[j].layer)
					{
						var jurisdiction =  result[j].layer;
						if (jurisdiction == "Parish") //add county sort
						{
							for (var a=0; a < result[j].jurisdictions.length ; a++)
							{
								for (var b=0; b < result[j].jurisdictions.length; b++)
								{
									if (result[j].jurisdictions[a].name == result[j].jurisdictions[b].name) //same name, compare counties
									{
										if (result[j].jurisdictions[a].county < result[j].jurisdictions[b].county) 
										{
											// swap A and B 
											var temp = result[j].jurisdictions[b];
											result[j].jurisdictions[b] = result[j].jurisdictions[a];  
											result[j].jurisdictions[a] = temp; 
										}
									}
								}
							}
						}
						var priorityTwoResults = [];
						html += "<div class='resMainHeader' style='font-size: 0.75em'>"+jurisdiction+"</div>";			
						html += "<div class='resultBody'>";
						var num = 0;
						for (var k=0; k < result[j].jurisdictions.length; k++)
						{
							if (num > 100)
							{
								isOverLimit = true;
								break;
							}
							var name = result[j].jurisdictions[k].name;
							name = name.replace(/'/g, "&#39;");
							//sort which should come first
							if (name.substring(0, searchParam.length).toUpperCase() != searchParam.toUpperCase())
							{
								priorityTwoResults.push(result[j].jurisdictions[k]);
							}
							else
							{
								var line = getJurisResultLine(result[j].jurisdictions[k], result[j].jurisdictions, jurisdiction, num, markerNum);
								html += line.html;								
								if (jurisdiction == "Parish")
								{
									markerNum = line.resultObj.markerNum+1;
									resultArray.push(line.resultObj);
									if (numOfResults == 1) //only one result
									{
										gmap.setCenter(new GLatLng(line.resultObj.lat, line.resultObj.lng));
									}
								}
								num++;
							}
						}
						for (var k=0; k < priorityTwoResults.length; k++)
						{
							if (num > 100)
							{
								isOverLimit = true;
								break;
							}
							var line = getJurisResultLine(priorityTwoResults[k], priorityTwoResults, jurisdiction, num, markerNum);
							html += line.html;							
							
							if (jurisdiction == "Parish")
							{
								markerNum = line.resultObj.markerNum+1;
								resultArray.push(line.resultObj);
								if (numOfResults == 1) //only one result
								{
									gmap.setCenter(new GLatLng(line.resultObj.lat, line.resultObj.lng));
								}
							}
							num++;
						}						
						html += "</div>";
					}
				}
			}			
		}
		else
		{
			html = "There were no results available for your search.";
			hideMask();
		}	
		if (isOverLimit)
			alert("The search exceed 100 results, please refine your resulsts. (The top 100 will be displayed) ")
		html += "</div><div id='bottomMark'></div>";
		document.getElementById("resultsHeader").innerHTML = headerHtml;
		document.getElementById("results").innerHTML = html;
		adjustResultDiv();
		plotMarkersOnSearchResults(resultArray, searchID);
	}
}
function getJurisResultLine(juris, jurisdictions, jurisdictionType, num, markerNum)
{
	var html = "";
	var resultObj = {markerNum: markerNum};
	var name = juris.name;
	name = name.replace(/'/g, "&#39;");
	var lat = juris.lat;
	var lng = juris.lng;

	if (juris.place && juris.place.indexOf("[") != -1)
		name = juris.place;
	else if (juris.place && juris.place.indexOf("(") != -1)
		name += " " + juris.place.substring(juris.place.indexOf("("), juris.place.indexOf(")")+1);
	else if (jurisdictionType == "Parish") //check if, within the same county, two parishes have the same name
		for (var l=0; l < jurisdictions.length; l++)
			if (jurisdictions[l].name == juris.name &&	jurisdictions[l].county == juris.county &&	num != l && juris.SGUIDs[0] != jurisdictions[l].SGUIDs[0])
					name = juris.place;
	
	var sguid = juris.SGUIDs;
	var lat = juris.lat;
	var lng = juris.lng;
	var county = juris.county;
	if (jurisdictionType == "Parish" && markerNum <= 50)
	{
		var onclickText = "onclick='selectByList(\""+getOverlayName(jurisdictionType)+"\", "+arrayAsString(sguid)+", "+markerNum+", \""+name+"\", "+lat+", "+lng+")'";
		html += "<div style='padding-left:25px; text-indent: -25px;'>"
		html += "<img src='"+markerSrc+markerNum+".png' style='margin-right: 3px; vertical-align: middle; cursor: pointer' "+onclickText+">";
		html += "<span "+onclickText+">"+name;
	}
	else
	{
		html += "<li>";
		html += "<span onclick='selectByList(\""+getOverlayName(jurisdictionType)+"\", " + arrayAsString(sguid) + ", "+markerNum+", \""+name+"\", "+lat+", "+lng+")'>"+name;
	}
	if (county != null)
		html += ", "+county;
	html+="</span></li>";

	if (jurisdictionType == "Parish")
	{
		resultObj = {
			jurisType: getOverlayName(jurisdictionType),
			sguid: sguid,
			name: name,
			markerNum: markerNum,
			lat: lat,
			lng: lng};
		if (juris.variantSpellings && juris.variantSpellings.length > 0)
		{
			html += "<img src='images/info.gif' style='margin-left: 5px' ";
			html += "onmouseover='showOPList("+num+")' onmouseout='hideOPList("+num+")'>";
			html += "<div class='otherPlaceList' id='opList_"+num+"' style='text-indent: 0px !important'>";
			html += "<u>See references/variant spellings:</u>";
			html += "<ul style='margin: 5px 0 5px; padding-left: 25px; list-style-type: square'>";
			for (var  l=0; l < juris.variantSpellings.length; l++)
			{
				html += "<li>"+juris.variantSpellings[l].name+"</li>";
			}
			html += "</ul></div>";
		}								
		if (juris.otherPlaces && juris.otherPlaces.length > 0)
		{
			html += "<ul style='margin: 0px; padding-left: 30px;'>";
			for (var  l=0; l < juris.otherPlaces.length; l++)
				html += "<li style='text-indent: 0px'>"+juris.otherPlaces[l].name+"</li>";
			html += "</ul>";
		}
		else
		{ 
			html +="<br />"
		}
		if (markerNum <= 50)
			html += "</div>";
	}
	else 
	{ 
		html += "<br />";
	}	

	return {html: html, resultObj: resultObj};
}
function displayRadialResults(result)
{
	result = result.identifyResults;
	
 	var list = []; 
 	var center = radiusSearchCircle.polyClickPoint;
 	var lat1 = center.lat();
 	var lng1 = center.lng();
 		function toRad(deg)
 		{
 			return deg * Math.PI/180;
		}

	for (var i=0; i < result.length; i++)
	{
		var sguid = result[i].feature.attributes.SPATIALGUID;
		if (sguid != "Null")
		{
			var county = result[i].feature.attributes.NOTES;
			county = county.substring(county.indexOf(";")+1);
			var name = result[i].feature.attributes.LABEL;
			var numOfNamesInCounty = result[i].feature.attributes.NOTES2.substring(0, result[i].feature.attributes.NOTES2.indexOf(";"));
			if (parseInt(numOfNamesInCounty) > 1)
				name = result[i].feature.attributes.NOTES2.substring(result[i].feature.attributes.NOTES2.indexOf(";")+1);
			var parishName = name + ", " + county;
			//var b = result[i].feature.geometry[0].getBounds();
			var b = getCenterFromResult(result[i]);
			var lat2 = b.lat();
			var lng2 = b.lng();
			var R = 6371; // km
			var dLat = toRad(lat2-lat1);
			var dLng = toRad(lng2-lng1);
			var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.sin(dLng/2) * Math.sin(dLng/2); 
			var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
			var d = R * c; //in KM
			var m = d / 1.609344; 
			list.push({"ID": sguid, 
					   "name": parishName, 
					   "distance": d, 
					   "miles": m,
					   "lat": lat2,
					   "lng": lng2});
		}
    }  
 	var circleListObjectType = {"size": radiusSearchCircle.radius, "parishes": []};
 	circleListObjectType.parishes = list;
  	circleListDB.push(circleListObjectType);	
   
    sortAndCleanRList();
    var html = "";
    for (var i=0; i < circleListDB.length; i++)
    {
    	 var size = circleListDB[i].size;
    	   	 
    	 html += "<div id='radialHolder_"+size+"'>";
    	 if (i > 0)
     	 	html += "<br />";  
		 html += "<img src='images/close.gif' class='listClose' onclick='clearRadius("+size+")'>";
		 html += "<div class='resMainHeader' style='color: "+radiusColorKey[size]+"; font-size: 0.75em'>";
		 if (isMiles)
		 	html += "Parishes within a "+size+" mile radius</div>";
	 	 else
	 		html += "Parishes within a "+size+" km radius</div>";
		 html += "<div class='layerListing'>";
		 for (var j=0; j < circleListDB[i].parishes.length; j++)
		 {
			 
		    html += "<span onclick=\"selectByList('Parish','"+circleListDB[i].parishes[j].ID+"')\" ";
		    html += "onmouseover=\"displayMarkerAtPoint("+circleListDB[i].parishes[j].lat+","+circleListDB[i].parishes[j].lng+")\" ";
		 	html += "onmouseout=\"removeMarkerAtPoint()\">";
		    html +=circleListDB[i].parishes[j].name+"</span> ";
		    html +="<span class='miles' onclick=\"selectByList('Parish','"+circleListDB[i].parishes[j].ID+"')\" ";
		    html += "onmouseover=\"displayMarkerAtPoint("+circleListDB[i].parishes[j].lat+","+circleListDB[i].parishes[j].lng+")\" ";
		 	html += "onmouseout=\"removeMarkerAtPoint()\">";
		    if (isMiles)
		    	html +="("+circleListDB[i].parishes[j].miles.toFixed(2)+" miles)</span><br />";
	    	else
	    		html +="("+circleListDB[i].parishes[j].distance.toFixed(2)+" km)</span><br />";
		    
	    }
    	html += "</div></div>";
    }
    html += "<div id='listBottomMark'></div>";
    PrintObject.list = html;
    document.getElementById("listResults").innerHTML = html;
    adjustListResultDiv();
    if (navigator.appName == "Microsoft Internet Explorer")	
		adjustListResultDiv();
}
function sortAndCleanRList()
{
	if (circleListDB.length > 1)
	{
		var newList = [];
		var searchSizes = [0.25, 0.5, 1, 3, 5, 10, 15];
		var listOrder = [];
		for (var x=0; x < searchSizes.length; x++) //we need to reorder the circleListDB from least to greatest
			for (var y=0; y < circleListDB.length; y++)
				if (circleListDB[y].size == searchSizes[x])
					listOrder.push(y); 					
		for (var z=0; z < listOrder.length; z++)
			newList.push(circleListDB[listOrder[z]]);
		
		circleListDB = newList;
		newList = [];		
		for (var i=searchSizes.length-1; i > 0 ; i--)
		{
			var mainNum = -1; // only sort if we have parishes for this size, if so we need the place num
			for (var j=0; j < circleListDB.length; j++)
				if (circleListDB[j].size == searchSizes[i])
					mainNum = j;
			if (mainNum != -1)
			{
				for (var a=i-1; a >= 0; a--)
				{
					var innerNum = -1;
					for (var l=0; l < circleListDB.length; l++)
						if (circleListDB[l].size == searchSizes[a])
							innerNum = l;
					if (innerNum != -1) //this circleList exists
					{
						var list = [];
						for (var m=0; m < circleListDB[mainNum].parishes.length; m++)
						{						
							var isInLower = false;
							for (var n=0; n < circleListDB[innerNum].parishes.length; n++)
							{
								if (circleListDB[mainNum].parishes[m].ID == circleListDB[innerNum].parishes[n].ID)
								{
									isInLower = true;
									break;
								}
							}
							if (!isInLower)
								list.push(circleListDB[mainNum].parishes[m]);
						}
						circleListDB[mainNum].parishes = list;
					}
				}
			}
		}
	}
	//sort by name
	for (var i=0; i < circleListDB.length; i++)
		circleListDB[i].parishes.sort(sortList);
	function sortList(a, b)
	{
		if (a.distance == b.distance)
			return 0;
		else if (a.distance < b.distance)
			return -1;
		else
			return 1;		
	}
}
function showContiguousResults(result)
{
	if (result.identifyResults.length == 0 && selectedJurisdiction.polygon.length >1)
	{   //No results and multiple jurisdictions. There was an error and we need to pass each jurisdiction seperatly
		getMultiContigAsync();
	}
	else
	{
		function sortCont(a, b)
		{
			if (a.feature.attributes.LABEL == b.feature.attributes.LABEL)
				return 0;
			else if (a.feature.attributes.LABEL < b.feature.attributes.LABEL)
				return -1;
			else
				return 1;		
		}
		result = result.identifyResults;
		result.sort(sortCont);
		
		//check to see if we have any split jurisdictions
		var label = selectedJurisdiction.label;
		for (var i=0; i < result.length; i++)
			if (result[i].feature.attributes.LABEL.indexOf(label + "; ") != -1 ||result[i].feature.attributes.LABEL.indexOf("; "+label) != -1)
				result.splice(i--, 1);
		var html = "<div class='layerListing'>";
		var header;
		var shapes = [];
		for (var i=0; i < result.length; i++)
		{
			var jurisName = result[i].feature.attributes.LABEL;
			if (!isInArray(shapes, result[i].feature.attributes.SPATIALGUID) && jurisName != "Null" && jurisName != "Not Applicable" && jurisName != "None" && jurisName != "Search the courts of surrounding parishes")
			{
				var SGUID = result[i].feature.attributes.SPATIALGUID;
				shapes.push(SGUID);
				var county = "";
				if (result[i].layerName == "Parish" && result[i].feature.attributes.NOTES.indexOf(";") != -1)
				{
					county = result[i].feature.attributes.NOTES;
					county = county.substring(county.indexOf(";")+1);
					county = ", " + county;
				}
				
				
				var numOfNamesInCounty = result[i].feature.attributes.NOTES2.substring(0, result[i].feature.attributes.NOTES2.indexOf(";"));
				if (parseInt(numOfNamesInCounty) > 1)
					jurisName = result[i].feature.attributes.NOTES2.substring(result[i].feature.attributes.NOTES2.indexOf(";")+1);
				
				jurisName += county;
				if (SGUID!=selectedJurisdiction.mainSguid) //don't display the juris as a contiguis juris
			 	{
					var center = getCenterFromResult(result[i]);
				 	html += "<span onclick=\"selectByList('"+selectedJurisdiction.type+"','"+SGUID+"')\"";
				 	html += "onmouseover=\"displayMarkerAtPoint("+center.lat()+","+center.lng()+")\" ";
				 	html += "onmouseout=\"removeMarkerAtPoint()\">"; 
			        html += jurisName+"</span><br />";
		        } 
		        else 
		        {
		        	var type = getPluralOfJurisdiction(result[i].layerName);
		    		header = "<img src='images/close.gif' class='listClose' onclick='clearListSearch()'><div class='resMainHeader' style='font-size: 0.75em'> "+type+" contiguous to ";
		        	header += jurisName + "</div>";
		        }
			}
	    }
	    html += "</div>";
	    html += "<div id='listBottomMark'></div>";
	    html = header + html;
	    PrintObject.list = html;
	    document.getElementById("listResults").innerHTML = html;
	    adjustListResultDiv();
	    if (navigator.appName == "Microsoft Internet Explorer")	
			adjustListResultDiv();
	}
}
function showChildrenResults(results)
{
	if (results.childrenResult.results.length > 0)
	{
		var juris = results.jurisGuid;
		var type = results.jurisType;
		results = results.childrenResult.results[0].jurisdictions;
		var header = "<img src='images/close.gif' class='listClose' onclick='clearListSearch()'><div class='resMainHeader' style='font-size: 0.75em'>"
			       + getPluralOfJurisdiction(type) + " in " + juris.JURISDICTION + " " + juris.LAYER + "</div>";
		var html = "<div class='layerListing'>";
		for (var i=0; i < results.length; i++)
		{
			var name = results[i].name;
			if (name != "Not Applicable" && name != "None" && name != "Search the courts of surrounding parishes")
			{
				html += "<span onclick=\"selectByList('"+type+"','"+results[i].SGUID+"')\"";
			 	html += "onmouseover=\"displayMarkerAtPoint("+results[i].lat+","+results[i].lng+")\" ";
			 	html += "onmouseout=\"removeMarkerAtPoint()\">"; 
		        html += name+"</span><br />";
			}
		}
		html += "</div>";
		html = header + html;
	    PrintObject.list = html;
	    
	}
	else
	{
		html = "There were no results available for your search";
		PrintObject.list = "";;
	}
	
	document.getElementById("listResults").innerHTML = html;
    adjustListResultDiv();
    if (navigator.appName == "Microsoft Internet Explorer")	
		adjustListResultDiv();
}
function clearRadius(idNum)
{
	var parent = document.getElementById("listResults");
	var child = document.getElementById("radialHolder_"+idNum);
	var marker = document.getElementById("listBottomMark");
	parent.removeChild(child);
	
	if (parent.firstChild == marker) //last search
	{
		parent.innerHTML = "";
		removeRadiusPolygon();
	}
	else
	{
		if (parent.firstChild.firstChild.nodeName == "BR")
			parent.firstChild.removeChild(parent.firstChild.firstChild);
		for (var i=0; i < circleOverlays.length; i++)
			if (circleOverlays[i].color == radiusColorKey[idNum])
				gmap.removeOverlay(circleOverlays[i]);
	}
	adjustListResultDiv();
	adjustResultDiv();
	hideListTab();
}

function displayMarkerAtPoint(lat,lng)
{
	var markerIcon = new GIcon(G_DEFAULT_ICON);
	var markerOptions = {icon:markerIcon};
	var center = new GLatLng(lat,lng);
	singleMarker = new GMarker(center,{icon: markerIcon, zIndexProcess: function(){return 150;}}); 
	gmap.addOverlay(singleMarker);
	//gmap.closeInfoWindow();
	gmap.getInfoWindow().hide();
}
function removeMarkerAtPoint()
{
	if (singleMarker)
	{
		gmap.removeOverlay(singleMarker);
		singleMarker = null;
		var infoWindow = gmap.getInfoWindow();
		if (infoWindow.isHidden() && infoWindow.getContentContainers().length > 0)
			infoWindow.show()
	}
}
function cancelUpdate()
{
	abortedQuerys.push(searchIDNum);
	clearSearch();
	hideMask();
}
function isAborted(id)
{
	for (var i=0; i < abortedQuerys.length; i++)
		if (abortedQuerys[i] == id)
			return true;
	return false;
}
function clearSearch()
{
	removeMarkers();
    document.getElementById("results").innerHTML = "";
    document.getElementById("resultsHeader").innerHTML = "";
    adjustListResultDiv();
    if (navigator.appName == "Microsoft Internet Explorer")
    	adjustListResultDiv();
}
function clearListSearch()
{
	document.getElementById("listResults").innerHTML = "";
	adjustListResultDiv();
	adjustResultDiv();
	if (getSelectedTab() == "#lists" || getSelectedTab() == "#search")
		switchTab("#search");
	hideListTab();
	PrintObject.list = null;
}
function clearAll(clearTxt)
{
	clearSearch();
	clearListSearch();
	removePolygon();
	removeRadiusPolygon();
	removeInfoWindow();
	
	if (clearTxt)
	{
		document.getElementById("txtSearch").value = "";
		resetLayers();
	}
}
function getDBTableName(name)
{
	var tableName = name;
	switch (name)
	{
		case "Rural Deanery":
				tableName = "RURAL_DEANERY";
				break;
		case "Probate Court":
				tableName = "PROBATE_COURT";
				break;
		case "Poor Law Union":
				tableName = "POOR_LAW_UNION";
				break;				
		case "Hundred":
				tableName = "HUNDRED_BOROUGH";
				break;					
		case "Civil Registration District":
				tableName = "CIVIL_REG_DISTRICT";
				break;
	}
	return tableName;
}
function getDBViewName(name)
{
	var tableName = name;
	switch (name)
	{
		case "Rural Deanery":
				tableName = "RURAL_DEANERIES";
				break;
		case "Probate Court":
				tableName = "PROBATE_COURTS";
				break;
		case "Poor Law Union":
		case "Poor Law":
				tableName = "POOR_LAW_UNIONS";
				break;				
		case "Hundred":
				tableName = "HUNDREDS_AND_BOROUGHS";
				break;					
		case "Civil Registration District":
		case "Civil Registration":
				tableName = "CIVIL_REGISTRATION_DISTRICTS";
				break;
	}
	return tableName;
}
function getDisplayName(name)
{
	var displayName = name;
	switch (name)
	{
		case "RURAL_DEANERY":
		case "RURAL_DEANERIES":
		case "RuralDeanery":
		case "Rural Deanery":
				displayName = "Rural Deanery";
				break;
		case "PROBATE_COURT":
		case "ProbateCourt":
				displayName = "Probate Court";
				break;
		case "POOR_LAW_UNION":
		case "POOR_LAW_UNIONS":
		case "PoorLaw":
		case "Poor Law":
				displayName = "Poor Law Union";
				break;				
		case "HUNDRED_BOROUGH":
				displayName = "Hundred";
				break;					
		case "CIVIL_REG_DISTRICT":
		case "CIVIL_REGISTRATION_DISTRICTS":
		case "CivilRegistration":
		case "Civil Registration":
				displayName = "Civil Registration District";
				break;
	}
	return displayName;
}
function mapSearch(juris)
{
    var search = document.getElementById("srch_"+juris).value;
    var searchParam = getSearchParam(juris);
    var query = new esri.arcgis.gmaps.Query();
    query.returnGeometry = false;
    //query.outFields = ["NAME"];    
    if (search == "")
        query.where = "1=1";
    else 
        query.where = "UPPER("+searchParam+") LIKE UPPER('%"+search+"%')";
        
    var num = getQueryNum(juris);     
    var queryTask = new esri.arcgis.gmaps.QueryTask(serviceURL+juris+"/MapServer/"+num);
    queryTask.execute(query, false, function(result){
        showMapSearchResults(result, juris)});
}
function showMapSearchResults(result, juris)
{
    var html = "";
    var list = getJurisFromResult(result);
    var sortedList = sortSearchResult(list, juris);
    for (var i=0; i<sortedList.length; i++)
    {
        html += "<span class='layerList' onclick=\"selectByList('"+juris+"','"+sortedList[i]+"')\">";
        html += sortedList[i]+"</span><br />";
    }
    var list = document.getElementById("layerList_"+juris);
    list.innerHTML = html;
}
function sortSearchResult(list, juris)  //place the results that start the same at the top of the list
{
    var match = [];
    var sorted = [];
    var search = document.getElementById("srch_"+juris).value; 
    var j = search;
    for (j = search.length; j > 0; j--)
        for (var i=0; i < list.length; i++)  
            if (search.substring(0, j).toUpperCase() == list[i].substring(0, j).toUpperCase())
            {
                var inMatch = false;
                for (var k=0; k < match.length; k++)
                    if (list[i] == match[k])
                        inMatch = true;
                if (!inMatch)
                    match.push(list[i]);
            }
        
    if (match.length > 0)
    {
        match.sort(); //alphabetize the list
        for (var i=0; i < match.length; i++)
            sorted.push(match[i]);
    }
    for (var i=0; i < list.length; i++)
    {
        var inSorted = false;
        for (var k=0; k < sorted.length; k++)
            if (list[i] == sorted[k])
                inSorted = true;
        if (!inSorted)
            sorted.push(list[i]); 
    }
    return sorted;
}
function getJurisFromResult(result)
{
    var array = [];
    var features;
    if (result.features)
    {
    	features = result.features;
    	var displayName = GIS_SGUID_FIELD;
   
        for (var i=0; i < features.length; i++)
        {
        	array.push(features[i].attributes[displayName]);
        }
    }
    else    
    	array.push(result.feature.attributes.SPATIALGUID);
    
    return array;
}
function getCenterFromResult(result)
{
	if (result[0])
		result = result[0];
    var center;    
    if (result.features)
    {
    	var displayName = result.displayFieldName.substring(0, result.displayFieldName.lastIndexOf("."));
    	var attributes = result.features[0].attributes;
    	center = new GLatLng(attributes[displayName+".LAT"], attributes[displayName+".LON"]);
    }
    else  
    {
    	var lat, lng;
    	if (result.feature.attributes.LAT)
    	{
    		lat = result.feature.attributes.LAT;
    		lng = result.feature.attributes.LNG;
    	}
    	else
    	{
	    	lat = result.feature.attributes["GIS_PUBLIC.FHMAPS_LABELS_MVW.LAT"];
	    	lng = result.feature.attributes["GIS_PUBLIC.FHMAPS_LABELS_MVW.LNG"];
    	}
	    center = new GLatLng(lat, lng)
    }
    
    return center;
}
function getQueryNum(juris)
{
	var num = 0;
	switch (juris)
	{
		case "Parish":
			num = 4;
			break;
		case "County":
			num = 7;
			break;
	}
	return num;
}
function isContiguous()
{
	var html = document.getElementById("listResults").innerHTML;
	
	if (html.indexOf("Contiguous") == -1)
		return false;
	else
		return true;
}