// 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.


function igual(t,s){
  if (t.value!=s.value)
  {
     errores+="\n - No coincideixen els valors escrits per a la contrasenya" 
  }
}
function igual1(t,s){
  if (t.value!=s.value)
  {
     errores+="\n - No coincideixen els valors escrits per al email" 
  }
}
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 - Has d'elegir almenys un " + 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 nombre  caràcters a '" + 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-Has d'introduir bé les dates en el camp "+ m +" (rang dates)-"
         
  }
  
  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 nombre màxim de caràcters per al camp '" + u + "' és " + v + ". Sobren " + (numcaract - v) + ".";
}

function cuenta_caracteres2(s,u,v) {
  numcaract = s.value.length;
  if(numcaract < v)
    errores += "\n - El nombre mínim de caràcters per al camp  '" + u + "' és " + v + ". Falten " + (v - numcaract) + ".";
}

function esta_vacio(s,u) {
	if (s.value == ""){
		errores += "\n - El camp '" + u + "' és obligatori."
	}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 camp '" + u + "' ha de ser numeric."
}

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 camp '" + u + "' no deu contenir espais."
}

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 || s.options[s.selectedIndex].value == "")
		errores += "\n - Has d'elegir una opció per al camp '" + u + "'."
}


function chequea_seleccionado(s,u,n,m) {
	
	var hasSelections = 0;
	for(var i = 0; i < s.options.length; i++){
 	  if(s.options[i].selected && s.options[i].value!=""){
        hasSelections++;
      }
    }
	
    if(hasSelections < n){
      errores += "\n - Debes seleccionar " + n + "opciones como mínimo para el campo '" + u + "'."
    }
    
    if(hasSelections > m){
      errores += "\n - Debes seleccionar " + m + "opciones como máximo 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 - Has d'elegir una opció per al camp '" + 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 camp '" + u + "' només deu contenir nombres."
}

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 camp '" + 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 usis el caracter ( " + v + " ) en el camp '" + 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 - Introdueix una adreça correcta en el camp '" + u + "'."	
	
}


function CifONifValido(s,u) {
   if(!NifValido(s,u) && !CifValido(s,u))
     errores += "\n - El format del '" + u + "' no és correcte."
}

//************************************
// 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";
	}