var map;
var mgr;
var markerBlue;
var markerGreen;
var mapView;
var selTab;
var batches = [];

function init() {
  if (GBrowserIsCompatible()) {
  	
	// -- Setup Tabs -- //
	var tabs = $i('tabs_map').getElementsByTagName('a');
	for(i=0; i<tabs.length; i++) {
		tabs[i].onclick = function() { 
			if (selTab) { selTab.className = selTab.className.replace('selected', ''); }
			this.parentNode.className += ' selected';
			selTab = this.parentNode;
			loadMarkers();			
		}
		if (tabs[i].parentNode.className.match('selected')) { selTab = tabs[i].parentNode; }
	}
	
	
	// -- Setup Map -- //
	
	map = new GMap2(document.getElementById("map_canvas"));

	// Setup Map View
	map.setCenter(new GLatLng(46.503709,-93.977051), 6);
	map.addControl(new GLargeMapControl());
	
	// Setup Icons
	var iconBlue = new GIcon();
	iconBlue.image = "../i/mm_20_blue.png";
	iconBlue.shadow = "../i/mm_20_shadow.png";
	iconBlue.iconSize = new GSize(12, 20);
	iconBlue.shadowSize = new GSize(22, 20);
	iconBlue.iconAnchor = new GPoint(6, 20);
	iconBlue.infoWindowAnchor = new GPoint(5, 1);
	markerBlue = { icon:iconBlue };
	
	var iconGreen = new GIcon();
	iconGreen.image = "../i/mm_20_green.png";
	iconGreen.shadow = "../i/mm_20_shadow.png";
	iconGreen.iconSize = new GSize(12, 20);
	iconGreen.shadowSize = new GSize(22, 20);
	iconGreen.iconAnchor = new GPoint(6, 20);
	iconGreen.infoWindowAnchor = new GPoint(5, 1);
	markerGreen = { icon:iconGreen };
	
	// Load Markers
	mgr = new MarkerManager(map);
	
	loadMarkers();
	
  }
}

function loadMarkers() {	
	//get currently set map view
	mapView = selTab.getAttribute('view');
	if (!batches[mapView]) {
	
		GDownloadUrl("../x/markers_events.php", returnBatch);
		
	} else {
		mgr.clearMarkers();
		mgr.addMarkers(batches[mapView], 1);
		mgr.refresh();
	}
}

function returnBatch(data, responseCode) {		
		
	batches['past'] = [];
	batches['future'] = [];
	
	var markers = JSON.parse(data);
	for( var i in markers) {
		t = parseFloat(markers[i]["future"]) == 1 ? 'future' : 'past';
		batches[t].push( createMarker(markers[i], t) );
	}
	mgr.addMarkers(batches[mapView], 1);
	mgr.refresh();
}

function createMarker(mdata) {
	var point = new GLatLng(parseFloat(mdata.lat),parseFloat(mdata.long));
	var m = new GMarker(point, t == 'future' ? markerBlue : markerGreen );
	m.mdata = mdata;
	GEvent.addListener(m, 'click', showMarkerWindow);
	return m;
}

function showMarkerWindow() {
	html = '<div class="map_popup">';
	html += '<small class="date">' + this.mdata.startmonth  + '<span>' + this.mdata.startday + '</span></small>';
	html += '<small class="date_year">' + this.mdata.startyear + '</small>';
	html += '<p><strong>' + this.mdata.title + '</strong></p>';
	html += '<p>';
	html += this.mdata.time_formatted;
	html += '</p>';
	html += '<p>';
	html += this.mdata.location + '<br>';
	html += this.mdata.address + '<br>';
	html += this.mdata.city + ', ' + this.mdata.state + ' ' + this.mdata.zip + '<br>';
	html += '</p>';
	html += '</div>';
	
	var tabs = [];
	tabs.push(new GInfoWindowTab('Place/Time',html));
	if (this.mdata.pre_message) {
		tabs.push(new GInfoWindowTab('Event Info','<div class="map_popup" style="padding-left:0px">' + this.mdata.pre_message+'</div>'));
	}
	this.openInfoWindowTabsHtml(tabs);
}

init();