function currentMapTypeIndex(aMap)
{
  var currentMap = aMap.getCurrentMapType();
  var mapTypes = aMap.getMapTypes();
  for (var i in mapTypes)
  {
     if (mapTypes[i] == currentMap)
     {
       return i;
     }
  }
  return -1;
} 

// == get the URL (for Google map's API's use)
function getUrlBlue(latlong, oldzoom, column, normalizer, min, max)
{
   return getURLWithScript(latlong, oldzoom, column, normalizer, min, max, "censusMapBlue")
}

function getUrl2(latlong, oldzoom, column, normalizer, min, max)
{
   return getURLWithScript(latlong, oldzoom, column, normalizer, min, max, "censusMap")
}

function getURLWithScript(latlong, oldzoom, column, normalizer, min, max, script)
{
    
    script = script.replace(/ /g, "+");	// TODO need to make all safe
    script = script.replace(/\//g, "");	
    script = script.replace(/\\/g, "");	
    script = script.replace(/\\/g, "");	
    script = script.replace(/\!/g, "");	
    script = script.replace(/\?/g, "");	

    var x=latlong.x;
    var y=latlong.y;
    var newzoom = 17 - oldzoom;   // Someday I will have to switch the zoom levels, but not right now
    return "/cgi-bin/"+script+"?column="+column+"&normalizer="+normalizer+"&min="+min+"&max="+max+"&x="+x+"&y="+y+"&zoom="+newzoom;
}

// == get the URL (for Google map's API's use)
function getURLBlue(latlong, zoom, column, normalizer, min, max)
{
    var x=latlong.x;
    var y=latlong.y;
    var newzoom = zoom;   // switched to use newzoom, yay
    // return getURL(column, normalizer, min, max, x, y, zoom);
    return "/cgi-bin/censusMapBlue?column="+column+"&normalizer="+normalizer+"&min="+min+"&max="+max+"&x="+x+"&y="+y+"&zoom="+newzoom;
}

// == get the URL (for Google map's API's use)
function getUrl(latlong, zoom, column, normalizer, min, max, colour)
{
    var x=latlong.x;
    var y=latlong.y;
    var newzoom = zoom;   // switched to use newzoom, yay
    // return getURL(column, normalizer, min, max, x, y, zoom);
    return "/cgi-bin/censusMap"+colour+"?column="+column+"&normalizer="+normalizer+"&min="+min+"&max="+max+"&x="+x+"&y="+y+"&zoom="+newzoom;
}

// == get the URL (for Google map's API's use)
function getURL(latlong, zoom, column, normalizer, min, max)
{
    var x=latlong.x;
    var y=latlong.y;
    var newzoom = zoom;   // switched to use newzoom, yay
    // return getURL(column, normalizer, min, max, x, y, zoom);
    return "/cgi-bin/censusMap?column="+column+"&normalizer="+normalizer+"&min="+min+"&max="+max+"&x="+x+"&y="+y+"&zoom="+newzoom;
}

// move to choropleth...
function getNewUrl(latlong, zoom, baseUrl,
                   jurisdictionType, fieldName, year, 
		   mapping, minColour, maxColour, minValue, maxValue)
{
  return getNormalizedUrl(latlong, zoom, baseUrl,
                   jurisdictionType, fieldName, year, 
		   mapping, minColour, maxColour, minValue, maxValue,
		   "null", 0, "n")
}

function getNormalizedUrl(latlong, zoom, baseUrl,
                   jurisdictionType, fieldName, year, 
		   mapping, minColour, maxColour, minValue, maxValue,
		   normalizer, normalizerYear, normalizerType)
{
    var testUrl;
    var x=latlong.x;
    var y=latlong.y;
    testUrl = baseUrl+ 
              "x="+x+"&y="+y+"&zoom="+zoom +
              "&polyType="+jurisdictionType+
	      "&table="+jurisdictionType+"Attributes"+
	      "&field="+fieldName+
	      "&year="+year+
	      "&normalizer="+normalizer+
	      "&normalizerYear="+normalizerYear+
	      "&normalizerType="+normalizerType+
	      "&mapping="+mapping+
	      "&minColour="+minColour+
	      "&maxColour="+maxColour+
	      "&minValue="+minValue+
	      "&maxValue="+maxValue;
    // GLog.write(testUrl);
    return testUrl;
}


// Add all the layers to the map
function addHybridLayers(aMap, tileUrls, centerPoint, zoom, passedMapIndex)
{
  var tilelayers = [];
  var hybridLayer = [];
  var hybrid = [];

  for (var mapIndex in tileUrls)
  {
    tilelayers[mapIndex] = new GTileLayer(new GCopyrightCollection("Kaitlin Duck Sherwood"),5,15);
    // tilelayers[mapIndex].getCopyright = function(a,b) {return "Kaitlin Duck Sherwood with US Census Bureau data";}
    tilelayers[mapIndex].getCopyright = function(a,b) { return {prefix:"Imagery: &#169; 2006", copyrightTexts:["K. Duck Sherwood"]}; }
    tilelayers[mapIndex].getTileUrl = tileUrls[mapIndex];

    hybridLayer[mapIndex] = [
       tilelayers[mapIndex],                  // a reference to the tile layer from the first custom map
       G_HYBRID_MAP.getTileLayers()[1] // a reference to the upper tile layer of the hybrid map
    ];
    hybrid[mapIndex] = new GMapType(hybridLayer[mapIndex], G_SATELLITE_MAP.getProjection(), label[mapIndex], {maxResolution:15,minResolution:5,errorMessage:"Coudn't fetch tile..."});

    aMap.addMapType(hybrid[mapIndex]);
  }
  aMap.setCenter(centerPoint, zoom, hybrid[0]);
  aMap.setMapType(aMap.getMapTypes()[passedMapIndex]);
}  

// This changes the link-to-this-view link
function changePersistentLink(aMap, fileName)
{
    var persistentLink = document.getElementById("persistentLink");
    var center = aMap.getCenter();
    var zoomLevel = aMap.getZoom();
    var mapIndex = currentMapTypeIndex(aMap);
    persistentLink.href = "./"+fileName+"?lat="+ center.y + "&long="+center.x+"&zoom="+zoomLevel+"&mapIndex="+mapIndex;
}

function addListenersToMap(aMap, fileName)
{
  // ====================================================
  // TODO: could this go in a library?
  GEvent.addListener(aMap, "zoom", function() 
  {
    changePersistentLink(aMap, fileName);
  });

  GEvent.addListener(aMap, "moveend", function() 
  {
    changePersistentLink(aMap, fileName);
  });

  GEvent.addListener(aMap, "maptypechanged", function() 
  {
    changePersistentLink(aMap, fileName);
  });
}

