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=="") {
		if (nombreCampo!="") {
			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) {
		if (mensaje!="") {
			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 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;
}

/*
1 > NIF correcto / -1 > NIF incorrecto
2 > CIF correcto / -2 > CIF incorrecto
3 > NIE correcto / -3 > NIE incorrecto
0 > Valor desconocido (campo vacio, formato incorrecto, etc)
*/
function valida_nif_cif_nie(a) 
{
	var temp=a.toUpperCase();
	var cadenadni="TRWAGMYFPDXBNJZSQVHLCKE";
 
	if (temp!==''){
		//si no tiene un formato valido devuelve error
		if ((!/^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$/.test(temp) && !/^[T]{1}[A-Z0-9]{8}$/.test(temp)) && !/^[0-9]{8}[A-Z]{1}$/.test(temp))
		{
			return 0;
		}
 
		//comprobacion de NIFs estandar
		if (/^[0-9]{8}[A-Z]{1}$/.test(temp))
		{
			posicion = a.substring(8,0) % 23;
			letra = cadenadni.charAt(posicion);
			var letradni=temp.charAt(8);
			if (letra == letradni)
			{
			   	return 1;
			}
			else
			{
				return -1;
			}
		}
 
		//algoritmo para comprobacion de codigos tipo CIF
		suma = parseInt(a[2])+parseInt(a[4])+parseInt(a[6]);
		for (i = 1; i < 8; i += 2)
		{
			temp1 = 2 * parseInt(a[i]);
			temp1 += '';
			temp1 = temp1.substring(0,1);
			temp2 = 2 * parseInt(a[i]);
			temp2 += '';
			temp2 = temp2.substring(1,2);
			if (temp2 == '')
			{
				temp2 = '0';
			}
 
			suma += (parseInt(temp1) + parseInt(temp2));
		}
		suma += '';
		n = 10 - parseInt(suma.substring(suma.length-1, suma.length));
 
		//comprobacion de NIFs especiales (se calculan como CIFs)
		if (/^[KLM]{1}/.test(temp))
		{
			if (a[8] == String.fromCharCode(64 + n))
			{
				return 1;
			}
			else
			{
				return -1;
			}
		}
 
		//comprobacion de CIFs
		if (/^[ABCDEFGHJNPQRSUVW]{1}/.test(temp))
		{
			temp = n + '';
			if (a[8] == String.fromCharCode(64 + n) || a[8] == parseInt(temp.substring(temp.length-1, temp.length)))
			{
				return 2;
			}
			else
			{
				return -2;
			}
		}
 
		//comprobacion de NIEs
		//T
		if (/^[T]{1}/.test(temp))
		{
			if (a[8] == /^[T]{1}[A-Z0-9]{8}$/.test(temp))
			{
				return 3;
			}
			else
			{
				return -3;
			}
		}
 
		//XYZ
		if (/^[XYZ]{1}/.test(temp))
		{
			pos = str_replace(['X', 'Y', 'Z'], ['0','1','2'], temp).substring(0, 8) % 23;
			if (a[8] == cadenadni.substring(pos, pos + 1))
			{
				return 3;
			}
			else
			{
				return -3;
			}
		}
	}
 
	return 0;
}

function str_replace(search, replace, subject) 
{
    var f = search, r = replace, s = subject;
    var ra = r instanceof Array, sa = s instanceof Array, f = [].concat(f), r = [].concat(r), i = (s = [].concat(s)).length;
 
    while (j = 0, i--) {
        if (s[i]) {
            while (s[i] = s[i].split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};
        }
    };
 
    return sa ? s : s[0];
}

function extension(nombre)
{
	var longNombre = nombre.length;
	var i;
	for (i=longNombre-2; i>0; i--) {
		if (nombre.charAt(i)=='.') {
			return nombre.substr(i+1);
		}
	}
	return "";
}
