// JavaScript Document
var addresses = [];
var path = [];
var gdir;
var geo;
var mSports;
var icon1;
var icon3;
var icon4;
var gmarkers;
var map;
var bounds;
var reasons;
var existeIcon;
function initialize(){
	if (GBrowserIsCompatible()) { 

      map = new GMap(document.getElementById("mapa"));
      map.addControl(new GLargeMapControl());
      map.addControl(new GMapTypeControl());
	 
	  addresses[2]="3 Rua de Goa, Setubal, Portugal";
	  
      bounds = new GLatLngBounds();
      
      // ====== Create a Client Geocoder ======
      geo = new GClientGeocoder(new GGeocodeCache()); 

      // ====== Array for decoding the failure codes ======
      reasons=[];
      reasons[G_GEO_SUCCESS]            = "Sucesso";
      reasons[G_GEO_MISSING_ADDRESS]    = "Missing Address: The address was either missing or had no value.";
      reasons[G_GEO_UNKNOWN_ADDRESS]    = "Unknown Address:  No corresponding geographic location could be found for the specified address.";
      reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Unavailable Address:  The geocode for the given address cannot be returned due to legal or contractual reasons.";
      reasons[G_GEO_BAD_KEY]            = "Bad Key: The API key is either invalid or does not match the domain for which it was given";
      reasons[G_GEO_TOO_MANY_QUERIES]   = "Too Many Queries: The daily geocoding quota for this site has been exceeded.";
      reasons[G_GEO_SERVER_ERROR]       = "Erro de servidor: O pedido não pode processado com sucesso.";
      reasons[G_GEO_BAD_REQUEST]        = "A directions request could not be successfully parsed.";
      reasons[G_GEO_MISSING_QUERY]      = "No query was specified in the input.";
      reasons[G_GEO_UNKNOWN_DIRECTIONS] = "The GDirections object could not compute directions between the points.";
      
 
      	icon1 = G_START_ICON;
		mSports = new GIcon();
		mSports.image = "imagens/logoMap.png";
		mSports.iconSize = new GSize(30,32);
		mSports.iconAnchor = new GPoint(15,32);
		mSports.infoWindowAnchor = new GPoint(15,32);
	
      gmarkers = [];
      existeIcon= false;

      gdir=new GDirections(null, document.getElementById("path"));

      GEvent.addListener(gdir,"error", function() {
        var code = gdir.getStatus().code;
        var reason="Code "+code;
        if (reasons[code]) {
          reason = "Code "+code +" : "+reasons[code]
        } 
        alert("Falhou na obtenção da direccção, "+reason);
      });

      var poly;
      GEvent.addListener(gdir, "load", function() {
        if (poly) map.removeOverlay(poly);
        poly = gdir.getPolyline();
        map.addOverlay(poly);
      });
        
		
		geo.getLatLng(addresses[2], function (point)
          { 
            if (point) {
				map.setCenter(point,15);
				doEnd(point);
            }
            else {
              var result=geo.getCache().get(addresses[2]);
              if (result) {
                var reason="Code "+result.Status.code;
                if (reasons[result.Status.code]) {
                  reason = reasons[result.Status.code]
                }
              } else {
                var reason = "";
              } 
              alert('Could not find "'+addresses[2]+ '" ' + reason);
            }
          }
        );
    }

    
    // display a warning if the browser was not compatible
    else {
      alert("Desculpe, o Google Maps API não é compatível com este browser");
    }
	}
	
	
	function directions() {
        if (addresses[0]) {var a = addresses[0] + "@" + path[0].toUrlValue(6)}
          else {var a = path[0].toUrlValue(6)} 
        if (addresses[2]) {var b = addresses[2] + "@" + path[2].toUrlValue(6)}
          else {var b = path[2].toUrlValue(6)} 
     
        var a = "from: "+a + " to: " + b;
        gdir.load(a, {getPolyline:true});
		
		bounds.extend(path[0]);
        bounds.extend(path[2]);
        map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
		
      }
	  
	  /*   function showAddress() {
        if (state==0) {
          var search = document.getElementById("search").value;
          addresses[0] = search;
        }
        if (state==1) {
          var search = document.getElementById("search2").value;
          addresses[2] = search;
        }
        geo.getLatLng(search, function (point)
          { 
            if (point) {
              if (state==1) {doEnd(point)}
              if (state==0) {doStart(point)}
            }
            else {
              var result=geo.getCache().get(search);
              if (result) {
                var reason="Code "+result.Status.code;
                if (reasons[result.Status.code]) {
                  reason = reasons[result.Status.code]
                }
              } else {
                var reason = "";
              } 
              alert('Could not find "'+search+ '" ' + reason);
            }
          }
        );
      }
	  */
	  
	  function doStart(point) {
		  if(existeIcon) map.removeOverlay(gmarkers[0]); 
		  existeIcon=true;
		  
        createMarker(point,0,icon1);
        path[0] = point;
		
		directions();
	
      }

      function doEnd(point) {
        createMarker(point,2,mSports);
        path[2] = point;
      }
	  
	  function createMarker(point,i,icon) {
		  
		if(i!=2){  
        	var marker = new GMarker(point, {draggable:true,icon:icon});
        	gmarkers[i]=marker;
			
        	GEvent.addListener(marker, "dragend", function() {
          		path[i] = marker.getPoint();
          		addresses[i] = "";
		 		directions();
        	});
		}
		else{
			var marker = new GMarker(point, {draggable:false,icon:icon});
        	gmarkers[i]=marker;
		
		}
        map.addOverlay(marker);
      }
	  
	  function get_direccao(){
		  
		  // var search = document.getElementById("search").value;
          addresses[0] = "Bonfim, Setubal, Portugal";
		  
		  
		  geo.getLatLng(addresses[0], function (point)
          { 
            if (point) {
				doStart(point);
			}
            else {
              var result=geo.getCache().get(addresses[0]);
              if (result) {
                var reason="Code "+result.Status.code;
                if (reasons[result.Status.code]) {
                  reason = reasons[result.Status.code]
                }
              } else {
                var reason = "";
              } 
              alert('Could not find "'+addresses[0]+ '" ' + reason);
            }
          }
        );
		  
		  
	  
	  }
	  