function capital(cuota, interes_anual, anyos, periodos_anyo)

{

	interes_anual /= 100;

	var aux = 1.0 - Math.pow((1.0 + interes_anual / periodos_anyo), -(anyos * periodos_anyo));

	return(cuota * aux / (interes_anual / periodos_anyo));

}

function cuota(capital, interes_anual, anyos, periodos_anyo)

{

	interes_anual /= 100;

	var aux = 1.0 - Math.pow((1.0 + interes_anual / periodos_anyo), -(anyos * periodos_anyo));

	return(capital * (interes_anual / periodos_anyo) / aux);

}

function cuotav(capital, interes_f, anyos_f, interes_v, anyos_v, periodos_anyo)

{

	var cuota_fija = cuota(capital, interes_f, anyos_f + anyos_v, periodos_anyo);

	

	if (anyos_v > 0)

	{

		var capital_restante, capital_amortizado, interes_amortizado, pagos_fijo, i;

		pagos_fijo = anyos_f * periodos_anyo;

		capital_restante = capital;

		for(i = 1; i <= pagos_fijo; i++)

		{

			interes_amortizado = capital_restante * interes_f / (periodos_anyo * 100.0);

			capital_amortizado = cuota_fija - interes_amortizado;

			capital_restante = capital_restante - capital_amortizado;

		}



		return cuota(capital_restante, interes_v, anyos_v, periodos_anyo);

	}

	return cuota_fija;

}

function tae(C, c, n, q)

{

	if (isNaN(c)) return NaN;

	

	var max_dif = 1; if (c < 2) max_dif = 0.2

	var I = 5.0;

	var increm = 1.0;

	var c_aux = cuota(C, I, n, q);

	var dif = c - c_aux;

	var dif_aux ,maxloops = 50;

	

	increm = Math.abs(increm) * (dif / Math.abs(dif)); // poner el signo correcto

	

	if (isNaN(c_aux)) return NaN;



	for (var counter = 0; Math.abs(dif) > max_dif && counter <= maxloops; ++counter)

	{

		I += increm;

		c_aux = cuota(C, I, n, q);

		dif_aux = dif;

		dif = c - c_aux;

		

		increm = dif * increm / (dif_aux - dif);

	//	increm = Math.abs(increm) * (dif / Math.abs(dif)); // poner el signo correcto (no hace falta)

	}



	return I;

}

function plazo(C, c, I, q)

{

	if (isNaN(c)) return NaN;



	var maxloops = 1000;

	var dif_aux = 0;

	var n = 25.0;

	var increm = 1.0;

	var c_aux = cuota(C, I, n, q);

	var dif = c_aux - c;



	if (isNaN(c_aux)) return NaN;



	for (var counter = 0; n > 0 && n <= 100 && counter < maxloops; counter++) // counter se a?ade para evitar un blucle infinito en caso de errores en el c?digo

	{



		if (Math.abs(dif + dif_aux) < Math.max(dif, dif_aux)) // ((Math.abs(dif) + Math.abs(dif_aux))))

		{

			if (Math.abs(dif) < Math.abs(dif_aux))

				return n;

			else

				return n - increm;

		}

		increm = Math.abs(increm) * (dif / Math.abs(dif)); // poner el signo correcto

		n += increm;

		c_aux = cuota(C, I, n, q);

		dif_aux = dif;

		dif = c_aux - c;

	}

	return n;

}

//_________________________________________________________

function isEmpty(s){return ((s == null) || (s.length == 0));}

function redondear(numero, decimales)

{

	if (isEmpty(numero) || numero == '-' || numero == '+')

		return '';

	if (numero > 99999999999) // los numeros grandes los aproxima como quiere...

		return numero;

	if (isEmpty(decimales)) decimales = 0;

	var aux = Math.pow(10, decimales);

	return (Math.round(numero * aux)/aux);

}