
function ltrim(cadena,comodin)
{
	var i;
	var resultado='';

	if (cadena!=null && cadena!='')
	{
		for (i=0;i<cadena.length;i++)
		{
			if (cadena.substring(i,i+1)!=comodin || resultado.length>0)
			{
				resultado+=cadena.substring(i,i+1);
			}
		}
	}
	return resultado;
}
function rtrim(cadena,comodin)
{
	var i;
	var resultado='';

	if (cadena!=null && cadena!='')
	{
		for (i=cadena.length-1;i>=0;i--)
		{
			if (cadena.substring(i,i+1)!=comodin || resultado.length>0)
			{
				resultado=cadena.substring(i,i+1)+resultado;
			}
		}
	}
	return resultado;
}
function trim(cadena,comodin)
{
	return rtrim(ltrim(cadena,comodin),comodin)
}

function calcularNIF(dni)
{
	if (!/^\d{8}$/.test(dni)) {
	  return false;
	}
	var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
	var numero = dni%23;
	return letras.substring(numero,numero+1);
}

function controlarNIF(elemento)
{
	var valor='';
	valor=elemento.value.toUpperCase();
	var letra,caracterInicial,letraInicial;
	var resultado

	var soloNumeros;


	if (valor.length!=9)
	{
		soloNumeros='';
		for (i=0;i<valor.length;i++)
		{
			if (!isNaN(valor.substring(i,i+1)) && valor.substring(i,i+1)!=' ') soloNumeros+=valor.substring(i,i+1);
		}

		if (valor.length==8 && soloNumeros.length==8)
		{
			return 'El NIF introducido debería tener como letra la "'+calcularNIF(soloNumeros)+'"';
		}
		else
			return 'Un NIF tiene que tener un total de 9 caractéres y el que ha introducido tiene '+valor.length+' caracteres.';
	}

	caracterInicial = valor.substring(0,1).toUpperCase();

	if (!isNaN(caracterInicial))
		letraInicial = true;
	else
		switch (caracterInicial)
		{
			case ('A'): letraInicial=true;break;
			case ('B'): letraInicial=true;break;
			case ('C'): letraInicial=true;break;
			case ('D'): letraInicial=true;break;
			case ('E'): letraInicial=true;break;
			case ('F'): letraInicial=true;break;
			case ('G'): letraInicial=true;break;
			case ('H'): letraInicial=true;break;
			case ('P'): letraInicial=true;break;
			case ('Q'): letraInicial=true;break;
			case ('S'): letraInicial=true;break;
			case ('X'): letraInicial=true;break;
			default: letraInicial=false;
		}

		
	if ( (letraInicial!=true && !isNaN(valor.substring(valor.length-1,valor.length))) || (!isNaN(valor.substring(valor.length-1,valor.length)) && !isNaN(valor.substring(0,1))))
	{
		return 'El formato válido para un NIF es NNNNNNNNL y Para un CIF LNNNNNNNN o LNNNNNNNL. Siendo N un número entero y L la letra correspondiente a ese número en caso del NIF';
	}

	if (!isNaN(valor.substring(0,1)) && isNaN(valor.substring(valor.length-1,valor.length)) )
	{
		letra = valor.substring(valor.length-1,valor.length);
		soloNumeros='';
		for (i=0;i<valor.length;i++)
		{
			if (!isNaN(valor.substring(i,i+1)) && valor.substring(i,i+1)!=' ') soloNumeros+=valor.substring(i,i+1);
		}
		resultado = calcularNIF(soloNumeros);
		if (letra.toUpperCase()!=resultado && resultado!=false)
		{
			return 'La letra del NIF introducido no concuerda con el número. La letra para este número debería ser '+resultado;
		}
		else
			if (resultado==false)
			{
				return 'El NIF que ha introducido no tiene un formato adecuado.\nUn NIF con el formato correcto consta de 8 números y una letra. (Ejm. NNNNNNNNL)\n\nSiendo NNNNNNNN una serie de 8 números y L la letra correspondiente a dicho número';
			}
	}
	else
	{
		for (i=1;i<valor.length-1;i++)
			if (isNaN(valor.substring(i,i+1))) return 'El formato válido para un NIF es NNNNNNNNL y Para un CIF LNNNNNNNN o LNNNNNNNL. Siendo N un número entero y L la letra correspondiente a ese número en caso del NIF';
	}
	return '';
}
function textoEnMayusculas()
{
	var ascii, mayuscula
	ascii = window.event.keyCode;

	mayuscula = String.fromCharCode(ascii).toUpperCase();
	window.event.keyCode = mayuscula.charCodeAt(0);
}

function reemplazar(cadena, original, final)
{
	var i;
	var salida='';

	for (i=0;i<cadena.length;i++)
	{
		if (cadena.charAt(i) == original) salida = salida + final;
		else salida = salida + cadena.charAt(i);
	}
	return salida;
}
function CHtml(cadena)
{
	var aux = cadena;
	
	aux = reemplazar(aux,'&', '&amp;');
	aux = reemplazar(aux,'<', '&lt;');
	aux = reemplazar(aux,'>', '&gt;');
	aux = reemplazar(aux,'"', '&quot;');
	return aux;
}
function atributoHTML(cadena)
{
	return CHtml(cadena);
}
function CEntero(param)
{
	var cadena = param
	var salida ='';
	var i,j,k;
		for (i=0;i<cadena.length;i++)
		{
			if (parseInt(cadena.charAt(i))==cadena.charAt(i) || cadena.charAt(i)=='.') salida = salida + cadena.charAt(i);
		}
		j = salida.length;

		return salida;
}
function CReal(param)
{
	var cadena = param
	var salida ='';
	var i,j,k;
		for (i=0;i<cadena.length;i++)
		{
			if (cadena.charAt(i) == ',') salida = salida + '.'; else
				if (parseInt(cadena.charAt(i))==cadena.charAt(i) || cadena.charAt(i)=='.') salida = salida + cadena.charAt(i);
		}
		j = salida.length;
		while (k<j && salida.charAt(k)==".")
			k++;
		salida = salida.substring(k,salida.length);
		j = salida.length;
		while (j>0 && salida.charAt(j-1)==".")
			j--;
		cadena = salida.substring(0,j);
		salida = ""
		k=0

		for (i=cadena.length-1;i>=0;i--)
		{
			if (cadena.charAt(i) == "." && k<3) salida = cadena.charAt(i)+salida; else if (cadena.charAt(i) != ".") salida = cadena.charAt(i)+salida;
			k++;
		}
		cadena = ltrim(salida,'0');
		
		if (cadena.charAt(0)=='.') cadena = '0'+cadena;
		
		return cadena;
}
function formatoDinero(cifra)
{
	var resultado,posDecimal,decimales,i,j;
	var parteDecimal='';
	var parteEntera='';
	resultado='';
	if (CReal(cifra)!='')
	{
		resultado = CReal(cifra.toString()).replace('.',',');
		posDecimal = resultado.indexOf(',');
		if (posDecimal>=0)
		{
			decimales=resultado.length-(posDecimal+1);
			if (decimales==1) resultado+='0'
		}
		else
		{
			resultado+=',00'
			posDecimal = resultado.indexOf(',');
		}
		j=0;
		for (i=posDecimal-1;i>=0;i--)
		{
			j++;
			if (j>3)
			{
				parteEntera='.'+parteEntera;
				j=1;
			}
			parteEntera=resultado.charAt(i)+parteEntera;
		}
		resultado = parteEntera+resultado.substring(posDecimal,resultado.length);
		if (cifra.toString().charAt(0)=='-')
			return '-'+resultado;
		else
			return resultado;
	}else return '';
	
}
function cualEsMayor(cifra1,cifra2)
{
	var num1 = formatoDinero(cifra1)
	var num2 = formatoDinero(cifra2)

	var tama1 = num1.length;
	var tama2 = num2.length;

	if (tama1==0 && tama2==0)
	{
		return 0;
	}
	else
	if (tama1>0 && tama2==0)
	{
		if (num1.charAt(0)=='-') return 1;else return -1;
	}
	else
	if (tama1==0 && tama2>0)
	{
		if (num2.charAt(0)=='-') return -1;else return 1;
	}
	else
	if (num1.charAt(0)=='-' && num2.charAt(0)=='-')
	{
		if (tama1>tama2)
			return 1;
			else
				if (tama1<tama2)
					return -1;
					else
						if(tama1==tama2)
						{
							if (num1==num2)
								return 0;
								else
									if (num1>num2)
										return 1;
										else
											return -1
						}
	}
	else
	if (num1.charAt(0)!='-' && num2.charAt(0)!='-')
	{
		if (tama1>tama2)
			return -1;
			else
				if (tama1<tama2)
					return 1;
					else
						if(tama1==tama2)
						{
							if (num1==num2)
								return 0;
								else
									if (num1>num2)
										return -1;
										else
											return 1
						}
	}
	else
	if (num1.charAt(0)=='-' && num2.charAt(0)!='-')
	{
		return 1;
	}
	if (num1.charAt(0)!='-' && num2.charAt(0)=='-')
	{
		return -1;
	}
}
function cambiarDatos(tipo, argumento)
{
	var salida="";
	var cadena=tipo.value;
	var esNegativo;
	var j = 0
	var k = 0
	if (argumento == "dinero")
	{
		for (i=0;i<cadena.length;i++)
		{
			if (cadena.charAt(i) == '.') salida = salida + ','; else
				if (parseInt(cadena.charAt(i))==cadena.charAt(i) || cadena.charAt(i)==',') salida = salida + cadena.charAt(i);
		}

		j = salida.length;
		while (k<j && salida.charAt(k)==",")
			k++;
		salida = salida.substring(k,salida.length);
		j = salida.length;
		while (j>0 && salida.charAt(j-1)==",")
			j--;
		cadena = salida.substring(0,j);
		salida = ""
		k=0

		for (i=cadena.length-1;i>=0;i--)
		{
			if (cadena.charAt(i) == "," && k<3) salida = cadena.charAt(i)+salida; else if (cadena.charAt(i) != ",") salida = cadena.charAt(i)+salida;
			k++;
		}
		cadena = salida;
		tipo.value = cadena;
	}
	else
		if (argumento == "porcentaje")
		{
			for (i=0;i<cadena.length;i++)
			{
				if (cadena.charAt(i) == '.') salida = salida + ','; else
					if (parseInt(cadena.charAt(i))==cadena.charAt(i) || cadena.charAt(i)==',') salida = salida + cadena.charAt(i);
			}
			j = salida.length;
			while (k<j && salida.charAt(k)==",")
				k++;

			salida = salida.substring(k,salida.length);
			j = salida.length;

			while (j>0 && salida.charAt(j-1)==",")
				j--;

			cadena = salida.substring(0,j);
			salida = ""
			k=0
			for (i=cadena.length-1;i>=0;i--)
			{
				if (cadena.charAt(i) == "," && k<3) salida = cadena.charAt(i)+salida; else if (cadena.charAt(i) != ",") salida = cadena.charAt(i)+salida;
				k++;
			}
			cadena = salida;


			var entero=""
			var decimal=""
			j = cadena.length;
			k=0;
			while (k<j && cadena.charAt(k)!=",")
				k++;
			entero = cadena.substring(0,k);



			j = cadena.length;
			while (j>0 && cadena.charAt(j-1)!=",")
				j--;
			if (j!=0) decimal = cadena.substring(j,cadena.length);
			if (entero >= 100) {cadena = "100,00";if (entero > 100 || decimal>0) alert("El porcentaje no puede ser mayor que 100,00.")}
			tipo.value = cadena;
		}
		else
			if (argumento == "entero")
			{
				esNegativo = false;
				if (cadena.length>0)
				{
					if (cadena.charAt(0)=='-') esNegativo = true;
				}
				for (i=0;i<cadena.length;i++)
				{
					if (cadena.charAt(i) == '.') salida = salida + ','; else
						if (parseInt(cadena.charAt(i))==cadena.charAt(i) || cadena.charAt(i)==',') salida = salida + cadena.charAt(i);
				}
				j = salida.length;
				while (k<j && salida.charAt(k)==",")
					k++;

				salida = salida.substring(k,salida.length);
				j = salida.length;

				while (j>0 && salida.charAt(j-1)==",")
					j--;
				cadena = salida.substring(0,j);
				salida = ""
				k=0
				for (i=cadena.length-1;i>=0;i--)
				{
					if (cadena.charAt(i) == "," && k<3) salida = cadena.charAt(i)+salida; else if (cadena.charAt(i) != ",") salida = cadena.charAt(i)+salida;
					k++;
				}
				cadena = salida;

				var entero=""
				var decimal=""
				j = cadena.length;
				k=0;
				while (k<j && cadena.charAt(k)!=",")
					k++;
				entero = cadena.substring(0,k);

				cadena=entero
				if (esNegativo==true && cadena!='') cadena = '-'+cadena;
				tipo.value = cadena;
			}
		else
			if (argumento == "año")
			{
				for (i=0;i<cadena.length;i++)
				{
					if (cadena.charAt(i) == '.') salida = salida + ','; else
						if (parseInt(cadena.charAt(i))==cadena.charAt(i) || cadena.charAt(i)==',') salida = salida + cadena.charAt(i);
				}
				j = salida.length;
				while (k<j && salida.charAt(k)==",")
					k++;

				salida = salida.substring(k,salida.length);
				j = salida.length;

				while (j>0 && salida.charAt(j-1)==",")
					j--;
				cadena = salida.substring(0,j);
				salida = ""
				k=0
				for (i=cadena.length-1;i>=0;i--)
				{
					if (cadena.charAt(i) == "," && k<3) salida = cadena.charAt(i)+salida; else if (cadena.charAt(i) != ",") salida = cadena.charAt(i)+salida;
					k++;
				}
				cadena = salida;


				var entero=""
				var decimal=""
				j = cadena.length;
				k=0;
				while (k<j && cadena.charAt(k)!=",")
					k++;
				entero = cadena.substring(0,k);
				j = cadena.length;
				while (j>0 && cadena.charAt(j-1)!=",")
					j--;
				if (j!=0) decimal = cadena.substring(j,cadena.length);

				cadena=entero;
				if (cadena.length!=4) {alert("El año tiene que ser un número entero de cuatro dígitos.");tipo.value="";}else tipo.value = cadena;
			}
			else
				if (argumento == "CReal")
				{
					for (i=0;i<cadena.length;i++)
					{
						if (cadena.charAt(i) == ',') salida = salida + '.'; else
							if (parseInt(cadena.charAt(i))==cadena.charAt(i) || cadena.charAt(i)=='.') salida = salida + cadena.charAt(i);
					}

					j = salida.length;
					while (k<j && salida.charAt(k)==".")
						k++;
					salida = salida.substring(k,salida.length);
					j = salida.length;
					while (j>0 && salida.charAt(j-1)==".")
						j--;
					cadena = salida.substring(0,j);
					salida = ""
					k=0

					for (i=cadena.length-1;i>=0;i--)
					{
						if (cadena.charAt(i) == "." && k<3) salida = cadena.charAt(i)+salida; else if (cadena.charAt(i) != ".") salida = cadena.charAt(i)+salida;
						k++;
					}
					cadena = salida;
					return cadena;
				}
				else
					if (argumento == "CEntero")
					{
						for (i=0;i<cadena.length;i++)
						{
							if (cadena.charAt(i) == '.') salida = salida + ','; else
								if (parseInt(cadena.charAt(i))==cadena.charAt(i) || cadena.charAt(i)==',') salida = salida + cadena.charAt(i);
						}
						j = salida.length;
						while (k<j && salida.charAt(k)==",")
							k++;

						salida = salida.substring(k,salida.length);
						j = salida.length;

						while (j>0 && salida.charAt(j-1)==",")
							j--;
						cadena = salida.substring(0,j);
						salida = ""
						k=0
						for (i=cadena.length-1;i>=0;i--)
						{
							if (cadena.charAt(i) == "," && k<3) salida = cadena.charAt(i)+salida; else if (cadena.charAt(i) != ",") salida = cadena.charAt(i)+salida;
							k++;
						}
						cadena = salida;


						var entero=""
						var decimal=""
						j = cadena.length;
						k=0;
						while (k<j && cadena.charAt(k)!=",")
							k++;
						entero = cadena.substring(0,k);

						cadena=entero
						return cadena;
					}
					else
						if (argumento == "fecha")
						{
							if (tipo.value=='') return true;
							var cadena = trim(tipo.value,' ');
							var i=0;
							var dia,mes,anio
							dia='';mes='';anio='';

							while (i<cadena.length)
							{
								if (isNaN(cadena.substring(i,i+1)) || cadena.substring(i,i+1)==' ') break;
								dia+=cadena.substring(i,i+1)
								i++;
							}

							i++
							while (i<cadena.length)
							{
								if (isNaN(cadena.substring(i,i+1)) || cadena.substring(i,i+1)==' ') break;
								mes+=cadena.substring(i,i+1)
								i++;
							}

							i++
							while (i<cadena.length)
							{
								if (isNaN(cadena.substring(i,i+1)) || cadena.substring(i,i+1)==' ') break;
								anio+=cadena.substring(i,i+1)
								i++;
							}

							if (dia=='' || mes == '' || anio == '' || dia.length>2 || mes.length>2 || anio.length>4)
							{
								alert("La fecha tiene que tener este formato: DD/MM/AAAA. Siendo DD los dos dígitos que representan el día, MM los dos dígitos que representan el mes y AAAA los cuatro dígitos que representan el año.")
								tipo.focus();
								tipo.select();
								return false;
							}

							if (dia.length==2 && dia.substring(0,1)=='0') dia = dia.substring(1,2);
							if (mes.length==2 && mes.substring(0,1)=='0') mes = mes.substring(1,2);

							i=0;
							while (i<anio.length)
							{
								if (anio.substring(i,i+1)!=0) break;
								i++;
							}
							if (i > 0)
								if (i==anio.length) anio = 2000;
								else
									anio = anio.substring(i,i+1);

							anio = parseInt(anio);
							mes = parseInt(mes);
							dia = parseInt(dia);

							if ((anio > 99 && anio < 1754) || anio > 9999)
							{
								alert("Ha introducido un año inválido.\nLa fecha tiene que tener este formato: DD/MM/AAAA. Siendo DD los dos dígitos que representan el día, MM los dos dígitos que representan el mes y AAAA los cuatro dígitos que representan el año.")
								tipo.focus();
								tipo.select();
								return false;
							}

							if (anio <= 99)
							{
								if (anio>=30) anio += 1900;else anio += 2000;
							}


							if (mes < 1 || mes > 12)
							{
								alert("Ha introducido un mes inválido.\nLa fecha tiene que tener este formato: DD/MM/AAAA. Siendo DD los dos dígitos que representan el día, MM los dos dígitos que representan el mes y AAAA los cuatro dígitos que representan el año.")
								tipo.focus();
								tipo.select();
								return false;
							}

							var bisiesto=false;
							var maxDias;

							if (anio % 400 == 0) bisiesto = true;
							else
							if (anio % 4 == 0 && anio % 100 != 0) bisiesto = true;

							switch (mes)
							{
								case 1:{maxDias = 31;}break;
								case 2:
								{
									if (bisiesto) maxDias = 29; else maxDias = 28;
								}break;
								case 3:{maxDias = 31;}break;
								case 4:{maxDias = 30;}break;
								case 5:{maxDias = 31;}break;
								case 6:{maxDias = 30;}break;
								case 7:{maxDias = 31;}break;
								case 8:{maxDias = 31;}break;
								case 9:{maxDias = 30;}break;
								case 10:{maxDias = 31;}break;
								case 11:{maxDias = 30;}break;
								case 12:{maxDias = 31;}break;
							}

							if (dia < 1 || dia > maxDias)
							{
								alert("Ha introducido un día inválido.\nLa fecha tiene que tener este formato: DD/MM/AAAA. Siendo DD los dos dígitos que representan el día, MM los dos dígitos que representan el mes y AAAA los cuatro dígitos que representan el año.")
								tipo.focus();
								tipo.select();
								return false;
							}
							if (dia<10) dia = '0'+dia;
							if (mes<10) mes = '0'+mes;
							tipo.value = dia+'/'+mes+'/'+anio;
						}
						else
							if (argumento == "euros" && tipo.value!='')
							{

									var resultado,posDecimal,decimales
									var parteDecimal='';
									var parteEntera='';
									var cifra=tipo.value;
									resultado='';

									if (CReal(cifra)!='')
									{
										resultado = CReal(cifra.toString()).replace('.',',');
										posDecimal = resultado.indexOf(',');
										if (posDecimal>=0)
										{
											decimales=resultado.length-(posDecimal+1);
											if (decimales==1) resultado+='0'
										}
										else
										{
											resultado+=',00'
											posDecimal = resultado.indexOf(',');
										}
										j=0;
										for (i=posDecimal-1;i>=0;i--)
										{
											j++;
											if (j>3)
											{
												parteEntera='.'+parteEntera;
												j=1;
											}
											parteEntera=resultado.charAt(i)+parteEntera;
										}
										resultado = parteEntera+resultado.substring(posDecimal,resultado.length);
										if (cifra.toString().charAt(0)=='-')
											tipo.value = '-'+resultado;
										else
											tipo.value = resultado;
									}else tipo.value = '';

							}
}
