var fired = false;

    function setupAndPositionMap() {
 
          if (GBrowserIsCompatible() && !fired) { 	
          var armyicon = new GIcon();
	  armyicon.image = maparrow;
	  armyicon.iconSize = new GSize(33, 34);
	  armyicon.shadowSize = new GSize(33, 34);
	  armyicon.iconAnchor = new GPoint(12, 34);
	  armyicon.infoWindowAnchor = new GPoint(5, 1);
	  markerOptions = { icon:armyicon };
          	fired = true;
          	var points = [];
		// create map
		var map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl());
		// set center to initialize map
		map.setCenter(new GLatLng(0.0, 0.0), 5);
		var request = GXmlHttp.create();
		request.open("GET", mapxmlscript, true);
		request.onreadystatechange = function() { 
		 if (request.readyState == 4) {  
		 
		  	detachments = request.responseXML.getElementsByTagName("detachment"); 
			
			var bounds = new GLatLngBounds();

			for (var i=0; i<detachments.length; i++){
			    var detachmentname = detachments[i].getElementsByTagName("title")[0].firstChild.nodeValue;
			    var url = detachments[i].getElementsByTagName("url")[0].firstChild.nodeValue;
			    var coordinates = detachments[i].getElementsByTagName("coordinate")[0].firstChild.nodeValue;
			    if (coordinates != ""){
			     var coordinatesarray = coordinates.split(",");
			     
			     if (coordinatesarray.length > 1){
			      var point = new GLatLng(coordinatesarray[0],coordinatesarray[1]);
			      bounds.extend(point);
			      var label = "<div style=\"font-size: 0.8em;\">"+detachmentname+"<br /><br /><a href=\""+url+"\" style=\"text-decoration: underline;\">View details</a></div>";
			      map.addOverlay(createMarker(point, label));
			     }
			    }
			}


			var zoomLevel = map.getBoundsZoomLevel(bounds);
			map.setZoom(zoomLevel);

			var clat = (bounds.getNorthEast().lat() + bounds.getSouthWest().lat()) / 2;
			var clng = (bounds.getNorthEast().lng() + bounds.getSouthWest().lng()) / 2;
			map.setCenter(new GLatLng(clat, clng));

			var newBounds = map.getBounds();
			for(i in points) {
			   if(!(newBounds.contains(points[i]))) {
			      // de-adjust
			      clng -= 180;
			      map.setCenter(new GLatLng(clat, clng));
			      break;
			   }
			}

		  
		  
		  
		 }
		}
		request.send(null);
		
		


          }
          

		function createMarker(point, label) {
		    var marker = new GMarker(point,markerOptions);
		    

		    
		    GEvent.addListener(marker, "click", function() {
		       marker.openInfoWindowHtml(label);
		    });
		    return marker;
		}
    }