//Script che gestisce la form di ricerca, il plotting e la descrizione del percorso sulla mappa di Google

    var map;
    var gdir;
    
    function initialize() {
      if (GBrowserIsCompatible()) {      
        map = new GMap2(document.getElementById("map_canvas"));
        gdir = new GDirections(map, document.getElementById("directions"));
        GEvent.addListener(gdir, "addoverlay", onGDirectionsLoad);
        GEvent.addListener(gdir, "error", handleErrors);
    		map.addControl(new GScaleControl());
    		map.enableScrollWheelZoom();
    		map.enableDoubleClickZoom();
    		map.setMapType(G_NORMAL_MAP);
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        gdir.clear();        
      }
    }
    
    //Parametri: indirizzo di partenza, indirizzo di arrivo, lingua per la descrizione del percorso (it_ITA, en_ENG)
    function setDirections(fromAddress, toAddress, language) {
      gdir.clear();
      gdir.load("from: " + fromAddress + " to: " + toAddress + "@41.897453730479384, 12.499576807022094", { "locale": language });              
    }

    function handleErrors(){
   if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
     alert("La posizione geografica potrebbe non essere trovata per uno degli indirizzi specificati. Ci pu essere dovuto al fatto che l'indirizzo  relativamente nuovo, o pu non essere corretto. Errore n* " + gdir.getStatus().code);
   else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
     alert("Un geocodifica in direzioni o richiesta non ha potuto essere trattata con successo, ma l'esatto motivo per il fallimento non  noto. Errore n* " + gdir.getStatus().code);
   else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
     alert("HTTP parametro q  stato mancante o non ha avuto alcun valore. Per richieste di geocode, questo significa che un vuoto indirizzo  stato specificato come input. Per le indicazioni richieste, il che significa che non  stato specificato di query in ingresso. Errore n* " + gdir.getStatus().code);
   else if (gdir.getStatus().code == G_GEO_BAD_KEY)
     alert("Il dato chiave non  valido o non corrisponde al dominio per il quale  stato dato. Errore n* " + gdir.getStatus().code);
   else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
     alert("Una direzione richiesta non ha potuto essere analizzata con successo. Errore n* " + gdir.getStatus().code);
   else alert("Si  verificato un errore.");
    }

  function onGDirectionsLoad(){ 
   var poly = gdir.getPolyline();
   if (poly.getVertexCount() > 10000) {  //cambia il vaolore del numero dei vertici
     alert("Questo itinerario ha troppi vertici");
     return;
   }
   var baseUrl = "http://maps.google.com/staticmap?";

   var params = [];
   params.push("center=" + map.getCenter().lat().toFixed(6) + "," + map.getCenter().lng().toFixed(6));

   var markersArray = [];
   markersArray.push(poly.getVertex(0).toUrlValue(5) + ",reda");
   markersArray.push(poly.getVertex(poly.getVertexCount()-1).toUrlValue(5) + ",greenb");
  
   params.push("markers=" + markersArray.join("|"));

   var polyParams = "rgba:0x0000FF80,weight:50|";
   var polyLatLngs = [];
   for (var j = 0; j < poly.getVertexCount(); j++) {
     polyLatLngs.push(poly.getVertex(j).lat().toFixed(5) + "," + poly.getVertex(j).lng().toFixed(5));
   }
  }
