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);
}
