//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";

      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);
		//OutlineLayer.refresh();
       } else if (layer=="camps") { 
              map.removeOverlay(OutlineLayerCamp);
		tile_camp_outline.myBaseURL=mapserver_url + 'gid=' + OutlineId + "&";
		//OutlineLayerCamp.refresh();
              map.addOverlay(OutlineLayerCamp);
       } else if (layer=="trails") {
		//tile_trail_outline.myBaseURL=mapserver_url + 'gid=' + OutlineId + "&";
		//OutlineLayerTrail.refresh();
       }
}

    var ge;
    function getEarthInstanceCB(object) {
      ge = object;
      // You can now manipulate ge using the full Google Earth API.
      ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, true);
    } 

function onLoad() {
//window["queryres"].document.body.innerHTML= '<h3 style="font-family: arial, sans-serif, helvetica;color: #638c39;letter-spacing: 5px;margin-bottom: 0px;">Welcome to ParkInfo</h3><h6 style="font-family: arial;margin-top: 0px;margin-bottom: 10px;color: #555555;font-size: 8pt;font-weight: bold;">Your portal to open space recreational opportunities</h6><img src="../images/divider.png" border=0><p style="margin-top: 8px;margin-bottom: 8px;margin-right:0px; padding-right:0px;font-size: 75%;font-family: verdana;line-height: 13pt;">Parks, campgrounds and many trails are available for the entire state of California - NOW with <b>updated data, plus driving, transit and walking directions and birds-eye views of urban parks!</b>  <br><br><span style="color: #638c39;font-weight: bold;margin-top: 10px;font-size: 90%;font-family: verdana;">Getting Started...</span><ol style="margin: 0px;padding-left: 20px;line-height: 13pt;"><li style="font-size: 75%;margin-bottom: 10px;font-family: verdana;">Choose your interests - click parks, campgrounds or trails in the map check boxes</li><li style="font-size: 75%;margin-bottom: 10px;font-family: verdana;">Use the <b>search</b> choices above to create a list of sites that fit your interests, click "map" to zoom to any site</li><li style="font-size: 75%;margin-bottom: 5px;font-family: verdana;">OR, zoom in on the <b>map</b> and click on a site to see details: name, website link, driving directions link, and birds-eye view image option (not for all sites)</li></ol><p style="position:absolute; top:355px; left: 30px; margin-bottom: 0px;font-size: 70%;font-family: verdana;color: #4D6F29;text-align:center;"><a style="font-weight:bold;font-family: verdana;color: #4D6F29;text-decoration:none;" href="mailto:parkinfo@greeninfo.org">Contact us</a> if you want ParkInfo on your web site.</p>';


if (GBrowserIsCompatible()) {

    map = new GMap2(document.getElementById("map"));
    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);
		//	last we add the new control to the map
		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.setCenter(new GLatLng(37.405074,-120.102539), 6);
    map.addControl(new GLargeMapControl());
    map.addControl(new GOverviewMapControl(new GSize(175,175)));
  //  var mapControl = new GMapTypeControl();
  //  map.addControl(mapControl);
    map.enableScrollWheelZoom();
    map.addControl(new mapTypeHybrid(map));
    map.addControl(new mapTypeMap(map));
    map.addControl(new mapTypeTerr(map));
    map.addControl(new mapTypeEarth(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>';
//    var html='<div id="overlay-toggles"><input type="checkbox" name="parks2" id="parks2" checked="checked" onclick="toggleParks(this.id)">Parks <input type="checkbox" name="trails2" id="trails2" onclick="toggleTrails(this.id)">Trails <input type="checkbox" name="camps" id="camps" onclick="toggleCamps(this.id)">Campgrounds<img src="images/camp.png" border="0"></div>';
   // var html='<div id="overlay-toggles"><span class="left"><input type="checkbox" name="parks2" id="parks2" checked="checked" onclick="toggleParks(this.id)"><label for="parks2">Parks</label> </span><span class="right"><input type="checkbox" name="camps" id="camps" onclick="toggleCamps(this.id)"><label for="camps">Campgrounds</label><img src="images/camp.png" border="0"></span></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);
    //	last we add the new control to the map
    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)));
     

    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,17);
    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);
 //   map.addOverlay(OutlineLayer);

    tile_camp_outline = new GTileLayer(new GCopyrightCollection(""),1,17);
    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);
   // map.addOverlay(OutlineLayerCamp);


    tile_trail_outline = new GTileLayer(new GCopyrightCollection(""),1,17);
    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.addOverlay(OutlineLayerTrail);


    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 5;}
        mt[i].getMaximumResolution = function() {return 17;}
      }
      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:osmtrailsJuly09_wgs.kml.kmz"); 
              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 link2 = ge.createLink("");
		link2.setHref("http://www.parkinfo.org:8080/geoserver/gwc/service/kml/kml:campgrounds_kml.kml.kmz"); 
		networkLinkCamps.setLink(link2);
		ge.getFeatures().appendChild(networkLinkCamps);
              var camera = ge.getView().copyAsCamera(ge.ALTITUDE_RELATIVE_TO_GROUND);
              ge.getView().setAbstractView(camera);
              networkLinkCamps.setVisibility(false);
            	loadedKMLCamps = true;
*/
            	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;
              }

        var shimmer = document.createElement('iframe');
        shimmer.id='shimmer';
        shimmer.style.position='absolute';
        shimmer.style.top='40px';
        shimmer.style.right='5px';
        shimmer.style.width='328px';
        shimmer.style.height='30px';
        shimmer.style.zIndex='999';
        shimmer.style.backgroundColor = 'transparent';
        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");
 	     }   
   }
/*
   loadTrailsPopup = function() {         
           if(this.readyState == 4 && this.status == 200) {
  		if(this.responseText != ""){
                  var a = this.responseText;          
                 html2 = "";
		    html2 += '<div><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>';
		    html2 += a;
                 html2 += '</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,"trails");
             } else {
                 html2 = "";
             }
 	     } 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_trails=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
  try
    {
    client_trails=new ActiveXObject("Msxml2.XMLHTTP");
    }
  catch (e)
    {
    try
      {
      client_trails=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_trails.onreadystatechange = loadTrailsPopup;
              client_trails.open("GET", TrailsURL);
              client_trails.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 apple site *************************/
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";
      // vert_adj = parseInt(pt.y) + 1;
	//var pan_to = new GLatLng( pt.y, pt.x )
	//map.panTo( pan_to );
       //adjustVert();
} 

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;           
	}

//using this for the highlight feature
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 5;}
        mt[i].getMaximumResolution = function() {return 17;}
      }
             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 5;}
        mt[i].getMaximumResolution = function() {return 17;}
      }
             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;
              //map.setCenter(point, 13);
              //var marker = new GMarker(point);
             // map.addOverlay(marker);
             // marker.openInfoWindowHtml(address);
            }
          }
        );
      }
    }



