// index.js

var objMap;
var obj6kmOver;
var obj2kmOver;
var obj1kmOver;
var objImgOver;
var objKmlOver;


// Form field elements
var fAveraged = 1;
var fTimestamp = 0;

function initPage() { 
  var el = document.getElementById("Gmap");
  if(!el) {
    alert("This page was not made for google maps.");
    return;
  }
  if(!GBrowserIsCompatible()) {
    alert("Your browser is not compatible with Google Maps v2");
    return false;
  }
  objMap = new GMap2(el);
  g_initMap();
  g_initLayers();
  h_setStartTime();
  g_initEvents();
  h_formChanged();
}


function g_initEvents() { 
  var el = document.getElementById("controls");
  if( !el ) { 
    return false;
  }
  var inputs = el.getElementsByTagName("input");
  for(var i=0;i<inputs.length;i++) { 
    inputs[i].onclick = function() { this.blur(); }
    inputs[i].onchange = h_formChanged;
  }
}


/*
 * g_getTileUrl(point,zoom)
 * As specified by the Google Maps v2 documentation, this function
 *   returns a url of the image to be returned.
 * This implementation builds a bounding box into the query string
 *   of the image-generating script referred to by the url.
 */
function g_getTileUrl(point,zoom,res) { 
  var url = 'http://sandbar.ucsd.edu/rtv-tiles/tile.php?xt='
     +point.x+'&yt='+point.y+'&zt='+zoom+
    '&time='+fTimestamp+'&avgs='+fAveraged+
    '&res='+res+'&rng=0,50';
  return url;
}

function h_get1kmUrl(p,z) { 
  return g_getTileUrl(p,z,'1km');
}
function h_get2kmUrl(p,z) { 
  return g_getTileUrl(p,z,'2km');
}
function h_get6kmUrl(p,z) { 
  return g_getTileUrl(p,z,'6km');
}


function h_setStartTime() { 
  // Alg: Read xml file with layer status

  GDownloadUrl("/data/hfrnet/xml/tilesStatus.php", function(data,code) { 
    if(code == 200 || code == 304) { 
      var xml = GXml.parse(data);
      var tiles;
      if(xml.documentElement) { 
        tiles = xml.documentElement.getElementsByTagName("tiles");
      } else { 
        xml = document.createElement("div");
        xml.innerHTML = data;
        tiles = xml.getElementsByTagName("tiles");
      }
      var fTimestampBefore = fTimestamp;
      for(var i=0;i<tiles.length;i++) { 
        var tilePfx  = tiles[i].getAttribute("pfx");
        var tileRes  = tiles[i].getAttribute("res");
        var tileTime = tiles[i].getAttribute("time");
        if( ( '6km' != tileRes ) ||
            (   fAveraged && tilePfx != 'a' ) ||
            (  !fAveraged && tilePfx != 'h' ) ){ 
          continue;
        }

        // set fTimestamp to new time, 
        fTimestamp = tileTime;
        break;
      }

      if(fTimestampBefore != fTimestamp) { 
        // Hack because USEGC is usually 1 hour behind
        fTimestamp -= 3600;

        g_updateDisplay();
      }
    }
  });
}

Date.prototype.toUTCString = function() { 
  var Y = this.getUTCFullYear();
  var m = this.getUTCMonth()+1;
  if(m < 10) { m = "0" + m; }

  var d = this.getUTCDate();
  if(d < 10) { d = "0" + d; }

  var H = this.getUTCHours();
  if(H < 10) { H = "0" + H; }

  var M = this.getUTCMinutes();
  if(M < 10) { M = "0" + M; }

  var S = this.getUTCSeconds();
  if(S < 10) { S = "0" + S; }

  var Z = "UTC";

  return (Y+"-"+m+"-"+d+" "+H+":"+M+":"+S+" "+Z);
}



function g_updateDisplay() { 
  objMap.removeOverlay(obj6kmOver);
  objMap.removeOverlay(obj2kmOver);
  objMap.removeOverlay(obj1kmOver);
  objMap.removeOverlay(objImgOver);
  objMap.removeOverlay(objKmlOver);

  if( obj6kmOver.visible ) { 
    objMap.addOverlay(obj6kmOver);
  }
  if( obj2kmOver.visible ) { 
    objMap.addOverlay(obj2kmOver);
  }
  if( obj1kmOver.visible ) { 
    objMap.addOverlay(obj1kmOver);
  }
  if( objImgOver.visible ) { 
    objMap.addOverlay(objImgOver);
  }
  if( objKmlOver.visible ) { 
    objMap.addOverlay(objKmlOver);
  }

  var el = document.getElementById("showTime");
  if( el && typeof(el) != "undefined" ) { 
    var d = new Date(fTimestamp*1000);
    el.innerHTML = d.toUTCString();
  }
}

function h_formChanged() { 
  var frm = document.forms[0];

  obj6kmOver.visible = frm["res6km"].checked;
  obj2kmOver.visible = frm["res2km"].checked;
  obj1kmOver.visible = frm["res1km"].checked;
  objImgOver.visible = frm["imOver"].checked;
  objKmlOver.visible = frm["kmOver"].checked;
  fAveraged = (frm["useStep"][0].checked) ? 1 : 0;
  g_updateDisplay();
}


function g_getOpacity() { 
  return 0.9;
}

function g_getCopyright(a,b) { 
  return {prefix:"RTV's",copyrightTexts:["HFRNet"]};
}

function g_isPng() { 
  return true;
}

function g_initLayers() { 
  var h = new GTileLayer(new GCopyrightCollection(),0,17);
  h.getTileUrl = h_get6kmUrl;
  h.getOpacity = g_getOpacity;
  h.getCopyright = g_getCopyright;
  h.isPng = g_isPng;

  obj6kmOver = new GTileLayerOverlay(h);
  obj6kmOver.visible = false;

  var i = new GTileLayer(new GCopyrightCollection(),0,17);
  i.getTileUrl = h_get2kmUrl;
  i.getOpacity = g_getOpacity;
  i.getCopyright = g_getCopyright;
  i.isPng = g_isPng;

  obj2kmOver = new GTileLayerOverlay(i);
  obj2kmOver.visible = false;

  var j = new GTileLayer(new GCopyrightCollection(),0,17);
  j.getTileUrl = h_get1kmUrl;
  j.getOpacity = g_getOpacity;
  j.getCopyright = g_getCopyright;
  j.isPng = g_isPng;

  obj1kmOver = new GTileLayerOverlay(j);
  obj1kmOver.visible = false;

  objImgOver = new GImageOverlay('images/ocsdBasemap_200805.jpg');
  objImgOver.setBounds(33.6726,-117.857,33.5413,-118.062);
  objImgOver.visible = false;

  objKmlOver = new GGeoXml('http://www.sccoos.org/projects/ocsd-diversion/data/OCSD.kml');
  objKmlOver.visible = false;
}

function g_advanceSeconds(s) { 
  fTimestamp += s;
  g_updateDisplay();
}

function g_initMap() { 
  objMap.addMapType(G_PHYSICAL_MAP);
  objMap.addControl(new GSmallMapControl());
  objMap.addControl(new GHierarchicalMapTypeControl());
  objMap.setCenter(new GLatLng(33.61472,-117.97153), 10);
  objMap.setMapType(G_NORMAL_MAP);
}


function h_alongshorePlot() { 
  var el = document.getElementById("alongshore_plot_sel");
  var sta = (!el) ? "OC464" : el.value;

  el = document.getElementById("alongshore_plot");
  if( !el ) { 
    return;
  }
  el.src = "http://www.sccoos.org/projects/ocsd-diversion/data/surfzone/hb_hsVm.php?sta="+sta+"&width=500&height=180";
  el.setAttribute("alt",sta+" - Surfzone Currents and conditions");
}

window.onload = initPage;
