var map;
var markers=Array(); 

function info(marker) { 
  var toshow = "<img style='margin-left: 10px; ' src='/static/icons/32x32/"+marker.icon+"' /> <a href='"+marker.uri+"'>"+marker.label+"</a><br/>is a '"+marker.type+"'";
  marker.openInfoWindowHtml(toshow);
}

function GMload() {

  if (GBrowserIsCompatible()) {
    mapdiv=document.getElementById("map");
    map = new GMap2(mapdiv);
    map.addControl(new GLargeMapControl());
    map.addControl(new GScaleControl());
    map.addControl(new GMapTypeControl());
    map.enableScrollWheelZoom();
    map.enableContinuousZoom();
    // listener to event "move-end"
    GEvent.addListener(map, "moveend", function() {
			 var center = map.getCenter();
			 document.getElementById("message").innerHTML = center.toString();
		       });
		
    // add click handler
    GEvent.addListener(map, "click", function(marker, point) {
			 if (marker) {
			   info(marker);
			 } 
		       });
    GEvent.addListener(map, "dblclick", function(marker, point) { place(point); });
		
    map.setCenter(new GLatLng(37.4419, -122.1419), 13);

    // Disable scroll-wheel for page
    if (mapdiv.addEventListener)
      mapdiv.addEventListener("DOMMouseScroll", 
			      function(e) { e.preventDefault(); }, 
			      false);
    else if (mapdiv.attachEvent)
      mapdiv.attachEvent("onmousewheel", function() { event.returnValue = false; }); 


    window.setTimeout("loadmarkers()",3);
  }
}


function addmarker(lat,lon,label,uri,icon,type) {

  var point = new GLatLng(lat,lon);
  var options = new Object();
  options.title = label;
  options.draggable = true;
  // 	options.icon=new GIcon();
  // 	options.icon.image="/static/icons/32x32/"+icon;
  // 	options.icon.shadow="/static/icons/32x32/iconshadow.png";
  // 	options.icon.iconSize=new GSize(32,32);
  // 	options.icon.shadowSize=new GSize(32,32);
  // 	options.icon.iconAnchor=new GPoint(16,30);
  // 	options.icon.infoWindowAnchor=new GPoint(16,16);

  var marker = new GMarker(point, options);

  marker.label=label;
  marker.uri=uri;
  marker.icon=icon;
  marker.type=type;
  marker.enableDragging();
  GEvent.addListener(marker, "dragend", function () { movemarker(marker); });
  map.addOverlay(marker);
  markers.push(marker);
  return marker;
}

function addmarkerDict(o) { 
  return addmarker(o["lat"], o["lon"], o["label"], o["uri"], o["icon"], o["classlabel"]);
}

function zoomall() {

  var bounds = new GLatLngBounds();

  for (var i = 0; i < markers.length; i++) {
    var pointlat = parseFloat(markers[i].getPoint().lat());
    var pointlng = parseFloat(markers[i].getPoint().lng());
    var point = new GLatLng(pointlat,pointlng);
    // Extend it to cover all your points
    bounds.extend(point);  
  }
  map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds)); 
}

function loadJsonMarkers(list) { 
  for (i=0;i<list.length; i++) { 
    addmarkerDict(list[i]);
  }
  zoomall();
}

function loadmarkers() { 

  d=MochiKit.Async.loadJSONDoc("/sys/pimomap")
    d.addCallback(loadJsonMarkers);
	
}

function movemarker(marker) { 
  point=marker.getPoint();
  params=MochiKit.Base.queryString({lat: point.y, lng: point.x });
  d=MochiKit.Async.doXHR(marker.uri+"/map?"+params, { method: "PUT" } );
  d.addErrback(function (e) { alert("Could not save location: "+e);} );
  return d;
}

function zoomTo() { 
  MochiKit.Visual.fade("zoommsg");
  var address=document.getElementById("place").value;
	
	 
  g=new GClientGeocoder();
  g.getLatLng(address, function (p) { 
		if (p) { 
		  map.setZoom(10);
		  map.panTo(p);
		} else { 
		  document.getElementById("zoommsg").firstChild.nodeValue=address+" not found :(";
		  
		  MochiKit.Visual.appear("zoommsg");
		}
	      }); 
}

function showMarker(uri) { 

  for (i=0;i<markers.length;i++) { 
    alert(markers[i].uri+" == "+uri+"?");
    if (markers[i].uri==uri) { 
      info(markers[i]);
      map.panTo(markers[i].getPoint() );
      break;
    }
  }
}

