// JavaScript Document
var infowindow;
var geocoder;
var map;
var markersArray = [];
var directionDisplay;
var directionsService = new google.maps.DirectionsService();

function initializeMap(lat, lng, zoom) {
	
	if (map == undefined){
		lat = (lat==undefined||lat==null) ? -23.5756673 : lat;
		lng = (lng==undefined||lng==null) ? -46.6879568 : lng;
		zoom = (zoom==undefined||zoom==null) ? 4 : zoom;
		
		directionsDisplay = new google.maps.DirectionsRenderer();
		directionsDisplay.suppressMarkers = true;
		
		geocoder = new google.maps.Geocoder();
		var latlng = new google.maps.LatLng(lat, lng);
		var myOptions = {
			zoom: zoom,
			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);
		directionsDisplay.setMap(map);
	}
	
}

function Route(start, end, travelMode) {
	
	deleteOverlays();
	
	start = (start==null || start==undefined) ? "" : start;
	end = (end==null || end==undefined) ? "" : end;
	travelMode = (travelMode==null || travelMode==undefined) ? google.maps.DirectionsTravelMode.DRIVING : travelMode;
	
	var request = {
		origin:start, 
		destination:end,
		travelMode: google.maps.DirectionsTravelMode.DRIVING
	};
	  
	directionsService.route(request, function(result, status) {
			
		if (status == google.maps.DirectionsStatus.OK) {
			
			directionsDisplay.setMap(map);
			directionsDisplay.setDirections(result);
			addMarks(result);
			
		}else{
		
			directionsDisplay.setMap(null);
			addMarker(-23.613638, -46.659759, null, "images/malabar_map.png", "Malabar Filmes");
			map.setCenter(new google.maps.LatLng(-23.613638, -46.659759));
			map.setZoom(16);
			
		}
		
	});
	  
}

function addMarks(result) {
 
  	var myRoute = result.routes[0].legs[0];
	createMarker("Você está aqui", myRoute.start_location, myRoute.start_address, "images/malabar_local.png", "Você está aqui: " + myRoute.start_address, true);
	createMarker("Malabar Filmes", myRoute.end_location, myRoute.end_address, "images/malabar_map.png", "Malabar Filmes", false);
  
}

function procuraEndereco(address, marker) {
	
	marker = (marker==null || marker==undefined) ? true : marker;
	address = trim(address);
	
	if(address!=""){
		
		geocoder.geocode({'address': address}, function(results, status) {
			
			if (status == google.maps.GeocoderStatus.OK) {
				
				map.setCenter(results[0].geometry.location);
				
				if(marker==true){
					
					//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);
					});
					
				}
				
			} else {
				alert("Geocode was not successful for the following reason: " + status);
			}
			
		});
		
		return results[0].geometry.location;
		
	}
}

function procuraEnderecosProximos(center) {
	
	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){
	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() {
	
	if (markersArray) {
		
		for (i in markersArray) {
			
			markersArray[i].setMap(null);
			
		}
		
		markersArray.length = 0;
  	}
	
}

function createMarker(name, latlng, dados, icon, title, animated) {
	
	dados = (dados=="" || dados==undefined) ? null : dados;
	icon = (icon==null || icon==undefined) ? null : icon;
	title = (title==null || title==undefined) ? "" : title;
	
	var marker = new google.maps.Marker({position: latlng, map: map, icon: icon, title: title});
	markersArray.push(marker);

	if(dados!=null){
		
		google.maps.event.addListener(marker, "click", function() {
		  if (infowindow) infowindow.close();
		  infowindow = new google.maps.InfoWindow({content: dados, maxWidth: 140});
		  infowindow.open(map, marker);
		});
		
	}
	
	if(animated==true && animated!=undefined){
		
		marker.setAnimation(google.maps.Animation.BOUNCE);
		
	}
	
    return marker;
}

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


function addMarker(lat, lng, data, icon, title){
	
	createMarker("", new google.maps.LatLng(lat, lng), data, icon, title)
	
}
