
    var map = null;
    var AutoShowEnable = true
    
    //<![CDATA[
    function load() {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.addControl(new GScaleControl());
    
    //look for location in querystring    
        var qs = new Querystring();
        var StartingLatLng=qs.get('LatLng','52.2067,0.1277')
                
        var indexofComma = StartingLatLng.indexOf(",");
        var sngLat = +StartingLatLng.substring(0,indexofComma);
        var sngLong = +StartingLatLng.substring(indexofComma+1,StartingLatLng.length);
        var point = new GLatLng(sngLat,sngLong)
         
        var StartingZoom = +qs.get('Zoom','12')
         
        map.setCenter(point, StartingZoom);

        //Build array of icons
        WGvb.GetIcons(GetIcons_Callback)

        GEvent.addListener(map, "moveend", function() {
          if ((AutoShowEnable == true)) {
              GetLocations();

          }
            if ((AutoShowEnable == false) ) {
                AutoShowEnable = true
            }
        });

      } else {
        alert("Your browser is not supported by this site.  Please get a decent one.")
      }

    }

    function ZoomIn(sngLat, sngLong) {
        map.setCenter(new GLatLng(sngLat,sngLong),map.getZoom()+1);
    };

//======
    var Icons=new Array();
    
    function GetIcons_Callback(response){
         if (response.error != null){
           alert("GetIcons: " + response.error);
           return;
         };
         
         var ds = response.value;
         if(ds != null && typeof(ds) == "object" && ds.Tables != null){
          
            for(var i=0; i<ds.Tables[0].Rows.length; i++){
                var icon = new GIcon();
                icon.iconSize = new GSize(ds.Tables[0].Rows[i].IconWidth, ds.Tables[0].Rows[i].IconHeight);
                icon.iconAnchor = new GPoint(ds.Tables[0].Rows[i].IconAnchorX, ds.Tables[0].Rows[i].IconAnchorY);
                icon.infoWindowAnchor = new GPoint(ds.Tables[0].Rows[i].IconWidth/2, ds.Tables[0].Rows[i].IconHeight/2);           
                icon.image = "./images/Icons/" + ds.Tables[0].Rows[i].IconImage;
                
                Icons[ds.Tables[0].Rows[i].IconIDX] = icon //new AddIcon(icon)   //new Brand(icon,'<a href="'+ds.Tables[0].Rows[i].BrandURL+'"; target="_blank">'+ds.Tables[0].Rows[i].BrandName+'</a>')
            }
            
            GetLocations();
            
         }
         else{ 
            alert("Error. [3001] " + response.request.responseText); 
         }       
    }


// Create a marker whose info window displays the given text.

    var LastMarkerClicked
    function createMarker(point,i) {
    
          var marker = new GMarker(point,Icons[Locations[i].IconIDX]);
          
       //give the marker the stationID
        marker.id = Locations[i].LocationIDX
        
      // Show this marker's text in the info window when it is clicked.
       var infoTabs = [
        new GInfoWindowTab("Details",Locations[i].LocationInfo)
        ];
 
      //var html = text;
      GEvent.addListener(marker, 'click', function() {
        AutoShowEnable = false
        LastMarkerClicked = marker
	    marker.openInfoWindowTabsHtml(infoTabs);
       // timer=setTimeout('AutoShowReEnable()',2000)
      });

      return marker;
    }

    var strPostcode = null;

//ajax function to recenter map on new postcode
    var localSearch = new GlocalSearch();
    
    function usePointFromPostcode(postcode) {
      strPostcode = postcode
      if (strPostcode != '') {
          document.getElementById('Searching').style.display = "";
          document.getElementById('txtPostcode').unselectable = "on"

          localSearch.setSearchCompleteCallback(null, 
            function() {
              
              if (localSearch.results[0] && (localSearch.results[0].lng > -11) && (localSearch.results[0].lng < 3)) {    
                var resultLat = localSearch.results[0].lat;
                var resultLng = localSearch.results[0].lng;
                var point = new GLatLng(resultLat,resultLng);
                setCenterToPoint(point);
              }else{
                alert("Postcode/town not found!  Please check your spelling.");
                document.getElementById('Searching').style.display = "none";
                document.getElementById('txtPostcode').unselectable = "off"
                
              }
            });  
            
          localSearch.execute(postcode + ", UK");
      }
    }

 var PostcodeMarker = null

function setCenterToPoint(point)
{
	map.setCenter(point);

    var icon = new GIcon();
    icon.image = "./images/Crosshair.png";
    icon.iconSize = new GSize(25, 25);
    icon.iconAnchor = new GPoint(13, 13);
    icon.infoWindowAnchor = new GPoint(13, 13);        

    PostcodeMarker = new GMarker(point,icon);	
    //Show the postcode in the info window.
    GEvent.addListener(PostcodeMarker, 'click', function() {
	   PostcodeMarker.openInfoWindowHtml('<table align="left"><strong>Location: </strong>'+ strPostcode +'</table>');
       });

    map.addOverlay(PostcodeMarker)
}


//Ajax functions to retrieve stations and plot them 
    function GetLocations(){
        document.getElementById('Searching').style.display = "";
        
        var CurrentZoom = map.getZoom();

        var bounds = map.getBounds();
        var southWest = bounds.getSouthWest();
        var northEast = bounds.getNorthEast();

        WGvb.GetLocations(southWest.lng(), northEast.lng(), southWest.lat(), northEast.lat(), GetLocations_Callback);
    }

    //Stations contains information on stations
    var Stations = new Array
    //StationsIndex provides a lookup based on StationIDX
    //var StationsIndex = new Array
     
    function GetLocations_Callback(response){
         if (response.error != null){
           alert("GetLocations: " + response.error);
           return;
         }

         
         var ds = response.value;
       
         if(ds != null && typeof(ds) == "object" && ds.Tables != null){
            
            Locations = ds.Tables[0].Rows
            if (Locations.length == 0){
                
            }
            else {             
                map.clearOverlays();
                for(var i=0; i<Locations.length; i++){
                    
                    //StationsIndex[Stations[i].StationIDX] = i
                    var point = new GLatLng(Locations[i].LocationLat, Locations[i].LocationLong);

                    var marker = createMarker(point,i);
                    map.addOverlay(marker);
                }
            }
  
            // add postcode marker back in if in use
             if (PostcodeMarker != null){
               map.addOverlay(PostcodeMarker)
            }                          

         }
         else{ 
            alert("Error. [3001] " + response.request.responseText); 
         }
    
     document.getElementById('Searching').style.display = "none";
     document.getElementById('txtPostcode').unselectable = "off"
     document.getElementById('txtPostcode').value = "";
       
    }


    function IsNumeric(sText)
    {
       var ValidChars = "0123456789.";
       var IsNumber=true;
       var Char;

     
       for (i = 0; i < sText.length && IsNumber == true; i++) 
          { 
          Char = sText.charAt(i); 
          if (ValidChars.indexOf(Char) == -1) 
             {
             IsNumber = false;
             }
          }
       return IsNumber;
       
       }
 
    
    var newStationMarker = null
    var newStationPoint
    var ListenerClick
 
    function AddStation() {
    
        document.getElementById('AddStation').style.display = "";
         
        ListenerClick = GEvent.addListener(map, "click", function(marker, point) {
            if (marker) {

              } else {
                map.removeOverlay(newStationMarker);
                newStationPoint = point
                newStationMarker = new GMarker(newStationPoint);
                map.addOverlay(newStationMarker);
                document.getElementById("NewLocation").innerHTML = newStationPoint.toString();
              }
            });
    }

    
 function Left(str, n){
	if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(0,n);
}

function Right(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}   
    
    function LinkToView() {
        var MapCenter = map.getCenter()
        var LinkURL = location.protocol+'//'+location.host + location.pathname+'?LatLng='+Left(MapCenter.lat(),8)+','+Left(MapCenter.lng(),8) + '&Zoom='+map.getZoom()
        prompt('Please use the following address to link to this view (press CTRL+C to copy):',LinkURL)
        window.location = LinkURL
    }
