//clase que permite gestionar rutas en el mapa
GestorComoLlegar = function(datosGestor)
{
	var gestor = this;
		
	gestor.gestorMapa = datosGestor.gestorMapa;
	gestor.contenedorIndicaciones = jQuery('#'+datosGestor.contenedorIndicaciones);
	
	gestor.instanciaMapa = gestor.gestorMapa.getInstanciaMapa();
	
	gestor.contenedorForm = jQuery('#'+datosGestor.contenedorForm);

	
	//objeto que se encarga de gestionar el cálculo de la ruta
	var gestorDirecciones = new google.maps.DirectionsService();
	
	//objeto que se encarga de repesentar la ruta en pantalla
	var rendererOptions = {
		draggable: true
	};

	var trazador = new google.maps.DirectionsRenderer(rendererOptions);
		
	//el objeto trazador necesita una instancia de mapa para representar la ruta
	//en este caso, será la misma que muestra el mapa con la localización original 
	
	trazador.setMap(gestor.instanciaMapa);
	trazador.markerOptions = {draggable:true};
	

	//método de la clase que calculará la ruta, mediante el trazador automático de google
	gestor.calcularRutaAutomatica = function(datosRuta) 
	{
		  //el mapa crea un marcador en el centro por defecto, así que lo eliminamos
		  gestor.gestorMapa.borrarMarcadores();
		
		  var origenEtapa = datosRuta.origenEtapa;
		  var destinoEtapa = datosRuta.destinoEtapa;
	  
		  //objeto con los parámetros necesarios para el cálculo de la ruta
		  var request = {
			  origin: origenEtapa, 
			  destination: destinoEtapa,
			  travelMode: google.maps.DirectionsTravelMode['DRIVING']
		  };
		  
		  //metodo del objeto gestor para calcular la ruta y gestionar los posibles errores
		  gestorDirecciones.route(request, function(response, status) 
		  {
			//si obtenemos respuesta correcta para las direcciones enviadas
			if (status == google.maps.DirectionsStatus.OK) 
			{
			  //el trazador standard de google permite trazar las rutas en el mapa de forma automatica
			  //mediante el metodo setdirections, al que se pasa la respuesta del gestor de direcciones
			  trazador.setDirections(response);
			  gestor.gestorMapa.reescalarMapa();
			  //la respuesta incluye las indicaciones del recorrido, que pueden insertarse en un div
			  //mediante el metodo setPanel
			  trazador.setPanel(gestor.contenedorIndicaciones.show().get(0));
			  
			}
			else if (status == google.maps.DirectionsStatus.ZERO_RESULTS || status == 'NOT_FOUND') 
			{
				alert('No se ha podido establecer una ruta circulatoria entre los puntos indicados. Haga click en cancelar y verifique que la dirección es correcta.');
			}
			
			
		  });//route
	  
  
	}//calcularruta
	

}//gestorrutas
