//<![CDATA[
	
	    function load() {
	      if (GBrowserIsCompatible()) {
	      	 var geocoder;
			 var map;
			 var curmarkerarray = [];
			 var curzoomlevel;
			
			 
			 var map = new GMap2(document.getElementById("map"));
		      
		        //show zoom and pan controls
		        map.addControl(new GLargeMapControl());
		        map.addControl(new GOverviewMapControl());
		        map.addControl(new GMapTypeControl());
		        map.enableDoubleClickZoom();
		      
		       //load the markers when the map is ready
		       GEvent.addListener(map, "load", function() {
					       	
		       	
		       		set_loading_results_window();
		       		checkBounds();
		      		
		       		if (typeof singlepoint_lat == "undefined") {
		       			var singlepoint = 0;
		       			download_and_display_points(false, false);
		       		}
		       		else {
		       		
		       			show_single_point(singlepoint_lat, singlepoint_lng, singlepoint_infowindow);
		       		}
		       		
		      		
		      		
		      		
		      		var curzoomlevel = map.getZoom();
		      		var lastCenter = map.getCenter();
		      		$("#lastLat").val(lastCenter.lat());
		      		$("#lastLng").val(lastCenter.lng());
		      		
		      		
		      		
			      	if (singlepoint == 0) {
			      		GEvent.addListener(map, "moveend", function(last_center) {
							  var center = map.getCenter();
							  document.getElementById("message").innerHTML = center.toString();
							  
							  //first, make sure the map is within PA
							  if (checkBounds()) {
							  	  //now, has the lng and lat changed enough to necessitate a reload of data?
							  	  var lastLat = $("#lastLat").val();
							  	  var lastLng = $("#lastLng").val();
							  	  
							  	  //calculate the difference in lat or lng that makes a data change necessary
							  	  switch(map.getZoom()) {
							  	  	case 12:
							  	  		var diffchange = .2;
							  	  		break;
							  	  	case 13:
							  	  		var diffchange = .045;
							  	  		break;
							  	  	case 14:
							  	  		var diffchange = .03;
							  	  		break;
							  	  	case 11:
							  	  		var diffchange = .1875;
							  	  		break;
							  	  	case 10:
							  	  		var diffchange = .375;
							  	  		break;
							  	  	case 9:
							  	  		var diffchange = .5;
							  	  		break;
							  	  	case 8:
							  	  		var diffchange = 1.5;
							  	  		break;
							  	  	case 7:
							  	  		var diffchange = 3;
							  	  		break;
							  	  	default:
							  	  		var diffchange = .075;
							  	  		break;
							  	  }
							  	  
							  	 //alert("latdiff=" + Math.abs(lastLat - center.lat()) + " lngdiff=" + Math.abs(lastLng - center.lng()));
							  	 var do_not_reload_map = Number($("#do_not_reload_map").html());
							  	 //alert(do_not_reload_map);
							  	  
							  	  if (do_not_reload_map == 0 && (Math.abs(lastLat - center.lat()) > diffchange || Math.abs(lastLng - center.lng()) > diffchange)) {
							  	  	
							  	  	//reset the old lat and lng so we will know when to reset the data
							  	  	$("#lastLat").val(center.lat());
			      			  		$("#lastLng").val(center.lng());
							  	  	set_loading_results_window();
							  	  
								  	//override_points_url = false;
								  
								  	download_and_display_points(center.lat(),center.lng());
							  	  }
								  
							  	  $("#do_not_reload_map").html("0");
								  
							  }
						  });
						  
						  GEvent.addListener(map, "zoomend", function() {
							  var center = map.getCenter();
							  document.getElementById("message").innerHTML = center.toString();
							  set_loading_results_window();
							  
							  //alert('hey');
							  
							  if (checkBounds()) {
							  	  $("#lastLat").val(center.lat());
			      			  	  $("#lastLng").val(center.lng());
							  	  //alert(map.getZoom());	
								  
								  //alert(gmap_points_url);
								  
								  //if (!location) var location = false;
								  //override_points_url = false;
								  
								  download_and_display_points(center.lat(),center.lng());
								  
								  
							  }
						  });
			      	}
		       });
		      
		      
			  
			  // ====== 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 7;}
		        mt[i].getMaximumResolution = function() {return 14;}
		      }
		      
		      // The allowed region which the whole map must be within
		      var allowedBounds = new GLatLngBounds(new GLatLng(39.6,-80.4), new GLatLng(42.9,-73.9));
		      
		      
		    
		      
		
		      // Retrieve location information, pass it to addToMap()
		      //geocoder.getLocations(address, addToMap);
		      
		      // Retrieve the latitude and longitude
		      /*point = new GLatLng(<?php echo $lat; ?>,
		                         <?php echo $lng; ?>);*/
		       point = new GLatLng(lat,lng);
		
		      // Center the map on this point
		      map.setCenter(point, defaultZoomLevel);
	         
	         
	         
	         
	
	
	      }
	      
	       function createMarker(point, name, address, infowindow, thisicon) {
	       	  
			  var marker = new GMarker(point,thisicon);
			  var html = "";
			  if (address == "") html = html + "<b>" + name + "</b> <br/>" + address + " <br/>";
			  html = html + infowindow + "<br style='clear:both'/>";
			  if (infowindow != "") {
				  GEvent.addListener(marker, 'click', function() {
				    marker.openInfoWindowHtml(html);
				  });
			  }
			  return marker;
			}
			
			function createIcons() {
			  //create the icon
	       	  var farmIcon = new GIcon();
		      farmIcon.image = "http://www.buylocalpa.org/images/static/googleicons/farms.png";
		      //farmIcon.shadow = "http://www.buylocalpa.org/images/static/googleicons/farms.png";
		      farmIcon.iconSize = new GSize(60, 51);
		      //farmIcon.shadowSize = new GSize(36, 34);
		      farmIcon.iconAnchor = new GPoint(5, 34);
		      farmIcon.infoWindowAnchor = new GPoint(5, 2);
		      //farmIcon.infoShadowAnchor = new GPoint(14, 25);
		      //farmIcon.transparent = "http://www.buylocalpa.org/images/static/googleicons/farms.png";
		      //farmIcon.printImage = "http://www.buylocalpa.org/images/static/googleicons/farms.png";
		      //farmIcon.mozPrintImage = "http://www.buylocalpa.org/images/static/googleicons/farms.png";
		      
		      var eventIcon              = new GIcon();
		      eventIcon.image            = "http://www.buylocalpa.org/images/static/googleicons/events.png";
		      eventIcon.iconSize         = new GSize(64, 51);
		      eventIcon.iconAnchor       = new GPoint(5, 34);
		      eventIcon.infoWindowAnchor = new GPoint(5, 34);
		      
		      var otherIcon              = new GIcon();
		      otherIcon.image            = "http://www.buylocalpa.org/images/static/googleicons/general.png";
		      otherIcon.iconSize         = new GSize(52, 48);
		      otherIcon.iconAnchor       = new GPoint(5, 34);
		      otherIcon.infoWindowAnchor = new GPoint(5, 2);
		      
		      var restaurantIcon 			  = new GIcon();
		      restaurantIcon.image 			  = "http://www.buylocalpa.org/images/static/googleicons/restaurants.png";
		      restaurantIcon.iconSize 		  = new GSize(60, 49);
		      restaurantIcon.iconAnchor       = new GPoint(5, 34);
		      restaurantIcon.infoWindowAnchor = new GPoint(5, 2);
		      
		      var storeIcon 			  = new GIcon();
		      storeIcon.image 			  = "http://www.buylocalpa.org/images/static/googleicons/store.png";
		      storeIcon.iconSize 		  = new GSize(57, 52);
		      storeIcon.iconAnchor        = new GPoint(5, 34);
		      storeIcon.infoWindowAnchor  = new GPoint(5, 2);
		      
		      var wineryIcon 			   = new GIcon();
		      wineryIcon.image 			   = "http://www.goodfoodneighborhood.com/images/static/googleicons/wineries.png";
		      wineryIcon.iconSize 		   = new GSize(52, 50);
		      wineryIcon.iconAnchor        = new GPoint(5, 34);
		      wineryIcon.infoWindowAnchor  = new GPoint(5, 2);
		      
		      var wineryIcon 			   = new GIcon();
		      wineryIcon.image 			   = "http://www.buylocalpa.org/images/static/googleicons/wineries.png";
		      wineryIcon.iconSize 		   = new GSize(52, 50);
		      wineryIcon.iconAnchor        = new GPoint(5, 34);
		      wineryIcon.infoWindowAnchor  = new GPoint(5, 2);
		      
		      var farmersmarketIcon 			   = new GIcon();
		      farmersmarketIcon.image 			   = "http://www.buylocalpa.org/images/static/googleicons/farmers_market.png";
		      farmersmarketIcon.iconSize 		   = new GSize(52, 50);
		      farmersmarketIcon.iconAnchor        = new GPoint(5, 34);
		      farmersmarketIcon.infoWindowAnchor  = new GPoint(5, 2);
		      
		      var returnIcons = new Array();
		      returnIcons['event']         = eventIcon;
		      returnIcons['farm']          = farmIcon;
		      returnIcons['other']         = otherIcon;
		      returnIcons['restaurant']    = restaurantIcon;
		      returnIcons['store']         = storeIcon;
		      returnIcons['farmersmarket'] = farmersmarketIcon;
		      returnIcons['winery']        = wineryIcon;
		      
		      return returnIcons;
			}
			
			
			
			
			function download_and_display_points(lat, lng) {
				
				//create the markers for the map
				var iconArray = createIcons();		
				
				if (!override_points_url && !coopconnections && !consumersonly) {
					//narrow the categories, if necessary
					var typecats = "";
					$(".typecheckboxes:not(.typecheckboxes:checked)").each(function(a) {
			      		var source_type_id = $(this).val();
			      		typecats = typecats + source_type_id + "," ;
			      	});
					
					//if the sources are narrowed, add event to the list
					if ($("#event_checkbox:checked")) var event_checked = true;
					else var event_checked = false; 
					if (typecats != "" && !event_checked) typecats = typecats + "event";
			      	
					var location_id = $("#location_id").val();
					
					if (location_id != 0) {
						var gmap_points_url = "/xml/gmap?location_id=" + location_id;
					}
					else {	
						if (!lat) {
							var center = map.getCenter();
							var lat = center.lat();
							var lng = center.lng();
						}
					
						var gmap_points_url = "/xml/gmap?lat=" + lat + "&lng=" + lng + "&zoomlevel=" + map.getZoom();
					}
					if (typecats) { gmap_points_url = gmap_points_url + "&cats=" + typecats; }
				}
				else if (coopconnections) {
					var center = map.getCenter();
					var lat = center.lat();
					var lng = center.lng();
					
					var gmap_points_url = "/xml/coopconnections?lat=" + lat + "&lng=" + lng + "&zoomlevel=" + map.getZoom();
				}
				else if (consumersonly == true) {
					var center = map.getCenter();
					var lat = center.lat();
					var lng = center.lng();
					
					if (typeof defined_radius != "undefined") {
						var gmap_points_url = "/xml/consumersonly?lat=" + lat + "&lng=" + lng + "&miles=" + defined_radius + "&gfnonly=true";
					}
					else {
						var gmap_points_url = "/xml/consumersonly?lat=" + lat + "&lng=" + lng + "&zoomlevel=" + map.getZoom();
					}
				}
				else if (advancedsearch == true) {
					var center = map.getCenter();
					var lat = center.lat();
					var lng = center.lng();
					var text = $("#advancedsearchtext").val();
					
					if (product_id) {
						var gmap_points_url = "/xml/searchbytext?lat=" + lat + "&lng=" + lng + "&zoomlevel=" + map.getZoom() + "&product_id=" + product_id;
					}
					else {
						var gmap_points_url = "/xml/searchbytext?lat=" + lat + "&lng=" + lng + "&zoomlevel=" + map.getZoom() + "&text=" + text;
					}
				}
				else if (typeof eventsonly != "undefined" && eventsonly == true) {
					var center = map.getCenter();
					var lat = center.lat();
					var lng = center.lng();
					
					var gmap_points_url = "/xml/eventmap?lat=" + lat + "&lng=" + lng + "&zoomlevel=" + map.getZoom();
					
				}
				else {
					gmap_points_url = override_points_url;
				}
				
				$("#showurl").html(gmap_points_url);
				
				GDownloadUrl(gmap_points_url, function(data) {
				  //clear windows that tell the user data is loading
				  reset_loading_results_window();
				  
		          map.clearOverlays();	
		          var resultswindow = "";
				  var xml = GXml.parse(data);
				  var markers = xml.documentElement.getElementsByTagName("marker");
				  
				  if (typeof defined_radius == "undefined") var mile_radius = return_mile_radius(map.getZoom());
				  else var mile_radius = defined_radius;
				  
				  var firstLoad = $("#firstLoad").val();
				  
				  //if this is a zipcode search, check the amount of results that we got
				  //only do this on the initial loading of the page
				  //the first load is a flag set later in this script
				  if (firstLoad == 1 && zipcode) {
				  	if (markers.length < 10) {
				  		//alert("Not enough results");
				  		var newzoomlevel = map.getZoom() - 1;
				  		map.setZoom(newzoomlevel);
				  		
				  		//now set this new zoomlevel in the database
				  		GDownloadUrl("/ajax/setzoomlevelforzip?zipcode=" + zipcode + "&zoomlevel=" + newzoomlevel);
				  		return;
				  	}
				  	/*else if (markers.length > 120) {
				  		alert("Too many results");
				  		var newzoomlevel = map.getZoom() + 1;
				  		map.setZoom(newzoomlevel);
				  	}*/
				  }
				  
				  if (markers.length <= 30) {
				  	$("#resultswindow_title").html("For more choices zoom out or reposition map.");
				  }
				  else $("#resultswindow_title").html("Only closest 30 results listed above; zoom in to focus your search.");
				  
				  //if the user is searching for a specific bit of text, prepare this for output
				  if (searchtext) var searchtext_output = " for " + searchtext;
				  else var searchtext_output = "";
				  
				  $("#searchresults").html(markers.length + " choices" + searchtext_output + " in a " + mile_radius + "-mile radius. &nbsp");
				  
				  //var bounds = new GLatLngBounds;
				  
				  for (var i = 0; i < markers.length; i++) {
				    var name = markers[i].getAttribute("name");
				    var user_id = markers[i].getAttribute("user_id");
				    var event_id = markers[i].getAttribute("event_id");
				    var address = markers[i].getAttribute("address");
				    var url =markers[i].getAttribute("url");
				    
				    //show infowindow or not?
				    if (typeof suppress_info_bubbles != "undefined")  var infowindow = "";
				    else var infowindow = markers[i].getAttribute("infowindow");
				    
				    var distance = markers[i].getAttribute("distance");
				    //what icon should be shown?
				    var source_type_id = markers[i].getAttribute("source_type_id");
				    
				    if (source_type_id != "" && source_type_id != null) {
				    	switch (source_type_id) {
				    		case "1":
				    			var showMarker = 'restaurant';
				    			break;
				    		case "14":
				    			var showMarker = 'farm';
				    			break;
				    		case "16":
				    			var showMarker = 'store'; 
				    			break;
				    		case "15":
				    			var showMarker = 'farmersmarket'; 
				    			break;
				    		case "21":
				    			var showMarker = 'winery'; 
				    			break;
				    		case "EVENT":
				    			var showMarker = 'event'; 
				    			break;
				    		default:
				    			var showMarker = 'other';
				    			break;
				    	}
				    }
				    else if (event_id) {
				    	var showMarker = 'event'; 
				    }
				    else var showMarker = 'other';
				    
				    var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
				                            parseFloat(markers[i].getAttribute("lng")));
				    var marker = createMarker(point, name, address, infowindow, iconArray[showMarker]);
				    //var curmarkerarray.push(point);
				    map.addOverlay(marker);
				    
				    //bounds.extend(point);
				    
				    //show only the first thirty results in the right side window
				    if (i < 30) {
				    	url = "#";
					    if (address != "") resultswindow = resultswindow + (i+1) + ". <a href='"+ url +"' class='openlocation'>" + name + "</a><div class='location_lat'>" + markers[i].getAttribute("lat") + "</div><div class='location_lng'>" + markers[i].getAttribute("lng") + "</div><div class='location_infowindow'>" + infowindow + "</div><div class='source_result'>" + address + "<br/>";
					   
					    else resultswindow = resultswindow + (i+1) + ". <a href='"+ url +"' class='openlocation'>" + name + "</a><br/>" + infowindow + "<br/>";
				    	
					    if (distance != "0.00") resultswindow = resultswindow + "Distance: " + distance + " miles.";
					    
					    if (address != "") resultswindow = resultswindow + "</div>";
					    
				    }
				    
				   
				    
				   
				  }
				  if (typeof drawcircle != "undefined") {
		      		drawCircle(map, map.getCenter(), defined_radius, 40);
		      	  }
				  
				  $("#firstLoad").val("0");
				  
				  if (markers.length == 0) resultswindow = "No results returned.";
				  //if (markers.length > 30) resultswindow = resultswindow + "<h2>And " + (markers.length - 30) + " more!</h2>";
				  
				  //if we are just looking at a location_id, set the center to the location
				  if (!lat && !lng && location_id) {
				  	map.setCenter(point);
				  }
				  
				  $("#resultswindow_data").html(resultswindow);
				  
				  $("a.openlocation").click(function() {
				  	$("#do_not_reload_map").html("1");
				  	
				  	var panlat = $(this).next().html(); 
				  	var panlng = $(this).next().next().html(); 
				  	var newcenter = new GLatLng(parseFloat(panlat),
				                            parseFloat(panlng));
				    var curinfowindow = $(this).next().next().next().html();
				  	//alert(panlat);
			      	//map.panTo(newcenter);
			      	map.openInfoWindow(newcenter, curinfowindow);
			      	
			      	//$("#do_not_reload_map").html("0");
			      	return false;
			      });
				});
				
			}
		   
		   // If the map position is out of range, move it back
		      function checkBounds() {
		        // Perform the check and return if OK
		        if (allowedBounds.contains(map.getCenter())) {
		        	
		          return true;
		        }
		   
		        // It`s not OK, so find the nearest allowed point and move there
		        var C = map.getCenter();
		        var X = C.lng();
		        var Y = C.lat();
		
		        var AmaxX = allowedBounds.getNorthEast().lng();
		        var AmaxY = allowedBounds.getNorthEast().lat();
		        var AminX = allowedBounds.getSouthWest().lng();
		        var AminY = allowedBounds.getSouthWest().lat();
		
		        if (X < AminX) {X = AminX;}
		        if (X > AmaxX) {X = AmaxX;}
		        if (Y < AminY) {Y = AminY;}
		        if (Y > AmaxY) {Y = AmaxY;}
		        //alert ("Restricting "+Y+" "+X);
		        map.setCenter(new GLatLng(Y,X));
		        
		        return false;
		      }
		      
		      
		      $("#clearresults").click(function(){
		      	alert('clear');
		      	map.clearOverlays();
		      });
		      
		      $(".typecheckboxes").click(function(){
			  	//uncheck the events checkbox because the user is narrowing
				$("event_checkbox").attr("checked",false);
				
		      	set_loading_results_window();
		      	//alert('clear');
		      	$("#location_id").val(0);
		      	var center = map.getCenter();
		      	download_and_display_points(center.lat(),center.lng(),$("#location_id").val());
		      	
		      	
		      	
		      });
		      
		      $("#removefilter").click(function() {
		      	$(this).hide();
		      	override_points_url = false;
				searchtext = false;
		      	var center = map.getCenter();
		      	$("#content h1").html("Searching local food providers..");
		      	$("#typecheckboxes").show();
		      	$("#typecheckboxes input").attr("checked",true);
		      	set_loading_results_window();
		      	download_and_display_points(center.lat(),center.lng(),$("#location_id").val());
		      	
		      	return false;
		      });
		      
		      
		      function openInfoWindow(i) {
				alert(i);
				download_and_display_points();
			}
			function set_loading_results_window() {
				var results_loading_msg = "<div style='text-align:center;margin:10px 0;'>Loading local food providers..<br/><img src='/images/static/ajax-loader.gif' id='ajaxLoaderImage' style='margin:10px 0px;'/></div>";
				$("#resultswindow_data").html(results_loading_msg);
				$(".results_loading_msg").html(results_loading_msg);
			}
			
			function reset_loading_results_window() {
				//loading the points has completed
				//so the user shouldn't see loading messages any3
				//$("#resultswindow_data").hide();
				$(".results_loading_msg").hide();
			}
			
			function return_mile_radius(zoomlevel) {
					
				if (zoomlevel == 9) return 50;
				else if (zoomlevel == 8) return 150;
				else if (zoomlevel == 7) return 300;
				else if (zoomlevel == 10) return 40;
				else if (zoomlevel == 11) return 25;
				else if (zoomlevel == 12) return 6;
				else if (zoomlevel == 13) return 3;
				else if (zoomlevel == 14) return 1;
				else return 50;
			}
			
			function show_single_point(lat, lng, infowindow) {
				//create the markers for the map
				var iconArray = createIcons();		
				
				var point = new GLatLng(lat, lng);
				markerwindow = "<p class='infowindow_content'>";
				
				if (singlepoint_photo) {
					markerwindow = markerwindow + "<img src='" + singlepoint_photo + "' style='margin:7px; float:left'>";
				}
				
				markerwindow = markerwindow + "<strong>" + singlepoint_name + "</strong><br>" + singlepoint_address + "<br>" + infowindow + "</p>";
				var marker = createMarker(point, singlepoint_name, singlepoint_address, markerwindow, iconArray['event']);
				//var curmarkerarray.push(point);
				map.addOverlay(marker);
				GEvent.trigger(marker,'click'); 
				
				//show in the right column
				resultswindow = markerwindow;
				$("#resultswindow_data").html(resultswindow); 
			}
			
			 // Draw a circle on map around center (radius in miles)
	        // Modified by Jeremy Schneider based on http://maps.huge.info/dragcircle2.htm
	        function drawCircle(map, center, radius, numPoints)
	        {
	            poly = [] ; 
	            var lat = center.lat() ;
	            var lng = center.lng() ;
	            var d2r = Math.PI/180 ;                // degrees to radians
	            var r2d = 180/Math.PI ;                // radians to degrees
	            var Clat = (radius/3963) * r2d ;      //  using 3963 as earth's radius
	            var Clng = Clat/Math.cos(lat*d2r);
	            
	            //Add each point in the circle
	            for (var i = 0 ; i < numPoints ; i++)
	            {
	                var theta = Math.PI * (i / (numPoints / 2)) ;
	                Cx = lng + (Clng * Math.cos(theta)) ;
	                Cy = lat + (Clat * Math.sin(theta)) ;
	                poly.push(new GLatLng(Cy,Cx)) ;
	            }

	            //Remove the old line if it exists
	            if(line)
	            {
	                map.removeOverlay(line) ;
	            }
	            
	            //Add the first point to complete the circle
	            poly.push(poly[0]) ;

	            //Create a line with teh points from poly, red, 3 pixels wide, 80% opaque
	            line = new GPolyline(poly,'#FF0000', 3, 0.8) ;
	            
	            map.addOverlay(line) ;
	        }

		      
	    }
	     
	    //]]>