	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();
            							}
          							}
        				  );
      }
    }
    
	// visualizza lo sfondo della mappa in base al tipo desiderato 
    function setBgMapType(country, zoom, type) {
      if (geocoder) {
        geocoder.getLatLng(country, function(point) {
            							if (point){
              								map.setCenter(point, zoom);
			  								map.setUIToDefault();
			  								map.setMapType(type);
            							}
          							}
        				  );
      }
    }
    
    // centra la mappa su un indirizzo
    function centermap(address) {
        if (geocoder) {
          geocoder.getLatLng(address, function(point) {
              								if (point){
              									map.setCenter(point);
              								}
            							}
          				    );
        }
     }
	
	// 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);
	}
	
	// vengono passati in ordine: l'oggetto di tipo GIcon larghezza e altezza immagine,
	// url immagine, url ombra	
	function customMarker(ico, w, h, img, shd){
		ico.image = img;
		ico.iconSize = new GSize(w,h);
		ico.shadow = shd;
		ico.shadowSize = new GSize(Math.floor(w*1.6), h);
		ico.iconAnchor= new GPoint(w/2, h);
		ico.infoWindowAnchor = new GPoint(w/2, Math.floor(h/12));
	}
	
	
	// personalizza la descrizione pop up del marker
	function addInfoMarker(marker, description){
		GEvent.addListener(marker, "click", function() {
        										marker.openInfoWindowHtml(description);
      										}
						   );
	}
	
	// aggiunge un marker sulla mappa con i marker di Formula Friends
    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);
            							}
          							}
        				  );
      }
    }
    
    // aggiunge un marker sulla mappa con i marker castomizzati da colore e forma
    // nel seguente modo
    // color1: colore sfumatura
    // color2: colore sfumatura
    // color3: colore bordo
    // w: width
    // h: height
    function addMarker(address, description, color1, color2, color3, w, h) {
      if (geocoder) {
        geocoder.getLatLng(address, function(point) {
            							if (point){
											var icon = new GIcon(G_DEFAULT_ICON);
											//http://chart.apis.google.com/chart?cht=mm&chs=40x30&chco=FFFF00,FFFFFF,000000&ext=.png
											var urlImg = "http://chart.apis.google.com/chart?cht=mm&chs="+w+"x"+h+"&chco="+color1+","+color2+","+color3+"&ext=.png";
											var urlShd = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
											customMarker(icon,w,h,urlImg,urlShd);
											
											var marker = new GMarker(point, icon);
											//var marker = new GMarker(map.getCenter(), {icon: icon});
											icon.imageMap = [
											                 w/2, h,
											                 (7/16)*w, (5/8)*h,
											                 (5/16)*w, (7/16)*h,
											                 (7/32)*w, (5/16)*h,
											                 (5/16)*w, (1/8)*h,
											                 (1/2)*w, 0,
											                 (11/16)*w, (1/8)*h,
											                 (25/32)*w, (5/16)*h,
											                 (11/16)*w, (7/16)*h,
											                 (9/16) *w, (5/8)*h
											                ];
											for (var i = 0; i < icon.imageMap.length; i++) {
												icon.imageMap[i] = parseInt(icon.imageMap[i]);
											}
											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();
	}
