// JavaScript Document

function submitLocation() {
  var address = document.getElementById('address').value;
  geocoder.getLatLng(
    address, 
    function(point) {
      if (point && ge != null) {
        var la = ge.createLookAt('');     
        la.set(point.y, point.x, 100, ge.ALTITUDE_RELATIVE_TO_GROUND, 
               0, 0, 4000);
        ge.getView().setAbstractView(la);
      }
    }
  );
}
function finished(object) {
	if (!object) {
	alert('bad or NULL kml');
		return;
	}
	ge.getFeatures().appendChild(object);

	var  la = ge.createLookAt('');
	la.set(51.86701856995612, 5.869703956883989, 25, ge.ALTITUDE_RELATIVE_TO_GROUND, -2.290741396769877, 49.5495495495496, 14815.83628162023);
	ge.getView().setAbstractView(la);
	
	var placemark = getFeatureById(ge, 'flash', true);
	switch_flash(placemark);
	
          
}

function toggle_folder(folder, button){
	if (button.src.lastIndexOf('over.jpg') > -1){
		button.src = button.src.substring(0,button.src.length-9)+'_uit.jpg';
	}else{
		button.src = button.src.substring(0,button.src.length-8)+'_over.jpg';
	}
	
	if(folder.getVisibility()){
		folder.setVisibility(false);
	}else{
		folder.setVisibility(true);
	}
}

function switch_flash(placemark){
	//alert ("Gevonden: "+placemark.getId());
	google.earth.addEventListener(placemark, 'click', function(event) {
		// prevent the default balloon from popping up
		event.preventDefault();
		
		//var balloon = ge.createHtmlStringBalloon('');
		var balloon = ge.createHtmlDivBalloon('');
		balloon.setFeature(placemark); // optional
		balloon.setMaxWidth(600);

		// YouTube video embed... the   in the beginning is a fix for IE6
		var cont = placemark.getDescription();
		var div = document.createElement('DIV');
		div.innerHTML = ' '+cont;
		balloon.setContentDiv(div);
		//alert (div.innerHTML);
		//balloon.Name = 'test';
		//alert (balloon.getVisibility());
		//balloon.setContentString(cont);
		/*balloon.setContentString(
		' <object width="400" height="300"><param name="movie" '
		+ 'value="http://www.youtube.com/v/6mrG_bsqC6k&hl=en&fs=1"/>'
		+ '<param name="allowFullScreen" value="true"/>'
		+ '<embed src="http://www.youtube.com/v/6mrG_bsqC6k&hl=en&fs=1" '
		+ 'type="application/x-shockwave-flash" allowfullscreen="true" '
		+ 'width="400" height="300"></embed></object>');
		*/ 
		ge.setBalloon(balloon);
	});
}

function loadfile(){
	
	
	//alert (url);
	var datum = new Date();
	
	var url = 'http://projects.studio-ode.nl/3dce/modules/mapscontent/Waalsprong_online.php';//?'+datum.getTime();
	//var url = 'http://projects.studio-ode.nl/3dce/modules/mapscontent/Waalsprong_online.php?'+datum.getTime();
	//var url = '/modules/mapscontent/Waalsprong_online.php';//+datum.getTime();
	var url = 'http://3dclearearth.nl/modules/mapscontent/Waalsprong_online.php';//+datum.getTime();
	google.earth.fetchKml(ge, url, finished);
	var layerRoot = ge.getLayerRoot();
	var terrainLayer = layerRoot.getLayerById(ge.LAYER_TERRAIN);
	terrainLayer.setVisibility(false);
	
	//alert (url);
	var url = 'http://3dclearearth.nl/modules/mapscontent/waalsprong/online_interface2.php';
	google.earth.fetchKml(ge, url, finished);
	//alert (url);
}



/**
 * Search a geometry hierarchy for a geometry with the given id.
 *
 * @param geometry      The geometry to start the search from.
 * @param id            The id of the geometry to find.
 * @return The found geometry or null if not found.
 */
function getGeometryById(geometry, id) {

        var geom;
        var list;
        var i;
		//alert ("GEO TYPE = "+geometry.getType());
		//alert ("geometry > ID = "+geometry.getId()+" ("+id+")");
        if (geometry.getId() == id) {
			//alert (id+" gevonden");
			return geometry;
		}

        if (geometry.getType() == "KmlMultiGeometry") {
                if (geometry.getGeometries().hasChildNodes()) {
                        list = geometry.getGeometries().getChildNodes();
                        for (i = 0; i < list.getLength(); i++) {
                                geom = list.item(i);
                                geom = getGeometryById(geom, id);
                                if (geom != null) return geom;
                        }
                }
        } else if (geometry.getType() == "KmlPolygon") {
                if (geometry.getOuterBoundary().getId() == id) return
geometry.getOuterBoundary();

                if (geometry.getInnerBoundaries().hasChildNodes()) {
                        list = geometry.getInnerBoundaries().getChildNodes();
                        for (i = 0; i < list.getLength(); i++) {
                                geom = list.item(i);
                                geom = getGeometryById(geom, id);
                                if (geom != null) return geom;
                        }
                }
        }
        return null;

}

/**
 * Search a feature hierarchy for a feature or geometry with the given
id.
 *
 * @param feature       The toplevel feature (or a GEPlugin) to search.
 * @param id            The id of the feature or geometry to find.
 * @return The found feature or geometry or null if not found.
 */ 
function getItemById(feature, id) {
        var i;
        var list;
        var geom;
        var sub_feature;

        if (feature.getType() != "GEPlugin") {
				//alert ("ID = "+feature.getId());
                if (feature.getId() == id){
					alert(id+' gevonden!');
					return feature;
				}
                if (feature.getType() != "KmlFolder" && feature.getType() != "KmlDocument") {
						//alert ("geen kml folder"+feature.getType());
                        geom = getGeometryById(feature.getGeometry(), id);
						//alert ("geom > "+geom);
                        if (geom != null) return geom;
                }
        }

		//alert("GetItemById > fgt > "+feature.getType());
        if ((feature.getType() == "GEPlugin" || feature.getType() == "KmlFolder" || feature.getType() == "KmlDocument") && feature.getFeatures().hasChildNodes()) {
                list = feature.getFeatures().getChildNodes();
				//alert ("lijst > "+list);
                for (i = 0; i < list.getLength(); i++) {
						//alert ('GetItemById > Item > '+list.item(i));
                        sub_feature = getItemById(list.item(i), id);
                        if (sub_feature != null) return sub_feature;
                }
        }
        return null;

}

/**
 * Search a feature hierarchy for a feature with the given id.
 *
 * @param feature       The toplevel feature (or a GEPlugin) to search.
 * @param id            The id of the feature  to find.
 * @param recursive     true = search the whole hierarchy,
 *                                      false = search just the children of the given feature.
 * @return The found feature or null if not found.
 */
function getFeatureById(feature, id, recursive, func, button) {
		var i;
		var list;
		var sub_feature;
		var time;
		var featureId;
		//alert (func);

        if (typeof recursive == 'undefined') {
                recursive = false;
        }
		
		if(feature.getType() != 'GEPlugin'){
			time = feature.getId().split('_');
			type = time[0];
			//feature.setVisibility(true);
		}
        //if (feature.getType() != 'GEPlugin' && (type == id || (func == 'show_in_time' && time.length == 3 && (time[1]> id || time[2] < id) ))) {
		if(feature.getType() != 'GEPlugin'){
			//layer function
			if (type == id) {
					if(func == 'hidefolder'){
						toggle_folder(feature, button);
					}else{
						switch_flash(feature);
					}
					
			}
			//TIME FUNCTION
			if(func == 'show_in_time' && time.length == 3){
				if(time[1]> id || time[2] < id){
					//alert(type);
					feature.setVisibility(false);
				}else{
					if (feature.getVisibility()){
					}else{
						feature.setVisibility(true);	
					
					}
				}
			}
		}
		
		//alert("fgt > "+feature.getType());
		/*
			if(feature.getType() == 'KmlNetworkLink'){
			google.earth.fetchKml(ge, feature.getLink().getHref(),
				function(object)  {
					   if (!object) {
						 alert('bad or NULL kml');
						 return;
					   }
					   //alert ('in de link '+object);
					 //now we can access the features from the the kml file...
						getFeatureById(object, id, recursive, func, button);
					 });
			}
		//*/
		
		// || feature.getType() == 'KmlNetworkLink'
        if ((feature.getType() == 'GEPlugin' || feature.getType() == 'KmlFolder' || feature.getType() == 'KmlDocument') && feature.getFeatures().hasChildNodes()) {
			list = feature.getFeatures().getChildNodes();
			/*
			if(feature.getType() == 'KmlFolder'){
				alert (feature.getId());
			}
			*/
			for (i = 0; i < list.getLength(); i++) {
					if (recursive) {
							//alert (list.item(i));
							sub_feature = getFeatureById(list.item(i), id, recursive, func, button);
							if (sub_feature != null){
								return sub_feature;
							}

					} else if (list.item(i).getId() == id) {
							return list.item(i);
					}else{
						//alert(list.item(i));
					}
			}
        }
        return null;

} 


function getInheritedVisibility(layer) {
  if (layer.getVisibility() == false) {
    return false;
  } else {
    var parent = layer.getParentNode();
    if (!parent) {
      return true;
    }
    return getInheritedVisibility(parent);
  }
}
function fly_to(to){
	var la = ge.createLookAt('');

	switch(to){
		case 'SNELBINDER':
			la.set(51.851887478582874,5.856241314123858,0, ge.ALTITUDE_RELATIVE_TO_GROUND,4.9002014921052215,73.69780757860383,260);//spoorbrug
			break;
		case 'WAALBRUG':
	la.set(51.851503657913,5.871231770862256,0,ge.ALTITUDE_RELATIVE_TO_GROUND,1.6207375950699185,75.53464002099895,264);//waalbrug
			break;
		case 'STER':
	la.set(51.87068284294766,5.868462996054089,0,ge.ALTITUDE_RELATIVE_TO_GROUND,-147.4316222477534,62.13602584404077,256);//de ster
			break;
		case 'KLIF':
	la.set(51.87720078228354,5.843710083262979,0,ge.ALTITUDE_RELATIVE_TO_GROUND,7.465120441120877,74.84674164757965,146);//de klif
			break;
		case 'WIC':
		la.set(51.86455589502621,5.86004533586866,0,ge.ALTITUDE_RELATIVE_TO_GROUND,-39.1508068434624,54.69882720579024,223.80764328611997); //WIC
			break;
		case 'NSL':
		la.set(51.864165148221495,5.859993382651171,0,ge.ALTITUDE_RELATIVE_TO_GROUND,28.976171365853563,49.97889659890356,220.81686077456848); //NS Lent
			break;
		case 'OVA':
		la.set(51.88294954522504,5.858937351678244,0,ge.ALTITUDE_RELATIVE_TO_GROUND,-23.986416243218063,54.698390749901925,534.7744716468334); //Ovatonde
			break;
		case 'SPVP':
		la.set(51.871777518059616,5.873431261023678,0,ge.ALTITUDE_RELATIVE_TO_GROUND,-0.41053225469714216,52.982225171042025,378.346853830316); //Sportpark Vossenpels
			break;
		case 'SPOH':
		la.set(51.88368192450458,5.841308146730249,0,ge.ALTITUDE_RELATIVE_TO_GROUND,17.062585530232326,52.33841224668655,876.3933534793938); //Sportpark Oosterhout
			break;
		case 'UDA':
		la.set(51.87016465404401,5.8700210166313225,0,ge.ALTITUDE_RELATIVE_TO_GROUND,-72.97316665886726,53.196735362425486,295.1883175920245); //Vrouwe Udasingel
			break;
		case 'STADSB':
		la.set(51.855376912137935,5.840732971279801,0,ge.ALTITUDE_RELATIVE_TO_GROUND,-12.568451424053332,48.04755403207119,1470.82091295216); //Nieuwe stadsbrug
			break;
		case 'KUNSTV':
		la.set(51.87341894832911,5.866391079539912,0,ge.ALTITUDE_RELATIVE_TO_GROUND,0.2838732687776234,49.33480672232118,284.9806009114723);//WIC
			break;
		case 'TRANSW':
		la.set(51.882928314633595,5.860683617246153,0,ge.ALTITUDE_RELATIVE_TO_GROUND,-10.686269558713223,51.05114275329449,336.2886452119648); //WIC
			break;
		case 'PMS':
		la.set(51.87211938939272,5.859337143569157,0,ge.ALTITUDE_RELATIVE_TO_GROUND,170.12864870344148,65.21108386400776,1136.4230772643934); //WIC
			break;
		case 'LANDS':
		la.set(51.8734756647713,5.8552498582679435,0,ge.ALTITUDE_RELATIVE_TO_GROUND,47.636779970341905,44.829366373020605,1144.1594711005405); //WIC
			break;
		case 'HAOH':
		la.set(51.87607927655777,5.835235009811548,0,ge.ALTITUDE_RELATIVE_TO_GROUND,24.03862205428119,57.10636686902758,639.3536282695227); //WIC
			break;
		case 'HAL':
		la.set(51.862131742111266,5.86642376417721,0,ge.ALTITUDE_RELATIVE_TO_GROUND,24.063155344349134,57.10636686902768,326.8831567719578); //WIC
			break;
		case 'WCB':
		la.set(51.879572332920326,5.837565788871704,0,ge.ALTITUDE_RELATIVE_TO_GROUND,-6.523388307072994,48.310041805462774,612.6360229434499); //WIC
			break;
		case 'WCGO':
		la.set(51.881932504434246,5.850483899918291,0,ge.ALTITUDE_RELATIVE_TO_GROUND,-59.708299629038265,51.52822113056768,621.4761938555763); //WIC
			break;
		case 'WCL':
		la.set(51.86269262832919,5.8636199457793525,0,ge.ALTITUDE_RELATIVE_TO_GROUND,-6.502892483007831,48.31004180546278,480.7621982994785); //WIC
			break;
		case 'SML':
		la.set(51.86984790869645,5.864552998777617,0,ge.ALTITUDE_RELATIVE_TO_GROUND,-6.26884472554137,50.240980874194854,372.631879042364); //WIC
			break;
		case 'VANUITNOORD':
		la.set(51.88122887722895,5.863356034605198,0,ge.ALTITUDE_RELATIVE_TO_GROUND,-150.21537104769666,70.35799496596036,3901.068968224037); //WIC
			break;
		default:
			la.set(51.86728206355429,5.869686887082193,0,ge.ALTITUDE_RELATIVE_TO_GROUND,2.2907548235537116,49.54981325388383,14854);//start
			break;
	}
	
	ge.getView().setAbstractView(la);
}

function get_camera(){
	camera = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
	var DEFAULT_HEADING_OFFSET = 2.5; // degrees
	offset = DEFAULT_HEADING_OFFSET;
	alert ('la.set('+camera.getLatitude()+","+camera.getLongitude()+","+
		  camera.getAltitude()+",ge.ALTITUDE_RELATIVE_TO_GROUND"+","+
		  camera.getHeading()+","+
		  camera.getTilt()+","+camera.getRange()+");");
}

function ShowBuilding(){
	var buildingsLayer = ge.getLayerRoot().getLayerById(ge.LAYER_BUILDINGS);
	var inheritedVisibility = getInheritedVisibility(buildingsLayer);
	ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, !inheritedVisibility);
	var la = ge.createLookAt('');
	la.set(51.43913293104432, 5.475853433993805, 25, ge.ALTITUDE_RELATIVE_TO_GROUND, 419, 65.697, 600);
	ge.getView().setAbstractView(la);
}

function handleNoFlash(errorCode) {
  if (errorCode == 603) {
	alert("Foutmelding: Flash schijnt niet ondersteund te worden door uw browser.");
	return;
  }
}