var map;
    var geocoder;
    
    var iconBlue = new GIcon(); 
    iconBlue.image = 'mapimages/mm_20_blue.png';
    iconBlue.shadow = 'mapimages/mm_20_shadow.png';
    iconBlue.iconSize = new GSize(12, 20);
    iconBlue.shadowSize = new GSize(22, 20);
    iconBlue.iconAnchor = new GPoint(6, 20);
    iconBlue.infoWindowAnchor = new GPoint(5, 1);    

    var customIcons = [];
    customIcons["store"] = iconBlue;


    function load() {
      if (GBrowserIsCompatible()) {
        geocoder = new GClientGeocoder();
        map = new GMap2(document.getElementById('map'));
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(54.0214, -3.86445), 6);

        GDownloadUrl("phpsqlajax_genxml.php", function(data) {
          var xml = GXml.parse(data);
          var markers = xml.documentElement.getElementsByTagName("marker");
          for (var i = 0; i < markers.length; i++) {
            var name = markers[i].getAttribute("name");
            var address1 = markers[i].getAttribute("address1");
            var address2 = markers[i].getAttribute("address2");
            var town = markers[i].getAttribute("town");
            var postcode = markers[i].getAttribute("postcode");  
            var type = markers[i].getAttribute("type");           
            var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                    parseFloat(markers[i].getAttribute("lng")));
            var marker = createMarker(point, name, address1, address2, town, postcode, type);
            map.addOverlay(marker);
          }
        });
      }
    } 
    
    function searchLocations() {
     var fulladdress = document.getElementById('addressInput').value;
     //split the postcode
     splittedaddress = fulladdress.split(" ");
     address = splittedaddress[0];
     geocoder.getLatLng(address, function(latlng) {
       if (!latlng) {
         alert(address + ' not found');
       } else {
         searchLocationsNear(latlng);
       }
     });
    }   
    
    function searchLocationsNear(center) {
      var radius = document.getElementById('radiusSelect').value;
      var searchUrl = 'phpsqlajax_genxml.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;
      GDownloadUrl(searchUrl, function(data) {
        var xml = GXml.parse(data);
        var markers = xml.documentElement.getElementsByTagName('marker');
        map.clearOverlays();            
    
        var bounds = new GLatLngBounds();
        for (var i = 0; i < markers.length; i++) {
        
          var name = markers[i].getAttribute("name");
          var address1 = markers[i].getAttribute("address1");
          var address2 = markers[i].getAttribute("address2");
          var town = markers[i].getAttribute("town");
          var postcode = markers[i].getAttribute("postcode");  
          var type = markers[i].getAttribute("type");           
          var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                    parseFloat(markers[i].getAttribute("lng")));
          var marker = createMarker(point, name, address1, address2, town, postcode, type);        
          map.addOverlay(marker);
          
          bounds.extend(point);
        }
        map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
      });
    }
    
    function createMarker(point, name, address1, address2, town, postcode, type) {
      var marker = new GMarker(point, customIcons[type]);
      var html = "<b>" + name + "</b> <br/>" + address1 + "<br />" + address2 + "<br />" + town + "<br />" + postcode;
      GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
      });
      return marker;
    }
