function create_node(point, flag){

	if (flag == "start") {icon.image = "http://www.google.com/mapfiles/dd-start.png";}
	else {icon.image = "http://www.google.com/mapfiles/dd-end.png";}
	
	icon.iconSize = new GSize(10, 17);
	icon.iconAnchor = new GPoint(5, 17);
	icon.infoWindowAnchor = new GPoint(5, 17);

	var markerOpts = {};
	markerOpts = {
	"icon": icon,
	"clickable": true,
	};

	var marker = new GMarker(point, markerOpts);
	return marker;
}

function calc_distance(my_overlay, point){
if (document.getElementById("ck_route").checked == true){
	i_window = document.getElementById("info_window");
	    
	if (!startMarker) {
	    resetRoute();		
		i_window.innerHTML = 'Start: ' + point.y.toFixed(4) + ' Lat, ' + point.x.toFixed(4) + ' Lon ';
		startMarker = '1';		
		start_marker = create_node(point, "start");
		point_start = point;
		marker_start = new Object();
		marker_start = start_marker;
		map.addOverlay(start_marker);
	//	map.getDragObject().setDraggableCursor("crosshair"); 
	}
	else if (!endMarker){
		//endMarker = createMarker(point,'End','', 1,null,true)
		//map.addOverlay(endMarker);
		//i_window.innerHTML += ' -> End: ' + point.y.toFixed(4) + ' Lat, ' + point.x.toFixed(4) + ' Lon | ';
		//oRoute.innerHTML += point_start.distanceFrom(point).toFixed(0)/1000 + " km";
		
		//###############################################################################v
		var bounds = new GLatLngBounds();
		var p1 = point_start;
		var p2 = point;
		bounds.extend(p1);
		bounds.extend(p2);
		
		end_marker = create_node(point, "end");
		marker_end = new Object();
		marker_end = end_marker;
		map.addOverlay(end_marker);
		
		var fPoints = new Array();
		with (Math) {
			var lat1 = p1.y * (PI/180);
			var lon1 = p1.x * (PI/180);
			var lat2 = p2.y * (PI/180);
			var lon2 = p2.x * (PI/180);

			var d = 2*asin(sqrt( pow((sin((lat1-lat2)/2)),2) + cos(lat1)*cos(lat2)*pow((sin((lon1-lon2)/2)),2)));
			var bearing = atan2(sin(lon1-lon2)*cos(lat2), cos(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(lon1-lon2))  / -(PI/180);
			bearing = bearing < 0 ? 360 + bearing : bearing;
			for (var n = 0 ; n < 51 ; n++ ) {
				var f = (1/50) * n;
				f = f.toFixed(6);
				var A = sin((1-f)*d)/sin(d);
				var B = sin(f*d)/sin(d);
				var x = A*cos(lat1)*cos(lon1) +  B*cos(lat2)*cos(lon2);
				var y = A*cos(lat1)*sin(lon1) +  B*cos(lat2)*sin(lon2);
				var z = A*sin(lat1)           +  B*sin(lat2);

				var latN = atan2(z,sqrt(pow(x,2)+pow(y,2)));
				var lonN = atan2(y,x);
				var p = new GLatLng(latN/(PI/180), lonN/(PI/180));
				fPoints.push(p);
//				bounds.extend(p);
			}
		}
		routes.push(fPoints);
		var pLine = new GPolyline(fPoints,'#FFFFFF',2,1);
		map.addOverlay(pLine);
		
		line_layer[0] = new Object();
		line_layer[0] = pLine;
		
		map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds)-1); 
		var dist = d * 6378.137; // KM
		var distNM = dist * 0.54;
		i_window.innerHTML = 'Distance: ' + dist.toFixed(2) + ' KM, ';
		i_window.innerHTML += distNM.toFixed(2) + ' NM | ';
		i_window.innerHTML += 'Bearing: ' + bearing.toFixed(2) + '°';		
		startMarker = null;
		endMarker = 1;
	}
}
}
function resetRoute() {
	if (endMarker){
		line_layer[0].hide();
		marker_start.hide();
		marker_end.hide();
	}
	routes = [];
	startMarker = null;
	endMarker = null;
	document.getElementById("info_window").innerHTML = '';
}

function check_calc(checked){
if(!checked){
	line_layer[0].hide();
	marker_start.hide();
	marker_end.hide();
	startMarker = null;
	endMarker = null;
	window_doc.innerHTML = '';
	map.getDragObject().setDraggableCursor("default");
	}
	else{
	    window_doc = document.getElementById("info_window");
		map.getDragObject().setDraggableCursor("crosshair");
		window_doc.innerHTML = 'Left click on the map to initialise the starting point. Second left click will set the ending point.';
	}
}
