	//set up map variables
    var map = null;
    var geocoder = null;
    var p = null;
    var pt = null;
    var OutlineLayer;
    var OutlineLayerCamp;
    var OutlineLayerTrail;
    var OutlineId = 0;
    var tile_park_outline;
    var tile_trail_outline;
    var tile_camp_outline;
    var mapserver_url = 'http://www.parkinfo.org/cgi-bin/mapserv?map=/home/user/mapfiles/wms_parkinfo_query.map&';
    var html1;
    var html2;
    var html3;
    var CampsURL;
    var TrailsURL;
    var OverlayLayerTrails;
    var OverlayLayerCamp;
    var lyr_sat;
    var lyr_parks_sat;
    var parkssat;
    var parksgmap;
    var parksterr;
    var lyr_gmap;
    var lyr_parks_gmap;
    var lyr_terr;
    var lyr_parks_terr;
    var loadedKML;
    var loadedKMLTrails;
    var loadedKMLCamps;
    var networkLinkParks;
    var networkLinkTrails;
    var networkLinkCamps;
    var xmlHttp;
    var client_trails;
    var client_camps;
    var loadingPOS; 
    var map_point;
    var clickedDiv ="false";
	var ge;

	function onLoad() {
		if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("map"));
			map.setCenter(new GLatLng(37.405074,-120.102539), 6);
			var mapWidth = document.getElementById("map").clientWidth;
			loadingPOS = mapWidth/2 -50;
			var html='<div style="background-color:white; -moz-opacity: .9; padding: 5px; font-weight:bold; font-size:16px; color: #638c39; font-family:arial; text-align:center"><img src="images/ajaxLoading.gif" border="0"><br>Map Loading...</div>';
			//second create the HtmlControl, no optional arguments passed so default settings will be used for visible(true), selectable(false) and printable(false)
			loadingMessage=new HtmlControl(html);
			map.addControl(loadingMessage, new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(loadingPOS, 210)));
			var htmlinfo='<div style="background-color:white; -moz-opacity: .9; padding: 5px; font-weight:bold; font-size:16px; color: #638c39; font-family:arial; text-align:center"><img src="images/ajaxLoading.gif" border="0"><br>Getting Info...</div>';
			loadingInfoMessage=new HtmlControl(htmlinfo);
			geocoder = new GClientGeocoder();
			
			map.addControl(new GLargeMapControl());
			map.addControl(new GOverviewMapControl(new GSize(175,175)));
			map.enableScrollWheelZoom();
			map.addControl(new mapTypeHybrid(map));
			map.addControl(new mapTypeMap(map));
			map.addControl(new mapTypeTerr(map));
			map.addControl(new mapTypeEarth(map));
			map.addControl(new ginLogo(map));
			var html='<div id="overlay-toggles"><div id="cbxparks"><input type="checkbox" name="parks2" id="parks2" checked="checked" onclick="toggleParks(this.id)"></div><div id="cbxtrails"><input type="checkbox" name="trails2" id="trails2" onclick="toggleTrails(this.id)"></div><div id="cbxcamps"><input type="checkbox" name="camps" id="camps" onclick="toggleCamps(this.id)"></div></div>';
			//	second create the HtmlControl, no optional arguments passed so default settings will be used for visible(true), selectable(false) and printable(false)
			trailCampsToggle=new HtmlControl(html);
			map.addControl(trailCampsToggle, new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(5, 39)));
			var zoomOpts = { 
				buttonStartingStyle: {background: 'transparent'},
				buttonHTML: '<img title="Drag Zoom In" src="images/zoomin_off.png">',
				buttonStyle: {background: 'transparent', padding:'0px', width:'30px', height:'30px',border:'none'},
				buttonZoomingHTML: 'Drag a region on the map (click here to reset)',
				buttonZoomingStyle: {background:'#EBEBEB',width:'80px',height:'100%',padding:'5px',fontFamily:'arial',fontSize:'75%',border:'1px solid #666666'},
				backButtonHTML: '<img title="Zoom Back Out" src="images/zoomout_off.png">',  
				backButtonStyle: {display:'none',marginTop:'5px',width:'30px', height:'30px'},
				backButtonEnabled: true, 
				overlayRemoveTime: 1500
			}  
			map.addControl(new DragZoomControl({}, zoomOpts, {}), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(20,230)));
			 
			//custom tile layers
			var tileBasemap = new GTileLayer(null,null,null,{
			tileUrlTemplate: 'http://www.parkinfo.org/tilecache/tilecache.py/1.0.0/parkinfo_basemap/{Z}/{X}/{Y}.png?type=google',
			isPng:true});
			tileBasemap.getOpacity = function() { return 1; }

			var tileParks = new GTileLayer(null,null,null,{
			tileUrlTemplate: 'http://www.parkinfo.org/tilecache/tilecache.py/1.0.0/parkinfo_parks/{Z}/{X}/{Y}.png?type=google',
			isPng:true});
			tileParks.getOpacity = function() { return .5; }

			var tileNPSOutlines = new GTileLayer(null,null,null,{
			tileUrlTemplate: 'http://www.parkinfo.org/tilecache/tilecache.py/1.0.0/parkinfo_sp_nps/{Z}/{X}/{Y}.png?type=google',
			isPng:true});
			tileNPSOutlines.getOpacity = function() { return 1; }

			var tileParksDarker = new GTileLayer(null,null,null,{
			tileUrlTemplate: 'http://www.parkinfo.org/tilecache/tilecache.py/1.0.0/parkinfo_parks/{Z}/{X}/{Y}.png?type=google',
			isPng:true});
			tileParksDarker.getOpacity = function() { return .7; }

			var tileLabels = new GTileLayer(null,null,null,{
			tileUrlTemplate: 'http://www.parkinfo.org/tilecache/tilecache.py/1.0.0/parkinfo_labels/{Z}/{X}/{Y}.png?type=google',
			isPng:true});
			tileLabels.getOpacity = function() { return 1; }

			var camps = new GTileLayer(null,null,null,{
			tileUrlTemplate: 'http://www.parkinfo.org/tilecache/tilecache.py/1.0.0/parkinfo_camps/{Z}/{X}/{Y}.png?type=google',
			isPng:true});
			camps.getOpacity = function() { return 1; }

			var trails = new GTileLayer(null,null,null,{
			tileUrlTemplate: 'http://www.parkinfo.org/tilecache/tilecache.py/1.0.0/parkinfo_trails/{Z}/{X}/{Y}.png?type=google',
			isPng:true});
			trails.getOpacity = function() { return 1; }

			OverlayLayerTrails = new GTileLayerOverlay(trails);
			OverlayLayerCamp = new GTileLayerOverlay(camps);

			//gmap layers
			lyr_parks_gmap=[G_NORMAL_MAP.getTileLayers()[0],tileParksDarker,tileNPSOutlines,tileLabels];
			lyr_gmap=[G_NORMAL_MAP.getTileLayers()[0]];
			parksgmap = new GMapType(lyr_parks_gmap, G_NORMAL_MAP.getProjection(), "Map", {errorMessage:"Data currently unavailable"});
			
			//satellite layers
			lyr_parks_sat=[G_HYBRID_MAP.getTileLayers()[0],tileParks,tileNPSOutlines,tileLabels,G_HYBRID_MAP.getTileLayers()[1]];
			lyr_sat=[G_HYBRID_MAP.getTileLayers()[0],G_HYBRID_MAP.getTileLayers()[1]];
			parkssat = new GMapType(lyr_parks_sat, G_NORMAL_MAP.getProjection(), "Satellite", {errorMessage:"Data currently unavailable"});  
		 
			//terrain layers
			lyr_parks_terr=[tileBasemap,tileParksDarker,tileNPSOutlines,tileLabels,G_HYBRID_MAP.getTileLayers()[1]];
			lyr_terr=[tileBasemap,G_HYBRID_MAP.getTileLayers()[1]];
			parksterr = new GMapType(lyr_parks_terr, G_NORMAL_MAP.getProjection(), "Terrain", {errorMessage:"Data currently unavailable"});  

			//add the map types
			map.addMapType(parksgmap);
			map.addMapType(parkssat);
			map.addMapType(parksterr);
			map.setMapType(parksterr);

			tile_park_outline = new GTileLayer(new GCopyrightCollection(""),1,18);
			tile_park_outline.myMercZoomLevel=5;
			tile_park_outline.myBaseURL= mapserver_url + 'unit_id=' + OutlineId + "&";
			tile_park_outline.getTileUrl=CustomGetTileUrl;		
			tile_park_outline.isPng = function () { return true; }; 
			tile_park_outline.getOpacity = function() {return 1.0;}
			OutlineLayer = new GTileLayerOverlay(tile_park_outline);

			tile_camp_outline = new GTileLayer(new GCopyrightCollection(""),1,18);
			tile_camp_outline.myMercZoomLevel=5;
			tile_camp_outline.myBaseURL= mapserver_url + 'gid=' + OutlineId + "&";
			tile_camp_outline.getTileUrl=CustomGetTileUrlCamps;		
			tile_camp_outline.isPng = function () { return true; }; 
			tile_camp_outline.getOpacity = function() {return 1.0;}
			OutlineLayerCamp = new GTileLayerOverlay(tile_camp_outline);

			tile_trail_outline = new GTileLayer(new GCopyrightCollection(""),1,18);
			tile_trail_outline.myMercZoomLevel=5;
			tile_trail_outline.myBaseURL= mapserver_url + 'gid=' + OutlineId + "&";
			tile_trail_outline.getTileUrl=CustomGetTileUrlTrails;		
			tile_trail_outline.isPng = function () { return true; }; 
			tile_trail_outline.getOpacity = function() {return 1.0;}
			OutlineLayerTrail = new GTileLayerOverlay(tile_trail_outline);

			map.removeMapType(G_HYBRID_MAP);
			map.removeMapType(G_SATELLITE_MAP);
			map.removeMapType(G_NORMAL_MAP);
			map.addMapType(G_SATELLITE_3D_MAP);

			//get the GE instance
			map.getEarthInstance(getEarthInstanceCB); 
			loadedKML = false; 

			// ====== Restricting the range of Zoom Levels =====
			// Get the list of map types      
			var mt = map.getMapTypes();
			// Overwrite the getMinimumResolution() and getMaximumResolution() methods
			for (var i=0; i<mt.length; i++) {
				mt[i].getMinimumResolution = function() {return 6;}
				mt[i].getMaximumResolution = function() {return 18;}
			}
			var myEventListener = GEvent.bind(this.map, "click", this, function(overlay,point) {
				if (document.getElementById("overlay") && document.getElementById("overlay").style.display=="block"){ 
					var leftPos =  parseInt(my_window.style.left.slice(0,my_window.style.left.search("px")));
					var topPos = parseInt(my_window.style.top.slice(0,my_window.style.top.search("px")));
					var mouse_point = map.fromLatLngToDivPixel(point);
					if (mouse_point.x > leftPos && mouse_point.x < (leftPos + 360) && mouse_point.y > topPos && mouse_point.y < (topPos + 218)) {
						return; 
					}
				}
				pt = new GLatLng(point.y,point.x);		  
				addInfoTipMarker(pt);
					if (OutlineLayerCamp){
						map.removeOverlay(OutlineLayerCamp);
					}		
			}); 
	 
			GEvent.addListener(map, "maptypechanged", function() {
				if (map.getCurrentMapType() == parksterr) {
					// show Map legend
					document.getElementById("sat-legend").style.display="none";
					document.getElementById("gmap-legend").style.display="none";
					document.getElementById("map-legend").style.display="block";
					removeGEtoggles();
				} else if (map.getCurrentMapType() == parkssat || map.getCurrentMapType()== G_SATELLITE_3D_MAP) {
					// show Satellite legend
					document.getElementById("map-legend").style.display="none";
					document.getElementById("gmap-legend").style.display="none";
					document.getElementById("sat-legend").style.display="block";   
					removeGEtoggles();      
				} else {
					// show gmap legend
					document.getElementById("sat-legend").style.display="none";
					document.getElementById("map-legend").style.display="none";
					document.getElementById("gmap-legend").style.display="block";
					removeGEtoggles();
				}
				if (map.getCurrentMapType() == G_SATELLITE_3D_MAP) {
					if (!loadedKML){
						networkLinkParks = ge.createNetworkLink("");
						networkLinkParks.setDescription("CPAD Parks");
						networkLinkParks.setName("Parks");
						networkLinkParks.setFlyToView(false);  
						var link = ge.createLink("");
						link.setHref("http://www.parkinfo.org/tilecache/tilecache.py/1.0.0/superoverlays_parks/3/2/5.kml"); 
						networkLinkParks.setLink(link);
						ge.getFeatures().appendChild(networkLinkParks);
						loadedKML = true;
					}
					if (!loadedKMLTrails){
						networkLinkTrails = ge.createNetworkLink("");
						networkLinkTrails.setDescription("OpenStreetMap Trails");
						networkLinkTrails.setName("Trails");
						networkLinkTrails.setFlyToView(false);   
						var linktr = ge.createLink("");
						linktr.setHref("http://www.parkinfo.org:8080/geoserver/gwc/service/kml/kml:OSMTrails_091021ridgebay.kml.kmz"); 
						networkLinkTrails.setLink(linktr);
						ge.getFeatures().appendChild(networkLinkTrails);
						var camera = ge.getView().copyAsCamera(ge.ALTITUDE_RELATIVE_TO_GROUND);
						ge.getView().setAbstractView(camera);
						networkLinkTrails.setVisibility(false);
						loadedKMLTrails = true;
					}
					if (!loadedKMLCamps){
						networkLinkCamps = ge.createNetworkLink("");
						networkLinkCamps.setDescription("NetworkLink open to fetched content");
						networkLinkCamps.setName("Campgrounds");
						networkLinkCamps.setFlyToView(false);  
						var link = ge.createLink("");
						link.setHref("http://www.parkinfo.org/tilecache/tilecache.py/1.0.0/superoverlays_camps/3/2/5.kml"); 
						networkLinkCamps.setLink(link);
						ge.getFeatures().appendChild(networkLinkCamps);
						networkLinkCamps.setVisibility(false); 
						loadedKMLCamps = true;
					}
					//this is used for overlaying a div on the Google Earth plugin screen  
					var shimmer = document.createElement('iframe');
					shimmer.id='shimmer';
					shimmer.style.position='absolute';
					shimmer.style.top='40px';
					shimmer.style.right='10px';
					shimmer.style.width='328px';
					shimmer.style.height='30px';
					shimmer.style.zIndex='999';
					shimmer.style.backgroundColor = '#666666';
					shimmer.setAttribute('frameborder','0');
					shimmer.setAttribute('scrolling','no');
					var RightColumn=document.getElementById("RightColumn"); 
					RightColumn.appendChild(shimmer);
					// make sub div visible
					var sd = document.getElementById('overlay_togglesGE');
					sd.style.visibility='visible';
				}  
			}); 

			GEvent.addListener(map, "zoomend", function() {
				if(document.getElementById("overlay") && document.getElementById("overlay").style.display=="block"){ 
					position_window(my_window); 
				}
				var zoomLevel =14;
				var currentZoom = map.getZoom();
				if (currentZoom >= zoomLevel) {
					var currMapTypeName = map.getCurrentMapType().getName(); 
					if (currMapTypeName=="Earth") {
						return false;
					} else {
						map.setMapType(parkssat);
						map.setZoom(currentZoom);
					}
				}
			}); 

			var i=function() {
				map.removeControl(loadingMessage);
				loadingMessage=null;
			};
			setTimeout(i, 3000);
		} else {
			alert("Sorry, the Google Maps API is not compatible with this browser");
		}
	} 

   loadPopup = function(a) {          
        if(this.readyState == 4 && this.status == 200) {
			if(this.responseText != ""){
                var a = this.responseText;
     		    var aReplaceAccess = a.replace("Open Access", "Open to the Public");
                html1 = "";
                html1 += '<div class="fixedheight">';
				html1 += aReplaceAccess;
				html1 += '<div class="zoomicons"><a href="javascript:zoomIN('+p+');"><img src="images/popup/zoomin.png" border="0" title="zoom in" alt="zoom in" /></a><a href="javascript:zoomOUT('+p+');"><img src="images/popup/zoomout.png" border="0" title="zoom out" alt="zoom out" /></a></div></div>';
                var text = a;
                //get the unit id from the response text
                var start = parseInt(text.indexOf("<b>ID:</b> ")) + 11;
				var id = text.slice(start, text.indexOf("<br><br>"));
                show_outline(id,"parks");
			} else {
                html1 = "";
            }
 	    } else if (this.readyState == 4 && this.status != 200) {
			// fetched the wrong page or network error...
			alert ("error getting information");
 	    }   
   }

   loadCampsPopup = function() {
        if(this.readyState == 4 && this.status == 200) {
			if(this.responseText != ""){
				var a = this.responseText; 
				html3 = "";
				html3 += '<div class="fixedheight">';
				html3 += a;
				html3 += '<div class="zoomicons"><a href="javascript:zoomIN('+p+');"><img src="images/popup/zoomin.png" border="0" title="zoom in" alt="zoom in" /></a><a href="javascript:zoomOUT('+p+');"><img src="images/popup/zoomout.png" border="0" title="zoom out" alt="zoom out" /></a></div></div>';
				var text = a;
				//get the unit id from the response text
				var start = parseInt(text.indexOf("<span style=\"display:none;\">")) + 28;
				var id = text.slice(start, text.indexOf("</span>"));
				show_outline(id,"camps");
			}  else {
				html3 = "";
			}
 	    } else if (this.readyState == 4 && this.status != 200) {
			// fetched the wrong page or network error...
			alert ("error getting information");
 	    } 
    }

   function addInfoTipMarker(pt){
   	      p = new GPoint(pt);
		// code from Lance on the Google Maps Group

		var b = map.getBounds();
		var sw = b.getSouthWest();
		var ne = b.getNorthEast();
		var w = sw.lng();
		var e = ne.lng();
		var n = ne.lat();
		var s = sw.lat();
		var ts = s;
		var tw = w;
		if(n<s) { s=n; n = ts; }
		if(e<w){ w=e; e = tw; }
		if(s<-90)s=-90;
		if(n>90)n=90;
		if(e>180)e=180;
		if(w<-180)w=-180;

		var span_ew = Math.abs(e - w);
		var span_ns = Math.abs(n - s);
		var width  = 768*span_ew/span_ns;
		var height = 768;

		var x = (pt.x - w) * width/span_ew;
		var y = (n - pt.y) * height/span_ns;

		var URL = GetURL(x, y, w, s, e, n, width, height);
           //   TrailsURL = GetURLTrails(x, y, w, s, e, n, width, height);
              CampsURL = GetURLCamps(x, y, w, s, e, n, width, height);
              html1="";
              html2="";
              html3="";
		map.addControl(loadingInfoMessage, new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(loadingPOS, 210)));
		try
		  {
		  // Firefox, Opera 8.0+, Safari
		  xmlHttp=new XMLHttpRequest();
		  }
		catch (e)
		  {
		  // Internet Explorer
		  try
			{
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
			}
		  catch (e)
			{
			try
			  {
			  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			  }
			catch (e)
			  {
			  alert("Your browser does not support AJAX!");
			  return false;
			  }
			}
		  }

		try
		  {
		  // Firefox, Opera 8.0+, Safari
		  client_camps=new XMLHttpRequest();
		  }
		catch (e)
		  {
		  // Internet Explorer
		  try
			{
			client_camps=new ActiveXObject("Msxml2.XMLHTTP");
			}
		  catch (e)
			{
			try
			  {
			  client_camps=new ActiveXObject("Microsoft.XMLHTTP");
			  }
			catch (e)
			  {
			  alert("Your browser does not support AJAX!");
			  return false;
			  }
			}
		  }
              xmlHttp.onreadystatechange = loadPopup;
              xmlHttp.open("GET", URL);
              xmlHttp.send(null);
              client_camps.onreadystatechange = loadCampsPopup;
              client_camps.open("GET", CampsURL);
              client_camps.send(null);
		timedCount();
	}

	function timedCount()
	{
		var t;
           //   if (client_trails.readyState == 4 && client_camps.readyState == 4 && xmlHttp.readyState == 4) {
            if (client_camps.readyState == 4 && xmlHttp.readyState == 4) {
                     if (html1 !="" | html2 !="" | html3!="") { 
                          constructPopup(pt);
                     } else {
                          map.removeControl(loadingInfoMessage);
                     }
            } else {
				t=setTimeout("timedCount()",500);
            }
	}

/*********************from www.apple.com, used for custom popup windows *************************/
function change_tab(element, type){
	var my_window = $('overlay');
	var my_tab = $('overlay_tab');
	var alltabs = my_window.getElementsByTagName('ul')[0];
	// Unselect tabs
	var tabs = element.parentNode.parentNode.getElementsByTagName("a");
	for(i=0;i<tabs.length;i++){
		tab = tabs[i];
		Element.removeClassName(tab, 'selected');
	}
	// Select tab
	Element.addClassName(element, 'selected');
	
	if (type == 'campgrounds'){
		//bring second tab forward
		Element.removeClassName(alltabs,'tabs');
		Element.addClassName(alltabs,'tabs2');
		my_tab.innerHTML = html3;
	}else{
		//bring first tab forward
		Element.removeClassName(alltabs,'tabs2');
		Element.addClassName(alltabs,'tabs');
		my_tab.innerHTML = html1;
	}
	//position_window(my_window);
	
	return false;
}

function close_window(){
	$('overlay').style.display = 'none';
          if (OutlineLayerCamp){
              map.removeOverlay(OutlineLayerCamp);
	   }
	return false;
}
		

	function constructPopup(pt){
		jQuery.noConflict();		
		map_point = map.fromLatLngToDivPixel(pt);
		
		if (!$('overlay')){ // need to create the overlay inside the map pane
			var new_obj = document.createElement("div");
			new_obj.style.display = 'none';
				  new_obj.style.minHeight = "237px";
			new_obj.innerHTML = $('overlay_temp').innerHTML;
			new_obj.getElementsByTagName('div')[0].id = 'overlay_tab';
			new_obj.id = 'overlay';
			document.body.appendChild(new_obj);
		}
		
		my_window = $('overlay');

		
		if (html1!=""){
			    // make sure the parks tab is in front
				var alltabs = my_window.getElementsByTagName('ul')[0];
				Element.removeClassName(alltabs,'tabs2');
				Element.addClassName(alltabs,'tabs');

				// Populate content
				var my_tab = $('overlay_tab');

				my_tab.innerHTML = html1;
				if (html1!="" && html3=="") { 
					jQuery("#overlay ul").removeClass("tabs");
					jQuery("#overlay ul").removeClass("tabCamponly");
					jQuery("#overlay ul").addClass("tabParkonly");
					document.getElementById('parktab').style.display="block";
					document.getElementById('camptab').style.display="none";
				} else {
					jQuery("#overlay ul").removeClass("tabCamponly");
					jQuery("#overlay ul").removeClass("tabParkonly");
					jQuery("#overlay ul").addClass("tabs");
					document.getElementById('parktab').style.display="block";
					document.getElementById('camptab').style.display="block";
				}
		} else {
				   // make sure the campgrounds tab is in front
				var alltabs = my_window.getElementsByTagName('ul')[0];
				Element.removeClassName(alltabs,'tabs');
				Element.addClassName(alltabs,'tabs2');
				   document.getElementById('parktab').style.display="none";
				   document.getElementById('camptab').style.display="block";

				// Populate content
				var my_tab = $('overlay_tab');
				   jQuery("#overlay ul").removeClass("tabs2");
				   jQuery("#overlay ul").removeClass("tabParkonly");
				jQuery("#overlay ul").addClass("tabCamponly");
				my_tab.innerHTML = html3;
		}

		// Stick it to the map
		map.getPane(G_MAP_MARKER_PANE).appendChild(my_window);
		my_window.style.display = 'block';
		map.removeControl(loadingInfoMessage);
		position_window(my_window);	
	}	
		
function position_window(my_window){
	// Get the positioning right
    map_point = map.fromLatLngToDivPixel(pt);
	var vert_loc = parseInt(map_point.y) - 240;
    my_window.style.minHeight = "237px";
	my_window.style.top = vert_loc  + "px";
	var horiz_loc = parseInt(map_point.x)-215; 
	my_window.style.left = horiz_loc + "px";
} 

function adjustVert(){
	map.panBy(new GSize(2, 20));
}
/****************** end from apple site ******************************/

	function GetURLTrails(x, y, w, s, e, n, width, height){
		query = mapserver_url;
		query+="SERVICE=WMS";
		query+="&SRS=EPSG:4326";
		query+="&VERSION=1.1.1";
		query+="&REQUEST=GetFeatureInfo";
		query+="&X=" + parseInt(x);
		query+="&Y=" + parseInt(y);
		query+="&QUERY_LAYERS=Trails_GetInfo";
		query+="&LAYERS=Trails_GetInfo";
		query+="&INFO_FORMAT=text/html";
		query+="&BBOX="+w+","+s+","+e+","+n;
		query+="&WIDTH="+parseInt(width)+"&HEIGHT="+ parseInt(height)+"&FORMAT=image/png&STYLES=";
		return query;           
	}

	function GetURLCamps(x, y, w, s, e, n, width, height){
		query = mapserver_url;
		query+="&SERVICE=WMS";
		query+="&SRS=EPSG:4326";
		query+="&VERSION=1.1.1";
		query+="&REQUEST=GetFeatureInfo";
		query+="&X=" + parseInt(x);
		query+="&Y=" + parseInt(y);
		query+="&QUERY_LAYERS=Camps_GetInfo";
		query+="&LAYERS=Camps_GetInfo";
		query+="&INFO_FORMAT=text/html";
		query+="&BBOX="+w+","+s+","+e+","+n;
		query+="&WIDTH="+parseInt(width)+"&HEIGHT="+ parseInt(height)+"&FORMAT=image/png&STYLES=";
		return query;           
	}

	function GetURL(x, y, w, s, e, n, width, height){
		query = mapserver_url;
		query+="&SERVICE=WMS";
		query+="&SRS=EPSG:4326";
		query+="&VERSION=1.1.1";
		query+="&REQUEST=GetFeatureInfo";
		query+="&X=" + parseInt(x);
		query+="&Y=" + parseInt(y);
		query+="&QUERY_LAYERS=Parks_GetInfo";
		query+="&LAYERS=Parks_GetInfo";
		query+="&INFO_FORMAT=text/html";
		query+="&BBOX="+w+","+s+","+e+","+n;
		query+="&WIDTH="+parseInt(width)+"&HEIGHT="+ parseInt(height)+"&FORMAT=image/png&STYLES=";
		return query;           
	}

//parks highlight
function CustomGetTileUrl(a,b,c) {
	var lULP = new GPoint(a.x*256,(a.y+1)*256);
	var lLRP = new GPoint((a.x+1)*256,a.y*256);
	var lUL = G_NORMAL_MAP.getProjection().fromPixelToLatLng(lULP,b,c);
	var lLR = G_NORMAL_MAP.getProjection().fromPixelToLatLng(lLRP,b,c);
	var lBbox=lUL.x+","+lUL.y+","+lLR.x+","+lLR.y;
	var lSRS="EPSG:4326";
	var lURL=this.myBaseURL;
	lURL+="&REQUEST=GetMap";
	lURL+="&SERVICE=WMS";
	lURL+="&VERSION=1.1.1";
	lURL+="&LAYERS=Parks_Hilite";
	lURL+="&FORMAT=AGGA";
	lURL+="&TRANSPARENT=TRUE";
	lURL+="&SRS="+lSRS;
	lURL+="&BBOX="+lBbox;
	lURL+="&STYLES=";
	lURL+="&WIDTH=256";
	lURL+="&HEIGHT=256";
	return lURL;
}

//camps highlight
function CustomGetTileUrlCamps(a,b,c) {
	var lULP = new GPoint(a.x*256,(a.y+1)*256);
	var lLRP = new GPoint((a.x+1)*256,a.y*256);
	var lUL = G_NORMAL_MAP.getProjection().fromPixelToLatLng(lULP,b,c);
	var lLR = G_NORMAL_MAP.getProjection().fromPixelToLatLng(lLRP,b,c);
	var lBbox=lUL.x+","+lUL.y+","+lLR.x+","+lLR.y;
	var lSRS="EPSG:4326";
	var lURL=this.myBaseURL;
	lURL+="&REQUEST=GetMap";
	lURL+="&SERVICE=WMS";
	lURL+="&VERSION=1.1.1";
	lURL+="&LAYERS=Camps_Hilite";
	lURL+="&FORMAT=AGGA";
	lURL+="&TRANSPARENT=TRUE";
	lURL+="&SRS="+lSRS;
	lURL+="&BBOX="+lBbox;
	lURL+="&STYLES=";
	lURL+="&WIDTH=256";
	lURL+="&HEIGHT=256";
	return lURL;
}

//trails highlight
function CustomGetTileUrlTrails(a,b,c) {
	var lULP = new GPoint(a.x*256,(a.y+1)*256);
	var lLRP = new GPoint((a.x+1)*256,a.y*256);
	var lUL = G_NORMAL_MAP.getProjection().fromPixelToLatLng(lULP,b,c);
	var lLR = G_NORMAL_MAP.getProjection().fromPixelToLatLng(lLRP,b,c);
    var lBbox=lUL.x+","+lUL.y+","+lLR.x+","+lLR.y;
    var lSRS="EPSG:4326";
    var lURL=this.myBaseURL;
	lURL+="&REQUEST=GetMap";
	lURL+="&SERVICE=WMS";
	lURL+="&VERSION=1.1.1";
	lURL+="&LAYERS=Trails_Hilite";
	lURL+="&FORMAT=AGGA";
	lURL+="&TRANSPARENT=TRUE";
	lURL+="&SRS="+lSRS;
	lURL+="&BBOX="+lBbox;
	lURL+="&STYLES=";
	lURL+="&WIDTH=256";
	lURL+="&HEIGHT=256";
	return lURL;
}

	function zoomIN(pt) {
           map.setCenter(pt,map.getZoom()+1);
    }

	function zoomOUT(pt) {
           map.setCenter(pt,map.getZoom()-1);
    }

   function toggleCamps(id)
    {
        if (OverlayLayerCamp){
             map.removeOverlay(OverlayLayerCamp);
	    }
        if ( document.getElementById("camps").checked == true ) {
			map.addOverlay( OverlayLayerCamp );
        }
		else {
			map.removeOverlay( OverlayLayerCamp );
			if (OutlineLayerCamp){
				map.removeOverlay(OutlineLayerCamp);
			}
        }
    } 

   function toggleTrails(id)
    {
		if (OverlayLayerTrails) {
			map.removeOverlay( OverlayLayerTrails );
		}
		if ( document.getElementById("trails2").checked == true ) {
			map.addOverlay( OverlayLayerTrails );
		}
		else {
			map.removeOverlay( OverlayLayerTrails );
		}
    } 

   function toggleParks(id)
    {
       //somehow need to store the current maptype and reset it once the user toggles the park layer.
       var currMapTypeName = map.getCurrentMapType().getName();  
       if ( document.getElementById("parks2").checked == true ) {
			map.removeMapType(parksgmap);
			map.removeMapType(parkssat);            
			map.setMapType(parksterr);
            map.removeMapType(G_SATELLITE_3D_MAP);        
            parkssat = new GMapType(lyr_parks_sat, G_NORMAL_MAP.getProjection(), "Satellite", {errorMessage:"Data currently unavailable"});
            parksgmap = new GMapType(lyr_parks_gmap, G_NORMAL_MAP.getProjection(), "Map", {errorMessage:"Data currently unavailable"});
            map.addMapType(parksgmap);
            map.addMapType(parkssat);
            map.setMapType(parksgmap);
            map.removeMapType(parksterr);
            parksterr = new GMapType(lyr_parks_terr, G_NORMAL_MAP.getProjection(), "Terrain", {errorMessage:"Data currently unavailable"});
            map.addMapType(parksterr);
            map.addMapType(G_SATELLITE_3D_MAP);
      // ====== Restricting the range of Zoom Levels =====
      // Get the list of map types      
      var mt = map.getMapTypes();
      // Overwrite the getMinimumResolution() and getMaximumResolution() methods
      for (var i=0; i<mt.length; i++) {
        mt[i].getMinimumResolution = function() {return 6;}
        mt[i].getMaximumResolution = function() {return 18;}
      }
             if (currMapTypeName =="Map") {
               map.setMapType(parkssat);
               map.setMapType(parksgmap);
             } else if (currMapTypeName =="Satellite") {
               map.setMapType(parkssat);
             } else if (currMapTypeName =="Terrain"){
               map.setMapType(parksterr);
             } else {
               map.setMapType(G_SATELLITE_3D_MAP);
             }
       }
       else {
             map.removeMapType(parksgmap);
             map.removeMapType(parkssat);
             map.setMapType(parksterr);
             map.removeMapType(G_SATELLITE_3D_MAP);
             parkssat = new GMapType(lyr_sat, G_NORMAL_MAP.getProjection(), "Satellite", {errorMessage:"Data currently unavailable"});
             parksgmap = new GMapType(lyr_gmap, G_NORMAL_MAP.getProjection(), "Map", {errorMessage:"Data currently unavailable"});
             map.addMapType(parksgmap);
             map.addMapType(parkssat);
             map.setMapType(parksgmap);
             map.removeMapType(parksterr);
             parksterr = new GMapType(lyr_terr, G_NORMAL_MAP.getProjection(), "Terrain", {errorMessage:"Data currently unavailable"}); 
             map.addMapType(parksterr);
             map.addMapType(G_SATELLITE_3D_MAP);
      // ====== Restricting the range of Zoom Levels =====
      // Get the list of map types      
      var mt = map.getMapTypes();
      // Overwrite the getMinimumResolution() and getMaximumResolution() methods
      for (var i=0; i<mt.length; i++) {
        mt[i].getMinimumResolution = function() {return 6;}
        mt[i].getMaximumResolution = function() {return 18;}
      }
             if (currMapTypeName =="Map") {
               map.setMapType(parkssat);
               map.setMapType(parksgmap);
             } else if (currMapTypeName =="Satellite") {
               map.setMapType(parkssat);
             } else if (currMapTypeName =="Terrain"){
               map.setMapType(parksterr);
             } else {
               map.setMapType(G_SATELLITE_3D_MAP);
             }
       }

    } 

function getoggleParks() {
    if (loadedKML== true) {
     networkLinkParks.setVisibility(false); 
       loadedKML= false;
    } else {
      networkLinkParks.setVisibility(true); 
      loadedKML = true;
    }
}

function getoggleTrails() {
    if (loadedKMLTrails== false) {
     networkLinkTrails.setVisibility(false); 
       loadedKMLTrails= true;
    } else {
      networkLinkTrails.setVisibility(true); 
      loadedKMLTrails = false;
    }
}

	function getoggleCamps() {
		if (loadedKMLCamps== false) {
		 networkLinkCamps.setVisibility(false); 
		   loadedKMLCamps= true;
		} else {
		  networkLinkCamps.setVisibility(true); 
		  loadedKMLCamps = false;
		}
	}

	function removeGEtoggles() {
        var sd = document.getElementById('overlay_togglesGE');
        sd.style.visibility='hidden';
        var RightColumn=document.getElementById("RightColumn"); 
        var shimmer = document.getElementById('shimmer');
        if (shimmer != undefined) {
			RightColumn.removeChild(shimmer);
        }
	}

    function showAddress(szFindWhat, szFindBy, szField, szValue, txtResultsPage) {
      var address = document.getElementById("addressquery").value;
      if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              alert(address + " not found");
            } else {
               //get lat and lon from google point
              var lat = point.lat();
              var lon = point.lng();
   
              // set the IFRAME page source
              frames['queryres'].location.href = txtResultsPage + '?result_geom=' + szFindWhat + '&bound_geom=' + szFindBy + '&bound_field=' + szField + '&bound_value=' + szValue + '&lat=' + lat + '&lon=' + lon +'&saddr=' + address;

              // set the printlist URL to capture the current query parameters
              document.forms[0].printListURL.value = "?result_geom=" + szFindWhat + "&bound_geom=" + szFindBy + "&bound_field=" + szField + "&bound_value=" + szValue + '&lat=' + lat + '&lon=' + lon;
            }
          }
        );
      }
    }
    function createMarker(point,html) {
        var marker = new GMarker(point);
        GEvent.addListener(marker, "click", function() {
          marker.openInfoWindowHtml(html);
        });
        return marker;
    }

	//this code is borrowed from Nelson Guda's Roadlessland.org map.
	function show_outline(id, layer) {
		if(id==0) {
			var tmp_oid = last_oid;
			last_oid = OutlineId;
			OutlineId = tmp_oid;
		} else {
			last_oid = 0;
			OutlineId = id; 
		}
        if (layer=="parks") {
			tile_park_outline.myBaseURL=mapserver_url + 'unit_id=' + OutlineId + "&";
            map.removeOverlay(OutlineLayer);
            map.addOverlay(OutlineLayer);
        } else if (layer=="camps") { 
            map.removeOverlay(OutlineLayerCamp);
			tile_camp_outline.myBaseURL=mapserver_url + 'gid=' + OutlineId + "&";
            map.addOverlay(OutlineLayerCamp);
        } else if (layer=="trails") {
			//tile_trail_outline.myBaseURL=mapserver_url + 'gid=' + OutlineId + "&";
			//OutlineLayerTrail.refresh();
       }
	}
    
    function getEarthInstanceCB(object) {
		ge = object;
		// You can now manipulate ge using the full Google Earth API.
		ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, true);
    } 


