/*****************************************
(C) http://www.calculator.net all right reserved.  
*****************************************/
var dataArray=new Array();var theLoanTerm=0;totalCalcCycle=0;cutoffCalcCycle=1000;cutoffPrecision=1e-8;var delayShow=true;var cadditionatbeginning=false;function popMenu(A){Ns="";gObj("cendamount").style.display="block";gObj("cinvestlength").style.display="block";gObj("cstartingamount").style.display="block";gObj("creturnrate").style.display="block";gObj("ccontributeamount").style.display="block";gObj("ctype").value=A;if(A=="endamount"){Ns=Ns+'<li id=\'menuon\'><a href="#" onclick="popMenu(\'endamount\');">FV</a></li><li><a href="#" onclick="popMenu(\'contributeamount\');">PMT</a></li><li><a href="#" onclick="popMenu(\'returnrate\');">I/Y</a></li><li><a href="#" onclick="popMenu(\'investlength\');">N</a></li><li><a href="#" onclick="popMenu(\'startingamount\');">starting investment</a></li>';gObj("cendamount").style.display="none"}else{if(A=="investlength"){Ns=Ns+'<li><a href="#" onclick="popMenu(\'endamount\');">FV</a></li><li><a href="#" onclick="popMenu(\'contributeamount\');">PMT</a></li><li><a href="#" onclick="popMenu(\'returnrate\');">I/Y</a></li><li id=\'menuon\'><a href="#" onclick="popMenu(\'investlength\');">N</a></li><li><a href="#" onclick="popMenu(\'startingamount\');">starting investment</a></li>';gObj("cinvestlength").style.display="none"}else{if(A=="startingamount"){Ns=Ns+'<li><a href="#" onclick="popMenu(\'endamount\');">FV</a></li><li><a href="#" onclick="popMenu(\'contributeamount\');">PMT</a></li><li><a href="#" onclick="popMenu(\'returnrate\');">I/Y</a></li><li><a href="#" onclick="popMenu(\'investlength\');">N</a></li><li id=\'menuon\'><a href="#" onclick="popMenu(\'startingamount\');">starting investment</a></li>';gObj("cstartingamount").style.display="none"}else{if(A=="returnrate"){Ns=Ns+'<li><a href="#" onclick="popMenu(\'endamount\');">FV</a></li><li><a href="#" onclick="popMenu(\'contributeamount\');">PMT</a></li><li id=\'menuon\'><a href="#" onclick="popMenu(\'returnrate\');">I/Y</a></li><li><a href="#" onclick="popMenu(\'investlength\');">N</a></li><li><a href="#" onclick="popMenu(\'startingamount\');">starting investment</a></li>';gObj("creturnrate").style.display="none"}else{if(A=="contributeamount"){Ns=Ns+'<li><a href="#" onclick="popMenu(\'endamount\');">FV</a></li><li id=\'menuon\'><a href="#" onclick="popMenu(\'contributeamount\');">PMT</a></li><li><a href="#" onclick="popMenu(\'returnrate\');">I/Y</a></li><li><a href="#" onclick="popMenu(\'investlength\');">N</a></li><li><a href="#" onclick="popMenu(\'startingamount\');">starting investment</a></li>';gObj("ccontributeamount").style.display="none"}}}}}Ns="<ul>"+Ns+"</ul>";calc()}function calcEndVal(C,A,E,D,B){Kl=C*Math.pow((1+A),D);if(B){A=Math.pow((A+1),1/12)-1;D=D*12}if(cadditionatbeginning){for(i=0;i<D;i++){Kl+=E*Math.pow((1+A),(D-i))}}else{for(i=1;i<=D;i++){Kl+=E*Math.pow((1+A),(D-i))}}return Kl}function getInvLength(D,B,A,G,C,F,E){SF=calcEndVal(D,B,G,F,C);totalCalcCycle++;if(totalCalcCycle>cutoffCalcCycle){if(SF>A){return F}}if((SF!=0)&&(A!=0)){if(Math.abs((SF-A)/A)<cutoffPrecision){return F}}else{if(Math.abs(SF-A)<cutoffPrecision){return F}}if(SF>A){return getInvLength(D,B,A,G,C,(F-0.7*E),(0.7*E))}else{return getInvLength(D,B,A,G,C,(F+0.7*E),(0.7*E))}}function getStartingAmount(E,C,A,G,D,B,F){SF=calcEndVal(B,C,G,E,D);totalCalcCycle++;if(totalCalcCycle>cutoffCalcCycle){return"too long"}if((SF!=0)&&(A!=0)){if(Math.abs((SF-A)/A)<cutoffPrecision){return B}}else{if(Math.abs(SF-A)<cutoffPrecision){return B}}if(SF>A){return getStartingAmount(E,C,A,G,D,(B-0.7*F),(0.7*F))}else{return getStartingAmount(E,C,A,G,D,(B+0.7*F),(0.7*F))}}function getReturnRate(D,C,A,G,B,F,E){SF=calcEndVal(C,F,G,D,B);totalCalcCycle++;if(totalCalcCycle>cutoffCalcCycle){return"too long"}if((SF!=0)&&(A!=0)){if(Math.abs((SF-A)/A)<cutoffPrecision){return F}}else{if(Math.abs(SF-A)<cutoffPrecision){return F}}if(SF>A){return getReturnRate(D,C,A,G,B,(F-0.7*E),(0.7*E))}else{return getReturnRate(D,C,A,G,B,(F+0.7*E),(0.7*E))}}function getContributeAmount(F,D,A,B,C,E,G){SF=calcEndVal(D,B,E,F,C);totalCalcCycle++;if(totalCalcCycle>cutoffCalcCycle){return"too long"}if((SF!=0)&&(A!=0)){if(Math.abs((SF-A)/A)<cutoffPrecision){return E}}else{if(Math.abs(SF-A)<cutoffPrecision){return E}}if(SF>A){return getContributeAmount(F,D,A,B,C,(E-0.7*G),(0.7*G))}else{return getContributeAmount(F,D,A,B,C,(E+0.7*G),(0.7*G))}}function calc(){showquickmsg("calculating...",true);gObj("resulttable").innerHTML="";setTimeout("process()",2)}function process(){var C=trimAll(gObj("cstartingprinciplev").value+"");var B=trimAll(gObj("cinterestratev").value+"");var D=trimAll(gObj("cyearsv").value+"");var A=trimAll(gObj("ctargetamountv").value+"");var F=trimAll(gObj("ccontributeamountv").value+"");var E=trimAll(gObj("ctype").value+"");wr=false;cadditionatbeginning=false;if(gObj("ciadditionat2").checked){cadditionatbeginning=false;ss="end"}else{cadditionatbeginning=true;ss="beginning"}if((!isNumber(C))&&(E!="startingamount")){showquickmsg("start principle need to be numeric",true);return }else{if((!isNumber(B))&&(E!="returnrate")){showquickmsg("average investment return need to be numeric",true);return }else{if(((B<0)||(B>200))&&(E!="returnrate")){showquickmsg("I/Y needs to be between 0 and 200",true);return }else{if((!isNumber(A))&&(E!="endamount")){showquickmsg("FV need to be numeric",true);return }else{if((!isNumber(F))&&(E!="contributeamount")){showquickmsg("PMT need to be numeric",true);return }else{if((!isNumber(D))&&(E!="investlength")){showquickmsg("N need to be numeric",true);return }}}}}}nE=0;dm=0;if(typeof (C)!="undefined"){C=parseFloat(C)}if(typeof (B)!="undefined"){B=parseFloat(B)}if(typeof (D)!="undefined"){D=parseFloat(D)}if(typeof (A)!="undefined"){A=parseFloat(A)}if(typeof (F)!="undefined"){F=parseFloat(F)}pC=parseInt(D*12);theLoanTerm=D;totalCalcCycle=0;HP="";if(E=="endamount"){}else{if(E=="investlength"){Nb=getInvLength(C,B/100,A,F,wr,100,100);D=Nb;theLoanTerm=D.toFixed(2);HP="<p>You will need to invest <font color='green'><b>"+Nb.toFixed(3)+"</b></font> periods to reach the future value of "+formatAsMoney(A)+".</p>";pC=parseInt(D*12)}else{if(E=="startingamount"){Nb=getStartingAmount(D,B/100,A,F,wr,A,A);if(Nb=="too long"){showquickmsg("please use reasonable numbers.",true);return }C=Nb;HP="<p>You will need to invest <font color='green'><b>"+formatAsMoney(Nb)+"</b></font> at the beginning to reach the future value of "+formatAsMoney(A)+".</p>"}else{if(E=="returnrate"){Nb=getReturnRate(D,C,A,F,wr,1,1);if(Nb=="too long"){showquickmsg("please use reasonable numbers.",true);return }Nb=Nb*100;B=Nb;HP="<p>You will need an annual return rate of <font color='green'><b>"+Nb.toFixed(3)+"%</b></font> to reach the future value of "+formatAsMoney(A)+".</p>"}else{if(E=="contributeamount"){Nb=getContributeAmount(D,C,A,B/100,wr,A,A);if(Nb=="too long"){showquickmsg("please use reasonable numbers.",true);return }F=Nb;HP="<p>You will need to contribute <font color='green'><b>"+formatAsMoney(Nb)+"</b></font> at the "+ss+" of each period to reach the future value of "+formatAsMoney(A)+".</p>"}}}}}if(wr){Nr=0;Cb=F}else{Nr=F;Cb=0}GN=Math.log(B/100+1);qn=GN;outPutData=new Array();Hp=0;fB=0;for(i=1;i<=(D*12);i++){outPutData[(i-1)]=new Array();if(i==1){outPutData[(i-1)][0]=C;outPutData[(i-1)][1]=outPutData[(i-1)][0];if(cadditionatbeginning){outPutData[(i-1)][0]+=Cb;outPutData[(i-1)][1]+=Cb;if(((i-1)%12)==0){outPutData[(i-1)][0]+=Nr;outPutData[(i-1)][1]+=Nr}}}else{outPutData[(i-1)][0]=outPutData[(i-2)][4];outPutData[(i-1)][1]=outPutData[(i-2)][2];if(cadditionatbeginning){outPutData[(i-1)][0]+=Cb;outPutData[(i-1)][1]+=Cb;if(((i-1)%12)==0){outPutData[(i-1)][0]+=Nr;outPutData[(i-1)][1]+=Nr}}}outPutData[(i-1)][2]=outPutData[(i-1)][1]*Math.pow(Math.E,(GN/12));outPutData[(i-1)][3]=outPutData[(i-1)][2]-outPutData[(i-1)][1];outPutData[(i-1)][6]=outPutData[(i-1)][3]*nE/100;outPutData[(i-1)][2]=outPutData[(i-1)][2]-outPutData[(i-1)][6];if(!(cadditionatbeginning)){outPutData[(i-1)][4]=outPutData[(i-1)][0]+Cb;outPutData[(i-1)][2]=outPutData[(i-1)][2]+Cb;if((i%12)==0){outPutData[(i-1)][4]=outPutData[(i-1)][0]+Nr;outPutData[(i-1)][2]=outPutData[(i-1)][2]+Nr}}else{outPutData[(i-1)][4]=outPutData[(i-1)][0]}Hp+=outPutData[(i-1)][3];fB+=outPutData[(i-1)][6];outPutData[(i-1)][5]=Hp;outPutData[(i-1)][7]=fB}hL=parseInt(D*12);fN=D*12-hL;if(fN>0.0001){pC++;outPutData[hL]=new Array();outPutData[hL][0]=outPutData[(hL-1)][4];outPutData[hL][1]=outPutData[(hL-1)][2];if(cadditionatbeginning){outPutData[hL][0]+=Cb;outPutData[hL][1]+=Cb;if((hL%12)==0){outPutData[hL][0]+=Nr;outPutData[hL][1]+=Nr}}outPutData[hL][2]=outPutData[hL][1]*Math.pow(Math.E,(GN*fN/12));outPutData[hL][3]=outPutData[hL][2]-outPutData[hL][1];outPutData[hL][6]=outPutData[hL][3]*nE/100;outPutData[hL][2]=outPutData[hL][2]-outPutData[hL][6];outPutData[hL][4]=outPutData[hL][0];Hp+=outPutData[hL][3];fB+=outPutData[hL][6];outPutData[hL][5]=Hp;outPutData[hL][7]=fB}hq="<table border=0 cellpadding=3 width='100%'>";hq+="<tr align=right bgcolor='#E0F0FE'><td>&nbsp;</td><td><b>start principle</b></td><td><b>start balance</b></td><td><b>interest</b></td><td><b>end balance</b></td><td><b>end principle</b></td></tr>";for(i=0;i<parseInt(D);i++){tData0=outPutData[(i*12)][0];tData1=outPutData[(i*12)][1];tData2=outPutData[(i*12+11)][2];tData3=0;tData4=outPutData[(i*12+11)][4];for(j=0;j<12;j++){idN=i*12+j;tData3+=outPutData[idN][3]}if((i%2)==1){hq+="<tr align=right><td>"+(i+1)}else{hq+="<tr align=right bgcolor='#dddddd'><td>"+(i+1)}hq+="</td><td>"+formatAsMoney(tData0);hq+="</td><td>"+formatAsMoney(tData1);hq+="</td><td>"+formatAsMoney(tData3);hq+="</td><td>"+formatAsMoney(tData2);hq+="</td><td>"+formatAsMoney(tData4)+"</td></tr>"}if((D-parseInt(D))>0.0001){hL=outPutData.length-1;i=parseInt(D);tData0=outPutData[(i*12)][0];tData1=outPutData[(i*12)][1];tData2=outPutData[(hL)][2];tData3=0;tData4=outPutData[(hL)][4];for(j=(i*12);j<=hL;j++){idN=j;tData3+=outPutData[idN][3]}if((i%2)==1){hq+="<tr align=right><td>"+(i+1)}else{hq+="<tr align=right bgcolor='#dddddd'><td>"+(i+1)}hq+="</td><td>"+formatAsMoney(tData0);hq+="</td><td>"+formatAsMoney(tData1);hq+="</td><td>"+formatAsMoney(tData3);hq+="</td><td>"+formatAsMoney(tData2);hq+="</td><td>"+formatAsMoney(tData4)+"</td></tr>"}hq+="</table>";pv=outPutData[(pC-1)][2]*Math.pow((1+B/100),(-1*D));VW="<hr /><h2>Summary</h2>"+HP+"<table cellpadding='3' width='80%'>";VW+="<tr bgcolor='#dddddd'><td><b>FV (future value)</b></td><td align=right><font color=green><b>"+formatAsMoney(outPutData[(pC-1)][2])+"</b></font></td></tr>";VW+="<tr bgcolor='#dddddd'><td>PV (present value)</td><td align=right>"+formatAsMoney(pv)+"</td></tr>";VW+="<tr bgcolor='#dddddd'><td>N (number of compounding periods)</td><td align=right>"+D.toFixed(3)+"</td></tr>";VW+="<tr bgcolor='#dddddd'><td>I/Y (interest rate per compounding period)</td><td align=right>"+B.toFixed(3)+"</td></tr>";VW+="<tr bgcolor='#dddddd'><td>PMT (annuity payment, or constant periodic cash flow)</td><td align=right>"+formatAsMoney(F)+"</td></tr>";VW+="<tr bgcolor='#dddddd'><td>starting investment</td><td align=right>"+formatAsMoney(C)+"</td></tr>";VW+="<tr bgcolor='#dddddd'><td>total principle</td><td align=right>"+formatAsMoney(outPutData[(pC-1)][4])+"</td></tr>";VW+="<tr bgcolor='#dddddd'><td>total interest</td><td align=right>"+formatAsMoney(outPutData[(pC-1)][5])+"</td></tr>";if(nE>0.0001){VW+="<tr bgcolor='#dddddd'><td>total tax</td><td align=right>"+formatAsMoney(outPutData[(pC-1)][7])+"</td></tr>"}VW+="</table>";dataArray=outPutData;showquickmsg(VW,false);gObj("resulttable").innerHTML="<hr /><h2>Schedule</h2>"+hq;if((delayShow)&&(/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent))){delayShow=false;setTimeout("drawCurve()",2000)}else{delayShow=false;drawCurve()}}function drawCurve(){var F=[];var D=[];var C=[];if(dataArray.length<100){for(var B=0;B<dataArray.length;B++){F.push([(B+1)/12,dataArray[B][4]]);D.push([(B+1)/12,dataArray[B][2]]);C.push([(B+1)/12,dataArray[B][5]])}}else{if(dataArray.length<200){for(var B=0;B<dataArray.length;(B=B+2)){F.push([(B+1)/12,dataArray[B][4]]);D.push([(B+1)/12,dataArray[B][2]]);C.push([(B+1)/12,dataArray[B][5]])}}else{if(dataArray.length<300){for(var B=0;B<dataArray.length;(B=B+3)){F.push([(B+1)/12,dataArray[B][4]]);D.push([(B+1)/12,dataArray[B][2]]);C.push([(B+1)/12,dataArray[B][5]])}}else{for(var B=0;B<dataArray.length;(B=B+4)){F.push([(B+1)/12,dataArray[B][4]]);D.push([(B+1)/12,dataArray[B][2]]);C.push([(B+1)/12,dataArray[B][5]])}}}}function A(G){return G}var E=Flotr.draw($("container"),[{data:F,label:"principle"},{data:D,label:"balance"},{data:C,label:"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}})};