function zoomToPostcode() {
	var postcode = document.getElementById("postcode").value;
	var request;
	if (window.XMLHttpRequest) {
	    request = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
	    request = new ActiveXObject("Microsoft.XMLHTTP");
	}
	var result;
	request.open('GET', 'routes-ws-postcode-to-lat.php?postcode=' + postcode, true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var coords = (request.responseText).split("X");
			if (coords[0]!=0 && coords[1]!=0) {
				map.setCenter(new GLatLng(coords[0],coords[1]),11);
			} else {
				alert("Postcode not recognised");
			}
	  	}
	}
	request.send(null);
}
function distPointToPoint(point1,point2) {
	if (point1.lat()==point2.lat() && point1.lng()==point2.lng()) {
		return 0;
	}
	var radlat1 = Math.PI * point1.lat()/180
	var radlat2 = Math.PI * point2.lat()/180
	var radlon1 = Math.PI * point1.lng()/180
	var radlon2 = Math.PI * point2.lng()/180
	var theta = point1.lng()-point2.lng();
	var radtheta = Math.PI * theta/180
	var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
	dist = Math.acos(dist)
	dist = dist * 180/Math.PI
	dist = dist * 60 * 1.1515
	return dist
}
function clearRoute() {
	map.clearOverlays();
	map.setCenter(homepoint);
	document.getElementById("routedistance").value=0;
	document.getElementById("routedistancekm").value=0;
	totaldistance=0;
	points.length=0;
	route.length=0;
	markers.length=0;
}

function undoStep() {
	popPoint();
}

function drawRoute() {
	map.clearOverlays();
	if (points.length>1) {
		startpoint=points[0];
		endpoint=points[points.length-1];
		map.removeOverlay(route);
		route = new GPolyline(points);
		map.addOverlay(route);
		map.addOverlay(new GMarker(startpoint));
		map.addOverlay(new GMarker(endpoint,icon));
	} else {
		startpoint=points[0];
		endpoint=points[0];
		map.addOverlay(new GMarker(startpoint,icon));
	}
	var mileicon = new GIcon();
	mileicon.iconSize = new GSize(19, 19);
	mileicon.iconAnchor = new GPoint(10, 10);
	for (i=0;i<markers.length;i++) {
		var mile_to_display = i+1;
		mileicon.image = "/images/icons/mm_"+mile_to_display+".png";
		map.addOverlay(new GMarker(markers[i],mileicon));
	}
	document.getElementById("latitude").value=startpoint.lat();
	document.getElementById("longitude").value=startpoint.lng();
	document.getElementById("routedata").value=points.toString();
}

function roundDistance(x) {
	return Math.round(x*100)/100;
}

function pushPoint(point) {
	points.push(point);
	var oldmilescovered=Math.floor(totaldistance);
	var olddistance=totaldistance;
	if (points.length>1) {
		stagedistance=distPointToPoint(points[points.length-1],points[points.length-2])
		totaldistance=totaldistance+stagedistance;
	} else {
		totaldistance=0;
	}
	var newmilescovered=Math.floor(totaldistance);
	for (var x=oldmilescovered;x<newmilescovered;x++) {
		var markertoplace=x+1;
		var distanceRatio = (markertoplace - olddistance) / (totaldistance - olddistance);
		var point_new = points[points.length-1];
		var lat_new = point_new.lat();
		var lng_new = point_new.lng();
		var point_old = points[points.length-2];
		var lat_old = point_old.lat();
		var lng_old = point_old.lng();
		
		var lat_mm = 1*lat_old+1*(lat_new-lat_old)*distanceRatio;
		var lng_mm = 1*lng_old+1*(lng_new-lng_old)*distanceRatio;
		pushMarker(new GLatLng(lat_mm,lng_mm));
	}
	document.getElementById("routedistance").value=roundDistance(totaldistance);
	document.getElementById("routedistancekm").value=roundDistance(totaldistance*1.61);
	return true;
}
function popPoint(point) {
	if (points.length>2) {
		var olddistance=totaldistance;
		var lastpoint=points.pop();
		totaldistance=totaldistance-distPointToPoint(lastpoint,points[points.length-1]);
		document.getElementById("routedistance").value=roundDistance(totaldistance);
		document.getElementById("routedistancekm").value=roundDistance(totaldistance*1.61);
		for (i=Math.floor(olddistance);i>Math.floor(totaldistance);i--) {
			popMarker();
		}
		drawRoute();
	} else {
		clearRoute();
	}
	map.setCenter(endpoint);
}

function pushMarker(point) {
	markers.push(point);
}
function popMarker() {
	markers.pop();
}
function buildRouteFromFormData() {
	var pointdata=document.getElementById("routedata").value;
	pointdata = pointdata.replace(/\),\(/g,"X");
	pointdata = pointdata.replace(/\)/g,"");
	pointdata = pointdata.replace(/\(/g,"");
	var pointlist = pointdata.split(/X/g);
	for (i=0;i<pointlist.length;i++) {
		latandlong = pointlist[i].split(",");
		lat = latandlong[0];
		lng = latandlong[1];
		pushPoint(new GLatLng(lat,lng));
	}
	drawRoute();
	map.setCenter(endpoint,15);
}
function runHome(){
	var returnLeg = points.slice();
	returnLeg.reverse();
	for (i=0;i<returnLeg.length;i++) {
		pushPoint(returnLeg[i]);
	}
	drawRoute();
	map.setCenter(endpoint,15);
}

var icon = new GIcon();
icon.image = "http://www.fetcheveryone.com/fe_roundsymbol.png";
icon.iconSize = new GSize(19, 19);
icon.iconAnchor = new GPoint(10, 10);

var points = [];
var markers = [];
var startpoint = new GLatLng();
var endpoint = new GLatLng();
var totaldistance=0;
var stagedistance=0;

var route = new GPolyline(points);
var map = new GMap2(document.getElementById("map"), {draggableCursor: 'crosshair', draggingCursor: 'crosshair'});
var doubleclick = false;
var bIsIE = false;

window.onload = function() {
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
    map.setCenter(homepoint,15);
	map.disableDoubleClickZoom();
	map_init();
}


