function clearAddMarker() {
	$('#add_cancel').hide();
	add_marker_lock = false;
	map.closeInfoWindow();
	map.clearOverlays();
	updateMarkers();
}

function updateMarkers() {
	var map_bounds = map.getBounds();
	var ne = map_bounds.getNorthEast();
	var sw = map_bounds.getSouthWest();
	var lat1 = sw.lat();
	var lat2 = ne.lat();
	var lng1 = sw.lng();
	var lng2 = ne.lng();
	$.post("getMarkers.php", {lat1: lat1, lat2: lat2, lng1: lng1, lng2: lng2}, function(data) {
		if ($(data).find('invalid').length > 0) {
			alert('There was an error while getting the list of hotspots.  Please contact the site adminitrator regarding this error.');
		}
		else if ($(data).find('zoomin').length > 0) {
			map.clearOverlays();
			alert('There are too many hotspots to display.  Please zoom in for a closer look.');
		}
		else if ($(data).find('zoomout').length > 0) {
			alert('There aren\'t any hotspots here.  Please zoom out for a broader view.');
		}
		else {
			map.clearOverlays();
			$(data).find('marker').each(function() {
				var marker = $(this);
				var point = new google.maps.LatLng(parseFloat(marker.attr('lat')), parseFloat(marker.attr('lng')));
				var pin = new google.maps.Marker(point, {icon: hotspot_icon});
				var category = '<span><b>Category: </b>' + marker.attr('category') + '</span><br />';
				var location = '<span><b>Location: </b>' + marker.attr('location') + '</span><br />';
				var carrier = '<span><b>Carrier: </b>' + marker.attr('carrier') + '</span><br />';
				var info_html = '<div class="info_text">' + category + location + carrier + '</div>';
				map.addOverlay(pin);
				google.maps.Event.addListener(pin, 'click', function() {
					update_lock = true;
					pin.openInfoWindowHtml(info_html);
				});
			});
		}
	}, 'xml');
}

function addHotspotMarker() {
	add_marker_lock = true;
	$('#add_cancel').show();
	var map_center = map.getCenter();
	add_marker_lat = map_center.lat();
	add_marker_lng = map_center.lng();
	add_marker = new google.maps.Marker(map_center, {draggable: true, icon: add_icon});
	map.clearOverlays();
	map.addOverlay(add_marker);
	add_marker.openInfoWindowHtml('<p id="drag_marker_text">Drag me to the hotspot, and then fill out the form.</p>');
	google.maps.Event.addListener(add_marker, 'dragstart', function() {map.closeInfoWindow();});
	google.maps.Event.addListener(add_marker, 'click', function() {map.closeInfoWindow(); add_marker.openInfoWindowHtml(add_form_html);});
	google.maps.Event.addListener(add_marker, 'dragend', function(point) {
		map.closeInfoWindow();
		add_marker.openInfoWindowHtml(add_form_html);
		add_marker_lat = point.lat();
		add_marker_lng = point.lng();
	});
}

function mapInit() {
	map = new google.maps.Map2($("#map_canvas").get(0));
	map.setCenter(new google.maps.LatLng(lat, lng), 13);
	map.setUIToDefault();
	geocoder = new google.maps.ClientGeocoder();

	hotspot_icon = new google.maps.Icon(G_DEFAULT_ICON);
	hotspot_icon.image = 'media/img/pin.png';
	hotspot_icon.shadow = 'media/img/pinshadow.png';
	hotspot_icon.imageMap = [13,1,5,7,1,13,1,22,8,34,17,43,20,41,27,34,31,28,34,22,34,15,32,9,25,3,20,1];
	hotspot_icon.iconSize = new google.maps.Size(35, 45);
	hotspot_icon.iconAnchor = new google.maps.Point(18, 44);
	hotspot_icon.shadowSize = new google.maps.Size(50, 42);
	hotspot_icon.infoWindowAnchor = new google.maps.Point(25, 15);
	add_icon = new google.maps.Icon(hotspot_icon);
	add_icon.image = 'media/img/add.png';
	add_form_html = '<div id="add_form"><iframe type="text/html" src="add_hotspot.php" style="width: 99%; height: 99%;" frameBorder=0 width="99%" height="99%"></iframe></div>';

	google.maps.Event.addListener(map, "moveend", function() {
		if (!add_marker_lock) {
			if (update_lock) {
				update_lock = false;
			}
			else {
				updateMarkers();
			}
		}
	});
	$('#search_form').submit(function() {
		geocoder.getLatLng($('#search_box').val(), function(point) {
			if (point) {
				map.panTo(point);
			}
			else {
				alert("Your search could not be translated into a location by the Google servers. Please rephrase your search.");
			}
		});
		return false;
	});
	updateMarkers();
}
