// FUNCIONES DE VALIDACIÓN:
// ***********************
// esta_vacio - que el campo no esté vacío
// esnumerico - que el campo sea numérico (ej.: 4.56)
// solo_numeros - que sólo contenga númros (ej.: 34753768346587345)
// decimal_coma - que sólo contenga númros (ej.: 34753768346587345) o ','
// solo_letras - que sólo contenga letras (ej.: yuwekwehHUERYI)
// alfanumerico - que sea alfanumerico
// EMail - que el formato del campo sea de E-Mail
// espacios - no permite escribir espacios en el campo
// seleccionado - obliga a seleccionar algo en un SELECT que no sea la primera opción.
// selecciona_radio - obliga a seleccionar una opción en un RADIO.
// getRadioValue - devuelve el valor de un RADIO seleccionado
// caracter_raro - checkea si hay algún caracter dado en el campo text.
// cuenta_caracteres - limita el número de caracteres de un TEXTAREA o TEXT. (maximo)
// cuenta_caracteres2 - limita el número 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 esté 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
// caracterValido checkea si hay algún caracter no válido
// selecionaChekBox 

function selecionaChekBox(ChkBox,u){

	selecc = false;
	miString = ChkBox.value;
	//miString="1,2"
	//arrChkBox = miString.split(",")
	if (ChkBox.length==undefined){
		if(ChkBox.checked)
		selecc = true;
	}else{
		for(r=0;r<ChkBox.length;r++) {
			if(ChkBox[r].checked)
			selecc = true;
		}
	}
	
	
	if(!selecc)
    errores += "\n - Debe seleccionar '" + u + "'.";
} 

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 número  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 número máximo 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 número mínimo 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 numérico."
			ok=false
		}
	}
}*/

function esnumerico(s,u) {
	if (isNaN(s.value))
		errores += "\n - El campo '" + u + "' ha de ser numérico."
}

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 opción 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 opción para el campo '" + u + "'.";
		return false;
	}
	else{
		return true;
	}
		
}

function getRadioValue(s) {
	var valor="";
	for (var i=0;i<s.length;i++) {
		if (s[i].checked) {
     		valor = s[i].value;   
		}   
	}
	return valor;
}


function solo_numeros(s,u) {
	longitud = s.value.length;
	numerico = true;
	for (i=0;i<longitud;i++) {
		if(isNaN(s.value.charAt(i)) || s.value.charAt(i)==" ")
			numerico = false;
	}
	if(!numerico)
		errores += "\n - El campo '" + u + "' sólo debe contener números."
}

function decimal_coma(s,u) {
	longitud = s.value.length;
	numerico = true;
	for (i=0;i<longitud;i++) {
		if(s.value.charAt(i)!=","){
			if(isNaN(s.value.charAt(i)) || s.value.charAt(i)==" " )
				numerico = false;
		}
	}
	if(!numerico)
		errores += "\n - El campo '" + u + "' sólo debe contener números o el caracter ','."
}

function solo_letras(s,u) {
	letras = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZáéíóúÁÉÍÓÚÜü";
	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 + "' sólo 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 alfanumérico."
}

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) {
	var x = s.value;
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/;
	if (!filter.test(x)&& s.value != "")
		errores += "\n - Introduce una dirección correcta en el campo '" + u + "'."	
}


function CifONifValido(s,u) {
   if(!NifValido(s,u) && !CifValido(s,u))
     errores += "\n - El formato del '" + u + "' no es correcto."
}


//************************************
// CONTROL DE LA TARJETA DE RESIDENCIA
//************************************
function TResValida(s,u) {

	var x = s.value;
	var filter  = /^([a-zA-Z])/;
	if (filter.test(x)&& s.value != "")//si  es tarjeta de residencia se elimina la primera letra
	{	
	
	
		 if(s.value.substring(0,1).toLowerCase()=="y")
		 {
		    s.value = "1"+x.substring(1,x.length);
		 }else
		{
		    s.value = x.substring(1,x.length);}

		
	}
	
	if(!NifValido(s,u) && !CifValido(s,u)){
		
		errores += "\n - El formato del '" + u + "' no es correcto."
	}
	s.value = x;
  
}

//************************************
// CONTROL DEL NIF
//************************************
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 número de posición debe ser mayor que 0";
	}
	
function muestra(s,m,n) {
  //s = nombre del campo de tipo "file". Ejemplo: this
  //m = nombre de la imagen que se muestra. Ejemplo: document.imagen1
  //n = ejemplo: this.form
  //ejemplo: onChange=muestra(this,document.imagen1b,this.form)  
  valorCadena = s.value;
  extension = valorCadena.substring(valorCadena.indexOf("."),valorCadena.indexOf(".") + 5);
  if(extension == ".jpg" || extension == ".jpeg" || extension == ".gif" || extension == ".JPG" || extension == ".JPEG" || extension == ".GIF") {
    m.src = s.value;      
  }
}

function caracterValido(s,u) {
	patron = /[\w\d\s\.áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙñÑ\+<>\/\[\]{}'!"\$%&/()=?¿|@#~€¬¡`\+*üÜ¨Ç,;:\-]/;
	if(!patron.test(s.value) && s.value!="")
		errores += "\n - El campo '" + u + "' no debe contener caracteres extraños."
}
function claveMailValida(s,u) {
	patron = /[\w\d\s\.\+<>\/\[\]{}!"\$&/()=?¿@#~€¡*\-]/;
	if(!patron.test(s.value) && s.value!="")
		errores += "\n - El campo '" + u + "' no debe contener caracteres extraños."
}
