//ELIMINA LOS ESPACIOS EN BLANCO SITUADOS AL COMIENZO Y EL FINAL DE UNA CADENA DE TEXTO.

function Trim(cadena)
{	
	longitud=cadena.length;

	//Elimino los posibles espacios en blanco antes del primer caracter no blanco

	for(cont=0; cont<longitud; cont++)
	{
		if(cadena.charAt(cont) != " ")
		{
			cadena = cadena.substring(cont, longitud);
			break;
		}
	}

	if(cont==longitud)
	{
		cadena="";
	}
	
	for(cont=cadena.length-1; cont>=0; cont--)
	{
		if(cadena.charAt(cont) != " ")
		{
			cadena = cadena.substring(0, cont+1);
			break;
		}
	}

	return cadena;
}

//INDICA SI EL CAMPO DE UN FORMULARIO ESTA VACIO O CONTIENE TAN SOLO ESPACIOS EN BLANCO.
//SI CONTIENE TEXTO, ELIMINA LOS ESPACIOS EN BLANCO SITUADOS AL COMIENZO O FINAL DEL MISMO.

function NoVacio(form)
{
	for(arg=1;arg<NoVacio.arguments.length;arg++)
	{
		with(eval("document.forms."+form+".elements[NoVacio.arguments[arg]]"))
		{
			//Elimino los espacios en blanco al principio y al final de la cadena			
			
			value=Trim(value);

			//Compruebo si se trata de una cadena vacía

			if(value=="")
				return false;
		}
	}

	return true;
}

//COMPRUEBA SI LA DIRECCIÓN DE EMAIL ES VÁLIDA

function ValidarEmail(form, campo)
{
	//Compruebo que la dirección de email introducida presenta una estructura correcta

	eval("email=document.forms."+form+"."+campo+".value");

	//Si el campo esta vacio no lo valido

	if(!email.length)
		return true;

	puntoFinal=false;
	arroba=false;
	cont=0;

	for(pos=0;pos<email.length;pos++)
	{	
		codASCII=email.charCodeAt(pos);
	
		//Si no es letra, número, '-' o '_'

		if((!EsLetra(codASCII))&&(!EsNumero(codASCII))&&(codASCII!=45)&&(codASCII!=95))
		{
			//Si es una arroba

			if((codASCII==64)&&(cont)&&(arroba==false))
			{
				arroba=true;
				cont=-1;
			}
			else
			{
				//Si es un punto
				
				if((codASCII==46)&&(cont))
				{
					if(arroba) puntoFinal=true;
					cont=-1;
				}
				else
					return false;
			}
		}
		
		cont++;
	}

	//Comprobamos que la dirección termina con una cadena de 2 o 3 letras despues del último punto

	if(((cont!=2)&&(cont!=3))||(puntoFinal==false))
		return false;

	return true;
}

//COMPRUEBA SI EL NÚMERO DE TELÉFONO ESTa FORMADO SOLO POR NÚMEROS

function ValidarTelefono(form, campo)
{
	eval("telefono=document.forms."+form+"."+campo+".value");

	//Si el campo esta vacio no lo valido

	if(!telefono.length)
		return true;

	for(pos=0;pos<telefono.length;pos++)
	{
		codASCII=telefono.charCodeAt(pos);
		if(!EsNumero(codASCII))
			return false;
		
	}

	return true;
}

//COMPRUEBA SI EL DNI ESTÁ FORMADO SOLO POR NÚMEROS

function ValidarDNI(form, campo)
{
	eval("dni=document.forms."+form+"."+campo+".value");

	//Si el campo esta vacio no lo valido

	if(!dni.length)
		return true;

	if(dni.length!=8)
		return false;

	for(pos=0;pos<dni.length;pos++)
	{
		codASCII=dni.charCodeAt(pos);
		if(!EsNumero(codASCII))
			return false;
		
	}

	return true;
}

//COMPRUEBA SI QUE EL FORMATO DEL NIF SEA CORRECTO

function ValidarNIF(form, campo)
{
	eval("nif=document.forms."+form+"."+campo+".value");

	//Si el campo esta vacio no lo valido
	
	if(!nif.length)
		return true;

	if(nif.length!=9)
		return false;

	//Compruebo que todos los caracteres menos el último son de tipo numérico

	for(pos=0;pos<nif.length-1;pos++)
	{
		codASCII=nif.charCodeAt(pos);
		if(!EsNumero(codASCII))
			return false;
		
	}
	
	cadena = "TRWAGMYFPDXBNJZSQVHLCKET";
	posicion = nif.substring(0,nif.length-1) % 23; 
	if(cadena.charAt(posicion)!=nif.charAt(nif.length-1))
		return false;
	

	return true;
}

//COMPRUEBA SI QUE EL FORMATO DEL CIF SEA CORRECTO

function ValidarCIF(form, campo)
{
	eval("cif=document.forms."+form+"."+campo+".value");

	//Si el campo esta vacio no lo valido
	
	if(!cif.length)
		return true;

	if(cif.length!=9)
		return false;
		
	//Compruebo que el primer digito es una letra de las permitidas

	lI = cif.charAt(0);

	if(lI!='A' && lI!='B' && lI!='C' && lI!='D' && lI!='E' && lI!='F' && lI!='G' && lI!='H' && lI!='K' && lI!='L' && lI!='M' && lI!='N' && lI!='P' && lI!='Q' && lI!='S')
		return false;

	//Compruebo que todos los caracteres menos el primero y último son de tipo numérico

	for(pos=1;pos<cif.length-1;pos++)
	{
		codASCII=cif.charCodeAt(pos);
		if(!EsNumero(codASCII))
			return false;
	}

	//Compruebo que el último dígito del CIF es correcto

	var aux = new Array(0,2,4,6,8,1,3,5,7,9);
	var tmp = 0;

	for(i=2;i<=6;i+=2)
	{
		tmp = tmp + aux[parseInt(cif.substr(i-1,1))];
		tmp = tmp + parseInt(cif.substr(i,1));
	};

	tmp = tmp + aux[parseInt(cif.substr(7,1))];
	tmp = (10-(tmp % 10));

	switch(tmp)
	{
		case 0: if(cif.charAt(cif.length-1) != '0' && cif.charAt(cif.length-1) != 'J') return false; break;
		case 1: if(cif.charAt(cif.length-1) != '1' && cif.charAt(cif.length-1) != 'A') return false; break;
		case 2: if(cif.charAt(cif.length-1) != '2' && cif.charAt(cif.length-1) != 'B') return false; break;
		case 3: if(cif.charAt(cif.length-1) != '3' && cif.charAt(cif.length-1) != 'C') return false; break;
		case 4: if(cif.charAt(cif.length-1) != '4' && cif.charAt(cif.length-1) != 'D') return false; break;
		case 5: if(cif.charAt(cif.length-1) != '5' && cif.charAt(cif.length-1) != 'E') return false; break;
		case 6: if(cif.charAt(cif.length-1) != '6' && cif.charAt(cif.length-1) != 'F') return false; break;
		case 7: if(cif.charAt(cif.length-1) != '7' && cif.charAt(cif.length-1) != 'G') return false; break;
		case 8: if(cif.charAt(cif.length-1) != '8' && cif.charAt(cif.length-1) != 'H') return false; break;
		case 9: if(cif.charAt(cif.length-1) != '9' && cif.charAt(cif.length-1) != 'I') return false; break;
		case 10:if(cif.charAt(cif.length-1) != '0' && cif.charAt(cif.length-1) != 'J') return false; break;
	}
	
	return true;
}

//COMPRUEBA SI EL NÚMERO ESTa FORMADO SOLO POR CARACTERES NUMÉRICOS Y DENTRO DEL RANGO PERMITIDO
//(Versión para usar directamente desde el formulario)

function ValidarNumero(form, campo, numMin, numMax)
{
	eval("numero=document.forms."+form+"."+campo+".value");

	//Si el campo esta vacio no lo valido

	if(!numero.length)
		return true;

	//Compruebo si todos los caracteres son numéricos

	marca = false;

	for(pos=0;pos<numero.length;pos++)
	{
		codASCII=numero.charCodeAt(pos);
		
		//Comprobamos que el '.' o ',' decimales no aparezcan en primera o última posición y solo lo hagan una vez
	
		if(codASCII == 44)
		{
			if(pos == 0 || pos == numero.length - 1 || marcaC == true)
				return false;
			else
				marcaC = true;
		}
		if(codASCII == 46)
		{
			if(pos == 0 || pos == numero.length - 1 || marcaP == true)
				return false;
			else
			{
				if(marcaC == true)
					return false;
				else
					marcaP = true;
			}
		}	

		if(!(EsNumero(codASCII) || codASCII == 46 || codASCII == 44))
			return false;
	}

	//Compruebo que el número se encuentra dentro del rango permitido

	if(numMin != "")
		if(parseFloat(numero) < parseFloat(numMin))
			return false;
	if(numMax != "")
		if(parseFloat(numero) > parseFloat(numMax))
			return false;
	
	return true;
}

//COMPRUEBA SI EL NÚMERO ESTa FORMADO SOLO POR CARACTERES NUMÉRICOS Y DENTRO DEL RANGO PERMITIDO
//(Versión para uso interno)

function IValidarNumero(numero, numMin, numMax)
{
	//Si el campo esta vacio no lo valido

	if(!numero.length)
		return true;

	//Compruebo si todos los caracteres son numéricos

	marcaP = false;
	marcaC = false;

	for(pos=0;pos<numero.length;pos++)
	{
		codASCII=numero.charCodeAt(pos);
		
		//Comprobamos que el '.' o ',' decimales no aparezcan en primera o última posición y solo lo hagan una vez
	
		if(codASCII == 44)
		{
			if(pos == 0 || pos == numero.length - 1 || marcaC == true)
				return false;
			else
				marcaC = true;
		}
		if(codASCII == 46)
		{
			if(pos == 0 || pos == numero.length - 1)
				return false;
			else
			{
				if(marcaC == true)
					return false;
				else
					marcaP = true;
			}
		}		

		if(!(EsNumero(codASCII) || codASCII == 46 || codASCII == 44))
			return false;
	}

	//Compruebo que el número se encuentra dentro del rango permitido

	if(numMin != "")
		if(parseFloat(numero) < parseFloat(numMin))
			return false;
	if(numMax != "")
		if(parseFloat(numero) > parseFloat(numMax))
			return false;
	
	return true;
}

//COMPRUEBA SI LA FECHA ES VALIDA

function ValidarFecha(form, campo, fechaMin, fechaMax)
{
	//Compruebo que la fecha introducida presenta una estructura correcta

	eval("fecha=document.forms."+form+"."+campo+".value");

	//Si el campo esta vacio no lo valido

	if(!fecha.length)
		return true;

	if(fecha.length!=10)
		return false;
	
	for(pos=0;pos<fecha.length;pos++)
	{	
		codASCII=fecha.charCodeAt(pos);
	
		//Si no es un número

		if(!(EsNumero(codASCII)&&(pos!=2)&&(pos!=5)))
			if(codASCII!=47)
				return false;
	}

	//Compruebo que la fecha es valida

	fechaEntrada=new Fecha();

	if(!fechaEntrada.ValidaFecha(fecha.substring(0,2),fecha.substring(3,5),fecha.substring(6,10)))
		return false;

	//Compruebo que la fecha se encuentra dentro del rango permitido

	if(fechaMin != "")
		if(!fechaEntrada.EsMayorIgual(fecha,fechaMin))
			return false;

	if(fechaMax != "")
		if(!fechaEntrada.EsMayorIgual(fechaMax,fecha))
			return false;

	return true;
}

//NO PERMITE ESCRIBIR UN CARACTER EN EL CAMPO DEL FORMULARIO SI NO ES NUMÉRICO O ','

function PonReal(form,campo)
{
	eval("n=document."+form+"."+campo+".value.length");

	tecla = window.event.keyCode;

	if (!(EsNumero(tecla) || tecla == 44))
		window.event.keyCode=0;
}

//NO PERMITE ESCRIBIR UN CARACTER EN EL CAMPO DEL FORMULARIO SI NO ES NUMÉRICO

function PonNumerico(form,campo)
{
	eval("n=document."+form+"."+campo+".value.length");

	tecla = window.event.keyCode;

	if (!EsNumero(tecla))
		window.event.keyCode=0;
}

function ActualizaCampoReal(numero)
{
	var numeroEntero = "";
	var decimales = "00";
	var posicionComa,cont = 1;

	//Comprobamos que se trata de un número real válido

	if(!IValidarNumero(numero,"0",""))
		return "0,00";

	//Modificamos el número introduciendo los decimales y números si este no los incluye ya

	//Obtener los decimales

	posicionComa = numero.length;

	for(pos=numero.length-1;pos>=0;pos--)
	{	
		//Compruebo si hay comas y en que posición estan		

		codASCII=numero.charCodeAt(pos);
	
		if(codASCII == 44)
		{
			decimales = numero.charAt(pos+1);
			if(pos+2<numero.length)
				decimales += numero.charAt(pos+2);
			posicionComa = pos;
			break;
		}
	}

	//Obtener la parte entera

	for(pos=posicionComa-1;pos>=0;pos--)
	{	
		codASCII=numero.charCodeAt(pos);

		if(codASCII != 46)
		{
			numeroEntero = numero.charAt(pos) + numeroEntero;	

			if(!(cont % 3) && pos > 0)
			{
				numeroEntero = "." + numeroEntero;
				cont = 0;
			}
			cont += 1;
		}
	}

	if(numeroEntero == "")
		numeroEntero = "0";

	return numeroEntero + "," + decimales ;
}

function ActualizaCampoReal2(numero)
{
	var numeroEntero = "";
	var decimales = "00";
	var posicionComa,cont = 1;

	//Comprobamos que se trata de un número real válido

	if(numero.length==0)
		return "999.999,99";
	else if(!IValidarNumero(numero,"0",""))
		return "0,00";

	//Modificamos el número introduciendo los decimales y números si este no los incluye ya

	//Obtener los decimales

	posicionComa = numero.length;

	for(pos=numero.length-1;pos>=0;pos--)
	{	
		//Compruebo si hay comas y en que posición estan		

		codASCII=numero.charCodeAt(pos);
	
		if(codASCII == 44)
		{
			decimales = numero.charAt(pos+1);
			if(pos+2<numero.length)
				decimales += numero.charAt(pos+2);
			posicionComa = pos;
			break;
		}
	}

	//Obtener la parte entera

	for(pos=posicionComa-1;pos>=0;pos--)
	{	
		codASCII=numero.charCodeAt(pos);

		if(codASCII != 46)
		{
			numeroEntero = numero.charAt(pos) + numeroEntero;	

			if(!(cont % 3) && pos > 0)
			{
				numeroEntero = "." + numeroEntero;
				cont = 0;
			}
			cont += 1;
		}
	}

	if(numeroEntero == "")
		numeroEntero = "0";

	return numeroEntero + "," + decimales ;
}

//LIMITA EL TAMAÑO MÁXIMO DEL CAMPO

function PonLimite(form,campo,limite)
{
	eval("n=document."+form+"."+campo+".value.length");

	if (n>=limite)
		window.event.keyCode=0;
}

//SOLO PERMITE ESCRIBIR CARACTERES VÁLIDOS PARA UN TIPO FECHA COMPLETANDO LA ENTRADA DE TEXTO
//CON LOS SEPARADORES '/' DE DÍA, MES Y AÑO

function PonFecha(form,campo)
{
	eval("n=document."+form+"."+campo+".value.length");

	tecla = window.event.keyCode;

	if(n<10)
	{
		if (!EsNumero(tecla))
			window.event.keyCode=0;
		else
			if (n==2||n==5)
				eval("document."+form+"."+campo+".value = document."+form+"."+campo+".value + '/'")
	}
	else
		window.event.keyCode=0;
}

//CONVIERTE A MAYÚSCULAS LOS CARACTERES DE UN CAMPO

function PonMayuscula(form,campo)
{
	eval("document.forms."+form+"."+campo+".value = document.forms."+form+"."+campo+".value.toUpperCase()");
}

//INDICA SI UN CARACTER ES UNA LETRA PERTENECIENTE AL ALFABETO INGLES

function EsLetra(codASCII)
{
	if((codASCII>=97)&&(codASCII<=122))
		return true;
	else
		return false;
}

//INDICA SI UN CARACTER ES UN NÚMERO

function EsNumero(codASCII)
{
	if((codASCII>=48)&&(codASCII<=57))
		return true;
	else
		return false;
}