Buenas a todos
 
Conseguí por internet un par de funciones que trabajan unidas para validar si en un campo ha sido escrito correctamente un CIF o un NIF.  
Código:
 function valcif(cif){
	par = 0;
	non = 0;
	letras="ABCDEFGHKLMNPQS";
	let=cif.charAt(0);
	if (!isNaN(let)){
		nif=cif;
		valnif(nif);
		return false;
	}
	if (letras.indexOf(let.toUpperCase())==-1){
		alert("El comienzo del Cif no es válido");
		return false;
	}
	for (zz=2;zz<8;zz+=2)
		par = par+parseInt(cif.charAt(zz));
	for (zz=1;zz<9;zz+=2){
		nn = 2*parseInt(cif.charAt(zz));
		if (nn > 9)
			nn = 1+(nn-10);
		non = non+nn;
	}
	parcial = par + non;
	control = (10 - ( parcial % 10));
	if (control==10)
		control=0;
	if (control!=cif.charAt(8)){
		alert("El Cif no es válido");
		return false;
	}
}
function valnif(nif){
	dni=nif.substring(0,nif.length-1);
	let=nif.charAt(nif.length-1);
	
	if (!isNaN(let)){
		alert('Falta la letra del Nif');
		return false;
	}
	else{
		cadena = "TRWAGMYFPDXBNJZSQVHLCKET";
		posicion = dni % 23;
		letra = cadena.substring(posicion,posicion+1);
		if (letra!=let.toUpperCase()){
			alert("Nif no válido");
			return false;
		}
	}
}
  En un formulario dispongo de un botón que me llama a una función principal que hace más comprobaciones con otros campos. 
Desde esa función llamo a estas dos validadoras cif/nif de la siguiente manera: 
if (!valcif(f.nif.value))
   return false; 
Pensaba que me si las que validan lo hacían todo devolverían "true" y podría seguir con el resto de las operaciones, pero siempre devuelven "false" aunque no se quejen con ningun alert y en el cuadro haya escrito un valor correcto. 
Además siempre se queda parado el conjunto porque no se como continuarla.. 
Gracias de antemano por la ayuda. 
Un saludo.