﻿var map = null;
var geocoder = null;


function CarregarMapa(objMapa, endereco)
{
    if(endereco == '')
	    objMapa.innerHTML = unescape('Endere%E7o%20n%E3o%20dispon%EDvel%20no%20momento');
	else
    {	
	    if (GBrowserIsCompatible())
	    {   
		    map = new GMap2(objMapa);
		    map.setCenter(new GLatLng(0, 0), 1);
            map.addControl(new GLargeMapControl());
            map.addControl(new GMapTypeControl());
            map.addControl(new GOverviewMapControl());
            map.setMapType(G_NORMAL_MAP);
		    geocoder = new GClientGeocoder();
            LocalizaEndereco(endereco);
	    }
    }
}

var directionsPanel;
var directions; 
function CarregarRota(objMapa, endereco,divTextualName)
{
    
    if(endereco == '')
	    objMapa.innerHTML = unescape('Endere%E7o%20n%E3o%20dispon%EDvel%20no%20momento');
	else
    {	
	    if (GBrowserIsCompatible())
	    {   
		    map = new GMap2(objMapa);
		    map.setCenter(new GLatLng(0, 0), 1);
            map.addControl(new GLargeMapControl());
            map.addControl(new GMapTypeControl());
            map.addControl(new GOverviewMapControl());
            map.setMapType(G_NORMAL_MAP);
		    geocoder = new GClientGeocoder();
            //LocalizaEndereco(endereco);
            directionsPanel = document.getElementById(divTextualName);
            directions = new GDirections(map, directionsPanel); 
            directions.load(endereco); 

	    }
    }
}

function LocalizarNoMapa(objMapa, endereco)
{
    if(endereco == '')
	    objMapa.innerHTML = unescape('Endere%E7o%20n%E3o%20dispon%EDvel%20no%20momento');
	else
    {	
	    if (GBrowserIsCompatible())
	    {   
	        map = new GMap2(objMapa);
		    map.setCenter(new GLatLng(0, 0), 1);
            map.setMapType(G_NORMAL_MAP);
		    geocoder = new GClientGeocoder();
            LocalizaEndereco(endereco);
	    }
    }
}

function TracarNoMapa(objMapa, destino, origem, addControl)
{
    if(origem == '')
        LocalizarNoMapa(objMapa, destino)
    else
    {
        if(destino == '')
	        objMapa.innerHTML = unescape('Endere%E7o%20n%E3o%20dispon%EDvel%20no%20momento');
	    else
        {	
	        if (GBrowserIsCompatible())
	        {  
	            tmp = destino.substring(destino.indexOf(" - ")+1);
	            map = new GMap2(objMapa);
	            if (addControl == 1 || addControl == 3)
	            {
	                map.addControl(new GLargeMapControl());
                    map.addControl(new GMapTypeControl());
                    map.addControl(new GOverviewMapControl());
                    map.setCenter(new GLatLng(0, 0), 1);
                    map.setMapType(G_NORMAL_MAP);
		            geocoder = new GClientGeocoder();
                    //LocalizaEndereco(destino);
                    if (addControl == 3)
                    {
                        document.getElementById("RotaGoogle").innerHTML = "";
                        directionsPanel = document.getElementById("RotaGoogle");
		                gdir = new GDirections(map, directionsPanel);
		                GEvent.addListener(gdir, "error", handleErrors);
		            }
		            else
		            {
		                document.getElementById("RotaGoogle_1").innerHTML = "";
		                directionsPanel = document.getElementById("RotaGoogle_1");
		                gdir = new GDirections(map, directionsPanel);
		                GEvent.addListener(gdir, "error", handleErrors);
		            }
                }
		        else
		        {
		            map.setCenter(new GLatLng(0, 0), 1);
                    map.setMapType(G_NORMAL_MAP);
		            geocoder = new GClientGeocoder();
		        }
                
                setDirections(origem + tmp, destino);

                //gdir.load("from "+ origem + tmp + " to " + destino);
                gdir=null;
	        }
        }
    }
}
function setDirections(fromAddress, toAddress) {
 
      gdir.load("from: " + fromAddress + " to: " + toAddress,{locale:"pt_br"}); 
    }


function handleErrors(){
	   if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
	     alert("Não foi possível localizar o endereço de origem. Por favor verifique se digitou corretamente.\nError code: " + gdir.getStatus().code);
	   else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
	     alert("Erro no servidor do mapa.\n Error code: " + gdir.getStatus().code);
	   
	   else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
	     alert("Informe o endereço de origem.\n Error code: " + gdir.getStatus().code);

	//   else if (gdir.getStatus().code == G_UNAVAILABLE_ADDRESS)  <--- Doc bug... this is either not defined, or Doc is wrong
	//     alert("The geocode for the given address or the route for the given directions query cannot be returned due to legal or contractual reasons.\n Error code: " + gdir.getStatus().code);
	     
	   else if (gdir.getStatus().code == G_GEO_BAD_KEY)
	     alert("Chave inválida. \n Error code: " + gdir.getStatus().code);

	   else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
	     alert("Requisição inválida.\n Error code: " + gdir.getStatus().code);
	    
	   else alert("Ocorreu um erro desconhecido.");
	   
	}

	function onGDirectionsLoad(){ 
      // Use this function to access information about the latest load()
      // results.

      // e.g.
      // document.getElementById("getStatus").innerHTML = gdir.getStatus().code;
	  // and yada yada yada...
	}


function LocalizaEndereco(endereco) 
{
	if(geocoder)
	{
		geocoder.getLatLng(endereco,
			function(point)
			{
				if (!point)
				{
					//alert(endereco + " não encontrado.");
				} 
				else
				{
					map.setCenter(point, 16);
					var marker = new GMarker(point);
					map.addOverlay(marker);
					marker.openInfoWindowHtml("<br><font class=\"arial11_cinza\">"+ endereco + "</font>");
				}
			}
		);
	}
}