var markers = new Array();

var map;
var tinyBlueIcon;
var tinyGreenIcon;
var tinyRedIcon;

var lastCenter;

$(document).ready(function() {
	$('div#mapBox').before('<div id="generatedMap"></div>');

	if (initialize_map('generatedMap'))
	{
		$('li.location').each(function (){
			lat = parseFloat($(this).find('.locationLatitude').html())
			lng = parseFloat($(this).find('.locationLongitude').html())
			if (lat && lng)
			{
				var enableInfoWindow = true;
			
				// Grab the DOM element of the locationBox div under this li
				// for the popup window.
				var markerContents = $(this).find('div.locationBox').get().shift();
				var html = $(this).html();
				

				// Default icon is the tinyRedIcon
				var icon = tinyRedIcon;

				var latlng = new GLatLng(lat, lng);
				var marker = new GMarker(latlng, {icon:icon});
			
				if (enableInfoWindow)
				{
					GEvent.addListener(marker,"click", function() {
						lastCenter = map.getCenter();
						marker.openInfoWindowHtml(html, {maxWidth:200});
					});
					
					var infoWindow = map.getInfoWindow()
					GEvent.addListener(infoWindow,"closeclick", function() {
						if (lastCenter)
						{
							map.panTo(lastCenter);
						}
					});
				}
			
				map.addOverlay(marker);
				markers.push(marker);
			}
		});
		$('div#mapBox img').hide();
		$('div#mapBox').addClass('interactiveMapPresent');
	}
	
});

function initialize_map(divId)
{
	if (GBrowserIsCompatible() && document.getElementById(divId))
	{
		//GDraggableObject.setDraggableCursor('default');
		
		map = new GMap2(document.getElementById(divId));
		map.addControl(new GSmallMapControl());
		map.disableDoubleClickZoom();
		
		map.setCenter(new GLatLng(44.461016130519, -93.15412759780884), 16);
		
		// Empty copyright info. The text just gets jumbled on the small maps and they're
		// already on our copyrighted pages.		
		var copyright = new GCopyright(1, new GLatLngBounds(new GLatLng(44, -94), new GLatLng(45, -93)), 0, "");
		copyrightCollection = new GCopyrightCollection(''); 
		copyrightCollection.addCopyright(copyright);

		// Basically augment the google maps tiles with transparent tiles at
		// zoom levels greater than 18
		var transparentMapLayer = new GTileLayer(copyrightCollection, 0, 19);
		transparentMapLayer.getTileUrl = function(p,z) {
			if (z < 18) { return G_NORMAL_MAP.getTileLayers()[0].getTileUrl(p,z); }
			else { return '/global_stock/images/campus_map/tiles/transparent.png'; }
		}
		transparentMapLayer.isPng = function() { return true; };
		transparentMapLayer.getOpacity = function() { return 1.0; };

		var baseLayer = new GTileLayer(copyrightCollection, 12, 19);
		baseLayer.getTileUrl = GetBaseTileUrl;
		baseLayer.isPng = function() { return true; };
		baseLayer.getOpacity = function() { return 1.0; };
	
		var allBuildingsLayer = new GTileLayer(copyrightCollection, 12, 19);
		allBuildingsLayer.getTileUrl = GetAllBuildingsTileUrl;
		allBuildingsLayer.isPng = function() { return true; };
		allBuildingsLayer.getOpacity = function() { return 1.0; };
	
		var labelLayer = new GTileLayer(copyrightCollection, 12, 18);
		labelLayer.getTileUrl = GetLabelTileUrl;
		labelLayer.isPng = function() { return true; };
		labelLayer.getOpacity = function() { return 1.0; };		
	
		var baseTileLayers = new Array();
		baseTileLayers[0] = transparentMapLayer;
		baseTileLayers[1] = baseLayer;
		//baseTileLayers[2] = allBuildingsLayer;
		baseTileLayers[2] = labelLayer;
	
		baseMapType = new GMapType(baseTileLayers, new GMercatorProjection(21), "Map", {errorMessage:"No campus data available"});
		
		var satelliteLayer = new GTileLayer(copyrightCollection, 0, 18);
		satelliteLayer.getTileUrl = function(p,z) {
			return G_SATELLITE_MAP.getTileLayers()[0].getTileUrl(p,z);
		}
		satelliteLayer.isPng = function() { return true; };
		satelliteLayer.getOpacity = function() { return 1.0; };
		
		var satelliteMapLayers = new Array();
		satelliteMapLayers[0] = satelliteLayer;
		satelliteMapLayers[1] = labelLayer;
		
		satelliteMapType = new GMapType(satelliteMapLayers, new GMercatorProjection(21), "Satellite", {errorMessage:"No satellite data available"});
		
		
		map.addMapType(baseMapType);
		map.addMapType(satelliteMapType);
		map.removeMapType(G_NORMAL_MAP);
		map.removeMapType(G_SATELLITE_MAP);
		map.removeMapType(G_HYBRID_MAP);
		
		map.addControl(new GMapTypeControl());
		map.setMapType(baseMapType);
		
		var mnBounds = new GLatLngBounds(new GLatLng(43.43696596521823, -97.294921875),new GLatLng(49.28214015975995, -89.53857421875))
			
		//map.addControl(new USOverviewControl({size:new GSize(110,120), bounds: mnBounds, latlng: new GLatLng(44.46141431718051, -93.15384864807129)}));
		map.addControl(new USOverviewControl({size:new GSize(110,120), bounds: mnBounds, follow: true}));
		
		tinyBlueIcon = new GIcon();
		tinyBlueIcon.image = "/global_stock/js/admissions/map_pins/mm_20_blue.png";
		tinyBlueIcon.shadow = "/global_stock/js/admissions/map_pins/mm_20_shadow.png";
		tinyBlueIcon.iconSize = new GSize(12, 20);
		tinyBlueIcon.shadowSize = new GSize(22, 20);
		tinyBlueIcon.iconAnchor = new GPoint(6, 20);
		tinyBlueIcon.infoWindowAnchor = new GPoint(5, 1);
		
		tinyRedIcon = new GIcon();
		tinyRedIcon.image = "/global_stock/js/admissions/map_pins/mm_20_red.png";
		tinyRedIcon.shadow = "/global_stock/js/admissions/map_pins/mm_20_shadow.png";
		tinyRedIcon.iconSize = new GSize(12, 20);
		tinyRedIcon.shadowSize = new GSize(22, 20);
		tinyRedIcon.iconAnchor = new GPoint(6, 20);
		tinyRedIcon.infoWindowAnchor = new GPoint(5, 1);
		
		tinyGreenIcon = new GIcon();
		tinyGreenIcon.image = "/global_stock/js/admissions/map_pins/mm_20_green.png";
		tinyGreenIcon.shadow = "/global_stock/js/admissions/map_pins/mm_20_shadow.png";
		tinyGreenIcon.iconSize = new GSize(12, 20);
		tinyGreenIcon.shadowSize = new GSize(22, 20);
		tinyGreenIcon.iconAnchor = new GPoint(6, 20);
		tinyGreenIcon.infoWindowAnchor = new GPoint(5, 1);
				
		return true;
	}
	return false;
}

function GetBaseTileUrl(a,b) {
	var z = 19 - b;
	var f = "/global_stock/images/campus_map/tiles/base/"+b+"_"+a.x+"_"+a.y+".png";
	return f;
}

function GetLabelTileUrl(a,b) {
	var z = 19 - b;
	var f = "/global_stock/images/campus_map/tiles/labels/"+b+"_"+a.x+"_"+a.y+".png";
	return f;
}

function GetAllBuildingsTileUrl(a,b) {
	var z = 19 - b;
	var f = "/global_stock/images/campus_map/tiles/all_buildings/"+b+"_"+a.x+"_"+a.y+".png";
	return f;
}
