// FUNCIONES DE VALIDACIÓN:
// ***********************
// esta_vacio - que el campo no este vacio
// esnumerico - que el campo sea numerico (ej.: 4.56)
// solo_numeros - que solo contenga numros (ej.: 34753768346587345)
// solo_letras - que solo contenga letras (ej.: yuwekwehHUERYI)
// alfanumerico - que sea alfanumerico
// email - que el formato del campo sea de email
// espacios - no permite escribir espacios en el campo
// seleccionado - obliga a seleccionar algo en un SELECT que no sea la primera opcion.
// selecciona_radio - obliga a seleccionar una opcion en un RADIO.
// caracter_raro - checkea si hay algun caracter dado en el campo text.
// cuenta_caracteres - limita el numero de caracteres de un TEXTAREA o TEXT. (maximo)
// cuenta_caracteres2 - limita el numero de caracteres de un TEXTAREA o TEXT. (minimo)
// CifValido - chequea el formato del CIF.
// NifValido - chequea NIF
// CifONifValido - chequea que sea un NIF o un CIF
// entre_cuantos - chequea que la longitud del campo este entre 2 valores (n,m)
// posicion_noCero
// cuantosONada - chequea que una campo tenga v caracteres o ninguno
// chequearfechas ( fecha_fin , fecha_ini ,mensaje) chequea las fechas
// CONTADOR Cuenta los caracteres de un campo

function igual(t,s){
  if (t.value!=s.value)
  {
     errores+="\n - No coinciden los valores escritos para el password" 
  }
}

function es_hora(t){
 var eshora=/^(\d{2}\:\d{2})$/
 hora=t.value
    if(!eshora.test(t.value)) { 
    	errores+="\n-Debe introduccir bien la hora (hh:mm)"      
   	}
    else {
				h=hora.split(':')
				if ( (h[0]>23) || (h[1]>59) ) {
       		errores+="\n-Debe introduccir una hora correcta"      
       	}
    }
  
  }

function contador(s,u) {
  numcaract = s.value.length;
    alert(" El numero  caracteres de '" + u + "' es " + numcaract +  ".");
}

  function chequearfechas(a,b,m) {
      dia_fin=a.value.substr(0,2)
      mes_fin=a.value.substr(3,2)
      anno_fin=a.value.substr(6,4)
      fecha=anno_fin+"/"+mes_fin+"/"+dia_fin
      //alert(fecha)
      timeA = new Date(fecha)
 
      dia_ini=b.value.substr(0,2)
      mes_ini=b.value.substr(3,2)  
      anno_ini=b.value.substr(6,4)
      fecha=anno_ini+"/"+mes_ini+"/"+dia_ini
      //alert(fecha)
      timeB = new Date(fecha)
      dif = timeA - timeB
      if (dif<0)
        errores+="\n-Debe introduccir bien las fechas en el campo "+ m +" (rango fechas)-"
         
  }



function cuantosONada(s,u,v) {
  if(s.value.length != v && s.value.length != 0)
    errores += "\n - El campo '" + u + "' no tiene una longitud correcta ('" + v + "' caracteres)."
}

function entre_cuantos(s,u,n,m) {
  //n: caract. min; m: caract. max.
  if(s.value.length<n || s.value.length>m)
    errores += "\n - El campo '" + u + "' no tiene una longitud correcta (entre '" + n + "' y '" + m + "' caracteres.)"
}

function cuenta_caracteres(s,u,v) {
  numcaract = s.value.length;
  if(numcaract > v)
    errores += "\n - El numero maximo de caracteres para el campo '" + u + "' es " + v + ". Sobran " + (numcaract - v) + ".";
}

function cuenta_caracteres2(s,u,v) {
  numcaract = s.value.length;
  if(numcaract < v)
    errores += "\n - El numero minimo de caracteres para el campo '" + u + "' es " + v + ". Faltan " + (v - numcaract) + ".";
}

function esta_vacio(s,u) {
	if (s.value == ""){
		errores += "\n - El campo '" + u + "' es obligatorio."
	}else{
	todoespacios(s,u)
	}
}

/*function esnumTlf(s,u) {
	tlf=s.value
	var=tlf.split(' ')
	ok=true
	for (i=0;i<tlf.length && !ok;i++){
		if (isNaN(var)) {
			errores += "\n - El campo '" + u + "' ha de ser numerico."
			ok=false
		}
	}
}*/

function esnumerico(s,u) {
	if (isNaN(s.value))
		errores += "\n - El campo '" + u + "' ha de ser numerico."
}

function espacios(s,u) {
	long2 = s.value.length;
	esp = false;
	for (i=0;i<long2;i++) {
		if(s.value.charAt(i) == " ")
			esp = true;
	}
	if(esp)
		errores += "\n - El campo '" + u + "' no debe contener espacios."
}

function todoespacios(s,u) {
	long2 = s.value.length;
	
	  if (long2 != 0){
	  esp = true;
  	for (i=0;i<long2;i++) {
  		if(s.value.charAt(i) != " " || s.value.length == 0)
  			esp = false;
  	  }
  	}
  	if(esp)
  		errores += "\n - El campo '" + u + "' no debe contener todo espacios."
}

function seleccionado(s,u) {
	if (s.selectedIndex == 0)
		errores += "\n - Debe seleccionar una opcion para el campo '" + u + "'."
}

function selecciona_radio(s,u) {
	cuantos = s.length;
	radio_sel = false;
	for(k=0;k<cuantos;k++) {
		if (s[k].checked == true)
			radio_sel = true;
	}
	if(!radio_sel)
		errores += "\n - Debe seleccionar una opcion para el campo '" + u + "'.";
}

function solo_numeros(s,u) {
	longitud = s.value.length;
	numerico = true;
	for (i=0;i<longitud;i++) {
		if(isNaN(s.value.charAt(i)))
			numerico = false;
	}
	if(!numerico)
		errores += "\n - El campo '" + u + "' solo debe contener numeros."
}

function solo_letras(s,u) {
	letras = "abcdefghijklmnnopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZaeiou";
	longletras = letras.length;
	longitud = s.value.length;
	sololetras = true;
	for (i=0;i<longitud;i++) {
		esletra = false;
		for(j=0;j<longletras;j++) {
			if(s.value.charAt(i) == letras.charAt(j))
				esletra = true;
		}
		if(!esletra)
			sololetras = false;
	}
	if(!sololetras)
		errores += "\n - El campo '" + u + "' solo debe contener letras."
}

function alfanumerico(s,u) {
	caracteres = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	longletras = caracteres.length;
	longitud = s.value.length;
	solocarac = true;
	for (i=0;i<longitud;i++) {
		esletra = false;
		for(j=0;j<longletras;j++) {
			if(s.value.charAt(i) == caracteres.charAt(j))
				esletra = true;
		}
		if(!esletra)
			solocarac = false;
	}
	if(!solocarac)
		errores += "\n - El campo '" + u + "' debe ser alfanumerico."
}

function caracter_raro(s,u,v) {
  hayraro = false;
  for(h=0;h<s.value.length;h++) {
    if(s.value.charAt(h) == v)
       hayraro = true;
  }
  if(hayraro)
    errores += "\n - No use el caracter ( " + v + " ) en el campo '" + u + "'";
}

var numAttachments = 0;
var whitespace = "\t\n\r ";
var defaultEmptyOK = false;
var invalidAddrChars = "\\\/\"<>(),;:$&!\`\'^*|[]{}";
var invalidDomainChars = "\\\/\"<>(),;:$&!\`\'^*@|{}";
var emptyAddr = true;
var ErrorAddrChars = "";
var ToVal = "";var CCVal = "";var BccVal = "";
var numAttachments = 0;

function isWhitespace(s)
{   var i,c;
 
    // Is s empty?
    if (isEmpty(s)) return true;
 
    // Search through string's characters one by one
    // until we find a non-whitespace character.
    // When we do, return false; if we don't, return true.
 
    for (i = 0; i < s.length; i++)
    {
       // Check that current character isn't whitespace.
       c = s.charAt(i);

       if (whitespace.indexOf(c) != -1 ) return true;
    }
    
    // All characters are whitespace.
    return false;
}
function isEmpty(s)
{
    if (s == null || s.length == 0) return true;
    return false;
}

function is_simple_address(addr)
{
        var good_address = true;
        var at_sign = 0;
        var space = 0;
        
        space = addr.indexOf(" ");
        at_sign = addr.indexOf("@");

        if (space>=0 || at_sign<=0 || at_sign==(addr.length-1) || !isEmail(addr)) {
                good_address = false;
        }
        
        return good_address;
}

function isEmail(s)
{
    if (isEmpty(s))
       if (isEmail.arguments.length == 1) return defaultEmptyOK;
       else return (isEmail.arguments[1] == true);
 
    // is s whitespace?
    if (isWhitespace(s)) return false;
 
    // there must be >= 1 character before @, so we
    // start looking at character position 1
    // (i.e. second character)
    var i = 1;
    var sLength = s.length;
 
    // look for @
    while ((i < sLength) && (s.charAt(i) != "@"))
    { i++
    }
    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;
 
    // look for .
    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }
 
    // there must be at least one character after the .
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}

function email(s,u) {
	if (!is_simple_address(s.value) && s.value != "")
		errores += "\n - Introduzca una direccion correcta en el campo '" + u + "'."	
}


function CifONifValido(s,u) {
   if(!CifValido(s,u) )
     errores += "\n - El formato del '" + u + "' no es correcto."
     //&& !NifValido(s,u)
}

//************************************
// CONTROL DEL NIF
//************************************
function valnif(cad) {
var NIF=/^(\[?)([0-9A-Z]{8,9})(\]?)$/; 
if (NIF.test(cad)) alert('NIF: '+cad);
else {
alert('Invalido NIF');
return false;
}
}       
    
function NifValido(s,u){
  
  var correcto = false;
  var lon = ((s.value.length) - 1);
  
  var x = s.value.substring(0,lon);
  
  var y = (x % 23);
  var z = s.value.substring(lon,(lon + 1));
  //alert("cadena:" + s.value+"lon:" + lon+"y modulo:" + y+"x numeros:" + x+"z letra:" + z);

  if (y==0 && (z=="t" || z=="T")){
  	correcto = true;
  }
  if (y==1 && (z=="r" || z=="R")){
  	correcto = true;
  }
  if (y==2 && (z=="w" || z=="W")){
  	correcto = true;
  }
  if (y==3 && (z=="a" || z=="A")){
  	correcto = true;
  }
  if (y==4 && (z=="g" || z=="G")){
  	correcto = true;
  }
  if (y==5 && (z=="m" || z=="M")){
  	correcto = true;
  }
  if (y==6 && (z=="y" || z=="Y")){
  	correcto = true;
  }
  if (y==7 && (z=="f" || z=="F")){
  	correcto = true;
  }
  if (y==8 && (z=="p" || z=="P")){
  	correcto = true;
  }
  if (y==9 && (z=="d" || z=="D")){
  	correcto = true;
  }
  if (y==10 && (z=="x" || z=="X")){
  	correcto = true;
  }
  if (y==11 && (z=="b" || z=="B")){
  	correcto = true;
  }
  if (y==12 && (z=="n" || z=="N")){
  	correcto = true;
  }
  if (y==13 && (z=="j" || z=="J")){
  	correcto = true;
  }
  if (y==14 && (z=="z" || z=="Z")){
  	correcto = true;
  }
  if (y==15 && (z=="s" || z=="S")){
  	correcto = true;
  }
  if (y==16 && (z=="q" || z=="Q")){
  	correcto = true;
  }
  if (y==17 && (z=="v" || z=="V")){
  	correcto = true;
  }
  if (y==18 && (z=="h" || z=="H")){
  	correcto = true;
  }
  if (y==19 && (z=="l" || z=="L")){
  	correcto = true;
  }
  if (y==20 && (z=="c" || z=="C")){
  	correcto = true;
  }
  if (y==21 && (z=="k" || z=="K")){
  	correcto = true;
  }
  if (y==22 && (z=="e" || z=="E")){
  	correcto = true;
  }
  if (y==23 && (z=="t" || z=="T")){
  	correcto = true;
  }
  if(!correcto) {
		errores += "\n - El formato del '" + u + "' no es correcto.";
    return false;
  } else {
    return true;
  }
}


//************************************
// CONTROL DEL CIF
//************************************

function CifValido(s,u){

var c1,c4;
var error=true;
var mal=false;
//recogemos primer y ULTIMO caracter
c1=s.value.substring(0,1);
if (s.value.length != 9)
 mal=true;
else
 c4=s.value.substring(8,9);

if (s.value.length < 10)
 // comprobar que es un numero
 if (!esEntero(s.value.substring(1,s.value.length-1)))
   mal=true;

 else
  {
  if ((c1 >= "A" && c1 <= "H") && (c4 >= 0 && c4 <= 9)) //espanolas
   {
   
   error=control1(s);
   }
  else
   if ((c1 >= "S") && (c4 >= "A" && c4 <= "J"))
    error=control2(s);
  else
   if ((c1 >= "P" && c1 <= "Q") && (c4 >= "A" && c4 <= "J"))
    error=control2(s);
  else
   if ((c1 >= "A" && c1 <= "H") && (c4 >= "A" && c4 <= "J"))
    error=control2(s);
  else
   if ((c1 >= "N") && (c4 >= "A" && c4 <= "J"))
    error=control2(s);
  else
   mal=true;
  }
  if (error)
   mal=true;
  
  if (mal) {
    //errores += "\n - El campo '" + u + "' no es correcto.";
    return false;
  } else {
    return true;
  }
}

function control1(num_cif){

var numeros;
var R1;

numeros=num_cif.value.substring(1,8);
R1= (eval(numeros.substring(1,2))+eval(numeros.substring(3,4))+eval(numeros.substring(5,6)));


R21=(numeros.substring(0,1)*2);


if (R21 >= 10)
  R21= (1 + (R21 %10));

R22=(numeros.substring(2,3)*2);
if (R22 >= 10)
 R22=(1+ (R22 %10));

R23=(numeros.substring(4,5)*2);
if (R23 >= 10)
 R23=(1+(R23 %10));


R24=(numeros.substring(6,7)*2);
if (R24 >=10)
 R24 = (1 + (R24%10));


R2 = (R21 +R22+R23 +R24);


R = (R1 + R2);

Resto = (R %10);

if (Resto != 0 )
 Resto= 10 -Resto;
 

if (Resto == num_cif.value.substring(8,9))
 return false;
else
 return true;

}

function control2(num_cif){

var numeros;
var R1;

numeros=num_cif.value.substring(1,8);
R1= (eval(numeros.substring(1,2))+eval(numeros.substring(3,4))+eval(numeros.substring(5,6)));


R21=(numeros.substring(0,1)*2);


if (R21 >= 10)
  R21= (1 + (R21 %10));

R22=(numeros.substring(2,3)*2);
if (R22 >= 10)
 R22=(1+ (R22 %10));

R23=(numeros.substring(4,5)*2);
if (R23 >= 10)
 R23=(1+(R23 %10));


R24=(numeros.substring(6,7)*2);
if (R24 >=10)
 R24 = (1 + (R24%10));


R2 = (R21 +R22+R23 +R24);


R = (R1 + R2);

Resto = (R %10);

if (Resto != 0 )
 Resto= 10 -Resto;

switch (Resto){

case 1:control="A"
       break;
case 2:control="B"
       break;
case 3:control="C"
       break;
case 4:control="D"
       break;
case 5:control="E"
       break;
case 6:control="F"
       break;
case 7:control="G"
       break;
case 8:control="H"
       break;
case 9:control="I"
       break;
case 0:control="J"
       break;
default: break;
}

if (control == num_cif.value.substring(8,9))
 return false;
else
 return true;

}

function esEntero(entero) 
{
	 var i;
	 for (i = 0; i < entero.length; i++) 
	 {
         	var c = entero.charAt(i);
         	if (!isDigit(c)) 
	 	{
	 		return false;
         	}
    	}
	return true;
}

function isDigit(c)  {
	return ( ( c >= "0" )  &&  ( c <= "9" ) );
}

function chequea() {
	if (errores != "")
		//alert("Por favor, corrija los siguientes fallos:" + errores);
		return false;
	else
		//alert("Todo OK");
		return true;
}
function posicion_noCero(t) {
	if (t.value <=0)
    errores += "\n - El numero de posicion debe ser mayor que 0";
	}