//Simulazione prestiti e finanziamenti by Utifin.com®

function cEuroToCurr(Num)
{
Num=Num*100; Num=(Math.round(Num))/100; var Numstr = Num.toString(); var decpos = Numstr.indexOf("."); if(decpos == -1)
decpos = Numstr.length; else Numstr = Numstr.substr(0,decpos) + "," + Numstr.substr(decpos+1,Numstr.length); var l=0;
if((decpos%3) == 0) l=(Math.floor(decpos)/3)-1; else l=Math.floor(decpos)/3;
//alert(decpos+"    "+l);
for (i=1 ; i<=l; i++)
{
Numstr = Numstr.substr(0,decpos-(3*i)) + '.' + Numstr.substr(decpos-(3*i), Numstr.length);
}
return Numstr;
}
function FloatToPercString(num,ndig)
{
var tmpStr = String(Math.floor(num*10000));
return tmpStr.substr(0,tmpStr.length - ndig) + "," + tmpStr.substr(tmpStr.length - ndig,tmpStr.length)+ "%";
}
function SeparatorExist_Taeg_Importo(str)
{
if (str.indexOf(".")!=-1)
{
alert("L'importo del prestito o finanziamento da simulare è sbagliato: specifica solo numeri e usa la virgola per una cifra decimale !");
return true;
}
else
return false;
}
function SeparatorExist_Taeg_Spese(str)
{
if (str.indexOf(".")!=-1)
{
alert("I costi accessori da simulare non sono validi: specifica solo numeri e usa la virgola per una cifra decimale !");
return true;
}
else
return false;
}
function Calculate()
{
var strTasso = new String(document.frmDati.tasso.value);
if ((!SeparatorExist_Taeg_Importo(document.frmDati.capitale.value))&&(!SeparatorExist_Taeg_Spese(document.frmDati.spese.value)))
{
var capitale = document.frmDati.capitale.value;
if (capitale.indexOf(".")!=-1){
alert("L'importo del prestito o finanziamento da simulare è sbagliato: specifica solo numeri e usa la virgola per una cifra decimale !");
return;
}
while(capitale.indexOf(",")!=-1)
{
capitale=capitale.substr(0,capitale.indexOf(","))+ "." + capitale.substr(capitale.indexOf(",")+1,capitale.length);
}
if(isNaN(capitale)||(capitale < 0))
{
alert("L'importo del prestito o finanziamento da simulare è sbagliato: specifica solo numeri e usa la virgola per una cifra decimale !");
return;
}
var durata;
durata = document.frmDati.durata.value;
if((durata.indexOf(",")!=-1) || (durata.indexOf(".")!=-1)){
alert("Il numero delle rate da simulare è sbagliato: necessita descriverle solo con un valore numerico intero !");
return;
}
durata = parseInt(durata);
if(isNaN(durata))
{
alert("Il numero delle rate da simulare è sbagliato: necessita descriverle solo con un valore numerico intero !");
return;
}
var tasso = document.frmDati.tasso.value;
if (tasso.indexOf(".")!=-1){
alert("Il tasso annuale nominale tan da simulare è sbagliato: specifica solo numeri e usa la virgola per una cifra decimale !");
return;
}
while(tasso.indexOf(",")!=-1)
{
tasso=tasso.substr(0,tasso.indexOf(","))+ "." + tasso.substr(tasso.indexOf(",")+1,tasso.length);
}
if(isNaN(tasso)||(tasso <= 0))
{
alert("Il tasso annuale nominale tan da simulare è sbagliato: specifica solo numeri e usa la virgola per una cifra decimale !");
return;
}
tasso = tasso / 100;
var spese = document.frmDati.spese.value;
if (spese.indexOf(".")!=-1){
alert("I costi accessori da simulare non sono validi: specifica solo numeri e usa la virgola per una cifra decimale !");
return;
}
while(spese.indexOf(",")!=-1)
{
spese=spese.substr(0,spese.indexOf(","))+ "." + spese.substr(spese.indexOf(",")+1,spese.length);
}
if(spese == ""){
spese = 0;
} else {
if(isNaN(spese)||(spese < 0))
{
alert("I costi accessori da simulare non sono validi: specifica solo numeri e usa la virgola per una cifra decimale !");
return;
}
}
if (capitale < 150) {
alert("Attenzione ! Specifica un importo che sia di almeno 150 euro !");
return;
}
if ((durata > 600) || (durata < 6)){
alert("Il numero mensile delle rate da simulare è sbagliato: deve essere compreso tra le 6 e le 600 rate mensili !");
return;
}
if(((capitale*durata*tasso)==0)||(isNaN(spese)))
{
alert("Ricontrolla la correttezza dei dati inseriti !");
return;
}
capitale = capitale * 1936,27;
spese = spese *1936,27;
var rata = Math.round(capitale * (tasso/12)/(1-Math.pow((1+tasso/12),-(durata))));
var cap_reale = capitale - spese;
var tmp_reale = 0;
var taeg = 0.001;
var step = 0.01;
var fwd = true;
for (i=1; i<=durata; i++)
{
var tmpSommat = rata/Math.pow((1+taeg),(i*30.4375)/365);
tmp_reale += tmpSommat;
}
if ( ( cap_reale - tmp_reale ) < 0 )
fwd = false;
while ( Math.abs( tmp_reale - cap_reale ) > 0.000001 )
{
tmp_reale = 0;
if ( fwd == true )
{
taeg += step;
}
else
{
taeg -= step;
}
for (i=1; i<=durata; i++)
{
var tmpSommat = rata/Math.pow((1+taeg),(i*30.4375)/365);
tmp_reale += tmpSommat;
}
if ( (( tmp_reale - cap_reale ) > 0)&& (fwd != true))
{
step /= 2;
fwd = true;
}
else if (( tmp_reale - cap_reale ) < 0 && (fwd == true) )
{
step /= 2;
fwd = false;
}
}
rata = rata / 1936,27;
document.frmDati.saggiotan.value= cEuroToCurr(rata);
document.frmDati.taeg.value= FloatToPercString(taeg,2);
}
else
{
//document.frmDati.capitale.value= "";
}
}
