// Powered OKODEX
function f_calcular_importe(interes, capital, plazo) {
	interescuo = ((interes/1200));
	fimporte = Math.round((capital*interescuo*Math.pow(1+interescuo,plazo)) / (Math.pow((1+interescuo),plazo)-1)*100,0)/100;
	return fimporte;
}

function f_calcular_capital(interes, importe, plazo) {
	interescuo = ((interes/1200));
	fcapital = Math.round((Math.pow((1+interescuo),plazo)-1)*importe / (interescuo*Math.pow(1+interescuo,plazo))*100,0)/100;
	return fcapital;
}

function f_calcular_interes(capital, importe, plazo) {
		inter = 4.5;
		do {
			interescuo = ((inter/1200));
			res = capital*((Math.pow(1+interescuo,plazo)*interescuo)/(Math.pow(1+interescuo,plazo)-1))
			if(parseInt(res)>importe) inter=inter-0.01;
			if(parseInt(res)<importe) inter=inter+0.01;
			comparo=(parseInt(importe))+parseInt(31)
			comparo1=(parseInt(importe))-parseInt(31)
		} while (parseInt(res)>parseInt(comparo) || parseInt(res)<parseInt(comparo1))
		finteres=parseInt(inter*100)/100;
		return finteres;
}

function f_calcular_plazo(interes, importe, capital) {
	interescuo = (interes/1200);
	fplazo = Math.round( (Math.log(importe) - Math.log(importe+(-capital*interescuo)) ) / Math.log(1+interescuo) , 0);
	return fplazo;
}

function f_calc_hipoteca(tipo) {
	form = document.CalcHipoteca; /*document.forms[0];*/
	borradato(tipo);
	importe = toFloat(form.importe.value);
	capital = toFloat(form.capital.value);
	interes = parseFloat((form.intereses.value.replace(",",".")));
	plazo = toFloat((form.plazo.value));
	ncb = 0;
	if(isNaN(importe) || importe==0) ncb++;
	if(isNaN(capital) || capital==0) ncb++;
	if(isNaN(interes) || interes==0) ncb++;
	if(isNaN(plazo) || plazo==0) ncb++;
	if(ncb!=1) {
		alert("Debes dejar sólo un campo en blanco"); return;
	}
	if(isNaN(importe) || importe==0) {
		/* Calcular la cuota mensual */
		importe = f_calcular_importe(interes, capital, plazo); 
		if(isNaN(importe)) { alert("Has introducido una combinación no válida de Capital, Intereses y Plazo."); return; }
		form.importe.value = toStr(importe)+"";
	} else if(isNaN(capital) || capital==0) {
		/* Calcular el capital de la hipoteca */
		capital = f_calcular_capital(interes, importe, plazo);
		if(isNaN(capital)) { alert("Has introducido una combinación no válida de Intereses, Plazo y Mensualidad."); return; }
		form.capital.value = toStr(capital)+"";
	} else if(isNaN(interes) || interes==0) {
		/* Calcular el interes de la hipoteca*/
		interes= f_calcular_interes(capital, importe, plazo);
		if(isNaN(interes)) { alert("Has introducido una combinación no válida de Capital, Plazo y Mensualidad."); return; }
		form.intereses.value = toStr(interes);
		alert("Se ha modificado el Capital inicial para que sea coherente con el resultado de los intereses.");
		capital = f_calcular_capital(interes, importe, plazo);
		if(isNaN(capital)) { alert("Has introducido una combinación no válida de Intereses, Plazo y Mensualidad."); return; }
		form.capital.value = toStr(capital)+"";
	} else if(isNaN(plazo) || plazo==0) {
		/* Calcular el plazo en meses */
		plazo = f_calcular_plazo(interes, importe, capital);
		if(isNaN(plazo)) { alert("Has introducido una combinación no válida de Capital, Intereses y Mensualidad."); return; }
		form.plazo.value = toStr(parseInt(plazo*10)/10);
		// plazo = plazo * cuotas;
		alert("Se ha modificado el Capital inicial para que sea coherente con el resultado del plazo en valores enteros.");
		capital = f_calcular_capital(interes, importe, plazo);
		if(isNaN(capital)) { alert("Has introducido una combinación no válida de Intereses, Plazo y Mensualidad."); return; }
		form.capital.value = toStr(capital)+"";
	}
}
