	var map = null;
    var geocoder = null;
	var waitBar = null;
    
	// inizializza gli oggetti che compongono la mappa
	// viene passato di del div da inizializzare
    function initMap(id_element) {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById(id_element));
        geocoder = new GClientGeocoder();
      }
    }
    
	// visualizza lo sfondo della mappa 
    function setBgMap(country, zoom) {
      if (geocoder) {
        geocoder.getLatLng(country, function(point) {
            							if (point){
              								map.setCenter(point, zoom);
			  								map.setUIToDefault();
            							}
          							}
        				  );
      }
    }
	
	// personalizza l'icona che rappresenta il marker
	// vengono passati in ordine: l'oggetto di tipo GIcon larghezza e altezza immagine,
	// larghezza e altezza ombra, url immagine, url ombra
	// ancoraggio dell'immagine dall'angolo top sx 
	function customMarker(ico, w, h, w1, h1, img, shd, x, y){
		ico.iconSize = new GSize(w,h);
		ico.shadowSize = new GSize(w1,h1);
		ico.image = img;
		ico.shadow = shd;
		ico.iconAnchor= new GPoint(x,y);
	}
	
	// personalizza la descrizione pop up del marker
	function addInfoMarker(marker, description){
		GEvent.addListener(marker, "click", function() {
        										marker.openInfoWindowHtml(description);
      										}
						   );
	}
	
	// aggiunge un marker sulla mappa 
    function addMarker(address, description) {
      if (geocoder) {
        geocoder.getLatLng(address, function(point) {
            							if (point){
											var icon = new GIcon(G_DEFAULT_ICON);
											var urlImg = "http://www.formulafriends.com/ita/inc/phoogleMap/mm_20_red.png";
											var urlShd = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
											customMarker(icon,12,20,22,20,urlImg, urlShd,6,20);
																						
											var marker = new GMarker(point, icon, false);
											addInfoMarker(marker, description);
											map.addOverlay(marker);
            							}
          							}
        				  );
      }
    }

	// carica la gif di attesa quando si sta per caricare la mappa
	function loadWaitBar(url){
		waitBar = new GScreenOverlay(url, new GScreenPoint(0, 0),  // screenXY angolo in basso sx per visualizzare
        								  new GScreenPoint(0, 0),  // overlayXY angolo in basso sx per ritagliare
        								  new GScreenSize(550, 650)  // size on screen
									);
		map.addOverlay(waitBar);
	}
	// se passi true visualizza attesa caricamento
	// con false nasconde l'attesa del caricamento
	function showWaitBar(flag){
		if(flag)
			waitBar.show();
		else
			waitBar.hide();
	}
