////////////////////////////////////////////////////////////////
////                                                        ////
////                     esVacio()                          ////
////                                                        ////
////////////////////////////////////////////////////////////////
function esVacio( cadena) { 

   var vuelve;

   vuelve = true;
   if( cadena.length > 0) {
      // linea 97:
	  for( var i= 0; i < cadena.length; i++) {
         if( cadena.charAt( i) != " ") {
            vuelve = false;
			break;
         };
      };
   } 
   return vuelve;
};

////////////////////////////////////////////////////////////////
////                                                        ////
////                     esNumero()                         ////
////                                                        ////
////////////////////////////////////////////////////////////////
function esNumero( cadena) { 
	if (isNaN(parseFloat(cadena))) {
		return false;
	} else {
		return true;
	}
}

////////////////////////////////////////////////////////////////
////                                                        ////
////                     esBlanco()                         ////
////                                                        ////
////////////////////////////////////////////////////////////////

function esBlanco (s) {
	var i;
	if (esVacio(s)) return true;
	for(i=0; i< s.length; i++) {
		var c=s.charAt(i);
		if (c!=' ' && c!='\t' && c!='\r' && c!='\n') 
         return false;
	}
	return true;
}
// esAlfabetico devuelve true si la cadena es alfabética y no vacía
function esAlfabetico (s) {
	var i;
	if (esVacio(s)) return false;
	else {
		for(i=0;i< s.length; i++) {
			var c=s.charAt(i);
			if (((c>='a') && (c<='z')) || ((c>='A') && (c<='Z')))
				continue;
			else return false;
		}
		return true;
		}
}
function esEmail (s){
   if (esBlanco(s)) 
       return false;
   var arroba = s.indexOf("@");
   if (arroba < 1) 
        return false;
   var otrarroba= s.substring(arroba+1).indexOf("@");
   if (otrarroba > 0)
		return false;
   if ((s.charAt(arroba+1)==".") || (s.charAt(arroba+1)==" ") ) 
   		return false;
   ultpunto=s.lastIndexOf(".");
   if ((ultpunto<(s.length-1)) && (ultpunto>2) && (esAlfabetico(s.substring(ultpunto+1))) )
		return true;
}

// esEntero devuelve true si la cadena es un número entero y no vacía
function esEntero (s) {
	var i;
	if (esVacio(s)) return false;
	else {
		for(i=0;i<s.length; i++) {
			var c=s.charAt(i);
			if ((c>='0') && (c<='9'))
				continue;
			else return false;
		}
		return true;
		}
}
////////////////////////////////////////////////////////////////
////                                                        ////
////           CaracterControl_NIF (nif)                    ////
////                                                        ////
////////////////////////////////////////////////////////////////
function CaracterControl_NIF (nif) {

var digito, resto,numero;
numero="";
	for(i=0;i<nif.length-1; i++) {
			digito=nif.charAt(i);
			
			if (esEntero (digito)){ 
				numero=numero.concat(digito);
				continue;				
			}
			else{
				return '-';
			}
		}
	
	resto = numero % 23;
		
	resto= resto +1;
	
	if (resto == 1){
		return 'T' ; }
	if (resto == 2){
		return 'R' ;}
	if (resto == 3){
		return 'W'; }	
	if (resto == 4){
		return 'A' ;}
	if (resto == 5){
		return 'G' ; }
	if (resto == 6){
		return 'M' ; }
	if (resto == 7){
		return 'Y' ;}
	if (resto == 8){
		return 'F' ; }
	if (resto == 9){
		return 'P' ; }
	if (resto == 10){
		return 'D' ;}
	if (resto == 11){
		return 'X' ;}
	if (resto == 12){
		return 'B';}
	if (resto == 13){
		return 'N'; }
	if (resto == 14){
		return 'J';}
	if (resto == 15){
		return 'Z';}
	if (resto == 16){
		return 'S';}
	if (resto == 17){
		return 'Q';}
	if (resto == 18){
		return 'V';}
	if (resto == 19){
		return 'H';}
	if (resto == 20){
		return 'L';}
	if (resto == 21){
		return 'C';}
	if (resto == 22){
		return 'K';}
	if (resto == 23){
		return 'E';}
	
	return '-';
	
}

function esNif(n){
	var primero, longitud, i, digito, ultimo, nif;
	primero= n.charAt(0);
	longitud = n.length;
	nif=n;
	if ((longitud != 9) && (esEntero(primero))){
		//El nif pasado en la variable "n" tiene menos de 9 dígitos
		//por tanto, se rellenan a "ceros" los huecos libres por la izquierda.
		if (longitud == 8){
			nif="0"+n;
		}
		if (longitud == 7){
			nif="0"+"0"+n;
		}
		if (longitud == 6){
			nif="0"+"0"+"0"+n;	
		}
		if (longitud == 5){
			nif="0"+"0"+"0"+"0"+n;
		}		
	}
	//si es un nif con 9 dígitos comprobamos que los ocho números sean "enteros"
	//luego comprobamos que el caracter de la posición "9" sea el correspondiente 
	//caracter de control, según fórmula del NIF.
	longitud = nif.length;
	for(i=0;i<longitud-1; i++) {
			var digito=nif.charAt(i);
			if (esEntero (digito)) 
				continue;
			else{
				
				return false;
			}
	}
	
	
	ultimo = nif.charAt(8);
	ultimo=ultimo.toUpperCase();//SE PASA LA LETRA A MAYUSCULAS SIEMPRE 
	
	if ((longitud==9) & (ultimo == CaracterControl_NIF (nif))){
		
		return true;
	}
	else
		return false;
		
		
}
////////////////////////////////////////////////////////////////
////                                                        ////
////           CaracterControl_CIF (cif, esNacional)        ////
////                                                        ////
////////////////////////////////////////////////////////////////

function CaracterControl_CIF (cif, esNacional) {

var digito,digito1, digito2, pi1, pi3, pi5, pi7, si1, si3, si5, si7, r ,r1, r2, modulo, complemento,resta;

	for(i=1;i<cif.length-1; i++) {
			digito=cif.charAt(i);
		if (esEntero (digito)){ 
				continue;				
		}
		else{
				return '-';
		}
	}
	
	var r1=0;
	for(i=1;i<cif.length-1; i++) {
			digito=cif.charAt(i);
					
			// calculamos en los pi los productos de los dígitos impares
			if (i==1){
					pi1= digito *2;
			}
			if (i==2){
					r1 += parseInt(digito);			
			}
			if (i==3){
					pi3 = digito *2;					
			}
			if (i==4){
					r1 += parseInt(digito);				  
			}
			if (i==5){
					pi5 = digito *2;
			}
			if (i==6){
					r1+= parseInt(digito);
			}
			if (i==7){
					pi7 = digito * 2;
					
			}
			
			continue;				
			}
			
			
		// en los "si" calculamos las suma en caso de que los productos impares sean >10
		
		if (pi1 >= 10 ) {
			digito1=pi1.toString().charAt(0);
			digito2=pi1.toString().charAt(1);
			si1=parseInt(digito1)+ parseInt(digito2);
			
		}
		else{
			si1=parseInt(pi1);
		}
		
		if (pi3 >= 10 ) {
			digito1=pi3.toString().charAt(0);
			digito2=pi3.toString().charAt(1);
			si3=parseInt(digito1)+ parseInt(digito2);
		}
		else{
			si3=parseInt(pi3);
		}
		if (pi5 >= 10 ) {
			digito1=pi5.toString().charAt(0);
			digito2=pi5.toString().charAt(1);
			si5=parseInt(digito1)+ parseInt(digito2);
		}
		else{
			si5=parseInt(pi5);
		}
		
		if (pi7 >= 10 ) {
			digito1=pi7.toString().charAt(0);
			digito2=pi7.toString().charAt(1);
			si7=parseInt(digito1)+ parseInt(digito2);
		}
		else{
			si7=parseInt(pi7);
		}
		r2 =si1+si3+si5+si7;
		
		r = r1+r2;
		modulo = r % 10;
		resta = 10 - modulo;
		complemento = resta % 10;
		
		if (esNacional){
			return complemento;
		}
		if (complemento == 1) {
			return 'A';
		}
		if (complemento == 2) {
			return 'B';
		}
		if (complemento == 3) {
			return 'C';
		}
		if (complemento == 4) {
			return 'D';
		}
		if (complemento == 5) {
			return 'E';
		}
		if (complemento == 6) {
			return 'F';
		}
		if (complemento == 7) {
			return 'G';
		}
		if (complemento == 8) {
			return 'H';
		}
		if (complemento == 9) {
			return 'I';
		}
		if (complemento == 0) {
			return 'J';
		}
			
}
function esCif(c){
var longitud, primero, ultimo_digito, ultimo_digito_Up;
	longitud = c.length;
	if (longitud != 9) {
		return false;
		}
	else {
		
		ultimo_digito = c.charAt(8);
		if (!(esEntero(ultimo_digito))){
			ultimo_digito_Up = ultimo_digito.toUpperCase();
			
		}
		primero = c.charAt(0);
		primero=primero.toUpperCase();//SE PASA LA LETRA PRIMERA A MAYUSCULAS
		 
	}
	// se trata de un cif NACIONAL:
	if (ultimo_digito == CaracterControl_CIF (c,true)){
		
		if ( (primero=="A") || (primero == "B")|| (primero == "C")|| (primero == "D")||
			 (primero == "E")|| (primero == "F")|| (primero == "G")|| (primero == "H")){
			return true;
		}
	}	
	//se trata de un cif extranjero
	if ( (primero=="A") || (primero == "B")|| (primero == "C")|| (primero == "D")||(primero == "E")|| (primero == "F")|| (primero == "G")|| (primero == "H")){
		if((ultimo_digito_Up=="A") || (ultimo_digito_Up== "B")|| (ultimo_digito_Up == "C")|| (ultimo_digito_Up == "D")||(ultimo_digito_Up == "E")|| (ultimo_digito_Up == "F")|| (ultimo_digito_Up == "G")|| (ultimo_digito_Up == "H")|| (ultimo_digito_Up == "I")|| (ultimo_digito_Up == "J")){
			if (ultimo_digito_Up == CaracterControl_CIF (c,false)){	
				return true;									 
			}
		}
	}									 
											 
	//se trata de Organismos autónomos
	if (primero=="S"){
		if((ultimo_digito_Up=="A") || (ultimo_digito_Up== "B")|| (ultimo_digito_Up == "C")|| (ultimo_digito_Up == "D")||(ultimo_digito_Up == "E")|| (ultimo_digito_Up == "F")|| (ultimo_digito_Up == "G")||
			(ultimo_digito_Up == "H")|| (ultimo_digito_Up == "I")|| (ultimo_digito_Up == "J")){
			if (ultimo_digito_Up == CaracterControl_CIF (c,false)){
				return true;
			}
		}	
	}
			
	if ((primero == "P") || (primero == "Q")){ 
		if ((ultimo_digito_Up=="A") || (ultimo_digito_Up== "B")|| (ultimo_digito_Up == "C")|| (ultimo_digito_Up == "D")||(ultimo_digito_Up == "E")|| (ultimo_digito_Up == "F")|| (ultimo_digito_Up == "G")||
			(ultimo_digito_Up == "H")|| (ultimo_digito_Up == "I")|| (ultimo_digito_Up == "J")){
			if (ultimo_digito_Up == CaracterControl_CIF (c,false)){
				return true;
			}
		}
	}	
	return false;										
}

function caracteres(campo,flag){        
	var numcarac=-1;
	var longitud = campo.value.length;  //guarda la longitud de la cadena
	var i=0;  // indice del array de la cadena 
		for (i=0; (i <longitud && longitud>0);i++){
			valido=true;
			if(campo.value.charAt(i)!=" " && flag==1){ //este este switch pregunto por los valores en ascci que es más sencillo
				switch(campo.value.charCodeAt(i)){
					case 193: 
					case 196:					 
					case 225: 
					case 228:					 
					case 201: 
					case 203: 
					case 233: 
					case 235:					 
					case 205: 
					case 207: 
					case 237: 
					case 239:                        
					case 211:         
					case 214:					 
					case 243: 
					case 246:																				   
					case 218: 
					case 220:																									            
					case 250: 
					case 252: valido=false; break;
					default :{  
						var flag1=(campo.value.charCodeAt(i)>47 && campo.value.charCodeAt(i)<58);  //separo la evaluación de las expresiones
						var flag2=(campo.value.charCodeAt(i)>96 && campo.value.charCodeAt(i)<123); //para que sea más sencillo de mantener
						var flag3=(campo.value.charCodeAt(i)>64 && campo.value.charCodeAt(i)<91);										            
						if (flag1==true)valido=true;
						else if(flag2==true) valido=true;
						else if(flag3==true) valido=true;																									        
						else valido=false;
					}break;
				}  //cierre switch
			} //cierre if
			else 
				if(campo.value.charAt(i)==" ") valido=false;                        
				if(valido==false) break;					  
		}
if (valido==false) return false
else return true
}


////////////////////////////////////////////////////////////////
////                                                        ////
////                     esFecha                            ////
////                                                        ////
////////////////////////////////////////////////////////////////
function esFecha(thisfecha) {
//	var fecha = thisfecha.value
	var diaentrada;
	var mesentrada;
	var annoentrada;
	var index;
	var longitud;
	var contenido = thisfecha;
	var error = false;
	monthdays = new Array(12); 
	monthdays[0]=31; 	monthdays[1]=28; 
	monthdays[2]=31; 	monthdays[3]=30; 
	monthdays[4]=31; 	monthdays[5]=30; 
	monthdays[6]=31; 	monthdays[7]=31; 
	monthdays[8]=30; 	monthdays[9]=31; 
	monthdays[10]=30;	monthdays[11]=31;

	index = contenido.indexOf("/", 0);
	longitud = contenido.length;
	if (index != -1) {
		diaentrada = contenido.substring(0, index);
		contenido = contenido.substring((index + 1), longitud);
		longitud = contenido.length;
		index = contenido.indexOf("/", 0);
		if (index != -1) {
			mesentrada = contenido.substring(0, index);
			annoentrada = contenido.substring((index + 1), longitud);
			if (!esNumero(diaentrada) || !esNumero(mesentrada) || !esNumero(annoentrada)) {
				alert("El día, mes y año deben ser números. El formato es dia/mes/año.")
				error = true;
			}
			if ((!error) && (diaentrada == 0 || mesentrada == 0 || annoentrada == 0)) {
				alert("El día, mes y año deben ser mayores que 0.");
				error = true;
			}
			if ((!error) && (mesentrada <= 0 || mesentrada > 12)) {
				alert("El mes debe estar entre 1 y 12");
				error = true;
			}
			if (!error) {           
				if (mesentrada == 2) {
					if (((annoentrada % 4 == 0)  && !(annoentrada % 100 == 0)) ||(annoentrada % 400 == 0)) {
						if (diaentrada <= 0 || diaentrada >29) {
  		   				alert("El día debe estar entre 1 y 29."); 
							error = true;
						} 
					}else {
						if (diaentrada <= 0 || diaentrada > 28) {
							alert("El día debe estar entre 1 y 28.");
							error = true;
						}
					}
				} else { 
					if (diaentrada <= 0 || diaentrada > monthdays[mesentrada - 1]) {
						alert("El dia debe estar entre 1 y " + monthdays[mesentrada - 1] + ".");
						error = true;
					}
				}
			}
			if ((!error) && (annoentrada.length <4 || annoentrada.length > 4)) {
				alert("El formato del año no es adecuado (p.e. 1999).");
				error = true;
			}
		} else {
			alert("El formato de fecha no es adecuado (p.e. 19/7/1999).");
			error = true;
		}
	} else {
		alert("El formato de fecha no es adecuado (p.e. 19/7/1999).");
		error = true;
	}   
	if (error==false) {	
		thisfecha.value = parseInt(diaentrada)+"/"+parseInt(mesentrada)+"/"+parseInt(annoentrada); 
	}
return (!error);
}

////////////////////////////////////////////////////////////////
////                                                        ////
////                     esHora                            ////
////                                                        ////
////////////////////////////////////////////////////////////////
function esHora(hora) {
	error = false;
	index =hora.indexOf(':');
	if (index > 0) {
		h=parseFloat(hora.substring(0,index));
		m=parseFloat(hora.substring((index+1),hora.length));
		if (isNaN(h) || isNaN(m)) {
			alert("La hora y los minutos deben ser números. El formato es hora:minutos.")
			error=true;
		} else {
			if ((h>99) || (m>99)) {
				alert("La hora y los minutos deben ser números. El formato es hora:minutos.")
				error=true;
			} else {
				if (m>59) {
					alert('Los minutos deben estar entre 0 y 59.');
					error=true;
				} else {
					if (h>24) {
						alert('La hora debe estar entre 0 y 24.');
						error=true;
					} else {
						if ((m>'0') & (h>23)) {
							alert('La hora debe estar entre 00:00 y 24:00.');
							error = true;
						} 
					}
				}
			}
		}
	} else {
		alert('El formato de fecha no es adecuado. (p.e.: 23:45)');
		error = true;
	}
	return(!error);	
}

function validausuario(usuario)
{
	resultado=true
	prefijo=usuario.substring(0,1)
	if (esEntero(prefijo))
	{
		resultado=false
	}
	return resultado

}

////////////////////////////////////////////////////////////////
////                                                        ////
////           letras, números, espacio o guión             ////
////                                                        ////
////////////////////////////////////////////////////////////////

function abcnumespgui(campo,flag){        
	var numcarac=-1;
	var longitud = campo.value.length;  //guarda la longitud de la cadena
	var i=0;  // indice del array de la cadena 
		for (i=0; (i <longitud && longitud>0);i++){
			valido=true;
			if(campo.value.charAt(i)!=" " && campo.value.charAt(i)!="-" && flag==1){ //este este switch pregunto por los valores en ascci que es más sencillo
				var flag1=(campo.value.charCodeAt(i)>47 && campo.value.charCodeAt(i)<58);  //separo la evaluación de las expresiones
				var flag2=(campo.value.charCodeAt(i)>96 && campo.value.charCodeAt(i)<123); //para que sea más sencillo de mantener
				var flag3=(campo.value.charCodeAt(i)>64 && campo.value.charCodeAt(i)<91);										            
				if ((flag1==true) || (flag2==true) || (flag3==true)) {	valido=true;	}
				else 
				{								
					var flag4=(campo.value.charCodeAt(i)>191 && campo.value.charCodeAt(i)<253);  
					if (flag4!=true) { valido = false; }
					else
					{
						switch(campo.value.charCodeAt(i))
						{
							case 195: 
							case 197: 
							case 213: 
							case 215: 
							case 216: 
							case 221: 
							case 222: 
							case 223: 
							case 227: 
							case 229: 
							case 240: 
							case 245: 
							case 247: 
							case 248: 
							default : valido=true;
							break;
						}	//cierre switch
					} //cierre if (flag4==true)
				} //cierre else
			} //cierre if
			else 
				if(campo.value.charAt(i)==" ") valido=true;                        
				if(valido==false) break;					  
		}
if (valido==false) return false
else return true
}

