var base_url = "http://www.utdallas.edu/orgs/chess/affiliates/map";

function downloadTeams(map) {
  GDownloadUrl("teams.json", function(data, responseCode) {
    insertTeams(map, eval(data));
  });
}

function insertTeams(map, teams) {
    map.clearOverlays();
    if (teams == null) {
      return;
    }
    var teams_loc = new Array();
    for (var x=0; x < teams.length; x++) {
        teams_loc.push(teams[x].location.Point);
    }
    var center = mapCenter(map, teams_loc);
    map.setCenter(center.coord, center.zoom);
    var markers = new Array();
    for (var x=0; x < teams.length; x++) {
      markers.push(createTeamMarker(teams[x], x))
      map.addOverlay(markers[x]);
    }
    return markers;
}

function createTeamMarker (team, x) {
  var marker = new GMarker(new GLatLng(
    team.location.Point.coordinates[1],
    team.location.Point.coordinates[0]));
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml("<a href='#'>" + team.name + "</a><br />"
        + formatAddress(team.location) + "<br /><br />"
        + team.contact.name + "<br />" + team.contact.phone + "<br />"
	+ "<a href='mailto:" + team.contact.email + "'>"
	+ team.contact.email + "</a>");
  });
  return marker;
}

function mapCenter (map, teams) {
  var bounds = new GLatLngBounds();
  if (teams.length < 1) {
    alert ("Error: No points to center map on");
    return
  }
  for (var x = 0; x < teams.length; x++) {
    var coord = teams[x].coordinates;
    var point = new GLatLng(coord[1], coord[0]);
    bounds.extend(point);
  }
  return {
    "coord": bounds.getCenter(),
    "zoom": map.getBoundsZoomLevel(bounds)
  }
}

function formatAddress (location) {
  var address;
  if (location.AddressDetails.Country.CountryNameCode == "US") {
    var details = location.AddressDetails;
    var country = details.Country;
    var area = country.AdministrativeArea;
    var subarea = area.SubAdministrativeArea;
    var locality = subarea.Locality;
    var thoroughfare = locality.Thoroughfare;
    var zip = locality.PostalCode;
    address = thoroughfare.ThoroughfareName+"<br />"+locality.LocalityName+", "
      +area.AdministrativeAreaName+" "+zip.PostalCodeNumber;
  } else {
    address = location.address
  }
  return address;
}

function showResponse(response, gmarker) {
  if (!gmarker) gmarker = GMarker;
  map.clearOverlays();
  if (!response) {
    alert('Error retreiving response');
  } else if(response.Status.code != 200) {
    alert('Unable to find location of ' + response.name);
  } else {
    var points = new Array();
    var marker;
    for (var x = 0; x < response.Placemark.length; x++) {
      points.push(response.Placemark[x].Point);
      marker = createAddressMarker(response.Placemark[x], gmarker);
      map.addOverlay(marker);
    }
    var center = mapCenter(map, points);
    map.setZoom(center.zoom);
    map.panTo(center.coord);
    if (response.Placemark.length == 1)
	GEvent.trigger(marker, 'click');
  }
}

function createAddressMarker(placemark, gmarker) {
  if (!gmarker) gmarker = GMarker;
  if (!extra) extra = "";
  var coord = placemark.Point.coordinates;
  var point = new GLatLng(coord[1], coord[0]);
  var marker = new gmarker(point);
  GEvent.addListener(marker, 'click', function() {
    marker.openInfoWindowHtml(placemark.address);
  });
  return marker;
}
