var mensajeError

// ********************************
// function validar(campo,tipo,mensaje)
// ********************************
// Función general validar que llama a otras funciones para validar los campos.
// Para validar un campo de un formulario usar: 
// validar(document.forms["nombre del formulario"]."Nombre_Campo","tipo","Mensaje de error para el campo <Nombre_Campo>:\n")
// Esta función verifica si el "campo" cumple las condiciones de su "tipo" devolviendo false en caso contrario y true si todo es correcto.
//	Cuando devuelve false, primero saca por pantalla el mensaje que se pasa como parámetro y a continuación una explicación del tipo de error (ese mensaje es propio de cada una de las funciones de comprobación)
function validar(campo,tipo,mensaje){
	switch (tipo){
	   case "numerico":	NoError=valNum(campo.value);break;
	   case "texto" :	NoError=valTexto(campo.value);break;
	   case "vacio" :	NoError=valVacio(campo.value);break;
	   case "email" :	NoError=valEmail(campo.value);break;
	   case "fecha" :	NoError=valFecha(campo.value);break;
	   case "fecha1" :	NoError=check_date(campo);break;
	   case "javascript" : NoError=valJavaScript(campo.value);break;
	   //default : statement;
	   }
	if (NoError) return true
	else
	    { 
			alert( mensaje+mensajeError)
			// Establece que se posicione el foco en el campo nombre y lo selecciona
			campo.focus()
			//campo.select()
			return false
			} 
}// validar.
 


// ********************************
// function valTexto( texto )
// ********************************
// Esta función valida que el texto que le pasan ni es un campo vacío ni contiene números.
// Métodos usados : length = Devuelve la longitud del objeto string.
//                  substring( i, j ) = Devuelve parte del string, entre la posición i y j.
function valTexto( texto ){

// Se comprueba primero que no sea un campo vacío.
// Luego se recoge el texto carácter a carácter y se comprueba su valor.

//    if ( texto.length == 0 ){ mensajeError = "Error : Campo sin rellenar";return false }
    for ( var i=0; i < texto.length; i++ ){
      var unCaracter = texto.substring( i, i+1 )
      if ( unCaracter >= "0" && unCaracter <= "9" ){ mensajeError = "Campo numérico no permitido"
                                                     return false }
    }//for.
    return true
}// valTexto.


// ********************************
// function valNum( texto )
// ********************************
// Valida que el texto pasado a la función contiene sólo números y no es vacío.
// Se recorre el texto carácter a carácter y se comprueba que es un número.
// Métodos usados : length = Devuelve la longitud del objeto string.
//                  substring( i, j ) = Devuelve parte del string, entre la posición i y j.  
function valNum( texto ){
//    if ( texto.length == 0 ){ mensajeError = "Error : Campo sin rellenar";return false }
    for ( var i=0; i < texto.length; i++ ){
      var unCaracter = texto.substring( i, i+1 )
      if ( unCaracter < "0" || unCaracter > "9" ){ 
         mensajeError = "Debe ser un número" 
         return false }
    }//for.
    return true
}// valNum.



// ********************************
// function valVacio( texto ){
// ********************************
// Valida que el texto pasado a la función no es vacío.
function valVacio( texto ){

	tex_aux=texto.replace(/^\s+/, ""); 
    if ( tex_aux.length == 0 ){
		mensajeError = "Campo sin rellenar";
		return false
		}
    return true
}// valNum.



// ********************************
// function valEmail (emailStr) {
// ********************************
// Valida si la  dirección de correo electrónico es correcta, en función de varios aspectos
// comentados en la función. 
function valEmail (emailStr) {
 if ( emailStr.length != 0 ){
	/* Verificar si el email tiene el formato user@dominio. */
	var emailPat=/^(.+)@(.+)$/ 
	/* Verificar la existencia de caracteres. ( ) < > @ , ; : \ " . [ ] */
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]\\'" 
	/* Verifica los caracteres que son válidos en una dirección de email */
	var validChars="\[^\\s" + specialChars + "\]" 
	var quotedUser="(\"[^\"]*\")" 
	/* Verifica si la dirección de email está representada con una dirección IP Válida */ 

	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	/* Verificar caracteres inválidos */ 
	var atom=validChars + '+'
	var word="(" + atom + "|" + quotedUser + ")"
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
	/*domain, as opposed to ipDomainPat, shown above. */
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")


	var matchArray=emailStr.match(emailPat)
	if (matchArray==null) {
	 mensajeError="La direccion no está correctamente formada, por favor revísela "
	return false
	}
	var user=matchArray[1]
	var domain=matchArray[2]

	// Si el user "user" es valido 
	if (user.match(userPat)==null) {
	// Si no
	 mensajeError="El nombre de usuario del email no es válido."
	return false
	}

	/* Si la dirección IP es válida */
	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				mensajeError="dirección IP del correo no  válida"
				return false
			}
		}
		return true
	}

	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
		mensajeError="El dominio del email parece no ser válido."
		return false
	}

	var atomPat=new RegExp(atom,"g")
	var domArr=domain.match(atomPat)
	var len=domArr.length
	if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>4) { 
		mensajeError='El dominio del email parece no ser válido.'
		return false
	}

	if (len<2) {
		mensajeError="La dirección del email es erronea, falta el dominio "
		return false
	}

	// La dirección de email ingresada es Válida
	return true;
 }
return true
	}
// valEmail 


// ********************************
// ********************************
function valFecha( fecha ){

	if ( fecha.length == 0 ){ return true }
	arrayFecha=fecha.split("/")
	if (valNum(arrayFecha[0]) && valNum(arrayFecha[1])&& valNum(arrayFecha[2]) ){
		dia = eval( arrayFecha[0])
		if ( dia < 0 || dia > 31 ){ 
		  mensajeError = "Formato de fecha erronea"
		  return false
		  }
		mes = eval( arrayFecha[1])
		if ( mes < 0 || mes > 12 ){ 
		  mensajeError = "Formato de fecha erronea"
		  return false
		  }
		anio = eval( arrayFecha[0])
		if ( anio < 0 || anio > 99 ){ 
		  mensajeError = "Formato de fecha erronea"
		  return false
		  }
		return true
	 }
		return false
}// valFecha.


// ********************************
// ********************************
// Valida el rango del valor introducido.
// Transforma el string "string1" al valor numérico "num".
// Rango establecido: 0 <= num <= 1000.
function valRango( string1 ){
    num = eval( string1 )
    if ( num < 0 || num > 1000 ){ 
      mensajeError = "El rango debe ser 0 <= i <= 1000"
      return false }
    return true
}// valRango.



function check_date(field){
var checkstr = "0123456789";
var DateField = field;
var Datevalue = "";
var DateTemp = "";
var seperator = "/";
var day;
var month;
var year;
var leap = 0;
var err = 0;
var i;
   err = 0;
   DateValue = DateField.value;
//   DateValue = field;
   /* Delete all chars except 0..9 */
   for (i = 0; i < DateValue.length; i++) {
	  if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) {
	     DateTemp = DateTemp + DateValue.substr(i,1);
	  }
   }
   DateValue = DateTemp;
   /* Always change date to 8 digits - string*/
   /* if year is entered as 2-digit / always assume 20xx */
   if (DateValue.length == 6) {
      DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); }
   if (DateValue.length != 8) {
      err = 19;}
   /* year is wrong if year = 0000 */
   year = DateValue.substr(4,4);
   if (year == 0) {
      err = 20;
   }
//   year = DateValue.substr(6,2);
   /* Validation of month*/
   month = DateValue.substr(2,2);
   if ((month < 1) || (month > 12)) {
      err = 21;
   }
   /* Validation of day*/
   day = DateValue.substr(0,2);
   if (day < 1) {
     err = 22;
   }
   /* Validation leap-year / february / day */
   if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
      leap = 1;
   }
   if ((month == 2) && (leap == 1) && (day > 29)) {
      err = 23;
   }
   if ((month == 2) && (leap != 1) && (day > 28)) {
      err = 24;
   }
   /* Validation of other months */
   if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {
      err = 25;
   }
   if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {
      err = 26;
   }
   /* if 00 ist entered, no error, deleting the entry */
   if ((day == 0) && (month == 0) && (year == 00)) {
      err = 0; day = ""; month = ""; year = ""; seperator = "";
   }
   /* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
   if (err == 0) {
      DateField.value = day + seperator + month + seperator + year;
   }
   /* Error-message if err != 0 */
   else {
	    mensajeError = "El formato corresponde a dd/mm/aaaa"
//      alert("Fecha incorrecta. \nPor favor, escriba una fecha en formato dd/mm/aa");
//	  field.select();
//	  field.focus();
	  return false;
   }
	return true;
}

// ********************************
// function valJavaScript (javascriptStr) 
// ********************************
// Valida si el contenido no tiene etiquetas
// script o /script, para evitar contenido malicioso.
function valJavaScript (javaStr) 
{
 if ( javaStr.length != 0 )
	 {
	 javaStr.toLowerCase();
		
	 var matchArray = javaStr.match("script")
	 if (matchArray != null) {
		mensajeError="No esta permitida la inserción de código en un comentario ('script')"
		return false
		}
	var matchArray = javaStr.match("/script")
	 if (matchArray != null) {
		mensajeError="No esta permitida la inserción de código en un comentario ('/script')"
		return false
		}
	var matchArray = javaStr.match("textarea")
	 if (matchArray != null) {
		mensajeError="No esta permitida la inserción de código en un comentario ('textarea')"
		return false
		}
	var matchArray = javaStr.match("<text")
	 if (matchArray != null) {
		mensajeError="No esta permitida la inserción de código en un comentario ('<text')"
		return false
		}
	var matchArray = javaStr.match("</text>")
	 if (matchArray != null) {
		mensajeError="No esta permitida la inserción de código en un comentario ('</text>')"
		return false
		}
	var matchArray = javaStr.match("<table")
	 if (matchArray != null) {
		mensajeError="No esta permitida la inserción de código en un comentario ('<table')"
		return false
		}
	var matchArray = javaStr.match("table>")
	 if (matchArray != null) {
		mensajeError="No esta permitida la inserción de código en un comentario ('table>')"
		return false
		}
	var matchArray = javaStr.match("<!--")
	 if (matchArray != null) {
		mensajeError="No esta permitida la inserción de código en un comentario ('<!--')"
		return false
		}
	var matchArray = javaStr.match("-->")
	 if (matchArray != null) {
		mensajeError="No esta permitida la inserción de código en un comentario ('-->')"
		return false
		}
	var matchArray = javaStr.match("<%")
	 if (matchArray != null) {
		mensajeError="No esta permitida la inserción de código en un comentario ('<%')"
		return false
		}
	var matchArray = javaStr.match("%>")
	 if (matchArray != null) {
		mensajeError="No esta permitida la inserción de código en un comentario ('%>')"
		return false
		}
	var matchArray = javaStr.match("<font")
	 if (matchArray != null) {
		mensajeError="No esta permitida la inserción de código en un comentario ('<font')"
		return false
		}
	var matchArray = javaStr.match("<div")
	 if (matchArray != null) {
		mensajeError="No esta permitida la inserción de código en un comentario ('<div')"
		return false
		}
	var matchArray = javaStr.match("<span")
	 if (matchArray != null) {
		mensajeError="No esta permitida la inserción de código en un comentario ('<span')"
		return false
		}
	var matchArray = javaStr.match("<a")
	 if (matchArray != null) {
		mensajeError="No esta permitida la inserción de código en un comentario ('<a')"
		return false
		}
	var matchArray = javaStr.match("</a>")
	 if (matchArray != null) {
		mensajeError="No esta permitida la inserción de código en un comentario ('</a>')"
		return false
		}
	var matchArray = javaStr.match("href")
	 if (matchArray != null) {
		mensajeError="No esta permitida la inserción de código en un comentario ('href')"
		return false
		}

	return true
	}
  else
	{
		return false
	}
 }

//  End --> 