
var whitespace = " \t\n\r";


function validar(formu)
{
	if ((formu.txdocumento.value.length == 0) || (isWhitespace(formu.txdocumento.value)))
    {
    	alert('Debe introducir su NIF/CIF/Tarjeta/Pasaporte/Alias');
        formu.txdocumento.focus();
	}
    else
    {
	
		var valido=true;
       	var MSG="Documento '"+formu.txdocumento.value+"' incorrecto";
        var valoresNif= new Array("0","1","2","3","4","5","6","7","8","9","K","L","X");
        var valoresCif= new Array("A","B","C","D","E","F","G","H","N","P","Q","S");
        var controlNif = new Array("T","R","W","A","G","M","Y","F","P","D","X","B","N","J","Z","S","Q","V","H","L","C","K","E");
        var controlCifLetras = new Array("A","B","C","D","E","F","G","H","I","J");
        var i;

		if (formu.tdoc.options[formu.tdoc.options.selectedIndex].value =='NIF'  || 
		    formu.tdoc.options[formu.tdoc.options.selectedIndex].value =='CIF')
		{
        	if (formu.txdocumento.value.length < 9)
        	{
		        if ( isNaN(formu.txdocumento.value.charAt(formu.txdocumento.value.length -1)))
		        {
			    	while ( formu.txdocumento.value.length < 9 ) 
			    	{
						formu.txdocumento.value = '0' + formu.txdocumento.value;
					}
				}
				else
				{
			    	while ( formu.txdocumento.value.length < 8 ) 
			    	{
						formu.txdocumento.value = '0' + formu.txdocumento.value;
					}
					MSG="NIF incorrecto. Revise el caracter de control";
					valido=false;
				}
            }
            
            if (valido)
            {
				caracterControl=formu.txdocumento.value.substring(8,9).toUpperCase();

        		//TIPO DE NIF
				primerCaracter=formu.txdocumento.value.substring(0,1).toUpperCase();
				if ( formu.tdoc.options[formu.tdoc.options.selectedIndex].value == 'NIF')
				{
					var provincia="";
					if ((primerCaracter=="K") || (primerCaracter=="L"))
                	{
                    	provincia=formu.txdocumento.value.substring(1,3);
                        if (IntOk(provincia)==false)
                        {
							MSG="NIF incorrecto";
                            valido=false;
						}
						
						numero=formu.txdocumento.value.substring(3,8);
                	}
                	else if (primerCaracter=="X")
                	{
                    	numero=formu.txdocumento.value.substring(1,8);
                	}
                	else
                	{
       					numero=formu.txdocumento.value.substring(0,8);
       				}
       				
       				if (IntOk(numero)==false) 
       				{
                    	valido= false;
						MSG="NIF incorrecto";
					}

                	caracterControlCalculado=controlNif[((parseFloat(numero)%23))];
					//El algoritmo dice que al resto hay que
                    //sumarle 1, eso lo hacemos al indexar el
                    //array ya que los indices empiezan en 0
                    
                	if (caracterControl != caracterControlCalculado)
                	{
						valido=false;
						MSG="NIF incorrecto. Revise el caracter de control";
					}
				}
				else if (formu.tdoc.options[formu.tdoc.options.selectedIndex].value == 'CIF')
				{
               		if (primerCaracter=="N")
                	{
                       	pais=formu.txdocumento.value.substring(1,4);
                       	if (IntOk(pais)==false)
                       	{
							valido = false;
					    	MSG="CIF incorrecto";
                		}
                        	
                        numero=formu.txdocumento.value.substring(4,8);
                	}
                	else
                	{
                       	numero=formu.txdocumento.value.substring(1,8);
                	}
			
                	if (IntOk(numero)==false)
                	{
                    	//Parte numérica del Cif no válida
                        valido = false;
						MSG="CIF incorrecto";
					}

            		caracterControlCalculado = 10 - 
			        ((Math.floor(0.2*parseInt(formu.txdocumento.value.substring(1,2),10)) +
			        (2*parseInt(formu.txdocumento.value.substring(1,2),10) %10) + 
					Math.floor(0.2*parseInt(formu.txdocumento.value.substring(3,4),10) ) + 
					(2*parseInt(formu.txdocumento.value.substring(3,4),10) %10) + 
					Math.floor(0.2*parseInt(formu.txdocumento.value.substring(5,6),10) ) +
					(2*parseInt(formu.txdocumento.value.substring(5,6),10) %10) +
					Math.floor(0.2*parseInt(formu.txdocumento.value.substring(7,8),10) ) +
                    (2*parseInt(formu.txdocumento.value.substring(7,8),10) %10) +
                    parseInt(formu.txdocumento.value.substring(2,3),10) +
                    parseInt(formu.txdocumento.value.substring(4,5),10) +
                    parseInt(formu.txdocumento.value.substring(6,7),10))% 10);

            		if ((primerCaracter=="N") ||(primerCaracter=="P") ||
                       (primerCaracter=="Q") || (primerCaracter=="S") )
            		{
                    	caracterControlCalculado =controlCifLetras[caracterControlCalculado-1];
            		}

					if (caracterControlCalculado==10)
						caracterControlCalculado=0;
            		
            		if (caracterControl != caracterControlCalculado)
            		{
						MSG="CIF incorrecto. Revise el caracter de control";
              			valido= false;

                             for (i=0; i<10; i++)
                                if (caracterControl == controlCifLetras[i])
                                {
                                       valido= true;
                                }
			}

				} //fin - else if (formu.tdoc.options[formu.tdoc.options.selectedIndex].value == 'CIF')
			} //fin - else
		} // fin - (formu.tdoc.options[formu.tdoc.options.selectedIndex].value =='NIF'  || formu.tdoc.options[formu.tdoc.options.selectedIndex].value =='CIF')
			
		if ( valido == false )
		{
			alert (MSG );
			formu.txdocumento.focus();
		}
		else
		{
			if (formu.pin.value.length == 0 || isWhitespace(formu.pin.value))
            {
            	alert('Debe introducir el PIN. En caso de no disponer de PIN, debe darse de alta como Nuevo Usuario.');
                formu.pin.focus();
            } 
            else
            {
            	return true;
            }
    	}
	} //fin - else
	
	return false;
}

function Trim(cad)
{
        var aux="";
        var i,lg = cad.length;
        for (;lg>0 && cad.charAt(lg-1)<=' ';lg--);
        for (i=0;i<lg && cad.charAt(i)<=' ';i++);
        for (;i<lg;i++)
                aux = aux + cad.charAt(i);
        return aux;
}
function trim(cad)
{
        var aux="";
        var i,lg = cad.length;
        for (;lg>0 && cad.charAt(lg-1)<=' ';lg--);
        for (i=0;i<lg && cad.charAt(i)<=' ';i++);
        for (;i<lg;i++)
                aux = aux + cad.charAt(i);
        return aux;
}

function IntOk(cad,req)
{
        var MSG="Campo '"+cad+"' no es numérico";
        cad = Trim(cad);
        if (cad.length==0) return !req;
        var i=0,lg = cad.length;
        if (lg==0) return !req;
        if (cad.charAt(0)=='-') {
                if (lg==1) return false;
                i=1;
        }
        for (;i<lg;i++) {
                ch = cad.charAt(i);
                if (ch<'0' || ch>'9') return false;
        }
        return true;
}

function isWhitespace (s)
{
	var i;
	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if (whitespace.indexOf(c) == -1) return false;
	}
	return true;
}