var map = null;
    var mgr = null;
    var zoomLevel = 7;

    function setupMap() {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        map.setCenter(new GLatLng(48.763611, 11.426111), zoomLevel);
        map.enableDoubleClickZoom();
        
        window.setTimeout(getAnnotationDataFromServer, 0);


        GEvent.addListener(map, "moveend", function() {
        	getAnnotationDataFromServer();
           });
          
      }
    }

   



	

    function getAnnotationDataFromServer(){
    	var xmlHttp = null;
    	try {
    		// Mozilla, Opera, Safari sowie Internet Explorer (ab v7)
    		xmlHttp = new XMLHttpRequest();
    	} catch (e) {
    		try {
    			// MS Internet Explorer (ab v6)
    			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    		} catch (e) {
    			try {
    				// MS Internet Explorer (ab v5)
    				xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    			} catch (e) {
    				xmlHttp = null;
    			}
    		}
    	}
    	if (xmlHttp) {
			
			var span = roundNumber(Math.max(map.getBounds().toSpan().lat(), map.getBounds().toSpan().lng()), 6);
			
			var path = "http://myapple.kicks-ass.net/FreshAirEverywhere/ActionLocationServlet?lat=" + map.getCenter().lat() 
			+ "&lng=" + map.getCenter().lng()+ "&span="	+ span;
    		xmlHttp.open('GET', path, true);
    		
    		
    		xmlHttp.onreadystatechange = function() {
    			if (xmlHttp.readyState == 4) {
    				eval("var json = " + xmlHttp.responseText);
    				
    				mgr = new MarkerManager(map);
    				var markers = [];
    				
    				for(var i=json.action_locations.length-1; i >= 0; i--){
    					var latLng = new GLatLng(json.action_locations[i].latitude,
    	    					json.action_locations[i].longitude);
    					var marker = new GMarker(latLng, {draggable:true});
    					marker.enableDragging() ;
    					var infoWindowHTML = "";
    					infoWindowHTML += "<font size=\"-2\">" + json.action_locations[i].timestamp  + "</font><br>";
    					infoWindowHTML += "<div style=\"width:200px;\">" 
        					+ "<a href=\"http://www.facebook.com/profile.php?id=" + 
    					json.action_locations[i].facebookId + "\" target=\"_top\">" 
    					+ json.action_locations[i].userFullName + "</a> ";
    					
    					//if comment is too long, truncate it
    					if(json.action_locations[i].comment.length > 800){
    						infoWindowHTML += json.action_locations[i].comment.substr(0, 800) 
    						+ " [...]";
    					}else{
    						infoWindowHTML += json.action_locations[i].comment;
    					}
    						infoWindowHTML += "</div> ";
    					
    					marker.bindInfoWindowHtml(infoWindowHTML, {maxWidth:100});
    					markers.push(marker);
    				}
    				var zoomToShowAt = 3;
    				mgr.addMarkers(markers, zoomToShowAt);
    				mgr.refresh();
    				
    			}
    		};

    		xmlHttp.send(null);
    	}

    }

    function roundNumber(rnum, rlength) { // Arguments: number to round, number of decimal places
    	  var newnumber = Math.round(rnum*Math.pow(10,rlength))/Math.pow(10,rlength);
    	  return newnumber; 
    	}
    

