var DS_ge;
var DS_geHelpers;

google.load("jquery", "1");
google.load("maps", "2.x");
google.load("earth", "1");
google.setOnLoadCallback(DS_init);

window.onresize = resizeMap;

var distanceMarkers = new Array();

function DS_init()
{  
  	google.earth.createInstance('earth',
		function(ge) {
		  	DS_ge = ge;
		  	DS_ge.getWindow().setVisibility(true);
		  	DS_ge.getLayerRoot().enableLayerById(DS_ge.LAYER_BUILDINGS, true);
		  	DS_ge.getLayerRoot().enableLayerById(DS_ge.LAYER_BORDERS, true);
		  	DS_geHelpers = new GEHelpers(DS_ge);      
		  	DS_ge.getNavigationControl().setVisibility(ge.VISIBILITY_AUTO);  
		  	DS_loadRoute();
			addMarkers();
			updateDistanceMarkers();
		},
		function() {
		});
}

/*
function initCB(instance) {
	ge = instance;
	ge.getWindow().setVisibility(true);


	// add a navigation control
	ge.getNavigationControl().setVisibility(ge.VISIBILITY_AUTO);

	loadRoute();
	var lookAt = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
	lookAt.set (start_lat, start_lng, 50, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 80, 100);
	ge.getView().setAbstractView(lookAt);	
}

function failureCB(errorCode) {
	alert("Error: "+ errorCode);
}
*/

function resizeMap()
{
	var mapElement = document.getElementById("earth");
	if( window.innerHeight )
	{
		var width = window.innerWidth - 528;
		var height = window.innerHeight - 280;
	} 
	else
	{
		var width = document.documentElement.offsetWidth - 528; 
		var height = document.documentElement.offsetHeight - 280;
	}
	if(width< 468){
		width = 468;
	}
	mapElement.style.width = width  + 'px';
	mapElement.style.height = height + 'px';
}

/*
function loadRoute()
{
	if(route_data != '')
	{
		var lineStringPlacemark = DS_ge.createPlacemark('');
		if (!lineStringPlacemark.getStyleSelector()) {
			lineStringPlacemark.setStyleSelector(DS_ge.createStyle(''));
		}
		var lineStyle = lineStringPlacemark.getStyleSelector().getLineStyle();
		lineStyle.setWidth(2);
		lineStyle.getColor().set('ff000080');
		var lineString = DS_ge.createLineString('');
		lineString.setTessellate(true);
		var coords = lineString.getCoordinates();

		var pointStrings = route_data.split(',');
		for(var i=0 ; i<pointStrings.length; i++)
		{
			var point = pointStrings[i].split(':');
			var lat = parseFloat(point[0]);
			var lng = parseFloat(point[1]);
			
			coords.pushLatLngAlt(lat, lng, 0 );
			if(i==0){
				addStartFlag(lat, lng);
			}
			if(i == pointStrings.length-1){
				addFinishFlag(lat, lng);
			}
		}
		lineStringPlacemark.setGeometry(lineString);
		DS_ge.getFeatures().appendChild(lineStringPlacemark);
	}
}
*/

function addMarkers()
{
	for(var i=0 ; i<marker_data.length; i++)
	{
		addMarker(parseFloat(marker_data[i][1]), parseFloat(marker_data[i][2]), marker_data[i][0], marker_data[i][3]);
	}
}

function addMarker(lat, lng, iconName, html)
{
	var placemark = DS_ge.createPlacemark('');
	var point = DS_ge.createPoint('');
	point.setLatitude(lat);
	point.setLongitude(lng);
	placemark.setGeometry(point);
	var style = DS_ge.createStyle('');
	placemark.setStyleSelector(style);
	var icon = DS_ge.createIcon('');
	icon.setHref('http://www.walkscene.co.uk/images/'+iconName+'.png');
	style.getIconStyle().setIcon(icon);
	if(html != ''){
		google.earth.addEventListener(placemark, "click",
			function(kmlEvent)
			{
				var target = kmlEvent.getTarget();
				var balloon = DS_ge.createHtmlStringBalloon('');
				balloon.setFeature(target); // optional
				balloon.setMaxWidth(350);
				balloon.setMinWidth(250);
				balloon.setContentString(html);
				DS_ge.setBalloon(balloon);
			});
	}	
	DS_ge.getFeatures().appendChild(placemark);
}

function addStartFlag(lat, lng)
{
	var placemark = DS_ge.createPlacemark('');
	var point = DS_ge.createPoint('');
	point.setLatitude(lat);
	point.setLongitude(lng);
	placemark.setGeometry(point);

	var style = DS_ge.createStyle('');
	placemark.setStyleSelector(style);
	var icon = DS_ge.createIcon('');
	icon.setHref('http://www.walkscene.co.uk/images/start_flag.png');
	style.getIconStyle().setIcon(icon);
	DS_ge.getFeatures().appendChild(placemark);
}

function addFinishFlag(lat, lng)
{
	var placemark = DS_ge.createPlacemark('');
	var point = DS_ge.createPoint('');
	point.setLatitude(lat);
	point.setLongitude(lng);
	placemark.setGeometry(point);

	var style = DS_ge.createStyle('');
	placemark.setStyleSelector(style);
	var icon = DS_ge.createIcon('');
	icon.setHref('http://www.walkscene.co.uk/images/end_flag.png');
	style.getIconStyle().setIcon(icon);
	DS_ge.getFeatures().appendChild(placemark);
}

function updateDistanceMarkers()
{
	if(distanceMarkers.length > 0)
	{
		for(var i=0; i<distanceMarkers.length; i++)
		{
//			map.removeOverlay(distanceMarkers[i]);
			DS_ge.getFeatures().removeChild(distanceMarkers[i]);
		}	
		distanceMarkers.length=0;
	}
	
	var showMarkersElement = document.getElementById("showMarkers");
	var milesElement = document.getElementById("miles");
	if(milesElement.checked == true){
		unitDistance = 1000 / 0.621367;
	}else{
		unitDistance = 1000;
	}
	latlng = new Array();
	var pointStrings = route_data.split(',');
	for(var i=0 ; i<pointStrings.length; i++)
	{
		var point = pointStrings[i].split(':');
		latlng[i] = new GLatLng(parseFloat(point[0]), parseFloat(point[1]));
	}
	
	var distances = new Array();
	distances[0] = 0;
	
	for(i=1; i<latlng.length; i++)
	{
		distances[i] = distances[i-1] + latlng[i-1].distanceFrom(latlng[i])  / unitDistance;
	}	

	step = 1;
	var distance = distances[distances.length-1];
	if(distance >30  ){ step = 5 ; }
	if(distance >104 ){ step = 10; }
	if(distance >209 ){ step = 20; }
	if(distance >519 ){ step = 50; }

	var unitCount = 0;
	for(i=1; i< distances.length; i++)
	{
		var count = Math.floor(distances[i]);
		while(count >= unitCount+step)
		{
			// do calcs on page co-ords and then convert to lat / lang ???
			unitCount+=step;
			var posOnLine = (unitCount - distances[i-1])/((distances[i] - distances[i-1]));
			var lat = latlng[i-1].lat()+ (latlng[i].lat() - latlng[i-1].lat()) * posOnLine; // need to allow for date-line!
			var lng = latlng[i-1].lng()+ (latlng[i].lng() - latlng[i-1].lng()) * posOnLine; // need to allow for date-line!

			var placemark = DS_ge.createPlacemark('');
			var point = DS_ge.createPoint('');
			point.setLatitude(lat);
			point.setLongitude(lng);
			placemark.setGeometry(point);

			var style = DS_ge.createStyle('');
			placemark.setStyleSelector(style);
			var icon = DS_ge.createIcon('');
			icon.setHref('http://www.walkscene.co.uk/images/milestone_'+unitCount+'.png');
			style.getIconStyle().setIcon(icon);
			distanceMarkers[distanceMarkers.length] = placemark;
			DS_ge.getFeatures().appendChild(placemark);
		}
	}
}



//************** Update functions from maps.js **************************

function update()
{
	updateDistanceMarkers();
	updateAltData();
	
}
function updateAltData()
{
	var milesElement = document.getElementById("miles");
	if(milesElement && milesElement.checked == true){
		var heightConversion = 3.2808399;
		var heightUnit = 'ft'
		var distConversion = 0.621367/1000;
		var distUnit = 'Miles'
	}else{
		var heightConversion = 1;
		var heightUnit = 'm'
		var distConversion = 1/1000;
		var distUnit = 'Km'
	}
	document.getElementById('totalAscent').innerHTML = Math.round(parseFloat(totalAscentMeters) * heightConversion)+' '+heightUnit;
	document.getElementById('totalDescent').innerHTML = Math.round(parseFloat(totalDescentMeters) * heightConversion)+' '+heightUnit;
	document.getElementById('distance').innerHTML = Math.round(parseFloat(distanceMeters) * distConversion*10)/10+' '+distUnit;
}

