/*================================================================================
	MÓDULO: validar.js
	Define funciones para la comprobación de campos rellenos
	
	Historia de Actualizaciones:
	01/06/2007 - Actualización de ValidarCampoNum() para la conversión automática
				de la coma decimal por punto
	28/08/2006 - Actualizado
=================================================================================*/

/*--------------------------------------------------------------------------------
	FUNCION: ValidarCampo ()
	Comprueba que se haya introducido un valor en el campo indicado
	
	PARÁMETROS:
	campo (object) campo que se desea comprobar
	nombre (string) nombre identificador del campo que se desea comprobar

	VALOR DEVUELTO:
	Devuelve true si se ha validado correctamente el contenido del campo y
	false en caso contrario
--------------------------------------------------------------------------------*/

 function ValidarCampo (campo, nombre) {
	 
	texto = Trim(campo.value);

	if (texto == "") {
		alert ("Debe introducir un valor para el campo '" + nombre + "'.");//"Campo requerido"
        return false;
	}

	return true;
 }
 
/*--------------------------------------------------------------------------------
	FUNCION: ValidarCampoNum ()
	Comprueba que se haya introducido un valor numérico en el campo indicado
	
	PARÁMETROS:
	campo (object) campo que se desea comprobar
	nombre (string) nombre identificador del campo que se desea comprobar

	VALOR DEVUELTO:
	Devuelve true si se ha validado correctamente el contenido del campo y
	false en caso contrario
--------------------------------------------------------------------------------*/

 function ValidarCampoNum (campo, nombre) {
	 
 	texto = Trim(campo.value);

	//Si encuentra una coma la cambia por un punto como separador decimal
	pos = texto.indexOf (",");
	if (pos > -1) {
		texto = parseFloat(texto.substring(0, pos) + "." + texto.substring(pos+1, texto.length));
		campo.value = texto;
	}
	
    if (texto == "" || isNaN(texto)) {
		alert ("Debe introducir un valor numérico para el campo '" + nombre + "'.");
        return false;
	}

    return true;
 }


/*--------------------------------------------------------------------------------
	FUNCION: ValidarCampoClave ()
	Comprueba que se haya introducido un valor válido para usarse como clave o
	contraseña en el campo indicado
	
	PARÁMETROS:
	campo (object) campo que se desea comprobar
	nombre (string) nombre identificador del campo que se desea comprobar

	VALOR DEVUELTO:
	Devuelve true si se ha validado correctamente el contenido del campo y
	false en caso contrario
--------------------------------------------------------------------------------*/

 function ValidarCampoClave (campo, nombre, invalidos)
 {
	if (!invalidos) invalidos = " !·$%&/()=?¿¡',;.:<>^`[*+]¨´{}Ç@#|áéíóúäëïöüâêîôûýÿ" + '"';
 	texto = campo.value;
 
 	if (Trim(texto) == "") {
		alert ("Debe introducir un valor para el campo '" + nombre + "'."); //"Campo requerido"
        return false;
   }
   else if (!ValidarTexto (texto, invalidos)) {
  		alert ("El campo " + nombre + " no puede contener espacios en blanco ni otros caracteres especiales.");
		return false;
   	}
	
	return true;
 } 


/*--------------------------------------------------------------------------------
	FUNCION: ValidarCampoWeb ()
	Comprueba que se haya introducido un valor válido para usarse como dirección web
	en el campo indicado
	
	PARÁMETROS:
	campo (object) campo que se desea comprobar
	nombre (string) nombre identificador del campo que se desea comprobar
	requerido (boolean) indica si es obligatorio introducir un valor en el campo (true)
		o no (false). En este caso solo realiza la comprobación en el caso de introducir
		algún valor

	VALOR DEVUELTO:
	Devuelve true si se ha validado correctamente el contenido del campo y
	false en caso contrario
--------------------------------------------------------------------------------*/

 function ValidarCampoWeb (campo, nombre, requerido)
 {
 	texto = Trim(campo.value);
 
 	if (requerido && texto == "") {
		alert ("Debe introducir un valor para el campo '" + nombre + "'."); //"Campo requerido"
        return false;
    }
    else if (texto != "") {
		if (!ValidarTexto (texto, " !·$%()¿¡',;<>^`[*+]¨´{}Ç@#|" + '"')) {
	  		alert ("El campo '" + nombre + "' no puede contener espacios en blanco ni otros caracteres especiales.");
			return false;
		}
		
		pos = texto.lastIndexOf('.');
		if (pos < 1 || (texto.length - pos) < 3 || (texto.length - pos) > 4) {
			alert ("Debe introducir una dirección web válida para el campo '" + nombre + "'.");
			return false;
		}
		else
			return true;
	}

	return true;	
 }
 
 
/*--------------------------------------------------------------------------------
	FUNCION: ValidarCampoEmail ()
	Comprueba que se haya introducido un valor válido para usarse como dirección 
	de email en el campo indicado
	
	PARÁMETROS:
	campo (object) campo que se desea comprobar
	nombre (string) nombre identificador del campo que se desea comprobar
	requerido (boolean) indica si es obligatorio introducir un valor en el campo (true)
		o no (false). En este caso solo realiza la comprobación en el caso de introducir
		algún valor

	VALOR DEVUELTO:
	Devuelve true si se ha validado correctamente el contenido del campo y
	false en caso contrario
--------------------------------------------------------------------------------*/

 function ValidarCampoEmail (campo, nombre, requerido)
 {
 	texto = Trim(campo.value);
 
 	if (requerido && texto == "") {
		alert ("Debe introducir un valor para el campo '" + nombre + "'."); //"Campo requerido"
        return false;
    }
	
    else if (texto != "") {
		if (!ValidarTexto (texto, " !·$%&/()=?¿¡',;:<>^`[*+]¨´{}Ç#|" + '"')) {
	  		alert ("El campo '" + nombre + "' no puede contener espacios en blanco ni otros caracteres especiales.");
			return false;
		}
		
		pos_a = texto.lastIndexOf('@');
		if (pos_a < 1)
			valido = false;
		else {
			pos_p = texto.lastIndexOf('.');
			if ((pos_p - pos_a) < 2 || (texto.length - pos_p) < 3 || (texto.length - pos_p) > 4)
				valido = false;
			else
				valido = true;
		}
		
		if (!valido){		
			alert ("Debe introducir una dirección de correo válida para el campo '" + nombre + "'.");
			return false;
		}
		else
			return true;
	}
	
	return true;	
 }
 

/*--------------------------------------------------------------------------------
	FUNCION: ValidarTexto ()
	Comprueba si una cadena de texto contiene caracteres no permitidos.
	
	PARÁMETROS:
	cad (string) la cadena a comprobar
	chars (string) cadena con los caracteres no permitidos

	VALOR DEVUELTO:
	True si la cadena no incluye caracteres no permitidos y false en caso contrario.
--------------------------------------------------------------------------------*/

 function ValidarTexto (cad, chars) {
	 
	cad = cad.toLowerCase();
	for (i=0; i<cad.length; i++)
		if (chars.indexOf (cad.charAt(i)) > -1) return false; //se ha encontrado un carácter no permitido

	return true;
 }


/*--------------------------------------------------------------------------------
	FUNCION: Trim ()
	Elimina los espacios en blanco del principio y final de una cadena
	
	PARÁMETROS:
	cad (string) la cadena de entrada

	VALOR DEVUELTO:
	Una cadena sin espacios en blanco ni al principio ni al final
--------------------------------------------------------------------------------*/

 function Trim (cad) {
	 
 	pos1 = 0;
	while (cad.charAt(pos1) == " ") pos1++;
	
	pos2 = cad.length-1;
	while (pos2>pos1 && cad.charAt(pos2) == " ") pos2--;
	
	return cad.substring(pos1, pos2+1);
 }

