var iconBlue = new GIcon(); 
iconBlue.image = 'http://labs.google.com/ridefinder/images/mm_20_blue.png';
iconBlue.shadow = 'http://labs.google.com/ridefinder/images/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);

var iconGreen = new GIcon(); 
iconGreen.image = 'http://labs.google.com/ridefinder/images/mm_20_green.png';
iconGreen.shadow = 'http://labs.google.com/ridefinder/images/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);

var iconGray = new GIcon(); 
iconGray.image = 'http://labs.google.com/ridefinder/images/mm_20_gray.png';
iconGray.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png';
iconGray.iconSize = new GSize(12, 20);
iconGray.shadowSize = new GSize(22, 20);
iconGray.iconAnchor = new GPoint(6, 20);
iconGray.infoWindowAnchor = new GPoint(5, 1);

var customIcons = [];
customIcons["today"] = iconGreen;
customIcons["tomorrow"] = iconBlue;
customIcons["week"] = iconGray;

if(!com) var com = {};
if(!com.feedtacoma) com.feedtacoma = {};

com.feedtacoma.maps = function() {
	var pub = {};
	pub.map;
	pub.markers;
	pub.markerData;

	// load up the map
	pub.load = function(elementId, type) {
		if (GBrowserIsCompatible()) {
			pub.map = new GMap2(document.getElementById(elementId));
			pub.map.addControl(new GSmallMapControl());
			pub.map.addControl(new GMapTypeControl());
			pub.map.setCenter(new GLatLng(47.234388, -122.482452), 11);

			pub.getMarkers(type);
		}
	}

	pub.unload = function() {
		pub.map.GUnload();
	}

	// get the markers you want
	pub.getMarkers = function(type) {
		GDownloadUrl("markers.php?t="+type+"&r="+Math.random(), function(data) {
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName("marker");

			pub.markers = markers;

			// setMarkers has to wait for this function to run
			pub.setMarkers();
		});
	}

	// add a marker to the map
	pub.setMarkers = function() {
		if( pub.map) pub.map.clearOverlays();

		for (var i = 0; i < pub.markers.length; i++) {
			var marker = pub.markers[i];

			var markerData = new Object;
			markerData.date = marker.getAttribute("date");
			markerData.link = marker.getAttribute("link");
			markerData.name = marker.getAttribute("name");
			markerData.img = marker.getAttribute("image");
			markerData.address = marker.getAttribute("address");

			var point = new GLatLng(
				parseFloat(marker.getAttribute("lat")),
				parseFloat(marker.getAttribute("lng"))
			);
			var type = marker.getAttribute("type");

			var new_marker = pub.createMarker(point, type, markerData);
			pub.map.addOverlay(new_marker);
		}
	}

	pub.createMarker = function(point, type, data) {
		var marker = new GMarker(point, customIcons[type]);
		var html = "";

		if( data.img != "" )
			html += '<a href="' + data.link + '"><img src="' + data.img + '" class="framed" style="float: left !important; height: 75px; margin: 0 1em 0 0; width: 75px;" /></a>';
		html += '<span class="tiny lowlite">' + data.date + '</span><br />';
		html += '<b><a href="' + data.link + '">' + data.name + '</a></b> <br/>';
		html += data.address;
		html += '<div style="clear: both !important;"></div>';

		GEvent.addListener(marker, 'click', function() {
			marker.openInfoWindowHtml(html);
		});

		return marker;
	}

	pub.goTo = function(lat, lon, zoom) {
		pub.map.setCenter(new GLatLng(lat, lon), zoom);
	}

	return pub;
}();
