﻿var caveMaps = 
{
  tree: null,
  map: null,
  regions: [nc2,nc3,nc1],
  myTileLayer: null,
//  greenIcon: null,
//  radioIcon: null,

  onCheckClick: function(node) 
  {
//    YAHOO.log(node.label + " check was clicked, new state: " + node.checkState, "info", "example");
    if (node.placeMark)
    {
      if (node.checkState==0)
      {
        caveMaps.map.removeOverlay(node.placeMark);
        caveMaps.map.closeInfoWindow();
      }
      else
      {
        caveMaps.map.addOverlay(node.placeMark);
        caveMaps.map.openInfoWindowHtml(node.placeMark.getPoint(),node.placeMark.name);
      }
    }
    else
    {
      for (var i=0; i<node.children.length; i++)
        if (node.checkState==0)
          caveMaps.map.removeOverlay(node.children[i].placeMark);
        else
          caveMaps.map.addOverlay(node.children[i].placeMark);
      caveMaps.map.closeInfoWindow();
    }
  },

  onLabelClick: function(node) 
  {
    if (node.placeMark)
    {
      caveMaps.map.openInfoWindowHtml(node.placeMark.getPoint(),node.placeMark.name);
      caveMaps.map.panTo(node.placeMark.getPoint()); 
      if (node.checkState==0)
      {
        caveMaps.map.addOverlay(node.placeMark);
        node.check();
      }
    }
  },
  
  tileToQuadKey: function( x, y, zoom)
  {
    var quad = "";
    for (var i = zoom; i > 0; i--){
        var mask = 1 << (i - 1);
        var cell = 0;
        if ((x & mask) != 0)
            cell++;
        if ((y & mask) != 0)
            cell += 2;
        quad += cell;
    }
    return quad;
  },

  createIcons: function()
  {
    caveMaps.redIcon = new GIcon();
    caveMaps.redIcon.image = "images/red.png";
    caveMaps.redIcon.shadow = "http://www.google.com/intl/en_ALL/mapfiles/shadow50.png";
    caveMaps.redIcon.iconSize = new GSize(20, 34);
    caveMaps.redIcon.shadowSize = new GSize(34,34);
    caveMaps.redIcon.iconAnchor = new GPoint(10, 34);
    caveMaps.redIcon.infoWindowAnchor = new GPoint(10, 34);

    caveMaps.yellowIcon = new GIcon();
    caveMaps.yellowIcon.image = "images/yellow.png";
    caveMaps.yellowIcon.shadow = "http://www.google.com/intl/en_ALL/mapfiles/shadow50.png";
    caveMaps.yellowIcon.iconSize = new GSize(20, 34);
    caveMaps.yellowIcon.shadowSize = new GSize(34,34);
    caveMaps.yellowIcon.iconAnchor = new GPoint(10, 34);
    caveMaps.yellowIcon.infoWindowAnchor = new GPoint(10, 34);

    caveMaps.greenIcon = new GIcon();
    caveMaps.greenIcon.image = "images/darkgreen.png";
    caveMaps.greenIcon.shadow = "http://www.google.com/intl/en_ALL/mapfiles/shadow50.png";
    caveMaps.greenIcon.iconSize = new GSize(20, 34);
    caveMaps.greenIcon.shadowSize = new GSize(34, 34);
    caveMaps.greenIcon.iconAnchor = new GPoint(10, 34);
    caveMaps.greenIcon.infoWindowAnchor = new GPoint(10,34);

    caveMaps.radioIcon = new GIcon();
    caveMaps.radioIcon.image = "images/radiomarker.png";
   // caveMaps.radioIcon.shadow = "images/mm_20_shadow.png";
    caveMaps.radioIcon.iconSize = new GSize(20, 20);
    caveMaps.radioIcon.shadowSize = new GSize(11, 10);
    caveMaps.radioIcon.iconAnchor = new GPoint(0, 20);
    caveMaps.radioIcon.infoWindowAnchor = new GPoint(0, 20);

    caveMaps.smallGreenIcon = new GIcon();
    caveMaps.smallGreenIcon.image = "images/smallgreen.png";
    caveMaps.smallGreenIcon.shadow = "images/smallshadow.png";
    caveMaps.smallGreenIcon.iconSize = new GSize(12,20);
    caveMaps.smallGreenIcon.shadowSize = new GSize(22,20);
    caveMaps.smallGreenIcon.iconAnchor = new GPoint(6,20);
    caveMaps.smallGreenIcon.infoWindowAnchor = new GPoint(6,0);

    caveMaps.smallRedIcon = new GIcon();
    caveMaps.smallRedIcon.image = "images/smallred.png";
    caveMaps.smallRedIcon.shadow = "images/smallshadow.png";
    caveMaps.smallRedIcon.iconSize = new GSize(12,20);
    caveMaps.smallRedIcon.shadowSize = new GSize(22,20);
    caveMaps.smallRedIcon.iconAnchor = new GPoint(6,20);
    caveMaps.smallRedIcon.infoWindowAnchor = new GPoint(6,0);

    caveMaps.smallOrangeIcon = new GIcon();
    caveMaps.smallOrangeIcon.image = "images/smallorange.png";
    caveMaps.smallOrangeIcon.shadow = "images/smallshadow.png";
    caveMaps.smallOrangeIcon.iconSize = new GSize(12,20);
    caveMaps.smallOrangeIcon.shadowSize = new GSize(22,20);
    caveMaps.smallOrangeIcon.iconAnchor = new GPoint(6,20);
    caveMaps.smallOrangeIcon.infoWindowAnchor = new GPoint(6,0);
  },
  
  regionSelect: function()
  {
    caveMaps.map.clearOverlays();
    caveMaps.map.addOverlay(caveMaps.myTileLayer);
    var sel = document.getElementById("regionSel");
    var caves = caveMaps.regions[sel.selectedIndex].areas; 
    

    caveMaps.tree = new YAHOO.widget.TreeView("tree");   
    for (var i = 0; i < caves.length; i++)
    {
      YAHOO.log(caves[i].area);
      var tmpNode = new YAHOO.widget.TaskNode(caves[i].area, caveMaps.tree.getRoot(), false);
    	for ( var j = 0; j < caves[i].caves.length; j++ )
    	{
  	  	var tmpNode1 = new YAHOO.widget.TaskNode(caves[i].caves[j].name, tmpNode, false);
  	  	var latlng = new GLatLng(caves[i].caves[j].lat,caves[i].caves[j].lng);
        if (caves[i].caves[j].type || caves[i].caves[j].fix)
          if (caves[i].caves[j].type=="Minor")
            if (caves[i].caves[j].fix=="GPS")
              tmpNode1.placeMark = new GMarker(latlng, { icon:caveMaps.smallGreenIcon });
            else if (caves[i].caves[j].fix=="M8")
              tmpNode1.placeMark = new GMarker(latlng, { icon:caveMaps.smallOrangeIcon });
            else
              tmpNode1.placeMark = new GMarker(latlng, { icon:caveMaps.smallRedIcon });
          else if (caves[i].caves[j].type=="Radio")
            tmpNode1.placeMark = new GMarker(latlng, { icon:caveMaps.radioIcon });
          else
            if (caves[i].caves[j].fix=="GPS")
              tmpNode1.placeMark = new GMarker(latlng, { icon:caveMaps.greenIcon });
            else if (caves[i].caves[j].fix=="M8")
              tmpNode1.placeMark = new GMarker(latlng, { icon:caveMaps.yellowIcon });
            else
              tmpNode1.placeMark = new GMarker(latlng, { icon:caveMaps.redIcon });
        else
          tmpNode1.placeMark = new GMarker(latlng, { icon:caveMaps.redIcon });
        tmpNode1.placeMark.name = caves[i].caves[j].name;
        GEvent.addListener(tmpNode1.placeMark, "click", function() {
                    caveMaps.map.openInfoWindowHtml(this.getPoint(),this.name)});
      }
    }
    caveMaps.tree.subscribe("checkClick", caveMaps.onCheckClick);    
    caveMaps.tree.subscribe("labelClick", caveMaps.onLabelClick);      
    caveMaps.tree.draw();   
  },
    
  unload: function()
  {
    GUnload();
  },
  
  load: function()
  {
 //   var myLogReader = new YAHOO.widget.LogReader();  
    if (GBrowserIsCompatible())
    {
      caveMaps.createIcons();
      caveMaps.map = new GMap2(document.getElementById("map"));
      caveMaps.map.addMapType(G_SATELLITE_3D_MAP);
      caveMaps.map.setCenter(new GLatLng(54.1672,-2.3827182852), 13);
      caveMaps.map.addControl(new GLargeMapControl());
      caveMaps.map.addControl(new GMapTypeControl());
      caveMaps.map.addControl(new GScaleControl());
      caveMaps.map.setMapType(G_SATELLITE_MAP);
      caveMaps.map.enableScrollWheelZoom();
  
 //     geoXml = new GGeoXml("http://mapgadgets.googlepages.com/cta.kml");
 //     caveMaps.map.addOverlay(geoXml);    
 //     caveMaps.map.setCenter(new GLatLng(41.875696,-87.624207), 11); 
    }
    else
      alert("Incompatible browser");
 
    var myCopyright = new GCopyrightCollection("© ");
    myCopyright.addCopyright(new GCopyright('cavemaps.org',
      new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)),0,'©2007 CaveMaps.org'));
    var tilelayer = new GTileLayer(myCopyright);
    tilelayer.getTileUrl = function (a,b) 
      {return  "tiles/" + caveMaps.tileToQuadKey(a.x,a.y,b) + ".png";};
    caveMaps.tileToQuadKey;
    tilelayer.isPng = function() { return true;};
    tilelayer.getOpacity = function() { return 1.0; }
    caveMaps.myTileLayer = new GTileLayerOverlay(tilelayer);

    var select = document.getElementById("regionSel");
    select.innerHTML = "";
 //   YAHOO.log(caveMaps.regions);
    for (i=0; i<caveMaps.regions.length; i++)
    {
      var opt = document.createElement('OPTION');
      opt.setAttribute('value',caveMaps.regions[i].name);
      var text = document.createTextNode(caveMaps.regions[i].name);
      opt.appendChild(text);
      select.appendChild(opt);
    }
    select.selectedIndex = 0;        
    caveMaps.regionSelect();
  }
};



