var map;

var gmarkers = new Array();
var gicons = new Array();

function mapNew(lat, lng, zoom, type, divid) {
	if (GBrowserIsCompatible()) {
	  if (divid==undefined) {
    divid='map';
    }
	
  	map = new GMap2(document.getElementById(divid));

		map.addMapType(G_PHYSICAL_MAP);
		
		if (type!=undefined) {
			if(type!='street') {
				mapChangeType(type);
			}
		}
		
		var mapControl = new GHierarchicalMapTypeControl();
    	mapControl.clearRelationships();
		mapControl.addRelationship(G_SATELLITE_MAP, G_HYBRID_MAP, "Afficher les noms", true);
		
		map.addControl(mapControl);
		map.addControl(new GLargeMapControl());
		
		map.setCenter(new GLatLng(lat,lng),zoom);
		}
}
	
function mapRecenter(lat, lng) {
	map.setCenter(new GLatLng(lat,lng));
}

function mapRecenterAddress (address) {
	var geocoder = new GClientGeocoder();
	geocoder.getLatLng(address, function(point) {
		if (!point) {
			alert ('Sorry, ik kan '+address+' niet vinden.');
		} else {
			mapRecenter (point.lat(), point.lng());
		}
	});
}

function mapZoom(zoom) {
	map.setZoom(zoom);
}
	
function mapChangeType(type) {
	if (type=='street') map.setMapType(G_NORMAL_MAP);
	if (type=='satellite') map.setMapType(G_SATELLITE_MAP);
	if (type=='hybrid') map.setMapType(G_HYBRID_MAP);
	if (type=='terrain') map.setMapType(G_PHYSICAL_MAP);
}

function newIcon (name, url, width, height, pinx, piny, bubblex, bubbley) {
	gicons[name] = new GIcon ();
	gicons[name].image = url;
	gicons[name].iconSize = new GSize(width,height);
	
	if (pinx == undefined) {
		gicons[name].iconAnchor = new GPoint (width/2, height/2)
	}
	else {
		gicons[name].iconAnchor = new GPoint (pinx, piny);
	}
	
	if (bubblex == undefined) {
		gicons[name].infoWindowAnchor = new GPoint (width,0);
	}
	else {
		gicons[name].infoWindowAnchor = new GPoint (bubblex, bubbley);
	}
	
}

function mapAddMarker(name, lat, lng, bubblehtml, iconname, replace) {
	if (iconname!=undefined) {
		var icon = gicons[iconname];
	} else {
		var icon = G_DEFAULT_ICON;
	}

    gmarkers[name] = new GMarker(new GLatLng(lat,lng), icon);
	
	if (bubblehtml!=undefined) {
		GEvent.addListener(gmarkers[name], "click", function() {
          gmarkers[name].openInfoWindowHtml(bubblehtml);
	});
	}

	if (replace) {
		map.clearOverlays();
	}
	
	map.addOverlay(gmarkers[name]);
}

function mapAddMarkerAddress(name, address, bubblehtml, iconname, replace) {

    var geocoder = new GClientGeocoder();
    geocoder.getLatLng(address, function (point) {
      if (!point) {
        alert('Sorry, ik heb geen informatie over ' + address);
      } else {
      	lat = point.lat();
      	lng = point.lng();
      	mapAddMarker (name, lat, lng, bubblehtml, iconname, replace);
      }
	})
}

function mapRemoveMarker(name) {
	gmarkers[name].hide();
}

function mapRemoveAllMarkers() {
	map.clearOverlays();
}
