//incluye las siguientes funciones:
//  RoundDecimal     -- redondea a un numero con los decimales que se quiera
//  Llamarventana     -- Pone el título de la opción elegida
//  calendario            -- Muestra ventana de calendario para elegir una fecha
//  num_onkeypress -- solo admite números en un input
//  num_coma    -- solo admite números y el punto decimal y el espaciador
//  vale_nif                 -- comprueba si un nif es correcto
//  val_cif                -- comprueba si un cif es correcto
//  suma_impares         ----
//  quita_espacios  ----  como el trim en Visual Basic
//  anyoBisiesto
//  formatCurrency  ----  formatea un número con puntos y comas y añade el caracter de €
//  Valida_Fecha         -- comprueba si una fecha es correcta
//  HayNumero   ---  comprueba que la variable que pasamos es numérica (día mes y año) */    
//  reemplazar    ----   Reemplaza todas las apariciones de una cadena en otra
//  vuelta_numero   --- dado un número formateado a '.' para miles y ',' para decimales
// 						lo transforma en un número sin separador de miles y con '.' como separador decimal
// 						para poder hacer operaciones numéricas con él en javascript
//  trim          --  quita los espacios en blanco al inicio de una cadena
// ValidarEMail(sCadena)

// función para redondear un numero
 function RounDecimal(nro,d) 
{ 
var m = Math.pow(10,d); 
var nro2 = nro * m; 
return (Math.round(nro2)/m) ; 
} 


//muestra el título 
function  Llamarventana(titulo)
{
// window.parent.frames["Fsuperior"].document.getElementById('Layer9').innerHTML=titulo;  
 window.parent.opener.document.frames["Fsuperior"].document.getElementById('Layer9').innerHTML=titulo;  
 }
 
// Muestra el calendario si el boton asociado a la fecha no está desabilitado
function calendario(input)
{
	if (!input.disabled)
	input.value=showModalDialog('../htm/calendario.htm',input.value,'status:no;DialogWidth:15;DialogHeight:11');
}

// solo admite números en un input
function num_onkeypress(evento)
{
	if (document.all)  // explorer
	{
		if ((event.keyCode < 47) || (event.keyCode > 57)) 
		       {event.returnValue = false;};
	}
	else
	{
		if (evento.charCode !=0 && (evento.charCode < 48 || evento.charCode > 57)) 
		       {return false; evento.returnValue = false};
	};
}

// solo admite números y el punto decimal y el espaciador en un input
function num_coma(evento)
{
// el punto es el 46
// backspace es el 8
// los numéros val de 48 al 57
	if (document.all)  //explorer
	{
		if ((event.keyCode > 57) || (event.keyCode<48 && event.keyCode!=32 && event.keyCode!=8 && event.keyCode!=46)) 
		       {event.returnValue = false;};
	}
	else
	{
		if ((evento.charCode!=0 && evento.charCode!=46 && evento.charCode < 48 && evento.keyCode!=32 ) || (evento.charCode > 57)) 
		       {return false; evento.returnValue = false;};
	};
}

// solo admite números y el punto decimal y el espaciador en un input
function num_decimal(evento)
{
// la coma es el 44
// el punta es el 46
// backspace es el 8
// los numéros val de 48 al 57
	if (document.all)  //explorer
	{
		if ((event.keyCode > 57) || (event.keyCode<48 && event.keyCode!=32 && event.keyCode!=8 && event.keyCode!=44 && event.keyCode!=46)) 
		       {event.returnValue = false;};
	}
	else
	{
		if ((evento.charCode!=0 && evento.charCode!=44 && evento.keyCode!=46 && evento.charCode < 48 && evento.keyCode!=32 ) || (evento.charCode > 57)) 
		       {return false; evento.returnValue = false;};
	};
}

//<!-- Validacion del cif/nif del empresario-->
//********************************************************
//*Funci¢n que analiza un cif/nif y devuelve si es erroneo
//********************************************************

function vale_nif(cifnif)
{
    var vnif,vdni
	var letranif,numero,letra
	cifnif = quita_espacios(cifnif)		
	cifnif = cifnif.toUpperCase()
	letranif = cifnif.substr(0,1)
	if (isNaN(letranif))
	{
		if (letranif != "X" && letranif != "Z")
		{
			if (!val_cif(cifnif))
			{
				alert("El CIF no es correcto")
				return false
			}
			else
			{
				return true
			}
		}
		else
		{
			cifnif = cifnif.substr(1);
		}
	}
	vdni=cifnif.substr(0,cifnif.length-1) //Numeros del DNI
	if (vdni.length > 8) 
	{
		alert("El NIF no puede tener mas de 8 números")
		return false
	}
	vnif=cifnif.substr(cifnif.length-1,1) //Letra del DNI
	numero=vdni - Math.round(vdni / 23) * 23 //Calculo de la letra
	if (numero < 0) // esto es por que al redondear suma uno y hay que corregirlo
		numero += 23; // sumamos 23 porque se multiplico el 1 que sumamos por 23
	switch (numero)
	{
		case 0: 
		{	letra="T";
			break;
		}
		case 1: 
		{	letra="R";
			break;
		}
		case 2: 
		{	letra="W";
			break;
		}
		case 3: 
		{	letra="A";
			break;
		}
		case 4: 
		{	letra="G";
			break;
		}
		case 5: 
		{	letra="M";
			break;
		}
		case 6: 
		{	letra="Y";
			break;
		}
		case 7: 
		{	letra="F";
			break;
		}
		case 8: 
		{	letra="P";
			break;
		}
		case 9: 
		{	letra="D";
			break;
		}
		case 10: 
		{	letra="X";
			break;
		}
		case 11: 
		{	letra="B";
			break;
		}
		case 12: 
		{	letra="N";
			break;
		}
		case 13: 
		{	letra="J";
			break;
		}
		case 14: 
		{	letra="Z";
			break;
		}
		case 15: 
		{	letra="S";
			break;
		}
		case 16: 
		{	letra="Q";
			break;
		}
		case 17: 
		{	letra="V";
			break;
		}
		case 18: 
		{	letra="H";
			break;
		}
		case 19: 
		{	letra="L";
			break;
		}
		case 20: 
		{	letra="C";
			break;
		}
		case 21: 
		{	letra="K";
			break;
		}
		case 22: 
		{	letra="E";
			break;
		}
	}
	if (letra != vnif)
	{
		alert("Los datos del nif no son correctos")
		return false
	}
	return true
}
//***************************************************************************
function val_cif(cif)
{
	var cadenacif = new Array("A","B","C","D","E","F","G","H","I","J")
	var arrcif = new Array(9)
	var aux1
	var aux2
	var i
	var digito
	
	for (i=0;i<=8;i++)
	{ 
		arrcif[i] = (cif.substr(i,1) - 1) + 1;
	}
	
	aux1 = arrcif[2] + arrcif[4] + arrcif[6]
	aux2 = suma_impares(arrcif[1]) + suma_impares(arrcif[3]) + suma_impares(arrcif[5]) + suma_impares(arrcif[7])
	aux1 = aux1 + aux2
	digito = 10 - (aux1%10)
	if (cadenacif[digito-1] == cif.substr(8,1))
	{
		return (true)
	}
	else
	{
		if (!isNaN(cif.substr(8,1)))
		{
			if (digito == 10) digito=0;
			return (digito==arrcif[8])
		}
		else
		{
			return (false)
		}
	}
}
function suma_impares(ndigito)
{
   var nsuma
   nsuma = ndigito * 2
   if (nsuma >= 10) nsuma = (nsuma%10) + 1;
   return nsuma
}

function quita_espacios(cadena) // como el trim en Visual Basic
{
	var compruebaizquierda=/^ .+$/
	var compruebaderecha=/^.+ $/
	var correcto
	correcto=false
	while (correcto==false)
	{
		if (compruebaizquierda.test(cadena))
		{
			cadena = cadena.substr(1);
		}
		else
		{
			if (compruebaderecha.test(cadena))
			{
				cadena = cadena.substr(0,cadena.length-1)
			}
			else
			{
				correcto=true
			}	
		}
	}
	return (cadena)
}

//<!-- Comprobación fecha correcta-->
/******************************************************************************************************
//funciones para la comprobación de la fecha
//*****************************************************************************************************
* funcion para comprobar si un año es bisiesto
* argumento anyo > año extraido de la fecha introducida por el usuario
*/
function anyoBisiesto(anyo)
    {
        /**
        * si el año introducido es de dos cifras lo pasamos al periodo de 1900. Ejemplo: 25 > 1925
        */
        if (anyo < 100)
            var fin = anyo + 1900;
        else
            var fin = anyo ;

        /*
        * primera condicion: si el resto de dividir el año entre 4 no es cero > el año no es bisiesto
        * es decir, obtenemos año modulo 4, teniendo que cumplirse anyo mod(4)=0 para bisiesto
        */
        if (fin % 4 != 0)
            return false;
        else
        {
            if (fin % 100 == 0)
            {
                /**
                * si el año es divisible por 4 y por 100 y divisible por 400 > es bisiesto
                */
                if (fin % 400 == 0)
                {
                    return true;
                }
                /**
                * si es divisible por 4 y por 100 pero no lo es por 400 > no es bisiesto
                */
                else
                {
                    return false;
                }
            }
            /**
            * si es divisible por 4 y no es divisible por 100 > el año es bisiesto
            */
            else
            {
                return true;
            }
        }
    }
    
/* comprueba que la variable que pasamos es numérica (día mes y año) */    
function HayNumero(dato)
{
    if (dato==null)
      return false;
    if (dato.value=="")
     return false;
    else
    {  
	  for (i=0 ; i<dato.length; i++)
	  {
        var caracter = dato.substring(i,i+1);
        if (caracter < "0" || caracter > "9")
	     {
		  return false;
	     }
      }
		return true;
	}	
}
   
/**
* funcion principal de validacion de la fecha
* argumento fecha > cadena de texto de la fecha introducida por el usuario
*/
/* definimos las variables globales que van a contener la fecha completa, cada una de sus partes
* y los dias correspondientes al mes de febrero segun sea el año bisiesto o no
*/
/*
function ValidaFecha(vdato)
 {
  var a="", mes="", dia="", anyo="", febrero="";
  //
  // obtenemos la fecha introducida y la separamos en dia, mes y año
  //
  a=vdato.value;
  dia=a.split("/")[0];
  mes=a.split("/")[1];
  anyo=a.split("/")[2];
  if (a==null)
    return;
  if (a=="")
    return;
  //
  // comprobar que son números y de la longitud adecuada
  //
  if ((HayNumero(dia)==false) || (HayNumero(mes)==false) || (HayNumero(anyo)==false))
  {
    alert ("Fecha Incorrecta");
    vdato.value="";
    vdato.focus();
    return false;
  }
       
  if(anyoBisiesto(anyo))
      febrero=29;
  else
      febrero=28;
  //
  // si el mes introducido es negativo, 0 o mayor que 12 > alertamos y detenemos ejecucion
  //
  if ((mes<1) || (mes>12))
    {
     alert("El mes introducido no es valido. Por favor, introduzca un mes correcto");
     vdato.focus();
     vdato.select();
     return;
    }
  //
  // si el mes introducido es febrero y el dia es mayor que el correspondiente 
  // al año introducido > alertamos y detenemos ejecucion
  //
  if ((mes==2) && ((dia<1) || (dia>febrero)))
    {
     alert("El dia introducido no es valido. Por favor, introduzca un dia correcto");
     vdato.focus();
     vdato.select();
     return;
    }
  //
  // si el mes introducido es de 31 dias y el dia introducido es mayor de 31 > alertamos y detenemos ejecucion
  //
  if (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)) && ((dia<1) || (dia>31)))
    {
     alert("El dia introducido no es valido. Por favor, introduzca un dia correcto");
     vdato.focus();
     vdato.select();
     return;
    }
  //
  // si el mes introducido es de 30 dias y el dia introducido es mayor de 301 > alertamos y detenemos ejecucion
  //
  if (((mes==4) || (mes==6) || (mes==9) || (mes==11)) && ((dia<1) || (dia>30)))
   {
    alert("El dia introducido no es valido. Por favor, introduzca un dia correcto");
    vdato.focus();
    vdato.select();
    return;
   }
  //
  // si el mes año introducido es menor que 1900 o mayor que 2010 > alertamos y detenemos ejecucion
  // NOTA: estos valores son a eleccion vuestra, y no constituyen por si solos fecha erronea
  //
  if ((anyo<1900) || (anyo>2020))
    {
     alert("El año introducido no es valido. Por favor, introduzca un año entre 1900 y 2010");
     vdato.focus();
     vdato.select();
    } 
 }    
*/ 
 
//formatea un número con puntos y comas y añade el caracter de €
function formatCurrency(num)
    {
      num = num.toString().replace(/\ |\,/g,'');
      if(isNaN(num)) 
        num = "0";
      cents = Math.floor((num*100+0.5)%100);
      num = Math.floor((num*100+0.5)/100).toString();
      if(cents < 10) 
        cents = "0" + cents;
      for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
        num = num.substring(0,num.length-(4*i+3))+'.'+num.substring(num.length-(4*i+3));
      return (' ' + num + ',' + cents);
    }
	
//////////////////////////////////////////////////////////////////////////////////////////////
	// NOMBRE: ValidarFecha
	// FUNCION: Comprueba que una cadena contiene una fecha válida.
	// PARAMETROS: Una cadena que debe tener una fecha. 
	// RETORNO: True si la fecha esté correcta o bien false en caso contrario.
	// COMENTARIO: Asume que la fecha tiene uno de estos dos formatos:
	// dd/mm/aaaa (El formato dd-mm-aaaa no se acepta).
	function ValidarFecha (cad_fecha)
	{
		var matriz;		
		var resultado;		// valor de retorno
		var i_numero_dias;	// Array con el número de días.
		var i_annos;
		var i_meses;
		var i_dias;	
		
		i_numero_dias=new Array ();
		matriz		 =new Array ();
		
		// Asignación de los número de días que tienen los meses.
		i_numero_dias[0]=31;
		i_numero_dias[1]=28;			
		i_numero_dias[2]=31;
		i_numero_dias[3]=30;
		i_numero_dias[4]=31;
		i_numero_dias[5]=30;
		i_numero_dias[6]=31;
		i_numero_dias[7]=31;
		i_numero_dias[8]=30;
		i_numero_dias[9]=31;
		i_numero_dias[10]=30;
		i_numero_dias[11]=31;
		
		// Se divide la cadena en sus componentes 
		matriz=cad_fecha.split ("/");	
		/*
		// Se elimina la posibilidad de que el usuario introduzca la fecha
		// con guiones.
		// ¿ División con exito ?
		if (matriz.length<=1)
		{
			// Se intenta la división usando como caracter separador el 
			// guion.
			matriz=cad_fecha.split ("-");
		}
		*/
		
		resultado=true;
			
		// ¿ Alguna de las dos separaciones ha tenido éxito ?
		if (matriz.length==3)
			{
			
			eval ("i_annos="+matriz [2]+";");
			eval ("i_meses="+matriz [1]+";");
			eval ("i_dias="+matriz [0]+";");		
			
			// Años...
			if ((i_annos>2100) || (i_annos<1900))
					resultado=false;
			else 
				{
				// Si el año está correcto ajustamos el número de días
				// de febrero si el año es bisiesto
				if (anyoBisiesto (i_annos))
					i_numero_dias [1]=29;
							
				// Meses
				if ((i_meses<1) || (i_meses>12))
					resultado=false;
					
				// Dias, validación del número de días.
				if (resultado)
					if ((i_dias<1) || (i_dias>i_numero_dias [i_meses-1]))
						resultado=false;
				}
			}
		else 
			// La división en cadenas ha dado como resultado
			resultado=false;
			
		return (resultado);
	}

// Reemplaza todas las apariciones de una cadena en otra
function reemplazar(cadena,buscada,reemplazar)
{
var devuelto="";
for(i=0;i<cadena.length;i++)
{
if(cadena.charAt(i)==buscada)
devuelto=devuelto+reemplazar;
else
devuelto=devuelto+cadena.charAt(i);
}
return devuelto;
}

// dado un número formateado a '.' para miles y ',' para decimales
// lo transforma en un número sin separador de miles y con '.' como separador decimal
// para poder hacer operaciones numéricas con él en javascript
function vuelta_numero( vnumero)
{
	
 	 vnumero= reemplazar(vnumero,",","-");
	 vnumero= reemplazar(vnumero,".","");
	 vnumero= reemplazar(vnumero,"-",".");
	 return (vnumero);

}

function vuelta_numero2( vnumero)
{
	 vnumero= reemplazar(vnumero,".",",");
	 return (vnumero);
}

//función que quita los espacios en blanco al inicio de una cadena
function trim(cadena){
       cadena=cadena.replace(/^\s+/,'').replace(/\s+$/,'');
       return(cadena);
}

/*-----------------------------------------------------------------------------------------------------
	'Descripción : Valida que el formato de la dirección de correo.
	'Entradas : sCadena
	'Salidas: True/False
	'Observaciones: 
	'------------------------------------------------------------------------------------------------------*/
	function ValidarEMail(sCadena)
	{		
		var iLongitud; 
		var iContador;

		//Si la variable sCadena no está vacía
		if (sCadena != "")
		{
			iLongitud = sCadena.length;
			//Recorremos la cadena carácter a carácter
			for (iContador=0;iContador < iLongitud;iContador++)
			{
				//Si no encontramos el carácter "@"
				if ((sCadena.charAt(iContador)!= "@"))
				{	
					//Si hemos llegado al final de la cadena
					if (iContador == iLongitud-1)
					{
						//Advertimos al usuario que el E-Mail debe contener el carácter "@"
						alert ("Introduzca una dirección de e-mail correcta");
						return (false);
					}
				}
				else
				{
					return(true);
				}						
			}
		}		
		return(true)
	}

function escribirFecha(evento)
{
	if (document.all) //explorer
	{
		if ((window.event.keyCode < "0".charCodeAt(0) || window.event.keyCode > "9".charCodeAt(0)) && window.event.keyCode != "/".charCodeAt(0))
		{   
			window.event.keyCode = 0;
		} else {
			switch (document.activeElement.value.length)
			{
				case 0: if (window.event.keyCode == "/".charCodeAt(0))
						{
							window.event.keyCode = 0;
						} else if (window.event.keyCode > "3".charCodeAt(0) && window.event.keyCode <= "9".charCodeAt(0))
								{
									document.activeElement.value = "0" + document.activeElement.value + String.fromCharCode(window.event.keyCode) + "/";
									window.event.keyCode = 0;
								}
						break;

				case 1: if (document.activeElement.value == 3 && window.event.keyCode > "1".charCodeAt(0) || document.activeElement.value == 0 && window.event.keyCode == "0".charCodeAt(0))
						{
							window.event.keyCode = 0;
						} else if (window.event.keyCode != "/".charCodeAt(0))
								{
									document.activeElement.value = document.activeElement.value + String.fromCharCode(window.event.keyCode) + "/";
									window.event.keyCode = 0;
								} else {
									if (document.activeElement.value >= 1 && document.activeElement.value <= 3)
									{
										document.activeElement.value = "0" + document.activeElement.value + String.fromCharCode(window.event.keyCode);
	                                    window.event.keyCode = 0;
									}
                                }
						break;

				case 2: if (window.event.keyCode != "/".charCodeAt(0))
						{
							window.event.keyCode = 0;
						}
						break;

				case 3: if (window.event.keyCode == "/".charCodeAt(0))
						{
							window.event.keyCode = 0;
						} else if (window.event.keyCode > "1".charCodeAt(0) && window.event.keyCode <= "9".charCodeAt(0))
								{
									document.activeElement.value = document.activeElement.value + "0" + String.fromCharCode(window.event.keyCode) + "/";
									window.event.keyCode = 0;
								}
						break;

				case 4: if (document.activeElement.value.substr(3) == 1 && window.event.keyCode > "2".charCodeAt(0) || document.activeElement.value.substr(3) == 0 && window.event.keyCode == "0".charCodeAt(0))
						{
							window.event.keyCode = 0;
						} else if (window.event.keyCode != "/".charCodeAt(0))
								{
									document.activeElement.value = document.activeElement.value + String.fromCharCode(window.event.keyCode) + "/";
									window.event.keyCode = 0;
								} else {
									if (document.activeElement.value.substr(3) == 1)
									{
										document.activeElement.value = document.activeElement.value.substr(0,3)  + "01" + String.fromCharCode(window.event.keyCode);
										window.event.keyCode = 0;
									}
								}
						break;

				case 5: if (window.event.keyCode != "/".charCodeAt(0))
						{
							window.event.keyCode = 0;
						}
						break;

				default: if (window.event.keyCode == "/".charCodeAt(0))
						{
							window.event.keyCode = 0;
						}

			}
		}
	} else { //mozilla
		if ((evento.charCode < "0".charCodeAt(0) || evento.charCode > "9".charCodeAt(0)) && evento.charCode!=0 && evento.charCode != "/".charCodeAt(0))
		{   
			return false;
		} else {
			switch (document.activeElement.value.length)
			{
				case 0: if (evento.charCode == "/".charCodeAt(0))
						{   
							return false; 
						} else if (evento.charCode > "3".charCodeAt(0) && evento.charCode <= "9".charCodeAt(0))
								{
									document.activeElement.value = "0" + document.activeElement.value + String.fromCharCode(evento.charCode) + "/";
									return false; 
								}
						break;

				case 1: if (document.activeElement.value == 3 && evento.charCode > "1".charCodeAt(0) || document.activeElement.value == 0 && evento.charCode == "0".charCodeAt(0))
						{
							return false;
						} else if (evento.charCode != "/".charCodeAt(0))
								{
									document.activeElement.value = document.activeElement.value + String.fromCharCode(evento.charCode) + "/";
									return false;
								} else {
									if (document.activeElement.value >= 1 && document.activeElement.value <= 3)
									{
										document.activeElement.value = "0" + document.activeElement.value + String.fromCharCode(evento.charCode);
										return false; 
									}
								}
						break;

				case 2: if (evento.charCode != "/".charCodeAt(0))
						{
							return false;
						}
						break;

				case 3: if (evento.charCode == "/".charCodeAt(0))
						{
							return false;
						} else if (evento.charCode > "1".charCodeAt(0) && evento.charCode <= "9".charCodeAt(0))
								{
									document.activeElement.value = document.activeElement.value + "0" + String.fromCharCode(evento.charCode) + "/";
									return false; 
								}
						break;

				case 4: if (document.activeElement.value.substr(3) == 1 && evento.charCode > "2".charCodeAt(0) || document.activeElement.value.substr(3) == 0 && evento.charCode == "0".charCodeAt(0))
						{
							return false; 
						} else if (evento.charCode != "/".charCodeAt(0))
								{
									document.activeElement.value = document.activeElement.value + String.fromCharCode(evento.charCode) + "/";
									return false;
								} else {
									if (document.activeElement.value.substr(3) == 1)
									{
										document.activeElement.value = document.activeElement.value.substr(0,3)  + "01" + String.fromCharCode(evento.charCode);
										return false; 
									}
								}
						break;

				case 5: if (evento.charCode != "/".charCodeAt(0))
						{
							return false; 
						}
						break;

				default: if (evento.charCode == "/".charCodeAt(0))
						{
							return false;
						}
			}
		}
	}
}


String.prototype.fechaDDMMAAAA = function() {
	return this.replace(/^(\d{2})\/(\d{2})\/(\d{4})$/, "$2/$1/$3");
}
String.prototype.fechaMMDDAAAA = function() {
	return this.replace(/^(\d{2})\/(\d{2})\/(\d{4})$/, "$2/$1/$3");
}


// Validaciones de dni, nif y cif actualizadas

/*
 NOMBRE: ValidarDNINIF(cifnif)
 FUNCION: Función que analiza un cif/nif y devuelve si es erroneo
 PARAMETROS ENTRADA: Cadena con el cif nif para validar.
 PARAMETROS SALIDA: Devuelve la cadena sin ningun espacio.
 COMENTATIO: esta funcion llama a ValidarCIF para comprobar si se trata de un cif.
 AUTOR: FCR 12/12/2000 
*/	
function ValidarDNINIF(cifnif)
{
	var vnif,vdni
	var letranif,numero,letra
	
	cifnif = trim(cifnif)		
	cifnif = cifnif.toUpperCase()
	letranif = cifnif.substr(0,1)

	if (isNaN(letranif))
	{
		if (letranif != "X" && letranif != "Y" && letranif !="Z" && letranif != "L" && letranif !="M" && letranif != "K")
		{
			if (!/^[ABCDEFGHSPQJRUVNW]/.test(cifnif)) 
			{ 
				// Es una letra de las admitidas ?
				alert("El primer dígito es  incorrecto, debe ser una letra de las siguientes: A,B,C,D,E,F,G,H,J,N,P,Q,S,R,U,V,W ");
				return false
			}
			else
			{ 
				if (!ValidarCIF(cifnif))
				{
					alert("El CIF no es correcto")
					return false
				}
				else
				{
					return true
				}
			}	
		}
		else
		{
			if (letranif == "X" || letranif == "L" || letranif =="M" || letranif == "K")
				cifnif = cifnif.substr(1);
			if (letranif == "Y")
				cifnif = cifnif.replace(letranif,"1")
			if (letranif == "Z")
				cifnif = cifnif.replace(letranif,"2")  
		}
	}
	vdni=cifnif.substr(0,cifnif.length-1) //Numeros del DNI
	if (vdni.length > 8) 
	{
		alert("El NIF no puede tener mas de 8 números")
		return false
	}
	vnif=cifnif.substr(cifnif.length-1,1) //Letra del DNI
	numero=vdni - Math.round(vdni / 23) * 23 //Calculo de la letra
	if (numero < 0) // esto es por que al redondear suma uno y hay que corregirlo
		numero += 23; // sumamos 23 porque se multiplico el 1 que sumamos por 23
	switch (numero)
	{
		case 0: 
		{	letra="T";
			break;
		}
		case 1: 
		{	letra="R";
			break;
		}
		case 2: 
		{	letra="W";
			break;
		}
		case 3: 
		{	letra="A";
			break;
		}
		case 4: 
		{	letra="G";
			break;
		}
		case 5: 
		{	letra="M";
			break;
		}
		case 6: 
		{	letra="Y";
			break;
		}
		case 7: 
		{	letra="F";
			break;
		}
		case 8: 
		{	letra="P";
			break;
		}
		case 9: 
		{	letra="D";
			break;
		}
		case 10: 
		{	letra="X";
			break;
		}
		case 11: 
		{	letra="B";
			break;
		}
		case 12: 
		{	letra="N";
			break;
		}
		case 13: 
		{	letra="J";
			break;
		}
		case 14: 
		{	letra="Z";
			break;
		}
		case 15: 
		{	letra="S";
			break;
		}
		case 16: 
		{	letra="Q";
			break;
		}
		case 17: 
		{	letra="V";
			break;
		}
		case 18: 
		{	letra="H";
			break;
		}
		case 19: 
		{	letra="L";
			break;
		}
		case 20: 
		{	letra="C";
			break;
		}
		case 21: 
		{	letra="K";
			break;
		}
		case 22: 
		{	letra="E";
			break;
		}
	}
	if (letra != vnif)
	{
		alert("Los datos del nif no son correctos")
		return false
	}
	return true
}


/*
 NOMBRE: ValidarCIF(cif)
 FUNCION: Funcion que comprueba si una cadena es un cif correcto
 PARAMETROS ENTRADA: CaCadena con el cif a validar
 PARAMETROS SALIDA: Devuelve la cadena sin ningun espacio.
 COMENTATIO: utiliza una serie de alert's si falla.
 AUTOR: FCR 12/12/2000 
*/	
function ValidarCIF(cif)
{
	var cadenacif = new Array("A","B","C","D","E","F","G","H","I","J")
	var arrcif = new Array(9)
	var aux1
	var aux2
	var i
	var digito
	
	for (i=0;i<=8;i++)
	{ 
		arrcif[i] = (cif.substr(i,1) - 1) + 1;
	}
	
	aux1 = arrcif[2] + arrcif[4] + arrcif[6]
	aux2 = suma_impares(arrcif[1]) + suma_impares(arrcif[3]) + suma_impares(arrcif[5]) + suma_impares(arrcif[7])
	aux1 = aux1 + aux2
	digito = 10 - (aux1%10)
	if (cadenacif[digito-1] == cif.substr(8,1))
	{
		return (true)
	}
	else
	{
		if (!isNaN(cif.substr(8,1)))
		{
			if (digito == 10) digito=0;
			return (digito==arrcif[8])
		}
		else
		{
			return (false)
		}
	}
}


function rellenaceros_nif(nif)
{
   
	var longitud;
	var x;
	var valor;

	nif = quita_espacios(nif);
	nif = nif.toUpperCase();
	
	letranif = nif.substr(0,1)

	hasta=9;

	if (isNaN(letranif))
	{
		nif=nif.substr(1);
		hasta=8;
	}
	longitud = nif.length;
	valor = nif;
	
	
	for (var x=longitud; x<hasta; x++) 
	{
		valor = "0" + valor;
	}
	
	if (isNaN(letranif))
	{
		valor=letranif+valor;
	}

	return valor;
}
