/*****************************************
(C) http://www.calculator.net all right reserved.
*****************************************/
var dataArray=new Array();var theLoanTerm=0;var delayShow=true;var thisage=0;function calc(){showquickmsg("calculating...",true);gObj("resulttable").innerHTML="";setTimeout("process()",2)}function process(){lQ=trimAll(gObj("cstartingprinciple").value+"");Mh=trimAll(gObj("cannualaddition").value+"");Xt=trimAll(gObj("cmonthlyaddition").value+"");Ik=trimAll(gObj("cinterestrate").value+"");lw=trimAll(gObj("ccurrentage").value+"");AV=trimAll(gObj("cretirementage").value+"");Dh=trimAll(gObj("ctaxtrate").value+"");xg=trimAll(gObj("cinflationrate").value+"");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(lQ)){showquickmsg("starting principal need to be numeric",true);return }else{if(!isNumber(Mh)){showquickmsg("annual contribution need to be numeric",true);return }else{if(!isNumber(Xt)){showquickmsg("monthly contribution need to be numeric",true);return }else{if(!isNumber(Ik)){showquickmsg("interest rate need to be numeric",true);return }else{if((Ik<-200)||(Ik>200)){showquickmsg("interest rate needs to be between -200 and 200",true);return }else{if(!isNumber(lw)){showquickmsg("your current age need to be numeric",true);return }else{if(!isNumber(AV)){showquickmsg("your retirement age need to be numeric",true);return }else{if(!isNumber(Dh)){showquickmsg("tax rate need to be numeric",true);return }else{if(!isNumber(xg)){showquickmsg("inflation rate need to be numeric",true);return }}}}}}}}}if(typeof (cc)!="undefined"){return }lQ=parseFloat(lQ);Mh=parseFloat(Mh);Xt=parseFloat(Xt);Ik=parseFloat(Ik);AV=parseFloat(AV);lw=parseFloat(lw);it=AV-lw;if(it<=0){showquickmsg("your current age needs to be smaller than retirement age.",true);return }if((it-Math.floor(it))>0.00001){showquickmsg("The ages needs to be an integer.",true);return }thisage=lw;Dh=parseFloat(Dh);xg=parseFloat(xg);Ks=0;Tp=parseInt(it*12);theLoanTerm=it;Ks=Math.log(Ik/100+1);Bq=((Math.pow(Math.E,Ks)-1)*100).toFixed(3);Bn=new Array();At=0;nC=0;for(i=1;i<=(it*12);i++){Bn[(i-1)]=new Array();if(i==1){Bn[(i-1)][0]=lQ;Bn[(i-1)][1]=Bn[(i-1)][0];Bn[(i-1)][8]=Bn[(i-1)][0]}else{Bn[(i-1)][0]=Bn[(i-2)][4];Bn[(i-1)][1]=Bn[(i-2)][2];Bn[(i-1)][8]=Bn[(i-2)][10]}Bn[(i-1)][2]=Bn[(i-1)][1]*Math.pow(Math.E,(Ks/12));Bn[(i-1)][3]=Bn[(i-1)][2]-Bn[(i-1)][1];Bn[(i-1)][6]=Bn[(i-1)][3]*Dh/100;Bn[(i-1)][2]=Bn[(i-1)][2]-Bn[(i-1)][6];Bn[(i-1)][10]=Bn[(i-1)][8]*Math.pow(Math.E,(Ks/12));Bn[(i-1)][9]=Bn[(i-1)][10]-Bn[(i-1)][8];Bn[(i-1)][4]=Bn[(i-1)][0]+Xt;Bn[(i-1)][2]+=Xt;Bn[(i-1)][10]+=Xt;if((i%12)==0){Bn[(i-1)][4]=Bn[(i-1)][0]+Mh;Bn[(i-1)][2]+=Mh;Bn[(i-1)][10]+=Mh}At+=Bn[(i-1)][3];nC+=Bn[(i-1)][6];Bn[(i-1)][5]=At;Bn[(i-1)][7]=nC}KR=parseInt(it*12);Uc=it*12-KR;if(Uc>0.0001){Tp++;Bn[KR]=new Array();Bn[KR][0]=Bn[(KR-1)][4];Bn[KR][1]=Bn[(KR-1)][2];Bn[KR][2]=Bn[KR][1]*Math.pow(Math.E,(Ks*Uc/12));Bn[KR][3]=Bn[KR][2]-Bn[KR][1];Bn[KR][6]=Bn[KR][3]*Dh/100;Bn[KR][2]=Bn[KR][2]-Bn[KR][6];Bn[KR][4]=Bn[KR][0];At+=Bn[KR][3];nC+=Bn[KR][6];Bn[KR][5]=At;Bn[KR][7]=nC;Bn[KR][8]=Bn[(KR-1)][10];Bn[KR][10]=Bn[KR][8]*Math.pow(Math.E,(Ks*Uc/12));Bn[KR][9]=Bn[KR][10]-Bn[KR][8]}KM="<table border=0 cellpadding=3 width='100%'>";KM+="<tr align=center bgcolor='#E0F0FE'><td>&nbsp;</td><td colspan='2'><b>Principal</b></td><td colspan='2'><b>Roth IRA</b></td><td colspan='2'><b>Taxable Savings</b></td></tr>";KM+="<tr align=right bgcolor='#E0F0FE'><td><b>age</b></td><td><b>start principal</b></td><td><b>end principal</b></td><td><b>start balance</b></td><td><b>end balance</b></td><td><b>start balance</b></td><td><b>end balance</b></td></tr>";for(i=1;i<=(it*12);i++){if((i%12)==0){if(((i/12)%2)==1){KM+="<tr align=right bgcolor='#dddddd'><td>"}else{KM+="<tr align=right><td>"}nB=i-11;KM+=(parseInt(i/12)+lw-1);KM+="</td><td>"+formatAsMoney(Bn[(nB-1)][0])+"</td><td>"+formatAsMoney(Bn[(i-1)][4])+"</td><td>"+formatAsMoney(Bn[(nB-1)][8])+"</td><td>"+formatAsMoney(Bn[(i-1)][10])+"</td><td>"+formatAsMoney(Bn[(nB-1)][1])+"</td><td>"+formatAsMoney(Bn[(i-1)][2])+"</td></tr>"}}KM+="</table>";rt="<h2>Summary</h2><table cellpadding='3' width='90%'>";rt+="<tr bgcolor='#e0f0fe'><td colspan='2'><b>Roth IRA:</b></td></tr>";rt+="<tr bgcolor='#dddddd'><td><b>balance at retirement age of "+AV+"</b></td><td align=right><b>"+formatAsMoney(Bn[(Tp-1)][10])+"</b></td></tr>";if(xg!=0){qx=Bn[(Tp-1)][10]/Math.pow((1+xg/100),it);rt+="<tr bgcolor='#dddddd'><td>after inflation adjustment, equivalent to current purchasing power of</td><td align=right>"+formatAsMoney(qx)+"</td></tr>"}rt+="<tr bgcolor='#dddddd'><td>total interest</td><td align=right>"+formatAsMoney(Bn[(Tp-1)][10]-Bn[(Tp-1)][4])+"</td></tr>";rt+="<tr><td colspan='2'>&nbsp;</td></tr><tr bgcolor='#e0f0fe'><td colspan='2'><b>Taxable Savings:</b></td></tr>";rt+="<tr bgcolor='#dddddd'><td><b>balance at retirement age of "+AV+"</b></td><td align=right><b>"+formatAsMoney(Bn[(Tp-1)][2])+"</b></td></tr>";if(xg!=0){qx=Bn[(Tp-1)][2]/Math.pow((1+xg/100),it);rt+="<tr bgcolor='#dddddd'><td>after inflation adjustment, equivalent to current purchasing power of</td><td align=right>"+formatAsMoney(qx)+"</td></tr>"}rt+="<tr bgcolor='#dddddd'><td>total interest</td><td align=right>"+formatAsMoney(Bn[(Tp-1)][5])+"</td></tr>";if(Dh>0.0001){rt+="<tr bgcolor='#dddddd'><td>total tax</td><td align=right>"+formatAsMoney(Bn[(Tp-1)][7])+"</td></tr>"}rt+="<tr><td colspan='2'>&nbsp;</td></tr><tr bgcolor='#e0f0fe'><td colspan='2'><b>Compare:</b></td></tr>";rt+="<tr bgcolor='#dddddd'><td>total principal</td><td align=right>"+formatAsMoney(Bn[(Tp-1)][4])+"</td></tr>";rt+="<tr bgcolor='#dddddd'><td>difference between Roth IRA and taxable savings end balance</td><td align=right>"+formatAsMoney(Bn[(Tp-1)][10]-Bn[(Tp-1)][2])+"</td></tr>";rt+="</table>";dataArray=Bn;showquickmsg(rt,false);gObj("resulttable").innerHTML="<hr /><h2>Schedule</h2>"+KM;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+thisage,dataArray[B][4]]);D.push([(B+1)/12+thisage,dataArray[B][2]]);C.push([(B+1)/12+thisage,dataArray[B][10]])}}else{if(dataArray.length<200){for(var B=0;B<dataArray.length;(B=B+2)){F.push([(B+1)/12+thisage,dataArray[B][4]]);D.push([(B+1)/12+thisage,dataArray[B][2]]);C.push([(B+1)/12+thisage,dataArray[B][10]])}}else{if(dataArray.length<300){for(var B=0;B<dataArray.length;(B=B+3)){F.push([(B+1)/12+thisage,dataArray[B][4]]);D.push([(B+1)/12+thisage,dataArray[B][2]]);C.push([(B+1)/12+thisage,dataArray[B][10]])}}else{for(var B=0;B<dataArray.length;(B=B+4)){F.push([(B+1)/12+thisage,dataArray[B][4]]);D.push([(B+1)/12+thisage,dataArray[B][2]]);C.push([(B+1)/12+thisage,dataArray[B][10]])}}}}function A(G){return G}var E=Flotr.draw($("container"),[{data:F,label:"Principal"},{data:D,label:"Taxable Savings"},{data:C,label:"Roth IRA"}],{legend:{position:"ne",labelFormatter:A,backgroundColor:"#D2E8FF"},xaxis:{ticks:[[1/12,""],formatNum(theLoanTerm*0.2+thisage),formatNum(theLoanTerm*0.4+thisage),formatNum(theLoanTerm*0.6+thisage),formatNum(theLoanTerm*0.8+thisage),(theLoanTerm+thisage)],max:(theLoanTerm+thisage)}})};
 
