// Variables
// Note: Change these to have your own customized icons and locations (markers).
centerLat = 5;
centerLng = -20;
minZoom = 0;
maxZoom = 6;
defaultZoom = 4;
markersXml = "http://mfgames.com/exalted/map/markers.xml";
iconPath = "http://mfgames.com/exalted/map/icons/";
shadowIconPath = "http://mfgames.com/exalted/map/icons/shadow.png";

var map;
var icons = new Array();

function LoadPage()
{
	// Don't bother if we can't run
	if (GBrowserIsCompatible())
	{
		LoadMap();
	}
}

function LoadMap()
{
	// Set up the copyright collections
	var copyCollection = new GCopyrightCollection("Vector Map");
	var copyright = new GCopyright(1,
		new GLatLngBounds(
			new GLatLng(-90, -180),
			new GLatLng(90, 180)),
		minZoom, " &copy; 2007 White Wolf");
	copyCollection.addCopyright(copyright);
	
	// Create the tiles and set up the links
	var tilelayers = [new GTileLayer(copyCollection, minZoom, maxZoom)];
	tilelayers[0].getTileUrl = CustomGetTileUrl;
	
	// Set up the projection
	SetupProjection();

	// Set up the map boundaries
	var custommap = new GMapType(tilelayers,
		new EuclideanProjection(18),
		//new GMercatorProjection(18),
		"Vector",
		{errorMessage:"No chart data available"});
	custommap.numZoomLevels = maxZoom - minZoom;

	// Set up the map
	map = new GMap2(document.getElementById("map"),
			    { mapTypes:[custommap]});

	// Add controls
	map.addControl(new GLargeMapControl());
	map.addControl(new GOverviewMapControl(new GSize(256,128)));
	map.addControl(new GMapTypeControl());

	// Center it
        map.setCenter(new GLatLng(centerLat, centerLng), defaultZoom);

	// Create the icons
	CreateIcons();

	// Add the overloads in an deferred method
	AddLocations(map);
}

function CustomGetTileUrl(a,b) {
	var f = "http://mfgames.com/exalted/map/maps.php"
		+ "?x=" + a.x
		+ "&y=" + a.y
		+ "&z=" + (b - 1);
	return f;
}

function AddLocations(map)
{
	GDownloadUrl(markersXml, function(data, responseCode) {
  		var xml = GXml.parse(data);
  		var markers =
			xml.documentElement.getElementsByTagName("marker");

		for (var i = 0; i < markers.length; i++)
		{
			var marker = CreateMarker(markers[i]);
	    		map.addOverlay(marker);
	  	}
	});
}

function CreateMarker(marker)
{
	// Get the variables
	var lat = parseFloat(marker.getAttribute("lat")) + centerLat;
	var lng = parseFloat(marker.getAttribute("lng")) + centerLng;
	var point = new GLatLng(lat,lng);
	var icon = marker.getAttribute("icon");
	var html = marker.getAttribute("info");
	var label = marker.getAttribute("label");
	var iconName = marker.getAttribute("icon");

	if (iconName.Length == 0 || iconName == "unknown")
		iconName = "canon/unknown";

	// Create the marker
        var marker = new GMarker(point, icons[iconName]);

	// Add the info window
        GEvent.addListener(marker, "click",
		function()
		{
                	map.getCenter(point);
                        marker.openInfoWindowHtml(html);
            	});

	// Return the results
        return marker;
}

function CreateIcons()
{
	CreateIcon("canon/unknown");
	CreateIcon("canon/city");
	CreateIcon("canon/celestialgate");
}

function CreateIcon(name)
{
	// Create the icon
	var icon = new GIcon();
      	icon.image = iconPath + name + ".png";
      	icon.iconSize = new GSize(28, 28);
      	icon.shadow = shadowIconPath;
      	icon.shadowSize = new GSize(40, 28);
      	icon.iconAnchor = new GPoint(10, 26);
      	icon.infoWindowAnchor = new GPoint(26, 2);

	// Cache the icon
	icons[name] = icon;

/*
      	icon.transparent = "mytran.png";
      	icon.printImage = "mymarkerie.gif";
      	icon.mozPrintImage = "mymarkerff.gif";
      	icon.printShadow = "myshadow.gif";
*/
/*
      	icon.imageMap=[9,0,6,1,4,2,2,4,0,8,0,12,1,14,2,16,5,
       19,7,23,8,26,9,30,9,34,11,34,11,30,12,26,13,24,14,21,
       16,18,18,16,20,12,20,8,18,4,16,2,15,1,13,0];
*/
}
