//google.load("earth","1");
var ge=null;
// Copyright 2010 by InnovationLandscape.com an EarthNC, Inc Web Domain
// with Thanks to the US Census, Google, and Roman Nurik for code and data support

var whandle;
var map;
var SEARCH_PLACEHOLDER = 'Fly to a location';
var PAGEPATH = document.location.href.replace(/#.*/, '')
                                     .replace(/\/[^\/]*$/, '/');

function init(){
if (getUrlVariable("em")==1){
  document.getElementById("top-share").style.display='none';
  document.getElementById("top-fullLink").style.display='block';
  document.getElementById("container").style.width=getUrlVariable("wd")+'px';
  document.getElementById("map3d").style.height=getUrlVariable("ht")+'px';
}
initSearchBox();
google.earth.setLoadingImageUrl(PAGEPATH + '/images/earth-loading-a.png');
google.earth.createInstance("map3d",initCB,failureCB);

}

function initCB(object){
ge=object;
ge.getWindow().setVisibility(true);
gex = new GEarthExtensions(ge);
if (!getUrlVariable("nc")){
ge.getNavigationControl().setVisibility(ge.VISIBILITY_SHOW);
}
var options = ge.getOptions();
// set center and zoom
if (getUrlVariable("ll")){
      var ll=getUrlVariable("ll"); 
     if (getUrlVariable("r")) {var z=getUrlVariable("r");} else {var z=5000;}
     if (getUrlVariable("t")) {var t=getUrlVariable("t");} else {var t=0;}
     if (getUrlVariable("h")) {var h=getUrlVariable("h");} else {var h=0;}
      
      var lookAt = ge.createLookAt('');
      lookAt.set(parseFloat(ll.split(',')[0]), parseFloat(ll.split(',')[1]), 25, ge.ALTITUDE_RELATIVE_TO_GROUND, parseFloat(h), parseFloat(t), parseFloat(z));
      ge.getView().setAbstractView(lookAt);  } else
      {
       var lookAt = ge.createLookAt('');
      lookAt.set(29.043247, -88.512964, 25, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, 311643);
      ge.getView().setAbstractView(lookAt);       
      }
      ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true);
     if (getUrlVariable("lrs")){
      var lrs = getUrlVariable("lrs");
      if (lrs.indexOf("t")>-1){        
      ge.getLayerRoot().enableLayerById(ge.LAYER_TERRAIN, true);
      }
      if (lrs.indexOf("u")>-1){                                     
      ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, true);
      }
      if (lrs.indexOf("b")>-1){        
      ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true);
      }                           
      if (lrs.indexOf("r")>-1){     
      ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, true);
      }
      if (lrs.indexOf("a")>-1){
      options.setAtmosphereVisibility(false);
      }
      }
      
      if (getUrlVariable("opt")){
      if (opt.indexOf("s")>-1){
      options.setStatusBarVisibility(true);
      }
      if (opt.indexOf("l")>-1){
      options.setScaleLegendVisibility(true);
      }
      if (opt.indexOf("g")>-1){
      options.setGridVisibility(true);
      }
      }                 

      var url = 'http://mw1.google.com/mw-earth-vectordb/disaster/oil_slick_042010/Oil_Spill_daily.kml';
      google.earth.fetchKml(ge, url, finished);
}

function failureCB(object){}

// in this sample we will purposely attempt
// to fetch a bad KML file (one that doesnt exist)

function finished(object) {
  if (!object) {
    alert('Your KML link does not appear valid.  Please check it and try again.');
    return;
  }

  ge.getFeatures().appendChild(object);
  if (!getUrlVariable("ll")){
  setTimeout(startTour,1000);
  }
  
  //return object;     
}

function startTour(){
  var tour = gex.dom.getObjectById("ctour");
  ge.getTourPlayer().setTour(tour);
  ge.getTourPlayer().play();
}

function initSearchBox() {
  var searchBox = document.getElementById('search-box');
  searchBox.setAttribute('placeholder', SEARCH_PLACEHOLDER);
  
  if (searchBox.value == '' || searchBox.value == SEARCH_PLACEHOLDER) {
    searchBox.value = SEARCH_PLACEHOLDER;
    searchBox.className = 'placeholder';
  }
  
  addDomListener(searchBox, 'focus', function() {
    if (searchBox.value == '' || searchBox.value == SEARCH_PLACEHOLDER) {
      searchBox.value = '';
      searchBox.className = '';
    }
  });
  
  addDomListener(searchBox, 'blur', function() {
    if (searchBox.value == '' || searchBox.value == SEARCH_PLACEHOLDER) {
      searchBox.value = SEARCH_PLACEHOLDER;
      searchBox.className = 'placeholder';
    }
  });
  
  addDomListener(searchBox, 'change', function() {
    document.getElementById('search-error').style.display = 'none';
  });
  
  addDomListener(searchBox, 'keypress', function() {
    document.getElementById('search-error').style.display = 'none';
  });
}

function performSearch() {
  var searchBox = document.getElementById('search-box');
  var searchQuery = searchBox.value.replace(/(^\s+)|(\s+$)/g, '');
  
  if (searchQuery == '' ||
      searchQuery == SEARCH_PLACEHOLDER)
    return;
  
  document.getElementById('search-loading').style.display = 'block';
  var geocoder = new google.maps.ClientGeocoder();
  geocoder.getLocations(searchQuery, function(response) {
    document.getElementById('search-loading').style.display = 'none';
    if (response.Status.code != 200 || !response.Placemark) {
      document.getElementById('search-error').innerHTML = 'No results found.';
      document.getElementById('search-error').style.display = 'block';
    } else {
      searchBox.value = response.Placemark[0].address;
      
      var earthNode = document.getElementById('map3d');
      var aspectRatio = earthNode.offsetWidth / earthNode.offsetHeight;
      
      var lookAt = computeBBoxView(ge, {
        north: response.Placemark[0].ExtendedData.LatLonBox.north,
        south: response.Placemark[0].ExtendedData.LatLonBox.south,
        east: response.Placemark[0].ExtendedData.LatLonBox.east,
        west: response.Placemark[0].ExtendedData.LatLonBox.west
      }, aspectRatio);
      
      ge.getView().setAbstractView(lookAt);
    }
  });
}

function addDomListener(element, eventName, listener) {
  if (element.addEventListener)
    element.addEventListener(eventName, listener, false);
  else if (element.attachEvent)
    element.attachEvent('on' + eventName, listener);
}
  
function getUrlVariable(variable) {
  var url = document.location.href.split('?');
  if (url[1]){
  var vars = url[1].split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
    return pair[1];
    }
  }
  }
}
var EARTH_RADIUS = 6378137;

function earthDistance(p1, p2) {
  var a = Math.sin(p1.lat * Math.PI / 180) * Math.sin(p2.lat * Math.PI / 180);
  var b = Math.cos(p1.lat * Math.PI / 180) * Math.cos(p2.lat * Math.PI / 180) *
      Math.cos((p2.lon - p2.lon) * Math.PI / 180);
  return EARTH_RADIUS * Math.acos(a + b);
}

function computeBBoxView(pluginInstance, bbox, aspectRatio) {
  var DEGREES = Math.PI / 180;
  
  var coords = [
      [bbox.north, bbox.east],
      [bbox.north, bbox.west],
      [bbox.south, bbox.west],
      [bbox.south, bbox.east]];

  // find center
  var center = {
    lat: (bbox.north + bbox.south) / 2,
    lon: (bbox.east + bbox.west) / 2
  };
  
  var lngSpan = earthDistance({ lat: center.lat, lon: bbox.east },
                              { lat: center.lat, lon: bbox.west });
  var latSpan = earthDistance({ lat: bbox.north, lon: center.lon },
                              { lat: bbox.south, lon: center.lon });
  
  if (!aspectRatio)
    aspectRatio = 1.0;

  var PAD_FACTOR = 1.5; // add 50% to the computed range for padding
  var beta;
  
  var aspectUse = Math.max(aspectRatio, Math.min(1.0, lngSpan / latSpan));
  var alpha = (45.0 / (aspectUse + 0.4) - 2.0) * DEGREES; // computed experimentally;
  
  // create LookAt using distance formula
  if (lngSpan > latSpan) {
    // polygon is wide
    beta = Math.min(90 * DEGREES, alpha + lngSpan / 2 / EARTH_RADIUS);
  } else {
    // polygon is taller
    beta = Math.min(90 * DEGREES, alpha + latSpan / 2 / EARTH_RADIUS);
  }

  range = PAD_FACTOR * EARTH_RADIUS * (Math.sin(beta) *
    Math.sqrt(1 / Math.pow(Math.tan(alpha),2) + 1) - 1);
  
  var la = pluginInstance.createLookAt('');
  la.set(center.lat, center.lon, 0,
         pluginInstance.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, range);
  return la;
}

function showHelpOverlay() {
  if (!ge)
    return;
  
  if (helpOverlay) {
    helpOverlay.setVisibility(true);
  } else {
    var continueImage = ge.createIcon('');
    continueImage.setHref(PAGEPATH + '/images/earth-continue-a.png');
    
    var helpOverlay = ge.createScreenOverlay('');
    helpOverlay.setIcon(continueImage);
    helpOverlay.getOverlayXY().set(0.5, ge.UNITS_FRACTION,
                                   0.5, ge.UNITS_FRACTION);
    helpOverlay.getScreenXY().set(0.5, ge.UNITS_FRACTION,
                                  0.5, ge.UNITS_FRACTION);
    helpOverlay.getSize().set(-1, ge.UNITS_FRACTION, -1, ge.UNITS_FRACTION);
    ge.getFeatures().appendChild(helpOverlay);

    var closeHelpFn = function() {
      ge.getFeatures().removeChild(helpOverlay);
    };

    google.earth.addEventListener(ge.getWindow(), 'mousedown', closeHelpFn);
  }
}

function showShare(){
 
document.getElementById("link-area").innerHTML='<form action="" onsubmit="performLink(); return false;">'+ 
        'Set initial zoom, view, and size then click &nbsp;&nbsp;&nbsp;'+
        '<input type="submit" id="linkbutton" value="Get Link"/> &nbsp;&nbsp; <a href="#" onclick="cancelLink();">[X]</a><br /></form>'; 
  document.getElementById("search-area").style.display='none';
  document.getElementById("link-area").style.display='block';
  document.getElementById("top-share").style.display='none';


}

function cancelLink(){
 document.getElementById("search-area").style.display='block';
  document.getElementById("link-area").style.display='none';
  document.getElementById("top-share").style.display='block';
}

function performLink(){
  var lookAt = ge.getView().copyAsLookAt(ge.ALTITUDE_ABSOLUTE);
  var lat = lookAt.getLatitude();
  var lon = lookAt.getLongitude();
  var range = lookAt.getRange();
  var hdg = lookAt.getHeading();
  var tilt = lookAt.getTilt();
  document.getElementById("link-area").innerHTML=
          '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Paste link in <b>email</b> or <b>IM</b>:'+
          '<input onclick="selectall(\'email-box\')" size="60" type="search" id="email-box" value="http://earthnc.com/oilspill/?ll='+lat.toFixed(5)+','+lon.toFixed(5)+'&r='+range.toFixed(0)+'&h='+hdg.toFixed(0)+'&t='+tilt.toFixed(0)+'"/> &nbsp;&nbsp; <a href="#" onclick="cancelLink();">[X]</a>';
}

function selectall(id){
    document.getElementById(id).focus();
    document.getElementById(id).select();
    }



