function round(value,precision) { var exp = Math.pow(10,precision); return Math.round(value*exp)/exp; } var activeForm = 0; function initialize() { document.chooseForm0.loanAmount.value = 5000; document.chooseForm0.loanInterest.value=8; document.chooseForm0.loanComissionType.value=1; document.chooseForm0.loanComissionValue.value=5; document.chooseForm0.loanComissionValueType.value=1; document.chooseForm0.loanTermNumber.value=12; document.chooseForm0.loanTermType.value=30; document.chooseForm0.loanInstallmentType.value=1; recalculate(document.chooseForm0.loanAmount,document.chooseForm0); } function recalculate(field,form) { if(field.type=="text") { if(field.value.indexOf(',')>0) field.value = field.value.replace(',','.'); var numberRegExp = new RegExp("^[0-9\.,]*$"); if(!numberRegExp.test(field.value)) field.value = field.value.replace(/[^0-9\.,]*/ig,''); //check for double decimal separator var firstSep = field.value.indexOf("."); var secondSep = firstSep>0?field.value.indexOf(".",firstSep+1):-1; if(firstSep>0 && secondSep>firstSep) { field.value = field.value.substring(0,secondSep); } if(field.value[field.value.length-1]=='.') return; } if(!form.loanAmount.value) return; var amount = parseFloat(form.loanAmount.value); var creditAmount = amount; var additionalCost = 0; var comission = 0; if(form.loanComissionType.value==0) { form.loanComissionValue.disabled=true; form.loanComissionValue.value=0; form.loanComissionValueType.disabled=true; }else { form.loanComissionValue.disabled=false; form.loanComissionValueType.disabled=false; if(form.loanComissionValueType.value==1) comission = round(parseFloat(form.loanComissionValue.value)/100*amount,2); else comission = round(parseFloat(form.loanComissionValue.value),2); switch(form.loanComissionType.value) { case "1"://dolicz creditAmount += comission; additionalCost += comission; break; case "2"://odlicz amount -= comission; additionalCost += comission; break; case "3"://oddzielnie additionalCost += comission; break; default: break; } } if(!form.loanTermNumber.value) return; var loanTerm = form.loanTermNumber.value * form.loanTermType.value; var loanInstallmentTerm = form.loanTermType.value; if(loanInstallmentTerm>30) loanInstallmentTerm = 30;//raty co najwyżej miesięczne var installmentCount = loanTerm/loanInstallmentTerm;//zakładamy tylko miesiące if(!form.loanInterest.value) return; var loanInterest = parseFloat(form.loanInterest.value)/100; var paymentAmounts = new Array(); var paymentTerms = new Array(); form.resultWithdraw.value = amount.toMoney(2,'.',' '); form.resultComission.value = comission.toMoney(2,'.',' '); if(form.loanInstallmentType.value==1) { var q = 1 + loanInterest/(360/loanInstallmentTerm); var installment = round(creditAmount * Math.pow(q,installmentCount) * ((q-1)/(Math.pow(q,installmentCount)-1)),2); form.resultInstallmentFirst.value = installment.toMoney(2,'.',' '); form.resultInstallmentLast.value = installment.toMoney(2,'.',' '); var interestsTotal = installment*installmentCount-creditAmount; form.resultInstallmentTotal.value = (interestsTotal).toMoney(2,'.',' '); form.resultTotalCost.value = (interestsTotal+additionalCost).toMoney(2,'.',' '); for(var i=0;i0) { paymentAmounts[paymentAmounts.length] = additionalCost; paymentTerms[paymentTerms.length] = 0; } form.resultAPR.value = round(rrso(loanInterest,creditAmount,paymentAmounts,paymentTerms)*100,2).toMoney(2,'.',' '); /* kwota zaciągniętego kredytu (kwota początkowa) = 100 000 zł oprocentowanie w skali roku = 3,5% okres kredytu = 12 lat ilość rat w roku = 12 Pierwsza rata: część kapitałowa = 100 000/(12*12) = 694,44 zł część odsetkowa = 100 000 * 3,5%/12 = 291,67 zł rata = 694,44 + 291,67 = 986,11 zł Druga rata: część kapitałowa = 100 000/(12*12) = 694,44 zł część odsetkowa = (100 000 - 694,44) * 3,5%/12 = 289,64 zł rata = 694,44 + 289,64 = 984,08 zł*/ /* S – kwota zaciągniętego kredytu n – ilość rat q – współczynnik równy 1 + (r / m), gdzie q^n – „q” do potęgi „n” r – oprocentowanie kredytu m – ilość rat w okresie dla którego obowiązuje oprocentowanie „r”. Najczęściej oprocentowanie podawanej jest w skali roku, a raty płacone są co miesiąc, więc „m” wtedy jest równe 12. */ } function rrso(interest,amount,paymentAmounts,paymentTerms) { var a = 0; var b = interest; while(rrso_single(b,amount,paymentAmounts,paymentTerms)<0) b *= 2; var avg; do { var avg = (a+b)/2; res = rrso_single(avg,amount,paymentAmounts,paymentTerms); if(res<0) a = avg; else b = avg; }while(Math.abs(res)>0.001); return avg; } function rrso_single(interest,amount,paymentAmounts,paymentTerms) { var res = 0; for(var i=0; i-1) { classes = classes.replace (classname, "") } obj.className = classes } Number.prototype.toMoney = function(decimals, decimalSeparator, thousandsSeparator) { var n = this; c = isNaN(decimals) ? 2 : Math.abs(decimals); d = decimalSeparator || '.'; t = (typeof thousandsSeparator === 'undefined') ? ' ' : thousandsSeparator; sign = (n < 0) ? '-' : '', i = parseInt(n = Math.abs(n).toFixed(c)) + '', j = ((j = i.length) > 3) ? j % 3 : 0; return sign + (j ? i.substr(0, j) + t : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ''); }