// 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)
// solo_letras - que sólo 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 opción.
// selecciona_radio - obliga a seleccionar una opción en un RADIO.
// 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
// CHECKONE - mira si al menos hay un checkbox chequeado
//chequearfechaactual(a,b,m) chequea que la fecha sea futura (al menos al día siguiente del corriente).
//hay que pasarle la fecha mínimaa partir de la que se cuenta un día pa que de el toque.
                        
var online=true;
function checKurgente(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 > (86400000*15)){
        m.checked=false;
        errores+="\n-Una oportunidad se considera URGENTE si desde la fecha de publicación hasta la fecha de comienzo de la actividad \nexisten menos de 15 días. Al no cumplirse esta condición, no se permite marcar el indicativo de urgente"
      }   
  }


function checkone(a,b,c,d){
  
  //a esta func se le manda: el formulario(t), posic del primer 
//checkbox de la coleccion(se cuenta desde 0), el número de checbox que se generan y el nombre del campo

      lleno =false;
		  
		  for(i=b;i<=b+c;++i){
		   if(a.elements[i].checked)
		     lleno=true;
		  }
		  
		    
		  if(!lleno){
		    errores+="\n - Debes seleccionar al menos una " + d
		    }

}

function es_hora(t){
 var eshora=/^(\d{2}\:\d{2})$/
 hora=t.value
    if(!eshora.test(t.value)) { 
    	errores+="\n-Debes introducir bien la hora (hh:mm)"      
   	}
    else {
				h=hora.split(':')
				if ( (h[0]>23) || (h[1]>59) ) {
       		errores+="\n-Debes introducir 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
      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)
        alert("error");
        errores+="\n-Debes introducir bien las fechas en el campo "+ m +" (rango fechas)-"
         
  }
  
  function chequearfechaactual(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
      //alert(timeA);
     // alert(timeB);
     // alert(dif);
      if (dif<1)
        errores+="\n- "+ m +" -"
         
  }



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 necesario."
	}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 - Debes 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 - Debes seleccionar una opción 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 + "' sólo debe contener números."
}

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 uses 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 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);

c1=c1.toUpperCase();


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, corrije 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";
	}