/**
	EVENT GOOGLE MAPS API FUNCTIONS
**/

/**
* Function to initialize Tour Dates Map
*
* @name 	initialize_tour_map
* @access 	public
* @param 	string div_map
* @return 	void
* @author 	Ever Barreto
* @email	ever@amediacreative.com
*/
function initialize_tour_map(div_map) {
	
	map = new GMap2(div_map);
	
	// Default to Hybrid Map
	map.setMapType(G_HYBRID_MAP);
	
	// Large Map Control
	//map.addControl(new GLargeMapControl());
	map.addControl(new GSmallMapControl());
	
	// Map Overview Control
	//map.addControl(new GOverviewMapControl());
				
	// Map Type Control
	map.addControl(new GMapTypeControl());
				
	// Center the Map to US
	map.setCenter(new GLatLng(40, -98), 3);
	
	// Get Markers
	GDownloadUrl(_markers_url, function(data) {
		
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName("marker");
		
		for (var i = 0; i < markers.length; i++) {
			
			// Get Data from XML
			var tour_date = markers[i].getAttribute("tour_date");
			var tour_venue = markers[i].getAttribute("tour_venue");
			var tour_address1 = markers[i].getAttribute("tour_address1");
			var tour_address2 = markers[i].getAttribute("tour_address2");
			var venue_url = markers[i].getAttribute("venue_url");
			var ticket_url = markers[i].getAttribute("tickets_url");
			
			// Marker Lat+Lang
			var latlng = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
			
			// Tour
			var tourDate = {
				latlng: latlng,
				date: tour_date,
				venue: tour_venue,
				address1: tour_address1,
				address2: tour_address2,
				venue_url: venue_url,
				ticket_url: ticket_url
			};
			
			var latlngHash = (latlng.lat().toFixed(6) + "" + latlng.lng().toFixed(6));
			
			latlngHash = latlngHash.replace(".","").replace(".", "").replace("-","");
			
			if (locations[latlngHash] == null) {
				
				locations[latlngHash] = []
				
			}
			
			locations[latlngHash].push(tourDate);
			
		}
		
		for (var latlngHash in locations) {
			
			var tourDates = locations[latlngHash];
			
			if (tourDates.length > 1) {
				
				map.addOverlay(createClusteredMarker(tourDates));
				
			}
			else {
				
				map.addOverlay(createMarker(tourDates));
			
			}
		}
		
		// Set Zoom based on Markers
		map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
		
		// Set Map Center based on Markers
		map.setCenter(bounds.getCenter());
		
	});

}

function createMarker(tourDates) {
	
	var tourDate = tourDates[0];
	var marker = new GMarker(tourDate.latlng);
	var html = "<b>" + tourDate.date + "</b>:<br/><b><a href=\"" + tourDate.venue_url + "\" style=\"color: #000000; text-decoration: underline\">" + tourDate.venue + '</a></b><br/><br/>' + tourDate.address1 + '<br/>' + tourDate.address2 + "<br/><a href=\"" + tourDate.ticket_url + "\" style=\"color: #000000; text-decoration: underline\">Get Tickets</a>";
	GEvent.addListener(marker, 'click', function() {
		marker.openInfoWindowHtml(html);
	});
	
	// Extend boundaries
	bounds.extend(marker.getPoint());
	
	return marker;
	
}

function createClusteredMarker(tourDates) {

	var marker = new GMarker(tourDates[0].latlng);
	var html = "";
	
	for (var i = 0; i < tourDates.length; i++) {
		html = "<b>" + tourDates[i].date + "</b>:<br/><b><a href=\"" + tourDates[i].venue_url + "\" style=\"color: #000000; text-decoration: underline\">" + tourDates[i].venue + '</a></b><br/><br/>' + tourDates[i].address1 + '<br/>' + tourDates[i].address2 + "<br/><a href=\"" + tourDates[i].ticket_url + "\" style=\"color: #000000; text-decoration: underline\">Get Tickets</a>";
	}
	
	GEvent.addListener(marker, 'click', function() {
		marker.openInfoWindowHtml(html);
	});
	
	// Extend boundaries
	bounds.extend(marker.getPoint());
	
	return marker;
	
}
