// Load Background maps

var tileLayers = [];
var _mMapError;   // zzz added to get round error!  Remove before live!

function CustomGetTileUrl(a,b) {

   //var f = "http://localhost/mendip/colorterrain/z" + b + "x" + a.x + "y" + a.y + ".jpg";
   var f = "http://www.bdcc.co.uk/colorterrain/z" + b + "x" + a.x + "y" + a.y + ".jpg";
   return f;
}

function CustomGetTileUrl2(a,b) {

   //var f = "http://localhost/mendip/greyterrain/z" + b + "x" + a.x + "y" + a.y + ".jpg";
   var f = "http://www.bdcc.co.uk/greyterrain/z" + b + "x" + a.x + "y" + a.y + ".jpg";
   return f;
}

function CustomGetTileUrl3(a,b) {

   //var bk = "http://localhost/mendip/blank.jpg";
    var bk = "http://www.bdcc.co.uk/blank.jpg";
   if((b<6)||(b>8))
      return bk;
   else if(b==6){
      if((a.x<30)||(a.x>32)||(a.y<18)||(a.y>21))
         return bk;
      }
   else if(b==7){
      if((a.x<61)||(a.x>64)||(a.y<37)||(a.y>43))
         return bk;
      }
   else if(b==8){
      if((a.x<122)||(a.x>129)||(a.y<75)||(a.y>87))
         return bk;
      }

   return "http://www.bdcc.co.uk/tothesea/z" + b + "x" + a.x + "y" + a.y + ".jpg";
   //return "http://localhost/tothesea/z" + b + "x" + a.x + "y" + a.y + ".jpg";
}

function CustomGetTileUrl4(a,b) {

   //var f = "http://localhost/oldostiled/z" + b + "x" + a.x + "y" + a.y + ".png";
   var f = "http://www.bdcc.co.uk/oldos/z" + b + "x" + a.x + "y" + a.y + ".png";
   return f;
}

//*******************************************************************************

function map_setup() {
            //MS VE
         var TileToQuadKey = function ( tx,  ty,  zl){
            var quad;
            quad = "";
            for (var i = zl; i > 0; i--){
               var mask = 1 << (i - 1);
               var cell = 0;
               if ((tx & mask) != 0)
                  cell++;
               if ((ty & mask) != 0)
                  cell += 2;
               quad += cell;
            }
            return quad;
         };

         // Google
         function  GTileToQuadKey ( tx,  ty,  zl){
            var quad;
            quad = "t";
            for (var i = zl; i > 0; i--){
               var mask = 1 << (i - 1);
               var cell;
               if (((tx & mask) == 0) && ((ty & mask) == 0))
                  cell = "q";
               else if (((tx & mask) != 0) && ((ty & mask) == 0))
                  cell = "r";
               else if (((tx & mask) == 0) && ((ty & mask) != 0))
                  cell = "t";
               else
                  cell = "s";

               quad += cell;
            }
            return quad;
         }


//**********************************************************************************
// 3 - Google Terrain Map
        map.addMapType(G_PHYSICAL_MAP);                        // Terrain Map


// Play with Zooms  - zzz remove
  //      map.addMapType(G_SATELLITE_MAP, G_SATELLITE_MAP.getProjection(), "super-zoom", { maxResolution: "30"} ); 

//GMapType( tileLayers, G_SATELLITE_MAP.getProjection(), name, { errorMessage: _mMapError, urlArg: 'o' } ); 
//GMapType( tileLayers, G_SATELLITE_MAP.getProjection(), "super-zoom", { maxResolution: "30", errorMessage: "Errorxxx", urlArg: 'o' } ); 
// http://groups.google.com/group/Google-Maps-API/browse_thread/thread/d0277d8373110678/08940a81c71e6ab3?lnk=gst&q=topo&rnum=7

//**********************************************************************************
// 4 - Microsoft Virtual Earth
         var msveLayerA = new GTileLayer(new GCopyrightCollection(''),1,19);
         var msveMapA = new GMapType([msveLayerA],
            G_SATELLITE_MAP.getProjection(), 'MS VE Aerial',{errorMessage:_mMapError});
         var msveTileA = function(a, b){
            var sTile = TileToQuadKey(a.x,a.y,b);
            s = 'http://a';
            s += sTile.substring(sTile.length-1, sTile.length);
            s += '.ortho.tiles.virtualearth.net/tiles/a';
            s += sTile;
            s += '.jpeg?g=1';
            return s;
         };
         msveLayerA.getTileUrl = msveTileA;
         msveLayerA.getCopyright = function(a,b) {return 'MS Virtual Earth';};
         msveMapA.getTextColor = function() {return "#FFFFFF";};
         map.addMapType(msveMapA);

//**********************************************************************************
// 5 - Crosshairs - From Google API code 
//     http://maps.google.co.uk/apis/maps/documentation/examples/tileoverlay-simple.html
        var myCopyright = new GCopyrightCollection("(c) ");
        myCopyright.addCopyright(new GCopyright('Demo',
          new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)),
          0,'©2007 Google'));

        // Create the tile layer overlay and
        // implement the three abstract methods
        var tilelayer = new GTileLayer(myCopyright);
        tilelayer.getTileUrl = function() { return "\graphics\pins\tile_crosshairs.png"; };
        tilelayer.isPng = function() { return true;};
        tilelayer.getOpacity = function() { return 1.0; };

        var myTileLayer = new GTileLayerOverlay(tilelayer);
 //       var map = new GMap2(document.getElementById("map"));
 //       map.setCenter(new GLatLng(37.4419, -122.1419), 13);
//        map.addControl(new GSmallMapControl());
//        map.addOverlay(myTileLayer);
 //       map.addMapType(myTileLayer);

//**********************************************************************************
         var oldSatGet = function(a, b){
                return "http://kh3.google.com/kh?n=404&v=18&cookie=fzwq1O3Uef1tPIgl48Cd6b9L1Vd9VGyq0Rm0ZA&t=" + GTileToQuadKey(a.x,a.y,b);
         };

          var oldSatLayer = new GTileLayer(new GCopyrightCollection(''),1,20);
          oldSatLayer.getTileUrl = oldSatGet;
//          oldSatLayer.getCopyright = G_SATELLITE_MAP.getCopyright; //iffy
          oldSatLayer.getCopyright = function(a,b) {return 'Google and partners';};
          var oldSatMap = new GMapType([oldSatLayer],
          G_SATELLITE_MAP.getProjection(), 'Old Satellite',{errorMessage:_mMapError});
          oldSatMap.getTextColor = function() {return "#FFFFFF";};
          map.addMapType(oldSatMap);

//**********************************************************************************

         var copyright = new GCopyright(1,
                              new GLatLngBounds(new GLatLng(-90, -180),
                                                new GLatLng(90, 180)),
                              0,
                              "From <a href='http://www2.jpl.nasa.gov/srtm/'> SRTM");
           var copyrightCollection = new GCopyrightCollection('Terrain');
         copyrightCollection.addCopyright(copyright);

         var terCol = function (a,b) {
            //var f = "http://localhost/mendip/colorterrain/" + TileToQuadKey(a.x,a.y,b) + ".jpg";
            var f = "http://www.bdcc.co.uk/colorterrain/" + TileToQuadKey(a.x,a.y,b) + ".jpg";
            return f;
         };
         tileLayers[0] = [];
         tileLayers[0][0] = new GTileLayer(copyrightCollection , 8, 14);
         tileLayers[0][0].getTileUrl = terCol;
         tileLayers[0][0].isPng = function() {return false;};
         var custommap0 = new GMapType(tileLayers[0], G_NORMAL_MAP.getProjection(), "Colour Terrain", {errorMessage:"No colour terrain data available"});
         map.addMapType(custommap0);

//**********************************************************************************

         var terGry = function (a,b) {
            //var f = "http://localhost/mendip/greyterrain/" + TileToQuadKey(a.x,a.y,b) + ".jpg";
            var f = "http://www.bdcc.co.uk/greyterrain/" + TileToQuadKey(a.x,a.y,b) + ".jpg";
            return f;
         };
         tileLayers[1] = [];
         tileLayers[1][0] = new GTileLayer(copyrightCollection , 8, 14);
         tileLayers[1][0].getTileUrl = terGry;
         tileLayers[1][0].isPng = function() {return false;};
         var custommap1 = new GMapType(tileLayers[1], G_NORMAL_MAP.getProjection(), "Grey Terrain", {errorMessage:"No grey terrain data available"});
         map.addMapType(custommap1);

//**********************************************************************************
         var copyright2 = new GCopyright(1,
                              new GLatLngBounds(new GLatLng(-90, -180),
                                                new GLatLng(90, 180)),
                              0,
                              "From <a href='http://www.ngdc.noaa.gov/mgg/shorelines/gshhs.html'> GSHHS");
                   var copyrightCollection2 = new GCopyrightCollection('To The Sea');
         copyrightCollection2.addCopyright(copyright2);


         tileLayers[2] = [];
         tileLayers[2][0] = new GTileLayer(copyrightCollection2 , 6, 8);
         tileLayers[2][0].getTileUrl = CustomGetTileUrl3;
         tileLayers[2][0].isPng = function() {return false;};
         var custommap2 = new GMapType(tileLayers[2], G_NORMAL_MAP.getProjection(), "ToTheSea", {errorMessage:"No to the sea data available"});
         map.addMapType(custommap2);

//**********************************************************************************

         var copyright3 = new GCopyright(1,
                              new GLatLngBounds(new GLatLng(-90, -180),
                                                new GLatLng(90, 180)),
                              0,
                              "From <a href='http://www.somerset.gov.uk/archives/Maps.htm'> Somerset.gov.uk</a>");

            var copyrightCollection3 = new GCopyrightCollection('Old OS');
         copyrightCollection3.addCopyright(copyright3);


         tileLayers[3] = [];
         tileLayers[3][0] = new GTileLayer(copyrightCollection3 , 15, 16);
         tileLayers[3][0].getTileUrl = CustomGetTileUrl4;
         tileLayers[3][0].isPng = function() {return false;};
         var custommap3 = new GMapType(tileLayers[3], G_NORMAL_MAP.getProjection(), "Old OS", {errorMessage:"No old OS data available"});
         map.addMapType(custommap3);

//**********************************************************************************

         var msveTileB = function(a, b){
             return msveTileA(a,b-1);
          };
          var msveLayerB = new GTileLayer(new GCopyrightCollection(''),1,19);
          msveLayerB.getTileUrl = msveTileB;
          msveLayerB.getCopyright = function(a,b) {return 'MS Virtual Earth';};
          var msveMapB = new GMapType([msveLayerB],
          G_SATELLITE_MAP.getProjection(), 'MS VE Aerial x 2',{errorMessage:_mMapError});
          msveMapB.getTextColor = function() {return "#FFFFFF";};
           msveMapB.getTileSize = function() { return 512; };
          map.addMapType(msveMapB);

//**********************************************************************************

 //  Change map to MSVEMapB under certain zoom conditions
         GEvent.addListener(map, "zoomend", function(a,b) {
             if((b == 19) && (map.getCurrentMapType() == msveMapA))
                 map.setMapType(msveMapB);
             else if((b < 19)&& (map.getCurrentMapType() == msveMapB))
                 map.setMapType(msveMapA);

             window.status = map.getCurrentMapType().getName() + ", zoom " + map.getZoom();
         });

         GEvent.addListener(map, "maptypechanged", function() {
             if((map.getZoom() == 19) && (map.getCurrentMapType() == msveMapA))
                 map.setMapType(msveMapB);
             window.status = map.getCurrentMapType().getName() + ", zoom " + map.getZoom();
         });

//**********************************************************************************


         tileLayers[4] = [];
                        tileLayers[4][0] = G_SATELLITE_MAP.getTileLayers()[0];

//**********************************************************************************

         tileLayers[5] = [];
                        tileLayers[5][0] = G_NORMAL_MAP.getTileLayers()[0];

//**********************************************************************************

         tileLayers[6] = [];
                        tileLayers[6][0] = msveMapA .getTileLayers()[0];

//**********************************************************************************

         var caveTiles = function (a,b) {
            //var f = "http://localhost/mendip/cavelayer/" + TileToQuadKey(a.x,a.y,b) + ".png";
            var f = "http://www.bdcc.co.uk/cavelayer/" + TileToQuadKey(a.x,a.y,b) + ".png";
            return f;
         };
         tileLayers[7] = [];
         tileLayers[7][0] = new GTileLayer(copyrightCollection , 12, 19);
         tileLayers[7][0].getTileUrl = caveTiles;
         if(navigator.userAgent.indexOf("MSIE") == -1)
            tileLayers[7][0].isPng = function() {return true;};

//**********************************************************************************


         var sssiTiles = function (a,b) {
            //var f = "http://localhost/mendip/sssi/" + TileToQuadKey(a.x,a.y,b) + ".png";
            var f = "http://www.bdcc.co.uk/sssi/" + TileToQuadKey(a.x,a.y,b) + ".png";
            return f;
         };
         tileLayers[8] = [];
         tileLayers[8][0] = new GTileLayer(copyrightCollection , 12, 18);
         tileLayers[8][0].getTileUrl = sssiTiles;
         tileLayers[8][0].getCopyright = function(a,b) {return 'Images kindly provided by English Nature via <a href="http://www.magic.gov.uk/">Magic</a>. © Crown Copyright. All rights reserved 2006';};
         tileLayers[8][0].getTextColor = function() {return "#000000";};
         if(navigator.userAgent.indexOf("MSIE") == -1)
            tileLayers[8][0].isPng = function() {return true;};
         var sssiMap = new GMapType(tileLayers[8], G_NORMAL_MAP.getProjection(), "SSSI", {errorMessage:""});
         map.addMapType(sssiMap);

//**********************************************************************************

         var osChartTileB = function(a, b){
            var sTile = TileToQuadKey(a.x,a.y,b);
            s = 'http://www.bdcc.co.uk/os25k/';
            s += sTile;
            s += '.jpg';
            return s;
         };
         var osLayerB = new GTileLayer(new GCopyrightCollection(''),10,16);
         osLayerB.getTileUrl = osChartTileB;
         osLayerB.getCopyright = function(a,b) {return 'Images produced from the Ordnance Survey <a href="http://www.ordnancesurvey.co.uk/getamap">Get-a-map</a> service. Images reproduced with kind permission of <a href="http://www.ordnancesurvey.co.uk/">Ordnance Survey</a> and <a href="http://www.osni.gov.uk/">Ordnance Survey of Northern Ireland</a>. ';};
         osLayerB.isPng = function() {return false;};

         var osMapB = new GMapType([osLayerB],
         G_SATELLITE_MAP.getProjection(), 'OS 1:25K',{errorMessage:_mMapError});
         osMapB.getTextColor = function() {return "#000000";};
         map.addMapType(osMapB);

//**********************************************************************************


            var npeTiles = function (a,b){
            //var f = "http://localhost/mendip/npeOs/" + TileToQuadKey(a.x,a.y,b) + ".png";
            var f = "http://www.bdcc.co.uk/npeOs/" + TileToQuadKey(a.x,a.y,b) + ".png";
            return f;
            };

         tileLayers[9] = [];
         tileLayers[9][0] = new GTileLayer(copyrightCollection , 10, 13);
         tileLayers[9][0].getTileUrl = npeTiles;
         tileLayers[9][0].getCopyright = function(a,b) {return '1940s OS map tiles from <a href="http://www.npemap.org.uk/">npemap.org.uk</a> under <a href="http://www.npemap.org.uk/tileLicence.html">license> </a>';};
         tileLayers[9][0].getTextColor = function() {return "#000000";};
         if(navigator.userAgent.indexOf("MSIE") == -1)
            tileLayers[9][0].isPng = function() {return true;};
         var npeMap = new GMapType(tileLayers[9], G_NORMAL_MAP.getProjection(), "1940s OS", {errorMessage:""});
         map.addMapType(npeMap);

//**********************************************************************************

} // End fn map_Setup

//**********************************************************************************

function add_Map() {
  var mapSelected = document.getElementById ('new_map').value;
  var mts = map.getMapTypes();
  map.setMapType(mts[mapSelected]);
}
