function campoVacio(campo,nombreCampo)
{
	if (campo.value=="") {
		alert("El campo "+nombreCampo+" no puede estar vacío");
		campo.focus();
		return true;
	}
	return false;
}

function campoVacioDefecto(campo,nombreCampo,valorDefecto)
{
	if (campo.value=="" || campo.value==valorDefecto) {
		alert("El campo "+nombreCampo+" no puede estar vacío");
		campo.focus();
		return true;
	}
	return false;
}

function selectVacio(campo,nombreCampo)
{
	if (campo.options[campo.selectedIndex].value=="") {
		alert("El campo "+nombreCampo+" no puede estar vacío");
		campo.focus();
		return true;
	}
	return false;
}

function opcionVacia(campo, totalOpciones, mensaje)
{
	var seleccionado=false;
	
	if (totalOpciones>1) {
		for (var i=0; i<totalOpciones && !seleccionado; i++)
		{
			if (campo[i].checked) {
				seleccionado=true;
			}
		}
	} else if (campo.checked) {
		seleccionado=true;
	}

	if (!seleccionado) {
		alert(mensaje);
		if (totalOpciones>1) {campo[0].focus(); } else {campo.focus(); }
		return true;
	}
	return false;
}

function isNumeric(n)
{
	var number = '0';
	var longi = n.length;
	for (var i = 0; i < longi; i++)
	{
		number = n.charAt(i);
		if (number >= '0' && number <= '9')
			continue;
		else 
			return false;
	}
	return true;
}

function numerico(campo, nombreCampo, obligatorio, rangoMin, rangoMax)
{
	var msg = "";
	if (campo.value!="") {
		if (!isNumeric(campo.value)) {
			msg = "El campo "+nombreCampo+" debe ser un número";
		}
		
		if (rangoMin != rangoMax)
		{
			var n = parseInt(campo.value);
			if (n < rangoMin) {
				msg = "El rango mínimo para "+nombreCampo+" es "+rangoMin;
			} else if (n > rangoMax) {
				msg = "El rango máximo para "+nombreCampo+" es "+rangoMax;
			}
		}
	}
	else if (obligatorio) {
		msg = "Es necesario un valor para el campo "+nombreCampo;
	}
	if (msg != "") {
		alert(msg);
		campo.focus();
		return false;
	}
	
	return true;
}

function isFloat (n)
{
	if (n.length==1 && (n.charAt(0)=='-' || n.charAt(0)=='.')) {
		return false;
	} else if (n.length>1 && n.charAt(n.length-1)=='.') {
		return false;
	}
	var number = '0';
	var nPoint = 0;
	for (var i = 0; i < n.length; i++)
	{
		number = n.charAt(i);
		if (number >= '0' && number <= '9')
			continue;
		else if (number == '-' && i==0)
			continue;
		else if (number == '.' && nPoint==0) {
			nPoint=1;
			continue;
		}
		else 
			return false;
	}
	return true;
}

function isPercentage(percentage, name)
{
	if (!isFloat(percentage.value) || percentage.value<0 || percentage.value>100) {
		alert("El porcentaje de "+name+" no es válido, debe ser un número entre cero y 100");
		percentage.focus();
		return false;
	}
	return true;
}

function longExcesiva(campo,nombreCampo,longMax)
{
	if (campo.value.length > longMax) {
		alert("No puedes introducir más de "+longMax+" caracteres en el campo "+nombreCampo);
		campo.focus();
		return true;
	}
	return false;
}

function isEmail(email)
{
	var posArroba = email.indexOf('@',0);
	
	if (posArroba <= 0)
		return false;

	var posPunto = email.indexOf('.',posArroba);
		
	if (posPunto == -1)
		return false;
		
	if (posPunto+1 == email.length)
		return false;
	// Despues del punto solo puede haber: a-z 0-9 . _-
	if (!contieneCaracteresPermitidos(email.substr(posPunto+1), "._-"))
		return false;

	return true;
}

function isAlfanumerico(valor)
{
	var longi = valor.length;
	var c;
	valor = valor.toLowerCase();
	
	if (longi>0) {
		c = valor.charAt(0);
		if (!(c >= 'a' && c <= 'z')) {
			return false;
		}
	}
	
	for (var i = 1; i < longi; i++)
	{
		c = valor.charAt(i);
		if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || c=='_' || c=='.')
			continue;
		else 
			return false;
	}
	return true;
}

function contieneCaracteresPermitidos(valor, caracteresValidos)
{
	var longi = valor.length;
	var c;
	valor = valor.toLowerCase();
	
	for (var i = 0; i < longi; i++)
	{
		c = valor.charAt(i);
		if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z')) {
			continue;
		} else {
			for (var j=0; j<caracteresValidos.length; j++) {
				if (caracteresValidos.indexOf(c)==-1) {
					return false;
				}
			}
		}
	}
	return true;
}

function checkNIF(campo) 
{
	campo.value = campo.value.toUpperCase();
	var nif = campo.value;
	if (nif.length != 9) 
	{
		alert ("NIF incorrecto. Debe tener 8 números y una letra. Sin espacios ni guiones");
		campo.focus();
		return false;
	}
	for (var i=0; i<8; i++) {
		if (nif.charAt(i)<'0' || nif.charAt(i)>'9') {
			alert ("El número introducido en el NIF no es válido: "+nif.charAt(i));
			campo.focus();
			return false;
		}
	}
	
	var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
	// var dni = parseInt(nif.substring(0,8)); // Si tiene ceros iniciales no lo hace bien
	var dni = nif.substring(0,8);
	//alert(dni)
	var numero = dni%23;
	var letra = letras.substring(numero, numero+1);
	
	if (letra != nif.charAt(8)) {
		alert("La letra del NIF no es correcta");
		campo.focus();
		return false;
	}
	
	return true;
 }

function checkCIF(campo)
{
	// documentacion en   http://www.aulambra.com/ver.asp?id=139&tipo=Documento
	// pasar a mayúsculas
	campo.value = campo.value.toUpperCase();
	var cif = campo.value; 

	if (!/^[A-Za-z0-9]{9}$/.test(cif)) {// Son 9 dígitos?
		alert ("Longitud incorrecta, un CIF consta de 9 dígitos");
		campo.focus();
		return false;
		           
	} else if (!/^[ABCDEFGHJNPQRSUVW]/.test(cif)) { // ABCDEFGHKLMNPQS 18-06-2009: he cambiado las letras
		// Es una    letra de las admitidas ?
		alert("El primer dígito del CIF es incorrecto, debe ser una letra de las siguientes: A,B,C,D,E,F,G,H,K,L,M,N,P,Q,R,S,X");
		campo.focus();
		return false;
	}
	
	var v1 = new Array(0,2,4,6,8,1,3,5,7,9); 
	var temp = 0;
	for( i = 2; i <= 6; i += 2 ) {
		temp = temp + v1[ parseInt(cif.substr(i-1,1))];
		temp = temp + parseInt(cif.substr(i,1));
	}

	temp = temp + v1[ parseInt(cif.substr(7,1))];
	temp = (10 - ( temp % 10));

	var letrasDC = new Array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'); 
	if( temp == 10 ) {
		if (cif.charAt(8) != 'J' && cif.charAt(8) != '0') {
			alert( "El dígito de control del CIF no es válido" );
			campo.focus();
			return false;
		}
	// } else if (cif.charAt(8) != temp) {
	} else if (cif.charAt(8) != letrasDC[temp-1] && cif.charAt(8) != temp) {
		alert( "El dígito de control del CIF no es válido ");
		campo.focus();
		return false;
	}
		
    return true;
  }
