    var map;
    var container;
    var opacity = 0.4;
    var circle;
    var centerMarker;
    var circleUnits;
    var circleRadius;
    var zoom = 6;
    //var centerPoint = new GLatLng(53.5,-1);
    var centerPoint = new GLatLng(51.211267,-2.695670);

    function load() {
      doLoad();
    }

    function reload() {
      doLoad();
      //resetMap(50, 0, 111);
      resetMap(mapLat, mapLng, mapRadius);
    }


    function doLoad() {
      if (GBrowserIsCompatible()) {
        container = document.getElementById("mapDiv");
        map = new GMap2(container, {draggableCursor:"crosshair"});
        map.setCenter(centerPoint, zoom);

        map.addControl(new GScaleControl());
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());

    //		map.enableContinuousZoom();
    //    map.enableScrollWheelZoom();

        var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(0, 620));
        //map.addControl(new MStatusControl({position:pos}));

      }
    }

    function drawCircle() {
      var oUnitsMI = document.getElementById('unitsMI');
      var oUnitsKM = document.getElementById('unitsKM');
      var oRadius = document.getElementById('radiusInput');
      oRadius.value = oRadius.value ? oRadius.value : 500;

      if (oRadius.value.match(/[^\d.]/)) {
        alert("Please enter a distance for radius");
        return;
      }
      if (oRadius.value > 9999) {
      }

      circleRadius = oRadius.value;

      if (oUnitsKM.checked) {
        circleUnits = 'KM';
      }
      else {
        circleUnits = 'MI';
      }

      doDrawCircle();

      var circleCenter = map.getCenter();
      var circleCenterLat =circleCenter.lat();
      var circleCenterLng=circleCenter.lng();
      getMarkers(circleRadius, circleUnits, circleCenterLat, circleCenterLng);

    }

    function doDrawCircle(){

      if (circle) {
        map.removeOverlay(circle);
      }

    /*
      if (centerMarker) {
        map.setCenter(centerMarker.getLatLng())
      }
      else {
        centerMarker = new GMarker(map.getCenter(),{draggable:true});
        GEvent.addListener(centerMarker,'dragend',drawCircle)
        map.addOverlay(centerMarker);
      }
    */

      if (centerMarker) {
        map.removeOverlay(centerMarker)
      }

      map.clearOverlays(); 

      var path = 'assets/images/';
      var img = 'fac_home.png';
      gHomeicon = new GIcon(G_DEFAULT_ICON, path + img);
      //centerMarker = new GMarker(map.getCenter(),{draggable:true});
      centerMarker = new GMarker(map.getCenter(),gHomeicon);
      GEvent.addListener(centerMarker,'dragend',drawCircle)
      map.addOverlay(centerMarker);

      var center = map.getCenter();

      var bounds = new GLatLngBounds();

      var circlePoints = Array();

      with (Math) {
        if (circleUnits == 'KM') {
          var d = circleRadius/6378.8;	// radians
        }
        else { //miles
          var d = circleRadius/3963.189;	// radians
        }

        var lat1 = (PI/180)* center.lat(); // radians
        var lng1 = (PI/180)* center.lng(); // radians

        for (var a = 0 ; a < 361 ; a++ ) {
          var tc = (PI/180)*a;
          var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
          var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
          var x = ((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function
          var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
          circlePoints.push(point);
          bounds.extend(point);
        }

        if (d < 1.5678565720686044) {
          //circle = new GPolygon(circlePoints, '#000000', 2, 1, '#000000', 0.25);
          circle = new GPolygon(circlePoints, '#009CD1', 2, 1, '#009CD1', 0.15);
        }
        else {
          //circle = new GPolygon(circlePoints, '#000000', 2, 1);
          circle = new GPolygon(circlePoints, '#009CD1', 2, 1);
        }
        map.addOverlay(circle);

        map.setZoom(map.getBoundsZoomLevel(bounds));
      }
    }

    function getMarkers(circleRadius, circleUnits, circleCenterLat, circleCenterLng)
    {

      //window.alert('radius = ' + circleRadius + ' units = ' + circleUnits + ' lat = ' + circleCenterLat + ' lng = ' + circleCenterLng);

      var request = GXmlHttp.create();

      var getURL = 'ajaxRetrieveMarkers.php?lat=' + circleCenterLat+ '&lng=' + circleCenterLng + '&radius=' + circleRadius + '&units=' + circleUnits;

      //window.alert(getURL);

      request.open('GET', getURL, true);

      request.onreadystatechange = function() {

        if(request.readyState == 4) {

          var xmlDoc = request.responseXML;

          var markers = xmlDoc.documentElement.getElementsByTagName("marker");

          var tableHtml = "<p>The results of your search are summarised below. To see more detailed information please either click on any counsellor name, or else tick one or more boxes under 'Select' and then click the 'Show Details' button at the bottom of this page.</p>";

          var tableHtml = tableHtml + '<table id="tblSearchResults" style="width: 585px;" cellspacing="0">';
          var hiddenIds = '';
          
          tableHtml = tableHtml + '<tr><th>Name</th><th>&nbsp;</th><th>Accreditations</th><th>Location</th><th class="results-select">Select</th></tr>';

          for (i = 0; i < markers.length; i++) {

            var lng = markers[i].getAttribute("lng");
            var lat = markers[i].getAttribute("lat");
            //Check for lng and lat so IE doesn't throw a paddy!
            if(lng && lat) {
              var latlng = new GLatLng(parseFloat(lat),parseFloat(lng));

              var strAddress = markers[i].getAttribute("address");
              //var parsedAddress = strAddress;
              var parsedAddress = strAddress.replace(/::/g, "<br />");
              
              if (parsedAddress == 'n/a')
              {
                parsedAddress = '&nbsp;';
              }
              
              var counsellor_seo_url = 'counsellor/' + markers[i].getAttribute("id") + '/' + markers[i].getAttribute("seoname") + '.html';

              //var linkURL = '<br /><a style="color: #009cd1;" href="counsellor_details.php?src=map&counsellor_id=' + markers[i].getAttribute("id") + '">view this counsellor\'s details</a>';

              var linkURL = '<br /><a style="color: #009cd1;" href="' + counsellor_seo_url + '">view this counsellor\'s details</a>';
              var html = '<div style="font-family: verdana, sans-serif;color: #000;font-size: 0.8em;">' + markers[i].getAttribute("name") + '<br />' + parsedAddress + linkURL + '</div>';

              var marker = createMarker(latlng, html);
              map.addOverlay(marker);
              
              tableHtml = tableHtml + '<tr>';
              tableHtml = tableHtml + '<td class="results-name" valign="top">' + markers[i].getAttribute("name") + '</td>';
              tableHtml = tableHtml + '<td class="results-tick" valign="top"><img src="assets/images/tcc-tick-20.gif" "alt="Counselling Channel Approved logo" title="Approved Counsellor" /></td>';
              tableHtml = tableHtml + '<td class="results-accred" valign="top">' + markers[i].getAttribute("accreditations") + '</td>';
              tableHtml = tableHtml + '<td class="results-town" valign="top">' + parsedAddress + '</td>';
              tableHtml = tableHtml + '<td class="results-select" valign="top"><input type="checkbox" name="selected_ids[]" value="' + markers[i].getAttribute("id") + '"/></td>';
              tableHtml = tableHtml + '</tr>';
              
              hiddenIds = hiddenIds + markers[i].getAttribute("id") + ':';
              
            }

          }
          
          tableHtml = tableHtml + '<tr><td colspan="9" style="text-align: right;"><input type="submit" name="action" value="Show Details" /></td></tr>';
          tableHtml = tableHtml + '</table>';
          
          tableHtml = tableHtml + '<input type="hidden" name="marker_ids" value="' + hiddenIds + '" />';

          var mapconfigs = xmlDoc.documentElement.getElementsByTagName("mapconfig");
          for (i = 0; i < mapconfigs.length; i++) {
            tableHtml = tableHtml + '<input type="hidden" name="map_config" value="' + mapconfigs[i].getAttribute("maplat") + ':' + mapconfigs[i].getAttribute("maplng") + ':' + mapconfigs[i].getAttribute("mapradius") + ':' + mapconfigs[i].getAttribute("mapunits") + '" />';
          }

          
          document.getElementById('resultsTable').innerHTML = tableHtml;
          
        }

      }

      request.send(null);

    }

    function createMarker(latlng, html)
    {

      var path = 'assets/images/';
      var img = 'fac_pin.png';
      gicon = new GIcon(G_DEFAULT_ICON, path + img);

      var marker = new GMarker(latlng, gicon);
      GEvent.addListener(marker, 'click', function(){
        var markerHTML = html;
        marker.openInfoWindowHtml(markerHTML);
      });
      return marker;
    }
    
    //function resetMap(lat, lng, center, zoom, radius, units)
    function resetMap(lat, lng, radius)
    {
      
      //window.alert('test');
      
      var oRadius = document.getElementById('radiusInput');
      oRadius.value = radius;

      var centerPoint = new GLatLng(lat, lng);
      map.setCenter(centerPoint, zoom);
      drawCircle();
    
    }
