function refreshMarker()
{
  map.clearOverlays();
  marker = null;
  var myLatLng = getProperLatLng();
  marker = new GMarker(myLatLng, {draggable: true});
  map.addOverlay(marker);
  var myLat = (marker.getLatLng()).lat();
  var myLng = (marker.getLatLng()).lng();
  map.panTo(new GLatLng(myLat, myLng));
  displayLatLng(myLat, myLng);
  GEvent.addListener(marker, 'dragend', function()
  {
    displayLatLng((this.getLatLng()).lat(), (this.getLatLng()).lng());
    displayInfoWindow();
  });
  GEvent.addListener(marker, 'mouseover', function(){
    displayInfoWindow();
  });
  GEvent.addListener(marker, 'drag', function(){
    displayLatLng((this.getLatLng()).lat(), (this.getLatLng()).lng());
  });
  GEvent.addListener(map, 'click', function(overlay, latlng){
    putMarkerOnLatLng(latlng);
  });
}

function getProperLatLng()
{
  var latlng = getLatLngFromForm();
  if((Number(latlng.lat()) == 0) && (Number(latlng.lng()) === 0))
  {
    latlng = map.getCenter();
  }
  return latlng;
}

function getMarkerIcon(imageUrl, shadowUrl, iconSizeX, iconSizeY, shadowSizeX, shadowSizeY)
{
  var myIcon = new GIcon();
  var xCenter = iconSizeX/2;

  myIcon.image = imageUrl;
  myIcon.shadow = shadowUrl;
  myIcon.iconSize = new GSize(iconSizeX, iconSizeY);
  myIcon.shadowSize = new GSize(shadowSizeX, shadowSizeY);
  myIcon.iconAnchor = new GPoint(xCenter, iconSizeY);
  myIcon.infoWindowAnchor = new GPoint(xCenter, 0);
  myIcon.infoShadowAnchor = new GPoint(xCenter, 0);

  return myIcon;
}

function displayInfoWindow()
{
  var title = document.getElementById(textfieldIdForTitle).value;
  var location = document.getElementById(textfieldIdForLocation).value;
  marker.openInfoWindowHtml(title + '<br />' + location);
}

function getLatLngFromForm()
{
  var lat = document.getElementById(idForLatitude).value;
  var lng = document.getElementById(idForLongitude).value;
  var latlng = new GLatLng(lat, lng, true);
  return latlng;
}

function putMarkerOnCenter()
{
  map.removeOverlay(marker);
  marker.setLatLng(map.getCenter());
  map.addOverlay(marker);
  displayLatLng((marker.getLatLng()).lat(), (marker.getLatLng()).lng());
}

function putMarkerOnLatLng(newLatLng)
{
  map.removeOverlay(marker);
  marker.setLatLng(newLatLng);
  map.panTo(newLatLng);
  map.addOverlay(marker);
  displayLatLng((marker.getLatLng()).lat(), (marker.getLatLng()).lng());
}

function displayLatLng(lat, lng)
{
    document.getElementById(idForLatitude).value = lat;
    document.getElementById(idForLongitude).value = lng;
}

function applyManualInput(position)
{
  var newLatLng = getLatLngFromForm();
  if(validLatLng(newLatLng))
  {
    putMarkerOnLatLng(newLatLng);
  }
  else
  {
    displayLatLng((marker.getLatLng()).lat(), (marker.getLatLng()).lng());
  }
}

function validLatLng(latLng)
{
  var lat = latLng.lat();
  var lng = latLng.lng();

  if(isValidLatLng(lat) && isValidLatLng(lng))
  {
    return true;
  }
  else
  {
    return false;
  }
}

function isValidLatLng(num)
{
  if(!isNaN(num))
  {
    if((-180 < num) && (num < 180))
    {
      return true;
    }
  }
  return false;
}

// == shows all markers of a particular category, and ensures the checkbox is checked ==
function show(category) {
//function show(category) {
  for (var i=0; i<gmarkers.length; i++) {
    if (gmarkers[i].mycategory == category) {
      gmarkers[i].show();
    }
  }
  // == check the checkbox ==
  //document.getElementById(category+"box").checked = true;
}

// == hides all markers of a particular category, and ensures the checkbox is cleared ==
function hide(category, gmarkers) {
//function hide(category) {
  for (var i=0; i<gmarkers.length; i++) {
    if (gmarkers[i].mycategory == category) {
      gmarkers[i].hide();
    }
  }
  // == clear the checkbox ==
  //document.getElementById(category+"box").checked = false;
  // == close the info window, in case its open on a marker that we just hid
  //map.closeInfoWindow();
}

// == a checkbox has been clicked ==
function boxclick(box,category) {
  if (box.checked)
  {
    show(category);
  }
  else
  {
    hide(category);
  }
  // == rebuild the side bar
  makeSidebar();
}

// == a checkbox has been clicked ==
function boxclickCategory(box,category,gmarkers) {
  //alert(category);
  if (box.checked) 
  {
    show(category,gmarkers);
  } 
  else 
  {
    hide(category,gmarkers);
  }
  // == rebuild the side bar
  makeSidebar();
}

function myclick(i) {
  GEvent.trigger(gmarkers[i],"click");
}
function myclickCategory(category) {
  show(category);
}


// == rebuilds the sidebar to match the markers currently displayed ==
function makeSidebar() {
  var html = "";
  for (var i=0; i<gmarkers.length; i++) {
    if (!gmarkers[i].isHidden()) {
      html += '<a href="javascript:myclick(' + i + ')">' + gmarkers[i].myname + '</a><br>';
    }
  }
  document.getElementById("side_bar").innerHTML = html;
}

// == rebuilds the sidebar to match the markers currently displayed ==
function makeCategorySidebar(side_bar_html) {
  var html = side_bar_html;
  document.getElementById("side_bar").innerHTML = html;
}

function readAllFarmsFromXML(url, map, gicons)
{
  //alert('got to here');
  //alert(url);
  var bounds = new GLatLngBounds();

  // Read the data from example.xml
  var request = GXmlHttp.create();
  request.open("GET", url, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var xmlDoc = GXml.parse(request.responseText);
      
      // obtain the array of markers and loop through it
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");
                
      for (var i=0;i<markers.length;i++)
			{
        // obtain the attribues of each marker
        var lat					   = GXml.value(markers[i].getElementsByTagName("latitude")[0]);
        var lng 					 = GXml.value(markers[i].getElementsByTagName("longitude")[0]);
        //var farmName  		 = GXml.value(markers[i].getElementsByTagName("farmName")[0]);
        //var shire 				 = GXml.value(markers[i].getElementsByTagName("shire")[0]);
        var annualRainfall = GXml.value(markers[i].getElementsByTagName("annualRainfall")[0]);
        var html           = GXml.value(markers[i].getElementsByTagName("html")[0]);

        var newLat = Number(lat);
        var newLng = Number(lng);
        
        var point = new GLatLng(newLat,newLng);
       
        // create the marker
        var marker = createIconMarkerNormalWindow(point,gicons["farm"],html);
        //var marker = createIconMarker(point,gicons["farm"],html);
        map.addOverlay(marker);
        // ==== Each time a point is found, extent the bounds ato include it =====
        bounds.extend(point);
      }
      
      
      if (Number(markers.length) === 0)
      {
        //alert(markers.length);
        bounds.extend(new GLatLng(Number(-26.509904531413916),Number(114.3017578125)));
        bounds.extend(new GLatLng(Number(-26.194876675795218),Number(152.6220703125)));
        map.setZoom(map.getBoundsZoomLevel(bounds)-1);
        //map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      } // end if
      else
      {
       //alert(hi);       
       map.setZoom(map.getBoundsZoomLevel(bounds)-1);
       //map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      } // end if else
      
   }
 }
 request.send(null);
}

function webmasterReadAllFarmsFromXML(url, map, gicons)
{
  //alert('got to here');
  //alert(url);
  var bounds = new GLatLngBounds();

  // Read the data from example.xml
  var request = GXmlHttp.create();
  request.open("GET", url, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var xmlDoc = GXml.parse(request.responseText);
      
      // obtain the array of markers and loop through it
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");
                
      for (var i=0;i<markers.length;i++)
			{
        // obtain the attribues of each marker
        var lat					   = GXml.value(markers[i].getElementsByTagName("latitude")[0]);
        var lng 					 = GXml.value(markers[i].getElementsByTagName("longitude")[0]);
        //var farmName  		 = GXml.value(markers[i].getElementsByTagName("farmName")[0]);
        //var shire 				 = GXml.value(markers[i].getElementsByTagName("shire")[0]);
        var annualRainfall = GXml.value(markers[i].getElementsByTagName("annualRainfall")[0]);
        var html           = GXml.value(markers[i].getElementsByTagName("html")[0]);

        var newLat = Number(lat);
        var newLng = Number(lng);
        
        var point = new GLatLng(newLat,newLng);
       
        // create the marker
        var marker = createIconMarkerNormalWindow(point,gicons["farm"],html);
        //var marker = createIconMarker(point,gicons["farm"],html);
        map.addOverlay(marker);
        // ==== Each time a point is found, extent the bounds ato include it =====
        bounds.extend(point);
      }
      
      
      if (Number(markers.length) === 0)
      {
        //alert(markers.length);
        bounds.extend(new GLatLng(Number(-26.509904531413916),Number(114.3017578125)));
        bounds.extend(new GLatLng(Number(-26.194876675795218),Number(152.6220703125)));
        map.setZoom(map.getBoundsZoomLevel(bounds)-1);
        //map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      } // end if
      else
      {
       //alert(hi);       
       map.setZoom(map.getBoundsZoomLevel(bounds)-1);
       //map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      } // end if else
      
   }
 }
 request.send(null);
}

function readTrueLocalFromXML(url, map)
{
//alert('got to here');
//alert(url);
var bounds = new GLatLngBounds();

  // Read the data from example.xml
  var request = GXmlHttp.create();
  request.open("GET", url, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var xmlDoc = GXml.parse(request.responseText);
      // obtain the array of markers and loop through it
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");
                
      for (var i = 0; i < markers.length; i++)
				{
        // obtain the attribues of each marker
        var lat					   = GXml.value(markers[i].getElementsByTagName("latitude")[0]);
        var lng 					 = GXml.value(markers[i].getElementsByTagName("longitude")[0]);
        var businessName   = GXml.value(markers[i].getElementsByTagName("businessName")[0]);
        var website 			 = GXml.value(markers[i].getElementsByTagName("website")[0]);
        var phoneNumber    = GXml.value(markers[i].getElementsByTagName("phoneNumber")[0]);
        var email          = GXml.value(markers[i].getElementsByTagName("email")[0]);
        var addressLine    = GXml.value(markers[i].getElementsByTagName("addressLine")[0]);
        var suburb         = GXml.value(markers[i].getElementsByTagName("suburb")[0]);
        var postcode       = GXml.value(markers[i].getElementsByTagName("postcode")[0]);
        var state          = GXml.value(markers[i].getElementsByTagName("state")[0]);

        var newLat = Number(lat);
        var newLng = Number(lng);
        
        var point = new GLatLng(newLat,newLng);
       
        // create the marker
        var marker = createMarker(point,farmName,shire);
        map.addOverlay(marker);
        // ==== Each time a point is found, extent the bounds ato include it =====
        bounds.extend(point);
      }
      map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
      map.setCenter(bounds.getCenter());
   }
 }
 request.send(null);
}

function readAllBranchsFromXML(url, map, newIcons)
{
  //alert('got to here');
  //alert(url);
  var bounds = new GLatLngBounds();

  // Read the data from example.xml
  var request = GXmlHttp.create();
  request.open("GET", url, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var xmlDoc = GXml.parse(request.responseText);
      // obtain the array of markers and loop through it
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");
                
      for (var i = 0; i < markers.length; i++)
		  {
        // obtain the attribues of each marker
        var lat					   = GXml.value(markers[i].getElementsByTagName("latitude")[0]);
        var lng 					 = GXml.value(markers[i].getElementsByTagName("longitude")[0]);
        var branchName  	 = GXml.value(markers[i].getElementsByTagName("branchName")[0]);
        var zoomLevel   	 = GXml.value(markers[i].getElementsByTagName("zoomLevel")[0]);
        var html  	       = GXml.value(markers[i].getElementsByTagName("html")[0]);

        var newLat = Number(lat);
        var newLng = Number(lng);
        var newZoomLevel = Number(zoomLevel);
        
        var point = new GLatLng(newLat,newLng);
        
        // create the marker
        var marker = createIconMarker(point,newIcons["branch"],html);
        map.addOverlay(marker);
        // ==== Each time a point is found, extent the bounds ato include it =====
        bounds.extend(point);       
        map.setZoom(newZoomLevel);
      }
      
      if (markers.length === 0)
      {
        bounds.extend(new GLatLng(-26.509904531413916, 114.3017578125));
        bounds.extend(new GLatLng(-26.194876675795218, 152.6220703125));
        map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        map.setCenter(bounds.getCenter());
      } 
      else if (markers.length == 1)
      {
        map.setCenter(bounds.getCenter());
      }
      else
      {         
       map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        map.setCenter(bounds.getCenter());
      }
   }
 }
 request.send(null);
}

function readAllSeasonRatingsFromXML(url, map, newIcons)
{
  //alert('got to here');
  //alert(url);
  var bounds = new GLatLngBounds();

  // Read the data from example.xml
  var request = GXmlHttp.create();
  request.open("GET", url, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var xmlDoc = GXml.parse(request.responseText);
      // obtain the array of markers and loop through it
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");
                
      for (var i = 0; i < markers.length; i++)
      {
        // obtain the attribues of each marker
        var lat            = GXml.value(markers[i].getElementsByTagName("latitude")[0]);
        var lng            = GXml.value(markers[i].getElementsByTagName("longitude")[0]);
        /*var farmName       = GXml.value(markers[i].getElementsByTagName("farmName")[0]);*/
        /*var shire          = GXml.value(markers[i].getElementsByTagName("shire")[0]);*/
        var seasonRating   = GXml.value(markers[i].getElementsByTagName("seasonRating")[0]);
        var colour         = GXml.value(markers[i].getElementsByTagName("colour")[0]);
        var html           = GXml.value(markers[i].getElementsByTagName("html")[0]);
        
        var newLat = Number(lat);
        var newLng = Number(lng);
        
        var point = new GLatLng(newLat,newLng);
        
        // create the marker
        var marker = createColourMarkerNormalWindow(point, newIcons[seasonRating], html);
        map.addOverlay(marker);
        
        map.addOverlay(GPolygon.Circle(point,100,colour,3,1,colour,0.5));
                                            
        // ==== Each time a point is found, extent the bounds ato include it =====
        bounds.extend(point);       
      }
      
      if (Number(markers.length) === 0)
      {
        bounds.extend(new GLatLng(-26.509904531413916, 114.3017578125));
        bounds.extend(new GLatLng(-26.194876675795218, 152.6220703125));
        map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        //map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      } // end if
      else
      {
        //map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      }
   }
 }
 request.send(null);
}


function readPostcodesFromXML(url, map, newIcons)
{
  //alert('got to here');
  //alert(url);
  var bounds = new GLatLngBounds();

  // Read the data from example.xml
  var request = GXmlHttp.create();
  request.open("GET", url, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var xmlDoc = GXml.parse(request.responseText);
      // obtain the array of markers and loop through it
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");
                
      for (var i = 0; i < markers.length; i++)
      {
        // obtain the attribues of each marker
        var lat            = GXml.value(markers[i].getElementsByTagName("latitude")[0]);
        var lng            = GXml.value(markers[i].getElementsByTagName("longitude")[0]);
        var seasonRating   = GXml.value(markers[i].getElementsByTagName("seasonRating")[0]);
        var colour         = GXml.value(markers[i].getElementsByTagName("colour")[0]);
        var html           = GXml.value(markers[i].getElementsByTagName("html")[0]);
        
        var newLat = Number(lat);
        var newLng = Number(lng);
        
        var point = new GLatLng(newLat,newLng);
        
        // create the marker
        var marker = createColourMarkerNormalWindow(point, newIcons[seasonRating], html);
        map.addOverlay(marker);
        
        map.addOverlay(GPolygon.Circle(point,100,colour,3,1,colour,0.5));
                                            
        // ==== Each time a point is found, extent the bounds ato include it =====
        bounds.extend(point);       
      }
      
      if (Number(markers.length) === 0)
      {
        bounds.extend(new GLatLng(-26.509904531413916, 114.3017578125));
        bounds.extend(new GLatLng(-26.194876675795218, 152.6220703125));
        map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        //map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      } // end if
      else
      {
        //map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      }
   }
 }
 request.send(null);
}

function readAllMonthlyRatingsFromXML(url, map, newIcons)
{
  //alert('got to here');
  //alert(url);
  var bounds = new GLatLngBounds();

  // Read the data from example.xml
  var request = GXmlHttp.create();
  request.open("GET", url, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var xmlDoc = GXml.parse(request.responseText);
      // obtain the array of markers and loop through it
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");
                
      for (var i = 0; i < markers.length; i++)
      {
        // obtain the attribues of each marker
        var lat            = GXml.value(markers[i].getElementsByTagName("latitude")[0]);
        var lng            = GXml.value(markers[i].getElementsByTagName("longitude")[0]);
        //var farmName       = GXml.value(markers[i].getElementsByTagName("farmName")[0]);
        //var shire          = GXml.value(markers[i].getElementsByTagName("shire")[0]);
        var monthlyRating  = GXml.value(markers[i].getElementsByTagName("monthlyRating")[0]);
        var colour         = GXml.value(markers[i].getElementsByTagName("colour")[0]);
        var html           = GXml.value(markers[i].getElementsByTagName("html")[0]);
        
        var newLat = Number(lat);
        var newLng = Number(lng);
        
        var point = new GLatLng(newLat,newLng);
        
        // create the marker
        var marker = createColourMarkerNormalWindow(point, newIcons[monthlyRating], html);
        map.addOverlay(marker);
        
        map.addOverlay(GPolygon.Circle(point,100,colour,3,1,colour,0.5));
                                            
        // ==== Each time a point is found, extent the bounds ato include it =====
        bounds.extend(point);       
      }
      
      if (Number(markers.length) === 0)
      {
        bounds.extend(new GLatLng(-26.509904531413916, 114.3017578125));
        bounds.extend(new GLatLng(-26.194876675795218, 152.6220703125));
        map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        //map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      } // end if
      else
      {
        //map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      }
   }
 }
 request.send(null);
}

function readAllLocalAreaRatingsFromXML(url, map, newIcons)
{
  //alert('got to here');
  //alert(url);
  var bounds = new GLatLngBounds();

  // Read the data from example.xml
  var request = GXmlHttp.create();
  request.open("GET", url, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var xmlDoc = GXml.parse(request.responseText);
      // obtain the array of markers and loop through it
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");
                
      for (var i = 0; i < markers.length; i++)
      {
        // obtain the attribues of each marker
        var lat              = GXml.value(markers[i].getElementsByTagName("latitude")[0]);
        var lng              = GXml.value(markers[i].getElementsByTagName("longitude")[0]);
        //var farmName         = GXml.value(markers[i].getElementsByTagName("farmName")[0]);
        //var shire            = GXml.value(markers[i].getElementsByTagName("shire")[0]);
        var localAreaRating  = GXml.value(markers[i].getElementsByTagName("localAreaRating")[0]);
        var colour           = GXml.value(markers[i].getElementsByTagName("colour")[0]);
        var html             = GXml.value(markers[i].getElementsByTagName("html")[0]);
        
        var newLat = Number(lat);
        var newLng = Number(lng);
        
        var point = new GLatLng(newLat,newLng);
        
        // create the marker
        var marker = createColourMarkerNormalWindow(point, newIcons[localAreaRating], html);
        map.addOverlay(marker);
        
        map.addOverlay(GPolygon.Circle(point,100,colour,3,1,colour,0.5));
                                            
        // ==== Each time a point is found, extent the bounds ato include it =====
        bounds.extend(point);       
      }
      
      if (Number(markers.length) === 0)
      {
        bounds.extend(new GLatLng(-26.509904531413916, 114.3017578125));
        bounds.extend(new GLatLng(-26.194876675795218, 152.6220703125));
        map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        //map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      } // end if
      else
      {
        map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        //map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      }
   }
 }
 request.send(null);
}

function readAllFarmingSystemsFromXML(url, map, newIcons)
{
  //alert('got to here');
  //alert(url);
  var bounds = new GLatLngBounds();

  // Read the data from example.xml
  var request = GXmlHttp.create();
  request.open("GET", url, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var xmlDoc = GXml.parse(request.responseText);
      // obtain the array of markers and loop through it
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");
                
      for (var i = 0; i < markers.length; i++)
      {
        // obtain the attribues of each marker
        var lat                = GXml.value(markers[i].getElementsByTagName("latitude")[0]);
        var lng                = GXml.value(markers[i].getElementsByTagName("longitude")[0]);
        //var farmName           = GXml.value(markers[i].getElementsByTagName("farmName")[0]);
        //var shire              = GXml.value(markers[i].getElementsByTagName("shire")[0]);
        var farmingSystemName  = GXml.value(markers[i].getElementsByTagName("farmingSystemName")[0]);
        var farmingSystemId    = GXml.value(markers[i].getElementsByTagName("farmingSystemId")[0]);
        var colour             = GXml.value(markers[i].getElementsByTagName("colour")[0]); 
        var html               = GXml.value(markers[i].getElementsByTagName("html")[0]); 
        
        
        var newLat = Number(lat);
        var newLng = Number(lng);
        
        var point = new GLatLng(newLat,newLng);
                
        // create the marker
        var marker = createColourMarkerNormalWindow(point, newIcons[farmingSystemName], html);
        map.addOverlay(marker);
        
        //map.addOverlay(GPolygon.Circle(point,100,colour,3,1,colour,0.5));
                                                    
        // ==== Each time a point is found, extent the bounds ato include it =====
        bounds.extend(point);       
      }
            
      if (Number(markers.length) === 0)
      {
        bounds.extend(new GLatLng(-26.509904531413916, 114.3017578125));
        bounds.extend(new GLatLng(-26.194876675795218, 152.6220703125));
        map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        //map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      } // end if
      else
      {
        //map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      }
      
      
   }
 }
 request.send(null);
}


function readAllFarmSizesFromXML(url, map, gicons)
{
  //alert('got to here');
  //alert(url);
  var bounds = new GLatLngBounds();

  // Read the data from example.xml
  var request = GXmlHttp.create();
  request.open("GET", url, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var xmlDoc = GXml.parse(request.responseText);
      // obtain the array of markers and loop through it
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");
                
      for (var i = 0; i < markers.length; i++)
      {
        // obtain the attribues of each marker
        var lat                = GXml.value(markers[i].getElementsByTagName("latitude")[0]);
        var lng                = GXml.value(markers[i].getElementsByTagName("longitude")[0]);
        //var farmName           = GXml.value(markers[i].getElementsByTagName("farmName")[0]);
        //var shire              = GXml.value(markers[i].getElementsByTagName("shire")[0]);
        var farmSize           = GXml.value(markers[i].getElementsByTagName("farmSize")[0]);
        var farmSizeId         = GXml.value(markers[i].getElementsByTagName("farmSizeId")[0]);
        var colour             = GXml.value(markers[i].getElementsByTagName("colour")[0]); 
        var html               = GXml.value(markers[i].getElementsByTagName("html")[0]); 
        
        var newLat = Number(lat);
        var newLng = Number(lng);
        
        var point = new GLatLng(newLat,newLng);
                
        // create the marker
        var marker = createColourMarkerNormalWindow(point, gicons[farmSize], html);
        map.addOverlay(marker);
        
        map.addOverlay(GPolygon.Circle(point,100,colour,3,1,colour,0.5));
        
                                                    
        // ==== Each time a point is found, extent the bounds ato include it =====
        bounds.extend(point);       
      }
      
      if (Number(markers.length) === 0)
      {
        bounds.extend(new GLatLng(-26.509904531413916, 114.3017578125));
        bounds.extend(new GLatLng(-26.194876675795218, 152.6220703125));
        map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        //map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      } // end if
      else
      {
        //map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      }
   }
 }

 request.send(null);
}

function readAllFarmTypesFromXML(url, map, newIcons)
{
  //alert('got to here');
  //alert(url);
  var bounds = new GLatLngBounds();

  // Read the data from example.xml
  var request = GXmlHttp.create();
  request.open("GET", url, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var xmlDoc = GXml.parse(request.responseText);
      // obtain the array of markers and loop through it
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");
                
      for (var i = 0; i < markers.length; i++)
      {
        // obtain the attribues of each marker
        var lat                = GXml.value(markers[i].getElementsByTagName("latitude")[0]);
        var lng                = GXml.value(markers[i].getElementsByTagName("longitude")[0]);
        //var farmName           = GXml.value(markers[i].getElementsByTagName("farmName")[0]);
        //var shire              = GXml.value(markers[i].getElementsByTagName("shire")[0]);
        var farmType           = GXml.value(markers[i].getElementsByTagName("farmType")[0]);
        var farmTypeId         = GXml.value(markers[i].getElementsByTagName("farmTypeId")[0]);
        var colour             = GXml.value(markers[i].getElementsByTagName("colour")[0]); 
        var html               = GXml.value(markers[i].getElementsByTagName("html")[0]); 
        
        var newLat = Number(lat);
        var newLng = Number(lng);
        
        var point = new GLatLng(newLat,newLng);
                
        // create the marker
        var marker = createColourMarkerNormalWindow(point, newIcons[farmType], html);
        map.addOverlay(marker);
        
        //map.addOverlay(GPolygon.Circle(point,100,colour,3,1,colour,0.5));
        
                                                    
        // ==== Each time a point is found, extent the bounds ato include it =====
        bounds.extend(point);       
      }
      
      if (Number(markers.length) === 0)
      {
        bounds.extend(new GLatLng(-26.509904531413916, 114.3017578125));
        bounds.extend(new GLatLng(-26.194876675795218, 152.6220703125));
        map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        //map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      } // end if
      else
      {
        //map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      }
   }
 }

 request.send(null);
}

function readAllMonthlyObservationsFromXML(url, map, newIcons)
{
  //alert('got to here');
  //alert(url);
  var bounds = new GLatLngBounds();

  // Read the data from example.xml
  var request = GXmlHttp.create();
  request.open("GET", url, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var xmlDoc = GXml.parse(request.responseText);
      // obtain the array of markers and loop through it
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");
                
      for (var i = 0; i < markers.length; i++)
      {
        // obtain the attribues of each marker
        var lat                      = GXml.value(markers[i].getElementsByTagName("latitude")[0]);
        var lng                      = GXml.value(markers[i].getElementsByTagName("longitude")[0]);
        //var farmName                 = GXml.value(markers[i].getElementsByTagName("farmName")[0]);
        //var shire                    = GXml.value(markers[i].getElementsByTagName("shire")[0]);
        var observationCategoryName  = GXml.value(markers[i].getElementsByTagName("observationCategoryName")[0]);
        var observationCategoryId    = GXml.value(markers[i].getElementsByTagName("observationCategoryId")[0]);
        var observationValueName     = GXml.value(markers[i].getElementsByTagName("observationValueName")[0]);
        var observationValueId       = GXml.value(markers[i].getElementsByTagName("observationValueId")[0]);
        var colour                   = GXml.value(markers[i].getElementsByTagName("colour")[0]); 
        var html                     = GXml.value(markers[i].getElementsByTagName("html")[0]); 
        
        var newLat = Number(lat);
        var newLng = Number(lng);
        var color = String(colour);
        
        var point = new GLatLng(newLat,newLng);
                     
        //alert(colour);
                     
        // create the marker
        var marker = createColourMarkerNormalWindow(point, newIcons[observationValueName], html);
        map.addOverlay(marker);
        
        map.addOverlay(GPolygon.Circle(point,100,colour,3,1,colour,0.5));
        
                                                    
        // ==== Each time a point is found, extent the bounds ato include it =====
        bounds.extend(point);       
      }
      
      if (Number(markers.length) === 0)
      {
        bounds.extend(new GLatLng(-26.509904531413916, 114.3017578125));
        bounds.extend(new GLatLng(-26.194876675795218, 152.6220703125));
        map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        //map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      } // end if
      else
      {
        map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        //map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      }
   }
 }

 request.send(null);
}


function readRainfallYearToDateFromXML(url, map)
{
  //alert('got to here');
  //alert(url);
  var polys  = [];
  var bounds = new GLatLngBounds();

  // Read the data from example.xml
  var request = GXmlHttp.create();
  request.open("GET", url, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var xmlDoc = GXml.parse(request.responseText);
      // obtain the array of markers and loop through it
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");
                
      for (var i = 0; i < markers.length; i++)
      {
        // obtain the attribues of each marker
        var ytdTotal                 = markers[i].getAttribute("ytdTotal");
        var aploc                    = markers[i].getAttribute("aploc");
        var postcode                 = markers[i].getAttribute("postcode");
        var state                    = markers[i].getAttribute("state");
        var locality                 = markers[i].getAttribute("locality");
        var colour                   = markers[i].getAttribute("colour");
        var points                   = markers[i].getElementsByTagName("point");
        //alert(points);
        
        var newYtdTotal = Number(ytdTotal);
        var newAploc    = Number(aploc);
        var color       = String(colour);
        //var newPoints   = Array(points);
        
        //alert("points is: " + newPoints);
        
        //var point = new GLatLng(newLat,newLng);
                     
        //alert(colour);
                     
        // create the marker
        //var marker = createColourMarker(point, newIcons[observationValueName], html);
        
        // create the poly line
        
        // read each point on that line
          //var points = states[a].getElementsByTagName("point");
          
          var pts = [];
          for (var p = 0; p < points.length; p++) {
            //alert("lat is: " + parseFloat(newPoints[p].getAttribute("lat")));
            //alert("p is: " + p);
             pts[p] = new GLatLng(parseFloat(points[p].getAttribute("lat")),
                                  parseFloat(points[p].getAttribute("lng")));
                                  
            // ==== Each time a point is found, extent the bounds ato include it =====
            bounds.extend(pts[p]);                                         
          } // end for loop
          
          // add shape thing
          if (pts.length > 1)
          {
            var poly = new GPolygon(pts,colour,1,1,colour,0.5,{clickable:false});
            polys.push(poly);
       
            map.addOverlay(poly);
          } // end if 1
          
          
          // only one point so draw a circle
          if (pts.length === 1)
          {
            map.addOverlay(GPolygon.Circle(pts[0],10000,colour,3,1,colour,0.5));
          } // end if
          
                           
        // ==== Each time a point is found, extent the bounds ato include it =====
        //bounds.extend(point);       
      }
      
      if (Number(markers.length) === 0)
      {
        bounds.extend(new GLatLng(-26.509904531413916, 114.3017578125));
        bounds.extend(new GLatLng(-26.194876675795218, 152.6220703125));
        //map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      } // end if
      else
      {
        //map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
        map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      }
   }
 }
 request.send(null);
}



function createIconMarker(point, newIcon, html) {
  var marker = new GMarker(point, newIcon);
  GEvent.addListener(marker, "click", function() {
    marker.openExtInfoWindow(
                              map, 
                              "custom_info_window_red", 
                              html, 
                              {breakOffset: 3} 
                            );
  });
  
  GEvent.addListener(map, "extinfowindowclose", function() {
    map.setCenter(point);
  });  
  
  GEvent.addListener(map, "extinfowindowopen", function() {
    map.setCenter(point);
  });
  
  
  return marker;
}

function createIconMarkerNormalWindow(point, newIcon, html) {
  var marker = new GMarker(point, newIcon);
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(html);
  });

  return marker;
}


function createIconMarkerNormalWindowTitle(point, newIcon, html, iconTitle) {
  var marker = new GMarker(point, {icon:newIcon, title:iconTitle});
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(html);
  });

  return marker;
}

function createColourMarkerNormalWindow(point, newIcon, html) {
  var marker = new GMarker(point, newIcon);
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(html);
  });

  return marker;
}


function createColourMarker(point, newIcon, html) {
  var marker = new GMarker(point, newIcon);
  GEvent.addListener(marker, "click", function() {
    marker.openExtInfoWindow(
                              map, 
                              "custom_info_window_red", 
                              html, 
                              {breakOffset: 3} 
                            );
  });
  
  GEvent.addListener(map, "extinfowindowclose", function() {
    map.setCenter(point);
  });
  
  GEvent.addListener(map, "extinfowindowopen", function() {
    map.setCenter(point);
  });
  
  return marker;
}

function createColourMarkerNoWindow(point, newIcon) {
  var marker = new GMarker(point, newIcon);  
  return marker;
}


function readGeneralHotelFromUrl(url, map, gicons)
{
  //alert('got to here');
  //alert(url);
  var bounds = new GLatLngBounds();

  // Read the data from example.xml
  var request = GXmlHttp.create();
  request.open("GET", url, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var xmlDoc = GXml.parse(request.responseText);
      
      // obtain the array of markers and loop through it
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");
                
      for (var i=0;i<markers.length;i++)
			{
        // obtain the attribues of each marker
        var lat					   = GXml.value(markers[i].getElementsByTagName("latitude")[0]);
        var lng 					 = GXml.value(markers[i].getElementsByTagName("longitude")[0]);
        var hotelName  		 = GXml.value(markers[i].getElementsByTagName("hotelName")[0]);
        var markerKey 				 = GXml.value(markers[i].getElementsByTagName("markerLetter")[0]);
		var html           = GXml.value(markers[i].getElementsByTagName("html")[0]);

        var newLat = Number(lat);
        var newLng = Number(lng);
        
        var point = new GLatLng(newLat,newLng);
       
        // create the marker
        //var marker = createIconMarkerNormalWindow(point,G_DEFAULT_ICON,html);
       var marker = createIconMarkerNormalWindowTitle(point,gicons["letter" + markerKey],html, hotelName);
       
       // var marker = new GMarker(point, {icon:gicons["letter" + markerKey], title:hotelName});
		//  GEvent.addListener(marker, "click", function() {
		//    marker.openInfoWindowHtml(html);
	//		  });
       
        map.addOverlay(marker);
        // ==== Each time a point is found, extent the bounds ato include it =====
        bounds.extend(point);
      }
      
      
      if (Number(markers.length) === 0)
      {
        //alert(markers.length);
        bounds.extend(new GLatLng(Number(-26.509904531413916),Number(114.3017578125)));
        bounds.extend(new GLatLng(Number(-26.194876675795218),Number(152.6220703125)));
        map.setZoom(map.getBoundsZoomLevel(bounds)-1);
        //map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      } // end if
      else
      {
       //alert(hi);       
       map.setZoom(map.getBoundsZoomLevel(bounds)-1);
       //map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
      } // end if else
      
   }
 }
 request.send(null);
}

