	//global variables
	var map;	
	var results = [ ];
	var iwhtml = [ ];
	//initialize with default view
 	var centerlng = -98.8;
	var centerlat = 39.5;
	var zoom = 4;	
	var minZoomLevel = 6;
	var defaultLandmarkZoom = 8;  //this is also set in com.reserveamerica.publicweb.controller.maps.MapControllerConstants
	var defaultStateZoom = 7; 
	var defaultParkZoom = 10; 
	var mapParam;
	var infoOpened = false;	
	var mapTypeChanged = false;	
	var mapInitialized = false;	
	var facility;
	var contractCode;	
	var chosenParkMarker;	
	var overlays = new Array();
	var i = 0;
	var startIndex = 0;
	var resultSize = 0;
	var previous = false;
	var firstLetter = "";
	var mapStatus;
	
	//set global vars associated w/ XML parsing
	var parks = new Array();
		
	function onLoad() { 		  

		try {
    		init();   
	   	} catch(e){}
	   	if (GBrowserIsCompatible()) {	   	
	      	map = new GMap2(document.getElementById("mapviewport"));
		    map.addControl(new GLargeMapControl());      
	   	  	map.addControl(new GMapTypeControl());       
	   	  	map.addControl(new GScaleControl());	//add scale to map     	 
	   	  	mapStatus = new StatusControl();
			map.addControl(mapStatus);
			map.enableScrollWheelZoom();			
	  		showMap();
	  		initializeClientGeocoder();	   	 
  		} else {
  			//TODO: should do something here - show message, redirect to another page, etc.
  		}
	}
	
	function showMap() {		
		if ("PARK" == mapParam) {		
			getChosenPark();			
		} else if ("SEARCH" == mapParam) {	 
			createZoomListener();
			map.setCenter(new GLatLng(centerlat, centerlng), zoom);    	 				
		} else if ("BROWSE" == mapParam) {
			createListeners(); 
			map.setCenter(new GLatLng(centerlat, centerlng), zoom);
	   	} else if ("usaSEARCH" == mapParam || "viewSEARCH" == mapParam) {	 
		   	getParks();  		
	   		map.setCenter(new GLatLng(centerlat, centerlng), zoom); 	   			   		
	   	} 
	   	map.savePosition(); 
	   	mapInitialized = true;
	}
	
	function createListeners() {			
		GEvent.addListener(map, "moveend", function() {				
			if (infoOpened == true ) { 				  
            	infoOpened = false; 
           	    return; 
		    } 		   	
		    if (mapTypeChanged == true) { 				  
            	mapTypeChanged = false;
            	if (mapInitialized) { 
	           	    return; 
	           	}
		    } 			    		    		    		  
		   	if (map.getZoom() > minZoomLevel) {		   		
			  	document.getElementById('mapmessage').innerHTML = "";	
	  	 		//window.setTimeout("getParks()",700);	
	  	 		getParks();
	  	 		saveCurrentCoords();					 				
		   	} 			   		  							  		
		} );
		GEvent.addListener(map, "zoomend", function() {	
			if (map.getZoom() <= minZoomLevel) {
				closeStatus()
				document.getElementById('mapmessage').innerHTML = "<div class='msg error'>Too many campgrounds in the area.  Zoom in and try again.</div>";	
			}
		} );			
		GEvent.addListener(map, "infowindowopen", function() {
			infoOpened = true; 			
		} );
		GEvent.addListener(map, "maptypechanged", function() {
			mapTypeChanged = true; 		
		} );		 		
	}		
	
	function createZoomListener() {	
		GEvent.addListener(map, "zoomend", function() {	
			showZoomInMessage(false);			
		} );	
	}
	
	function saveCurrentCoords() {
		var curcent = map.getCenter();
	   	var curzoom = map.getZoom();        	
       	var url = "/generateBrowseMapRecGov.do?topTabIndex=CampgroundMap&currentLat="+curcent.lat()+"&currentLon="+curcent.lng()+"&currentZoom="+curzoom;			
		var request = GXmlHttp.create();
		request.open("POST", url, true);	
		request.send(null);
	}				
	
	function showMarkers(){
		if(map.getZoom() > minZoomLevel || ("usaSEARCH" == mapParam || "viewSEARCH" == mapParam)){								
			if(i < parks.length){
				var max = Math.min(i+20, parks.length);	//select the minimum batch size of 20 facilities or the remainder of total facilities divided by 20				
				showStatus(max, parks.length);	//show loading status bar
				while(i < max){			
					var parkID = parks[i].getAttribute("contractCode") + parks[i].getAttribute("parkid"); 															//loop thru all facilities to be plotted in this batch
					var j = 0;
					var exists = false;
  					var marker; 	  	  											  						  					  						  					  					
					while(j < overlays.length){
						if (parkID == overlays[j].parkID) { //check if parks already exists
							exists = true;	//set flag
							marker = overlays[j];
							break;			//if already plotted, break out of loop
						}
						j++;
					}
		       	 	var facilityType = parks[i].getAttribute("facilityType");
			       	var iconType = facilityType; 
			       	if (facilityType == "facility") {
		       			iconType = "area"; 
		       		} else if (facilityType == "permit") {
		       			iconType = "camping";
		       		}
  	        		if (parkID == contractCode + facility) {
	       	        	iconType = "chosen";
    			        chosenParkMarker = parks[i];             			            		        	    		    
	       			}
	       			var availStatus;
	       			var bookButton;
	       			var channel = ""; //prepared for the sales channel
	       			var reservableType = parks[i].getAttribute("reservableType");
	       			var channel = "Book Now";
	       			if (reservableType == "2")
	       				var channel = "Call Now";
	       			else if (reservableType == "1")
	       				var channel = "Walkup Only***";
	       			if (parks[i].getAttribute("status") == "N") channel = "";
	       			
	       			if (parks[i].getAttribute("status") == "A" || parks[i].getAttribute("status") == "N" || "BROWSE" == mapParam || "PARK" == mapParam) {
	       				availStatus = "";
	       			} else {
	       				channel="";
	       				availStatus = "_NA";
	       			}
	       			//Facility details link
	       			var facilityDetailsLink;
	       			var bookButton;
	       			if (facilityType == "tour") { 
						facilityDetailsLink = "\"/tourParkDetail.do?topTabIndex=FindTour&contractCode=" + parks[i].getAttribute("contractCode") 
											+ "&parkId=" + parks[i].getAttribute("parkid")
											//+ "\">" + parks[i].getAttribute("parkname") + ", " + parks[i].getAttribute("state") + "</a>"
	       				bookButton = "<a href=\"/tourList.do?topTabIndex=FindTour&contractCode=" + parks[i].getAttribute("contractCode") 
	       							+ "&parkId=" + parks[i].getAttribute("parkid")  
	       							+ "\" class=\"book now\" onclick=\"\">Book Now</a>";
	       			} else if (facilityType == "permit") { 
						facilityDetailsLink = "\"wildernessAreaDetails.do?topTabIndex=Permits&contractCode=" + parks[i].getAttribute("contractCode") 
						+ "&parkId=" + parks[i].getAttribute("parkid")
						bookButton = "<a href=\"/entranceSearch.do?topTabIndex=Permits&contractCode=" + parks[i].getAttribute("contractCode") 
							+ "&parkId=" + parks[i].getAttribute("parkid") 
							+ "\" class=\"book now\" onclick=\"\">Enter Date</a>";		    
		       		} else if (facilityType == "area") { 
						facilityDetailsLink = "\"/recAreaDetails.do?topTabIndex=RecreationArea&contractCode=" + parks[i].getAttribute("contractCode") 
											+ "&recAreaId=" + parks[i].getAttribute("parkid") + "&agencyCode=" + parks[i].getAttribute("agencyId")  
	       				bookButton = "<a href=\"/recAreaDetails.do?topTabIndex=RecreationArea&contractCode=" + parks[i].getAttribute("contractCode") 
	       							+ "&recAreaId=" + parks[i].getAttribute("parkid") + "&agencyCode=" + parks[i].getAttribute("agencyId")  
	       							+ "\" class=\"book now\" onclick=\"\">See Details</a>";
		       		} else if (facilityType == "facility") {
						facilityDetailsLink = "\"/recAreaDetails.do?topTabIndex=RecreationArea&contractCode=" + parks[i].getAttribute("contractCode") 
											+ "&facilityId=" + parks[i].getAttribute("parkid") + "&agencyCode=" + parks[i].getAttribute("agencyId")   
	       				bookButton = "<a href=\"/recAreaDetails.do?topTabIndex=RecreationArea&contractCode=" + parks[i].getAttribute("contractCode") 
	       							+ "&facilityId=" + parks[i].getAttribute("parkid") + "&agencyCode=" + parks[i].getAttribute("agencyId") 
	       							+ "\" class=\"book now\" onclick=\"\">See Details</a>";
		       		} else { //Campground ((facilityType == "camping" || null))
						facilityDetailsLink = "\"/campgroundDetails.do?topTabIndex=CampingSpot&contractCode=" + parks[i].getAttribute("contractCode") 
											+ "&parkId=" + parks[i].getAttribute("parkid") 
		       			if (parks[i].getAttribute("status") == "N")
		       				bookButton = "<a href=\"/campgroundMap.do?topTabIndex=CampingSpot&search=site&contractCode=" + parks[i].getAttribute("contractCode") 
		       							+ "&parkId=" + parks[i].getAttribute("parkid") 
		       							+ "&criteria=new"
		       							+ "\" class=\"book now\" onclick=\"\">Enter Date</a>";
		       			else if (parks[i].getAttribute("status") == "A")
		       				bookButton = "<a href=\"/campgroundMap.do?topTabIndex=CampingSpot&search=site&contractCode=" + parks[i].getAttribute("contractCode") 
		       							+ "&parkId=" + parks[i].getAttribute("parkid") 
		       							+ "\" class=\"book now\" onclick=\"\">See Details</a>";
		       			else 
		       				bookButton = "<a href=\"/campsiteCalendar.do?findavail=next&topTabIndex=CampingSpot&contractCode=" + parks[i].getAttribute("contractCode") 
		       							+ "&parkId=" + parks[i].getAttribute("parkid") 
		       							+ "\" class=\"book next\" onclick=\"\">Find Next Avail. Date*</a>";
		       		} 
					if (exists == false){	//if this marker is not already plotted...
						//prepare marker												 			 	  			
		   				var point = new GLatLng(parseFloat(parks[i].getAttribute("lat")),
  	    		       	 	parseFloat(parks[i].getAttribute("lng")));  
		    	        setInfoWindowHTML(parkID, parks[i], bookButton, facilityDetailsLink, channel);
			  			if ("usaSEARCH" == mapParam || "viewSEARCH" == mapParam) {	
				  			marker = createAvailMarker(point, iwhtml[parkID], i, availStatus);   
			 	  		} else {		
				 	  		marker = createMarker(point, parks[i].getAttribute("parkname") + ", " + parks[i].getAttribute("state"), iwhtml[parkID], iconType);
				 	  	} 			
				 	  	marker.parkID = parkID;			
				 	  	results[parkID] = marker; 
				 	  	map.addOverlay(marker);
				 	  	overlays.push(marker);	//add marker to map and array of overlays	
					}	//end if not already plotted
					// Generate the link in the mapviewcampgroundlist 
		  			if ("usaSEARCH" == mapParam || "viewSEARCH" == mapParam) {
			  			var letter = String.fromCharCode("A".charCodeAt(0) + i);  		
		  				html = "<div class=\"mapresult\">" +
		  				"<div class='pinContainer'><a href=\"javascript:clickResult('" + parkID + "')\">" +
						"<img src=\"/images/maps/marker" + letter + availStatus + ".gif\" class=\"pin\" width=\"20\" height=\"34\"></img></a></div>" + 
						"<div class='linkContainer'><a href=" + facilityDetailsLink + "\">" + parks[i].getAttribute("parkname") + ", " + parks[i].getAttribute("state") + "</a>" + 
						bookButton +	
						"<div class=\"amenities\"><img border=\"0\" src=\"/images/icon_amps" + parks[i].getAttribute("amps") + ".gif\" width=\"22\" height=\"22\" alt=\"" + parks[i].getAttribute("ampsAlt") + "\" /><img border=\"0\" src=\"/images/icon_fullhookup" 
							+ parks[i].getAttribute("full") + ".gif\" width=\"22\" height=\"22\" alt=\"" + parks[i].getAttribute("fullAlt") + "\" /><br /><img border=\"0\" src=\"/images/icon_pets" + parks[i].getAttribute("pets") + ".gif\" width=\"22\" height=\"22\" alt=\"" 
							+ parks[i].getAttribute("petsAlt") + "\" /><img border=\"0\" src=\"/images/icon_waterfront" + parks[i].getAttribute("water") + ".gif\" width=\"22\" height=\"22\" alt=\"" + parks[i].getAttribute("waterAlt") + "\" /></div>" +			
						"</div>" 
						if ( !facilityType || facilityType == "camping" && channel != "") {
							html = html + "<div class='mapstatus'>" + channel + "</div></div></div>";
						}
				 		document.getElementById("mapviewcampgroundlist").innerHTML = document.getElementById("mapviewcampgroundlist").innerHTML + html; 	      	 	  									 							 			
		 	  		} else {
						var region = ""; 
						if ("chosen" == iconType) {	
							letterHeader = "";
							if (parks[i].getAttribute("region")!="") {
								region = ", "+ parks[i].getAttribute("region"); //"<BR>" + 
							} 
						} else {	 	  		
				 	  		if (firstLetter == (parks[i].getAttribute("parkname")).charAt(0)) {
					 	  		letterHeader = "";
				 	  		} else {
				 	  			firstLetter = (parks[i].getAttribute("parkname")).charAt(0);
				 	  			letterHeader = "<label>" + firstLetter + "</label>";
			 		  		}			 	  		
			 		  	}
		 	  			html = letterHeader + "<div class=\"pin\">" + 
						"<a href=\"javascript:clickResult('" + parkID + "')\">" +
						"<img src=\"/images/maps/mm_20_" + iconType + ".gif\"></img></a>" + 
						"<a href=" + facilityDetailsLink + "\">" + parks[i].getAttribute("parkname") + region + ", " + parks[i].getAttribute("state") + "</a>" + 
						"&nbsp;</div>";
 	  									 	  				
  						if ("chosen" == iconType) {
	 	  					document.getElementById("chosencampground").innerHTML = html; 
  						} else {
							document.getElementById("mapviewcampgroundlist").innerHTML = document.getElementById("mapviewcampgroundlist").innerHTML + html;
						}					 		    	
			 	  	} 			
					i++;
				}	//end while			
				if ("usaSEARCH" == mapParam || "viewSEARCH" == mapParam) {	
					//alert (resultSize + " " + startIndex);	
					if (resultSize > 10) {
						if (startIndex == 0) {
							document.getElementById("nextten").innerHTML = "<a href=\"javascript:getParks();\">Next 10 ></a>";		
						} else {
							document.getElementById("nextten").innerHTML = "<a href=\"javascript:getParksPrevious();\">< Previous 10 </a>&nbsp;&nbsp;<a href=\"javascript:getParks();\">Next 10 ></a>";		
						}					
						startIndex = startIndex + 10;
						//map.setCenter(new GLatLng(centerlat, centerlng), zoom); 
						if (resultSize <= startIndex) {				
							startIndex = startIndex - 20					
							document.getElementById("nextten").innerHTML = "<a href=\"javascript:getParks();\">< Previous 10 </a>";														 		
						}		
					} 
				}						
				window.setTimeout(showMarkers,1);
			} else {
				closeStatus();
			}			
		}	//end if
	}	//end function showMarkers
	
	function getParks(){
		plotting = true;	
		//map.disableDragging();
		if ("usaSEARCH" == mapParam || "viewSEARCH" == mapParam) {	 
			map.clearOverlays();	// This is very slow. 	
			overlays.length = 0;		
		}
		document.getElementById('mapmessage').innerHTML = "";			
		document.getElementById("mapviewcampgroundlist").innerHTML = "";							
		//mapStatus = new StatusControl();
		//map.addControl(mapStatus);
		document.getElementById('status').style.display = "inline";
		document.getElementById('status').innerHTML = 'loading...';		
		var url;
		if ("usaSEARCH" == mapParam || "viewSEARCH" == mapParam) {				
			if (previous == true) {
				startIndex = startIndex - 20;
				previous = false;
			}
			url = "/getParksForRecGovMap.do?start=searchResults&startIndex=" + startIndex;	 
		} else {
			var bounds = map.getBounds();
			var southWest = bounds.getSouthWest();
			var northEast = bounds.getNorthEast();	
			url = "/getParksForRecGovMap.do?start=parksInView&minX=" + southWest.lng() + "&minY=" + southWest.lat()  +
			"&maxX=" + northEast.lng() + "&maxY=" + northEast.lat() + "&long=" +  centerlng + "&lat=" + centerlat + "&map=" + mapParam;										
		}
		//alert ("url " + url);
		GDownloadUrl(url, function(data, responseCode) {
			var xmlDoc = GXml.parse(data);
			if (xmlDoc == null) {
				closeStatus();		
				document.getElementById('mapmessage').innerHTML = "<div class='msg error'>Error retrieving data!</div>";			
				return;
			}		
			if (xmlDoc.documentElement != null) {
	    		parks = xmlDoc.documentElement.getElementsByTagName("marker");
	    	}	
    		if (parks == null) {
    			closeStatus();		
    			showNoResultsFoundMessage();
    			return;
    		}
    		var count = 0;
    		count = parks.length;       	    				 		    		
    		if(count == 0){	//if no matching facilities were found...
				closeStatus();			
				showNoResultsFoundMessage();
				return;
			} else if (count > 0) {	
				//removeUnusedOverlays();    	
    			i = 0;		
 	  			window.setTimeout(showMarkers,1);		    					
 	  		} 	  				 	  		
			if ("PARK" == mapParam && chosenParkMarker != null) {	   
				//if in "Regional Map" mode, check if chosen campground exists in new view
				var	chosenParkExists = false; 			
				var j = 0;					
				while(j < parks.length){ //loop thru existing markers to see if the marker is already plotted
					if(chosenParkMarker.getAttribute("contractCode") + chosenParkMarker.getAttribute("parkid") 
						== parks[j].getAttribute('contractCode') +  parks[j].getAttribute('parkid')){	
						chosenParkExists = true;	//set flag
						break;			//if already plotted, break out of loop
					}
					j++;
				}
				if (!chosenParkExists) {
					var bookButton = "<a href=\"/campgroundMap.do?topTabIndex=CampingSpot&contractCode=" + contractCode + "&parkId=" + facility + "\" class=\"book now\" onclick=\"\">Book Now</a>";
					setInfoWindowHTML(contractCode + facility, chosenParkMarker, bookButton);	
					var point = new GLatLng(parseFloat(chosenParkMarker.getAttribute("lat")),
	    	     		parseFloat(chosenParkMarker.getAttribute("lng")));  
					var marker = createMarker(point, parks[i].getAttribute("parkname") + ", " + parks[i].getAttribute("state"), iwhtml[contractCode + facility], "chosen");    	  									  						  					  						  				
  					results[contractCode + facility] = marker; 
  					map.addOverlay(marker);
		  			overlays.push(marker);	 
	  			}		  		
			}
			
		});		
	}
	
	function removeUnusedOverlays() { // Not used right now.
		var newParks = [ ];
		var j = 0;					
		while(j < parks.length){
			newParks[parks[j].getAttribute('contractCode') +  parks[j].getAttribute('parkid')] = 1;
			j++;
		}
		var j = 0;		
		var k = 0;
		while(j < overlays.length){
			_tmpParkID = overlays[j].parkID;
			if (newParks[_tmpParkID] != 1) { 
				map.removeOverlay(overlays[j]);
				if (j < overlays.length - 1) {
					overlays[j] = overlays[overlays.length - 1] ; 
					j--;
					
				}
				overlays.pop();
			}
			j++;
		}
	}
	
	function getParksPrevious() {
		previous = true;
		getParks();
	}
	
	function getChosenPark() {
		var url = "/getParksForRecGovMap.do?start=onePark&parkId=" + facility + "&contractCode=" + contractCode;		
		GDownloadUrl(url, function(data, responseCode) {
			var xmlDoc = GXml.parse(data);
			if (xmlDoc == null) {
				showMapNotAvailableMessage();	  								
			} else {
				if (xmlDoc.documentElement != null)
		   			var markers = xmlDoc.documentElement.getElementsByTagName("marker");	    			    			    	
			    if (!markers || markers.length == 0) {	   		
			    	showMapNotAvailableMessage();	 		  	    	  			    					    				    	
			    } else if (markers.length > 0) {
					centerlng = markers[0].getAttribute("lng");					
					centerlat = markers[0].getAttribute("lat"); 
					zoom = defaultParkZoom;								
					map.setCenter(new GLatLng(centerlat, centerlng), zoom);	
					createListeners(); 
			    	getParks();	
			    	return;
		    	}    
	    	}		    	
	    	map.setCenter(new GLatLng(centerlat, centerlng), zoom);				    	   	
    	});	
	}
	
	function createMarker(point, name, desc, iconType) {
		var icon = new GIcon();
		icon.image = "/images/maps/mm_20_" + iconType + ".png";				
		if ("chosen"  == iconType) {
			icon.shadow = "http://www.google.com/mapfiles/shadow50.png";
			icon.iconSize = new GSize(20, 34);					
			icon.shadowSize = new GSize(32, 34);			
		} else {
			icon.shadow = "/images/maps/mm_20_shadow.png";	
			icon.iconSize = new GSize(12, 20);
			icon.shadowSize = new GSize(22, 20);
		}		
		icon.iconAnchor = new GPoint(6, 20);
		icon.infoWindowAnchor = new GPoint(5, 1);		
		//var marker = new GMarker(point, icon);
		var options = { 
				icon: icon,
				title: name			
			};   		
	    var marker = new GMarker(point, options);	 		
	  	GEvent.addListener(marker, "click", function() {	  		
		   	marker.openInfoWindowHtml(desc);
		   
	  	});	  	
	  	return marker;
	}
	
	function createAvailMarker(point, desc, index, status) {
	
		// Create a base icon for all of our markers that specifies the shadow, icon
		// dimensions, etc.
		var baseIcon = new GIcon();
		baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
		baseIcon.iconSize = new GSize(20, 34);
		baseIcon.shadowSize = new GSize(37, 34);
		baseIcon.iconAnchor = new GPoint(9, 34);
		baseIcon.infoWindowAnchor = new GPoint(9, 2);
		baseIcon.infoShadowAnchor = new GPoint(18, 25);
		
		// Create a lettered icon for this point using our icon class from above
	  	var letter = String.fromCharCode("A".charCodeAt(0) + index);
	  	var icon = new GIcon(baseIcon);
	  	icon.image = "/images/maps/marker" + letter + status + ".png";	
	  	var marker = new GMarker(point, icon);

	  	// Show this marker's name in the info window when it is clicked
	  	GEvent.addListener(marker, "click", function() {
	    	marker.openInfoWindowHtml(desc);
	  	});
      
	  	return marker;
	}
	
	function setInfoWindowHTML(parkID, marker, bookButton, facilityTypeLink, channel) {
		photoUrl = "/photos/details/" + marker.getAttribute("contractCode").toLowerCase() + "_" + marker.getAttribute("parkid") + "_1.jpg";
		var defaultPhotoUrl = "this.src=\"/photos/details/nophoto.jpg\";"
		var channelTag = "";
		if (channel && channel != "") channelTag = "<tr><td NOWRAP><span class='mapstatus'>" + channel + "</span></td></tr>";
		var startSpan = "";
		var endSpan = ""; 
		if (!facilityTypeLink) {
			startSpan = "<span style=\"font-size:12px;\">";
			endSpan = "</span>";
			facilityTypeLink = "\"/campgroundDetails.do?topTabIndex=CampingSpot&contractCode=" + marker.getAttribute("contractCode") 
							+ "&parkId=" + marker.getAttribute("parkid") 
		}
		var region = ""; 
		if (marker.getAttribute("region")!="") {
			region = "<BR>" + marker.getAttribute("region");
		} 
		facilityTypeLink = "<a href=" + facilityTypeLink + "\">" 
						+ startSpan + marker.getAttribute("parkname") + ", " + marker.getAttribute("state") + region + endSpan + "</a>"

		iwhtml[parkID] =  
			"<table cellspacing='0' cellpadding='0'>" +
			"<tr><td colspan=\"2\" style=\"vertical-align:top; padding-bottom:5px\" >" + facilityTypeLink + "&nbsp;&nbsp;&nbsp;</td></tr>";			
			if ("usaSEARCH" == mapParam || "viewSEARCH" == mapParam) {	
				iwhtml[parkID] = iwhtml[parkID] + "<tr><td style=\"width:80px; vertical-align:top\" NOWRAP>" +			
				"<img border=\"0\" src=\"/images/icon_amps" + parks[i].getAttribute("amps") + ".gif\" width=\"16\" height=\"16\" alt=\"" + parks[i].getAttribute("ampsAlt") + "\" style=\"padding-right:4px\" />" +
				"<img border=\"0\" src=\"/images/icon_fullhookup" + parks[i].getAttribute("full") + ".gif\" width=\"16\" height=\"16\" alt=\"" + parks[i].getAttribute("fullAlt") + "\" style=\"padding-right:4px\" />" +
				"<img border=\"0\" src=\"/images/icon_pets" + parks[i].getAttribute("pets") + ".gif\" width=\"16\" height=\"16\" alt=\"" + parks[i].getAttribute("petsAlt") + "\" style=\"padding-right:4px\" />" +
				"<img border=\"0\" src=\"/images/icon_waterfront" + parks[i].getAttribute("water") + ".gif\" width=\"16\" height=\"16\" alt=\"" + parks[i].getAttribute("waterAlt") + "\" style=\"padding-right:4px\" />" +
				"</td><td rowspan=\"2\" style=\"float:left; padding-left:6px\">" + 
				"<img src=\"" + photoUrl + "\" border=0 width=\"80px\" height=\"53px\"/ onError='" + defaultPhotoUrl + "'\"></td>" +
				"</tr><tr><td style=\"width:80px; float:left; vertical-align:top; text-align:center\">" + bookButton +
			    "</td></tr>" + channelTag;
			} else {
				iwhtml[parkID] = iwhtml[parkID] + "<tr><td style=\"width:80px; float:left; vertical-align:center; text-align:center\">" + bookButton +
		   		 "</td><td style=\"float:left; padding-left:6px\">" +
		   		 "<img src=\"" + photoUrl + "\" border=0 width=\"80px\" height=\"53px\"/ onError='" + defaultPhotoUrl + "'\" ></td></tr>";
			}											  	    
		    iwhtml[parkID] = iwhtml[parkID] + "<tr><td colspan=\"2\" style=\"vertical-align:top;\" >" +		
			"<a href='/generateBrowseMapRecGov.do?topTabIndex=CampgroundMap&topTabIndex=CampgroundMap&pageOrigin=mapBrowse&map=PARK&contractCode=" + marker.getAttribute("contractCode") + "&parkId=" + marker.getAttribute("parkid") + "'><span style='font-size:12px;'>" + 
			"View regional map</span></a></td></tr>" + 		    
		    "</table>";
	}

	function showStatus(index, total){ //this function shows the "loading" status window
		document.getElementById('status').innerHTML = 'loading park '+index+' of '+total+'...';		
	}
	
	function closeStatus(){ //this function hides the "loading" status window
		//map.removeControl(mapStatus);
		document.getElementById('status').style.display = "none";
		//fires the moveend event causing infinite cycle
		//map.enableDragging(); //re-enable dragging
		plotting = false;			
	}
	
	function setCoords(lng, lat, zm) {		
		centerlng = lng;
		centerlat = lat;
		zoom = zm;		
	} 	
	
	function setFacility(pkId, agCd) {		
		facility = pkId;		
		contractCode = agCd;		
	}
	
	function clickResult( id ) {	
      results[id].openInfoWindowHtml(iwhtml[id]);	         
	}	
	
	function setHiddenCoords() {
		var center = map.getCenter();
	  	var bounds = map.getBounds();	  	
	  	var southWest = bounds.getSouthWest();
		var northEast = bounds.getNorthEast();			
		document.reservationSearchForm['zoom'].value = map.getZoom();	
		document.reservationSearchForm['long'].value = center.lng();
		document.reservationSearchForm['lat'].value = center.lat();
		document.reservationSearchForm['minX'].value = southWest.lng();
		document.reservationSearchForm['maxX'].value = northEast.lng();
		document.reservationSearchForm['maxY'].value = northEast.lat();
		document.reservationSearchForm['minY'].value = southWest.lat();	
	}
	
	function getUrl(mapType) {			
		var center = map.getCenter();
	  	var zoomLevel = map.getZoom();	
	  	var bounds = map.getBounds();	
	  	var southWest = bounds.getSouthWest();
		var northEast = bounds.getNorthEast();			
	  	var pageUri;  		
		if ("SEARCH" == mapType) {
			pageUri= "/generateSearchMapRecGov.do?topTabIndex=CampgroundMap&pageOrigin=mapSearch&zoom=" + zoomLevel + "&map=" + mapType +"&long=" +  center.lng() + "&lat=" + center.lat();		
		} else if ("BROWSE" == mapType) { 	
			pageUri= "/generateBrowseMapRecGov.do?topTabIndex=CampgroundMap&pageOrigin=mapBrowse&zoom=" + zoomLevel + "&map=" + mapType +"&long=" + center.lng() + "&lat=" + center.lat();		
		} else if ("viewSEARCH" == mapType) {		
			pageUri= "/generateSearchMapRecGov.do?topTabIndex=CampgroundMap&pageOrigin=mapSearch&zoom=" + zoomLevel + "&map=" + mapType +"&long=" +  center.lng() 
				+ "&lat=" + center.lat() + "&minX=" + southWest.lng() + "&minY=" + southWest.lat() + "&maxX=" + northEast.lng() + "&maxY=" + northEast.lat();		
		}
		//alert(pageUri);
		window.location.href = pageUri;
		return;
	}	
	
	function getUrlPath(mapType) {			
		var center = map.getCenter();
	  	var zoomLevel = map.getZoom();	
	  	var bounds = map.getBounds();	
	  	var southWest = bounds.getSouthWest();
		var northEast = bounds.getNorthEast();			
	  	var pageUri;
	  	  		
		if ("SEARCHAGAIN" == mapType) {
			pageUri= "/generateSearchMapRecGov.do";
			setHiddenCoords();
			document.reservationSearchForm['map'].value = "viewSEARCH";	
			document.reservationSearchForm['searchAgain'].value = "Y";
		} 
		return pageUri;
	}
		
	function showNoResultsFoundMessage() {
		if ("usaSEARCH" == mapParam || "viewSEARCH" == mapParam) {	
			document.getElementById('mapmessage').innerHTML = "<div class='msg error'>No matching campgrounds found in the viewing area.  Zoom out or pan and try again.</div>";			
		} else {
			document.getElementById('mapmessage').innerHTML = "<div class='msg error'>No campgrounds found in the viewing area.  Zoom out or pan and try again.</div>";							
		}
	}
	
	function showZoomInMessage(show) {
		if (show) {
			document.getElementById('mapmessage').innerHTML = "<div class='msg error'>Too many campgrounds to search at this zoom level.  Zoom in and try again.</div>";
		} else {
			document.getElementById('mapmessage').innerHTML = "";
		}
	}
	
	function showMapNotAvailableMessage() {
		document.getElementById("mapmessage").innerHTML = "<div class='msg error'><h2>Map not available!</h2></div>"; 
	} 
	
	function checkZoom() {
		document.getElementById('mapmessage').innerHTML = "";
		if(map.getZoom() <= minZoomLevel) {
			showZoomInMessage(true);
			return false;
		} else {
			return true;
		}
	}
	
	function changeState(selectedStateCode) {
		if (selectedStateCode != "") {
			var url = "/getParksForRecGovMap.do?start=getState&stateCode=" + selectedStateCode;		
			GDownloadUrl(url, function(data, responseCode) {
				var xmlDoc = GXml.parse(data);
			    var markers = xmlDoc.documentElement.getElementsByTagName("marker");	    			    			    	
			    if (markers.length == 0) {	   		
		 		   	document.getElementById("mapmessage").innerHTML = "<div class=\"component\"><h2>State not found!</h2></div>"; 	  	    	  			    			
	 		    } else if (markers.length > 0) {
		 		   if ("usaSEARCH" == mapParam || "viewSEARCH" == mapParam) {	
						map.setCenter(new GLatLng(markers[0].getAttribute("lat"), markers[0].getAttribute("lng")), map.getZoom());		
					} else {
						centerlng = markers[0].getAttribute("lng");					
						centerlat = markers[0].getAttribute("lat"); 
						zoom = defaultStateZoom;								
						map.setCenter(new GLatLng(centerlat, centerlng), zoom);												
					}
				}																	   			 									    		  					    		  		   		    		    				    			
	    	});					    	
		}
			
	}
	
	function changeLandmark(selectedLandmarkID) {	
		if (selectedLandmarkID != "") {			
			var url = "/getParksForRecGovMap.do?start=getLandmark&landmarkId=" + selectedLandmarkID;		
			GDownloadUrl(url, function(data, responseCode) {
				var xmlDoc = GXml.parse(data);							
			    var markers = xmlDoc.documentElement.getElementsByTagName("marker");	    			    			    	
			    if (markers.length == 0) {	   		
		 		   	document.getElementById("mapmessage").innerHTML = "<div class=\"component\"><h2>Landmark not found!</h2></div>"; 	  	    	  			    			
		 	    } else if (markers.length > 0) {
			 	   if ("usaSEARCH" == mapParam || "viewSEARCH" == mapParam) {	
						map.setCenter(new GLatLng(markers[0].getAttribute("lat"), markers[0].getAttribute("lng")), map.getZoom());		
					} else {
						centerlng = markers[0].getAttribute("lng");					
						centerlat = markers[0].getAttribute("lat"); 
						zoom = defaultLandmarkZoom;								
						map.setCenter(new GLatLng(centerlat, centerlng), zoom);												
					}
				}																				   			 									    		  					    		  		   		    		    				    			
		    });				    
	    }
	}
	
	function changeLandmarkText(selectedLandmarkText, lat, lng) {	
		if (selectedLandmarkText != "" && lat != "" && lng != "") {			
			var url = "/getParksForMap.do?start=getLandmark&landmarkLat=" + lat + "&landmarkLng=" + lng + "&landmarkText=" + selectedLandmarkText;		
			GDownloadUrl(url, function(data, responseCode) {
				var xmlDoc = GXml.parse(data);							
			    var markers = xmlDoc.documentElement.getElementsByTagName("marker");
			    document.getElementById("pstate").value="";
			    document.getElementById("pstate").selectedIndex = 0;	    			    			    	
			    if (markers.length == 0) {	   		
		 		   	document.getElementById("mapmessage").innerHTML = "<div class=\"component\"><h2>Landmark not found!</h2></div>"; 	  	    	  			    			
		 	    } else if (markers.length > 0) {
			 	   if ("usaSEARCH" == mapParam || "viewSEARCH" == mapParam) {	
						map.setCenter(new GLatLng(markers[0].getAttribute("lat"), markers[0].getAttribute("lng")), map.getZoom());		
					} else {
						centerlng = markers[0].getAttribute("lng");					
						centerlat = markers[0].getAttribute("lat"); 
						zoom = defaultLandmarkZoom;								
						map.setCenter(new GLatLng(centerlat, centerlng), zoom);												
					}
				}																				   			 									    		  					    		  		   		    		    				    			
		    });				    
	    }
	}
	
	// StatusControl is a GControl that displays map status info at the top of the map
	function StatusControl() {
	}
	StatusControl.prototype = new GControl();
	// Creates a one DIV for each of the buttons and places them in a container DIV which is returned as our 
	//control element. We add the control to the map container and return the element for the map class to position properly.
	StatusControl.prototype.initialize = function(map) {
		var container = document.createElement("div");
		var statusDiv = document.createElement("div");
		statusDiv.id = 'status';
		this.setStyle_(statusDiv);
		container.appendChild(statusDiv);
		map.getContainer().appendChild(container);
		return container;
	}
	// By default, the control will appear in the top left corner of the map with 0 pixels of padding.
	StatusControl.prototype.getDefaultPosition = function() {
	  return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(0, 0));
	}
	// Sets the proper CSS for the given button element.
	StatusControl.prototype.setStyle_ = function(bar) {
		bar.style.color = "#FFFFFF";
		bar.style.backgroundColor = "#CC0000";
		bar.style.font = "12px bold";
		bar.style.padding = "2px";
		bar.style.marginBottom = "3px";
		bar.style.textAlign = "center";
		bar.style.width = 570 + "px";
		bar.style.cursor = "pointer";
		bar.style.display = "none";
	}
	
