/*****************************************
(C) http://www.calculator.net all right reserved.  
*****************************************/
var dataArray=new Array();var newDataArray=new Array();var theLoanTerm=0;var delayShow=true;function getMonthYear(A){pg=Math.floor(A/12);mp=A-pg*12;if(pg==0){return mp.toFixed(2)+" months"}else{return pg+" years "+mp.toFixed(2)+" months"}}function calc(){showquickmsg("calculating...",true);gObj("resulttable").innerHTML="";setTimeout("process()",2)}function process(){UP=gObj("cloanamount").value;ot=gObj("cloanterm").value;nA=gObj("cinterestrate").value;uE=gObj("cremainingyear").value;nC=gObj("cremainingmonth").value;Xl=gObj("cadditional").value;MY=true;if(gObj("cpayoff2").checked){MY=false}BJ=0;Bv=0;Va=0;dd=(document.domain+"").toLowerCase();if((dd!="\x6C\x6F\x63\x61\x6C\x68\x6F\x73\x74")&&(dd.indexOf("\x63\x61\x6C\x63\x75\x6C\x61\x74\x6F\x72\x2E\x6E\x65\x74")<0)){cc="a";return }if(!isNumber(UP)){showquickmsg("loan amount need to be numeric",true);return }else{if(!isNumber(ot)){showquickmsg("loan term need to be numeric",true);return }else{if((ot<1)||(ot>50)){showquickmsg("loan term need to be a number between 0 and 50",true);return }else{if(!isNumber(nA)){showquickmsg("interest rate need to be numeric",true);return }else{if((nA<-200)||(nA>200)){showquickmsg("interest rate needs to be between -200 and 200",true);return }else{if(!isNumber(uE)){showquickmsg("remaining year need to be numeric",true);return }else{if((uE<0)||(uE>50)){showquickmsg("remaining year needs to be between 0 and 50",true);return }else{if(!isNumber(nC)){showquickmsg("remaining month need to be numeric",true);return }else{if((nC<0)||(nC>11)){showquickmsg("remaining month needs to be between 0 and 11",true);return }else{if(!MY){if(!isNumber(Xl)){showquickmsg("additional monthly payment need to be numeric",true);return }if(Xl<0){showquickmsg("additional monthly payment need to be positive",true);return }}}}}}}}}}}if(typeof (cc)!="undefined"){return }ot=parseInt(ot);uE=parseInt(uE);nC=parseInt(nC);if(ot<=(uE+nC/12)){showquickmsg("time remaining should be shorter than loan term",true);return }if(MY){Xl=0}else{Xl=parseFloat(Xl)}sN=parseInt(ot*12-uE*12-nC);XE=nA/100/12;if(XE==0){Gp=UP/ot/12}else{Gp=(XE/(1-Math.pow((1+XE),(-ot*12))))*UP}tJ=parseInt(ot*12);DB=ot*12-tJ;iJ=new Array();for(A=1;A<=(ot*12);A++){iJ[(A-1)]=new Array();Sx=Math.pow((1+XE),A);if(XE==0){Wu=UP-A*Gp}else{Wu=Sx*UP-((Sx-1)/XE)*Gp}if(A==1){iJ[(A-1)][0]=UP}else{iJ[(A-1)][0]=iJ[(A-2)][1]}iJ[(A-1)][1]=Wu;iJ[(A-1)][2]=Gp;iJ[(A-1)][3]=Gp-(iJ[(A-1)][0]-iJ[(A-1)][1]);if(A==1){iJ[(A-1)][4]=iJ[(A-1)][3]}else{iJ[(A-1)][4]=iJ[(A-1)][3]+iJ[(A-2)][4]}}if(DB>0.0001){iJ[tJ]=new Array();iJ[tJ][0]=iJ[(tJ-1)][1];iJ[tJ][1]=0;iJ[tJ][2]=DB*Gp;iJ[tJ][3]=iJ[tJ][2]-(iJ[tJ][0]-iJ[tJ][1]);iJ[tJ][4]=iJ[(tJ-1)][4]+iJ[tJ][3]}else{tJ--}Cw=iJ[(sN-1)][1];OG=Gp+Xl;DV=new Array();Hl=0;cm=0;for(A=1;A<=sN;A++){DV[(A-1)]=new Array();Sx=Math.pow((1+XE),A);if(XE==0){Wu=UP-A*Gp}else{Wu=Sx*UP-((Sx-1)/XE)*Gp}if(A==1){DV[(A-1)][0]=UP}else{DV[(A-1)][0]=DV[(A-2)][1]}DV[(A-1)][1]=Wu;DV[(A-1)][2]=Gp;DV[(A-1)][3]=Gp-(DV[(A-1)][0]-DV[(A-1)][1]);if(A==1){DV[(A-1)][4]=DV[(A-1)][3]}else{DV[(A-1)][4]=DV[(A-1)][3]+DV[(A-2)][4]}}if(MY){DV[(sN)]=new Array();DV[(sN)][0]=DV[(sN-1)][1];DV[(sN)][2]=Cw;DV[(sN)][3]=0;DV[(sN)][1]=0;DV[(sN)][4]=DV[(sN)][3]+DV[(sN-1)][4]}else{for(A=(sN+1);A<=(ot*12);A++){DV[(A-1)]=new Array();Sx=Math.pow((1+XE),A);if(A==1){DV[(A-1)][0]=UP}else{DV[(A-1)][0]=DV[(A-2)][1]}if(DV[(A-1)][0]>=OG){DV[(A-1)][2]=OG;DV[(A-1)][3]=DV[(A-1)][0]*XE;DV[(A-1)][1]=DV[(A-1)][3]+DV[(A-1)][0]-OG}else{DV[(A-1)][2]=DV[(A-1)][0];DV[(A-1)][3]=DV[(A-1)][0]*XE;DV[(A-1)][1]=0;cm=A;Hl=DV[(A-1)][0];break}if(A==1){DV[(A-1)][4]=DV[(A-1)][3]}else{DV[(A-1)][4]=DV[(A-1)][3]+DV[(A-2)][4]}}}oV=["<table border=0 cellpadding=3 width='100%'>"];oV.push("<tr align=center bgcolor='#A8CEA8'><td>&nbsp;</td><td colspan='3'><b>Without Payoff</b></td><td colspan='3'><b>With Payoff</b></td></tr>");oV.push("<tr align=right bgcolor='#E0F0FE'><td>&nbsp;</td><td><b>interest</b></td><td><b>principle</b></td><td><b>ending balance</b></td><td><b>interest</b></td><td><b>principle</b></td><td><b>ending balance</b></td></tr>");for(A=1;A<=(ot*12);A++){if((A%2)==1){oV.push("<tr align=right bgcolor='#dddddd'><td>"+A)}else{oV.push("<tr align=right><td>"+A)}if(A<=(DV.length)){oV.push("</td><td>"+formatAsMoney(iJ[(A-1)][3])+"</td><td>"+formatAsMoney(iJ[(A-1)][2]-iJ[(A-1)][3])+"</td><td>"+formatAsMoney(iJ[(A-1)][1])+"</td><td>"+formatAsMoney(DV[(A-1)][3])+"</td><td>"+formatAsMoney(DV[(A-1)][2]-DV[(A-1)][3])+"</td><td>"+formatAsMoney(DV[(A-1)][1])+"</td></tr>")}else{oV.push("</td><td>"+formatAsMoney(iJ[(A-1)][3])+"</td><td>"+formatAsMoney(iJ[(A-1)][2]-iJ[(A-1)][3])+"</td><td>"+formatAsMoney(iJ[(A-1)][1])+"</td><td>$0</td><td>$0</td><td>$0</td></tr>")}if((A%12)==0){Sx=parseInt(A/12);oV.push("<tr bgcolor='#E0F0FE' align='center'><td colspan='7'><b>year "+Sx+" end</b></td></tr>")}}if(DB>0.0001){oV.push("<tr align=right bgcolor='#E0F0FE'><td>"+formatAsMoney(iJ[tJ][0])+"</td><td>"+formatAsMoney(iJ[tJ][3])+"</td><td>"+formatAsMoney(iJ[tJ][2]-iJ[tJ][3])+"</td><td>"+formatAsMoney(iJ[tJ][1])+"</td><td colspan='3'>&nbsp;</td></tr>")}oV.push("</table>");jG=oV.join("");dataArray=iJ;newDataArray=DV;theLoanTerm=ot;BJ=parseFloat(BJ);Bv=parseFloat(Bv);Va=parseFloat(Va);var E=0;var D=0;for(var A=0;A<DV.length;A++){E+=DV[A][3];D+=DV[A][2]}lS="<h2>Summary</h2>";if(MY){lS+="<p>You will need to pay <font color=green><b>"+formatAsMoney(Cw)+"</b></font> to payoff your loan all together. You will save <font color=green><b>"+formatAsMoney(Gp*12*ot-UP-E)+"</b></font> of interest.</p>"}else{var C=cm-sN;var B=ot*12-cm;lS+="<p>With additional "+formatAsMoney(Xl)+" monthly payment, you can payoff the loan in <font color=green><b>"+getMonthYear(C)+"</b></font>. It is <font color=green><b>"+getMonthYear(B)+"</b></font> earlier than the old schedule. You will save <font color=green><b>"+formatAsMoney(Gp*12*ot-UP-E)+"</b></font> of interest.</p>";lS+="<br><b>If Payoff with Additional "+formatAsMoney(Xl)+" Monthly Payment</b>";lS+="<table cellpadding='3' width='80%'>";lS+="<tr bgcolor='#dddddd'><td><b>new monthly pay</b></td><td align=right>"+formatAsMoney(OG)+"</td></tr>";lS+="<tr><td>total of "+cm+" monthly payments</td><td align=right>"+formatAsMoney(D)+"</td></tr>";lS+="<tr><td>total interest paid</td><td align=right>"+formatAsMoney(E)+"</td></tr>";lS+="</table>"}lS+="<br><b>If not Payoff</b><table cellpadding='3' width='80%'>";lS+="<tr bgcolor='#dddddd'><td><b>monthly pay</b></td><td align=right>"+formatAsMoney(Gp)+"</td></tr>";lS+="<tr><td>total of "+(ot*12).toFixed(2)+" monthly payments</td><td align=right>"+formatAsMoney(Gp*12*ot)+"</td></tr>";lS+="<tr><td>total interest paid</td><td align=right>"+formatAsMoney(Gp*12*ot-UP)+"</td></tr>";lS+="</table>";showquickmsg(lS,false);gObj("resulttable").innerHTML="<hr /><h2>Monthly Amortization Schedule</h2>"+jG;if((delayShow)&&(/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent))){delayShow=false;setTimeout("drawCurve()",2000)}else{delayShow=false;drawCurve()}}function drawCurve(){var C=[];var B=[];var J=[];var I=[];var H=[];var G=[];var D=0;if(dataArray.length<100){for(var E=0;E<dataArray.length;E++){C.push([(E+1)/12,E*dataArray[E][2]]);B.push([(E+1)/12,dataArray[E][0]]);J.push([(E+1)/12,dataArray[E][4]])}for(var E=0;E<newDataArray.length;E++){D+=newDataArray[E][2];I.push([(E+1)/12,D]);H.push([(E+1)/12,newDataArray[E][0]]);G.push([(E+1)/12,newDataArray[E][4]])}}else{if(dataArray.length<200){for(var E=0;E<dataArray.length;(E=E+2)){C.push([(E+1)/12,E*dataArray[E][2]]);B.push([(E+1)/12,dataArray[E][0]]);J.push([(E+1)/12,dataArray[E][4]])}for(var E=0;E<newDataArray.length;E++){D+=newDataArray[E][2];if(!(E%2)){I.push([(E+1)/12,D]);H.push([(E+1)/12,newDataArray[E][0]]);G.push([(E+1)/12,newDataArray[E][4]])}}}else{if(dataArray.length<300){for(var E=0;E<dataArray.length;(E=E+3)){C.push([(E+1)/12,E*dataArray[E][2]]);B.push([(E+1)/12,dataArray[E][0]]);J.push([(E+1)/12,dataArray[E][4]])}for(var E=0;E<newDataArray.length;E++){D+=newDataArray[E][2];if(!(E%3)){I.push([(E+1)/12,D]);H.push([(E+1)/12,newDataArray[E][0]]);G.push([(E+1)/12,newDataArray[E][4]])}}}else{for(var E=0;E<dataArray.length;(E=E+4)){C.push([(E+1)/12,E*dataArray[E][2]]);B.push([(E+1)/12,dataArray[E][0]]);J.push([(E+1)/12,dataArray[E][4]])}for(var E=0;E<newDataArray.length;E++){D+=newDataArray[E][2];if(!(E%4)){I.push([(E+1)/12,D]);H.push([(E+1)/12,newDataArray[E][0]]);G.push([(E+1)/12,newDataArray[E][4]])}}}}}function A(K){return K}var F=Flotr.draw($("container"),[{data:C,label:"old payment"},{data:B,label:"old balance"},{data:J,label:"old interest"},{data:I,label:"new payment"},{data:H,label:"new balance"},{data:G,label:"new interest"}],{legend:{position:"ne",labelFormatter:A,backgroundColor:"#D2E8FF"},xaxis:{ticks:[[1/12,""],formatNum(theLoanTerm*0.2),formatNum(theLoanTerm*0.4),formatNum(theLoanTerm*0.6),formatNum(theLoanTerm*0.8),theLoanTerm],max:theLoanTerm}})};