if (!demo) var demo = {};
demo.geolocalizacion =  {
	latitude: 37.41,
	longitude: -122.08,
	map: null,
	marker: null,
	infowindow: new google.maps.InfoWindow(),
	initialize: function() {
		$('#search_result').hide();
		demo.geolocalizacion.geocoder = new google.maps.Geocoder();
		var latlng = new google.maps.LatLng(demo.geolocalizacion.latitude, demo.geolocalizacion.longitude);
	    var mapOptions = {
			zoom: 1,
			center: latlng,
			mapTypeId: google.maps.MapTypeId.ROADMAP
	    };
		demo.geolocalizacion.map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
	},
	locateOnMap: function() {
		$('#result, #errors').slideUp();
		if(navigator && navigator.geolocation && navigator.geolocation.getCurrentPosition)
		{
			$('#locating').show();
			$('#locate').hide();
			navigator.geolocation.getCurrentPosition(demo.geolocalizacion.displayLocation, demo.geolocalizacion.handleError);
		}
		else
		{
			$('#errors').html('<p><strong>Error:</strong> Tu navegador no soporta golocalización.</p>').slideDown();
		}
		return false;
	},
	filterResults: function() {
		var countries = {
			ES: '#ES',//latitude-longitude: 40.41669,-3.700343
			MX: '#MX',//latitude-longitude: 19.427051,-99.127573
			AR: '#AR'//latitude-longitude: -34.60861,-58.373151
		};
		var latlng = new google.maps.LatLng(demo.geolocalizacion.latitude, demo.geolocalizacion.longitude);
		demo.geolocalizacion.geocoder.geocode( {'latLng': latlng}, function(results, status) {
			if (status == google.maps.GeocoderStatus.OK) {
				if(results && results[0])
					$('#city_results>li').hide();
					var position = results.length - 2;
					var short_name = results[position].address_components[1].short_name;
					if(countries[short_name])
						$country = $(countries[short_name]);
					else
						$country = $('#other');
					$country.show();
			}
			else
			{
				$('#errors').html('<p><strong>Error:</strong> Geocoder failed due to: ' + status + '</p>').slideDown();
			}
		});
		return false;
	},
	displayLocation: function(position)
	{// Obtener la geolocalización
		demo.geolocalizacion.latitude = position.coords.latitude;
		demo.geolocalizacion.longitude = position.coords.longitude;
		var LatLng = new google.maps.LatLng(demo.geolocalizacion.latitude, demo.geolocalizacion.longitude)
		$('#latitude').html(demo.geolocalizacion.latitude);
		$('#longitude').html(demo.geolocalizacion.longitude);
	 	var zoomLevel = (position.coords.accuracy > 500) ? 10 : 14;
		demo.geolocalizacion.map.setCenter(LatLng); 
		demo.geolocalizacion.map.setZoom(zoomLevel); 
		demo.geolocalizacion.setMarker(LatLng);
		demo.geolocalizacion.getAddress(LatLng);
		$('#locating').hide();
		$('#locate').show();
		$('#result, #search_result').slideDown();
	},
	handleError: function(error)
	{// En caso de error
		$errors = $('#errors').slideDown();
		switch (error.code)
		{
			// Si el usuario no nos dá permisos.
			case error.PERMISSION_DENIED:
				$errors.html('<p><strong>Error:</strong> Permiso denegado.</p>');
			break
			// Si la posición no puede ser localizada.
			case error.POSITION_UNAVAILABLE:
				$errors.html('<p><strong>Error:</strong> Posición no disponible.</p>');
			break
			// Si no se ha conseguido localizar en el tiempo estimado.
			case error.POSITION_UNAVAILABLE:
				$errors.html('<p><strong>Error:</strong> Tiempo de espera agotado.</p>');
			break
			default:
				$errors.html('<p><strong>Error:</strong> ' + error.code + ' - ' + error.message + '</p>');
		}
		$('#locate').show();
		$('#locating').hide();
		$('#result').slideUp();
	},
	setMarker: function(latlng){
		if(demo.geolocalizacion.marker == null)
		{
			demo.geolocalizacion.marker = new google.maps.Marker({
				position: latlng, 
				map: demo.geolocalizacion.map
			});
		}
		else
		{
			demo.geolocalizacion.marker.setPosition(latlng);
		}
	},
	getAddress: function(latlng){
		$('#direcciones').slideUp();
		if (demo.geolocalizacion.geocoder)
		{
			demo.geolocalizacion.geocoder.geocode( {'latLng': latlng}, function(results, status) {
				if (status == google.maps.GeocoderStatus.OK) {
					if (results) {
						demo.geolocalizacion.infowindow.setContent(results[0].formatted_address);
						demo.geolocalizacion.infowindow.open(demo.geolocalizacion.map, demo.geolocalizacion.marker);
						demo.geolocalizacion.direcciones = results;
						direccionesList = '';
						$.each(results, function(){
							direccionesList += '<li>'+this.formatted_address+'</li>'
						})
						$('#direcciones').html(direccionesList).slideDown();
			          }
			        } else {
						$('#errors').html('<p><strong>Error:</strong> Geocoder failed due to: ' + status + '</p>').slideDown();
			        }
			});
		}
	}
};
$(function(){
	demo.geolocalizacion.initialize();
	$('#locating, #errors, #result').hide();
	$('#locate').click(demo.geolocalizacion.locateOnMap);
	$('#filter').click(demo.geolocalizacion.filterResults);	
});
