var map;
var mgr;
var geocoder;
var ads;
var grid;
var blueIcon;
var redIcon;
var greenIcon;
var markers;

/* Utility functions */
function include(filename)
{
    var head = document.getElementsByTagName('head')[0];
		
    script = document.createElement('script');
    script.src = filename;
    script.type = 'text/javascript';
    head.appendChild(script)
}

function getWindowHeight()
{
    if(document.body) {
      return document.body.offsetHeight;
    }
}


/* Application functions */
function requestFieldData() {
    var sw = map.getBounds().getSouthWest();
    var ne = map.getBounds().getNorthEast();
    var ajaxParams = "?bbox=" + sw.lng() + "," + sw.lat() + "," + ne.lng() + "," + ne.lat();
    var request = google.maps.DownloadUrl("/Fields/query"+ajaxParams,
	function(data, responseCode) {
	    var xml = google.maps.Xml.parse(data);
	    var fields = xml.documentElement.getElementsByTagName("field");

            markers = [];
	    mgr.clearMarkers();
	    grid.clearAll(false);
	    for (var i = 0; i < fields.length; i++) {
		var point = new google.maps.LatLng(parseFloat(fields[i].getAttribute("lat")),
					parseFloat(fields[i].getAttribute("lng")));
		var markerOptions = {};
		var marker;
		if (fields[i].getAttribute("type") == "public") {
		    marker = new google.maps.Marker(point, {icon:greenIcon});
		    marker.bindInfoWindowHtml(fields[i].getAttribute("name"));
		} else if (fields[i].getAttribute("type") == "private") {
		    marker = new google.maps.Marker(point, {icon:redIcon});
		    marker.bindInfoWindowHtml(fields[i].getAttribute("name"));
		} else if (fields[i].getAttribute("type") == "club") {
		    marker = new google.maps.Marker(point, {icon:blueIcon});
		    marker.bindInfoWindowHtml(
			fields[i].getAttribute("name") + "<br/>" +
			"<a href=\"http://www.modelaircraft.org/clubdetails.aspx?club=" +
			fields[i].getAttribute("ama_id") + "\">Club Info</a><br/><br/>" +
                        "<a href=\"https://www.modelaircraft.org/joinrenew.aspx\">Join the Academy of Model Aeronautics!</a>"
		    );
		}

		markers.push(marker);
		grid.addRow(i,[fields[i].getAttribute("name"),fields[i].getAttribute("type")],grid.getRowsNum())
	    }
	    mgr.addMarkers(markers, 8);
	    mgr.refresh();
	}
    );
}

function runFieldQuery(thisform) {
  if (!validateQuery(thisform)) return false;
  with (thisform) {
    showAddress(loc.value);
  }
}

function validateQuery(thisform) {
  return true;
}

function showAddress(address) {
  geocoder.getLatLng(
    address,
    function(point) {
      if (!point) {
        alert(address + " not found");
      } else {
        map.setCenter(point, 10);
      }
    }
  );
}
