// JavaScript Document

function initlojas(){
	
	initialize();
	
	$('.outside').accordion({
		
		active: false, 
		header: 'div.estado', 
		animated: 'easeslide',
		autoHeight: false
		
	});
	
	$(function(){
		
		var settings = {
			showArrows: false,
			autoReinitialise: true
		};
		
		$('#cidades').jScrollPane(settings);
	});
	
}

var infowindow;
var geocoder;
var map;
var markersArray = [];

function onPressKey(e){
	
	if(e.keyCode==13){
	
		procuraEndereco();
		return false;	
		
	}

}

function initialize() {
	// Inicializa o Maps
	geocoder = new google.maps.Geocoder();
	var latlng = new google.maps.LatLng(-23.5756673, -46.6879568);
	var myOptions = {
		zoom: 4,
		center: latlng,
		mapTypeId: google.maps.MapTypeId.ROADMAP,
		navigationControl: true,
		navigationControlOptions: { style: google.maps.NavigationControlStyle.DEFAULT },
		mapTypeControl: true,
		scaleControl: true
	}
	map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}

function procuraEndereco() {
	// Procura a Lat e Long do Endereço passado pelo Usuário
	if (markersArray.length != 0){
		deleteOverlays();
	}
	
	var address = document.getElementById("endereco").value;
	address = trim(address);
	
	if(address!=""){
		
		geocoder.geocode({'address': address}, function(results, status) {
			
			if (status == google.maps.GeocoderStatus.OK) {
				map.setCenter(results[0].geometry.location);
				var image = 'images/aqui.png';
				var marker = new google.maps.Marker({
					map: map,
					icon: image,
					position: results[0].geometry.location,
					title: 'Você está aqui: ' + document.getElementById("endereco").value
				});
			
				marker.setAnimation(google.maps.Animation.BOUNCE);
				markersArray.push(marker);
				var conteudo = '<b>Você está aqui:</b> ' + document.getElementById("endereco").value;
				map.setZoom(12);
				google.maps.event.addListener(marker, "click", function() {
				
				if (infowindow) infowindow.close();
					infowindow = new google.maps.InfoWindow({content: conteudo, maxWidth: 100});
					infowindow.open(map, marker);
				});
				
				procuraEnderecosProximos(results[0].geometry.location);
			} else {
				alert("Geocode was not successful for the following reason: " + status);
			}
			
		});
		
	}
}

function procuraEnderecosProximos(center) {
	// Busca Lojas com Base na Lat e Long do Endereço Informado
	var raio = 12;
	
	var searchUrl = 'dadosLojas.php?lat=' + center.lat() + '&lon=' + center.lng() + '&raio=' + raio;

	$.get(searchUrl, function(data) {
		
      	var markers = data.documentElement.getElementsByTagName("loja");
	  
      	for (var i = 0; i < markers.length; i++) {
			var dados = [];
			dados["nome"] = markers[i].getAttribute('nome');
			dados["estado"] = markers[i].getAttribute('estado');
			dados["cidade"] = markers[i].getAttribute('cidade');
			dados["bairro"] = markers[i].getAttribute('bairro');
			dados["endereco"] = markers[i].getAttribute('endereco');
			dados["numero"] = markers[i].getAttribute('numero');
			dados["complemento"] = markers[i].getAttribute('complemento');
			dados["cep"] = markers[i].getAttribute('cep');
			dados["telefone1"] = markers[i].getAttribute('telefone1');
			dados["telefone2"] = markers[i].getAttribute('telefone2');
						
			var latlng = new google.maps.LatLng(parseFloat(markers[i].getAttribute('lat')), parseFloat(markers[i].getAttribute('lon')));
			var marker = createMarker(markers[i].getAttribute("name"), latlng, dados);
	   }	   
	});
}

function retornaCidadeEstado(tipo, dado){
	// Busca Loja com Base no Tipo // Estado ou Cidade
	if (markersArray.length != 0){
		deleteOverlays();
	}
	
	if (tipo == "estado"){
		var searchUrl = 'dadosLojas.php?estado=' + dado;
	} else {
		var searchUrl = 'dadosLojas.php?cidade=' + dado;
	}
	
	$.get(searchUrl, function(data) {
		var markers = data.documentElement.getElementsByTagName("loja");
	  
		for (var i = 0; i < markers.length; i++) {
			var dados = [];
			dados["nome"] = markers[i].getAttribute('nome');
			dados["estado"] = markers[i].getAttribute('estado');
			dados["cidade"] = markers[i].getAttribute('cidade');
			dados["bairro"] = markers[i].getAttribute('bairro');
			dados["endereco"] = markers[i].getAttribute('endereco');
			dados["numero"] = markers[i].getAttribute('numero');
			dados["complemento"] = markers[i].getAttribute('complemento');
			dados["cep"] = markers[i].getAttribute('cep');
			dados["telefone1"] = markers[i].getAttribute('telefone1');
			dados["telefone2"] = markers[i].getAttribute('telefone2');
			
			var latlng = new google.maps.LatLng(parseFloat(markers[i].getAttribute('lat')), parseFloat(markers[i].getAttribute('lon')));
			var marker = createMarker(markers[i].getAttribute("name"), latlng, dados);
			
			if (i == markers.length - 1){
				setCenter();
			}
	   }
	});	
}

function deleteOverlays() {
	// Deleta todos os Markers adicionados
	if (markersArray) {
		for (i in markersArray) {
			markersArray[i].setMap(null);
		}
		markersArray.length = 0;
  	}
}

function createMarker(name, latlng, dados) {
	var complemento = (dados["complemento"]=="" || dados["complemento"]==null) ? "" : '<br>' + dados["complemento"];
	var cidade = (dados["cidade"]=="" || dados["cidade"]==null) ? "" : ' &bull; ' + dados["cidade"];
	var estado = (dados["estado"]=="" || dados["estado"]==null) ? "" : ' &bull; ' + dados["estado"];
	var cep = (dados["cep"]=="" || dados["cep"]==null) ? "" : '<br><b>CEP: </b>' + dados["cep"];
	var telefone2 = (dados["telefone2"]=="" || dados["telefone2"]==null) ? "" : ' / ' + dados["telefone2"];
	var conteudo = '<span id="titulolojamapa"><b>' + dados["nome"] +'</b></span><br><font size="1" color="#222">'+ dados["endereco"] + ', ' + dados["numero"] + complemento + '<br>' + dados["bairro"] + cidade + estado + cep + '<br><b>Tel: </b>' + dados["telefone1"] + telefone2 + '</font>';
	
	var marker = new google.maps.Marker({position: latlng, map: map});
	markersArray.push(marker);
	
    google.maps.event.addListener(marker, "click", function() {
	  if (infowindow) infowindow.close();
	  infowindow = new google.maps.InfoWindow({content: conteudo, maxWidth: 140});
      infowindow.open(map, marker);
    });
    return marker;
}

function setCenter(){
	// ajusta os markers no viewport
	var bounds = new google.maps.LatLngBounds();
	for (var i = 0; i < markersArray.length; i++){
		bounds.extend(markersArray[i].position);
	}
	map.fitBounds(bounds);
}
