    google.load('search', '1');
    google.load('maps', '2');

    google.setOnLoadCallback(OnLoad);


    var preload=new Image(20,20);
    preload.src="css/images/smallthrob.gif";
    var gMap;
    var gdir;
    var geocoder = null;
    var addressMarker;
    var locale="UK";
    var gLocalSearch;
    var gSearchForm;

var first;
var line="";

	liner=[];
	geo=[];

    function OnLoad() {
          gMap = new google.maps.Map2(document.getElementById("map_canvas"));
          gMap.setCenter(new google.maps.LatLng(53.92057,-2.17438), 5);
          gMap.addControl(new google.maps.SmallMapControl());

          gSearchForm = new google.search.SearchForm(false, document.getElementById("searchinput"));
          gSearchForm.setOnSubmitCallback(null, CaptureForm);
          gSearchForm.input.focus();
          gLocalSearch = new google.search.LocalSearch();
          gLocalSearch.setCenterPoint(gMap);
          gLocalSearch.setSearchCompleteCallback(null, OnSearchComplete);

                GEvent.addListener(gMap,"click",function(overlay,latlng,overlaylatlng) {
          	gSearchForm.input.value="";
          	gSearchForm.input.blur();

                    if (overlay) { 
                        if (overlay instanceof GMarker) { 
                            // nothing 
                        } else if (overlay instanceof GPolygon) { 
                            // nothing 
                        }  else if (overlay instanceof GPolyline) { 
    	            alert(overlaylatlng); 
    	     } 
                    } 
               // document.getElementById("dist").innerHTML=Distances(latlng.y,latlng.x);
                Distances(latlng.y,latlng.x);
                }); 

    };

	var dwFilterFunc = function(dataSet, row, rowNumber) {
  	// Filter out all but first 12 rows (4 rows in 3 column layout)

 		 if (rowNumber < 12) return row;  // Return the row to keep it in the data set.
  		return null;   // Return null to remove the row from the data set.
	}
	function Distances(lat1,lon1) {
	    ds1.filter(null); // remove filter on poscode search or map click
	    var str="";
	    var p=0;
	    var d=ds1.getData();
	          for (var i=0;i<d.length;i++) {
		p=haversine(parseFloat(lat1),parseFloat(lon1),parseFloat(d[i]["lat"]),parseFloat(d[i]["lng"]));
		d[i]["dist"]=Math.round(p*100)/100;
		str+=d[i]["Postcode"]+": "+d[i]["dist"]+"<br/>";
	          }
	    ds1.sort("dist","ascending");
	    ds1.filter(dwFilterFunc);
	return str;
     	};
	function haversine(lat1,lon1,lat2,lon2){
	    var R = 3958.756; // miles //6371; // km
	    var dLat = (lat2-lat1).toRad();
	    var dLon = (lon2-lon1).toRad(); 
	    var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        	    Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * 
       	    Math.sin(dLon/2) * Math.sin(dLon/2); 
	   var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
	   var d = R * c;
	return d;
	};
	Number.prototype.toRad = function() {  // convert degrees to radians
 		 return this * Math.PI / 180;
	};

    function CaptureForm(searchForm) {
      gLocalSearch.execute(searchForm.input.value);
      return false;
    }

OnSearchComplete = function(sc, searcher) {
      document.getElementById("directions").innerHTML="Nothing found";
      if ( gLocalSearch.results && gLocalSearch.results.length > 0) {
        for (var i = 0; i < gLocalSearch.results.length; i++) {
          var result = gLocalSearch.results[i];

          // if this is a local search result, then proceed...
          if (result.GsearchResultClass == google.search.LocalSearch.RESULT_CLASS ) {
              Distances(result.lat,result.lng);
		try {
           	//	document.getElementById("directions").innerHTML=result.city+" "+i+"<br/> "+result.addressLines[0]+", <a href=\""+result.ddUrl+"\">Link</a> "+result.lat+" "+result.lng;
           		document.getElementById("directions").innerHTML=result.addressLines[0]+",  "+result.lat+" "+result.lng;
		}catch(e){
		document.getElementById("directions").innerHTML=e;
		}
         }
        }
      }
    }

