var map;
var oStatesWithSubmissions = new Array();
var oCitiesWithSubmissions = new Array();
var stateIcon;


function initialize()
{
  if (GBrowserIsCompatible())
	{
		//create map
		map = new GMap2(document.getElementById("map_canvas"));
		map.setCenter(new GLatLng(37.0625, -95.677068), 4);
		map.addControl(new GLargeMapControl());
		
		stateIcon = new GIcon(G_DEFAULT_ICON);
		stateIcon.image = "images/statemarker.png";
		
		//http://code.google.com/apis/maps/documentation/overlays.html#Marker_Manager
		//add zoom level markers
		mgr = new MarkerManager(map);
		mgr.addMarkers(GetStateMarkers(), 3);
		mgr.addMarkers(GetCityMarkers(), 6);
		mgr.refresh();
  }
}

//state markers mark the states that have submissions, when a 
//state is clicked it zooms in so the city markers can be seen
function GetStateMarkers()
{
	var markers = [];
	
	//get collection of states that had submissions
	for (i in oSubmissions)
	{
		//if submission has state
		if (oSubmissions[i]["state"] != null)
		{
			//if state hasn't been found yet
			if (!oStatesWithSubmissions[oSubmissions[i]["state"]])
			{
				//if we have coordinates for the submitted state
				var oState = oStates[oSubmissions[i]["state"]];			
				if (oState)
				{
					var point = new GLatLng(oState["latitude"],oState["longitude"]);
					var options = {title:oState["name"],icon:stateIcon};
					var marker = new GMarker(point,options);
					AddStateZoomListener(marker);
					markers.push(marker);
				}
				oStatesWithSubmissions[oSubmissions[i]["state"]] = oSubmissions[i]["state"];
			}			
		}
	}
	
	return markers;
}

//city markers mark the cities that have submissions, when a
//city marker is clicked a maximized content window pops up and lists
//the submissions for the city/state
function GetCityMarkers()
{
	var markers = [];
	
	//get collection of state/city combinations that had submissions
	for (i in oSubmissions)
	{
		//if submission has state and city
		if (oSubmissions[i]["state"] != null && oSubmissions[i]["city"] != null)
		{
			//if state and city hasn't been found yet
			if (!oCitiesWithSubmissions[oSubmissions[i]["state"]+";"+oSubmissions[i]["city"]])
			{
				oCitiesWithSubmissions[oSubmissions[i]["state"]+";"+oSubmissions[i]["city"]] = 1;
				var point = new GLatLng(oSubmissions[i]["latitude"],oSubmissions[i]["longitude"]);
				var options = {title:oSubmissions[i]["state"]+";"+oSubmissions[i]["city"]};
				var marker = new GMarker(point, options);
				AddCityPopupListener(marker);
				markers.push(marker);
			}			
		}
	}
	
	return markers;
}

function AddStateZoomListener(marker)
{
	GEvent.addListener(marker, 'click', function()
	{
		var oState = oStates[this.getTitle()];
		map.setCenter(new GLatLng(oState["latitude"], oState["longitude"]), 6);
	});
}

//loads an info window with all the submissions for the city/state
function AddCityPopupListener(marker)
{
	GEvent.addListener(marker, 'click', function()
	{
		var maxContentDiv = document.createElement('div');
		maxContentDiv.innerHTML = 'Loading...'
		/*
		this.openInfoWindowHtml("<div style='padding:5px'>Loading...</div>",
			{
				maxContent: maxContentDiv, 
				maxTitle: "Submissions"
			}
		);
		*/
		
		//setTimeout("map.getInfoWindow().maximize()",500);
		
		//split state and city from marker title so we know what to look up
		var oCityState = this.getTitle().split(";");
		var sState = oCityState[0];
		var sCity = oCityState[1];
		
		//get all submissions that match city and state
		var sCityListing = "";
		for (i in oSubmissions)
		{
			if (oSubmissions[i]["state"] == sState && oSubmissions[i]["city"] == sCity)
			{
				sCityListing += "<p>";
				sCityListing += "<b>Name:</b> "+oSubmissions[i]["firstname"]+" "+oSubmissions[i]["lastname"]+"<br>";
				if (oSubmissions[i]["company"] != "")
				{
					sCityListing += "<b>Organization:</b> "+oSubmissions[i]["company"]+"<br>";
				}
				if (oSubmissions[i]["denomination"] != "")
				{
					sCityListing += "<b>Denomination:</b> "+oSubmissions[i]["denomination"]+"<br>";
				}
				if (oSubmissions[i]["blog"] != "")
				{
					sCityListing += "<b>Blog:</b> <a href='"+oSubmissions[i]["blog"]+"' target='_blank'>"+oSubmissions[i]["blog"]+"</a><br>";
				}
				if (oSubmissions[i]["twitter"] != "")
				{
					sCityListing += "<b>Twitter:</b> <a href='http://www.twitter.com/"+oSubmissions[i]["twitter"]+"' target='_blank'>"+oSubmissions[i]["twitter"]+"</a><br>";
				}
				if (oSubmissions[i]["interests"] != "")
				{
					sCityListing += "<b>Interests:</b> "+oSubmissions[i]["interests"]+"<br>";
				}
				if (oSubmissions[i]["website"] != "")
				{
					sCityListing += "<b>Website:</b> <a href='"+oSubmissions[i]["website"]+"' target='_blank'>"+oSubmissions[i]["website"]+"</a><br>";
				}				
				sCityListing += "<b>Contact:</b> <a href='contact_form.php?id="+oSubmissions[i]["id"]+"&keepThis=true&TB_iframe=true&height=300&width=400' title='Contact' class='thickbox' onClick='return Thickbox(this);'>Contact</a>";
				sCityListing += "</p>";
				sCityListing += "<br><hr align='left'><br>";
			}
		}

		//maxContentDiv.innerHTML = sCityListing;
		var options = {maxWidth:300, maxHeight:300, autoScroll:true};
		this.openInfoWindowHtml(sCityListing, options);
		
		
		
	});
}

function Thickbox(link)
{
	var t = link.title || link.name || null;
	var a = link.href || link.alt;
	var g = link.rel || false;
	tb_show(t,a,g);
	link.blur();
	return false;
}
