
var ge;
var kmlobject;
var kmlurl;
var counter = 0;
var location_array = location.href.split("index.html");
var key_array = location_array[0].split("?key=");
var kmllocation = key_array[0];

google.load("earth", "1");

function init() {
	google.earth.createInstance("map3d", initCB, failureCB);

}

function initCB(object) {
	ge = object;
	ge.getWindow().setVisibility(true);
	setGrid( false );
	setNavigation( true );
	
	 // add some layers
	ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, true);
	ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true);
	ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, true);
	
	// fetch the first KML - official minion locations
	kmlurl = kmllocation + 'sightings_104.kml';
	//kmlurl = kmllocation + 'sightings_cachebust.kml';
	google.earth.fetchKml(ge, kmlurl, finishedMinionKml);
	
	showIntroBalloon();//in this case, ge has been created, and the intro balloon will appear inside of it.
	
}

function failureCB(object) {
	//alert('load failed');
	showIntroBalloon();//in this case, ge has failed to create, and the intro balloon will be a popup.
}

function setGrid( value ) {
	var options = ge.getOptions();
	options.setGridVisibility(value);
}

function setNavigation( value ) {
	if ( value ) {
		ge.getNavigationControl().setVisibility(ge.VISIBILITY_SHOW);
	} else {
		ge.getNavigationControl().setVisibility(ge.VISIBILITY_HIDE);
	}
}

function showIntroBalloon() {
	handleLink("instructions");
}

function finishedMinionKml(object) {
	if (!object) {
	// wrap alerts in API callbacks and event handlers
	// in a setTimeout to prevent deadlock in some browsers
		setTimeout(function() {
			//alert('finishedMinionKml: Bad or null KML.');
		}, 0);
		return;
	}
	kmlobject = object;
	ge.getFeatures().appendChild(object);
	
	//try to zoom to client location based on IP address (google.loader.ClientLocation
	if (google.loader.ClientLocation &&
		google.loader.ClientLocation.latitude &&
		google.loader.ClientLocation.longitude) {
		zoomTo(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude, "START_CLIENT_LOCATION");
	} else {
		//full US view
		zoomTo(39.988858, -95.639808, "FULL_OUT");
	}
	//zoomTo(39.988858, -95.639808, "INTRO");
	parseMinionObject(kmlobject);
	
	//load user kml here
	//when that's loaded, load the flags kml
	// skip user kml for now, just load flags
	kmlurl = kmllocation + 'userphotos.kml';
	google.earth.fetchKml(ge, kmlurl, finishedUserKml);
}

function finishedUserKml(object) {
	if (!object) {
	// wrap alerts in API callbacks and event handlers
	// in a setTimeout to prevent deadlock in some browsers
		setTimeout(function() {
			//alert('finishedUserKml: Bad or null KML.');
		}, 0);
		return;
	}
	//kmlobject = object; - don't update this, it's just for setting event listeners
	ge.getFeatures().appendChild(object);
}

function parseMinionObject(node) {
	if (node.getFeatures().hasChildNodes()) {
		var subNodes = node.getFeatures().getChildNodes();
		var l = subNodes.getLength();
		var curNode;
		var nodeType;
		
		for (var i=0; i<l; i++) {
			curNode = subNodes.item(i);
			nodeType = curNode.getType();
			
			switch (nodeType) {
				case 'KmlPlacemark':
					google.earth.addEventListener(curNode, 'click', function(event) {
						event.preventDefault();
						var balloon = ge.createHtmlDivBalloon('');
						//balloon.setFeature(event.getTarget());// optional
						balloon.setMaxWidth(500);
						
						var div = document.createElement('DIV');
						div.innerHTML = 
							'&nbsp;<object width="560" height="400"><param name="movie" '
			 				+ 'value="mediaplayer/container.swf"/>'
							+ '<param name="allowFullScreen" value="true"/>'
							+ '<param name="flashvars" value="dl='+event.getTarget().getDescription()+'"/>'
							+ '<embed src="mediaplayer/container.swf" '
							+ 'type="application/x-shockwave-flash" allowfullscreen="true" flashvars="dl='+event.getTarget().getDescription()+'"'
							+ 'width="560" height="400"></embed></object>';
							balloon.setContentDiv(div);
							balloon.setMinWidth(560);
							balloon.setMinHeight(400);
							ge.setBalloon(balloon); //set the ballon to ge plugin
					});
					break;
				case 'KmlFolder':
					parseMinionObject(curNode);
					break;
			}
		}
	}
}

function setGruFlag(lat, long) {
	var groundOverlay = ge.createGroundOverlay('');
	groundOverlay.setIcon(ge.createIcon(''));
	groundOverlay.getIcon().setHref("gruflag.jpg");
	groundOverlay.setLatLonBox(ge.createLatLonBox(''));
	
	var center = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
	var north = center.getLatitude() + .35;
	var south = center.getLatitude() - .35;
	var east = center.getLongitude() + .55;
	var west = center.getLongitude() - .55;
	var rotation = 0;
	var latLonBox = groundOverlay.getLatLonBox();
	latLonBox.setBox(north, south, east, west, rotation);
	
	ge.getFeatures().appendChild(groundOverlay);
}

//this will create a placemark at a set location, or centered if no location is provided.
function setPlacemark(lat, long) {
	// Create the placemark.
	var placemark = ge.createPlacemark('');
	placemark.setName("Click For Break-In");
	// Add the placemark to Earth.
	ge.getFeatures().appendChild(placemark);
	
	// Create style map for placemark
	var icon = ge.createIcon('');
	icon.setHref('http://tedperezexternal.com/grugleearth/minionIcon.png');
	var style = ge.createStyle('');
	style.getIconStyle().setIcon(icon);
	placemark.setStyleSelector(style);
	
	// Create point
	var la = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
	var point = ge.createPoint('');
	
	// Set the placemark's location.
	if (long && long != "" && lat && lat != "")	{ 
		point.setLatitude(lat);
		point.setLongitude(long);
		//alert("creating placemark at "+lat+", "+long);
		
	} else {
		point.setLatitude(la.getLatitude());
		point.setLongitude(la.getLongitude());
		//alert("creating placemark at "+la.getLatitude()+", "+la.getLongitude());
	}
	placemark.setGeometry(point);
}

//creates a location in the center of the map
function createPlacemark() {
	var placemark = ge.createPlacemark('');
	placemark.setName("placemark" + counter);
	ge.getFeatures().appendChild(placemark);

	// Create style map for placemark
	var icon = ge.createIcon('');
	icon.setHref('http://tedperezexternal.com/grugleearth/minionIcon.png');
	var style = ge.createStyle('');
	style.getIconStyle().setIcon(icon);
	placemark.setStyleSelector(style);
	
	// Create point
	var la = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
	var point = ge.createPoint('');
	point.setLatitude(la.getLatitude());
	point.setLongitude(la.getLongitude());
	placemark.setGeometry(point);
	
	counter++;
}

function zoomTo(lat, long, type) {
	//alert("zoomTo: "+lat+", "+long+", "+type);
	if (long && long != "" && lat && lat != "")	{
		//process type
		var range = 1000;
		if (!type || type == "") {type='APPROXIMATE'}
		switch (type)
		{
			case 'ROOFTOP' :
				range = 300;
				break;
			case 'RANGE_INTERPOLATED' : 
				range = 800;
				break;
			case 'GEOMETRIC_CENTER' : 
				range = 800;
				break;
			case 'APPROXIMATE' : 
				range = 1500;
				break;
			case 'START_CLIENT_LOCATION' :
				range = 10000;
				break;
			case 'FULL_OUT' : 
				range = 3500000;
		}
		//alert("zoomTo::range: "+range);
		//alert("zoomTo::type: "+type);
		var la = ge.createLookAt('');
		//alert('created LookAt');
		la.set(parseFloat(lat), parseFloat(long),
			0, // altitude
			ge.ALTITUDE_RELATIVE_TO_GROUND,
			0, // heading
			0, // straight-down tilt
			range // range (inverse of zoom)
		);
		//alert("createLookAt set");
		ge.getView().setAbstractView(la);
		//alert("getView triggered");
	} 
}

function addSampleButton(caption, clickHandler) {
	var btn = document.createElement('input');
	btn.type = 'button';
	btn.value = caption;
	
	if (btn.attachEvent) {
		btn.attachEvent('onclick', clickHandler);
	 } else {
		btn.addEventListener('click', clickHandler, false);
	}
	// add the button to the buttons-ui
	//document.getElementById('buttons-ui').appendChild(btn);
}
    
    function addSampleUIHtml(html) {
	//document.getElementById('buttons-ui').innerHTML += html;
}
