/*
 * Project : Leomartin.org
 * File    : leomartinorg.js
 * 
 * Leonardo Martin Abad
 * 
 * Libreria de funciones JavaScript para las páginas
 */

// ----------------------------------------------------------------------------
//        FUNCIONES VALIDACIÓN
// ----------------------------------------------------------------------------
 
/**
 * Función que verifica que 'cadena' no es vacía o null
 *
 * @param cadena string que queremos comprobar
 * @return boolean indicando si esta vacia o no
 */
function esCadenaVacia(cadena) {return cadena=="";}

/**
 * Función que verifica que 'cadena' no es un String que sólo contiene
 * caracteres: espacio en blanco, retorno de carro, retroceso 
 * y tabulador
 *
 * @param cadena string que queremos comprobar
 * @return boolean indicando si solo contiene espacios o no
 */
function soloEspacios(cadena) {
	var caracter = '';
	for (j=0; j<cadena.length; j++) {		
		caracter = cadena.charAt(j);
		if ((caracter!=" ")&&(caracter!="\b")&&(caracter!="\n")&&(caracter!="\t"))
			return false;
	}
	return true;
}

/**
 * Función que verifica si un email es válido
 *
 * @param cadena string que queremos comprobar
 * @return boolean indicando si es válido o no
 */
function emailValido(cadena) {

	//Si la cadena esta vacia retornamos false
	if ( esCadenaVacia(cadena) || soloEspacios(cadena) ) {return false;}

	//Filtro para el email
	var filter=/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@+([_a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]{2,200}\.[a-zA-Z]{2,6}$/
	
	//Retornamos si cumple el test
	return filter.test(cadena);

}

// ----------------------------------------------------------------------------
//        AJAX
// ----------------------------------------------------------------------------

//Variable para almacenar objetos XMLHttpRequest
var ajax = false;

/**
 * Función que devuelve el Objeto XMLHttpRequest si esta disponible
 *
 * @return XMLHttpRequest si esta disponible
 */
function getXMLHttpRequest() {

	
	/*  Notas:
	// Variable donde guardar el objeto
	var xmlHttpRequest;

	// Sacamos el objeto probando para los distintos navegadores
	try {xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");} 
	catch(e) {
  		try {xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");} 
  		catch(e1) {
  			try {xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");}
  			catch(e2) {xmlHttpRequest = false;}
  		}
 	}
 	
 	// Si el objeto existe y el tipo XMLHttpRequest esta definido
	if (!xmlHttpRequest && typeof XMLHttpRequest!='undefined') {
  		xmlHttpRequest = new XMLHttpRequest();
	}
	else {xmlHttpRequest = false;}
	
	// Retornamos el objeto
	return xmlHttpRequest; */


	http_request = false;

	// Si estamos con Mozilla, Safari, etc
	if (window.XMLHttpRequest) { 
            http_request = new XMLHttpRequest();
	} 
	// Si estamos con IE
	else if (window.ActiveXObject) {
		try {http_request = new ActiveXObject("Msxml2.XMLHTTP");}
		catch (e) {
			try {http_request = new ActiveXObject("Microsoft.XMLHTTP");} 
			catch (e) {}
		}
	}

	// Devolvemos el objeto
	return http_request;
	
}

/**
 * Función que carga los datos de un folio (proyecto) mediante AJAX en el
 * espacio reservado para el
 *
 * @param idFolio entero con la id del folio a cargar
 */
function cargaFolio(idFolio) {
	
	//Intentamos cargar el objeto XmlHttpRequest
	if (ajax = getXMLHttpRequest()) {
		//Mandamos la petición
		ajax.onreadystatechange = cargandoFolio;
		ajax.open("GET","folio.php?id="+idFolio,true);
		ajax.send(null);
	}
	
	return false;
}

/**
 * Función que se asigna al objeto XmlHttpRequest para recibir sus cambios
 * de estado en cargaFolio()
 *
 */
function cargandoFolio() {

	//Div donde poner el folio(proyecto)
	var folio = document.getElementById("folio");
	
	//Si se ha terminado la carga de los datos
	if (ajax.readyState == 4) {
		folio.innerHTML = ajax.responseText;
	}
	//si no mostramos cargando
	else {
		folio.innerHTML = "Cargando......";		
	}	

}


// ----------------------------------------------------------------------------
//        FORMULARIO CONTACTO
// ----------------------------------------------------------------------------

/**
 * Función que comprueba el campo especificado del formulario de Contacto
 * escribiendo el resultado de la validación en la página
 *
 * @return boolean indicando si es correcto o no
 */
function campoContactoCorrecto(campo) {

	var texto = "";       //Texto del campo
	var textoError = "";  //Texto que mostraremos en caso de error
	var errorCampo;       //Campo donde poner los errores
	
	//Dependiendo del campo sacamos el valor del campo y donde poner el error
	switch(campo) {
	
		case "nombre": 
			texto = document.getElementById("comoSeLlamaLaPersona").value;
			errorCampo = document.getElementById("errorNombre");
			textoError = "Debe introducir un nombre";
			break;

		case "email": 
			texto = document.getElementById("dondeMandarleRespuestas").value;
			errorCampo = document.getElementById("errorEmail");
			textoError = "Debe introducir un email válido";
			break;
			
		case "asunto": 
			texto = document.getElementById("estoEsElTema").value;
			errorCampo = document.getElementById("errorAsunto");
			textoError = "Debe introducir un asunto";
			break;	
			
		case "mensaje": 
			texto = document.getElementById("estoEsLoQueDice").value;
			errorCampo = document.getElementById("errorMensaje");
			textoError = "Debe introducir algún mensaje";
			break;						

		default: break;
	}
	
	var correcto = false;    // Para validarlo
	
	//Dependiendo del campo le comprobamos de una forma u otra
	switch(campo) {
	
		case "nombre":
		case "asunto":
		case "mensaje": 
			if ( !esCadenaVacia(texto) && !soloEspacios(texto) ) {correcto = true;}
			break;

		case "email": 
			if ( emailValido(texto) ) {correcto = true;}
			break;					

		default: break;
	}	
	
	//Si el campo es correcto lo comunicamos
	if (correcto) {
		//Ponemos la clase de correcto
		errorCampo.setAttribute("class","correcto");
		errorCampo.setAttribute("className","correcto");
		errorCampo.innerHTML = "Correcto";			
		return true;	
	}
	//Si no ponemos el error en el campo de error
	else {
		//Ponemos la clase de incorrecto
		errorCampo.setAttribute("class","incorrecto");
		errorCampo.setAttribute("className","incorrecto");
		errorCampo.innerHTML = textoError;		
		return false;	
	}
	
}

/**
 * Función que comprueba si los valores introducidos en el formulario de contacto
 * son correctos
 *
 * @param formulario formulario de contacto
 * @return boolean indicando si el formulario es correcto
 */
function validarDatosContacto() {
	
	//Para saber si algún campo ha fallado
	var todosCorrectos = true;
	//Nombre
	if (!campoContactoCorrecto('nombre')) {todosCorrectos = false}
	//Email
	if (!campoContactoCorrecto('email')) {todosCorrectos = false}
	//Asunto
	if (!campoContactoCorrecto('asunto')) {todosCorrectos = false}		
	//Mensaje
	if (!campoContactoCorrecto('mensaje')) {todosCorrectos = false}
	//Si todos son correctos el formulario es correcto
	return todosCorrectos;
	
}
