// calculates the payments and updates for fields to // display the result function calcInterestRate(P, N, M) { var Y = 12; var mid, err_mid; var count; var low = 0.001; var high = 10.0; var count = 0; while(count < 30) { count = count + 1; mid = (high + low) / 2.0; err_mid = error(P, mid, N, Y, M); if(err_mid == 0.0) break; if(err_mid < 0.0) { low = mid; continue; } if(0.0 < err_mid) { high = mid; continue; } } var I = mid+.0001; I = parseInt(I * 10000)/100 if (I <= 0.1) { alert('Interest rate is to low! Please re-enter values ...'); return 0; } return I; } function FormatNumber(num,decimalNum,bolLeadingZero,bolParens,bolCommas){ if (isNaN(parseInt(num))) return "NaN"; var tmpNum = num; var iSign = num < 0 ? -1 : 1; // Get sign of number // Adjust number so only the specified number of numbers after // the decimal point are shown. tmpNum *= Math.pow(10,decimalNum); tmpNum = Math.round(Math.abs(tmpNum)) tmpNum /= Math.pow(10,decimalNum); tmpNum *= iSign; // Readjust for sign // Create a string object to do our formatting on var tmpNumStr = new String(tmpNum); // See if we need to strip out the leading zero or not. if (!bolLeadingZero && num < 1 && num > -1 && num != 0) if (num > 0) tmpNumStr = tmpNumStr.substring(1,tmpNumStr.length); else tmpNumStr = "-" + tmpNumStr.substring(2,tmpNumStr.length); // See if we need to put in the commas if (bolCommas && (num >= 1000 || num <= -1000)) { var iStart = tmpNumStr.indexOf("."); if (iStart < 0) iStart = tmpNumStr.length; iStart -= 3; while (iStart >= 1) { tmpNumStr = tmpNumStr.substring(0,iStart) + "," + tmpNumStr.substring(iStart,tmpNumStr.length) iStart -= 3; } } // See if we need to use parenthesis if (bolParens && num < 0) tmpNumStr = "(" + tmpNumStr.substring(1,tmpNumStr.length) + ")"; return tmpNumStr; // Return our formatted string! } function FormatPercent(num,decimalNum,bolLeadingZero,bolParens,bolCommas){ var tmpStr = new String(FormatNumber(num*100,decimalNum,bolLeadingZero,bolParens,bolCommas)); if (tmpStr.indexOf(")") != -1) { // We know we have a negative number, so place '%' inside of ')' tmpStr = tmpStr.substring(0,tmpStr.length - 1) + "%)"; return tmpStr; } else return tmpStr + "%"; // Return formatted string! } function error(P, I, N, Y, M) { var value; value = P - M * (1.0 - binomial(I / Y, -N)) / (I / Y); return value; } function binomial(a, n) { var i; var sum, prow, term, cof; if(n < 0) return 1.0 / binomial(a, -n); sum = 1.0; prow = n; term = 1; cof = 1.0 for(i = 1; i < 10; i++) { cof = cof * prow / i; prow = prow - 1.0; term = term * a; sum = sum + cof * term; } return sum; } function calcpayment(sInput) { var amt = 0;document.getElementById('amt').value; var ir = 0;document.getElementById('ir').value / 1200; var term = 0;document.getElementById('term').value * 12; var total=1; var mp = 0; var i=0; switch(sInput){ case 'Amount': mp = getValue(document.getElementById('payment').value); ir = getValue(document.getElementById('ir').value) / 1200; term = getValue(document.getElementById('term').value) * 12; for (i=0;i=400000){ tir = (tir-.625); } else if(amt>=300000){ tir = (tir-.875); } else if(amt>=250000){ tir = (tir-1); } else if(amt>=200000){ tir = (tir-1.25); } else if(amt>=150000){ tir = (tir-1.5); } else if(amt<=100000){ tir = (tir-2.5); } ntir = tir / 1200; total = 1; for (i=0;i

New Payment: '+formatCurrency(np)+'

Monthly Savings: '+formatCurrency(tmp)+'

Total Savings: '+formatCurrency(tmp*term)+'!'; } break; default: amt = getValue(document.getElementById('amt').value); ir = getValue(document.getElementById('ir').value) / 1200; term = getValue(document.getElementById('term').value) * 12; for (i=0;i "9")) { if ((thisChar != "$") && (thisChar !=".") && (thisChar != ",") && (thisChar != " ") && (thisChar !="")) foundAlphaChar = 1; } else { withDollar = withDollar + thisChar noJunk = noJunk + thisChar } if ((thisChar == "$") || (thisChar == ".") || (thisChar == ",")) { withDollar = withDollar + thisChar } } if (foundDecimal) { return parseFloat(noJunk); } else if (noJunk.length > 0) { return parseFloat(noJunk); } else return 0; } function highlight(field) { field.focus(); field.select(); } function doNewCalc(){ var amt = 0; var ir = 0; var term = 0; var total=1; var mp = 0; var i=0; //balance, amount, currentrate, newrate, oldterm, newterm, currentpayment, newpayment, savings amt = getValue(document.getElementById('amount').value); ir = getValue(document.getElementById('newrate').value) / 1200; term = getValue(document.getElementById('newterm').value) * 12; for (i=0;i=400000){ tir = (tir-.625); } else if(amt>=300000){ tir = (tir-.875); } else if(amt>=250000){ tir = (tir-1); } else if(amt>=200000){ tir = (tir-1.25); } else if(amt>=150000){ tir = (tir-1.5); } else if(amt<=100000){ tir = (tir-2.5); } ntir = tir / 1200; total = 1; for (i=0;i=400000){ tir = (tir-.625); } else if(amt>=300000){ tir = (tir-.875); } else if(amt>=250000){ tir = (tir-1); } else if(amt>=200000){ tir = (tir-1.25); } else if(amt>=150000){ tir = (tir-1.5); } else if(amt<=100000){ tir = (tir-2.5); } ntir = tir / 1200; total = 1; for (i=0;i

Monthly Savings: '+formatCurrency(tmp)+'

Total Savings: '+formatCurrency(tmp*term)+'!'; //New Payment: '+formatCurrency(np)+' //Monthly Savings: '+formatCurrency(tmp)+' //Total Savings: '+formatCurrency(tmp*term)+'!'; if (false){ //var balance = 200000; // for example //var periods = 360; // 30 years var monthlyRate = ((rate/100.0))/12; // 0.065= APR of 6.5% as decimal var monthyPayment = (monthlyRate /(1-(Math.pow((1+monthlyRate),-(term)))))*balance; for (var i=0; i<360; i++) { var interestForMonth = balance * monthlyRate; var principalForMonth = monthlyPayment - interestForMonth; balance -= monthlyPayment; // probably should be -= principalForMonth see comments below // output as necessary. } } }