function checkOnlyNumbers(nNum){
	var sChars = "0123456789";
	var bRet = true;
	for (nC=0; nC<nNum.toString().length; nC++){
		if (sChars.indexOf(nNum.toString().substr(nC,1))==-1) {
			bRet = false;
			break;
		}
	}
	return bRet;
}

function _email_check(str) {
	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	if (str.indexOf(at)==-1){
	   return false
	}

	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
	   return false
	}

	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
	    return false
	}

	 if (str.indexOf(at,(lat+1))!=-1){
	    return false
	 }

	 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
	    return false
	 }

	 if (str.indexOf(dot,(lat+2))==-1){
	    return false
	 }
	
	 if (str.indexOf(" ")!=-1){
	    return false
	 }

	return true
}

var bugchars = '!#$^&*()+|}{[]?><~%:;/,=`"\'';
function CharsInBag(s)
{   var i;
var lchar="";
    // Search through string's characters one by one.
    // If character is not in bag.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
		if(i>0)lchar=s.charAt(i-1)
        if (bugchars.indexOf(c) != -1 || (lchar=="." && c==".")) return false;
    }
    return true;
}
function isInteger(s)
{   var i;
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is not a number.
        var c = s.charAt(i);
        if ((c >= "0") && (c <= "9") && (c != ".")) return false;
    }
    // All characters are numbers.
    return true;
}
function email_check(str) {
	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	var lastdot=str.lastIndexOf(dot)
	if (str.indexOf(at)==-1){
	   return false
	}
	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
	   return false
	}
	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr || str.substring(lastdot+1)==""){
	    return false
	}
	 
	 if (str.indexOf(at,(lat+1))!=-1){
	    return false
	 }

	 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
	    return false
	 }

	 if (str.indexOf(dot,(lat+2))==-1){
	    return false
	 }
	
	 if (str.indexOf(" ")!=-1){
	    return false
	 }
	if(CharsInBag(str)==false){
	    return false
	 }
	 var arrEmail=str.split("@")
	 var ldot=arrEmail[1].indexOf(".")
	 if(isInteger(arrEmail[1].substring(ldot+1))==false){
	    return false
	 }
	 return true					
}

function validate_nif( cif ) {
    // Based on php function of David Vidal Serra.
    // Returns: 1 = NIF ok, 2 = CIF ok, 3 = NIE ok, -1 = NIF bad, -2 = CIF bad, -3 = NIE bad, 0 = ??? bad
    // cif = inpt.value;
    num = new Array();
    cif = cif.toUpperCase();
    for (i = 0; i < 9; i ++) {
        num[i] = cif.substr(i, 1);
    }
    //si no tiene un formato valido devuelve error
    if (!cif.match('((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)')) {
        return 0;
    }
    //comprobacion de NIFs estandar
    if (cif.match('(^[0-9]{8}[A-Z]{1}$)')){
        if (num[8] == 'TRWAGMYFPDXBNJZSQVHLCKE'.substr(cif.substr(0, 8) % 23, 1)){
            return 1;
        } else {
            return -1;
        }
    }
    //algoritmo para comprobacion de codigos tipo CIF
    suma = num[2] + num[4] + num[6];
    for (i = 1; i < 8; i += 2) {
        suma += toString((2 * num[i])).substr(0,1) + toString((2 * num[i])).substr(1,1);
    }
    n = 10 - suma.substr( suma.length - 1, 1);
    //comprobacion de NIFs especiales (se calculan como CIFs)
    if (cif.match('^[KLM]{1}')) {
        if (num[8] == String.fromCharCode(64 + n)){
            return 1;
        } else {
            return -1;
        }
    }
    
    //comprobacion de CIFs
    if (cif.match('^[ABCDEFGHJNPQRSUVW]{1}')) {
        if (checkCIF(cif)) {
            return 2;
        } else {
            return -2;
        }
    }
    /*
    if (cif.match('^[ABCDEFGHJNPQRSUVW]{1}')) {
        if (num[8] == String.fromCharCode(64 + n) || num[8] == n.toString().substr(n.toString().length - 1, 1)) {
            return 2;
        } else {
            return -2;
        }
    }
    */
    
    //comprobacion de NIEs
    //T
    if (cif.match('^[T]{1}')) {
        if (num[8] == cif.match('^[T]{1}[A-Z0-9]{8}$')) {
            return 3;
        } else {
            return -3;
        }
    }
    //XYZ
    if (cif.match('^[XYZ]{1}')) {
        tmpstr = cif.replace('X', '0');
        tmpstr = tmpstr.replace('Y', '1');
        tmpstr = tmpstr.replace('Z', '2');
        if (num[8] == 'TRWAGMYFPDXBNJZSQVHLCKE'.substr( tmpstr.substr(0, 8) % 23, 1)) {
            return 3;
        } else {
            return -3;
        }
    }
    //si todavia no se ha verificado devuelve error
    return 0;

}

function checkNIF_NIE_CIF(obj){
  
	if (obj.value.length==0)
	{
		alert("Por favor, introduzca el siguiente campo: NIF");
		obj.focus();
		obj.select();
    	return false;
	}
	var sTitle = (obj.id=='txtNIF') ? "NIF / NIE / CIF" : "NIF / NIE / CIF del titular";
    var nCheck = validate_nif(obj.value.toUpperCase());
    switch (parseInt(nCheck)){
        case 0:
            showAlertFormField(obj.id,sTitle,'No se ha reconocido el formato del NIF / NIE / CIF.');
            break;
        case -1:
            showAlertFormField(obj.id,sTitle,'El NIF ha de estar compuesto por ocho números y una letra final.');
            break;
        case -2:
            showAlertFormField(obj.id,sTitle,'El CIF ha de estar compuesto por una letra inicial y ocho números.');
            break;
        case -3:
            showAlertFormField(obj.id,sTitle,'El NIE ha de estar compuesto por una letra inicial, siete números y una letra final.');
            break;
    }
    
    return (nCheck > 0);    
}

function old_checkNIF_NIE_CIF(obj){
  
	if (obj.value.length==0)
	{
		alert("Por favor, introduzca el siguiente campo: NIF");
		obj.focus();
		obj.select();
    	return false;
	}
	var sTitle = (obj.id=='txtNIF') ? "NIF / NIE / CIF" : "NIF / NIE / CIF del titular";
	var a = obj;
	var temp=a.value.toUpperCase();
	var cadenadni="TRWAGMYFPDXBNJZSQVHLCKET";
	var v1 = new Array(0,2,4,6,8,1,3,5,7,9);
	if (temp!==''){
		// No es un CIF ni un NIE, es un DNI
		if (!/^[ABCDEFGHKLMNPQSXYZ]/.test(temp)){
			posicion = a.value % 23; /*Resto de la division entre 23 es la posicion en la cadena*/
			letra = cadenadni.charAt(posicion);
			if (!/^[A-Za-z0-9]{9}$/.test(temp)){ 
				//Es menos de 9 dígitos, añadimos la letra
				try {
					showAlertFormField(obj.id,sTitle,'El NIF ha de estar compuesto por ocho números y una letra final.');
				} catch (e){
					alert('El NIF ha de estar compuesto por ocho números y una letra final.');
					//a.value=a.value+letra ;
					obj.focus();
					obj.select();	
				}
  				return false;
			}
			else{ 
				//Tiene los 9 dígitos, comprobamos si la letra esta bien
				posicion = a.value.substring(8,0) % 23; /*Resto de la division entre 23 es la posicion en la cadena*/
				letra = cadenadni.charAt(posicion);
				var letradni=temp.charAt(8);
				if (letra.toUpperCase() != letradni.toUpperCase()){
					//alert("La letra del NIF no es correcta. "+letradni+" es diferente a "+letra);
					try {
						showAlertFormField(obj.id,sTitle,'La letra del NIF no es correcta.');
					} catch (e){
						alert('La letra del NIF no es correcta.');	
						obj.focus();
						obj.select();
					}
   					return false;
				}
			}
			return true;
		}else{ 
			//Es un NIE o un CIF
			if (/^[XYZ]/.test(temp)){ //Es un NIE
				var temp1=temp.substr(1,8);
				posicion = temp1 % 23; /*Resto de la division entre 23 es la posicion en la cadena*/
				letra = cadenadni.substring(posicion,posicion+1);
				
                
                if (!/^[A-Za-z0-9]{9}$/.test(temp)){ //Es menos de 9 dígitos, añadimos la letra
					//alert('El NIE introducido tiene menos de 9 dígitos.');
					try {
						showAlertFormField(obj.id,sTitle,'El NIE introducido ha de estar compuesto por ocho números y una letra final.');
					} catch (e){
						alert('El NIE introducido ha de estar compuesto por ocho números y una letra final.');	
						//a.value=a.value+letra ;
						obj.focus();
						obj.select();
					}
			    	return false;
				}else{ //Tiene los 9 dígitos, comprobamos si la letra esta bien
					var temp1=temp.substr(1,7);
					posicion = temp1 % 23; /*Resto de la division entre 23 es la posicion en la cadena*/
					letra = cadenadni.charAt(posicion);
					var letranie=temp.charAt(8);
					if (letra.toUpperCase() != letranie.toUpperCase()){
						try {
							showAlertFormField(obj.id,sTitle,'La letra del NIE no es correcta.');
						} catch (e){
							alert('La letra del NIE no es correcta.');	
							//a.value=a.value+letra ;
							obj.focus();
							obj.select();
						}				
				    	return false;			
					}
				}
				return true;
			}else{ //Es un CIF
				var cifcontrol = 0;
				for( i = 2; i <= 6; i += 2 ){
					cifcontrol = cifcontrol + v1[ parseInt(temp.substr(i-1,1)) ];
					cifcontrol = cifcontrol + parseInt(temp.substr(i,1));
				};
				cifcontrol = cifcontrol + v1[ parseInt(temp.substr(7,1)) ];
				cifcontrol = (10 - ( cifcontrol % 10));

				if (!/^[A-Za-z0-9]{9}$/.test(temp)){ //Es menos de 9 dígitos, añadimos el dígito de control
					//alert('El CIF introducido tiene menos de 9 dígitos.');
					try {
						showAlertFormField(obj.id,sTitle,'El CIF introducido no es correcto.');
					} catch (e){
						alert('El CIF introducido no es correcto.');						
						//a.value=a.value+cifcontrol;
						obj.focus();
						obj.select();
					}
   					return false;					
				}else{
					if (cifcontrol.toUpperCase()!=temp.substr(8,1).toUpperCase()){
						try {
							showAlertFormField(obj.id,sTitle,'El dígito de control del CIF no es correcto.');
						} catch (e){
							alert('El dígito de control del CIF no es correcto.');							
							obj.focus();
							obj.select();
						}
						return false;			
					}
				}
				return true;
			}
		}
	}
}

function checkCIF(cf)
	{
	var i = temp = 0;
	var v1 = new Array(0,2,4,6,8,1,3,5,7,9);
	cf = cf.toUpperCase();
	if (checkNIF(cf)) return true;
	else if (!/^[A-Za-z0-9]{9}$/.test(cf)) return false
	else if (!/^[ABCDEFGHKLMNPQS]/.test(cf)) return false
	else
		{
		for(i=2; i<=6; i+=2)
			{
			temp += v1[parseInt(cf.substr(i-1, 1))];
			temp += parseInt(cf.substr(i, 1));
			}
		temp = temp + v1[parseInt(cf.substr(7,1))];
		temp = (10 - ( temp % 10));
		if(temp == 10 && (cf.charAt(cf.length-1) == 'J' || cf.charAt(cf.length-1) == 0)) return true;
		else if (cf.charAt(cf.length-1) == temp || cf.charAt(cf.length-1) == String.fromCharCode(64 + temp)) return true;
		else return false;
		}
	}

function checkNIF(nif) {
	if (!nif) return false;
	var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
	if (nif.length != 9) return false;
	else {
		letra = nif.substr(8, 1); letra = letra.toUpperCase();
		dni = nif.substr(0, 8);
		dni = dni.toUpperCase(); dni = dni.replace('X','0');
		dni -= parseInt(dni/23) * 23;
		//alert (letras.charAt(dni) + " - " + letra);
		if (letras.charAt(dni) != letra) return false; 
		else return true;
		}
	}

function checkNSS(nss) {
	if (!nss) return false;
	if (nss.length != 11 && nss.length != 12) return false;
	if (nss.substr(2, 1) == 0) nss = "" + nss.substr(0, 2) + nss.substr(3, nss.length-1);
	if (mod(nss.substr(0, nss.length-2), 97) == nss.substr(nss.length-2, 2)) return true;
	else return false;
	}
