google.load('earth', '1');
var map;
var ge;
var emptyOverlay;

var my_infoOverlay;
var OutlineLayerCamp,OutlineLayerPark;
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_osm.map&';
var CampsURL;
var TrailsURL;

var terrainTypeOptions = {
	getTileUrl: function(coord, zoom) {
        return "http://ec2-174-129-148-40.compute-1.amazonaws.com/tiles/color-relief" +
            "/" + zoom + "/" + coord.x + "/" +
            coord.y + ".jpg";
      },
      tileSize: new google.maps.Size(256, 256),
      isPng: false,
      maxZoom: 16,
      minZoom: 0,
      name: "Terrain"
};

var featureTypeOptions = {
	getTileUrl: function(coord, zoom) {
        return "http://ec2-174-129-148-40.compute-1.amazonaws.com/tiles/features" +
            "/" + zoom + "/" + coord.x + "/" +
            coord.y + ".png";
      },
      tileSize: new google.maps.Size(256, 256),
      isPng: true,
      maxZoom: 16,
      minZoom: 0,
      name: "OSM-Features"
};    

var googleRoadsTypeOptions = {
	getTileUrl: function(ll, z) {
		var X = ll.x % (1 << z);  // wrap
		return "http://mt0.google.com/vt/v=apt.116&hl=en-US&x="
		  + X + "&y=" + ll.y + "&z=" + z + "&s=G&lyrs=h";
	  },
	  tileSize: new google.maps.Size(256, 256),
	  isPng: false,
	  maxZoom: 20,
	  name: "Google-Roads",
	  alt: "Hybrid-labels"
};

var contourTypeOptions = {
	getTileUrl: function(coord, zoom) {
        return "http://ec2-174-129-148-40.compute-1.amazonaws.com/tiles/contours" +
            "/" + zoom + "/" + coord.x + "/" +
            coord.y + ".png";
      },
      tileSize: new google.maps.Size(256, 256),
      isPng: true,
      maxZoom: 16,
      minZoom: 0,
      name: "Contours"
};    

var parksTypeOptions = {
	getTileUrl: function(coord, zoom) {
        return "http://www.parkinfo.org/tilecache/tilecache.py/1.0.0/parkinfo_parks_may2010" +
            "/" + zoom + "/" + coord.x + "/" +
            coord.y + ".png?type=google";
      },
      tileSize: new google.maps.Size(256, 256),
      isPng: true,
      maxZoom: 16,
      minZoom: 0,
	  opacity: 0.5,
      name: "Parks"
};    

var parksTypeOptionsDarker = {
	getTileUrl: function(coord, zoom) {
        return "http://www.parkinfo.org/tilecache/tilecache.py/1.0.0/parkinfo_parks_may2010" +
            "/" + zoom + "/" + coord.x + "/" +
            coord.y + ".png?type=google";
      },
      tileSize: new google.maps.Size(256, 256),
      isPng: true,
      maxZoom: 16,
      minZoom: 0,
	  opacity: 0.7,
      name: "Parks-Darker"
};    

var npsTypeOptions = {
	getTileUrl: function(coord, zoom) {
        return "http://www.parkinfo.org/tilecache/tilecache.py/1.0.0/parkinfo_sp_nps" +
            "/" + zoom + "/" + coord.x + "/" +
            coord.y + ".png?type=google";
      },
      tileSize: new google.maps.Size(256, 256),
      isPng: true,
      maxZoom: 16,
      minZoom: 0,
	  opacity: 1,
      name: "NPS-Outlines"
};    

var waterTypeOptions = {
	getTileUrl: function(coord, zoom) {
        return "http://www.parkinfo.org/tilecache/tilecache.py/1.0.0/parkinfo_watermask" +
            "/" + zoom + "/" + coord.x + "/" +
            coord.y + ".png?type=google";
      },
      tileSize: new google.maps.Size(256, 256),
      isPng: true,
      maxZoom: 16,
      minZoom: 0,
	  opacity: 1,
      name: "Water-Mask"
};    

var landTypeOptions = {
	getTileUrl: function(coord, zoom) {
        return "http://www.parkinfo.org/tilecache/tilecache.py/1.0.0/parkinfo_landmask" +
            "/" + zoom + "/" + coord.x + "/" +
            coord.y + ".png?type=google";
      },
      tileSize: new google.maps.Size(256, 256),
      isPng: true,
      maxZoom: 16,
      minZoom: 0,
	  opacity: 0.7,
      name: "Land-Mask"
};
	
var labelTypeOptions = {
	getTileUrl: function(coord, zoom) {
        return "http://www.parkinfo.org/tilecache/tilecache.py/1.0.0/parkinfo_osm_labels" +
            "/" + zoom + "/" + coord.x + "/" +
            coord.y + ".png?type=google";
      },
      tileSize: new google.maps.Size(256, 256),
      isPng: true,
      maxZoom: 16,
      minZoom: 0,
	  opacity: 1,
      name: "Labels"
};

var campsTypeOptions = {
	getTileUrl: function(coord, zoom) {
        return "http://www.parkinfo.org/tilecache/tilecache.py/1.0.0/parkinfo_camps" +
            "/" + zoom + "/" + coord.x + "/" +
            coord.y + ".png?type=google";
      },
      tileSize: new google.maps.Size(256, 256),
      isPng: true,
      maxZoom: 16,
      minZoom: 0,
	  opacity: 1,
      name: "Campgrounds"
};

var trailsTypeOptions = {
	getTileUrl: function(coord, zoom) {
        return "http://www.parkinfo.org/tilecache/tilecache.py/1.0.0/parkinfo_trails" +
            "/" + zoom + "/" + coord.x + "/" +
            coord.y + ".png?type=google";
      },
      tileSize: new google.maps.Size(256, 256),
      isPng: true,
      maxZoom: 16,
      minZoom: 0,
	  opacity: 1,
      name: "Trails"
}; 

//highlight layers

var tile_camp_outline = {
	  tileSize: new google.maps.Size(256, 256),
      isPng: true,
      maxZoom: 16,
      minZoom: 0,
	  opacity: 1,
      name: "Camp Outline",
	  myBaseURL: mapserver_url + 'unit_id=' + OutlineId + "&"
}; 

var tile_park_outline = {
	  tileSize: new google.maps.Size(256, 256),
      isPng: true,
      maxZoom: 16,
      minZoom: 0,
	  opacity: 1,
      name: "Park Outline",
	  myBaseURL: mapserver_url + 'unit_id=' + OutlineId + "&"
}; 
// geturls
CustomGetTileUrlCamps = function(tile,zoom) {
	var projection = map.getProjection();
    var zpow = Math.pow(2, zoom);
    var ul = new google.maps.Point(
        tile.x * 256.0 / zpow, 
        (tile.y + 1) * 256.0 / zpow
    );
    var lr = new google.maps.Point(
        (tile.x + 1) * 256.0 / zpow, 
        tile.y * 256.0 / zpow
    );
    var ulw = projection.fromPointToLatLng(ul);
    var lrw = projection.fromPointToLatLng(lr);

    var bbox = ulw.lng() + "," + ulw.lat() + "," + lrw.lng() + "," + lrw.lat();
    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="+bbox;
	lURL+="&STYLES=";
	lURL+="&WIDTH=256";
	lURL+="&HEIGHT=256";
	return lURL;
}

CustomGetTileUrlParks = function(tile,zoom) {
	var projection = map.getProjection();
    var zpow = Math.pow(2, zoom);
    var ul = new google.maps.Point(
        tile.x * 256.0 / zpow, 
        (tile.y + 1) * 256.0 / zpow
    );
    var lr = new google.maps.Point(
        (tile.x + 1) * 256.0 / zpow, 
        tile.y * 256.0 / zpow
    );
    var ulw = projection.fromPointToLatLng(ul);
    var lrw = projection.fromPointToLatLng(lr);

    var bbox = ulw.lng() + "," + ulw.lat() + "," + lrw.lng() + "," + lrw.lat();
    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;
}

tile_camp_outline.getTileUrl = CustomGetTileUrlCamps;
tile_park_outline.getTileUrl = CustomGetTileUrlParks;

//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") {
		
              //map.removeOverlay(OutlineLayer);
            /*tile_park_outline.myBaseURL=mapserver_url + 'gid=' + OutlineId + "&";
			tile_park_outline.getTileUrl = CustomGetTileUrlParks;
			OutlineLayerPark = new google.maps.ImageMapType(tile_park_outline);
		
			var overlayCount = 0;
			for (i=0;i<map.overlayMapTypes.length;i++) {
				if (map.overlayMapTypes.getAt(i) != null) {
					overlayCount++;
				}
			}
			map.overlayMapTypes.setAt(overlayCount+1,OutlineLayerPark);*/
       } else if (layer=="camps") { 
             // map.removeOverlay(OutlineLayerCamp);
			removeOverlay("Camp Outline");
			tile_camp_outline.myBaseURL=mapserver_url + 'gid=' + OutlineId + "&";
			tile_camp_outline.getTileUrl = CustomGetTileUrlCamps;
			OutlineLayerCamp = new google.maps.ImageMapType(tile_camp_outline);
		
			var overlayCount = 0;
			for (i=0;i<map.overlayMapTypes.length;i++) {
				if (map.overlayMapTypes.getAt(i) != null) {
					overlayCount++;
				}
			}
			map.overlayMapTypes.setAt(overlayCount+1,OutlineLayerCamp);
       } else if (layer=="trails") {
		//tile_trail_outline.myBaseURL=mapserver_url + 'gid=' + OutlineId + "&";
		//OutlineLayerTrail.refresh();
       }
}

var kdzoomOptions = {
		visualEnabled: true,
		boxStyle: {border: "2px solid #0000ff"},
		visualPositionOffset: new google.maps.Size(9, 145),
		visualSprite: "images/sprites_dragzoom2.png",
		//visualSprite: "http://maps.gstatic.com/mapfiles/ftr/controls/dragzoom_btn.png",
		visualSize: new google.maps.Size(30,30),
        visualTips: {
            off: "Click and drag to zoom in",
            on: "Turn off"
        }
    };

var terrainBaseMapType = new google.maps.ImageMapType(terrainTypeOptions);
var tileOSM = new google.maps.ImageMapType(featureTypeOptions);
var googleRoads = new google.maps.ImageMapType(googleRoadsTypeOptions);
var	tileParks = new google.maps.ImageMapType(parksTypeOptions);
var	tileParksDarker = new google.maps.ImageMapType(parksTypeOptionsDarker);
var	tileContours = new google.maps.ImageMapType(contourTypeOptions);
var	tileNPSOutlines = new google.maps.ImageMapType(npsTypeOptions);
var	tileWaterMask = new google.maps.ImageMapType(waterTypeOptions);
var	tileLandMask = new google.maps.ImageMapType(landTypeOptions);
var	tileLabels = new google.maps.ImageMapType(labelTypeOptions);
var	tileTrails = new google.maps.ImageMapType(trailsTypeOptions);
var	tileCampgrounds = new google.maps.ImageMapType(campsTypeOptions);

var lyr_roadsterr,lyr_parksterr,lyr_parkssat;

var loadingMessage;
var googleEarth;
var t;

var loadedKML;
var loadedKMLTrails;
var loadedKMLCamps;
var networkLinkParks;
var networkLinkTrails;
var networkLinkCamps;
var GESTATE = {};

//for info windows
var html1;
var html2;
var html3;
var pt;
var p;
var infoListener;
var loadingInfoMessage;

var geocoder = new google.maps.Geocoder();
var searchMarker = null;
var searchPlacemark = null;
var searchWindow = null;

var mobile = function(){
	return {
		detect:function(){
			var uagent = navigator.userAgent.toLowerCase(); 
			var list = this.mobiles;
			var ismobile = false;
			for(var d=0;d<list.length;d+=1){
				if(uagent.indexOf(list[d])!=-1){
					ismobile = true;
				}
			}
			return ismobile;
		},
		mobiles:[
			"midp","240x320","blackberry","netfront","nokia","panasonic",
			"portalmmm","sharp","sie-","sonyericsson","symbian",
			"windows ce","benq","mda","mot-","opera mini",
			"philips","pocket pc","sagem","samsung","sda",
			"sgh-","vodafone","xda","palm","iphone",
			"ipod","ipad","android","safari"
		]
	};
}();

var mapState = 'terrain';
var maptypechanged;

function onLoad() {

/*if (mobile.detect()) {
	var latlng = new google.maps.LatLng(37.405074,-120.102539);
    var myOptions = {
      zoom: 7,
      center: latlng,
      mapTypeControlOptions: {
		mapTypeIds: ['Terrain', google.maps.MapTypeId.ROADMAP,google.maps.MapTypeId.SATELLITE]//,
		//style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
	  },
	  zoomControl:false,
	  streetViewControl:false,
	  navigationControl:false,
	  zoomControlOptions: {
		position: google.maps.ControlPosition.TOP_LEFT
	  }

    };
    map = new google.maps.Map(document.getElementById("map"),
        myOptions);
	map.mapTypes.set("Terrain", terrainBaseMapType);
    map.setMapTypeId("Terrain");	
	
	var maxOverlays = 10; //increase if tiles stop loading...
	for (i=1;i<maxOverlays;i++) {
		map.overlayMapTypes.setAt(i,null);
	}
	
	lyr_parksterr = [tileWaterMask,tileParks,tileContours,tileNPSOutlines,tileOSM]; //,tileLandMask tileParksDarker
	lyr_parkssat = [tileParks,tileNPSOutlines,tileLabels,googleRoads];
	lyr_parksstreets = [tileParks,tileNPSOutlines,tileLabels];
	road_labels = [tileParks,tileWaterMask,tileOSM,tileLandMask]; 
	//alert('hi');
	
	//addLayer(lyr_parksterr,0,"clear");
	addLayer(road_labels,0,"clear");
	
    
	infoListener = google.maps.event.addListener(map, "click", function(event) {
        
		if (my_infoOverlay) {
			my_infoOverlay.setMap(null);
		}
		pt = event.latLng;
        addInfoTipMarkerMobile(pt);
		
    });
	
	maptypechanged = google.maps.event.addListener(map, "maptypeid_changed", function(event) {
			clearTileOverlays();
			var id = map.getMapTypeId();
			switch (id) {
				case 'roadmap':
					addLayer([tileParks],0,'clear');
					break;
				case 'satellite':
					addLayer([tileParks,googleRoads],0,'clear');
					break;
				case 'Terrain':
					addLayer(road_labels,0,"clear");
					break;
			}
    });
	
	loadingInfoMessage = document.createElement('DIV');
	loadingInfoMessage.style.position = 'absolute';
	loadingInfoMessage.style.zIndex = '99999';
	loadingInfoMessage.innerHTML = '<div style="background-color:white; -moz-opacity: .9; padding: 5px; font-weight:bold; font-size:16px; color: #638c39; font-family:arial; text-align:center; margin-top:150%; z-index:99999"><img src="images/ajaxLoading.gif" border="0"><br>Getting Info...</div>';

}
else {*/
	map = new google.maps.Map(document.getElementById('map'), {
        zoom: 6,
        center: new google.maps.LatLng(37.405074,-120.102539),
        disableDefaultUI: true,
		//panControl: true,
		//zoomControl: true,
		//streetViewControl: true,
		minZoom: 6
    });
	
    
	
	loadingMessage = document.createElement('DIV');
	loadingMessage.innerHTML = '<div style="background-color:white; -moz-opacity: .9; padding: 5px; font-weight:bold; font-size:16px; color: #638c39; font-family:arial; text-align:center; margin-top:150%;"><img src="images/ajaxLoading.gif" border="0"><br>Map Loading...</div>'
	map.controls[google.maps.ControlPosition.TOP_CENTER].push(loadingMessage);
	
	var overview_options = {
		rectangle_color: '736aff',
		zoom_difference: 3,
		rectangle_opacity: 0.1,
		box_height: 175,
		box_width: 175
    }
    map.Overview(overview_options);
	map.enableKeyDragZoom(kdzoomOptions);
	
	//set base map type, initial map state, and maximum allowed overlays
	mapState = "terrain";
	map.mapTypes.set("Terrain", terrainBaseMapType);
    map.setMapTypeId("Terrain");	
	var maxOverlays = 500; //increase if tiles stop loading...
	for (i=1;i<maxOverlays;i++) {
		map.overlayMapTypes.setAt(i,null);
	}
	
	document.getElementById("map-legend").style.display="block";
    document.getElementById("gmap-legend").style.display="none";
    document.getElementById("sat-legend").style.display="none";  
	
    lyr_roadsterr = [tileWaterMask,tileOSM,tileLandMask]; 
	lyr_parksterr = [tileWaterMask,tileParksDarker,tileContours,tileNPSOutlines,tileOSM,tileLandMask];
	lyr_parkssat = [tileParks,tileNPSOutlines,tileLabels,googleRoads];

	var overlayToggleDiv = document.createElement('DIV');
	overlayToggleDiv.style.width = '331px';
	overlayToggleDiv.style.height = '34px';
	overlayToggleDiv.style.background = 'url(/images/topoptions/checkboxes.png) no-repeat';
	overlayToggleDiv.innerHTML = '<div style="position:relative;top:4px;left:10px;float:left;"><input id="parkcbx" type="checkbox" onclick="javascript:toggleParks()" checked="checked" /></div><div style="position:absolute;top:4px;left:98px;float:left;"><input id="trailcbx" type="checkbox" onclick="javascript:toggleTrails()" /></div><div style="position:absolute;top:4px;left:198px;"><input id="campcbx" type="checkbox" onclick="javascript:toggleCampgrounds()" /></div>';
		
	var buTerrDiv = document.createElement('DIV');
	buTerrDiv.innerHTML = "<img src='images/topoptions/mapview.png' border=0 />";
	buTerrDiv.style.cursor = "pointer";
	buTerrDiv.title = "Turn on terrain layer";
	google.maps.event.addDomListener(buTerrDiv, 'click', function() {
		mapState = "terrain";
		map.setMapTypeId("Terrain");
		toggleParks();	
		$('credits').show();
		$('sat-legend').hide();
		$('map-legend').show();
	});
	
	var buEarthDiv = document.createElement('DIV');
	buEarthDiv.innerHTML = "<img src='images/topoptions/earthview.png' border=0 />";
	buEarthDiv.style.cursor = "pointer";
	buEarthDiv.title = "Turn on 3D Google Earth view";
	google.maps.event.addDomListener(buEarthDiv, 'click', function() {
	   mapState = "earth";	
	   map.setMapTypeId(GoogleEarth.MAP_TYPE_ID);
	   geControls();
	   $('map-legend').hide();
	   $('sat-legend').show();
	});			
	
	buHybridDiv = document.createElement('DIV');
	buHybridDiv.innerHTML = "<img src='images/topoptions/satview.png' border=0 />";
	buHybridDiv.style.cursor = "pointer";
	buHybridDiv.title = "Turn on hybrid layer";
	google.maps.event.addDomListener(buHybridDiv, 'click', function() {
		mapState = "satellite";
		map.setMapTypeId(google.maps.MapTypeId.SATELLITE);
		toggleParks();
		$('credits').hide();
		$('map-legend').hide();
		$('sat-legend').show();
	});
	
	creditsDiv = document.createElement('Div');
	creditsDiv.id = 'credits';
	creditsDiv.innerHTML = '<div style="color: #7777CC; font-size:67%; font-family:Helvetica,Arial,sans-serif;">Data: <a style="color: #7777CC;" href="http://www.calands.org" target="_blank">CPAD</a>, <a style="color: #7777CC;" href="http://www.openstreetmap.org" target="_blank">OpenStreetMap</a>, <a style="color: #7777CC;" href="http://usgs.gov" target="_blank">USGS</a>. License: CC-BY-SA</div>';
	creditsDiv.style.marginRight = "140px";
	
	map.controls[google.maps.ControlPosition.RIGHT_TOP].push(overlayToggleDiv);
	
	map.controls[google.maps.ControlPosition.TOP_RIGHT].push(buEarthDiv);
	map.controls[google.maps.ControlPosition.TOP_RIGHT].push(buHybridDiv);
	map.controls[google.maps.ControlPosition.TOP_RIGHT].push(buTerrDiv);
	
	map.controls[google.maps.ControlPosition.BOTTOM_RIGHT].push(creditsDiv);
	
	ginLogo = document.createElement('DIV');
	ginLogo.title = "GreenInfo Network";
	ginLogo.style.margin = "10px";
	ginLogo.innerHTML = '<a href="http://www.greeninfo.org" target="_blank"><img src="images/logo.jpg" border=0 width=30px height=27px /></a>';
	map.controls[google.maps.ControlPosition.LEFT_BOTTOM].push(ginLogo);
	
	addLayer(lyr_parksterr,0);
	
	//clickable map
	loadingInfoMessage = document.createElement('DIV');
	loadingInfoMessage.style.position = 'absolute';
	loadingInfoMessage.style.zIndex = '99999';
	loadingInfoMessage.innerHTML = '<div style="background-color:white; -moz-opacity: .9; padding: 5px; font-weight:bold; font-size:16px; color: #638c39; font-family:arial; text-align:center; margin-top:150%; z-index:99999"><img src="images/ajaxLoading.gif" border="0"><br>Getting Info...</div>';
	
	// empty overlay for pixel/coordinate calculations
	emptyOverlay = function (map) { this.setMap(map); }  
	emptyOverlay.prototype = new google.maps.OverlayView(); 
	emptyOverlay.prototype.draw = function() {}; 
	emptyOverlay = new emptyOverlay(map);
	
	//setTimeout(function () {alert(emptyOverlay.getProjection())},2000);

	
    infoListener = google.maps.event.addListener(map, "click", function(event) {
        
		if (my_infoOverlay) {
			my_infoOverlay.setMap(null);
			removeOverlay("Camp Outline");
		}
		pt = event.latLng;
        addInfoTipMarker(pt);
		
        /*if (OutlineLayerCamp){
               map.removeOverlay(OutlineLayerCamp);
        }*/
    });
	
	google.maps.event.addListener(map, 'tilesloaded', function() {
		for (i=0;i<map.controls[google.maps.ControlPosition.TOP_CENTER].length;i++) {
				map.controls[google.maps.ControlPosition.TOP_CENTER].removeAt(i);
		}
	});
	
	// keydragzoom listeners
	kd_dialog = document.createElement('div');
	kd_dialog.id = 'kddialog';
	kd_dialog.className = 'kdzoomBox';
	kd_dialog.innerHTML = 'Drag a region on the map (click here to reset)';
	map.getDiv().appendChild(kd_dialog);		
	//position dialog box
	
	
    google.maps.event.addListener(map.getDragZoomObject(), 'activate', function () {
		kd = $('kddialog');
		kd.style.marginTop = $('keyDiv').style.marginTop;
		kd.style.left = $('keyDiv').style.left;
		//alert($('keyDiv').style.marginTop);
		kd.style.display='block';
		map.getDiv().appendChild(kd_dialog);
	
    });
	
	google.maps.event.addDomListener($('kddialog'), 'click', function() {
			$('kddialog').hide();
			map.disableKeyDragZoom();
			map.enableKeyDragZoom(kdzoomOptions);
			google.maps.event.addListener(map.getDragZoomObject(), 'activate', function () {
				kd = $('kddialog');
				kd.style.top = $('keyDiv').style.top;
				kd.style.left = $('keyDiv').style.left;
				kd.style.display='block';
				map.getDiv().appendChild(kd_dialog);
	
			});
	});
	
	
	google.maps.event.addDomListener(map.getDiv(), 'resize', function() {
		//work out required offsets to get Overview map in bottom right corner
		if ($('map').hasClassName('full-view')) {
			if (ge) {
				$('earthbuttons').style.top = $('earthiframe').style.top = "2px";
				
			}
		}
		else {
			if (ge) {
				var pluginRect = getElementRect(document.getElementById('map'));
				$('earthbuttons').style.top = $('earthiframe').style.top = (pluginRect.top + 2) + "px";
				$('earthbuttons').style.left = $('earthiframe').style.left = (pluginRect.left + (pluginRect.width - 331)) + 'px';
			}
		}
	});
	googleEarth = new GoogleEarth(map);
//} // end else mobile
}

function geControls() {
	if (!document.getElementById('earthbuttons')) {
		if (googleEarth.getInstance()) {
			ge = googleEarth.getInstance();
			createNativeHTMLButton2(2, 2, 331, 78); // x, y, width, height
			geLayers();
			clearTimeout(t);
		}
		else {
			t=setTimeout("geControls()",500);
		}
	}
	else {
		var pluginRect = getElementRect(document.getElementById('map'));
		
		document.getElementById('earthbuttons').style.display = 'block';
		document.getElementById('earthiframe').style.display = 'block';
		geLayers();
		
	}
}

function geLayers() {
		
	//connect to parks kml
	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_may2010/3/2/5.kml"); 
	networkLinkParks.setLink(link);
	ge.getFeatures().appendChild(networkLinkParks);
	var checkbox = document.getElementById('parkcbx');
	networkLinkParks.setVisibility(checkbox.checked);
	GESTATE['networkLinkParks'] = checkbox.checked;
	if (checkbox.checked) {
		loadedKML = true;
		document.getElementById('earthparkcbx').checked = true;
	}
	else {
		document.getElementById('earthparkcbx').checked = false;
	}

	//connect to trails kml
	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 checkbox = document.getElementById('trailcbx');
	networkLinkTrails.setVisibility(checkbox.checked);
	GESTATE['networkLinkTrails'] = checkbox.checked;
	if (checkbox.checked) {
		loadedKML = true;
		document.getElementById('earthtrailcbx').checked = true;
	}
	else {
		document.getElementById('earthtrailcbx').checked = false;
	}

	//connect to camps kml	
	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);
	var checkbox = document.getElementById('campcbx');
	networkLinkCamps.setVisibility(checkbox.checked);
	GESTATE['networkLinkCamps'] = checkbox.checked;
	if (checkbox.checked) {
		loadedKML = true;
		document.getElementById('earthcampcbx').checked = true;
	}
	else {
		document.getElementById('earthcampcbx').checked = false;
	}
	
	// add search marker if exists
	if (searchMarker) {	
		if (searchMarker.getMap()) {
			mapMarker2earth(searchMarker,searchWindow);
		}
	}
	
}

//overlay functions
function addLayer(tileList,startPosition,clearReplace,thisMap) {
	if (!thisMap) {
		thisMap = map;
	}
	
	//add multiple tiles at once starting at startPosition
	for (i=startPosition;i<tileList.length;i++) {
		if (thisMap.overlayMapTypes.getAt(i) != null) {
			if (tileList[i].name == map.overlayMapTypes.getAt(i).name) {
				//don't reload if tile did not change position
			}
			else {
				thisMap.overlayMapTypes.setAt(i,tileList[i]);
			}
		}
		else {
			thisMap.overlayMapTypes.setAt(i,tileList[i]);
		}
	}
	if (clearReplace) { //optional variable
		if (clearReplace == "clear") { //clear existing overlays after start position
			for (i=tileList.length;i<map.overlayMapTypes.length;i++) {
				thisMap.overlayMapTypes.setAt(i,null);
			}
		}
		if (clearReplace == "replace") { 
			// nothing yet
		}
	}
	return tileList.length;
}

function clearTileOverlays() {
	for (i=0;i<map.overlayMapTypes.length;i++) {
		map.overlayMapTypes.setAt(i,null);
	}
}

function removeOverlay(tilename) {
	for (i=0;i<map.overlayMapTypes.length;i++) {
		if (map.overlayMapTypes.getAt(i) != null) {
			if (map.overlayMapTypes.getAt(i).name == tilename) {
				var tileIndex = i;
				break;
			}
		}
	}
	if (tileIndex) {
			map.overlayMapTypes.removeAt(tileIndex);
	}
}

// checkbox toggles functions
function toggleParks() {
	if (document.getElementById('parkcbx').checked == true) {
		if (mapState == "terrain") {
			addLayer(lyr_parksterr,0,"clear");
		}
		else { // mapState == "satellite"
			addLayer(lyr_parkssat,0,"clear");
		}
	}
	else { //box unchecked
		if (mapState == "terrain") {
			addLayer(lyr_roadsterr,0,"clear");
		}
		else {
			clearTileOverlays();
			map.overlayMapTypes.setAt(0,googleRoads)
		}
	}
	toggleTrails();
	toggleCampgrounds();
}

function toggleTrails() {
	if (document.getElementById('trailcbx').checked == true) {
		//get number of current non-null overlays and set one higher
		var overlayCount = 0;
		for (i=0;i<map.overlayMapTypes.length;i++) {
			if (map.overlayMapTypes.getAt(i) != null) {
				overlayCount++;
			}
		}
		map.overlayMapTypes.setAt(overlayCount+1,tileTrails);
	}
	else {
		//get trail index and set to null
		for (i=0;i<map.overlayMapTypes.length;i++) {
			if (map.overlayMapTypes.getAt(i) != null) {
				if (map.overlayMapTypes.getAt(i).name == "Trails") {
					var trailIndex = i;
				}
			}
		}
		if (trailIndex) {
			map.overlayMapTypes.removeAt(trailIndex);
		}
	}
}

function toggleCampgrounds() {
	if (document.getElementById('campcbx').checked == true) {
		//get number of current non-null overlays and set one higher
		var overlayCount = 0;
		for (i=0;i<map.overlayMapTypes.length;i++) {
			if (map.overlayMapTypes.getAt(i) != null) {
				overlayCount++;
			}
		}
		map.overlayMapTypes.setAt(overlayCount+1,tileCampgrounds);
	}
	else {
		//get campground index and set to null
		for (i=0;i<map.overlayMapTypes.length;i++) {
			if (map.overlayMapTypes.getAt(i) != null) {
				if (map.overlayMapTypes.getAt(i).name == "Campgrounds") {
					var campIndex = i;
				}
			}
		}
		if (campIndex) {
			map.overlayMapTypes.removeAt(campIndex);
		}
	}
}

//toggle functions for Earth
function toggleParksEarth() {
	networkLinkParks.setVisibility(! networkLinkParks.getVisibility() );
    GESTATE['networkLinkParks'] = networkLinkParks.getVisibility();
}

function toggleTrailsEarth() {
	networkLinkTrails.setVisibility(! networkLinkTrails.getVisibility() );
    GESTATE['networkLinkTrails'] = networkLinkTrails.getVisibility();
}

function toggleCampgroundsEarth() {
	networkLinkCamps.setVisibility(! networkLinkCamps.getVisibility() );
    GESTATE['networkLinkCamps'] = networkLinkCamps.getVisibility();
}

//map controls
function zoomIn_map() {
	map.setZoom(map.getZoom()+1);
}

function zoomOut_map() {
	map.setZoom(map.getZoom()-1);
}

function zoomIN(x,y) {
	var point = new google.maps.LatLng(x,y);
	map.setZoom(map.getZoom()+1);
	map.setCenter(point);
}

function zoomOUT(x,y) {
	var point = new google.maps.LatLng(x,y);
	map.setZoom(map.getZoom()-1);
	map.setCenter(point);
}
function zoomExtent() {
	var latlng = new google.maps.LatLng(37.405074,-120.102539);
	map.setCenter(latlng);
	if (mobile.detect()) {
		map.setZoom(7);
	}
	else {
		map.setZoom(6);
	}
}

// earth controls

function createNativeHTMLButton2(x, y, width, height) {
  // create the button
  var button = document.createElement('div');
  button.id = 'earthbuttons';
  button.style.display = 'block';
  button.style.border = 'none';
  button.style.backgroundColor = 'rgb(102,102,102)';
  
  var linkDiv = document.createElement('div');
  linkDiv.style.border = 'none';
  linkDiv.style.margin = '0';
  
  var mapLink = document.createElement('a');
  mapLink.href = '#';
  mapLink.className = 'noborder';
  mapLink.title = "Turn on terrain layer";
  mapLink.innerHTML = '<img src="images/topoptions/mapoff_osm.png" width="110px" height="38px" style="border-style:none" />';
  
  var satLink = document.createElement('a');
  satLink.href = '#';
  satLink.title = "Turn on hybrid layer";
  satLink.className = 'noborder';
  satLink.innerHTML = '<img src="images/topoptions/satoff_osm.png" width="110px" height="38px" style="border-style:none" />';
  
  var earthLink = document.createElement('a');
  earthLink.href = '#';
  earthLink.title = "Turn on 3D Google Earth view";
  earthLink.className = 'noborder';
  earthLink.innerHTML = '<img src="images/topoptions/earthview.png" width="110px" height="38px" style="border-style:none" />';
  
  var earthToggles = document.createElement('div');
  earthToggles.style.backgroundImage = 'url(images/topoptions/checkboxes.png)';
  earthToggles.style.width = "330px";
  earthToggles.style.height = "34px";
  earthToggles.innerHTML = '<div style="position:relative;top:4px;left:10px;float:left;"><input id="earthparkcbx" type="checkbox" onclick="javascript:toggleParksEarth()" /></div><div style="position:relative;top:4px;left:78px;float:left;"><input id="earthtrailcbx" type="checkbox" onclick="javascript:toggleTrailsEarth()" /></div><div style="position:relative;top:4px;left:158px;"><input id="earthcampcbx" type="checkbox" onclick="javascript:toggleCampgroundsEarth()" /></div>';
  
  linkDiv.appendChild(mapLink);
  linkDiv.appendChild(satLink);
  linkDiv.appendChild(earthLink);
  
  button.appendChild(linkDiv);
  button.appendChild(earthToggles);
  
  // create an IFRAME shim for the button
  var iframeShim = document.createElement('iframe');
  iframeShim.id = 'earthiframe';
  iframeShim.frameBorder = 0;
  iframeShim.scrolling = 'no';
  iframeShim.src = (navigator.userAgent.indexOf('MSIE 6') >= 0) ?
      '' : 'javascript:void(0);';

  // position the button and IFRAME shim
  var pluginRect = getElementRect(document.getElementById('map'));
  
  button.style.position = iframeShim.style.position = 'fixed';
  button.style.left = iframeShim.style.left = (pluginRect.left + (pluginRect.width - 331)) + 'px';
  //button.style.right = iframeShim.style.right = '18px';
  button.style.top = iframeShim.style.top = (pluginRect.top + y) + 'px';
  button.style.width = iframeShim.style.width = width + 'px';
  button.style.height = iframeShim.style.height = height + 'px';
 
  // set up z-orders
  button.style.zIndex = 10;
  iframeShim.style.zIndex = button.style.zIndex - 1;
 
  // set up click handlers
  addDomListener(mapLink, 'click', function(evt) {
    map.setMapTypeId("Terrain");
	mapState = 'terrain';
	document.getElementById('campcbx').checked = GESTATE['networkLinkCamps'];
	document.getElementById('parkcbx').checked = GESTATE['networkLinkParks'];
	document.getElementById('trailcbx').checked = GESTATE['networkLinkTrails'];
	toggleParks();
	document.getElementById('earthbuttons').style.display = 'none';
	document.getElementById('earthiframe').style.display = 'none';
	$('sat-legend').hide();
	$('map-legend').show();
	$('credits').show();
    if (evt.preventDefault) {
      evt.preventDefault();
      evt.stopPropagation();
    }
    return false;
  });
  
  addDomListener(satLink, 'click', function(evt) {
    map.setMapTypeId(google.maps.MapTypeId.SATELLITE);
	mapState = 'satellite';
	document.getElementById('campcbx').checked = GESTATE['networkLinkCamps'];
	document.getElementById('parkcbx').checked = GESTATE['networkLinkParks'];
	document.getElementById('trailcbx').checked = GESTATE['networkLinkTrails'];
	toggleParks();
	document.getElementById('earthbuttons').style.display = 'none';
	document.getElementById('earthiframe').style.display = 'none';
	$('credits').hide();
	
    if (evt.preventDefault) {
      evt.preventDefault();
      evt.stopPropagation();
    }
    return false;
  });
  //var rightColumn = document.getElementById('RightColumn');
  // add the iframe shim and button
  document.body.appendChild(button);
  document.body.appendChild(iframeShim);
}
 
/**
 * Helper function for element.addEventListener/attachEvent
 */
function addDomListener(element, eventName, listener) {
  if (element.addEventListener)
    element.addEventListener(eventName, listener, false);
  else if (element.attachEvent)
    element.attachEvent('on' + eventName, listener);
}

/**
 * Helper function to get the rectangle for the given HTML element.
 */
function getElementRect(element) {
  var left = element.offsetLeft;
  var top = element.offsetTop;
 
  var p = element.offsetParent;
  while (p && p != document.body.parentNode) {
    if (isFinite(p.offsetLeft) && isFinite(p.offsetTop)) {
      left += p.offsetLeft;
      top += p.offsetTop;
    }
   
    p = p.offsetParent;
  }
 
  return { left: left, top: top,
           width: element.offsetWidth, height: element.offsetHeight };
}

//search functions
function mapSearch() {
	
	document.getElementById("introtext").style.display="None";
    document.getElementById("queryres").style.display="Block";
    document.getElementById("queryres").innerHTML='<div style="padding:20px"><img src="images/ajaxLoading.gif" border="0"></div>';
	
    // get the selected FindWhat radio button
    var radFindWhatGrp = document.forms[0].radFindWhat;

    for( var i=0; i< radFindWhatGrp.length; i++ )
    {
        if ( radFindWhatGrp[i].checked )
        {
            szFindWhat = radFindWhatGrp[i].value;
        }
    }

    // get selected FindBy radio button
    var radFindByGrp = document.forms[0].radFindBy;
    var szFindBy = '';
    for( var i=0; i< radFindByGrp.length; i++ )
    {
        if ( radFindByGrp[i].checked )
        {
            szFindBy = radFindByGrp[i].value;
            break;
        }
    }
	
	// determine which field and values to use
    var szField = '';
    var szValue = '';
   
    switch ( szFindBy )
    {
        case 'zip_code_query':  
            szField = 'zip';
            szValue = document.forms[0].txtZipCode.value;
            break;
        case 'city_query':
            szField = 'name';
            szValue = document.forms[0].selCity.value;
            break;
        case 'park_query':
            szField = 'unit_name';
            szValue = document.forms[0].txtparksquery.value;
            break;
        case 'address_query':
            szValue = document.forms[0].geoDist.value;
            break;
        case 'agency_query': 
                  if (szFindWhat == "campgrounds")
                     {    
                            szField = 'ORG';
							var selectBox = document.forms[0].agencyName;
                            szValue = selectBox.options[selectBox.selectedIndex].value
			                            
                     }	
                  if (szFindWhat == "statewide_osdb")
                     {
				    if (document.forms[0].agencyName.value == "--- Show All ---")
                            {           
                  			szValue = document.forms[0].agencyType.value;
					if (szValue == "City") 
					{
						szValue = "4"
					} 
					else if (szValue == "County")
					{
						szValue = "3"
					} 
					else if (szValue == "Federal")
					{
						szValue = "1"
					}
					else if (szValue == "Non Profit")
					{
						szValue = "6"
					} 
					else if (szValue == "State")
					{
						szValue = "2"
					} 
					else if (szValue == "Special District")
					{
						szValue = "5"
					} 
                  			szField = 'type_of_ow';
					
                            }
            		    if (document.forms[0].agencyName.value != "--- Show All ---")
                            {
                  			szValue = document.forms[0].agencyName.value;
                 				szField = 'agency_nam';
            		    }
                     }	

            break;

    }

    // check for a blank value
    if ( szValue == '' )
    {
        alert( 'Please supply a search value.'  );
        return true;
    }
	
    //turn on searched layer if not already on 
	if (!mobile.detect()) {
	if (szFindWhat == 'statewide_osdb') { //parks
		if (mapState == 'earth') {
			if (document.getElementById('earthparkcbx').checked == false) {
				document.getElementById('earthparkcbx').checked = true;
				networkLinkParks.setVisibility(true);
				GESTATE['networkLinkParks'] = true;
			}
		}
		else {
			if (document.getElementById('parkcbx').checked == false) {
				document.getElementById('parkcbx').checked = true;
				toggleParks();
			}
		}
	}
	if (szFindWhat == 'campgrounds09') {
		if (mapState == 'earth') {
			if (document.getElementById('earthcampcbx').checked == false) {
				document.getElementById('earthcampcbx').checked = true;
				networkLinkCamps.setVisibility(true);
				GESTATE['networkLinkCamps'] = true;
			}
		}
		else {
			if (document.getElementById('campcbx').checked == false) {
				document.getElementById('campcbx').checked = true;
				toggleCampgrounds();
			}
		}
	}
	if (szFindWhat == 'osmtrails') {
		if (mapState == 'earth') {
			if (document.getElementById('earthtrailcbx').checked == false) {
				document.getElementById('earthtrailcbx').checked = true;
				networkLinkTrails.setVisibility(true);
				GESTATE['networkLinkTrails'] = true;
			}
		}
		else {
			if (document.getElementById('trailcbx').checked == false) {
				document.getElementById('trailcbx').checked = true;
				toggleTrails();
			}
		}
	}
	}
	//php page location
	var txtResultsPage = 'widgets/Search/SearchResults_rg.php';
	
	if (szFindBy != 'address_query') { 
		//build URL for php
		txtResultsURL = txtResultsPage + '?result_geom=' + szFindWhat + '&bound_geom=' + szFindBy + '&bound_field=' + szField + '&bound_value=' + szValue;
		
		//build response table and zoom to results extent
		jQuery.ajax({
			url: txtResultsURL,
			dataType: 'json', 
			success: function(data) {
				//check for no results
				if (data.noResults) {
					var noResultMessage = '<div style="padding:2%">'
					noResultMessage += '<h2 class="bigtitle">Sorry...</h2>';
					noResultMessage += '<p class="big">We did not find any results for your choice - either there are no features in this area, or you have chosen a place that we have not yet updated and/or added to the site.<br /><br />If you are searching for campgrounds or trails, search near an address for best results. <br /><br />Please enter another search or select a different area on the map.</p>';
					noResultMessage += '</div>';
					document.getElementById('queryres').innerHTML = noResultMessage;
				}				
			
				else { //there are results
					// ajax response - resultBounds and list of results, each result having attributes assigned by php
					var sourceAddress = null;
					if (!data.results.saddr) {
						if (szFindBy != 'park_query') {
							sourceAddress = szValue;
						}
					}
					
					//clear any markers and windows from previous address searches
					if(searchMarker) {
						searchMarker.setMap(null);
					}
					
					if (mapState == 'earth') {
						// remove any old search placemarks
						if (searchPlacemark) {
							ge.setBalloon(null);
							ge.getFeatures().removeChild(searchPlacemark);
						}
					}
					
					if (sourceAddress) {
						if (szFindBy == 'zip_code_query') {
							geocoder.geocode({'address':sourceAddress}, function(results, status) {
								if (status == google.maps.GeocoderStatus.OK) {
									if (results[0]) {
										point = results[0].geometry.location;
										var lat = point.lat();
										var lon = point.lng();
										searchMarker = new google.maps.Marker({
											position: point,
											map: map,
											title: sourceAddress
										});
					
										searchWindow = new google.maps.InfoWindow({
										content: results[0].formatted_address,
										maxWidth: 50
										});
										google.maps.event.addListener(searchMarker,'click',function() {
											searchWindow.open(map,searchMarker);
										});
										if (mapState == 'earth') {
											mapMarker2earth(searchMarker,searchWindow);
										}
									}
								}
							});
						}
					}
					
					//zoom map to extent of results
					var results_sw = new google.maps.LatLng(data.resultBounds.sw.y,data.resultBounds.sw.x);
					var results_ne = new google.maps.LatLng(data.resultBounds.ne.y,data.resultBounds.ne.x);
					var resultBounds = new google.maps.LatLngBounds(results_sw,results_ne);
					map.fitBounds(resultBounds);
					
					if (mapState == 'earth') {
						var resultCenter = resultBounds.getCenter();
						var resultZoom = map.getZoom() - 1;
						zoomEarth(resultCenter,resultZoom);
					}
					
					
					//build table for results div
					var resultTable = buildTable(data.results,sourceAddress);
					document.getElementById('queryres').innerHTML = resultTable;
				}
			} 		
		});
		// 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;
	}
	else { //szFindBy == 'address_query'
		//geocode address
		var address = document.getElementById("addressquery").value;
		geocoder.geocode({'address':address}, function(results, status) {
			if (status == google.maps.GeocoderStatus.OK) {
				if (results[0]) {
					point = results[0].geometry.location;
					var lat = point.lat();
					var lon = point.lng();
					
					//build URL for php
					var txtResultsURL = txtResultsPage + '?result_geom=' + szFindWhat + '&bound_geom=' + szFindBy + '&bound_field=' + szField + '&bound_value=' + szValue + '&lat=' + lat + '&lon=' + lon +'&saddr=' + address;
					
					//build response table and zoom to results extent
					jQuery.ajax({
						url: txtResultsURL,
						dataType: 'json', 
						success: function(data) {
							//check for no results
							if (data.noResults) {
								var noResultMessage = '<div style="padding:2%">'
								noResultMessage += '<h2 class="bigtitle">Sorry...</h2>';
								noResultMessage += '<p class="big">We did not find any results for your choice - either there are no features in this area, or you have chosen a place that we have not yet updated and/or added to the site.<br /><br />If you are searching for campgrounds or trails, search near an address for best results. <br /><br />Please enter another search or select a different area on the map.</p>';
								noResultMessage += '</div>';
								document.getElementById('queryres').innerHTML = noResultMessage;
				
								/*map.setCenter(point);
								if (map.getZoom()<12) {
									map.setZoom(12);
								}	*/			
				
							}
							else { //there are results
								// ajax response - resultBounds and list of results, each result having attributes assigned by php
								
								// clear any markers from previous searches and place new marker at search address
								if (searchMarker) {
									searchMarker.setMap(null);
									searchMarker = null;
								}
								searchMarker = new google.maps.Marker({
									position: point,
									map: map,
									title: address
								});
					
								searchWindow = new google.maps.InfoWindow({
									content: results[0].formatted_address,
									maxWidth: 50
								});
								google.maps.event.addListener(searchMarker,'click',function() {
									searchWindow.open(map,searchMarker);
								});
					
								//google.maps.event.trigger(searchMarker,'click');
					
								// if google earth search
								if (mapState == 'earth') {
									// remove any old search placemarks
									if (searchPlacemark) {
										ge.setBalloon(null);
										ge.getFeatures().removeChild(searchPlacemark);
									}
									mapMarker2earth(searchMarker,searchWindow);
						
								}
								
								//zoom map to extent of results
								var results_sw = new google.maps.LatLng(data.resultBounds.sw.y,data.resultBounds.sw.x);
								var results_ne = new google.maps.LatLng(data.resultBounds.ne.y,data.resultBounds.ne.x);
								var resultBounds = new google.maps.LatLngBounds(results_sw,results_ne);
								map.fitBounds(resultBounds);
								if (mapState == 'earth') {
									var resultCenter = resultBounds.getCenter();
									var resultZoom = map.getZoom() - 1;
									zoomEarth(resultCenter,resultZoom);
								}
								//build table for results div
								var resultTable = buildTable(data.results);
								document.getElementById('queryres').innerHTML = resultTable;
							}
						} 		
					});
				}
				// 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;
			}
			else { //status not ok
				var noResultMessage = '<div style="padding:2%">'
				noResultMessage += '<h2 class="bigtitle">Sorry...</h2>';
				noResultMessage += '<p class="big">The Google geocoder was unable to locate the address you entered.  Please enter another search or select a different area on the map.<br /><br />Geocoder failed due to: ' + status + '</p>';
				noResultMessage += '</div>';
				document.getElementById('queryres').innerHTML = noResultMessage;
				
			}
		});
		
	}
	
}

//build table for results div
function buildTable(resultList,saddr) {
	
	var resultTable = '<table style="width:100%;padding:2%;">';
	if (szFindWhat == 'statewide_osdb') { //parks
		for (i in resultList) {
			var result = resultList[i];
			
			if (!result.saddr) {
				if (saddr) {
					result.saddr = saddr;
				}
			}
			if (result.access == "Restricted Access") {
				var access = "<span class='restricted'>Restricted Access - Permit Required</span>";
			}
			else {
				var access = result.access;
			}
			
			resultTable += '<tr><td><span class="park_name">' + result.name + '</span> | <a style="color:#6A6A6A;text-decoration:none" href=' + "'javascript:void(" + '"zoom to park"' + ")'" + 'onclick="zoomFeature(' + result.bounds.sw.y + ',' + result.bounds.sw.x + ',' + result.bounds.ne.y + ',' + result.bounds.ne.x + ');">' + 'Zoom to &#187</a></td></tr>';
									
			resultTable += '<tr><td>' + access + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + result.acres + '</td></tr>';
									
			resultTable += '<tr><td>Owner: ' + '<a target="_blank" href="' + result.agency_link + '">' + result.owner + '</a></td></tr>';
									
			if (result.park_link) {
				resultTable += '<tr><td>Website: <a target="_blank" href="' + result.park_link + '">Go to park website</a></td></tr>';
			}
			resultTable += '<tr><td>ID: ' + result.id + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;County: ' + result.county + '</td></tr>';
								
			resultTable += '<tr><td class="transitlink"><a href="http://maps.google.com/maps?';
			
			if (result.saddr) {
				resultTable += 'saddr=' + result.saddr + '&daddr=';
			}
			else {
				resultTable += 'daddr=';
			}
			
			/*resultTable += result.center.x + ',' + result.center.y + '(' + result.name + ')" target="_blank">Driving/Transit Directions</a> | <a href="http://www.parkinfo.org/bing.html?lat=' +  result.center.x + '&lon=' + result.center.y + '" target="_blank">Bird' + "'" + 's Eye View (Bing)</a>' + '</td></tr>';*/
			
			resultTable += result.center.x + ',' + result.center.y + '" target="_blank">Driving/Transit Directions</a> | <a href="http://www.parkinfo.org/bing.html?lat=' +  result.center.x + '&lon=' + result.center.y + '" target="_blank">Bird' + "'" + 's Eye View (Bing)</a>' + '</td></tr>';
									
			resultTable += '<tr><td><img width="285" src="../../images/divider.gif"></td></tr>';
		}
	}
	else if (szFindWhat == 'campgrounds09') {
		for (i in resultList) {
			var result = resultList[i];
			
			if (!result.saddr) {
				if (saddr) {
					result.saddr = saddr;
				}
			}
			
			resultTable += '<tr><td><span class="park_name">Campsite: ' + result.name + '</span> | <a style="color:#6A6A6A;text-decoration:none" href=' + "'javascript:void(" + '"zoom to campground"' + ")'" + 'onclick="zoomPoint(' + result.center.x + ',' + result.center.y + ')">' + 'Zoom to &#187</a></td></tr>';
								
			resultTable += '<tr><td><strong>Park name: </strong>' + result.park_name + '</td></tr>';
										
			if (result.capacity) {
				resultTable += '<tr><td>Capacity: ' + result.capacity + '</td></tr>';
			}
										
			resultTable += '<tr><td>Go to: <a target="_blank" href="' + result.agency_link + '">' + result.agency_link.replace('http://','') + '</a></td></tr>';
										
			resultTable += '<tr><td>County: ' + result.county + '</td></tr>';
			resultTable += '<tr><td>ID: ' + result.id + '</td></tr>';
										
			resultTable += '<tr><td class="transitlink"><a href="http://maps.google.com/maps?saddr=' + result.saddr + '&daddr=' + result.center.x + ',' + result.center.y + '(' + result.name + ')" target="_blank">Driving/Transit Directions</a> | <a href="http://www.parkinfo.org/bing.html?lat=' +  result.center.x + '&lon=' + result.center.y + '" target="_blank">Bird' + "'" + 's Eye View (Bing)</a>' + '</td></tr>';
										
			resultTable += '<tr><td><img width="285" src="../../images/divider.gif"></td></tr>';
		}
	}
	else if (szFindWhat == 'osmtrails') {
		resultTable += '<tr><td><em>Trails data comes from <a href="http://www.openstreetmap.org" target="_blank">www.openstreetmap.org</a>. Some data may be incomplete (ie, missing trail name).</em><br /><br /></td></tr>';
		for (i in resultList) {
			var result = resultList[i];
			
			if (result.name == 'Bay Area Ridge Trail') {
				resultTable += '<tr><td><span class="park_name">' + result.name + '</span> <img src="images/leg_ridgetrail.png" alt="Ridge Trail Legend" /> | <a style="color:#6A6A6A;text-decoration:none" href=' + "'javascript:void(" + '"zoom to trail"' + ")'" + 'onclick="zoomFeature(' + result.bounds.sw.y + ',' + result.bounds.sw.x + ',' + result.bounds.ne.y + ',' + result.bounds.ne.x + ');">' + 'Zoom to &#187</a></td></tr>';
				resultTable += '<tr><td>Go to: <a href="http://www.ridgetrail.org" target="_blank">www.ridgetrail.org</a>';
			}
			else if (result.name == 'San Francisco Bay Trail') {
				resultTable += '<tr><td><span class="park_name">' + result.name + '</span> <img src="images/leg_baytrail.png" alt="Bay Trail Legend" /> | <a style="color:#6A6A6A;text-decoration:none" href=' + "'javascript:void(" + '"zoom to trail"' + ")'" + 'onclick="zoomFeature(' + result.bounds.sw.y + ',' + result.bounds.sw.x + ',' + result.bounds.ne.y + ',' + result.bounds.ne.x + ');">' + 'Zoom to &#187</a></td></tr>';
				resultTable += '<tr><td>Go to: <a href="http://www.abag.org/bayarea/baytrail" target="_blank">www.abag.org/bayarea/baytrail</a>';
			}
			else {
				resultTable += '<tr><td>OpenStreetMap Trails: <span class="park_name">' + result.name + '</span> | <a style="color:#6A6A6A;text-decoration:none" href=' + "'javascript:void(" + '"zoom to trail"' + ")'" + 'onclick="zoomFeature(' + result.bounds.sw.y + ',' + result.bounds.sw.x + ',' + result.bounds.ne.y + ',' + result.bounds.ne.x + ');">' + 'Zoom to &#187</a></td></tr>';
			}
			resultTable += '<tr><td><img width="285" src="../../images/divider.gif"></td></tr>';
		}
	}	
	resultTable += '</table>';
	return resultTable;
}

function zoomFeature(sw_y,sw_x,ne_y,ne_x) {
	var bounds_sw = new google.maps.LatLng(sw_y,sw_x);
	var bounds_ne = new google.maps.LatLng(ne_y,ne_x);
	var bounds = new google.maps.LatLngBounds(bounds_sw,bounds_ne);
	map.fitBounds(bounds);
	if (mapState == 'earth') {
		var center = bounds.getCenter();
		var zoom = map.getZoom() - 1;
		zoomEarth(center,zoom);
	}
}

function zoomEarth(center,zoom) {
	ge.setBalloon(null);
	var lookAt = ge.createLookAt('');
	lookAt.setLatitude( center.lat() );
	lookAt.setLongitude( center.lng() );
	lookAt.setRange( Math.pow(2.0,25.0-zoom)-Math.pow(2.0,21.4-zoom) );
	ge.getView().setAbstractView(lookAt);
}

function zoomPoint (y,x) {
	var center = new google.maps.LatLng(y,x);
	map.setCenter(center);
	if (map.getZoom()<14) {
		map.setZoom(14);
	}
	if (mapState == 'earth') {
		zoomEarth(center,13);
	}
}

function printList() {
	printListURL = document.forms[0].printListURL.value;
	//URL = "http://www.parkinfo.org/robg/widgets/Printlist.php" + printListURL;
	URL = "widgets/Printlist.php" + printListURL;
	window.open(URL,'List'); 
}

function submitenter(myfield,e) {
var keycode;
var safari = navigator.userAgent.indexOf('Safari')>0;
if (window.event) keycode = window.event.keyCode;
else if (safari && keyCode==3) keycode = 13;
else if (e) keycode = e.which;
else return true;

if (keycode == 13)
   {
   mapSearch();
   return false;
   }
else
   return true;
}

//form functions
function CampForm() {
	var parksDiv = document.getElementById("parks");
	parksDiv.style.display='none'; 
	var parksLab = document.getElementById("parks_label");
	parksLab.style.display='none';
}

function ParksForm() {
	var parksDiv = document.getElementById("parks");
	parksDiv.style.display='block'; 
	var parksLab = document.getElementById("parks_label");
	parksLab.style.display='block';
}

function TrailsForm() {
	var parksDiv = document.getElementById("parks");
	parksDiv.style.display='none'; 
	var parksLab = document.getElementById("parks_label");
	parksLab.style.display='none';
}

function clearValue () 
{
document.forms[0].txtZipCode.value ="";
document.forms[0].txtZipCode.style.fontStyle = "normal";
if (document.forms[0].selCity.value == "Type in city or place here") {
document.forms[0].selCity.value ="";
}
document.forms[0].selCity.style.fontStyle = "normal";
document.forms[0].geoquery.style.fontStyle = "normal";
document.forms[0].geoquery.value ="";
document.forms[0].txtparksquery.value ="";
document.forms[0].txtparksquery.style.fontStyle = "normal";
}
   
function ZipForm()
{
document.forms[0].txtZipCode.value ="Type in zip code here";
document.forms[0].txtZipCode.style.fontStyle = "italic";
document.forms[0].txtZipCode.style.display="block";
document.forms[0].selCity.style.display="none";
document.forms[0].geoquery.style.display="none";
document.forms[0].geoDist.style.display="none"; 
document.forms[0].agencyType.style.display="none";
document.forms[0].agencyName.style.display="none";
document.forms[0].txtparksquery.style.display="none";
}

function CityForm()
{
document.forms[0].selCity.style.display="block";
document.forms[0].selCity.value ="Type in city or place here";
document.forms[0].selCity.style.fontStyle = "italic";
document.forms[0].txtZipCode.style.display="none";
document.forms[0].geoquery.style.display="none";
document.forms[0].geoDist.style.display="none"; 
document.forms[0].agencyType.style.display="none";
document.forms[0].agencyName.style.display="none";
document.forms[0].txtparksquery.style.display="none";
}

function AddressForm()
{
document.forms[0].geoquery.style.display="block";
document.forms[0].geoDist.style.display="block";  
document.forms[0].geoquery.value ="Type your address, then select a distance";
document.forms[0].geoquery.style.fontStyle = "italic";
document.forms[0].selCity.style.display="none";
document.forms[0].txtZipCode.style.display="none";
document.forms[0].agencyType.style.display="none";
document.forms[0].agencyName.style.display="none";
document.forms[0].txtparksquery.style.display="none";
}
function AgencyForm()
{
document.forms[0].agencyType.options[0].selected = true;
document.forms[0].agencyName.options[0].selected = true;
document.forms[0].agencyType.style.display="block";
document.forms[0].agencyName.style.display="block";
document.forms[0].geoquery.style.display="none";
document.forms[0].geoDist.style.display="none"; 
document.forms[0].selCity.style.display="none";
document.forms[0].txtZipCode.style.display="none";
document.forms[0].txtparksquery.style.display="none";
}

function ParkNameForm()
{
document.forms[0].selCity.style.display="none";
document.forms[0].txtparksquery.style.display="block";
document.forms[0].txtparksquery.value ="Type park name here";
document.forms[0].txtparksquery.style.fontStyle = "italic";
document.forms[0].txtZipCode.style.display="none";
document.forms[0].geoquery.style.display="none";
document.forms[0].geoDist.style.display="none"; 
document.forms[0].agencyType.style.display="none";
document.forms[0].agencyName.style.display="none";

}

function mapMarker2earth(mapMarker,mapInfoWindow) {
	var mapPoint = mapMarker.getPosition();
	var title = mapMarker.getTitle();
	var content = mapInfoWindow.getContent();
	var earthPoint = ge.createPoint('');
	earthPoint.setLatitude(mapPoint.lat());
	earthPoint.setLongitude(mapPoint.lng());
	searchPlacemark = ge.createPlacemark('');
	//placemark.setName(title);
	searchPlacemark.setGeometry(earthPoint);
	searchPlacemark.setDescription(content);
	var icon = ge.createIcon('');
	icon.setHref('http://maps.google.com/mapfiles/kml/paddle/red-circle.png');
	var style = ge.createStyle(''); 
	style.getIconStyle().setIcon(icon); 
	searchPlacemark.setStyleSelector(style); 
	ge.getFeatures().appendChild(searchPlacemark);
}

// for infowindows
function change_tab(element, type){
	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 infoOverlay(point,map) {
	this.point_ = point;
	this.map_ = map;
	this.div_ = null;
	this.setMap(map);
}

infoOverlay.prototype = new google.maps.OverlayView();

infoOverlay.prototype.onAdd = function() {
	var my_window = constructPopup();
	google.maps.event.addDomListener(my_window,'click',cancelEvent);
	google.maps.event.addDomListener(my_window,'dblclick',cancelEvent);
	this.div_ = my_window;
	var panes = this.getPanes();
	panes.floatPane.appendChild(my_window);
}	

infoOverlay.prototype.draw = function() {
	var overlayProjection = this.getProjection();
	var point = overlayProjection.fromLatLngToDivPixel(this.point_);	
	var div = this.div_;
	div.style.left = (point.x - 215) + 'px';
	div.style.top = (point.y - 260) + 'px';
}

infoOverlay.prototype.onRemove = function() {
	this.div_.parentNode.removeChild(this.div_);
	this.div_ = null;
	
}

function constructPopup(){
    jQuery.noConflict();
    if (!document.getElementById('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 = "267px";
        new_obj.innerHTML = document.getElementById('overlay_temp').innerHTML;
        new_obj.getElementsByTagName('div')[0].id = 'overlay_tab';
        new_obj.id = 'overlay';
        document.body.appendChild(new_obj);
    }

    my_window = document.getElementById('overlay');

    //alert(my_window.innerHTML);
    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 = document.getElementById('overlay_tab');
		my_tab.style.display = 'none';
       my_tab.innerHTML = html1;
       if (html1!="" && html3=="") {
			removeOverlay("Camp Outline");
            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;
    }
    
    for (i=0;i<map.controls[google.maps.ControlPosition.TOP_CENTER].length;i++) {
		map.controls[google.maps.ControlPosition.TOP_CENTER].removeAt(i);
	}
    my_window.style.display = 'block';
	my_tab.style.display = "block";
	return my_window;
}

function addInfoTipMarker(point){
   	p = [point.lat(),point.lng()];
	
	// 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 = (point.lng() - w) * width/span_ew;
	var y = (n - point.lat()) * 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.controls[google.maps.ControlPosition.TOP_CENTER].push(loadingInfoMessage);

	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_camps.readyState == 4 && xmlHttp.readyState == 4) {
        if (html1 !="" | html2 !="" | html3!="") { 
			my_infoOverlay = new infoOverlay(pt, map);
        } else {
			for (i=0;i<map.controls[google.maps.ControlPosition.TOP_CENTER].length;i++) {
				map.controls[google.maps.ControlPosition.TOP_CENTER].removeAt(i);
			}
            //map.removeControl(loadingInfoMessage);
        }
    } else {
		t=setTimeout("timedCount()",500);
    }

}

function close_window(){
	my_infoOverlay.setMap(null);
	removeOverlay("Camp Outline");
	return false;
}

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;           
}

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");
			var aReplaceAccess2 = aReplaceAccess.replace("Restricted Access", "<span class='restricted'>Restricted Access - Permit Required</span>");
            html1 = "";
            html1 += '<div class="fixedheight">';
		    html1 += aReplaceAccess2;
		    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>"));
			//removeOverlay("Camp Outline");
            //show_outline(id,"parks");
			//alert(html1);
  		} 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>"));
			//removeOverlay("Camp Outline");
            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 cancelEvent(e) {
	e.cancelBubble = true;
	if (e.stopPropogation) e.stopPropogation();
}

loadPopupMobile = 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");
			var aReplaceAccess2 = aReplaceAccess.replace("Restricted Access", "<span class='restricted'>Restricted Access - Permit Required</span>");
            html1 = "";
            html1 += '<div style="height:190px">';
		    html1 += aReplaceAccess2;
		    html1 += '</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>"));
			for (i=0;i<map.controls[google.maps.ControlPosition.TOP_CENTER].length;i++) {
				map.controls[google.maps.ControlPosition.TOP_CENTER].removeAt(i);
			}			
			my_infoOverlay = new google.maps.InfoWindow({
				content: html1,
				position: pt
			});
			my_infoOverlay.open(map);			
  		} else {
                 html1 = "";
				for (i=0;i<map.controls[google.maps.ControlPosition.TOP_CENTER].length;i++) {
					map.controls[google.maps.ControlPosition.TOP_CENTER].removeAt(i);
				}
        }
 	} else if (this.readyState == 4 && this.status != 200) {
  		// fetched the wrong page or network error...
  		alert ("error getting information");
 	}   
}

function addInfoTipMarkerMobile(point){
   	p = [point.lat(),point.lng()];
	
	// 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 = (point.lng() - w) * width/span_ew;
	var y = (n - point.lat()) * height/span_ns;

	var URL = GetURL(x, y, w, s, e, n, width, height);
    html1="";

	map.controls[google.maps.ControlPosition.TOP_CENTER].push(loadingInfoMessage);

	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;
      }
    }
	}

    xmlHttp.onreadystatechange = loadPopupMobile;
    xmlHttp.open("GET", URL);
    xmlHttp.send(null);

	//timedCount();
}
