// JavaScript Document - Daniel D'Angelo Ferraz - digipronto.com.br - mootools 1.2.4


var geocoder = new GClientGeocoder();  
var map;  
var directionsPanel;  
var directions;
var gdir = new GDirections();
var addr = new Array();  
var distances = new Array();
var latPt = new Array();
var longPt = new Array();
var dist = new Array();


var optSelecione = new Element('option',{
	'value': '0',
	'text': 'Selecione'
});

//cria as revendas no mapa apos
var criaRevendas = function(tipo,est,cid){
	
	$('baixo').setStyle('display','block');
	$('lisResult').erase('html');
	
	var htmResul = '';
	var cont = 0;
	
	var jsonRequest = new Request.JSON(
		{
			url: 'json.asp?t='+tipo.value+'&est='+est.value+'&cid='+cid.value,
			onSuccess: function(response){
				var rev = response.revendas;
				$each(rev, function(ele){
					//
					var result = '<p><strong>'+ele.txt_nome+'</strong><br />';
					result = result + '<span style=text-transform:capitalize>' + ele.txt_endereco.toLowerCase() + '</span>' + '<br />';
					
					if(ele.txt_bairro != null && ele.txt_bairro != ''){
						result = result + '<strong>Bairro:</strong> ' + '<span style=text-transform:capitalize>' + ele.txt_bairro.toLowerCase() + '</span>' + '<br />';
					}
					if(ele.txt_cep != null && ele.txt_cep != ''){
						result = result + '<strong>CEP:</strong> ' + ele.txt_cep + '<br />';
					}
					if(ele.txt_fone != null && ele.txt_fone != ''){
						result = result + '<strong>Tel:</strong> ' + ele.txt_fone + '<br />';
					}
					if(ele.txt_fax != null && ele.txt_fax != ''){
						result = result + '<strong>Fax:</strong> ' + ele.txt_fax + '<br />';
					}if(ele.txt_site != null && ele.txt_site != ''){
						result = result + '<a href=http://' + ele.txt_site + ' target=_blank>' + ele.txt_site + '<a/><br />';
					}
					if(ele.txt_email != null && ele.txt_email != ''){
						var posPtVir = ele.txt_email.indexOf(';');
						if(posPtVir > 0){
							var emailFim = ele.txt_email.substring(0,posPtVir);
						}else{
							var emailFim = ele.txt_email;
						}
						result = result + '<a href=mailto:' + emailFim.toLowerCase() + '>' + emailFim.toLowerCase() + '</a>';
					}
					result = result + '</p>';
					htmResul = htmResul + result;
					
					//insere as revendas nao mapa
					if(ele.txt_cep != null && ele.txt_cep != ''){
						var endBusca = ele.txt_endereco+' - '+ele.txt_cidade+' - '+ele.txt_uf+', '+ele.txt_cep+', Brasil';
					}else{
						var endBusca = ele.txt_endereco+' - '+ele.txt_cidade+' - '+ele.txt_uf+', Brasil';
					}
					showAddress(endBusca, cont, ele.txt_nome);
					cont = cont + 1;
					
				});
				$('qtdRev').erase('html');
				$('qtdRev').set('text',cont);
				htmResul = htmResul + '<br class=clear />';
				$('lisResult').set('html',htmResul);
				
			}
		}
	).get();
}

//funcao para criar as cidades
var criaCid = function(elEstado,elTipo){

	$('lblCidades').setStyle('visibility','visible');
	var insereCid = $('lblCidades').getElement('select');
	
	insereCid.erase('html')
	optSelecione.inject(insereCid,'bottom');
	
	//acessa o arquivo JSON
	var jsonRequest = new Request.JSON(
		{
			url: 'json.asp?t='+elTipo.value+'&est='+elEstado.value,
			onSuccess: function(response){
				var rev = response.revendas;
				insereCid.erase('html')
				optSelecione.inject(insereCid,'bottom');
				$each(rev, function(ele){
					var optCid = new Element('option',{
						'value': ele.txt_cidade.toUpperCase(),
						'text': ele.txt_cidade.toUpperCase()
					});
					
					optCid.inject(insereCid,'bottom');
					
				});
			}
		}
	).get();
	
	insereCid.addEvent('change',function(){
		$('lblBusca').setStyle('visibility','visible');
		$('lblBt').setStyle('visibility','visible');
		criaRevendas(elTipo,elEstado,this);
	});
	
}

//funcao para criar os estados
var criaEst = function(){
	
	var lblTipo = $('lblTipo').getElement('select');
	
	
	
	lblTipo.addEvent('change',function(){
									   
		var apagaEsq = $('lblEstados').getElement('select');
		apagaEsq.erase('html');
		
		var apagaCid = $('lblCidades').getElement('select');
		apagaCid.erase('html');
		
		//apaga resultados
		var apagaCid = $('lblCidades').getElement('select');
		apagaCid.erase('html');
		
		$('lblCidades').setStyle('visibility','hidden');
		$('lblBusca').setStyle('visibility','hidden');
		$('lblEstados').setStyle('visibility','visible');
		
		var insereEst = $('lblEstados').getElement('select');
		insereEst.erase('html');
	
		optSelecione.inject(insereEst,'bottom');
		
		//acessa o arquivo JSON
		var jsonRequest = new Request.JSON(
			{
				url: 'json.asp?t='+this.value,
				onSuccess: function(response){
					var rev = response.revendas;
					$each(rev, function(ele){
						//
						var optEst = new Element('option',{
							'value': ele.txt_uf.toUpperCase(),
							'text': ele.txt_uf.toUpperCase()
						});
						optEst.inject(insereEst,'bottom');
						//
					});
				}
			}
		).get();
		
		//chama funcao para criar cidades
		
		var insereCid = $('lblCidades').getElement('select');
		insereCid.erase('html');
		
		insereEst.addEvent('change',function(){
			criaCid(this,lblTipo);
		});
		
	});
	
}

//Add revendas
function showAddress(address, k, nome) {
	map.clearOverlays();
	geocoder.getLocations(  
		address,  
		function(point) {  
			add_marker(point, k, nome, address);
		}  
	);
}

function add_marker(response, k, nome, endereco) {  

	if(!response.Placemark) {  
		 return;  
	}
	place = response.Placemark[0];
	if(k) {  
		 //grava a latitude/longitude do endereco  
		 addr[k-1] = place.Point.coordinates;
	}
	point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);  

	var marker = createMarker(point, endereco, k, nome);
	map.addOverlay(marker);
	map.setCenter(point, 10);
	
	//latPt[k-1] = point.lat();
	//longPt[k-1] = point.lng();
	
	latPt[k] = point.lat();
	longPt[k] = point.lng();
	
}

function createMarker(point, html, k, nome) {  
	var marker = new GMarker(point, false);
	GEvent.addListener(marker, "click", function() {
		var myHtml = "<p style='font-family:arial; font-size:11px; color:#000'><strong>"+nome+"</strong><p>"+
								"<p style='font-family:arial; font-size:11px; color:#000'>"+html+"</p>"
		marker.openInfoWindowHtml(myHtml);
	});
	return marker;  
}

function tracaRota(ltFrom, lgFrom, ltTo, lgTo){
	$('baixo').setStyle('display','none');
	$('baixo2').setStyle('display','block');
	$('directions').erase('html');
	map.clearOverlays();
	var from = new GLatLng(ltFrom, lgFrom);
	var to = new GLatLng(ltTo, lgTo);
	directions = new GDirections(map, document.getElementById("directions"));
	directions.load("from: " + from + " to: " + to, { "locale": "pt_BR"});
}

function showLocation(endereco) {
	var address = endereco;
	geocoder.getLocations(address, addAddressToMap2);
}

function addAddressToMap2(response) {

	//map.clearOverlays();
	if (!response || response.Status.code != 200) {
		alert("Desculpe mas não conseguimos encontrar esse endereço");
	}else{
		place = response.Placemark[0];
		point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
		//
		var qtdRevendas = $('qtdRev').get('text').toInt();
		//
		lat_usu = point.lat();
		long_uso = point.lng();
		//
		mais_prox = 0;
		dist_prox = 0;
		var dist = new Array();
		//
		for(var b=0; b<latPt.length; b++){
			var pt1Lat = (lat_usu * Math.PI) / 180;
			var pt1Lon = (long_uso * Math.PI) / 180;
			var pt2Lat = (latPt[b] * Math.PI) / 180;
			var pt2Lon = (longPt[b] * Math.PI) / 180;
			//
			var dLat = pt2Lat - pt1Lat;
			var dLong = pt2Lon - pt1Lon;
			//
			var valor1 = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(pt1Lat) * Math.cos(pt2Lat) * Math.sin(dLong/2) * Math.sin(dLong/2);
			var valor2 = 2 * Math.tan(Math.sqrt(valor1), Math.sqrt(1-valor1));
			if(!isNaN(valor2)){
				dist[b] = valor2;
			}
		}
	
		var aux = dist[0];
		
		for(var x=0; x<dist.length; x++){
		
			for(var y=0; y<dist.length; y++){
				if((dist[x]<dist[y]) && (dist[x]<aux)){
					var aux = dist[x];
					var contro = x;
				}
			}
		
		}
		//
		map.setCenter(point, 12);
		marker = new GMarker(point);
		map.addOverlay(marker);
		//
		marker.openInfoWindowHtml("<p style='color:#000; font-size:11px'><strong>Você está aqui!<br /></strong>"+place.address+"<br /> Para traçar a rota até a revenda mais próxima, <strong><a style='color:#000' href='javascript:tracaRota("+lat_usu+","+long_uso+","+latPt[contro]+","+longPt[contro]+");'>clique aqui</a></strong>");
		GEvent.addListener(marker, "click", function() {
			marker.openInfoWindowHtml("<p style='color:#000; font-size:11px'><strong>Você está aqui!<br /></strong>"+place.address+"<br /> Para traçar a rota até a revenda mais próxima, <strong><a style='color:#000' href='javascript:tracaRota("+lat_usu+","+long_uso+","+latPt[contro]+","+longPt[contro]+");'>clique aqui</a></strong>");
		});
	}
}

var site = function(){
	
	geocoder.setBaseCountryCode("pt_BR");
	map = new GMap2(document.getElementById("map"), { size: new GSize(593,333) })  
	map.setUIToDefault();
	map.setCenter(new GLatLng(-23.547779, -46.639366), 12); //centro da cidade de São Paulo  
	
	criaEst();
	
	$('buscar').addEvent('click',function(){
		var endUsu = $('endUsua').get('value');
		showLocation(endUsu)
	});
	
}

window.addEvent('domready',site);