//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 + "@45.5893321, 12.8616523", { "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);
     alert("Indirizzo di partenza non trovato. L'indirizzo non e' corretto, oppure potrebbe essere relativamente nuovo.");
   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));
   }
  }
