//DC  29-May-2011 Added showLatLong flag.
//                Enable mouse wheel zoom only when map is clicked.
//                Don't centre the map after enlarging it (because that reset the zoom level etc.)

//Set this true to display latitude & longitude when map is clicked (for use when setting up fixture list)
var showLatLong = false;

var shortMonths = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];

var seasonMap = 1;
var raceMap = 2;
var mapType;

function includeGoogleApi() {
  var key = "ABQIAAAAxdYaGQG10cc3D-AK_XHvlxT0M34Ma7-9YzruJ8K09NTJI6tAKhR24IkC1bRzm4FCiIng7OKC1aEcZQ";
  var apiUrl = "http://maps.google.com/maps?file=api&v=2&key=" + key;
//  document.getElementById("googlescript").src = apiUrl;
  document.write('<script type=text/javascript onload="onApiLoad()" src=' + apiUrl + '></scr' + 'ipt>');
}
//<!--Google map key for http://dcdev/CxWebsite -->
//var key = "ABQIAAAAxxcGqvz9iSPJAdrqOe8KaxRc3Hb5s4TYfgW5EHGbRmcPf98L0xRjZsdTgyiDKw_7AhMKpBKfjVz_0A"

function writeMapContainer() {
  document.write('<div align=center>');
  document.write('<div style="width:95%;">');
  document.write('<div align=right id=enlargeLink>');
  document.write('<a href="javascript:void(0)" onclick="onEnlargeMap()">Enlarge map</a>');
  document.write('</div></div></div>');
  document.write('<div align=center>');
  document.write('<div style="width:95%;height:250;margin-bottom:20;" id=map>');
  document.write('</div>');
  document.write('</div>');
}

function RaceDetails(lng, lat, date, round, name, detailPage) {
  this.lng = lng;
  this.lat = lat;
  this.date = date;
  this.round = round;
  this.name = name;
  this.detailPage = detailPage;
}

var map;

function MakeSeasonMap() {
  map = new GMap2(document.getElementById("map"));
  map.addControl(new GSmallMapControl());
  map.addControl(new GScaleControl());
  map.addControl(new GMapTypeControl());
//  map.enableScrollWheelZoom();
  GEvent.addListener(map, "click", onMapClick);
  centreMap();
  addSeasonMarkers();
}

function MakeRaceMap() {
  map = new GMap2(document.getElementById("map"));
  map.addControl(new GSmallMapControl());
  map.addControl(new GScaleControl());
  map.addControl(new GMapTypeControl());
  GEvent.addListener(map, "click", onMapClick);
  centreMap();
  addRaceMarker();
}

function nrRaces() {
  return raceData.length;
}

function centreMap() {
  if (mapType == seasonMap)
    centreOnRegion();
  else if (mapType == raceMap)
    centreOnRace();
}

function centreOnRace() {
  var zoomLev = 12; //arbitrary
  map.setCenter(new GLatLng(currentRace.lat, currentRace.lng), zoomLev);
}

function centreOnRegion() {
  var n = nrRaces();
  if (n <= 0) return;

  var regionW =  raceData[0].lng;
  var regionN = raceData[0].lat;
  var regionE =  raceData[0].lng;
  var regionS = raceData[0].lat;

  for (var i=1; i < n; i++) {
    var race = raceData[i];

    if (race.lng < regionW) regionW = race.lng;
    if (race.lat > regionN) regionN = race.lat;
    if (race.lng > regionE) regionE = race.lng;
    if (race.lat < regionS) regionS = race.lat;
    }

  var zoomLev = map.getBoundsZoomLevel(
    new GLatLngBounds(
	  new GLatLng(regionS, regionW),
	  new GLatLng(regionN, regionE)));

  var midLat = (regionS + regionN) / 2;
  var midLng = (regionW + regionE) / 2;

  map.setCenter(new GLatLng(midLat, midLng), zoomLev);
}

function addSeasonMarkers() {
  var n = nrRaces();

  for (var i=0; i < n; i++) {
    var race = raceData[i];

    var marker = new GMarker(new GLatLng(race.lat, race.lng),
      {title:race.name});
    marker.eclRaceData = race;
    map.addOverlay(marker);

    GEvent.addListener(marker, "click", onMarkerClick);
    }
}

function addRaceMarker() {
  var marker = new GMarker(new GLatLng(currentRace.lat, currentRace.lng),
    {title:currentRace.name, clickable:false});
  marker.eclRaceData = currentRace;
  map.addOverlay(marker);

//  GEvent.addListener(marker, "click", onMarkerClick);
}

function onMarkerClick() {
  //Called when a marker is clicked.  'this' is the GMarker object.
  var race = this.eclRaceData;
  var sHtml = race.date.getDate() + ' ' + shortMonths[race.date.getMonth()]
    + ' ' + race.date.getYear();
  if (race.round != null)
    sHtml += (', Round ' + race.round)
  sHtml += '<br><a href=' + race.detailPage + '>' + race.name + '</a>';

  this.openInfoWindowHtml(sHtml);
}

function onMapClick(overlay, point) {
  //Called when the map background is clicked.  'this' is the GMap object.
  //overlay is the marker that was clicked (if any)
  //point is the co-ordinate that was clicked.

  if (overlay == null) {
    //clicked on the map background - get rid of the info window if it's visible.
    this.closeInfoWindow();
    if (showLatLong)
      alert('long=' + point.x + ' lat=' + point.y);
    }

  //Enable mouse wheel scrolling now that map has been clicked.  (It's a pain to have it enabled
  //initially because the map zooms when you just want to scroll down the page.)
  map.enableScrollWheelZoom();
}

function onEnlargeMap() {
  //Called when the "Enlarge map" hyperlink is clicked.

  //Difficult to know what height to enlarge to.  Try 3/4 of the overall screen height.
  var h = window.screen.height * 0.75;
  var mapDiv = document.getElementById("map");
  if (mapDiv.offsetHeight < h) {
    mapDiv.style.height = h;
    //Let the map know that its container has changed size.
    map.checkResize();
    //reset the map so that it shows the region of interest.
    //PROBABLY OUGHT NOT DO THIS IF MAP HAS BEEN MOVED ETC.
    //centreMap();
    
    //Remove the "Enlarge" link.
    //Not much point leaving it there if we don't provide a "Shrink" option (or should we
    //provide a Shrink option?)
    document.getElementById("enlargeLink").removeNode(true);
    }
}

var pageLoaded = false;
var apiLoaded = true; //false;

function onPageLoad() {
  pageLoaded = true;
  onLoaded();
}

function onApiLoad() {
  apiLoaded = true;
  onLoaded();
}

function onLoaded() {
  if (pageLoaded && apiLoaded) {
    if (mapType == seasonMap)
      MakeSeasonMap();
    else if (mapType == raceMap)
      MakeRaceMap();
    }
}

document.getElementsByTagName("body")[0].onload = function () {onPageLoad();};


