/*
 * JAVASCRIPT DEL COMPORTAMIENTO DE LOS ELEMENTOS DE PRESENTACION
 */

// Variables para el movimiento del raton
var offsetx;
var offsety;
var mouse_x;
var mouse_y; 

// variables para maximizar y minimizar
var original_x;
var original_y;	 
var original_width;
var original_height;

// Ventana flotante
var ventana;
// Ventana minimizada
var ventana_minimizada;

// Boleano para saber si se mueve la ventana
var moviendo = false;

// Booleano si es la primera vez que se muestra el perfil
var primera_vez = true;

// Opciones abiertas
var opciones_abiertas = false;

// Variable que controla si la barra lateral esta ocultada
var barraLateralOcultada = false;

// Constantes que controlan el estado del proceso de generar perfil
var NUEVA_RUTA = 1;
var DISTANCIA_OBTENIDA = 2;
var DATOS_DE_PERFIL = 3;
var MOSTRADA_RUTA = 4;
// Variable de estado
var estado_ruta = NUEVA_RUTA;

/*
 * Funcion que se ejecuta al iniciar la pagina
 */
function onLoad(){
	// Iniciar el mapa
	initializeMap();
	// Inicia las ventanas
	inicia_ventanas("ventana_flotante","ventana_minimizada");
}	

/*
 * Funcion que inicializa las funciones de ventana flotante
 */
function inicia_ventanas(flotante,minimizada){
	ventana = document.getElementById(flotante);
	ventana_minimizada = document.getElementById(minimizada);
	
	// Recupera las medidas originales de la ventana
	original_width = ventana.offsetWidth - 9;
	original_height = ventana.offsetHeight - 11;
	
	original_x = ventana.offsetLeft;
	original_y = ventana.offsetTop;
}

/*
 * Funcion evalua si se presiona enter para realizar una busqueda
 */
function teclaPresionada(event){
	if(event.keyCode == 13) {
		// Busca la direccion
		codeAddress();
	}
}

/*
* Funcion que detecta cuando se pulsa la barra de titulo
*/
function pulsando(event){
	moviendo = true;
	offsetx = event.clientX;
	offsety = event.clientY;
	mouse_x = ventana.offsetLeft;
	mouse_y = ventana.offsetTop;
}

/*
* Funcion que mueve la ventana flotante
*/
function mover(event){
	if (!moviendo){return;}
    ventana.style.left = mouse_x+event.clientX-offsetx+"px"; 
    ventana.style.top = mouse_y+event.clientY-offsety+"px";
}

/*
* Funcion que detecta cuando se deja de pulsar la barra de titulo
*/
function relajando(){
	moviendo = false;
}

/*
* Funcion para minimizar la ventana
*/
function minimize(){
	original_x = ventana.offsetLeft;
	original_y = ventana.offsetTop;
	ventana_minimizada.style.visibility="visible";
	$("#ventana_flotante").animate({
		width: "200px",
		height: "10px",
		top: ventana_minimizada.offsetTop,
		left: ventana_minimizada.offsetLeft,
		opacity: 0
		}, 500, function (){
			ventana.style.top=0;	
			ventana.style.left=0;
			ventana.style.visibility="hidden";
		});
	$("#ventana_minimizada").animate({
		opacity: 0.6
		}, 500 );
}

/*
* Funcion para maximizar la ventana
*/
function maximize(){
	// La ventana se maximiza desde la ventana minimizada si no es la primera vez
	if (!primera_vez){
		$("#ventana_flotante").animate({
			top: ventana_minimizada.offsetTop,	
			left: ventana_minimizada.offsetLeft
			}, 10 );
	}else{
		primera_vez=false;
	}
	ventana.style.visibility="visible";
	$("#ventana_flotante").animate({
		width: original_width,
		height: original_height,
		top: original_y,
		left: original_x,
		opacity: 1
		}, 500 );
	$("#ventana_minimizada").animate({
		opacity: 0
		}, 500 );
}

/*
 * Funcion que muestra la sección correspondiente a la distancia
 */
function muestraDistancia(mostrar){
	if (mostrar){
		if (!barraLateralOcultada){
		    $("#distancia").fadeIn("slow");
		    if (tipoDeRuta == ID_INFORMADO || earth_mode){
		    	$("#pre_perfil").fadeOut("fast");
		    	$("#div_btn_earth").fadeIn("slow");
		    }else{
		    	$("#pre_perfil").fadeIn("slow");
		    	$("#div_btn_earth").fadeOut("fast");
		    }
		    document.getElementById("distancia_value").innerHTML = redondear(distance/1000)+" km";
		    if (tipoDeRuta == IDA_VUELTA){
		    	$("#distancia_ida_vuelta").fadeIn("slow");
		    	 document.getElementById("distancia_ida_value").innerHTML = redondear(distanceIda/1000)+" km";
		    	 document.getElementById("distancia_vuelta_value").innerHTML = redondear(distanceVuelta/1000)+" km";
		    }else{
		    	$("#distancia_ida_vuelta").fadeOut("fast");
		    }	
		}
		
		document.getElementById("map_boton_3d").className="btn_mapa";
		document.getElementById("map_boton_gpx_down").className="btn_mapa";
		
		if (tipoDeRuta != ID_INFORMADO){
			document.getElementById("map_boton_perfil").className="btn_mapa";
		}
	}else{
	    $("#distancia").fadeOut("fast");
	    $("#distancia_ida_vuelta").fadeOut("fast");
	    $("#pre_perfil").fadeOut("fast");
	    document.getElementById("map_boton_perfil").className="btn_mapa btn_mapa_disabled";	
	    document.getElementById("map_boton_3d").className="btn_mapa btn_mapa_disabled";
	    document.getElementById("map_boton_gpx_down").className="btn_mapa btn_mapa_disabled";
	}
}

/*
 * Funcion que muestra la sección correspondiente a la información de las alturas obtenidas
 */
function muestraDatosPerfil(mostrar){
	if (mostrar){
		if (!barraLateralOcultada){
			$("#datos_perfil").fadeIn("slow");
		    document.getElementById("max_alt_value").innerHTML = redondear(alturaMaxima);
		    document.getElementById("min_alt_value").innerHTML = redondear(alturaMinima);
		    document.getElementById("desnivel_pos_value").innerHTML = redondear(desnivel_pos);
		    document.getElementById("desnivel_neg_value").innerHTML = redondear(desnivel_neg);
		}
		document.getElementById("map_boton_salvar").className="btn_mapa";	
		document.getElementById("map_boton_imprimir").className="btn_mapa";	
		if (tipoDeRuta != ID_INFORMADO){
			document.getElementById("map_boton_compartir").className="btn_mapa";
			document.getElementById("map_boton_link").className="btn_mapa";
		}
	}else{
		$("#datos_perfil").fadeOut("fast");
		document.getElementById("map_boton_salvar").className="btn_mapa btn_mapa_disabled";	
		document.getElementById("map_boton_imprimir").className="btn_mapa btn_mapa_disabled";	
		document.getElementById("map_boton_compartir").className="btn_mapa btn_mapa_disabled";	
		document.getElementById("map_boton_link").className="btn_mapa btn_mapa_disabled";
		document.getElementById("ventana_flotante").style.visibility = "hidden";
		document.getElementById("ventana_minimizada").style.visibility = "hidden";	    
	}
}
/*
 * Función ocultar opciones, empleada en rutas guardadas
 */
function ocultarOpciones(ocultar){
	if (ocultar){
		$("#mas_opciones_link").fadeOut("fast");
		$("#busqueda_localizacion").fadeOut("fast");		
	}else if (!barraLateralOcultada){
		$("#mas_opciones_link").fadeIn("fast");
		$("#busqueda_localizacion").fadeIn("fast");
	}	
}

/*
 * Función que oculta/muestra la barra lateral correspondiente a las herramientas
 */
function ocultarLateral(forzarOcultar){
	if (barraLateralOcultada && !forzarOcultar){
		  // Cambia el estado
		  barraLateralOcultada = false;
		  // Cambia la flecha
		  document.images['flecha'].src = "./recursos/arrow_left.png";
		  $("#busqueda_localizacion").fadeIn("fast");
		  if (estado_ruta >= DISTANCIA_OBTENIDA){
			  $("#distancia").fadeIn("fast");
			  if (estado_ruta != MOSTRADA_RUTA){
				  $("#pre_perfil").fadeIn("fast");
			  }			 
			  muestraDistancia(true);
			  if (estado_ruta >= DATOS_DE_PERFIL){ 
			  	$("#datos_perfil").fadeIn("fast");
			  	muestraDatosPerfil(true);	
			  }	  
		  } 
		  if (estado_ruta != MOSTRADA_RUTA){
			  $("#mas_opciones_link").fadeIn("fast");
		  }
		  $("#link_version_anterior").fadeIn("fast");
		  
		  $("#vertical_tools").fadeOut("fast");		  
		  
		  $('#area_map').animate({
		    width: "79.3%"
		  }, 500, function() {
		    // Animation complete.
		  });
		  $('#tools').animate({
			    width: "20%",
			    height: "600px"
			  }, 500, function() {
				// Animation complete, lanzar el evento para que se refresque el mapa
				  google.maps.event.trigger(map, 'resize');
		  });		
	}else if (!earth_mode){
		  // Cambia el estado
		  barraLateralOcultada = true;
		  // Cambia la flecha
		  document.images['flecha'].src = "./recursos/arrow_right.png";
		  $("#busqueda_localizacion").fadeOut("fast");
		  $("#distancia").fadeOut("fast");
		  $("#pre_perfil").fadeOut("fast");
		  $("#datos_perfil").fadeOut("fast");
		  $("#mas_opciones_link").fadeOut("fast");
		  $("#mas_opciones_box").fadeOut("fast");
		  $("#link_version_anterior").fadeOut("fast");
		  abre_cierra_opciones(true);

		  $("#vertical_tools").fadeIn("fast");
		  		  	 
		  $('#tools').animate({
			    width: "12px",
			    height: "190px"
			  }, 500, function() {
		  });
		  $('#area_map').animate({
			    width: "100%"
			  }, 500, function() {
				// Animation complete, lanzar el evento para que se refresque el mapa
				  google.maps.event.trigger(map, 'resize');
		  });
	}
}

/*
 * Funcion que crea una nueva ruta
 */
function nuevaRuta(){
	muestraDatosPerfil(false);
	muestraDistancia(false);
	borra_mapa();
	estado_ruta = NUEVA_RUTA;
	// Se reinicia tipo de ruta si era de tipo ID_INFORMADO o GPX
	if (tipoDeRuta == ID_INFORMADO || tipoDeRuta == RUTA_GPX){
		tipoDeRuta = INICIO_FIN;
		ocultarOpciones(false);
	}
}

/*
 * Función para abrir y cerrar el cuadro de las opciones
 */
function abre_cierra_opciones(forzar){
	if (opciones_abiertas || forzar){
		$("#mas_opciones_box").slideUp();
	}else{
		$("#mas_opciones_box").slideDown();
	}
	if (forzar){
		opciones_abiertas = false;
	}else{
		opciones_abiertas = !opciones_abiertas;
	}
}

/*
 * Funcion que muestra un texto en la parte superior
 */
function muestraInfoSuperior(text){
    document.getElementById("infoSuperiorTxt").innerHTML = text;
    $("#infoSuperior").slideDown(2000);
}

/*
 * Funcion que oculta un texto en la parte superior
 */
function ocultarInfoSuperior(){
    $("#infoSuperior").slideUp(100);
}

/*
 * Funcion para redondear una cifra dada
 */
function redondear(num){ 		
	var original=parseFloat(num); 		
	var result=Math.round(original*100)/100 ; 		
	return result; 
}

/*
 * Funciñon de imprimir 
 */
function imprimir(){
	// Si el estado no es adecuado, se sale de la rutina
	if (estado_ruta < DATOS_DE_PERFIL){
		return;
	}	
	// Posiciona la ventana flotante en la esquina superior
    document.getElementById("ventana_flotante").style.top = "0px";
    document.getElementById("ventana_flotante").style.left = "0px";
    action_on_server("print");
    // Imprimir
    window.print();
}

function setLoading (activar){
	if (activar){
		document.getElementById("loading_div").style.display = "block";
	}else{
		document.getElementById("loading_div").style.display = "none";
	}
}
