/*
 * Project : leomartin.org
 * File    : leomartinorg.js
 * Version : 2.0
 * 
 * Leonardo Martin Abad
 * 
 * Library of JavaScript functions for the project
 *
 * - Version 2.0 - 23/02/2010: 
 *     - Se añade un parametro idioma a las funciones para mostrar los errores
 *       de valicación en el idioma correcto 
 * 
 * - Versión 1.0 - 14/02/2007:
 *     - Version inicial.
 */

// ----------------------------------------------------------------------------
//        VALIDATION FUNCTIONS
// ----------------------------------------------------------------------------
 
/**
 * Funcion que verifica que 'cadena' no es vacia o null
 *
 * @param cadena string que queremos comprobar
 * @return boolean indicando si esta vacia o no
 */
function esCadenaVacia(cadena) {return cadena=="";}

/**
 * Funcion que verifica que 'cadena' no es un String que solo 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;
}

/**
 * Funcion que verifica si un email es valido
 *
 * @param cadena string que queremos comprobar
 * @return boolean indicando si es valido 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;

// Variable para guardar elementos de la pagina
var almacenSection = null;
// Variable para guardar elementos de la pagina
var almacenAlbum = null;

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

	var 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;
	
}

// Briefcase Webdesign project -----------------------

/**
 * Funcion que carga los datos de un proyecto de diseño web mediante AJAX, 
 * asigna a la funcion loadingWebdesignProject() la respuesta 
 *
 * @param project entero con la id del projecto a obtener
 */
function getWebdesignProject(project) 
{
	
	// Intentamos cargar el objeto XmlHttpRequest
	ajax = getXMLHttpRequest();
	if (ajax) 
	{
		// Mandamos la peticion
		ajax.onreadystatechange = loadingWebdesignProject;
		ajax.open("GET",
				"briefcase.php?f=ajax&section=webdesign&pro="+project,true);
		ajax.send(null);
	}
	
	return false;
}

/**
 * Funcion que se asigna al objeto XmlHttpRequest para recibir los cambios
 * de estado en getWebdesignProject(project)
 */
function loadingWebdesignProject() 
{

	// Div donde poner proyecto de diseño web
	var folio = document.getElementById("project");
	
	// Si se ha terminado la carga de los datos
	if (ajax.readyState == 4) {
		folio.innerHTML = ajax.responseText;
	}
	// Si no mostramos que estamos cargando
	else {
		folio.innerHTML = "<h4>Cargando......</h4>";		
	}	

}

// Briefcase Webdesign projects ----------------------

/**
 * Funcion que carga los datos de los proyectos de diseño web mediante AJAX, 
 * asigna a la funcion loadingWebdesignProjects() la respuesta 
 *
 * @param page entero con la pagina que queremos
 */
function getWebdesignProjects(page) 
{
	
	// Intentamos cargar el objeto XmlHttpRequest
	ajax = getXMLHttpRequest();
	if (ajax) 
	{
		// Mandamos la peticion
		ajax.onreadystatechange = loadingWebdesignProjects;
		ajax.open("GET",
				"briefcase.php?f=ajax&section=webdesign&p="+page,true);
		ajax.send(null);
	}
	
	return false;
}

/**
 * Funcion que se asigna al objeto XmlHttpRequest para recibir los cambios
 * de estado en getWebdesignProjects(page)
 */
function loadingWebdesignProjects() 
{

	// Div donde poner proyecto de diseño web
	var folio = document.getElementById("briefcaseMenu");
	
	// Si se ha terminado la carga de los datos
	if (ajax.readyState == 4) {
		folio.innerHTML = ajax.responseText;
	}
	// Si no mostramos que estamos cargando
	else {
		//folio.innerHTML = "";		
	}	

}

//Briefcase Photography Section ----------------------

/**
 * Funcion que carga los datos de los albumes de fotos web mediante AJAX, 
 * asigna a la funcion loadingPhotographyAlbums() la respuesta 
 *
 * @param page entero con la pagina que queremos
 */
function getPhotographyAlbums(page) 
{
	
	// Intentamos cargar el objeto XmlHttpRequest
	ajax = getXMLHttpRequest();
	if (ajax) 
	{
		// Mandamos la peticion
		ajax.onreadystatechange = loadingPhotographyAlbums;
		ajax.open("GET",
				"briefcase.php?f=ajax&section=photography&p="+page,true);
		ajax.send(null);
	}
	
	return false;
}

/**
 * Funcion que se asigna al objeto XmlHttpRequest para recibir los cambios
 * de estado en getPhotographyAlbums(page)
 */
function loadingPhotographyAlbums() 
{

	// Div donde poner proyecto de diseño web
	var folio = document.getElementById("briefcasePhotographyContainer");
	
	// Si se ha terminado la carga de los datos
	if (ajax.readyState == 4) {
		folio.innerHTML = ajax.responseText;
	}
	// Si no mostramos que estamos cargando
	else {
		//folio.innerHTML = "";		
	}	

}

//Briefcase Photography Album ------------------------

/**
 * Funcion que carga los datos de un album de fotos web mediante AJAX, 
 * asigna a la funcion loadingPhotographyAlbum() la respuesta 
 *
 * @param album con el album que debemos abrir
 * @param page con la pagina que queremos abrir
 * @param pagePrevious entero con la pagina para volver
 * @param save para determinar si guardamos la seccion que dejamos
 */
function getPhotographyAlbum(album,page,pagePrevious,save) 
{
	
	// Intentamos cargar el objeto XmlHttpRequest
	ajax = getXMLHttpRequest();
	if (ajax) 
	{
		// Mandamos la peticion
		if (save) {ajax.onreadystatechange = loadingPhotographyAlbumSave;}
		else {ajax.onreadystatechange = loadingPhotographyAlbum;}
		ajax.open("GET",
				"briefcase.php?f=ajax&section=photography&album="+album+"&p="+page+
				"&pp="+pagePrevious,true);
		ajax.send(null);
	}
	
	return false;
}

/**
 * Funcion que se asigna al objeto XmlHttpRequest para recibir los cambios
 * de estado en getPhotographyAlbum(album,page,pagePrevious)
 */
function loadingPhotographyAlbum() 
{

	// Div donde poner proyecto de diseño web
	var folio = document.getElementById("briefcasePhotographyContainer");
	
	// Si se ha terminado la carga de los datos
	if (ajax.readyState == 4) {
		
		// Guardamos la antigua pagina para mostrarla en caso de volver atras
		// Si viene la orden de guardar
		folio.innerHTML = ajax.responseText;
	}
	// Si no mostramos que estamos cargando
	else {
		//folio.innerHTML = "";		
	}	

}

/**
 * Funcion que se asigna al objeto XmlHttpRequest para recibir los cambios
 * de estado en getPhotographyAlbum(album,page,pagePrevious,save)
 */
function loadingPhotographyAlbumSave() 
{

	// Div donde poner proyecto de diseño web
	var folio = document.getElementById("briefcasePhotographyContainer");
	
	// Si se ha terminado la carga de los datos
	if (ajax.readyState == 4) {
		
		// Guardamos la antigua pagina para mostrarla en caso de volver atras
		// Si viene la orden de guardar
		almacenSection = folio.innerHTML;
		folio.innerHTML = ajax.responseText;
	}
	// Si no mostramos que estamos cargando
	else {
		//folio.innerHTML = "";		
	}	

}

//Briefcase Photography Photo ------------------------

/**
 * Funcion que carga los datos de una fotos mediante AJAX, 
 * asigna a la funcion loadingPhotographyPhoto() la respuesta 
 *
 * @param album con el album que debemos abrir
 * @param photo con la id de la foto
 * @param pageAlbum del album que abandonamos
 * @param pagePrevious con la pagina de la seccion que abandonamos
 * @param save determina si tenemos que guardar o no la seccion que abandonamos
 */
function getPhotographyPhoto(album,photo,pageAlbum,pagePrevious,save) 
{
	// Intentamos cargar el objeto XmlHttpRequest
	ajax = getXMLHttpRequest();
	if (ajax) 
	{
		// Mandamos la peticion
		if (save) {ajax.onreadystatechange = loadingPhotographyPhotoSave;}
		else {ajax.onreadystatechange = loadingPhotographyPhoto;}
		ajax.open("GET",
				"briefcase.php?f=ajax&section=photography&album="+album+
				"&photo="+photo+"&pa="+pageAlbum+"&pp="+pagePrevious,true);
		ajax.send(null);
	}
	
	return false;
}

/**
 * Funcion que se asigna al objeto XmlHttpRequest para recibir los cambios
 * de estado en getPhotographyPhoto(album,photo,pageAlbum,pagePrevious,save)
 */
function loadingPhotographyPhoto() 
{

	// Div donde poner proyecto de diseño web
	var folio = document.getElementById("briefcasePhotographyContainer");
	
	// Si se ha terminado la carga de los datos
	if (ajax.readyState == 4) {
		
		// Guardamos la antigua pagina para mostrarla en caso de volver atras
		// Si viene la orden de guardar
		folio.innerHTML = ajax.responseText;
	}
	// Si no mostramos que estamos cargando
	else {
		//folio.innerHTML = "";		
	}	

}

/**
 * Funcion que se asigna al objeto XmlHttpRequest para recibir los cambios
 * de estado en getPhotographyPhoto(album,photo,pageAlbum,pagePrevious,save)
 */
function loadingPhotographyPhotoSave() 
{

	// Div donde poner proyecto de diseño web
	var folio = document.getElementById("briefcasePhotographyContainer");
	
	// Si se ha terminado la carga de los datos
	if (ajax.readyState == 4) {
		
		// Guardamos la antigua pagina para mostrarla en caso de volver atras
		// Si viene la orden de guardar
		almacenAlbum = folio.innerHTML;
		folio.innerHTML = ajax.responseText;
	}
	// Si no mostramos que estamos cargando
	else {
		//folio.innerHTML = "";		
	}	

}

//Briefcase Photography Back -------------------------

/**
 * Funcion que devulve al contenido guardado a pantalla cuando volvemos en el briefcase
 */
function loadingBack(donde) 
{
	
	// Div donde poner proyecto de diseño web
	var folio = document.getElementById("briefcasePhotographyContainer");
	// Dependiendo de lo que queremos traer de vuelta, usamos una variable
	if (donde == 'albums')
	{
		// Miramos si contiene algo
		if (almacenSection != null) {folio.innerHTML = almacenSection; return false;}
		else {return true;}
	}
	else if (donde == 'album')
	{
		// Miramos si contiene algo
		if (almacenAlbum != null) {folio.innerHTML = almacenAlbum; return false;}
		else {return true;}
	}
	else
	{}
	
	return true;
}

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

/**
 * Funcion que comprueba el campo especificado del formulario de Contacto
 * escribiendo el resultado de la validacion en la pagina
 *
 * @return boolean indicando si es correcto o no
 */
function campoContactoCorrecto(campo,idioma) 
{

	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");
			if (idioma=="ES")
				textoError = "Debe introducir un nombre";
			else
				textoError = "You should write your name";				
			break;

		case "email": 
			texto = document.getElementById("dondeMandarleRespuestas").value;
			errorCampo = document.getElementById("errorEmail");
			if (idioma=="ES")
				textoError = "Debe introducir un email válido";
			else
				textoError = "You should write a correct email";						
			break;
			
		case "asunto": 
			texto = document.getElementById("estoEsElTema").value;
			errorCampo = document.getElementById("errorAsunto");
			if (idioma=="ES")
				textoError = "Debe introducir un asunto";
			else
				textoError = "You should write a subject";		
			break;	
			
		case "mensaje": 
			texto = document.getElementById("estoEsLoQueDice").value;
			errorCampo = document.getElementById("errorMensaje");
			if (idioma=="ES")
				textoError = "Debe introducir algún mensaje";
			else
				textoError = "You should write some text";				
			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");
		if (idioma=="ES")		
			errorCampo.innerHTML = "Correcto";	
		else
			errorCampo.innerHTML = "Correct";	
		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;	
	}
	
}

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