// PLOTS MULTIPLE POINTS FOR THE CATEGORY PAGE
function plotPoints(request) {
  
 	 /* GOOGLE MAPS API INTERFACE CODE */
  	
	// LOAD MAP
	if (GBrowserIsCompatible()) {
		
		// SETTINGS // START CENTERED ON PENSACOLA
		var currentZoom	= 10;
		var startLat	= 30.456816;
		var startLng 	= -87.218213;
		 
		// GOOGLE MAPS FUNCTIONS FILE
		var map = new GMap2(document.getElementById("map"));
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(startLat, startLng), currentZoom);

		// FETCH POINTS DATA
 		points = request.responseText.evalJSON();
		
		// TAKE POINTS AND ADD MARKERS
		points.each(function(points) { 	// INTERATE THROUGH POINTS
			geocoder 		= new GClientGeocoder();
			pointid			= points.attributes.id
			pointaddress 	= points.attributes.location;
			createMarker(pointaddress,pointid);
		});
		// ADD MAP CORNER
  	addMapCorner('map');
		
	}
	
	// Creates a marker at the given point with the given number label
	function createMarker(address,id) {
		if (geocoder) {
			geocoder.getLatLng(address,function(point) {
				if (point) {
					
					// SAVE THIS POINT'S COORDINATES
					
					// MAKE NEW MARKER
					var marker = new GMarker(point);

					// RECALCULATE BOUNDS
					checkBounds(point);
					
					// PARSE GALLERY ITEM DATA AND MAKE ON CLICK EVENT
					GEvent.addListener(marker, "click", function() { 
						new Ajax.Request('/gallery/'+id,{ method: 'get' , onSuccess:  function(request) {
							var gallery = request.responseText.evalJSON();
    						marker.openInfoWindowHtml(generateBoxHTML(gallery.image,gallery.name,address,id));
						}});
					});
					
					// IF THIS MARKER'S ID MATCHES THAT OF THE GLOBAL GALLERY ID SPECIFIED IN 
					// THE MAIN ENVIROMNENT, THEN GO AHEAD AND OPEN IT
					if(id == window.gallery_id) {
					  	 new Ajax.Request('/gallery/'+id,{ method: 'get' , onSuccess:  function(request) {
							var gallery = request.responseText.evalJSON();
    						marker.openInfoWindowHtml(generateBoxHTML(gallery.image,gallery.name,address,id));
						}});
					}
					
					// ADD THE OVERLAY
					map.addOverlay(marker);

				}
			});
		}
  	
	}
	
	// RECALCULATE BOUNDS BASED ON OUT OF BOUNDS DATA
	function checkBounds(point) {
	
		// GET MAP BOUNDS
		var bounds = map.getBounds();
		var maxLng		= bounds.getNorthEast().lng();
		var minLng		= bounds.getSouthWest().lng();
		var maxLat		= bounds.getNorthEast().lat();
		var minLat		= bounds.getSouthWest().lat();
			
		// RESET MAX POINTS IF OUT OF BOUNDS
		var outBounds = false;
		if(point.lat() > maxLat) {
			maxLat = point.lat();
			outBounds = true;
		}
		if(point.lat() < minLat) {
			minLat = point.lat();
			outBounds = true;
		}
		if(point.lng() < minLng) {
			minLng = point.lng();
			outBounds = true;
		}
		if(point.lng() > maxLng) {
			maxLng = point.lng();
			outBounds = true;
		}
		
		// IF OUT OF BOUNDS RECENTER AND ZOOM MAP
		if(outBounds) {
			
			// RECALCULATE ZOOM
			currentZoom--; // Zoom Out 1 Level
			
			//cl("Bounds: "+maxLat+","+minLat+","+minLng+","+maxLng);
			//cl("out of bounds");
						
			// CALCULATE NEW CENTER
			var newCenterLat = minLat+Math.abs((Math.abs(maxLat)-Math.abs(minLat)))/2;
			var newCenterLng = minLng+Math.abs((Math.abs(maxLng)-Math.abs(minLng)))/2;
			//cl(newCenterLat+","+newCenterLng);
			map.setCenter(new GLatLng(newCenterLat, newCenterLng), currentZoom);
			
			// RECURSE FUNCTION TO MAKE SURE WE'RE ZOOMED OUT ENOUGH
			checkBounds(point);
						
		}
		
		
	}
	
}

// GENERATES BOX DATA
function generateBoxHTML(image,name,address,id) {
  slug = name.gsub(/[^a-z1-9]+/i, '-')
	boxHTML = "<div class='googlemaps_overlay_data'>";
	
	// DO NOT RENDER IMAGE BOX IF IMAGE DOES NOT EXIST
	if(image != "") {
		boxHTML += "<img src='"+image+"' class='googlemaps_overlay_image'>"
	}
							
	boxHTML += "<div class='googlemaps_overlay_title'>"+name+"</div>"
		+ "<div class='googlemaps_overlay_address'>"+address+"</div>";
		
	// DO NOT RENDER LINK FOR THIS PROJECT
	if(id != window.gallery_id) {
		boxHTML += "<div class='googlemaps_overlay_link'>"
		+ "<a href='../gallery/"+id+"-" + slug + "#gallery'>View Project</a>"
		+ "</div>"
	}
		
	boxHTML += "</div>";
	return boxHTML;
}

function addMapCorner (domObject) {
  var imgHTML = '<img src="/images/map-corner.png" alt="Map Corner" id="MapCorner" />';
  new Insertion.Bottom(domObject, imgHTML);
}
