// Valformularios version 1.9 * Dic 2009
/*if (window==window.top) {
top.location.href="index.htm";
}*/
/*var nomouse="© Argored.es";
function verclick(mm) {
if ( (document.all) && (event.button ==2) ) { alert(nomouse);return false; }
if ( (document.layers) && (mm.which == 3) ) { alert(nomouse);return false; }
}
if (document.layers) { document.captureEvents(Event.MOUSEDOWN); }
document.onmousedown=verclick;*/

//partes de los mensajes de error en la validacion de caracteres
msgalfanumerico = " debe estar formado sólo por letras y/o números";
msgalfabetico = " debe estar formado sólo por letras";
msgalfanumericop = " debe contener sólo letras,guion,punto y/o números";
msgalfanumericog = " debe estar formado sólo por letras,guion bajo y/o números";
msgalfanumericob = " debe estar formado por letras,espacios y números";
msgalfabetico = " debe estar formado sólo por letras";
msgnumerico = " debe estar formado por números";
msgentero = " debe estar formado sólo por números enteros";
msgemail = " debe ser una dirección de email válida";
msgnombre = " debe ser un nombre válido";
msgtelefono = " debe ser un número de teléfono válido";
msgcifnif = " debe ser un NIF/CIF válido";
msgfecha = " debe ser una fecha DD.MM.AAAA";

//constantes de letras validas
letrasmayusculas="ABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚÀÈÌÒÙÜÏÇ";
letrasminusculas="abcdefghijklmnñopqrstuvwxyzáéíóúàèìòùüïç";
//constante de caracteres invalidos para un email
letrasnoemail=" ,;/:<>*|&$!#()[]{}'" ;
letrastlf="0123456789/-. ";

//constante de espacios
espacios=" \t\n\r";

//funcion que comprueba si es un valor telefonico valido
function estelef(c) {
return (letrastlf.indexOf(c)!=-1);
}

//funcion que comprueba si una cadena tiene espacios vacios
function esespacio(c)
{
   return ( espacios.indexOf( c ) != -1);
}

//funcion que comprueba si el parametro "s" que le pasamos esta vacio

function esvacio(s)
{   return ((s == null) || (s.length == 0))
}

//Funcion que comprueba que el parametro "s" tiene algún valor

function eslleno(s)
{   return ((s != null) && (s.length != 0))
}

//funcion que comprueba si el caracter q pasamos en "c" es una letra
function esletra(c)
{

    return( ( letrasmayusculas.indexOf( c ) != -1 ) ||
           ( letrasminusculas.indexOf( c ) != -1 ) )
}

//funcion que verifica que el dato es una fecha
function esfecha(c) {
if (c.length<10){
return false;
}
var dd=c.substring(0,2);
var mm=c.substring(3,5);
// (inicio,final+1) contando desde cero
var aa=c.substring(6,10);
if (dd <"01" || dd >"31") return false;
if (mm <"01" || mm >"12") return false;
if (aa <"2002") return false;
if ( (mm =="11" || mm =="04" || mm =="06" || mm =="09" || mm =="02") && dd >"30") return false;
if ( mm =="02" && dd >"29" ) return false;
return true;
}

//funcion que comprueba si el caracter q le pasamos en "c" es un digito
function esnumero(c)
{
 return ((c >= "0") && (c <= "9"))
}

function espunto(c) {
return (c =='.')
}

function esbajo(c) {
return (c =='_')
}

function esguion(c) {
return (c =='-')
}
//funcion que comprueba si la cadena que pasamos como parametro "s"
//contiene numeros o letras

function esalfanumerico(s)
{
var i=0;

for (i=0;i<s.length;i++)
 {
  var c=s.charAt(i);
  // si no es letra o numero o contiene espacios no es campo valido
  if ( !(esletra(c) || esnumero(c)) || (esespacio(c)) ) return false;
 }
 return true;
}

function esalfanumericop(s)
{
var i=0;

for (i=0;i<s.length;i++)
 {
  var c=s.charAt(i);
  // si no es letra o numero o punto o contiene espacios no es campo valido
  if ( !(esletra(c) || esguion(c) || esnumero(c) || espunto(c)) || (esespacio(c)) ) return false;
 }
 return true;
}

function esalfanumericog(s)
{
var i=0;

for (i=0;i<s.length;i++)
 {
  var c=s.charAt(i);
  // si no es letra o numero o guion bajo o contiene espacios no es campo valido
  if ( !(esletra(c) || esnumero(c) || esbajo(c)) || (esespacio(c)) ) return false;
 }
 return true;
}

function esalfanumericogsb(s)
{
var i=0;

for (i=0;i<s.length;i++)
 {
  var c=s.charAt(i);
  // si no es letra o numero o algun guion no es campo valido
  if ( !(esletra(c) || esnumero(c) || espunto(c) || esbajo(c) || esguion(c)) ) return false;
 }
 return true;
}

function esalfanumericob(s)
{
var i=0;

for (i=0;i<s.length;i++)
 {
  var c=s.charAt(i);
  // si no es letra o numero no es campo valido
  if ( !(esletra(c) || esnumero(c) || esespacio(c)) ) return false;
 }
 return true;
}


//funcion que comprueba si la cadena q pasamos "s" contiene  solamente
//letras
function esalfabetico(s)
{
var i = 0;
for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);

        if (!esletra(c))
        return false;
    }
    return true;
}

//funcion q comprueba si la cadena q pasamos "s" es un numero real o no 
//(con y sin signo)
function esnumerico(s)
{
	var i=0;
	var c;
	var haypunto=0;
	//recorremos la cadena inversamente hasta el 2º caracter  de la
	//cadena con el fin de comprobar despues el primer digito en busca 
	//de signo
	for (i=s.length-1; i>0 ;i-- )
	{
		c= s.charAt(i);
		//solo valen numeros o puntos
		if (!(c == "." || (esnumero(c) ))) 
			{
			return false;}
		if (c==".") 
		{haypunto++;}
	}
	//comprobar q solo se introduce un punto decimal
	if (haypunto>1)
	{return false;}
	
	//comprobar el signo del primer caracter de la cadena
	c=s.charAt(0);
	

	if (!(c=="+" || c=="-" || esnumero(c) ) )

	{return false;}
	else
	{	//asegurar q con el signo tiene q seguirle un numero
		if (!esnumero(c) && !esnumero(s.charAt(1)))
			{return false;}
	else
		{return true;}
	}
}

//funcion q comprueba si un numero es real (sin decimales) con y sin signo
function esentero(s)
{
	var i=0;
	var c;
	for (i=s.length-1; i>0 ;i-- )
	{
		c= s.charAt(i);
		//solo valen numeros
		if (!(esnumero(c))) 
			{return false;}
	}
	c=s.charAt(0);
	if (!(c=="+" || c=="-" || esnumero(c) ) )
		{return false;}
	else
	{	//asegurar q despues del signo tiene q seguirle un numero
		if (!esnumero(c) && !esnumero(s.charAt(1)))
			{return false;}
		else
			{return true;}
	}
}

//funcion q valida cadenas con letras y espacios.
//valida para campos de tipo nombre u otros
function esnombre(s)
{
var i = 0;
for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);

        if (!(esletra(c) || esespacio(c)))
        return false;
    }
    return true;
	
}


//funcion q valida numeros de telefonos validos

function estelefono(s)
{
	var i=0;
	var c;
	
	//comprueba q sean 9 digitos como minimo
	if (s.length<9)
		{return false;}
	
	for (i=s.length-1; i>0 ;i-- )
	{
		c= s.charAt(i);
		//solo valen numeros y espacios
		if (!(esnumero(c) || estelef(c)) )
			{return false;}
	}
	c=s.charAt(0);
	if (!(c=="+" || esnumero(c) ) )
		{return false;}
	else
	{	//asegurar q despues del signo tiene q seguirle un numero
		
		if (!esnumero(c) && !esnumero(s.charAt(1)) )
			{return false;}
		else
			{return true;}
	}
}

//funcion q valida una direccion de email valida

function esemail(s)
{
	var i=0;
	var c;
	var arrob=0;
  for (i=0;i<s.length-1 ;i++ )
  {	c=s.charAt(i);
	//comprueba si hay caracteres no validos
	if (letrasnoemail.indexOf(c) != -1) return false;
	//contar el numero de arrobas
	if (c=="@") arrob++;
  }
  //si hay mas de una arroba salir de la funcion
  if (arrob>1) return false;

  //comprobar si hay @
  i=0;
  while (i<s.length && s.charAt(i) != "@") 
	{i++;}
	//si no hay @ sale de la funcion
	if (s.charAt(i)!="@") 
		{return false;}
	else
	{	//comprobar q no hay puntos juntos o junto a la @
		var j=0;		
		var prim;
		var seg;
		for (j=0;j<s.length ;j++ )
		{	prim= s.charAt(j);
			seg=s.charAt(j+1);
			if ((prim=="." || prim=="@") && (seg=="." || seg=="@"))
				{return false;}
		}
		var arr=i+1; //posicion de la @
		//se busca un punto
		while (i<s.length && s.charAt(i)!=".")
		{i++;}
		if (s.charAt(i) == ".")
		{
			var pto=i; //posicion del punto
			//comprobar q despues de la @ hay 2 letras
			if (eval(parseInt(pto)-parseInt(arr)) <2)
				{return false;}
			//si hay punto comprobamos q se ha escrito un 
			//dominio de 2 letras minimo
			if (!(esletra(s.charAt(s.length-1))) || !(esletra(s.charAt(s.length-2) ) ) )
				{return false;}
			else
				{return true;}
		}
		else
		{return false;}

	}

}

//Valida un CIF válido
function escif(texto){ 
	 
	var pares = 0; 
	var impares = 0; 
	var suma; 
	var ultima; 
	var unumero; 
	var uletra = new Array("J", "A", "B", "C", "D", "E", "F", "G", "H", "I"); 
	var xxx; 
	 
	texto = texto.toUpperCase(); 
	 
	var regular = new RegExp(/^[ABCDEFGHKLMNPQS]\d\d\d\d\d\d\d[0-9,A-J]$/g); 
	 if (!regular.exec(texto)) return false; 
		  
	 ultima = texto.substr(8,1); 

	 for (var cont = 1 ; cont < 7 ; cont ++){ 
		 xxx = (2 * parseInt(texto.substr(cont++,1))).toString() + "0"; 
		 impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1)); 
		 pares += parseInt(texto.substr(cont,1)); 
	 } 
	 xxx = (2 * parseInt(texto.substr(cont,1))).toString() + "0"; 
	 impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1)); 
	  
	 suma = (pares + impares).toString(); 
	 unumero = parseInt(suma.substr(suma.length - 1, 1)); 
	 unumero = (10 - unumero).toString(); 
	 if(unumero == 10) unumero = 0; 
	  
	 if ((ultima == unumero) || (ultima == uletra[unumero])) 
		 return true; 
	 else 
		 return false; 

} 

//Valida un NIF válido
function esnif(dni) {
	
	dni = dni.toUpperCase(); 
	
        let1 = dni.substr(0,1);
        if (let1=='X') {
	   var regular = new RegExp(/X\d\d\d\d\d\d\d\d[A-Z]$/g); 
	   numero = dni.substr(1,dni.length-2);
        } else {
	   var regular = new RegExp(/\d\d\d\d\d\d\d\d[A-Z]$/g); 
	   numero = dni.substr(0,dni.length-1);
        }
	if (!regular.exec(dni)) return false;
	 
	let = dni.substr(dni.length-1,1);
	numero = numero % 23;
	letra='TRWAGMYFPDXBNJZSQVHLCKET';
	letra=letra.substring(numero,numero+1);
	
	if (letra!=let) return false;
	else return true;
}

//Comprueba si el parametro es un CIF o NIF válido.
function escifnif(cifnif){
	if (escif(cifnif)) {return true;}
	else {
		if (esnif(cifnif)){return true;}
		else {return false;}
	}
}

// Usada para que funcione el valevacio solamente
function esalgo(c) {
return true;
}

//funcion que comprueba que un campo del formulario cumpla con la 
//condicion que marca el parametro "funcion", "valevacio" es un 
//booleano q indica si el campo es requerido, descrip es el nombre
//del campo para indicar en el mensaje de error.
 
function validatodo(campo, funcion, valevacio, descrip)
{
 var msgerror= "Error en campo " + descrip + ", " ;

// si el campo no es requerido y esta vacio, sale de la funcion.
if ((valevacio == true) && (esvacio(campo.value))) return true; 


// si el campo es requerido y esta vacio, muestra mensaje de error
 if ((valevacio == false) && (esvacio(campo.value)))
	{avisavacio(campo,descrip);
	 return false;
	}

//prepara  el posible mensaje de error dependiendo del tipo de
//validacion q sea segun la funcion.

if (funcion == esalfabetico) msgerror += msgalfabetico;
if (funcion == esemail) msgerror += msgemail;
if (funcion == esnombre) msgerror += msgnombre;
if (funcion == esalfanumerico) msgerror += msgalfanumerico;
if (funcion == esalfanumericob) msgerror += msgalfanumericob;
if (funcion == esalfanumericog) msgerror += msgalfanumericog;
if (funcion == esalfanumericop) msgerror += msgalfanumericop;
if (funcion == esnumerico) msgerror += msgnumerico;
if (funcion == esentero) msgerror += msgentero;
if (funcion == estelefono) msgerror += msgtelefono;
if (funcion == escifnif) msgerror += msgcifnif;
if (funcion == esfecha) msgerror += msgfecha;


//llama a las funciones para validar

if (funcion(campo.value) == true) 
  {return true;}
else
  {return avisofallo(campo,msgerror);}

}

//Muestra un mensaje de error si el campo no cumple la condicion de la
//funcion indicando el error q le pasamos por el parametro "msgerror"

function avisofallo(cmp,s)
{
 cmp.focus();
 cmp.select();
 alert(s);
 return false;
}

//Muestra un mensaje de error si un campo esta vacio indicando 
//en el parametro "s" el nombre del campo

function avisavacio(campo,s)
{
campo.focus();
var cad;
cad = "El campo " + s + " esta vacio" ;
alert(cad);
return false;
}
