function centreMap(lat,lng,org,org2){
	var orgll = new GLatLng(org,org2);
	var latlng = new GLatLng(lat,lng);
	var bounds = new GLatLngBounds;
	bounds.extend(orgll);
	bounds.extend(latlng);
	map.setZoom(map.getBoundsZoomLevel(bounds)-1);
	map.panTo(bounds.getCenter());
	}
	
function createMarker(name, icon, point, index) { 
 var markerIcon = new GIcon(G_DEFAULT_ICON); 
  switch(icon){
	 case "walking":
		markerIcon.image = "http://maps.google.com/mapfiles/ms/micons/trail.png"; 
		markerIcon.shadow = "http://maps.google.com/mapfiles/ms/micons/trail.shadow.png";
		markerIcon.iconSize = new GSize(32, 32); 
		markerIcon.shadowSize = new GSize(59, 32); 
		markerIcon.iconAnchor = new GPoint(12, 32); 
		break;
	 case "bike":
		markerIcon.image = "http://maps.google.com/mapfiles/ms/micons/motorcycling.png"; 
		markerIcon.shadow = "http://maps.google.com/mapfiles/ms/micons/motorcycling.shadow.png";
		markerIcon.iconSize = new GSize(32, 32); 
		markerIcon.shadowSize = new GSize(59, 32); 
		markerIcon.iconAnchor = new GPoint(12, 32); 
		break;
	 case "rail":
		markerIcon.image = "http://maps.google.com/mapfiles/ms/micons/rail.png"; 
		markerIcon.shadow = "http://maps.google.com/mapfiles/ms/micons/rail.shadow.png";
		markerIcon.iconSize = new GSize(32, 32); 
		markerIcon.shadowSize = new GSize(59, 32); 
		markerIcon.iconAnchor = new GPoint(12, 32); 
		break;
	 case "bus":
		markerIcon.image = "http://maps.google.com/mapfiles/ms/micons/bus.png"; 
		markerIcon.shadow = "http://maps.google.com/mapfiles/ms/micons/bus.shadow.png";
		markerIcon.iconSize = new GSize(28, 28); 
		markerIcon.shadowSize = new GSize(55, 28); 
		markerIcon.iconAnchor = new GPoint(8, 28); 
		break;
	 case "green":
		markerIcon.image = "http://maps.google.com/mapfiles/ms/micons/grn-pushpin.png"; 
		markerIcon.shadow = "http://maps.google.com/mapfiles/ms/micons/pushpin_shadow.png"; 
		markerIcon.iconSize = new GSize(32, 32); 
		markerIcon.shadowSize = new GSize(59, 32); 
		markerIcon.iconAnchor = new GPoint(12, 32); 
		break;
	 case "road":
		markerIcon.image = "http://maps.google.com/mapfiles/ms/micons/ltblu-pushpin.png"; 
		markerIcon.shadow = "http://maps.google.com/mapfiles/ms/micons/pushpin_shadow.png"; 
		markerIcon.iconSize = new GSize(32, 32); 
		markerIcon.shadowSize = new GSize(59, 32); 
		markerIcon.iconAnchor = new GPoint(12, 32); 
		break;
	 default:
		markerIcon.image = "http://maps.google.com/mapfiles/ms/micons/blue-pushpin.png"; 
		markerIcon.shadow = "http://maps.google.com/mapfiles/ms/micons/pushpin_shadow.png"; 
		markerIcon.iconSize = new GSize(32, 32); 
		markerIcon.shadowSize = new GSize(59, 32); 
		markerIcon.iconAnchor = new GPoint(12, 32); 
		break;
	 }
 
  // Set up our GMarkerOptions object 
  markerOptions = { icon:markerIcon }; 
  var name = new GMarker(point, markerOptions); 
 
  if (index){
	GEvent.addListener(name, "click", function() { 
		name.openInfoWindowHtml(index); 
		}); 
	}
  return name; 
}

function formatDistance(num,type){
var ret;
if (type == "miles"){
	ret = num / 1609.344;
	if (ret < 0.1){
		ret = Math.round(ret / 0.000189393939);
		type = "feet";
		}
} else if(type == "km"){
	ret = num / 1000;
	if (ret < 0.1){
		ret = Math.round(ret * 1000);
		type = "Meters";
		}
	}

ret = Math.round(ret*100)/100;
ret = ret + " " + type;	
return ret;
}

function formatTime(min){
var ret;
min = Math.round(min);
if (min < 60){
	ret = min + " mins"; 
} else {
	var hrs = Math.floor(min/60);
	min = (min - (hrs*60)) + " mins";
	ret = hrs + " hours " + min;
	}
return ret;
}

function redraw(){
	}
	
function strtoLatLon(str){
var arr = str.split(",");
arr[0] = parseFloat(arr[0]);
arr[1] = parseFloat(arr[1]);
return arr;
}

function calcRoute(start,end,waypts,travelmode,clear){
if (clear == 1){
	$("#directions").html("").hide();
	$("#myDirections").html("").hide();
	directions.clear();
	$(cleanUp).each(function () { 
		map.removeOverlay(this); 
		}); 
	}
	
	$(".dir_info").html("<p class='bold'>"+title+"</p>"+description);
	
	var options = {
		"travelMode": travelmode
		};
	if (!waypts || waypts.length == 0){
		$("#directions").show();
		directions.load("from: "+start+" to: "+end,options)
	} else {
		$("#directions").show();
		directions.loadFromWaypoints(waypts,options);
		}
	//directions.travelMode = travelmode;
	//GEvent.addListener(directions, "load", onGDirectionsLoad);
}

function onGDirectionsLoad(){
	//alert(directions.getStatus().code);
	var dpanel = "";
	var latlngs = [];
	var routes = directions.getNumRoutes();
	var a_steps = 1;
	var alpha_step = 0;
	for (var ri = 0; ri < routes; ri++){
		var trip = directions.getRoute(ri);
		var steps = trip.getNumSteps();
		//alert(directions.travelMode);
		if (ri == 0){
			if (directions.travelMode == 2){dpanel += "<div class='warning'><p>Use caution – This route may be missing sidewalks or pedestrian paths.</p></div>";}
			dpanel += "<div class=high><p>Start: "+trip.getStartGeocode(0).address+"</p></div>";
			dpanel += "<div><p>The distance of your route is "+formatDistance(directions.getDistance().meters,"miles")+"</p></div>";
			}
		for (var i = 0; i < steps; i++){
			dpanel += "<div class=step><p><span class='steps'>"+(a_steps)+" :</span><span class=step_text>" + trip.getStep(i).getDescriptionHtml() + " </span><span class=distance_text>"+ formatDistance(trip.getStep(i).getDistance().meters,"miles")+"";
			dpanel += "</span></p></div>";
			a_steps++;
			}
		if (ri == (routes-1)){
			dpanel += "<div class=high><p>Finish: "+trip.getEndGeocode(0).address+"</p></div>"
			} else {
			alpha_step++;
			dpanel += "<div class=high><p>"+String.fromCharCode('A'.charCodeAt() + alpha_step)+": "+trip.getEndGeocode(0).address+"</p></div>"
			}
		}
	dpanel += "<div class='copyright'><p>"+directions.getCopyrightsHtml()+"</p></div>";
	dpanel = dpanel;
	//$("#myDirections").html(dpanel);
	 setTimeout("redraw()",1);
}

function drawRoute(route,desc,distance,clear){
if (clear == 1){
	directions.clear();
	$(cleanUp).each(function () { 
		map.removeOverlay(this); 
		}); 
	}

var dpanel = "";
	$(".dir_info").html("<p class='bold'>"+title+"</p>"+description);
var totalD = 0;
	$(distance).each(function () { 
		totalD += this; 
		});
var travelTime = (totalD / (4*1609.344)) * 60;
var polyline = new GPolyline(route); 
map.addOverlay(polyline);
cleanUp.push(polyline);
var bounds = new GLatLngBounds;
  for (var i=0; i<route.length; i++) {
    bounds.extend(route[i]);
  }
  map.setZoom(map.getBoundsZoomLevel(bounds));
  map.panTo(bounds.getCenter());
dpanel += "<div class='warning'><p>Use caution – This route may be missing sidewalks or pedestrian paths.</p></div>";
var step = 1;
var c = desc.length;
for(var i = 0; i < c; i++){
	if (i == 0) {dpanel += "<div class=high><p>Start: "+desc[i]+"</p></div><div><p>The distance of your route is about "+formatDistance(totalD,"miles")+"</p></div>"} else
	if (i == (c-1)) {dpanel += "<div class=high><p>Finish: "+desc[i]+"</p></div>"} 
	else {
		dpanel += "<div class=step><span class='steps'>"+(step)+" :</span><span class=step_text>" + desc[i] + " </span><span class=distance_text>"+ formatDistance(distance[(step-1)],"miles")+"";
		dpanel += "</span></div>";step++;	}
	}
	$("#myDirections").html(dpanel).show();
	 //setTimeout("changeImages()",1);
}

/*var localSearch = new GlocalSearch();

function handleClicks(marker, point){
	lat = point.lat();
	lng = point.lng();
	reverse(point);
	//add_steps(point.lat() + ", " + point.lng());
}

*/
function ispostcode(postcode){
var re = new RegExp('^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$');
if (postcode.match(re)) {
return true;
} else {
return false;
}
}
/*
function usePointFromPostcode(postcode, callbackFunction) {
	
	localSearch.setSearchCompleteCallback(null, 
		function() {
			
			if (localSearch.results[0])
			{		
				var resultLat = localSearch.results[0].lat;
				var resultLng = localSearch.results[0].lng;
				var point = new GLatLng(resultLat,resultLng);
				callbackFunction(point);
			}else{
				alert("Postcode not found!");
			}
		});	
		
	localSearch.execute(postcode + ", UK");
}

function checkpostcode(postcode) {
	if (ispostcode(postcode) == true){
	localSearch.setSearchCompleteCallback(null, 
		function() {
			if (localSearch.results[0])
			{
				document.getElementById('lat').value = localSearch.results[0].lat;
				document.getElementById('lng').value = localSearch.results[0].lng;
				document.getElementById('submit').disabled=false;
			}else{
				alert('Postcode not found!');
			}
		});	
	
	localSearch.execute(postcode + ", UK");
	} else {
	alert('Postcode incorrect!');
	}
}

function search_place(name){
	if (name != ""){
		localSearch.setSearchCompleteCallback(null,
			function() {
				if (localSearch.results[0])
					{
						lat = localSearch.results[0].lat.substr(0,7);
						lng = localSearch.results[0].lng.substr(0,7);
						var point = new GLatLng(lat,lng);
						//placeMarkerAtPoint(point);
						setCenterToPoint(point);
						reverse(point);
					} else {
						info.innerHTML = "<p class=error>Unable to find place, please click a road!</p>";
					}
				}
			);
			
		localSearch.execute(name + ", Cheshire,  UK");
		}
}

function search_event(name){
if (ispostcode(name) == true){
		localSearch.setSearchCompleteCallback(null,
			function() {
				if (localSearch.results[0])
					{
						lat = localSearch.results[0].lat;
						lng = localSearch.results[0].lng;
						var point = new GLatLng(lat,lng);
						//placeMarkerAtPoint(point);
						setCenterToPoint(point);
						reverse(point);
					} else {
						info.innerHTML = "<p class=error>Unable to find location, please click nearest road!</p>";
					}
				}
			);
			
		localSearch.execute(name + ",  UK");
		} else {
		info.innerHTML = "<p class=error>Postcode Incorrect, Please use full postcode (WA11 1EX) to search!</p>";
		}
}

function search_postcode_latlng(name){
if (ispostcode(name) == true){
		localSearch.setSearchCompleteCallback(null,
			function() {
				if (localSearch.results[0])
					{
						lat = localSearch.results[0].lat;
						lng = localSearch.results[0].lng;
						var point = new GLatLng(lat,lng);
						//placeMarkerAtPoint(point);
						setCenterToPoint(point);
						placeMarkerAtPoint(point);
						document.getElementById("lat").value = point.lat();
						document.getElementById("lng").value = point.lng();
					} else {
						info.innerHTML = "<p class=error>Unable to find location, please click nearest road!</p>";
					}
				}
			);
			
		localSearch.execute(name + ",  UK");
		} else {
		info.innerHTML = "<p class=error>Postcode Incorrect, Please use full postcode (WA11 1EX) to search!</p>";
		}
}


function showPointLatLng(point)
{
	alert("Latitude: " + point.lat() + "\nLongitude: " + point.lng());
}
*/
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

function addUnLoadEvent(func) {
	var oldonunload = window.onunload;
	if (typeof window.onunload != 'function') {
	  window.onunload = func;
	} else {
	  window.onunload = function() {
	    oldonunload();
	    func();
	  }
	}
}



