google.load("earth", "1");
google.load("maps", "2.99");  // For JS geocoder
var winW = 630, winH = 460;
var ge = null;
var gex = null;
var geocoder;
var _position = [0,0,0,0];

//
//mange different kml objects instances
//

var stationsObject = null;
var stationsZoomedObject= null;
var stationsBrowseObject = null;
var featuresObject = null;
var featuresZoomedObject = null;
var featuresBrowseObject = null;
var eventsObject = null;
var eventsMatchingObject = null;
var eventsZoomedObject = null;
var eventsBrowseObject = null;
var imagesObject = null;
var imagesZoomedObject = null;
var imagesBrowseObject = null;
var otherObject = null;

function geinit() {

  google.earth.createInstance("map3d", initCB, failureCB);

}

function geapi() {
	//if(el('sm'))
  //el('sm').style.display='none';
 // Set_Cookie('timetrekGEA','trekking',30, '/', '', '' );
  //geocoder = new GClientGeocoder();
  //google.earth.createInstance("maincontent", initCB, failureCB);
}

function initCB(object) {
  ge = object;
  ge.getWindow().setVisibility(true);
  gex = new GEarthExtensions(ge);
  ge.getNavigationControl().setVisibility(ge.VISIBILITY_AUTO);
  ge.getOptions().setStatusBarVisibility(true);
  //moveGmap( _position[0], _position[1], _position[2], _position[3] );
  showTerrain();
  zoomToContinent();
}
function moveGmap(x,y,w,h) {
	_position = [x,y,w,h];
    var frameRef=document.getElementById("map3d_container");
    frameRef.style.left=x;
    frameRef.style.top=y;
    frameRef.width=w;
    frameRef.height=h;
    frameRef.style.width=w;
    frameRef.style.height=h;
}
  function TraverseLayers(list,topid) {
    var str = "<blockquote id='"+topid+"'>";
    for (var i = 0; i < list.getLength(); ++i) {
      var child = list.item(i);
      var type = child.getType();
      try {
		var vis = list.item(i).getVisibility();
		var id = child.getId();
		str = str+'<input type="checkbox" name="dislayer" value="'+id+'" '+(vis?'checked':'')+' onclick="setLayer(this.value,this.checked)">'+child.getName()+'<br/>';
		if (!vis) {
			setTimeout("if (el('"+id+"')) el('"+id+"').style.display = 'none';",10);
		}
		str = str+TraverseLayers(child.getFeatures().getChildNodes(),id);
      } catch(err) {
      }
    }
    if (str.length > 60) {
      return str+"</blockquote>";
    } else {
      return '';
    }
  }


function removeLayer(kmlObject){
	if(kmlObject == "stationsObject"){
		  if (stationsObject)
		  ge.getFeatures().removeChild(stationsObject);
	 }
	if(kmlObject == "eventsObject"){
		  if (eventsObject)
		  ge.getFeatures().removeChild(eventsObject);
	 }
	if(kmlObject == "imagesObject"){
		  if (imagesObject)
		  ge.getFeatures().removeChild(imagesObject);
	 }
	if(kmlObject == "featuresObject"){
		  if (networkLink)
		  ge.getFeatures().removeChild(networkLink);
	 }
	if(kmlObject == "allObjects"){
		var features = ge.getFeatures();
		while (features.getFirstChild())
			features.removeChild(features.getFirstChild());
	 }
}

  var counter = 0;
  function TraverseFeatures(list,topid) {
    var str = "<blockquote id='"+topid+"'>";
    for (var i = 0; i < list.getLength(); ++i) {
      var child = list.item(i);
      try {
		var vis = list.item(i).getVisibility();
		var id = child.getId()
		if (!id)
			id = "idd"+(counter++);

		str = str+'<input type="checkbox" name="disfeature" value="'+id+'" '+(vis?'checked':'')+' disabled onclick="ge.getLayerRoot().enableLayerById(this.value,this.checked)">'+child.getName()+'<br/>';
		if (!vis) {
			setTimeout("if (el('"+id+"')) el('"+id+"').style.display = 'none';",10);
		}
		str = str+TraverseFeatures(child.getFeatures().getChildNodes(),id);
      } catch(err) {
      }
    }
    if (str.length > 60) {
      return str+"</blockquote>";
    } else {
      return '';
    }
  }

function showTerrain() {
  var layerRoot = ge.getLayerRoot();
  var terrainLayer = layerRoot.getLayerById(ge.LAYER_TERRAIN);
  terrainLayer.setVisibility(true);
//zoomToContinent(-64,-67);
  // shortcut:
  // layerRoot.enableLayerById(ge.LAYER_TERRAIN, true);
}

function hideTerrain() {
  var layerRoot = ge.getLayerRoot();
  var terrainLayer = layerRoot.getLayerById(ge.LAYER_TERRAIN);
  terrainLayer.setVisibility(false);

  // shortcut:
  // layerRoot.enableLayerById(ge.LAYER_TERRAIN, false);
}

function sanityCheck(){
	alert("got in");
}


function cleanUp(currentParsedKMLObject){
  // clean out the old one
  if (currentParsedKMLObject)
    ge.getFeatures().removeChild(currentParsedKMLObject);
}

function loadDynaKML(kmls, kmlObject,lon,lat){
	if(kmlObject == "stationsObject"){
		  if (stationsObject)
		  ge.getFeatures().removeChild(stationsObject);
		  try {
		    stationsObject = ge.parseKml(kmls);
		    ge.getFeatures().appendChild(stationsObject);
			zoomUsingExt(stationsObject);
			// Get the current view
			//var lookAt = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);

			// Zoom out to twice the current range
			//lookAt.setRange(lookAt.getRange() * 2.0);

			// Update the view in Google Earth
			//ge.getView().setAbstractView(lookAt);
		  } catch (ex) {
		  	//alert(ex.description);
		    //alert('Parse error');
		  }
	  }else if(kmlObject == "stationsZoomedObject"){
		  if (stationsZoomedObject)
		  ge.getFeatures().removeChild(stationsZoomedObject);
		  try {
		    stationsZoomedObject = ge.parseKml(kmls);
		    ge.getFeatures().appendChild(stationsZoomedObject);
			zoomTo(lon,lat);
		  } catch (ex) {
		    //alert('Parse error');
		  }
	  }else if(kmlObject == "stationsBrowseObject"){
		  if (stationsBrowseObject)
		  ge.getFeatures().removeChild(stationsBrowseObject);
		  try {
		    stationsBrowseObject = ge.parseKml(kmls);
		    ge.getFeatures().appendChild(stationsBrowseObject);
			zoomTo(lon,lat);
		  } catch (ex) {
		   // alert('Parse error');
		  }
	  }else if(kmlObject == "featuresObject"){
		  if (featuresObject)
		  ge.getFeatures().removeChild(featuresObject);
		  try {
		    featuresObject = ge.parseKml(kmls);
		    ge.getFeatures().appendChild(featuresObject);
			zoomUsingExt(featuresObject);
		  } catch (ex) {
		   // alert('Parse error');
		  }
	  }else if(kmlObject == "featuresZoomedObject"){
		  if (featuresZoomedObject)
		  ge.getFeatures().removeChild(featuresZoomedObject);
		  try {
		    featuresZoomedObject = ge.parseKml(kmls);
		    ge.getFeatures().appendChild(featuresZoomedObject);
			zoomTo(lon,lat);
		  } catch (ex) {
		    //alert('Parse error');
		  }
	  }else if(kmlObject == "featuresBrowseObject"){
		  if (featuresBrowseObject)
		  ge.getFeatures().removeChild(featuresBrowseObject);
		  try {
		    featuresBrowseObject = ge.parseKml(kmls);
		    ge.getFeatures().appendChild(featuresBrowseObject);
			zoomTo(lon,lat);
		  } catch (ex) {
		   // alert('Parse error');
		  }
	  }else if(kmlObject == "eventsObject"){
		  if (eventsObject)
		  ge.getFeatures().removeChild(eventsObject);
		  try {
		    eventsObject = ge.parseKml(kmls);
		    ge.getFeatures().appendChild(eventsObject);
			zoomUsingExt(eventsObject);
		  } catch (ex) {
		   // alert('Parse error');
		  }
	  }else if(kmlObject == "eventsMatchingObject"){
		  if (eventsMatchingObject)
		  ge.getFeatures().removeChild(eventsMatchingObject);
		  try {
		    eventsMatchingObject = ge.parseKml(kmls);
		    ge.getFeatures().appendChild(eventsMatchingObject);
			zoomTo(lon,lat);
		  } catch (ex) {
		   // alert('Parse error');
		  }
	  }else if(kmlObject == "eventsZoomedObject"){
		  if (eventsZoomedObject)
		  ge.getFeatures().removeChild(eventsZoomedObject);
		  try {
		    eventsZoomedObject = ge.parseKml(kmls);
		    ge.getFeatures().appendChild(eventsZoomedObject);
			zoomTo(lon,lat);
		  } catch (ex) {
		  //  alert('Parse error');
		  }
	  }else if(kmlObject == "eventsBrowseObject"){
		  if (eventsBrowseObject)
		  ge.getFeatures().removeChild(eventsBrowseObject);
		  try {
		    eventsBrowseObject = ge.parseKml(kmls);
		    ge.getFeatures().appendChild(eventsBrowseObject);
			zoomTo(lon,lat);
		  } catch (ex) {
		   // alert('Parse error');
		  }
	  }else if(kmlObject == "imagesObject"){
		  if (imagesObject)
		  ge.getFeatures().removeChild(imagesObject);
		  try {
		    imagesObject = ge.parseKml(kmls);
		    ge.getFeatures().appendChild(imagesObject);
			zoomUsingExt(imagesObject);
		  } catch (ex) {
		   // alert('Parse error');
		  }
	  }else if(kmlObject == "imagesZoomedObject"){
		  if (imagesZoomedObject)
		  ge.getFeatures().removeChild(imagesZoomedObject);
		  try {
		    imagesZoomedObject = ge.parseKml(kmls);
		    ge.getFeatures().appendChild(imagesZoomedObject);
			zoomTo(lon,lat);
		  } catch (ex) {
		  //  alert('Parse error');
		  }
	  }else if(kmlObject == "imagesBrowseObject"){
		  if (imagesBrowseObject)
		  ge.getFeatures().removeChild(imagesBrowseObject);
		  try {
		    imagesBrowseObject = ge.parseKml(kmls);
		    ge.getFeatures().appendChild(imagesBrowseObject);
			zoomTo(lon,lat);
		  } catch (ex) {
		  //  alert('Parse error');
		  }
	  }else if(kmlObject == "otherObject"){
		  if (otherObject)
		  ge.getFeatures().removeChild(otherObject);
		  try {
		    otherObject = ge.parseKml(kmls);
		    ge.getFeatures().appendChild(otherObject);
			zoomUsingExt(otherObject);
		  } catch (ex) {
		  //  alert('Parse error');
		  }
	  }

}

function zoomUsingExt(objex){
	gex.util.flyToObject(objex);
	//gex.flyToObject(objex);
}

function zoomTo(lon,lat){
	// Create a new LookAt
	var lookAt = ge.createLookAt('');

	// Set the position values
	lookAt.setLatitude(lat);
	lookAt.setLongitude(lon);
	lookAt.setRange(5000.0); //default is 0.0
	//speed
	//ge.getOptions().setFlyToSpeed(ge.SPEED_TELEPORT);
	ge.getOptions().setFlyToSpeed(0.5);
	// Update the view in Google Earth
	ge.getView().setAbstractView(lookAt);
}

function zoomToContinent(){
	var lookAt = ge.createLookAt('');
	lookAt.setLatitude(-89.20998);
	lookAt.setLongitude(98.92724);
	lookAt.setRange(5745707.27);
	lookAt.setHeading(-97.56);
	ge.getOptions().setFlyToSpeed(0.5);
	ge.getView().setAbstractView(lookAt);
}

function finished(object) {
  if (!object) {
    alert('bad or NULL kml');
    return;
  }
}

var networkLink = null;

function fetch_kml(url) {

	//google.earth.fetchKml(ge, url, finished);
    if(networkLink) ge.getFeatures().removeChild(networkLink);

	networkLink = ge.createNetworkLink("");
	networkLink.setDescription("NetworkLink open to fetched content");
	networkLink.setName(url);
	networkLink.setFlyToView(true);
	var link = ge.createLink("");
	link.setHref(url);
	networkLink.setLink(link);
	ge.getGlobe().getFeatures().appendChild(networkLink);

}

function failureCB(object) {
  alert('load failed');
}

var state = {};
function el(e) { return document.getElementById(e); }
function toggleOptions(name,functname) {
	if (state[name] && state[name] == true) {
		newstate = false;
	} else {
		newstate = true;
	}
	state[name] = newstate;
	eval("ge.getOptions()."+functname+"("+(newstate?'true':'false')+")");
	el(name).style.backgroundColor = newstate?'lightgreen':'pink';
}


function toggleVisibility(name,functname) {
	if (state[name] && state[name] == true) {
		newstate = false;
	} else {
		newstate = true;
	}
	state[name] = newstate;
	eval("ge."+functname+"().setVisibility("+(newstate?'true':'false')+")");
	el(name).style.backgroundColor = newstate?'lightgreen':'pink';
}

function toggleSky() {
	if (!('isSkyMode' in window) || !window.isSkyMode) {
	  window.isSkyMode = true;
	  ge.getOptions().setMapType(ge.MAP_TYPE_SKY);
	} else {
	  window.isSkyMode = false;
	  ge.getOptions().setMapType(ge.MAP_TYPE_EARTH);
	}
	el('showsky').style.backgroundColor = window.isSkyMode?'lightgreen':'pink';


	  var layers = ge.getLayerRoot();
	  var tree = layers.getFeatures().getChildNodes();
	  el('layers_container').innerHTML = TraverseLayers(tree,'toplevel');

}


function submitLocation() {
  var address = el('address').value;
  geocoder.getLatLng(
    address,
    function(point) {
      if (point && ge != null) {
        var la = ge.createLookAt('');
        la.set(point.y, point.x, 4000, 0, 0, 100,
               ge.ALTITUDE_RELATIVE_TO_GROUND);
        ge.getView().setAbstractView(la);
      }
    }
  );
}

function listLayers(){
   var layers = ge.getLayerRoot();
   alert(">>> "+layers.getFeatures().getChildNodes());
}

function mapItStations(range, visi){
	try{
		if(stationsframe ){
			stationsframe.location="GoogleEarth/ge_matching_stations.cfm?range="+range+"&visi="+visi;
		}else{
			alert("stationsframe ");
		}
	}catch(ex){
		alert("stationsframe : " + ex.message);
	}
}

function mapItFeatures(range, visi){

}

function mapItEvents(range, visi){
	try{
		if(eventsframe ){
			eventsframe.location="GoogleEarth/ge_slider_events.cfm?range="+range+"&visi="+visi;
		}else{
			alert("eventsframe ");
		}
	}catch(ex){
		alert("eventsframe : " + ex.message);
	}
}

function mapItPhotos(range, visi){
	try{
		if(photosframe ){
			//alert("called images");
			photosframe.location="GoogleEarth/ge_matching_images.cfm?range="+range+"&visi="+visi;
		}else{
			alert("photosframe ");
		}
	}catch(ex){
		alert("photosframe : " + ex.message);
	}
}
