var map;
var gdir;
var geocoder = null;
var addressMarker;

function initialize() {
	if (GBrowserIsCompatible()) {      
	}
}

function setDirections(deEndereco, paraEndereco, idioma) {
	
	geocoder = new GClientGeocoder();
	geocoder.getLocations(deEndereco, resolverEnderecos);
}

function resolverEnderecos(resposta) {

    if (!resposta || resposta.Status.code != G_GEO_SUCCESS) {

        alert("Não foi possível localizar o endereço solicitado!");
		
        alert("Código de erro: " +  resposta.Status.code);

    } else {
		
		if(document.getElementById("deEndereco1").value != '') {
			idioma = document.getElementById("idioma1").value;
			paraEndereco = document.getElementById("paraEndereco1").value;
			deEndereco = document.getElementById("deEndereco1").value;
		}else{
			idioma = document.getElementById("idioma2").value;
			paraEndereco = document.getElementById("paraEndereco2").value;
			deEndereco = document.getElementById("deEndereco2").value;
		}
		
        var num_resultados = resposta.Placemark.length;
		
        var alvo = document.getElementById("map_canvas");
		document.getElementById("directions").innerHTML = '';
		alvo.style.backgroundColor = 'transparent';


        if (num_resultados > 1) {
              
			  
		      listarLocais(alvo, resposta.Placemark, deEndereco, paraEndereco, idioma);
			  
			  

        } else {
			
			map = new GMap2(document.getElementById("map_canvas"), {draggableCursor:"crosshair"});
			
			map.addControl(new GLargeMapControl());
			map.addControl(new GMapTypeControl());
			
			
			gdir = new GDirections(map, document.getElementById("directions"));
			GEvent.addListener(gdir, "load", onGDirectionsLoad);
			GEvent.addListener(gdir, "error", handleErrors);
			
       		gdir.load("from: " + resposta.Placemark[0].address + " to: " + paraEndereco,	{ "locale": idioma });
         
       }
    }
}

function listarLocais(alvo, placemark, deEndereco, paraEndereco, idioma) {


    alvo.innerHTML = "<p>Você quis dizer:</p>";


	for (var i=0; i<placemark.length; ++i) {


        alvo.innerHTML +='<p><a href="javascript:setDirections(\''+placemark[i].address+'\', \''+paraEndereco+'\', \''+idioma+'\')" title="' + placemark[i].address +'"><strong>' + placemark[i].address +'</strong></a></p>';
	}
} 


function handleErrors(){
	if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
		alert("O endereço pesquisado não foi localizado. Isto pode ocorrer se o endereço é novo ou incorreto.\nCódigo do erro: " + gdir.getStatus().code);
	else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
		alert("Sua pesquisa não pode ser processada, o problema exato não foi identificado, por favor, tente novamente.\n Código do erro: " + gdir.getStatus().code);
	
	else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
		alert("Requisição HTTP inválida. Para requisição geocoder, o endereço está vazio. Para requisição de direção, não foi especifidado a direção.\n Código do erro: " + gdir.getStatus().code);
	
	
	
	else if (gdir.getStatus().code == G_GEO_BAD_KEY)
		alert("A chave utilizada é inválida ou não coincide com este domínio. \n Código do erro: " + gdir.getStatus().code);
	
	else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
		alert("A direção solicitada não foi analisado com sucesso, por favor, tente novamente.\n Código do erro: " + gdir.getStatus().code);
	
	else alert("Ocorreu um erro! Possivelmente o endereço digitado é inválido ou não foi encontrado.");
   
}

function onGDirectionsLoad(){ 

}
$(document).ready(function(){
	
	$("#formComoChegar").submit(function(){
		if(validaForm(this)){
			$("#map_canvas").css("display","block");
			$("#directions").css("display","block");
			var inicializado = typeof($(this).attr("class")) == "undefined" ? false : $(this).attr("class").indexOf("inicializado") == -1 ? false : true;
			if(!inicializado){
				$(this).addClass("inicializado");
				initialize();
			}
			setDirections(this.deEndereco1.value, this.paraEndereco1.value, this.idioma1.value);
		}
		return false;
	});
	
});
$("body").unload(function(){
	GUnload();
});
