var x=0;var PV=1;var FV=2;var m=12;var r=.1;var t=1;var PMT=1;var errOverflow="Out of range";var errInput="-Error";var errMissing="??";function f(x){var theNum=FV/PV-Math.pow(1+r/x,x*t);return(theNum);}function g(x){var theNum=-FV+PV*Math.pow(1+x,t*m)+PMT*(Math.pow(1+x,t*m)-1)/x;return(theNum);}function solveFBisection(a,b,err){var L=a;var R=b;var midpoint=1;if(f(L)*f(R)>0)return(0);var delta=b-a;while(delta>err){midpoint=(L+R)/2;if(f(L)*f(midpoint)<0)R=midpoint;else L=midpoint;delta=R-L;}return((L+R)/2);}function solveGBisection(a,b,err){var L=a;var R=b;var midpoint=1;if(g(L)*g(R)>0)return(0);var delta=b-a;while(delta>err){midpoint=(L+R)/2;if(g(L)*g(midpoint)<0)R=midpoint;else L=midpoint;delta=R-L;}return((L+R)/2);}function shiftRight(theNumber,k){if(k==0)return(theNumber);else{var k2=1;var num=k;if(num<0)num=-num;for(var i=1;i<=num;i++){k2=k2*10;}}if(k>0){return(k2*theNumber);}else{return(theNumber/k2);}}function roundDec(theNumber,numPlaces){with(Math){var x=shiftRight(round(shiftRight(theNumber,numPlaces)),-numPlaces);return x;}}function calc_FV(){r/=100;PV=Math.abs(PV)*-1;var tempN=Math.pow((1+r/m),m*t);FV=PV*tempN+PMT*(tempN-1)/(r/m);if(Math.abs(FV)>=Math.abs(PV))return errOverflow;return roundDec(Math.abs(FV),2);}function calc_PV(){r/=100;FV=Math.abs(FV)*-1;var tempN=Math.pow((1+r/m),m*t);PV=(FV-PMT*(tempN-1)/(r/m))/tempN;return-roundDec(PV,2);}function calc_PMT(){r/=100;var tempN=Math.pow((1+r/m),m*t);PMT=(FV-PV*tempN)*(r/m)/(tempN-1);return-roundDec(PMT,2);}function calc_tPMT(){var tempN=Math.pow((1+r/m),m*t);tPMT=(FV-PV*tempN)*(r/m)/(tempN-1);return-roundDec(tPMT,2);}function calc_r(){PMT=Math.abs(PMT)*-1;r=m*solveGBisection(0.00005,10,0.000001);if(r==0)return errOverflow;return roundDec(r*100,2);}function calc_t(){r/=100;if(FV==0)PV=Math.abs(PV)*-1;else PMT=Math.abs(PMT)*-1;var quant1=Math.abs(FV+PMT/(r/m));var quant2=Math.abs(PV+PMT/(r/m));t=(1/m)*(Math.log(quant1)-Math.log(quant2))/Math.log(1+r/m);var tPMT=calc_tPMT();if(Math.abs(tPMT/PMT)==1)return roundDec(t,4);else return errOverflow;}function calc(nFld){var fVal="";switch(nFld){case"FV":if(isValid(nFld))fVal=calc_FV();break;case"PV":if(isValid(nFld))fVal=calc_PV();break;case"PMT":if(isValid(nFld))fVal=calc_PMT();break;case"r":if(isValid(nFld))fVal=calc_r();break;case"t":if(isValid(nFld))fVal=calc_t();break;default:alert("Debug: "+nFld);fVal="Error";}document.getElementById(nFld).value=fVal;}function isValid(nFld){var fArr=["FV","PV","PMT","r","t"];var isOK=true;for(var x=0;x<fArr.length;x++){if(fArr[x]!=nFld){document.getElementById(fArr[x]).value=document.getElementById(fArr[x]).value.replace(errMissing,"");if(document.getElementById(fArr[x]).value==""){document.getElementById(fArr[x]).value=errMissing;isOK=false;}else if(isNaN(document.getElementById(fArr[x]).value)){document.getElementById(fArr[x]).value+=errInput;isOK=false;}else{eval(fArr[x]+"=parseFloat(document.getElementById(fArr[x]).value)");}}}return isOK;}function validateFV(oFld){var tFV=oFld.value;if(!isNaN(tFV))oFld.value=Math.abs(oFld.value);}function validateRange(oFld,mVal){if(!isNaN(oFld.value)){oFld.value=Math.abs(oFld.value);if(oFld.value>mVal||oFld.value<1)oFld.value+=errInput;}}