var map = null;
var geocoder = null;
var SatMode=false;
var TypeCtr;
var SmallCtr;
var xMarker=null;
function e(id){
		return document.getElementById(id);
}
function updateUrl(){
	var url = getUrl();
	var ob;
	ob=e("link");
	if (ob) ob.href = url;
	ob=e("email");
	if (ob) ob.href = "mailto:?subject=" +encodeURIComponent("Mappa Comuni Italiani") +"&body=" + encodeURIComponent(url);
	ob=e("cooz");
	if (ob) ob.value=point2st(map.getCenter()) + "," + map.getZoom();
}
function load(home, zoom) {
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("map"));
    map.setCenter(home, zoom);
    map.savePosition();
    SmallCtr=new GSmallMapControl();
    map.addControl(SmallCtr);
    TypeCtr=new GMapTypeControl();
    geocoder = new GClientGeocoder();
	GEvent.addListener(map, "moveend", updateUrl);
	updateUrl();
  }
}
function goV(dove, base, zoom) {
   if (dove!="" && geocoder) {
    geocoder.getLatLng(
      dove + base,
      function(point) {
        if (!point) {
          alert(dove + " non trovato");
        } else {
          map.setCenter(point, zoom);
          addMarker(point, dove);
        }
      }
    );
  }
}
function cmdSat(){
	if (SatMode){
		map.setMapType(G_NORMAL_MAP);
		map.removeControl(TypeCtr);
	}else{
		map.setMapType(G_SATELLITE_MAP);
		map.addControl(TypeCtr);
	}
	SatMode=!SatMode;
}
function goHome(){
	map.returnToSavedPosition();
}
function addMarker(point, testo){
	var mk = new GMarker(point, {draggable: true, title: testo});
	map.addOverlay(mk);
    GEvent.addListener(mk, "dblclick", function() {	
		map.removeOverlay(mk);
		xMarker=null;
		updateUrl();
	});
	GEvent.addListener(mk, "dragend", function() {	
		updateUrl();
	});
	xMarker=mk;
	updateUrl();
}
function addMarkerMC(){
	addMarker(map.getCenter(),"");
}
function addMC(){
	addMarkerMC();
}
function goTop() {
	addMarkerMC();
	map.setZoom(5);
	map.panTo(new GLatLng(42.55, 12.30));
}
function round6(x){
    	return Math.round(x*1000000)/1000000;
}
function getUrl(){
	var ubase="http://www.comuni-italiani.it/mappa/?";
	var opt;
	var mt=map.getCurrentMapType();
	var pmt;
	if (mt==G_SATELLITE_MAP){
		pmt="&t=k";
	}else if (mt==G_HYBRID_MAP){
		pmt="&t=h";
	}else{
		pmt="";
	}
	if (xMarker){
		opt="&xm=" + point2st(xMarker.getPoint());
	}else{
		opt="";
	}
	return ubase + "ll=" + point2st(map.getCenter()) + "&z=" + map.getZoom() + pmt + opt;
}
function point2st(point){
	return round6(point.lat()) + "," + round6(point.lng());
}
function goBig(){
	window.open(getUrl(), "_top");
}
function goC(lat, lng, zoom){
	map.setZoom(zoom);
	map.panTo(new GLatLng(lat, lng));
	return false;
}