﻿var ge = null;
var _zoomSpeed = .2;
var _dataLoader = false;

function init() {
      google.earth.createInstance("map", initCB, failureCB);      
}

function initCB(object) {
      ge = object;
      ge.getWindow().setVisibility(true);
      registerEvents();
      moveGE(38.5,-98.6,15000, 0, 0, 3800000, .2)
      loadData()
}

function loadData(){
      if (_dataLoader == false) {return;}
       NetWorkLink(_initialLoad.name,_initialLoad.description,_initialLoad.id,_initialLoad.zoomTo,_initialLoad.href)
}


function toggleGeVisible(on){
      ge.getWindow().setVisibility(on);
}

function failureCB(object) {}

function toggleGELayers(id,check){
      if (ge == null) {return;}
      try{
            if (id == 'geBoundaries') {ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, check);}
            if (id == 'geBuildings') {ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, check);}
            if (id == 'geRoads') {ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, check);}
            if (id == 'geTerrain') {ge.getLayerRoot().enableLayerById(ge.LAYER_TERRAIN, check);}           
      }
      catch (e) {
            alert("There was an error loading " + id);
      }
}

function toggleGEOptions(id,check){
      if (ge == null) {return;}
      if (node.name == 'geAtmosphere'){ge.getOptions().setAtmosphereVisibility(check);}
      if (node.name == 'geGrid'){ge.getOptions().setGridVisibility(check);}
      if (node.name == 'geOverviewMap'){ge.getOptions().setOverviewMapVisibility(check);}
      if (node.name == 'geScaleLegend'){ge.getOptions().setScaleLegendVisibility(check);}
      if (node.name == 'geStatusBar'){ge.getOptions().setStatusBarVisibility(check);}    
      if (node.name == 'geNavigation'){     
            if (check) {
                ge.getNavigationControl().setVisibility(ge.VISIBILITY_SHOW);
              } else {
                ge.getNavigationControl().setVisibility(ge.VISIBILITY_HIDE);
              }
      }      
}

function geOptions(id, value){
    var options = ge.getOptions();
    if (id == "geStatusBar") {options.setStatusBarVisibility(value);}
    if (id == "geGrid") {options.setGridVisibility(value);}    
    if (id == "geOverviewMap") {options.setOverviewMapVisibility(value);}
    if (id == "geScaleLegend") {options.setScaleLegendVisibility(value);}
    if (id == "geAtmosphere") {options.setAtmosphereVisibility(value);}
    if (id == "geNavigation") {
        if (value) {ge.getNavigationControl().setVisibility(ge.VISIBILITY_SHOW);}
        else{ge.getNavigationControl().setVisibility(ge.VISIBILITY_HIDE);}
    }      
    //options.setMouseNavigationEnabled(form.mouseNav.checked);
}

function registerEvents(){
      // This will trigger GlobeEventListener() when user clicks on 'placemark'
      //google.earth.addEventListener(placemark, "mousedown", GlobeEventListener);
      // This will trigger GlobeEventListener() when user clicks on the globe
      //ge.addEventListener(ge.getGlobe(), "mousedown", GlobeEventListener);
      // This will trigger GlobeEventListener() when user clicks anywhere in the window
      google.earth.addEventListener(ge.getWindow(), "mousedown", GlobeEventListener);
      google.earth.addEventListener(ge.getWindow(), "mousemove", MoveEventListener);
}

function GlobeEventListener(event) {
      var geevent = setEvent(event);
      alert(e.targetType.toString());
      if (e.targetType == KmlPlacemark)
      {
            alert(e.latitude.toString());
      }
      
}

function MoveEventListener(event){
      var e = setEvent(event);
      var l = e.latitude;
      var ll =  e.longitude;
      var msg = "Latitude: " + l.toFixed(8) + "  Longitude: " + ll.toFixed(8) ;
      document.getElementById("mapFooter").innerHTML = msg;
}

function getPlaceMarkAtts(placemark){

}

function setEvent(event){
      var e = new GEEvent();
      e.targetType = event.getTarget().getType();
      e.currentTargetType = event.getCurrentTarget().getType();
      e.button = event.getButton();
      e.clientX = event.getClientX();
      e.clientY = event.getClientY();
      e.screenX = event.getScreenX();
      e.screenY = event.getScreenY();
      e.latitude = event.getLatitude();
      e.longitude = event.getLongitude();
      e.altitude = event.getAltitude();
      e.didHitGlobe = event.getDidHitGlobe();
      e.altKey = event.getAltKey();
      e.ctrlKey = event.getCtrlKey();
      e.shiftKey = event.getShiftKey();
      e.timeStamp = event.getTimeStamp();    
      return e;
}

function GEEvent(){
      var targetType;
      var currentTargetType;
      var button;
      var clientX;
      var clientY;
      var screen;
      var screenY;
      var latitude;
      var longitude;
      var altitude;
      var didHitGlobe;
      var altKey;
      var ctrlKey;
      var shiftKey;
      var timeStamp;    
}

function moveGE(lat,lng,alt,heading,tilt,range,speed){      
      var la = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND); 
       ge.getOptions().setFlyToSpeed(speed);
      la.set(lat, lng, alt, ge.ALTITUDE_RELATIVE_TO_GROUND, heading , tilt , range); 
       ge.getView().setAbstractView(la); 
       ge.getOptions().setFlyToSpeed(_zoomSpeed);      
}

function loadKML(url){     
      google.earth.fetchKml(ge, url, finished);
}
    
function finished(object) {
      if (!object) {
            alert('bad or NULL kml');
            return;
      }
      ge.getFeatures().appendChild(object);      
}

function enableMapNavigation(yes) {ge.getOptions().setMouseNavigationEnabled(yes);}

function bBox (north,south,east,west)
{
      this.n = north;
      this.s = south;
      this.e = east;
      this.w = west;
      this.bb = bBoxString(this);
}

function bBoxString(Box){
      return Box.w.toString() + "," + Box.s.toString() + "," + Box.e.toString() + "," + Box.n.toString()
}

function generateQuadOverlayfromWMS(node){
      var _usBB = true
      var w = node.attributes.minx;
      var s = node.attributes.miny;
      var e = node.attributes.maxx;
      var n = node.attributes.maxy;
      
      if (_usBB == true){
            w = -130;
            s = 24;
            e = -66;
            n = 50;
      }
            
      //var defaultBB = new bBox(-130,24,-66,50)

      var layer = node.attributes.name;
      var bb1 = new bBox(n, s + ((n-s)/2),e + ((w-e)/2), w); 
      var bb2 = new bBox(n, s + ((n-s)/2), e , e + ((w-e)/2)); 
      var bb3 = new bBox(s + ((n-s)/2), s, e + ((w-e)/2), w);
      var bb4 =  new bBox(s + ((n-s)/2), s , e , e + ((w-e)/2));
      
      var bb4a = new bBox(bb4.n, bb4.s + ((bb4.n-bb4.s)/2),bb4.e + ((bb4.w-bb4.e)/2), bb4.w); 
      var bb4b = new bBox(bb4.n, bb4.s + ((bb4.n-bb4.s)/2), bb4.e , bb4.e + ((bb4.w-bb4.e)/2)); 
      var bb4c = new bBox(bb4.s + ((bb4.n-bb4.s)/2), bb4.s, bb4.e + ((w-bb4.e)/2), bb4.w);
      var bb4d =  new bBox(bb4.s + ((bb4.n-bb4.s)/2), bb4.s , bb4.e , bb4.e + ((bb4.w-bb4.e)/2));
      
      var  baseUrl =  'http://columbo.nrlssc.navy.mil/ogcwms/servlet/WMSServlet/AccuWeather_Maps.wms?';                        
      baseUrl += '&styles=&transparent=TRUE&Format=image/png&request=GetMap&layers=' 
      baseUrl += layer; //   3:9
      baseUrl += '&width=1024&height=1024&srs=EPSG:4326&';      
      
      //baseUrl += 'bbox=' + w + ',' + s +',' + e + ',' + n;        
      
      var nw = baseUrl + 'bbox=' +  bb1.bb;
      var ne =  baseUrl + 'bbox=' +  bb2.bb;
      var sw =  baseUrl + 'bbox=' +  bb3.bb;
      var se =  baseUrl + 'bbox=' +  bb4.bb;
      
      var sea =  baseUrl + 'bbox=' +  bb4a.bb;
      var seb =  baseUrl + 'bbox=' +  bb4b.bb;
      var sec =  baseUrl + 'bbox=' +  bb4c.bb;
      var sed =  baseUrl + 'bbox=' +  bb4d.bb;
      
      loadOverlays(nw, bb1.n, bb1.s, bb1.e, bb1.w)
      loadOverlays(ne, bb2.n, bb2.s, bb2.e, bb2.w)
      loadOverlays(sw, bb3.n, bb3.s, bb3.e, bb3.w)
      //loadOverlays(se, bb4.n, bb4.s, bb4.e, bb4.w)
      loadOverlays(sea, bb4a.n, bb4a.s, bb4a.e, bb4a.w)
      loadOverlays(seb, bb4b.n, bb4b.s, bb4b.e, bb4b.w)
      loadOverlays(sec, bb4c.n, bb4c.s, bb4c.e, bb4c.w)
      loadOverlays(sed, bb4d.n, bb4d.s, bb4d.e, bb4d.w)
      //loadOverlays(url, n, s, e, w)
}

function loadOverlays(url, n, s, e, w){
      var groundOverlay = ge.createGroundOverlay('');
      groundOverlay.setIcon(ge.createIcon(''))
      groundOverlay.getIcon().
      setHref(url);
      groundOverlay.setLatLonBox(ge.createLatLonBox(''));

      var center = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
      var north = n;
      var south = s;
      var east = e;
      var west = w;
      var rotation = 0;
      var latLonBox = groundOverlay.getLatLonBox();
      latLonBox.setBox(north, south, east, west, rotation);

      ge.getFeatures().appendChild(groundOverlay);

}

function setNetworkLink(name,description,id,zoomTo,href)
{
      var networkLink = ge.createNetworkLink(id);
      networkLink.setDescription(description);
      networkLink.setName(name);
      networkLink.setFlyToView(zoomTo);  
      var link = ge.createLink("");
      link.setHref(href);
      networkLink.setLink(link);
      ge.getFeatures().appendChild(networkLink);
}



