var co=new Object;function recalc_onclick(ctl){if(ctl==''){co.loanAmount=eeparseFloatTh(document.formc.loanAmount.value);co.interestRate=eeparsePercent("6.625%");co.academicYear=document.formc.academicYear.value;co.applicationFee=97.0;co.guarFee=co.loanAmount*0.02;var cappedLoanAmt=calcRepaymentBalance(co);co.loanAmount=cappedLoanAmt;co.years=eeparseFloatTh("20");co.fees=cappedLoanAmt*0.03;co.otherFees=0;calc(co);$("#aprResult").html(calculateAPR(co.loanAmount,co.years*12,co.interestRate,co.fees,co.p1D17)+'%');if(co.academicYear==3){$("#aprResult").html("6.952%");}else if(co.academicYear==2){$("#aprResult").html("7.090%");}else if(co.academicYear==1){$("#aprResult").html("7.222%");}
$("#monthlyPayment").html("$"+eedisplayFloatNDTh(co.p1D17,2));}}
function calculateAPR(loanamount,numpayments,baseannualrate,costs,payment){numPay=numpayments+8
amount=loanamount+costs
var error=Math.pow(10,-5)
var approx=0.05/12
var prev_approx
for(k=0;k<200;++k){prev_approx=approx
approx=prev_approx-F(prev_approx,payment)/F_1(prev_approx)
diff=Math.abs(approx-prev_approx)
if(diff<error)break}
apr=Math.round(approx*12*10000)/100
return apr}
function F(x,payment){return amount*x*Math.pow(1+x,numPay)/(Math.pow(1+x,numPay)-1)-payment}
function F_1(x){return amount*(Math.pow(1+x,numPay)/(-1+Math.pow(1+x,numPay))-numPay*x*Math.pow(1+x,-1+2*numPay)/Math.pow(-1+Math.pow(1+x,numPay),2)+numPay*x*Math.pow(1+x,-1+numPay)/(-1+Math.pow(1+x,numPay)))}
function calcRepaymentBalance(co){var loanAmt=co.loanAmount;var applicationFee=co.applicationFee;var guarFee=co.guarFee;loanAmt=co.loanAmount+guarFee+applicationFee;var intRate=co.interestRate;var inSchoolMonths=((co.academicYear-1)*12)+10+6;var repaymentMonths=co.years*12;var totalCappedInterest=0;var principalBalance=loanAmt;var payment=0;var count=0;while(payment<principalBalance){count++;if(count==inSchoolMonths){principalBalance=principalBalance+totalCappedInterest;principalBalance=round(principalBalance+(principalBalance*0.03),2);payment=round(Math.abs(pmt((((intRate)/(12))),(repaymentMonths),(principalBalance),(0),(0))),2);}
if(count<inSchoolMonths){var interest=round((principalBalance*(intRate/12)),2);totalCappedInterest=round(totalCappedInterest+interest,2);}
if(count>inSchoolMonths){var monthlyInterest=round((principalBalance*(intRate/12)),2);principalBalance=round((principalBalance-payment+monthlyInterest),2);}}
return(loanAmt+totalCappedInterest);}
var eeisus=1;var eetrue="TRUE";var eefalse="FALSE";var eedec=".";var eeth=",";var eedecreg=new RegExp("[.]","g");var eethreg=new RegExp(",","g");function calc(data){var c1D5=data.loanAmount;var c1D6=data.interestRate;var c1D7=data.years;var c1D9=data.fees;var c1D10=data.otherFees;var c1D15=(((c1D9)+(c1D10)));var academicYear=data.academicYear;var c1D16=(pmt((((c1D6)/(12))),(((c1D7)*(12))),(((c1D5)*(-1))),(0),(0)));var c1D17=(((pmt((((c1D6)/(12))),(((c1D7)*(12))),(((c1D5)+(c1D15))),(0),(0)))*(-1)));var c1D19=(((rate((((c1D7)*(12))),(((c1D17)*(-1))),((c1D5)),(0),(0),(0.1)))*(12)));if(c1D17<50){c1D17=50.00;}
data.p1D15=c1D15;data.p1D16=c1D16;data.p1D17=c1D17;data.p1D19=c1D19;}
function myIsNaN(x){return(isNaN(x)||(typeof x=='number'&&!isFinite(x)));}
function round(n,nd){if(isFinite(n)&&isFinite(nd)){var sign_n=(n<0)?-1:1;var abs_n=Math.abs(n);var factor=Math.pow(10,nd);return sign_n*Math.round(abs_n*factor)/factor;}else{return NaN;}}
function eeparsePercent(str){var parts=String(str).split('%');var tmp=String(parts[0]).replace(eedecreg,".");var res=parseFloat(tmp)/100;if(isNaN(res)){return 0;}else{return res;}}
function eedisplayFloatND(x,nd){if(myIsNaN(x)){return Number.NaN;}else{var res=round(x,nd);if(nd>0){var str=String(res);if(str.indexOf('e')!=-1)return str;if(str.indexOf('E')!=-1)return str;var parts=str.split('.');if(parts.length<2){var decimals=('00000000000000').substring(0,nd);return(parts[0]).toString()+eedec+decimals;}else{var decimals=((parts[1]).toString()+'00000000000000').substring(0,nd);return(parts[0]).toString()+eedec+decimals;}}else{return res;}}}
function eedisplayPercentND(x,nd){if(myIsNaN(x)){return Number.NaN;}else{return eedisplayFloatND(x*100,nd)+'%';}}
function eeparseFloatTh(str){str=String(str).replace(eethreg,"");str=String(str).replace(eedecreg,".");var res=parseFloat(str);if(isNaN(res)){return 0;}else{return res;}}
function eedisplayFloatNDTh(x,nd){if(myIsNaN(x)){return Number.NaN;}else{var res=round(x,nd);if(nd>0){var str=String(res);if(str.indexOf('e')!=-1)return str;if(str.indexOf('E')!=-1)return str;var parts=str.split('.');var res2=eeinsertThousand(parts[0].toString());if(parts.length<2){var decimals=('00000000000000').substring(0,nd);return(res2+eedec+decimals);}else{var decimals=((parts[1]).toString()+'00000000000000').substring(0,nd);return(res2+eedec+decimals);}}else{return(eeinsertThousand(res.toString()));}}}
function eeinsertThousand(whole){if(whole==""||whole.indexOf("e")>=0){return whole;}else{var minus_sign="";if(whole.charAt(0)=="-"){minus_sign="-";whole=whole.substring(1);}
var res="";var str_length=whole.length-1;for(var ii=0;ii<=str_length;ii++){if(ii>0&&ii%3==0){res=eeth+res;}
res=whole.charAt(str_length-ii)+res;}
return minus_sign+res;}}
function pmt(rate,nper,pv,fv,type){if(rate==0){return-pv/nper;}else{var pvif=Math.pow(1+rate,nper);var fvifa=(Math.pow(1+rate,nper)-1)/rate;var type1=(type!=0)?1:0;var payment=((-pv*pvif-fv)/((1+rate*type1)*fvifa));return payment;}}
function rate(nper,pmt,pv,fv,type,guess){if(!isFinite(guess)||!isFinite(type)||!isFinite(fv)||!isFinite(pv)||!isFinite(pmt)||!isFinite(nper))return Number.NaN;var type2=(type)?1:0;var wanted_precision=0.00000000000000001;var current_diff=Number.MAX_VALUE;var x,next_x,y,z;if(guess==0)x=0.1;else x=guess;var max_iterations=100;var iterations_done=0;while(current_diff>wanted_precision&&iterations_done<max_iterations){if(x==0)next_x=x-(pv+pmt*nper+fv)/(pv*nper+pmt*(nper*(nper-1)+2*type2*nper)/2);else{y=Math.pow(1+x,nper-1);z=y*(1+x);next_x=x*(1-(x*pv*z+pmt*(1+x*type2)*(z-1)+x*fv)/(x*x*nper*pv*y-pmt*(z-1)+x*pmt*(1+x*type2)*nper*y));}
iterations_done++;current_diff=Math.abs(next_x-x);x=next_x;}
if(guess==0&&Math.abs(x)<wanted_precision)x=0;if(current_diff>=wanted_precision){return Number.NaN;}else{return x;}}
