function ajax()
{
	var pagina_requerida = false;
	if (window.XMLHttpRequest)
	{
		pagina_requerida = new XMLHttpRequest ();
	} 
	else 
	if (window.ActiveXObject)
	{
		try 
		{
			pagina_requerida = new ActiveXObject ("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				pagina_requerida = new ActiveXObject ("Microsoft.XMLHTTP");
			}
			catch (e)
			{
			}
		}
	}
	else
	{
		pagina_requerida = false;
	}

	return pagina_requerida;	
}

function CFecha(valor)
{
	if (valor=='') return '';
	var cadena = trim(valor,' ');
	var i=0;
	var dia,mes,anio;
	var resultado='';
	
	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.");
		return '';
	}

	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.")
		return '';
	}

	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.")
		return '';
	}

	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.")
		return '';
	}
	if (dia<10) dia = '0'+dia;
	if (mes<10) mes = '0'+mes;

	return dia+'/'+mes+'/'+anio;
}
function controlarFecha(obj)
{
    if (trim(obj.value)!='')
    {
        resultado = CFecha(obj.value);

        
        if (trim(resultado)=='')
        {
            obj.focus();
            obj.value='';
        }
        else
        {
            obj.value=resultado;
        }
    }
}


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 etrim(cadena)
{
	return rtrim(ltrim(cadena,' '),' ');
}

function calcularNIF(dni)
{
	if (!/^\d{8}$/.test(dni)) {
	  return false;
	}
	var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
	var numero = dni%23;
	return letras.substring(numero,numero+1);
}

function validarCIF(texto){

	var pares = 0;
	var impares = 0;
	var suma;
	var ultima;
	var unumero;
	var uletra = new Array("J", "A", "B", "C", "D", "E", "F", "G", "H", "I");
	var xxx;

	texto = texto.toUpperCase();

	var regular = new RegExp(/^[ABCDEFGHKLMNPQS]\d\d\d\d\d\d\d[0-9,A-J]$/g);
	 if (!regular.exec(texto)) return false;

	 ultima = texto.substr(8,1);

	 for (var cont = 1 ; cont < 7 ; cont ++){
		 xxx = (2 * parseInt(texto.substr(cont++,1))).toString() + "0";
		 impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1));
		 pares += parseInt(texto.substr(cont,1));
	 }
	 xxx = (2 * parseInt(texto.substr(cont,1))).toString() + "0";
	 impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1));

	 suma = (pares + impares).toString();
	 unumero = parseInt(suma.substr(suma.length - 1, 1));
	 unumero = (10 - unumero).toString();
	 if(unumero == 10) unumero = 0;

	 if ((ultima == unumero) || (ultima == uletra[unumero]))
		 return true;
	 else
		 return false;

}

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 'La letra del NIF introducido no concuerda con el número.';
		}
		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 (caracterInicial=='X' && isNaN(valor.substring(valor.length-1,valor.length)) )
    {
        soloNumeros = valor.substring(1,valor.length-1);
        
        if (isNaN(soloNumeros)) 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';
        
        letra = calcularNIF('0'+soloNumeros);
        if (letra.toUpperCase() == valor.substring(valor.length-1,valor.length).toUpperCase())
            return '';
        else
            return 'La letra del NIF introducido no concuerda con el número.';
    }
    else
	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.';
		}
		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';

		if (!validarCIF(valor)) return 'El CIF introducido no es válido.';
	}
	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 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;
	}
}