// Initialize needed variables // The Disability rates are setup in increments of 6 months. //alert("Setting the variables"); var PPYr = 12; var PPMon = 1; var Months = 0; var PINt = 0; var DInt = 0; var V = 0; var Annuity = 0; var DisBen = 0; var DisTerm = 0; var DisTot = 0; var DRate = 0; var DecLTerm = 0; var DecLRate = 0 ; var DecLBen = 0; var RateFactor = 0; var FirstDays = 30; var Payment = 0; var AmtFin = 0; var window1 = 0, window2 = 0, window3 = 0 ; //alert("Done Setting the variables"); function NewCalcWin () { if (window1 == 0) { //alert("Window1 test"); window1 = window.open('calc.html','Calculator1','status,height=430,width=630'); window1.status='Calc1'; window1.focus(); } else { if (window2 == 0) { // alert("Window2 test"); window2 = window.open('calc.html','Calculator2','status,height=430,width=630'); window2.status='Calc2'; window2.focus(); } else { if (window3 == 0) { // alert("Window3 test"); window3 = window.open('calc.html','Calculator3','status,height=430,width=630'); window3.status='Calc3'; window3.focus(); } else { alert("You can only open 3 calculator windows."); window1.focus(); }}} } // End of NewCalcWin // Calculate the Initial Payment function calcpayment (DisChoice,LifeChoice,Freq, f) { //alert("In Calcpayment"); var DisRates = new Array("0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"); var SDLRate = 0; var JDLRate = 0; var MaxLifeTerm = 120; var MaxLifeBen = 60000; var MaxDisTerm = 120; var MaxDisBen = 750; var MaxDisTot = 60000; // DisVal=DisChoice.options[DisChoice.selectedIndex].value; // LifeVal=LifeChoice.options[LifeChoice.selectedIndex].value; FreqVal=Freq.options[Freq.selectedIndex].value; DisVal=DisChoice; LifeVal=LifeChoice; // alert("Verifying Freq Value"); if (FreqVal == "M") { PPYr = 12; } if (FreqVal == "W") { PPYr = 365/7; } if (FreqVal == "S") { PPYr = 24; } if (FreqVal == "B") { PPYr = 365/14; } // PPYr = Math.round(PPYr); PPMon = PPYr / 12; Months = Math.floor(f.NumRegPays.value / PPMon + .9999); // alert("Freq= "+FreqVal+" PPYr= "+PPYr+" PPMon= "+PPMon+" Months= "+Months); PInt = (f.APR.value / 100) / PPYr; // alert("APR= "+f.APR.value); DInt = (f.APR.value / 100) / 365; V = 1 / (1 + PInt); OddAdj = (1+FirstDays*DInt)*V; Annuity = (1 - Math.pow(V,f.NumRegPays.value)) / PInt; // alert("PPYr= "+PPYr+" PPMon= "+PPMon+" Months= "+Months+" PInt= "+PInt+" DInt= "+DInt+" V= "+V+" OddA= "+OddAdj+" Annuity= "+Annuity); // alert("Disability= "+DisVal); if (DisVal == "S") { if (Months >= MaxDisTerm) { DisTerm = MaxDisTerm; } else { DisTerm = Months; } DTabVal = DisRates[Math.round(DisTerm / 6)-1]; DRate = DTabVal/100; } else { DisTerm = 0; DTabVal = 0; DRate = 0; } // alert("DisTerm= "+DisTerm+" DTabVal= "+DTabVal+" DisRate= "+DRate); if ((LifeVal == "S") || (LifeVal == "J")) { if (Months > MaxLifeTerm) { DecLTerm = MaxLifeTerm; } else { DecLTerm = Months; } if (LifeVal == "S") { DecLRate = (SDLRate/1200)*DecLTerm; // alert("DecLRate= "+DecLRate+" Single= "+SDLRate); } else { DecLRate = ((SDLRate * JDLRate) / 1200)*DecLTerm; // alert("DecLRate= "+DecLRate+" Joint= "+JDLRate); } } else { // alert("Zeroing Life Rates"); DecLTerm = 0; DecLRate = 0; } // alert("Life Term= "+DisTerm+ " DecLRate= "+DecLRate); RateFactor = ((DisTerm * DRate) + (DecLTerm * DecLRate)) * OddAdj * PPMon; Payment = Math.round(f.AmtReq.value * OddAdj / (Annuity - RateFactor) * 100) / 100; // alert("RateFactor= "+RateFactor+" Payment= "+Payment); if (DisVal == "S") { DisBen = Payment * PPMon; } else { DisBen = 0; } if ((LifeVal == "S") || (LifeVal == "J")) { DecLBen = Payment * PPMon * DecLTerm; } else { DecLBen = 0; } // Check Disability Insurance Max Amounts and recalc if needed. if (DisBen > MaxDisBen) { DisBen2 = MaxDisBen; } else { DisBen2 =DisBen; } DisTot = DisBen2 * DisTerm; if (DisTot > MaxDisTot) { DisTot2 = MaxDisTot; DisBen3 = DisTot2 / DisTerm; } else { DisTot2 = DisTot; DisBen3 = DisBen2; } DisPrem = Math.round(DisTot2 * DRate * 100) / 100; // alert("DisPRem= "+DisPrem) if (DecLBen > MaxLifeBen) { DecLBen2 = MaxLifeBen; } else { DecLBen2 = DecLBen; } DecLPrem = Math.round(DecLBen2 * DecLRate * 100) / 100; // alert("DecLPrem= "+DecLPrem) if ((DisBen > MaxDisBen) || (DisTot > MaxDisTot) || (DecLBen > MaxLifeBen)) { Payment2 = Math.round(((Math.round(f.AmtReq.value * 100) + Math.round(DisPrem * 100) + Math.round(DecLPrem * 100)) / 100) * OddAdj / Annuity * 100) / 100; } else { Payment2=Payment; } // alert("Payment2= "+Payment2); if (Payment > Payment2) { Diff = Payment - Payment2; } else { Diff = Payment2 - Payment; } //Recalc #1 R1TotPayBack = Payment2 * f.NumRegPays.value; if (DisVal == "S") { R1DisBen = Payment2 * PPMon; } else { R1DisBen = 0; } if ((LifeVal == "S") || (LifeVal == "J")) { R1DecLBen = Payment2 * PPMon * DecLTerm; } else { R1DecLBen = 0; } //Check Insurance #2 Max Amounts and recalc if needed. if (R1DisBen > MaxDisBen) { R1DisBen2 = MaxDisBen; } else { R1DisBen2 =R1DisBen; } R1DisTot = R1DisBen2 * DisTerm; if (R1DisTot > MaxDisTot) { R1DisTot2 = MaxDisTot; R1DisBen3 = R1DisTot2 / DisTerm; } else { R1DisTot2 = R1DisTot; R1DisBen3 = R1DisBen2; } R1DisPrem = Math.round(R1DisTot2 * DRate * 100) / 100; if (R1DecLBen > MaxLifeBen) { R1DecLBen2 = MaxLifeBen; } else { R1DecLBen2 = R1DecLBen; } R1DecLPrem = Math.round(R1DecLBen2 * DecLRate * 100) / 100; if ((R1DisBen > MaxDisBen) || (R1DisTot > MaxDisTot) || (R1DecLBen > MaxLifeBen)) { R1Payment = Math.round(((Math.round(f.AmtReq.value * 100) + Math.round(R1DisPrem * 100) + Math.round(R1DecLPrem * 100)) / 100) * OddAdj / Annuity * 100) / 100; } else { R1Payment = Payment2; } // alert("R1Payment= "+R1Payment); if (R1Payment > Payment2) { R1Diff = R1Payment - Payment2; } else { R1Diff = Payment2 - R1Payment; } //Recalc #2 R2TotPayBack = R1Payment * f.NumRegPays.value; if (DisVal == "S") { R2DisBen = R1Payment * PPMon; } else { R2DisBen = 0; } if ((LifeVal == "S") || (LifeVal == "J")) { R2DecLBen = R1Payment * PPMon * DecLTerm; } else { R2DecLBen = 0; } //Check Insurance #3 Max Amounts and recalc if needed. if (R2DisBen > MaxDisBen) { R2DisBen2 = MaxDisBen; } else { R2DisBen2 =R2DisBen; } R2DisTot = R2DisBen2 * DisTerm; if (R2DisTot > MaxDisTot) { R2DisTot2 = MaxDisTot; R2DisBen3 = R2DisTot2 / DisTerm; } else { R2DisTot2 = R2DisTot; R2DisBen3 = R2DisBen2; } R2DisPrem = Math.round(R2DisTot2 * DRate * 100) / 100; if (R2DecLBen > MaxLifeBen) { R2DecLBen2 = MaxLifeBen; } else { R2DecLBen2 = R2DecLBen; } R2DecLPrem = Math.round(R2DecLBen2 * DecLRate * 100) / 100; if ((R2DisBen > MaxDisBen) || (R2DisTot > MaxDisTot) || (R2DecLBen > MaxLifeBen)) { R2Payment = Math.round(((Math.round(f.AmtReq.value * 100) + Math.round(R2DisPrem * 100) + Math.round(R2DecLPrem * 100)) / 100) * OddAdj / Annuity * 100) / 100; } else { R2Payment = R1Payment; } // alert("R2Payment= "+R2Payment); if (R2Payment > R1Payment) { R2Diff = R2Payment - R1Payment; } else { R2Diff = R1Payment - R2Payment; } //Recalc #3 R3TotPayBack = R2Payment * f.NumRegPays.value; if (DisVal == "S") { R3DisBen = R2Payment * PPMon; } else { R3DisBen = 0; } if ((LifeVal == "S") || (LifeVal == "J")) { R3DecLBen = R2Payment * PPMon * DecLTerm; } else { R3DecLBen = 0; } //Check Insurance #4 Max Amounts and recalc if needed. if (R3DisBen > MaxDisBen) { R3DisBen2 = MaxDisBen; } else { R3DisBen2 =R2DisBen; } R3DisTot = R3DisBen2 * DisTerm; if (R3DisTot > MaxDisTot) { R3DisTot2 = MaxDisTot; R3DisBen3 = R3DisTot2 / DisTerm; } else { R3DisTot2 = R3DisTot; R3DisBen3 = R3DisBen2; } R3DisPrem = Math.round(R3DisTot2 * DRate * 100) / 100; if (R3DecLBen > MaxLifeBen) { R3DecLBen2 = MaxLifeBen; } else { R3DecLBen2 = R3DecLBen; } R3DecLPrem = Math.round(R3DecLBen2 * DecLRate * 100) / 100; if ((R3DisBen > MaxDisBen) || (R3DisTot > MaxDisTot) || (R3DecLBen > MaxLifeBen)) { R3Payment = Math.round(((Math.round(f.AmtReq.value * 100) + Math.round(R3DisPrem * 100) + Math.round(R3DecLPrem * 100)) / 100) * OddAdj / Annuity * 100) / 100; } else { R3Payment = R2Payment; } // alert("R3Payment= "+R3Payment); if (R3Payment > R2Payment) { R3Diff = R3Payment - R2Payment; } else { R3Diff = R2Payment - R3Payment; } // Final Calculations for display on the screen. AmtFin = (Math.round(f.AmtReq.value * 100) + Math.round(R3DisPrem * 100) + Math.round(R3DecLPrem * 100)) / 100; // f.DisPrem.value = R3DisPrem; // f.DecLPrem.value = R3DecLPrem; // f.TotPayBack.value = Math.round(R3Payment * f.NumRegPays.value * 100) / 100; // f.AmtFin.value = (Math.round(f.AmtReq.value * 100) + Math.round(R3DisPrem * 100) + Math.round(R3DecLPrem * 100)) / 100; // f.FinCharge.value = (Math.round(R3TotPayBack*100) - Math.round(f.AmtFin.value*100))/100; // f.Payment.value = R3Payment; } // end of calcpayment. function round (amount) { ttl = "" + ((Math.round(amount * 100)) / 100); dec1 = ttl.substring(ttl.length-3, ttl.length-2); dec2 = ttl.substring(ttl.length-2, ttl.length-1); if (dec1 != '.') { // adds trailing zeroes if necessary if (dec2 == '.') ttl += "0"; else ttl += ".00"; } if (ttl.length > 6) { rtside=ttl.substring(ttl.length-6, ttl.length); ltside=ttl.substring(0, ttl.length-6); ttl=ltside+","+rtside; } return ttl; // form.total.value = "$ " + ttl; // display total amount } // end of round // Calculate the Initial Payment function calcall (cf) { // alert("Calling Calcpay1"); // DisVal=DisChoice.options[DisChoice.selectedIndex].value; calcpayment("N", "N", cf.Freq, cf); cf.Pymt0.value = round(R3Payment); cf.FinCharge0.value = round((Math.round(R3TotPayBack*100) - Math.round(AmtFin*100.00))/100); cf.TotPayBack0.value = round(Math.round(R3Payment * cf.NumRegPays.value * 100) / 100); // calcpayment("S", "N", cf.Freq, cf); // cf.Pymt1.value = round(R3Payment); // cf.FinCharge1.value = round((Math.round(R3TotPayBack*100) - Math.round(AmtFin*100.00))/100); // cf.TotPayBack1.value = round(Math.round(R3Payment * cf.NumRegPays.value * 100) / 100); // calcpayment("N", "S", cf.Freq, cf); // cf.Pymt2.value = round(R3Payment); // cf.FinCharge2.value = round((Math.round(R3TotPayBack*100) - Math.round(AmtFin*100.00))/100); // cf.TotPayBack2.value = round(Math.round(R3Payment * cf.NumRegPays.value * 100) / 100); // calcpayment("S", "S", cf.Freq, cf); // cf.Pymt3.value = round(R3Payment); // cf.FinCharge3.value = round((Math.round(R3TotPayBack*100) - Math.round(AmtFin*100.00))/100); // cf.TotPayBack3.value = round(Math.round(R3Payment * cf.NumRegPays.value * 100) / 100); // calcpayment("N", "J", cf.Freq, cf); // cf.Pymt4.value = round(R3Payment); // cf.FinCharge4.value = round((Math.round(R3TotPayBack*100) - Math.round(AmtFin*100.00))/100); // cf.TotPayBack4.value = round(Math.round(R3Payment * cf.NumRegPays.value * 100) / 100); // calcpayment("S", "J", cf.Freq, cf); // cf.Pymt5.value = round(R3Payment); // cf.FinCharge5.value = round((Math.round(R3TotPayBack*100) - Math.round(AmtFin*100.00))/100); // cf.TotPayBack5.value = round(Math.round(R3Payment * cf.NumRegPays.value * 100) / 100); } // end of calcall. // end the hiding-->