
// ====================================================================================================================
// Google Maps and AJAX requester
// ====================================================================================================================

function codeAddress() {
   codeAddressDirect(document.getElementById("map_searchbox").value);
}

function trim(value) {
  value = value.replace(/^\s+/,'');  // remove leading spaces
  value = value.replace(/\s+$/,'');  // remove trailing spaces
  value = value.replace(/\s+/g,' ');  // remove double spaces
  return value;
}

function isNumber(n) 
{
  return !isNaN(parseFloat(n)) && isFinite(n);
}

function codeAddressDirect(address) {
   var inputtrimmed=trim (address);
   var inputparts = inputtrimmed.split(" ");
   var isGPS=0;

   if ( (inputparts.length==2) && (isNumber(inputparts[0])) && (isNumber(inputparts[1])) )
   {
      var lat=parseFloat(inputparts[0]);
      var lng=parseFloat(inputparts[1]);
      if ((lat>=-90) && (lat<=90) && (lng>=-180) && (lng<=180))
      {
         isGPS=1;
      }
   }

   if (isGPS==1)
   {
         var myLatlng = new google.maps.LatLng(lat,lng);
         map.setCenter(myLatlng);

         // Get max zoom for this location
         mainMaxZoomService.getMaxZoomAtLatLng(myLatlng, 
         function(response) {
            if (response.status == google.maps.MaxZoomStatus.OK) 
            {
               // Zoomlevel at which tiles exist is known, limit reuired zoomlevel to 15
               maxzoom=parseInt(response.zoom);
            }

            currentzoom=map.getZoom();
            if (currentzoom<maxzoom)
            {
              if (maxzoom<15)
                 map.setZoom(maxzoom)
              else
                 map.setZoom(15);
            }
          } // function
       ); // maxZoomService
   }
   else
   {
      geocoder.geocode( { 'address': address}, function(results, status) {
         if (status == google.maps.GeocoderStatus.OK) {
           map.setCenter(results[0].geometry.location);
           map.fitBounds (results[0].geometry.viewport);
         } 
      });
   }
}

function codeAddressSearch() {
   codeDiveLocationDirect (document.getElementById("map_searchbox").value);
}

function codeDiveLocationDirect(address)
{
   // Do AJAX call to get 
   if (window.XMLHttpRequest)
   {  // code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
   }
   else
   {  // code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
   xmlhttp.open("GET","getmarker.php?r="+address,false);
   xmlhttp.send();

   if (xmlhttp.readyState==4 && xmlhttp.status==200)

   {
      // handle response to this synchronious requests
        eval(xmlhttp.responseText);
   }
}

function codeDiveLocationDirectId(site)
{
   // Do AJAX call to get 
   if (window.XMLHttpRequest)
   {  // code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
   }
   else
   {  // code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
   xmlhttp.open("GET","getmarker.php?s="+site,false);
   xmlhttp.send();

   if (xmlhttp.readyState==4 && xmlhttp.status==200)

   {
      // handle response to this synchronious requests
        eval(xmlhttp.responseText);
   }
}

function submitenter(myfield,e)
{
var keycode;
   if (window.event) keycode = window.event.keyCode;
   else if (e) keycode = e.which;
   else return true;

   if (keycode==13)
   {
      codeAddress();
   }
}


function loadMarkers()
{
   // Determine the current map zoomlevel
   var zlevel= map.getZoom(); 

   // Determine the map bounds 
   var bounds = map.getBounds(); 
 
   // Determine the top left and bottom right points 
   var swPoint = bounds.getSouthWest(); 
   var nePoint = bounds.getNorthEast(); 
 
   // Determing individual coordinates
   var swLat = swPoint.lat(); 
   var swLng = swPoint.lng(); 
   var neLat = nePoint.lat(); 
   var neLng = nePoint.lng(); 

   // Do AJAX call to get 
   if (window.XMLHttpRequest)
   {  // code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
   }
   else
   {  // code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
   xmlhttp.open("GET","getmarkers.php?r="+"wdm;"+zlevel+";"+swLat+";"+swLng+";"+neLat+";"+neLng+";",false);
   xmlhttp.send();

   if (xmlhttp.readyState==4 && xmlhttp.status==200)

   {
      // handle response to this synchronious requests
      eval (xmlhttp.responseText);
   }
}


function drawMarkers() 
{
   var newmarkeroverlays = new Array();
   var oldmarkers = new Array();
   var found;

   oldmarkers=markers;
   markers.lenght=0;
   newmarkeroverlays.length=0;

      for (var i=0;i<oldmarkers.length;i++)
      {
         found=false;
         for (var j=0;j<newmarkers.length;j++)
         {
            if ((newmarkers[j][0]==oldmarkers[i][0]) && (newmarkers[j][4]==oldmarkers[i][4]))
            {
               found=true;
               break;
            }
         } //for
         if (found==true)
         {
            // Marker stays in viewport, add Gmap object reference to the new overlay list
            newmarkeroverlays[j]=markeroverlays[i];
         } else {
            if (markeroverlays[i]!=undefined) 
            {
               // Remove marker from map
               markeroverlays[i].setMap(null); 
            }
         } 
      } //for


      for (var i=0;i<newmarkers.length;i++)
      {
         if (newmarkeroverlays[i]==undefined)
         {
            // New marker
        var count=newmarkers[i][4];
        if (count>1) {
          // Cluster marker 
          marker = new wdmClusterMarker(new google.maps.LatLng(newmarkers[i][2],newmarkers[i][3]), map, count); 
          newmarkeroverlays[i]=marker;  // Keep track of marker overlays to be able to remove them later on
          google.maps.event.addListener(marker, 'click', function() { ZoomAndCenterMap(this.latlng_); }); 
        } else {
          // Normal marker
          markerImage=m0markerimage;
          marker = new google.maps.Marker({
            position: new google.maps.LatLng(newmarkers[i][2],newmarkers[i][3]),
            title: newmarkers[i][1],
            siteID: newmarkers[i][0],
            icon: new google.maps.MarkerImage(markerImage,null,null,new google.maps.Point(2, 36)),
            map: map
          });
          newmarkeroverlays[i]=marker; // Keep track of marker overlays to be able to remove them later on
          google.maps.event.addListener(marker, 'click', function() { ShowLocationDetails(this.siteID,this.title,1,""); }); 
        } //if

        } //if

      } //for

   markeroverlays=newmarkeroverlays;
   markers=newmarkers;
}
 
function drawAllMarkers() 
{
   var newmarkeroverlays = new Array();
   var found;

      for (var i=0;i<markers.length;i++)
      {
         if (markeroverlays[i]!=undefined) 
         {
            // Remove marker from map
            markeroverlays[i].setMap(null); 
         }
      } //for

      markers.lenght=0;
      newmarkeroverlays.length=0;
      for (var i=0;i<newmarkers.length;i++)
      {
         if (newmarkeroverlays[i]==undefined)
         {
            // New marker
        var count=newmarkers[i][4];
        if (count>1) {
          // Cluster marker 
          marker = new wdmClusterMarker(new google.maps.LatLng(newmarkers[i][2],newmarkers[i][3]), map, count); 
          newmarkeroverlays[i]=marker;  // Keep track of marker overlays to be able to remove them later on
          google.maps.event.addListener(marker, 'click', function() { ZoomAndCenterMap(this.latlng_); }); 
        } else {
          // Normal marker
          markerImage=m0markerimage;
          marker = new google.maps.Marker({
            position: new google.maps.LatLng(newmarkers[i][2],newmarkers[i][3]),
            title: newmarkers[i][1],
            siteID: newmarkers[i][0],
            icon: new google.maps.MarkerImage(markerImage,null,null,new google.maps.Point(2, 36)),
            map: map
          });
          newmarkeroverlays[i]=marker; // Keep track of marker overlays to be able to remove them later on
          google.maps.event.addListener(marker, 'click', function() { ShowLocationDetails(this.siteID,this.title,1,""); }); 
        } //if

        } //if

      } //for

   markeroverlays=newmarkeroverlays;
   markers=newmarkers;
}
 
function ZoomAndCenterMap (targetpos) 
{
   zoom=map.getZoom();
   if (zoom<20) {
      map.setZoom (zoom+1);
   }
   map.setCenter(targetpos); 
   showOverlays();
}

function ZoomAndCenterMapDirect (targetzoom,targetpos)
{
   map.setZoom (targetzoom);
   map.setCenter(targetpos); 
//   showOverlays();
}

function showOverlays() 
{
   loadMarkers();
   drawMarkers();
}

function refreshOverlays() 
{
   loadMarkers();
   drawAllMarkers();
}


