KJE.WaitCostCalc=function(){this.DEPOSIT_FREQUENCY=0;this.FREQ_DESC="";this.PAYMENTS_AT_START=KJE.parameters.get("PAYMENTS_AT_START",true);this.MSG_ERROR1=KJE.parameters.get("MSG_ERROR1","Please enter a starting balance or additional contribution.");this.sSchedule=new KJE.Repeating()};KJE.WaitCostCalc.prototype.clear=function(){this.STARTING_AMOUNT=0;this.ADDITIONAL_CONTRIBUTIONS=0;this.YEARS=0;this.RATE_OF_RETURN=0;this.YEARS_TO_WAIT=0};KJE.WaitCostCalc.prototype.calculate=function(z){var k=KJE;var a=this.STARTING_AMOUNT;var u=this.ADDITIONAL_CONTRIBUTIONS;var h=this.YEARS;var g=this.RATE_OF_RETURN;var j=this.YEARS_TO_WAIT;var w=0;var d=0;var f=0;var m=0;this.sYears=(j==1?KJE.MSG_YEAR_LBL:KJE.MSG_YEARS_LBL);this.sYears2=(h==1?KJE.MSG_YEAR_LBL:KJE.MSG_YEARS_LBL);this.sYears3=((h-j)==1?KJE.MSG_YEAR_LBL:KJE.MSG_YEARS_LBL);if((u+a)<=0){throw (this.MSG_ERROR1)}if(j>h){j=h}var q=h;var x=0;this.DS_DONT=KJE.FloatArray(q);this.DS_WAIT=KJE.FloatArray(q);this.cats=new Array(q);var y=g/100;if(this.DEPOSIT_FREQUENCY!=1){y=KJE.ROR_PERIOD(y,this.DEPOSIT_FREQUENCY)}if(z){var l=this.sSchedule;l.clearRepeat();l.addHeader(" ",{sCell:KJE._sHeadingUnderline,sContent:l.sReportCol("Start Savings Now",1),sFormat:"COLSPAN=3"},{sCell:KJE._sHeadingUnderline,sContent:KJE.replace("YEARS_TO_WAIT",k.number(j),l.sReportCol("Postpone Saving YEARS_TO_WAIT Years",2)),sFormat:"COLSPAN=3"});l.addHeader(l.sReportCol("Year",3),l.sReportCol("Additions",4),l.sReportCol("Interest",5),l.sReportCol("Balance",6),l.sReportCol("Additions",7),l.sReportCol("Interest",8),l.sReportCol("Balance",9));l.addRepeat(" "," "," ",k.dollars(a,2)," "," ",k.dollars(a,2))}var e=a;var r=a;var t=0;var c=0;var o=0;var b=0;for(var v=1;v<=q*this.DEPOSIT_FREQUENCY;v++){x=v-1;if(v>j*this.DEPOSIT_FREQUENCY){r+=u}e+=u;o=k.round(r*y,2);b=k.round(e*y,2);r+=o;e+=b;t+=o;c+=b;if((v%this.DEPOSIT_FREQUENCY)==0){if(z){l.addRepeat(""+k.number(v/this.DEPOSIT_FREQUENCY),k.dollars(u*this.DEPOSIT_FREQUENCY,2),k.dollars(c,2),k.dollars(e,2),k.dollars(((v/this.DEPOSIT_FREQUENCY)>j)?u*this.DEPOSIT_FREQUENCY:0,2),k.dollars(t,2),k.dollars(r,2))}var s=Math.floor(v/this.DEPOSIT_FREQUENCY)-1;this.cats[s]=""+(v/this.DEPOSIT_FREQUENCY);this.DS_DONT[s]=((e));this.DS_WAIT[s]=((r));t=0;c=0}}w=e;d=r;f=e-r;if(q-j==0){m=f}else{m=KJE.WaitCostCalc.AMOUNT_FV(y,(q-j)*this.DEPOSIT_FREQUENCY,e-KJE.FV_AMT(y,h*this.DEPOSIT_FREQUENCY,a))}this.START_NOW=w;this.START_LATER=d;this.COST_OF_WAITING=f;this.REQUIRED_CONTRIBUTION=m};KJE.WaitCostCalc.prototype.formatReport=function(b){var c=KJE;var a=this.iDecimal;var d=b;d=KJE.replace("STARTING_AMOUNT",c.dollars(this.STARTING_AMOUNT),d);d=KJE.replace("ADDITIONAL_CONTRIBUTIONS",c.dollars(this.ADDITIONAL_CONTRIBUTIONS),d);d=KJE.replace("RATE_OF_RETURN",c.percent(this.RATE_OF_RETURN/100,2),d);d=KJE.replace("MSG_YEARS_TO_WAIT",(this.sYears),d);d=KJE.replace("YEARS_TO_WAIT",c.number(this.YEARS_TO_WAIT),d);d=KJE.replace("MSG_YEARS_REMAINING",(this.sYears3),d);d=KJE.replace("YEARS_REMAINING",c.number(this.YEARS-this.YEARS_TO_WAIT),d);d=KJE.replace("MSG_YEARS",(this.sYears2),d);d=KJE.replace("YEARS",c.number(this.YEARS),d);d=KJE.replace("START_NOW",c.dollars(this.START_NOW),d);d=KJE.replace("START_LATER",c.dollars(this.START_LATER),d);d=KJE.replace("COST_OF_WAITING",c.dollars(this.COST_OF_WAITING),d);d=KJE.replace("REQUIRED_CONTRIBUTION",c.dollars(this.REQUIRED_CONTRIBUTION),d);d=KJE.replace("DEPOSIT_FREQUENCY",this.FREQ_DESC,d);d=d.replace("**REPEATING GROUP**",this.sSchedule.getRepeat());this.sSchedule.clearRepeat();return d};KJE.WaitCostCalc.AMOUNT_FV=function(b,g,a){var d=20000000;var f=d/2;var c=a;for(var e=1;e<100;e++){c=KJE.FV_BEGIN(b,g,d);if(c==a){return d}else{if(c>a){d-=f}else{d+=f}}f=f/2}return d};KJE.WaitCostCalc.DEPOSIT_SELECTIONS=KJE.parameters.get("ARRAY_DEPOSIT_SELECTIONS:",["per month","per quarter","per year"]);KJE.WaitCostCalc.DEPOSIT_VALUE=[12,4,1];KJE.CalcName="Don't Delay Your Savings!";KJE.CalcType="WaitCost";KJE.CalculatorTitleTemplate="Postponing KJE2 could cost you KJE1";KJE.parseInputs=function(a){var b=KJE.getDropBox("DEPOSIT_FREQUENCY",KJE.parameters.get("DEPOSIT_FREQUENCY",12),KJE.WaitCostCalc.DEPOSIT_VALUE,KJE.WaitCostCalc.DEPOSIT_SELECTIONS);a=KJE.replace("**DEPOSIT_FREQUENCY**",b,a);return a};KJE.initialize=function(){KJE.CalcControl=new KJE.WaitCostCalc();KJE.GuiControl=new KJE.WaitCost(KJE.CalcControl)};KJE.WaitCost=function(h){var g=KJE;var e=KJE.gLegend;var b=KJE.inputs.items;KJE.DollarSlider("STARTING_AMOUNT","Starting amount",0,10000000);KJE.DollarSlider("ADDITIONAL_CONTRIBUTIONS","Additional contributions",0,100000);KJE.NumberSlider("YEARS","Years",0,30,0);KJE.InvestRateSlider("RATE_OF_RETURN","Rate of return");KJE.NumberSlider("YEARS_TO_WAIT","Years to postpone saving",1,30,0,null,"KJEBold");KJE.DropBox("DEPOSIT_FREQUENCY","Frequency");this.GRAPH_LABEL_1=KJE.parameters.get("MSG_GRAPH_LABEL_1","Start saving now");this.GRAPH_LABEL_2=KJE.parameters.get("MSG_GRAPH_LABEL_2","Wait");var a=KJE.gNewGraph(KJE.gLINE,"GRAPH1",true,false,KJE.colorList[1],KJE.parameters.get("MSG_GRAPH_TITLE","If you start now your savings could be KJE1 after KJE2."));a._legend._iOrientation=(e.TOP_RIGHT);a._showItemLabel=false;a._showItemLabelOnTop=true;a._iArea=KJE.gGraphLine.AREA_ALL;KJE.addDiv("INPUTS2",KJE.colorList[0]);var f=KJE.parameters.get("MSG_DROPPER_TITLE","Savings plan:");var d=KJE.parameters.get("MSG_DROPPER_CLOSETITLE","KJE1 with an additional KJE2 KJE3 at KJE4");var c=function(){return f+KJE.subText(KJE.getKJEReplaced(d,b.STARTING_AMOUNT.getFormatted(),b.ADDITIONAL_CONTRIBUTIONS.getFormatted(),h.FREQ_DESC,b.RATE_OF_RETURN.getFormatted()),"KJECenter")};KJE.addDropper(new KJE.Dropper("INPUTS",true,f,c),KJE.colorList[0])};KJE.WaitCost.prototype.setValues=function(b){var a=KJE.inputs.items;b.DEPOSIT_FREQUENCY=Math.round(a.DEPOSIT_FREQUENCY.getValue());b.FREQ_DESC=(a.DEPOSIT_FREQUENCY.getFormatted());b.ADDITIONAL_CONTRIBUTIONS=a.ADDITIONAL_CONTRIBUTIONS.getValue();b.RATE_OF_RETURN=a.RATE_OF_RETURN.getValue();b.STARTING_AMOUNT=a.STARTING_AMOUNT.getValue();b.YEARS=a.YEARS.getValue();b.YEARS_TO_WAIT=a.YEARS_TO_WAIT.getValue()};KJE.WaitCost.prototype.refresh=function(e){var d=KJE;var c=KJE.gLegend;var b=KJE.inputs.items;var a=KJE.gGraphs[0];KJE.setTitleTemplate(d.dollars(e.COST_OF_WAITING),d.number(e.YEARS_TO_WAIT)+" "+e.sYears);a.removeAll();a.setGraphCategories(e.cats);a.add(new KJE.gGraphDataSeries(e.DS_DONT,this.GRAPH_LABEL_1+" ",a.getColor(2),d.dollars(e.START_NOW),this.GRAPH_LABEL_1+" "+KJE.MSG_YEAR_LBL));a.add(new KJE.gGraphDataSeries(e.DS_WAIT,this.GRAPH_LABEL_2+" "+e.YEARS_TO_WAIT+" "+e.sYears+" ",a.getColor(1),d.dollars(e.START_LATER),this.GRAPH_LABEL_2+" "+KJE.MSG_YEAR_LBL));a.setTitleTemplate(d.dollars(e.START_NOW),d.number(e.YEARS)+" "+e.sYears2);a.paint()};KJE.InputScreenText="
Start Now | Start Later | |
Starting amount | STARTING_AMOUNT | STARTING_AMOUNT |
Savings plan | Save ADDITIONAL_CONTRIBUTIONS DEPOSIT_FREQUENCY for YEARS MSG_YEARS. | Postpone saving for YEARS_TO_WAIT MSG_YEARS_TO_WAIT then save ADDITIONAL_CONTRIBUTIONS DEPOSIT_FREQUENCY for YEARS_REMAINING MSG_YEARS_REMAINING. |
Rate of return | RATE_OF_RETURN | RATE_OF_RETURN |
Ending balances | START_NOW | START_LATER |
Cost of waiting | COST_OF_WAITING |