

function Aleatorio (iMaxValor)
{
	return (Math.floor (iMaxValor * Math.random ()));
}


function CadenaAEntero (Cadena)
{	
	var Aux;

	while (Cadena.length > 0 && Cadena.substring (0, 1) == "0")	Cadena = Cadena.substring (1);
	Aux = Cadena.length;
	while (Aux > 0 && Cadena.substring (Aux - 1, Aux) == " ")
	{	Cadena = Cadena.substring (0, Aux - 1);
		Aux--;
	}

	Aux = parseInt (Cadena);
	if (isNaN (Aux)) { Aux = 0; }
	return (Aux);
}


function CadenaAFlotante (Cadena, SeparadorDecimal)
{	
	var Aux;
	var SeparadorMillar;
	
	if (typeof SeparadorDecimal == 'undefined') 
	{	SeparadorDecimal = ',';
		SeparadorMillar = '.'; 
	} else if (SeparadorDecimal == '.') 
	{ 	SeparadorMillar = ','; }
	else 
	{ 	SeparadorDecimal = ',';
		SeparadorMillar  = '.'; 
	}
	
	Aux = String (Cadena).replace (SeparadorMillar, '');
	if (SeparadorDecimal != '.') { Aux = Aux.replace (SeparadorDecimal, '.'); }
	return (parseFloat (Aux));
}


function CompararFechas (Fecha1, Fecha2)
{
	var Anyo1;
	var Anyo2;
	var Mes1;
	var Mes2;
	var Dia1;
	var Dia2;
	
	Fecha1 = FormatearFecha (Fecha1);
	Fecha2 = FormatearFecha (Fecha2);
	Anyo1  = CadenaAEntero (Fecha1.substr (6, 4));
	Anyo2  = CadenaAEntero (Fecha2.substr (6, 4));
	Mes1   = CadenaAEntero (Fecha1.substr (3, 2));
	Mes2   = CadenaAEntero (Fecha2.substr (3, 2));
	Dia1   = CadenaAEntero (Fecha1.substr (0, 2));
	Dia2   = CadenaAEntero (Fecha2.substr (0, 2));
	
	if (Anyo1 < Anyo2) return (-1);
	else if (Anyo1 > Anyo2 ) return (1);
	else if (Mes1 < Mes2) return (-1);
	else if (Mes1 > Mes2) return (1);
	else if (Dia1 < Dia2) return (-1);
	else if (Dia1 > Dia2) return (1);
	else return (0);
}


function FechaCorrecta (Cadena, CompletarAnyo)
{
	var Result = false;
	var Dia    = 0;
	var Mes    = 0;
	var Anyo   = 0;

	if (typeof CompletarAnyo == 'undefined') CompletarAnyo = true;
	if ((Cadena = FormatearFecha (Cadena, CompletarAnyo)))
	{	Dia  = CadenaAEntero (Cadena.substr (0, 2));
		Mes  = CadenaAEntero (Cadena.substr (3, 2));
		Anyo = CadenaAEntero (Cadena.substr (6, 4));
		if (Dia > 0 && Mes > 0 && Mes <= 12 && ((Anyo > 0 && CompletarAnyo) || (Anyo > 1000 && ! CompletarAnyo)))
		{	if (Mes == 2)
			{	if (Dia <= 28) Result = true;
				else Result = (Dia == 29) && (Anyo % 4 == 0);
			} else
			{	if (Mes == 4 || Mes == 6 || Mes == 9 || Mes == 11) Result = (Dia <= 30);
				else Result = (Dia <= 31);
			}
		} 
	}
	return (Result)
}


function FlotanteACadena (Valor, Decimales)
{
	var ParteEntera  = 0;
	var ParteDecimal = 0;
	var i, l;
	var Result       = '';
	var Aux;
	
	if (typeof Valor == 'undefined') Valor = 0;
	if (typeof Decimales == 'undefined') Decimales = 0;
	Valor = Redondear (Valor, Decimales);
	if (Valor < 0)
	{	Result = '-';
		Valor = Math.abs (Valor);
	}
	ParteEntera  = Math.floor (Valor);
	ParteDecimal = String (Redondear (Valor - ParteEntera, Decimales)).substring (2);

	Aux = String (ParteEntera);
	l = Aux.length;
	if (l > 3)
	{	Result += Aux.charAt (0);
		for (i = 1; i <= l; i++)
		{	if (i < l &&  (l - i) % 3 == 0) Result += '.';
			Result += Aux.charAt (i);
		}
	} else Result += Aux;
	if (Decimales > 0)
	{	Result += ',' + ParteDecimal;
		for (i = (Decimales - ParteDecimal.length); i > 0; i--) Result += '0';
	}
	return (Result);
}


function FormatearFecha (Cadena, CompletarAnyo)
{
	var Result = "";
	var Aux    = "";
	var Dia    = "";
	var Mes    = "";
	var Anyo   = "";
	var l      = Cadena.length;
	var j      = 1;
	var i      = 0;
	
	if (typeof CompletarAnyo == 'undefined') CompletarAnyo = true;
	if (l > 0)
	{	for (i = 0; i < l; i++)
		{	Aux = Cadena.charAt (i);
			if (Aux >= "0" && Aux <= "9")
			{	switch (j)
				{	case 1: Dia  += Aux; break;
					case 2:	Mes  += Aux; break;
					case 3: Anyo += Aux; break;
				}
			} else j++;
		}	
		Dia  = CadenaAEntero (Dia);
		Mes  = CadenaAEntero (Mes);
		Anyo = CadenaAEntero (Anyo);	
		if (Anyo > 0 && Anyo < 100 && CompletarAnyo) Anyo += 2000;
		if (Dia > 0 && Mes > 0 && Anyo > 0) 
			Result = PonerCeros (Dia, 2) + "/" + PonerCeros (Mes, 2) + "/" + Anyo;		
	}
	return (Result);
}


function PonerCeros (Valor, Longitud)
{
	var Result = "";
	if (Valor > 0)
	{	Result = String (Valor);
		for (i = Result.length; i < Longitud; i++) Result = "0" + Result;
	}
	return (Result);
}


function QuitarCeros (Cadena)
{
	while (Cadena.length > 0 && Cadena.substring (0, 1) == "0")	Cadena = Cadena.substring (1);
	return (Cadena);
}


function Redondear (Valor, Decimales)
{
	var Precision = Math.pow (10, Decimales);

	return (Math.round (Valor * Precision) / Precision);
}


//============================================================================================
//============================================================================================
//============================================================================================
//============================================================================================


function ValidarNIF (Control)
{
	var Nif      = Trim (Control.value.toUpperCase ());
	var Digitos  = 'TRWAGMYFPDXBNJZSQVHLCKE';
	var i        = 0;
	var Aux      = '';
	var l        = Nif.length;
	var Car      = 0;
	var Letras   = 0;
	var Result   = false;
	var Valor    = 0;
	
	for (i = 0; i < l; i++)
	{	Car = Nif.charAt (i);
		if (Car >= '0' && Car <= '9') Aux += Car;
		else if (Car >= 'A' && Car <= 'Z')
		{	Letras++;
			Aux += Car;
		}
	}
	l      = Aux.length;
	Result = Letras == 1 && l > 8 && Aux.charAt (l - 1) >= 'A';
	if (Result)
	{	Valor = CadenaAEntero (Aux.substr (0, l - 1));
		Result = Valor && Digitos.charAt (Valor % 23) == Aux.charAt (l - 1);
		if (Result) Control.value = Aux;
	}	
	return (Result);
}


function MesALetra (Mes)
{
	switch (Mes)
	{	case  1: return ('Enero');
		case  2: return ('Febrero');
		case  3: return ('Marzo');
		case  4: return ('Abril');
		case  5: return ('Mayo');
		case  6: return ('Junio');
		case  7: return ('Julio');
		case  8: return ('Agosto');
		case  9: return ('Septiembre');
		case 10: return ('Octubre');
		case 11: return ('Noviembre');
		case 12: return ('Diciembre');
	}
	return ('');
}


function EsNumero (Valor)
{
		var largo  = Valor.length; 
		var Result = true;
		for (i=0; i<largo; i++)
		{ Aux = parseInt(Valor.substr(i,1));
			if ((Valor.substr(i,1) != ',') && (Valor.substr(i,1) != '.'))
				if (isNaN(Aux))
				{	Result = false;
					i = largo;
				}
		}
			
		return (Result);
} 


function Base64Decode (sCadena)
{
	var l = sCadena.length;
	var i = 0;
	var j = 0;
	var v = 0;
	var r = 0;
	var sResult = '';

	for (i = 0; i < l; i++)
	{	v = _Base64AValor (sCadena.charAt (i));
		if (j == 0)	r = v;
		else if (j == 1)
		{	sResult += String.fromCharCode ((r << 2) + ((v & 48) >> 4));
			r = v & 15;
		} else if (j == 2)
		{	sResult += String.fromCharCode ((r << 4) + (v >> 2));
			r = (v & 3);
		} else
		{	sResult += String.fromCharCode ((r << 6) + v);
			r = 0;
		}
		if (j < 3) j++; 
		else j = 0;
	}
	return (sResult);
}


function _Base64AValor (cCaracter)
{
	if (cCaracter >= 'A' && cCaracter <= 'Z') return (cCaracter.charCodeAt (0) - 65);
	if (cCaracter >= 'a' && cCaracter <= 'z') return (cCaracter.charCodeAt (0) - 71);
	if (cCaracter >= '0' && cCaracter <= '9') return (cCaracter.charCodeAt (0) +  4);
	if (cCaracter == '+' || cCaracter == ' ') return (62);
	if (cCaracter == '/') return (63);
	return (0);
}
