function formatNum(Vnum) {

   if(Vnum > 99000000) {
   alert("Sorry, this will not generate numbers larger that 99 million.");
   focus();
   } else {
   
   var V10million = parseInt(Vnum / 10000000);

   var V1million = (Vnum % 10000000)  / 1000000;
      if(V1million / 1000000 == 1) {
      V1million = 1;
      } else
      if(V1million < 1) {
      V1million = "0";
     } else {
      V1million = parseInt(V1million,10);
     }

    var V100thousand = (Vnum % 1000000)  / 100000;
      if(V100thousand / 100000 == 1) {
      V100thousand = 1;
      } else
      if(V100thousand < 1) {
      V100thousand = "0";
     } else {
      V100thousand = parseInt(V100thousand,10);
     }

   var V10thousand = (Vnum % 100000)  / 10000;
      if(V10thousand / 10000 == 1) {
      V10thousand = 1;
      } else
      if(V10thousand < 1) {
      V10thousand = "0";
      } else {
      V10thousand = parseInt(V10thousand,10);
      }

   var V1thousand = (Vnum % 10000)  / 1000;
      if(V1thousand / 1000 == 1) {
      V1thousand = 1;
      } else
      if(V1thousand < 1) {
      V1thousand = "0";
     } else {
      V1thousand = parseInt(V1thousand,10);
     }

   var Vhundreds = (Vnum % 1000)  / 100;
      if(Vhundreds / 100 == 1) {
      Vhundreds = 1;
      } else
      if(Vhundreds < 1) {
      Vhundreds = "0";
     } else {
      Vhundreds = parseInt(Vhundreds,10);
     }

   var Vtens = (Vnum % 100)  / 10;
      if(Vtens / 10 == 1) {
      Vtens = 1;
      } else
      if(Vtens < 1) {
      Vtens = "0";
     } else {
      Vtens = parseInt(Vtens,10);
     }

   var Vones = (Vnum % 10)  / 1;
      if(Vones / 1 == 1) {
      Vones = 1;
      } else
      if(Vones < 1) {
      Vones = "0";
     } else {
      Vones = parseInt(Vones,10);
     }

//START UPGRADE
var Vcents = 0;

if(Vnum % 1 * 100 < 1) {
   Vcents = 0;
   } else {
   Vcents = parseInt(((eval(Vnum % 1) * 100)),10);
   }
//END UPGRADE

 if(Vcents < 1) {
  Vcents = "00";
  }
  else
  if(Vcents % 10 == 0) {
  Vcents = Vcents + "0";
  }
  else
  if(Vcents % 10 == Vcents) {
  Vcents = "0" + Vcents;
  } else {
  Vcents = Vcents;
  }

  if(Vcents == "900") {
  Vcents = "90";
  } else
  if(Vcents == "800") {
  Vcents = "80";
  } else 
  if(Vcents == "700") {
  Vcents = "70";
  } else 
  if(Vcents == "600") {
  Vcents = "60";
  } else 
  if(Vcents == "500") {
  Vcents = "50";
  } else 
  if(Vcents == "400") {
  Vcents = "40";
  } else 
  if(Vcents == "300") {
  Vcents = "30";
  } else
  if(Vcents == "200") {
  Vcents = "20";
  } else
  if(Vcents == "100") {
  Vcents = "10";
  } else {
  Vcents = Vcents;
  }

   
   var Vformat = "";

   if(Vnum >= 10000000) {
   Vformat = (V10million + "" + V1million + "," + V100thousand + "" + V10thousand + "" + V1thousand + "," + Vhundreds + "" + Vtens + "" + Vones + "." + Vcents);
   }
   else
   if(Vnum >= 1000000) {
   Vformat = (V1million + "," + V100thousand + "" + V10thousand + "" + V1thousand + "," + Vhundreds + "" + Vtens + "" + Vones + "." + Vcents);
   }
   else
   if(Vnum >= 100000) {
   Vformat = (V100thousand + "" + V10thousand + "" + V1thousand + "," + Vhundreds + "" + Vtens + "" + Vones + "." + Vcents);
   }
   else
   if(Vnum >= 10000) {
   Vformat = (V10thousand + "" + V1thousand + "," + Vhundreds + "" + Vtens + "" + Vones + "." + Vcents);
   }
   else
   if(Vnum >= 1000) {
   Vformat = (V1thousand + "," + Vhundreds + "" + Vtens + "" + Vones + "." + Vcents);
   }
   else
   if(Vnum >= 100) {
   Vformat = (Vhundreds + "" + Vtens + "" + Vones + "." + Vcents);
   }
   else
   if(Vnum >= 10) {
   Vformat = (Vtens + "" + Vones + "." + Vcents);
   }
   else
   if(Vnum >= 1) {
   Vformat = (Vones + "." + Vcents);
   } else {
   Vformat = ("0." + Vcents);
   }

  return Vformat;

  }
}

function computeForm(form) {

//get loan variables


var VpurchaseAmt = form.purchaseAmt.value;
if(VpurchaseAmt == "" || VpurchaseAmt == 0) {
   VpurchaseAmt = 60000;
   }

var VdownPayPercAmt = form.downPayPercAmt.value
var VdownPayAmt = 0;
var VdownPayMethod = form.downPayMethod.selectedIndex;
if(VdownPayMethod == 0) {
//CONVERT FRACTION TO DECIMAL POINT IF NECESSARY
   if(VdownPayPercAmt >= 1) {
      VdownPayPercAmt /= 100;
      }
   VdownPayAmt = VdownPayPercAmt * VpurchaseAmt;
   } else {
   VdownPayAmt = VdownPayPercAmt;
   }

if(VdownPayAmt < 1) {
   VdownPayAmt = 0;
   }
form.downPayAmt.value = parseInt(VdownPayAmt,10);

//CALCULATE LOAN AMOUNT
var VloanAmt = 0;
var VloanAmt = eval(VpurchaseAmt) - eval(VdownPayAmt);
form.loanAmt.value = VloanAmt;

//ADD LOAN AMOUNT TO HIDDEN AMORT FIELD
form.Hprincipal.value = VloanAmt;

//GET INTEREST RATE AND CONVERT TO FRACTION IF NEC
var VintRate = form.intRate.value;
if(VintRate == "" || VintRate == 0) {
   VintRate = 8;
   }
if(VintRate >= 1) {
   VintRate /= 100;
   }
VintRate /= 12;

//GET YEARS AND CONVERT TO MONTHS
var VnoYears = form.noYears.value;
var VnoMonths = VnoYears * 12;

//ADD NPER TO HIDDEN AMORT FIELD
form.HaNPer.value = VnoMonths;

//COMPUTE PRINCIPAL AND INTEREST MONTHLY PAYMENT AMOUNT
var factor = 1;
for (var j = 0; j < VnoMonths; j++) {
   factor = factor * (eval(1) + eval(VintRate));
   }
var VpmtPI = (VloanAmt * factor * VintRate) / (eval(factor) - eval(1));

//form.pmtPI.value = VloanAmt;
form.pmtPI.value = parseInt(VpmtPI,10);

//ADD PAYMENT TO HIDDEN AMORT FIELD
form.HmoPmt.value = VpmtPI;

//COMPUTE MONTHLY PROPERTY TAX PAYMENT
var VpropTaxPercAmt = form.propTaxPercAmt.value
var VpropTaxAmt = 0;
var VpropTaxMethod = form.propTaxMethod.selectedIndex;
if(VpropTaxMethod == 0) {
   VpropTaxPercAmt /= 100;
   VpropTaxAmt = VpropTaxPercAmt * VpurchaseAmt;
   } else {
   VpropTaxAmt = VpropTaxPercAmt;
   }

if(VpropTaxAmt / 12 < 1) {
   VpropTaxAmt = 0;
   } else {
   VpropTaxAmt = parseInt(VpropTaxAmt / 12,10);
   }

form.propTaxAmt.value = VpropTaxAmt;

//COMPUTE MONTHLY INSURANCE PAYMENT
var VinsPercAmt = form.insPercAmt.value
var VinsAmt = 0;
var VinsMethod = form.insMethod.selectedIndex;
if(VinsMethod == 0) {
   VinsPercAmt /= 100;
   VinsAmt = VinsPercAmt * VpurchaseAmt;
   } else {
   VinsAmt = VinsPercAmt;
   }

if(VinsAmt / 12 < 1) {
   VinsAmt = 0;
   } else {
   VinsAmt = parseInt(VinsAmt / 12,10);
   }

form.insAmt.value = VinsAmt;

//COMPUTE PRIVATE MORTGAGE INSURANCE (PMI) PAYMENT
var VpmiPercAmt = form.pmiPercAmt.value
var VpmiAmt = 0;
var VpmiMethod = form.pmiMethod.selectedIndex;
if(VpmiMethod == 0) {
   VpmiPercAmt /= 100;
   VpmiAmt = VpmiPercAmt * VpurchaseAmt;
   } else {
   VpmiAmt = VpmiPercAmt;
   }

if(VpmiAmt / 12 < 1) {
   VpmiAmt = 0;
   } else {
   VpmiAmt = parseInt(VpmiAmt / 12,10);
   }

form.pmiAmt.value = VpmiAmt;

//GET MONTHLY ASSOCIATION FEES
VassocAmt = form.assocAmt.value;
if(VassocAmt == "" || VassocAmt == 0) {
   VassocAmt = 0;
   form.assocAmt.value = 0;
   }

//COMPUTE MONTHLY PITI (PRIN, INT, TAX, INS)
var VpmtPITI = eval(VpmtPI) + eval(VpropTaxAmt) + eval(VinsAmt) + eval(VassocAmt);

form.pmtPITI.value = parseInt(VpmtPITI);

//COMPUTE TAX DEDUCTABLE PORTION OF PAYMENT
var VintDeduct = VintRate * VloanAmt;
var VpropTaxDeduct = VinsAmt;
var VdeductAmt = eval(VintDeduct) + eval(VpropTaxDeduct);
form.deductAmt.value = parseInt(VdeductAmt,10);

//GET GROSS PAY AND CONVERT TO MONTHLY
var VgrossPay = form.grossPay.value;
if(form.payMethod.selectedIndex == 0) {
   var VmoPay = VgrossPay / 12;
   } else {
   var VmoPay = VgrossPay;
   }

//GET MONTHLY DEBTS
var VmoDebts = form.moDebts.value;
if(VmoDebts == "" || VmoDebts == 0) {
   VmoDebts = 0;
   form.moDebts.value = 0;
   }

//CALCULATE PITI TO MONTHLY INCOME RATIO (26% max)
var VratioIncome = VpmtPITI / VmoPay;
if(VratioIncome < .01) {
   form.ratioIncome.value = (VratioIncome *100) + "%";
   } else {
   form.ratioIncome.value = parseInt(VratioIncome *100,10) + "%";
   }

//CALCULATE PITI + DEBT TO MONTHLY INCOME RATIO (36% max)
var VratioDebt = (eval(VpmtPITI) + eval(VmoDebts)) / VmoPay ;
if(VratioDebt < .01) {
   form.ratioDebt.value = (VratioDebt * 100) + "%";
   } else {
   form.ratioDebt.value = parseInt(VratioDebt * 100,10) + "%";
   }

//CALCULATE MAXIMUM LOAN AMOUNT// should be .26 and .38
var VmaxPmtIncome = VmoPay * .29;
var VmaxPmtDebt = eval(VmoPay  * .40) - eval(VmoDebts);

if(VmaxPmtIncome > VmaxPmtDebt) {
   var maxPmt = eval(VmaxPmtDebt) - (eval(VpropTaxAmt) + eval(VinsAmt) + eval(VassocAmt));
   var prin = eval(VmaxPmtDebt ) - eval(eval(VmaxPmtDebt  * VintRate));
   var intPort = 0;
   var prinPort =0;
   var count = 1;

   while(count < VnoMonths) {
      intPort = prin * VintRate;
      prinPort = eval(maxPmt) - eval(intPort);
      prin = eval(prin) + eval(prinPort);
      count = count + 1;
      if(count > 360) {break; } else {continue; }
      }

   var VmaxLoanAmt = prin;
   if(VmaxLoanAmt < 0) {
      form.qualifyMax.value =  0;
      } else {
      form.qualifyMax.value = parseInt(VmaxLoanAmt,10);
      }
   } else {
   var maxPmt = eval(VmaxPmtIncome) - eval(eval(VpropTaxAmt) + eval(VinsAmt) + eval(VassocAmt));
   var prin = eval(VmaxPmtIncome) - (eval(VmaxPmtIncome  * VintRate));
   var intPort = 0;
   var prinPort =0;
   var count = 1;

   while(count < VnoMonths) {
      intPort = prin * VintRate;
      prinPort = eval(maxPmt) - eval(intPort);
      prin = eval(prin) + eval(prinPort);
      count = count + 1;
      if(count > 360) {break; } else {continue; }
      }

   var VmaxLoanAmt = prin;
   if(VmaxLoanAmt < 0) {
      form.qualifyMax.value =  0;
      } else {
      form.qualifyMax.value = parseInt(VmaxLoanAmt,10);
      }
   }


//DETERMINE IF QUALIFY //should be .28 and .36
if(VratioIncome > .29 || VratioDebt > .40) {
   form.qualifyYN.value = "No";
   } else {
   form.qualifyYN.value = "Yes";
   }

} //End of function


function createReport(form) {

//GRAB VARIABLES

if((form.Hprincipal.value == "" || form.Hprincipal.value == 0) || (form.HmoPmt.value == "" || form.HmoPmt.value == 0) || (form.HaNPer.value == "" || form.HaNPer.value == 0) || (form.intRate.value == "" || form.intRate.value == 0)) {
   alert("Please compute the payment before creating the schedule.");
   } else {

var aPrin = form.Hprincipal.value;

var aIntRate = form.intRate.value;
if(aIntRate > 1) {
   aIntRate = aIntRate / 100;
   } else {
   aIntRate = aIntRate;
   }
aIntRate = aIntRate /12;

var aNPer = form.HaNPer.value;

var aPmt = form.HmoPmt.value;

var aIntPort = 0;
var aAccumInt = 0;
var aPrinPort = 0;
var aAccumPrin = 0;
var aCount = 0;
var aPmtRow = "";
var aPmtNum = 0;

var today = new Date();
var dayFactor = today.getTime();
var pmtDay = today.getDate();
var loanMM = today.getMonth() + 1;
var loanYY = today.getYear();
var loanDate = (loanMM + "/" + pmtDay + "/" + loanYY);
var monthMS = 86400000 * 30.4;
var pmtDate = 0;

while(aCount < aNPer) {
   aIntPort = aPrin * aIntRate;
      aAccumInt = eval(aAccumInt) + eval(aIntPort);
   aPrinPort = eval(aPmt) - eval(aIntPort);
      aAccumPrin = eval(aAccumPrin) + eval(aPrinPort);
   aPrin = eval(aPrin) - eval(aPrinPort);
   aCount = eval(aCount) + eval(1);
   aPmtNum = eval(aPmtNum) + eval(1);
   dayFactor = eval(dayFactor) + eval(monthMS);
   pmtDate = new Date(dayFactor);
   pmtMonth = pmtDate.getMonth();
   pmtMonth = pmtMonth + 1;
   pmtYear = pmtDate.getYear();
   pmtString = (pmtMonth + "/" + pmtDay + "/" + pmtYear);
   aPmtRow = ("" + aPmtRow + "<TR><TD ALIGN=RIGHT>" + aPmtNum + "</TD><TD ALIGN=RIGHT>" + pmtString + "</TD><TD ALIGN=RIGHT>" + formatNum(aPrinPort) + "</TD><TD ALIGN=RIGHT>" + formatNum(aIntPort) + "</TD><TD ALIGN=RIGHT>" + formatNum(aPrin) + "</TD></TR>");
      if(aCount > 600) {
         alert("Using your current entries you will never pay off this loan.");
         break;
         } else {
         continue;
         }
    }

var part1 = ("<HEAD><TITLE>Amortization Schedule</TITLE></HEAD>" + "<BODY BGCOLOR = '#FFFFFF'><BR><BR><CENTER><FONT SIZE=4>Fannie-mac.com Amortization Schedule</FONT></CENTER>");

var part2 = ("<CENTER><TABLE BORDER=1 CELLPADDING=4><TR><TD COLSPAN=5><B>Loan Date: " + loanDate + "<BR>Principal: $" + formatNum(form.Hprincipal.value) + "<BR># of Payments: " + aNPer + "<BR>Interest Rate: " + formatNum(aIntRate * 12 * 100) + "%<BR>Payment: $" + formatNum(form.HmoPmt.value) + "</B></TD></TR><TR><TD COLSPAN=5><CENTER><FONT SIZE=+2>Schedule of Payments</FONT><BR><FONT SIZE=-1>Please allow for slight rounding differences.</FONT></CENTER></TD></TR><TR><TD><B>Pmt #</B></TD><TD><B>Date</B></TD><TD><B>Principal</B></TD><TD><B>Interest</B></TD><TD><B>Balance</B></TD></TR>");

var part3 = ("" + aPmtRow + "");

var part4 = ("<TR><TD><B>Totals</B></TD><TD></TD><TD ALIGN=RIGHT><B>" + formatNum(aAccumPrin + .004) + "</B></TD><TD><B>" + formatNum(aAccumInt) + "</B></TD><TD></TD></TR></TABLE></BODY></HTML>");

var schedule = (part1 + "" + part2 + "" + part3 + part4 + "");

  reportWin = window.open("","","width=500,height=300,scrollbars=yes");
  reportWin.document.write(schedule);
  reportWin.document.close();
    
   }
}
