var map;
var centreLat = -37.824398;
var centreLng = 145.05884;
var zoomLevel = 14;
var closeUp = false;
var isTreeDraggable = false;


function tree(title) {
  this.title = title;
}

function initializeCU(lat, lng) {
  centreLat = lat;
  centreLng = lng;
  zoomLevel = 17;
  closeUp = true;
  initialize();
  map.setMapType(G_HYBRID_MAP);
}

function initialize() {
  if (!GBrowserIsCompatible()) {
    return;
  }
  map = new GMap2(document.getElementById("map"));
  map.setCenter(new GLatLng(centreLat, centreLng), zoomLevel);
  map.setMapType(G_NORMAL_MAP);
  map.disableScrollWheelZoom();
  map.addControl(new GSmallMapControl());
  if (closeUp || isTreeDraggable)
    map.addControl(new GMapTypeControl());
  
  loadTrees();

}


function setTreeDraggable(dragTree) {
  isTreeDraggable = dragTree;
}

function loadTrees() {

  var request = GXmlHttp.create();
	request.open('GET', 'trees_json.php' , true); 
	request.onreadystatechange = function () {
		if (request.readyState == 4) {
		  response = eval('(' + request.responseText + ')');

		  loadTreesfromJSON(response);
	  }
  }
  request.send(null);

}

function createTree(tree) {
  // alert ("Creating a tree:"+tree.title);
  // Create our "tree" marker icon
  var treeIcon = new GIcon();
  if (closeUp)
    treeIcon.image = icon_file="images/icon_cu.png";
  else
    treeIcon.image = icon_file="images/icon.png";
    
  treeIcon.iconAnchor = new GPoint(8,8);
  treeIcon.iconSize = new GSize(16, 16);
  treeIcon.infoWindowAnchor = new GPoint(8, 8);
  markerOptions = { icon:treeIcon, title : tree.common_name, draggable:isTreeDraggable};
  var marker = new GMarker(new GLatLng(tree.lat, tree.lon), markerOptions);
  map.addOverlay(marker);

  //info window display
  function renderDetails() {
    //alert("Clicked me"+tree.title);
    var treeHTML = "";
    treeHTML = "<h2>"+tree.common_name+"</h2><p><i>"+tree.botanical_name+"</i><br/>";
    treeHTML += tree.address+"</p>";
    treeHTML += "<p><a href=\"tree.php?treeid="+tree.id+"\">more details...</a></p>";

    marker.openInfoWindowHtml(treeHTML);
  }

  GEvent.addListener(marker, "click", renderDetails);
  
  GEvent.addListener(marker, "dragend", function() {
    var latLng = marker.getLatLng();
    var infoHTML = "";
    infoHTML += "Landed at...<br />"+latLng.lat()+","+latLng.lng();
    infoHTML += "<p><a href=\"updatetree.php?treeid="+tree.id+"&lat="+latLng.lat()+"&lon="+latLng.lng()+"\" >Move tree to this location</a></p>";
    marker.openInfoWindowHtml(infoHTML);
  });
  
}

function loadTreesfromJSON (treeArray) {
  for (var i = 0; i < treeArray.length; i++ ) {
    var tree = treeArray[i];
		createTree(tree);
  }
}