// Variables
centerLat = 5;
centerLng = -20;
minZoom = 0;
maxZoom = 6;
defaultZoom = 4;
markersXml = "/games/jaggedthrone/map/jagged-markers.xml";
iconPath = "/games/jaggedthrone/map/icons/";
shadowIconPath = "/games/jaggedthrone/map/icons/shadow.png";
mapBase = "/games/jaggedthrone/map/maps";
var map;
var icons = new Array();
var markerGroups = { "city": [], "celestialgate": [], "unknown": [], "jaggedthrone": [], "canon": []};

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

function LoadMap()
{
	// Set up the projection
	SetupProjection();

	// Set up the vector map
	var copyCollection = new GCopyrightCollection("Vector Map");
	var copyright = new GCopyright(1,
		new GLatLngBounds(
			new GLatLng(-90, -180),
			new GLatLng(90, 180)),
		minZoom, " &copy; 2007 Moonfire Games, White Wolf");
	copyCollection.addCopyright(copyright);
	var tilelayers = [new GTileLayer(copyCollection, minZoom, maxZoom)];
	tilelayers[0].getTileUrl = CustomGetTileUrl;

	var custommap = new GMapType(tilelayers,
		new EuclideanProjection(18),
		"Vector",
		{errorMessage:"No chart data available"});
	custommap.numZoomLevels = maxZoom - minZoom;

	// Set up the stephenls map
	var copyCollection2 = new GCopyrightCollection("Raster");
	var copyright2 = new GCopyright(1,
		new GLatLngBounds(
			new GLatLng(-90, -180),
			new GLatLng(90, 180)),
		minZoom, " &copy; 2007 White Wolf");
	copyCollection2.addCopyright(copyright2);
	var tilelayers2 = [new GTileLayer(copyCollection2, minZoom, maxZoom)];
	tilelayers2[0].getTileUrl = CustomGetTileUrl2;
	
	var custommap2 = new GMapType(tilelayers2,
		new EuclideanProjection(18),
		"Stephenls",
		{errorMessage:"No chart data available"});
	custommap2.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());
	map.addMapType(custommap);
	//map.enableContinuousZoom();

	// 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 = mapBase
		+ "?t=vector"
		+ "&x=" + a.x
		+ "&y=" + a.y
		+ "&z=" + (b - 1);
	return f;
}

function CustomGetTileUrl2(a,b) {
	var f = mapBase
		+ "?t=stephenls"
		+ "&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");
	
	var markersource = "canon";
	var markertype = "unknown";
	var nameparts = iconName.split('/');
	if(nameparts.length >=2)
	{
		var markersource = nameparts[0];
		var markertype = nameparts[1];	
	}
	
	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);
       	});

	//add to the groups;
	markerGroups[markertype].push(marker);
	//markerGroups[markersource].push(marker);
	
	// Return the results
        return marker;
}

function CreateIcons()
{
	CreateIcon("canon/unknown");
	CreateIcon("canon/city");
	CreateIcon("canon/celestialgate");
	
	CreateIcon("jagged-throne/unknown");
	CreateIcon("jagged-throne/city");
	CreateIcon("jagged-throne/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;
}

function toggleGroup(type) 
{
  for (var i = 0; i < markerGroups[type].length; i++) 
  {
    var marker = markerGroups[type][i];
    if (marker.isHidden()) 
    {
      marker.show();
    } 
    else 
    {
      marker.hide();
    }
  } 
}