	//<![CDATA[
	var map;
	var geocoder = new GClientGeocoder();
	var agencyxml;
	var totalAgencies = 0;
	var totalAgenciesPerPage = 0;
	var currAgencyIndex = 0;
	var userLat;
	var userLng;
	
	function setUpUserAddr()
	{
		var addr = userAddress(true);
		getLatLng(addr);
	}
	
	function enterKeyPressed(event)
	{
		var retval = true;
		//alert(1);
		if(event.keyCode == 13)
		{
			//alert("Enter pressed!");
			setUpUserAddr();
			retval = false;
		}
		
		return retval;
	}
	
	function gmapInit()
	{
		loadSearchLocation();
	
		if (GBrowserIsCompatible())
		{
			map = new GMap2(document.getElementById('map'));
			map.setCenter(new GLatLng(40, -96), 3);
			var mapControl = new GMapTypeControl();
			map.addControl(mapControl);					
			map.addControl(new GSmallMapControl());
		}
		
	}	
	
	function getLatLng(address)
	{
		saveSearchLocationforPostBack();
		
	
		geocoder.getLatLng(
			address,
			function(point)
			{
				if (!point)
				{ 
					// Try again without the street address
					var newAddress = userAddress(false);
					//alert (newAddress);
					
					geocoder.getLatLng(
						newAddress,
						function(point)
						{
							if (!point)
							{
								// Address not found
								document.getElementById("ctl00_cphSNav_hidden_latlng").value = "";
								document.getElementById("ctl00_cphSNav_hidden_userLocation").value = "";
								__doPostBack("","");
							}
							else
							{
								// Address found
								var latlng = point;
								document.getElementById("ctl00_cphSNav_hidden_latlng").value = latlng;
								document.getElementById("ctl00_cphSNav_hidden_userLocation").value = newAddress;
								__doPostBack("","");
							}
						}
					);
				}
				else
				{
					// Address found
					var latlng = point;
					document.getElementById("ctl00_cphSNav_hidden_latlng").value = latlng;
					document.getElementById("ctl00_cphSNav_hidden_userLocation").value = address;
					__doPostBack("","");
				}
				
			}
		);
		
		
	}
	
	function saveSearchLocationforPostBack()
	{
		document.getElementById("ctl00_cphSNav_hidden_address").value = document.getElementById("txtAddress").value;
		document.getElementById("ctl00_cphSNav_hidden_city").value = document.getElementById("txtCity").value;
		//document.getElementById("ctl00_cphSNav_hidden_State").value = document.getElementById("ctl00_cphSNav_ddlState").options[document.getElementById("ctl00_cphSNav_ddlState").selectedIndex].value;
		document.getElementById("ctl00_cphSNav_hidden_zip").value = document.getElementById("txtZipCode").value;
	}
	
	function loadSearchLocation()
	{
		document.getElementById("txtAddress").value = document.getElementById("ctl00_cphSNav_hidden_address").value;
		document.getElementById("txtCity").value = document.getElementById("ctl00_cphSNav_hidden_city").value;
		//document.getElementById("ctl00_cphSNav_ddlState").selectedItem = document.getElementById("ctl00_cphSNav_hidden_State").value;
		document.getElementById("txtZipCode").value = document.getElementById("ctl00_cphSNav_hidden_zip").value;
	}
	
	function replace(str, char1, char2)
	{
		out = char1; // replace this
		add = char2; // with this
		temp = "" + str; // temporary holder

		while (temp.indexOf(out)>-1)
		{
			pos= temp.indexOf(out);
			temp = "" + (temp.substring(0, pos) + add +
			temp.substring((pos + out.length), temp.length));
		}

		return temp;
	}	

	function showLocation()
	{
	
		var address = document.getElementById("ctl00_cphSNav_hidden_userLocation").value;

		var geocoder = new GClientGeocoder();

		geocoder.getLatLng(
			address,
			function(point)
			{
				if (!point)
				{
					document.getElementById("sidebar").innerHTML = "<center><div style='color:red'>" + address + " not found.</div></center>";
					map.clearOverlays();
				}
				else
				{
					var youAreHere = new GIcon(G_DEFAULT_ICON);
					youAreHere.image = "http://maps.google.com/mapfiles/kml/pal4/icon47.png";
					youAreHere.shadow = "http://maps.google.com/mapfiles/kml/pal4/icon47s.png";
					youAreHere.iconSize = new GSize(32,32);
					youAreHere.shadowSize=new GSize(56,32);
					youAreHere.iconAnchor=new GPoint(16,32);
					youAreHere.infoWindowAnchor=new GPoint(16,0);
					var markerOptions = { icon:youAreHere };

					var marker = new GMarker(point, markerOptions);

					var html = "<b>Your search location:</b><br>" + address;
					
					GEvent.addListener(marker, 'click', function() 
										{
											marker.openInfoWindowHtml(html); 
										}
					);
					map.addOverlay(marker);
					
					var userPoint = point;
					userPoint = replace(userPoint, "(", "");
					userPoint = replace(userPoint, ")", "");
					var userP = userPoint.split(",");
					userLat = userP[0];
					userLng = userP[1];
				}
			}
		);
	}
	
	function clearMap()
	{
		document.getElementById("sidebar").innerHTML = "";
		map.clearOverlays();
	}
	
	function createMarker(curMarker, markerNum)
	{
		var address = curMarker.getAttribute('address');
		var city = curMarker.getAttribute('city');
		var state = curMarker.getAttribute('state');
		var zip = curMarker.getAttribute('zip');
		var lat = curMarker.getAttribute('lat');
		var lng = curMarker.getAttribute('lng');
		var topoint = lat + ", " + lng;
		var b = 0; // Use this to quickly turn on the table borders for debugging
		
		
		var totalAddr = address +", " + city + ", " + state + ", " + zip;
		var flagMarker = new GIcon(G_DEFAULT_ICON);
		flagMarker.image = "../images/googlePins/marker" + markerNum + ".png";
		
		var markerOptions =  { icon:flagMarker };
		var point = new GLatLng(lat, lng);

		var marker = new GMarker(point, markerOptions);

		var passedAddress = replace(totalAddr, " ", "%20");

		var agentList = curMarker.getElementsByTagName("agent");
		var numAgents = agentList.length;
		var infoboxhtml = "";
		var namehtml = "";
		var logo = "";
		
		// Right now this is just the SA logo, but in the future can be changed for other uses
		// This code checks if the current agency is an Inner Circle agency, and displays the Inner Circle logo instead 
		// of the State Auto logo.
		
		// ** Uncomment InnerCircle code when coding complete
		//if (isInnerCircle)
		//{
		//	logo = "../images/agents/InnerCircle67x67.jpg";
		//}
		//else
		//{
			logo = "../images/agents/sa_logo.gif";
		//}
		
		
		// Collect agents and format for display in info box
		
		infoboxhtml = "<table border=\"" + b + "\" cellspacing=\"0\" cellpadding=\"0\" width=\"300\">";
		infoboxhtml = infoboxhtml + "<tr><td valign=\"top\" align=\"right\" width=\"15\">" + markerNum + ".&nbsp;</td>";
		infoboxhtml = infoboxhtml + "<td width=\"235\" valign=\"top\">";
		infoboxhtml = infoboxhtml + "<table border=\"" + b + "\" cellspacing=\"0\" cellpadding=\"3\" width=\"235\">";
		infoboxhtml = infoboxhtml + "<tr><td align=\"left\" valign=\"top\" colspan=\"2\" width=\"285\">";
		//infoboxhtml = infoboxhtml + "<div style=\"overflow: auto; width; 285px; height: 57px;\">";
		for (var i=0; i<numAgents; i++)
		{
			var name = agentList[i].getAttribute('name');
			var phone = agentList[i].getAttribute('phone');
			var fax = agentList[i].getAttribute('fax');
			var email = agentList[i].getAttribute('email');
			var web = agentList[i].getAttribute('web');
			
			namehtml = namehtml + "<table border=\"" + b + "\" cellpadding=\"0\" cellspacing=\"0\">";
			namehtml = namehtml + "<tr><td colspan=\"3\" width=\"285\"><b>" + name + "</b></td></tr>";
			namehtml = namehtml + "<tr><td align=\"left\">Phone: " + phone + "</td>";
			namehtml = namehtml + "<td align=\"left\">Fax: " + fax + "</td></tr>";
			namehtml = namehtml + "<tr><td align=\"left\">"
			if (email != "")
			{
				namehtml = namehtml + "<a href=\"mailto:" + email + "\">Email</a>&nbsp;&nbsp&nbsp;&nbsp";
			}
			
			if (web != "")
			{
				namehtml = namehtml + "<a href=\"" + web + "\" target=\"_new\">Website</a>";
			}
			namehtml = namehtml + "</td></tr></table><br>"
		}
		
		infoboxhtml = infoboxhtml + namehtml ;
		//infoboxhtml = infoboxhtml + "</div>";
		infoboxhtml = infoboxhtml + "</td></tr>";
		infoboxhtml = infoboxhtml + "<tr><td align=\"left\" width=\"218\" valign=\"top\">";
		infoboxhtml = infoboxhtml + "<table border=\"" + b + "\" cellspacing=\"3\" cellpadding=\"0\" width=\"218\">";
		infoboxhtml = infoboxhtml + "<tr><td align=\"left\" width=\"218\">" + address + "<br>" + city + ", " + state + "<br>" + zip + "</td></tr>";
		infoboxhtml = infoboxhtml + "<tr><td align=\"left\" width=\"218\"><a href=\"javascript:showDirections();\">Directions</a></td></tr>";
		infoboxhtml = infoboxhtml + "</table></td>";
		infoboxhtml = infoboxhtml + "<td align=\"right\" valign=\"bottom\" width=\"67\" height=\"67\">";
		infoboxhtml = infoboxhtml + "<img src=\"" + logo + "\" />";
		infoboxhtml = infoboxhtml + "</td></tr></table></td></tr></table>";


		GEvent.addListener(marker, 'click', function() 
							{
								directionsAddress = topoint;
								//directionsAddress = totalAddr;
								marker.openInfoWindowHtml(infoboxhtml); 
							});


		return marker;

	}
	
	function createSidebarEntry(marker, curMarker, markerNum)
	{

		var name = "";
		var address = curMarker.getAttribute('address');
		var city = curMarker.getAttribute('city');
		var state = curMarker.getAttribute('state');
		var zip = curMarker.getAttribute('zip');
		var lat = curMarker.getAttribute('lat');
		var lng = curMarker.getAttribute('lng');
		var distance = curMarker.getAttribute('dist');
		var div = document.createElement('div');
		var agentList = curMarker.getElementsByTagName("agent");
		var numAgents = agentList.length;

		for (var i=0; i<numAgents; i++)
		{
			name = name + agentList[i].getAttribute('name')
			if (i<numAgents) { name = name + "<br>"; }
		}

		var html = '<table cellpadding="2" cellspacing="0" border="0"><tr>	<td valign="top" align="center" width="30">';
		html = html + '<img src="../images/googlePins/marker' + markerNum + '.png" />';
		//** Uncomment this code when InnerCircle coding complete
		//if (isInnerCircle)
		//{
		//	html = html + '<br><img width="30" height="30" src="images/agents/InnerCircle30x30.gif" />';
		//}
		html = html + '</td><td valign="top" align="left">'
		html = html + '<b>' + name.replace(/~/g, "<br>") + '</b>' + address + '<br />' + city + ', ' + state + ', ' + zip + '<br />Distance ' + "" + (parseFloat(distance).toFixed(2)) + ' miles</td></tr></table>';

		div.innerHTML = html;
		div.style.cursor = 'pointer';
		div.style.marginBottom = '5px';

		GEvent.addDomListener(div, 'click', function() { GEvent.trigger(marker, 'click');  });
		GEvent.addDomListener(div, 'mouseover', function() { div.style.backgroundColor = '#ddd'; });
		GEvent.addDomListener(div, 'mouseout', function() { div.style.backgroundColor = '#fff'; });
		
		return div;
	}
	
	function showDirections()
	{
		var addrPoint, startPoint;
		
		clearMap();
		
		document.getElementById("sidebar").innerHTML = "<a href='javascript:searchAgenciesNear(" + currAgencyIndex + ");'>Back to search results</a>";
				
		var directions = new GDirections(map, document.getElementById("sidebar"));
		
		var toPoint = directionsAddress;
		var fromPoint = userLat + ", " + userLng;

		directions.load ("from: " + fromPoint + " to: " + toPoint);
		//directions.load ("from: " + enteredAddress + " to: " + directionsAddress);
	}
	
	function showAgencies()
	{
		clearMap();

		// These need to be updated each time the "Search Agencies" button is pressed
		// because the user may have updated the search criteria.
		
		totalAgenciesPerPage = parseInt(document.getElementById("ctl00_cphSNav_ddReturnsPerPage").options[document.getElementById("ctl00_cphSNav_ddReturnsPerPage").selectedIndex].value);
		agencyxml = document.getElementById("ctl00_cphSNav_hidden_xml").value;
		
		document.getElementById("ctl00_cphSNav_hidden_xml").value = "";
		
		//setMapType(1);
		
		searchAgenciesNear(0);
	}

	function searchAgenciesNear(idx)
	{

		var xml = GXml.parse(agencyxml);
		
		var markers = xml.documentElement.getElementsByTagName('marker');
		
		var bounds = new GLatLngBounds();
		
		showLocation();
		
		totalAgencies = markers.length;
		currAgencyIndex = idx;
		
		clearMap();

		var sidebar = document.getElementById('sidebar');
		
		if (totalAgencies == 0)
		{
			sidebar.innerHTML = "<div style='color:red'>No results found.</div>";
			map.setCenter(new GLatLng(40, -100), 4);
			return;
		}

		

		var navLinks;
		
		navLinks = "<table width='90%' cellpadding='0' cellspacing='3'><tr><td width='50%' align='left'>";

		if (idx > 0) 
		{
			navLinks = navLinks + "<a href='javascript:searchAgenciesNear(" + (idx - totalAgenciesPerPage) + ");'>Previous " + totalAgenciesPerPage + "</a>";
		}
		navLinks = navLinks + "</td><td width='50%' align='right'>";
		
		if (totalAgencies - idx > totalAgenciesPerPage)
		{
			var newIdx = idx + totalAgenciesPerPage;
			if (totalAgencies - newIdx < totalAgenciesPerPage)
			{
				navLinks = navLinks + "<a href='javascript:searchAgenciesNear(" + (idx + totalAgenciesPerPage) + ");'>Next " + (totalAgencies - newIdx) + "</a>";
			}
			else
			{
				navLinks = navLinks + "<a href='javascript:searchAgenciesNear(" + (idx + totalAgenciesPerPage) + ");'>Next " + totalAgenciesPerPage + "</a>";
			}
		}
		navLinks = navLinks + "</td></tr></table>";
		
		sidebar.innerHTML = navLinks;
	
		for (var i = 0; i < totalAgenciesPerPage; i++)
		{
			var markerIdx = i + idx;
			var isInnerCircle;
			
			// No more to process, so quit for loop
			if (markerIdx >= totalAgencies) { break; }
			
			// Process each marker, pass in the whole marker node
			var point = new GLatLng(parseFloat(markers[markerIdx].getAttribute('lat')),
						parseFloat(markers[markerIdx].getAttribute('lng')));
						
			var marker = createMarker(markers[markerIdx], markerIdx + 1);
			var sidebarEntry = createSidebarEntry(marker, markers[markerIdx], markerIdx + 1);
			sidebar.appendChild(sidebarEntry);			
			map.addOverlay(marker);
			bounds.extend(point);
			map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
		}
	}
	
    	function userAddress(useStreetAddress)
    	{
    		var returnAddr = "";
    		//var addr = document.getElementById("ctl00_cphSNav_txtAddress").value;
    		//var city = document.getElementById("ctl00_cphSNav_txtCity").value;
    		var addr = document.getElementById("txtAddress").value;
    		var city = document.getElementById("txtCity").value;

    		var state = document.getElementById("ctl00_cphSNav_ddlState").options[document.getElementById("ctl00_cphSNav_ddlState").selectedIndex].value;
    		//var zip = document.getElementById("ctl00_cphSNav_txtZipCode").value;
    		var zip = document.getElementById("txtZipCode").value;
    		
    		if (replace(zip, "0", "") == "")
    		{
    			zip = "";
    		}
    		
    		if (useStreetAddress == true)
    		{
			if (addr != "")
			{
				returnAddr = addr;
			}
    		}
    		
    		if (city != "")
    		{
    			if (returnAddr != "")
    			{
    				returnAddr = returnAddr + ", " + city;
    			}
    			else
    			{
    				returnAddr = city;
    			}
    			
    		}
    		
    		if (state != "" && state != "-1")
    		{
    			if (returnAddr != "")
    			{
    				returnAddr = returnAddr + ", " + state;
    			}
    			else
    			{
    				returnAddr = state;
    			}
    		}
    		
    		if (zip != "")
    		{
    			if (returnAddr != "")
    			{
    				returnAddr = returnAddr + ", " + zip;
    			}
    			else
    			{
    				returnAddr = zip;
    			}
    		}
    		
    		return returnAddr;
    	}	
    	
	//]]>
