var mapaobj;
var geocoder;
var fantasiaGlobal;
var gdir;
var nivelZoom = [];
    nivelZoom[0] = 2;
    nivelZoom[1] = 8;
    nivelZoom[2] = 9;
    nivelZoom[3] = 10;
    nivelZoom[4] = 12;
    nivelZoom[5] = 13;
    nivelZoom[6] = 14;
    nivelZoom[7] = 15;
    nivelZoom[8] = 16;

// Função chamada ao carregar a página HTML
function inicializa() {
    mapaobj = new GMap2(document.getElementById("mapa"),{size:new GSize(880,420)});
    // Centraliza o mapa
    mapaobj.setCenter(new GLatLng(-16, -55), 3);
	mapaobj.addControl(new GLargeMapControl());
    var mapControl = new GMapTypeControl();
    mapaobj.addControl(mapControl);
    // Cria o objeto que resolverá as consultas de endereço
    geocoder = new GClientGeocoder();
}

function realizaConsulta(end,fantasia) {
    var endereco = end;
	fantasiaGlobal = fantasia; 
    geocoder.getLocations(endereco, resolverEnderecos);
}
function realizaConsulta2() {
    // Recebe o endereço digitado no campo 'consulta' do form
    var origem = document.forms['consDes'].de.value;
	var destino = document.forms['consDes'].paraD.value;
	// Realiza a consulta. resolverEnderecos é a função callback
    // Javascript que será chamada quando o método getLocations do
    // objeto geocoder retornar uma resposta.
    //geocoder.getLocations(endereco, resolverEnderecos);
	setDirections(origem,destino);
}

function resolverEnderecos(resposta) {
    fantasia = fantasiaGlobal;
	// Retira todos os marcadores existentes no mapa.
    mapaobj.clearOverlays();
    // Verifica o status da resposta
    if (!resposta || resposta.Status.code != G_GEO_SUCCESS) 
	{
        
    } else {
        var num_resultados = resposta.Placemark.length;
		var alvo = document.getElementById("locais");
		listarLocais(alvo, resposta.Placemark);
        // Caso haja múltiplos resultados, informa o fato ao usuário
        if (num_resultados > 1) {
			   
               
        } else {
          // Obtém uma referência ao endereço retornado
          var local = resposta.Placemark[0];
          // Extrai o um objeto GLatLng representando as coordenadas
          var ponto = local.Point.coordinates;
          // Extrai a precisão do endereço. Accuracy é um número que
          // indica se o endereço retornado corresponde a um país,
          // provincial, estado, cidade, bairro, rua, etc. Depende da
          // consulta que foi realizada. Com essa informação em mãos,
          // podemos decidir qual o nível de zoom mais adequado
          var acc = resposta.Placemark[0].AddressDetails.Accuracy;
		  centralizaMapa(ponto[1],ponto[0],resposta.Placemark[0].address, acc,fantasia);
       }
    }
}

function listarLocais(alvo, placemark) {
   
}

function centralizaMapa(x, y, info, acc, fantasia) 
{
    // Cria um ponto GLatLng
    var p = new GLatLng(x,y);
    // Obtém o nível de zoom conforme a precisão do endereço
    var zoom = nivelZoom[acc];
    // Define o novo centro do mapa e o seu novo nível de zoom
    mapaobj.setCenter(p,zoom);
    // Cria um novo marcador que sera exibido no ponto p solicitado
    marcador = new GMarker(p);
    // Adiciona o marcador ao mapa
    mapaobj.addOverlay(marcador);
    // Exibe uma caixa de informação com o texto informado
    
  }
  
function setDirections(fromAddress, toAddress) 
{ 
	gdir = new GDirections(mapaobj); 
	//gdir.load("from: " + fromAddress + " to: " + passandoAddress+" to:"+toAddress, {getSteps:true}); 
	//GEvent.addListener(gdir, "load", onGDirectionsLoad); 
	
	var locais = ([fromAddress, toAddress]);
	gdir.loadFromWaypoints(locais, {getSteps:true}); 
	GEvent.addListener(gdir, "load", onGDirectionsLoad);
	
} 
function onGDirectionsLoad()
{ 
		var dist = gdir.getDistance();
		var dur = gdir.getDuration();
		var rotas = gdir.getNumRoutes();
		var minutos = dur['seconds']/60
		
}