//*******************************************
    //DO NOT REMOVE THIS COPYWRITE INFO!
    //Mortgage Qualification Calculator V2
    //2001 Daniel C. Peterson ALL RIGHTS RESERVED
    //Created: 04/16/2001
    //Last Modified: 07/29/2002
    //This script may not be copied, edited, distributed or reproduced
    //without express written permission from
    //Daniel C. Peterson of Web Winder Website Services
    //For commercial use rates, contact:
    //Dan Peterson:
    //Web Winder Website Services
    //P.O. Box 11
    //Bemidji, MN  56619
    //dan@webwinder.com
    //http://www.webwinder.com
    //Commercial User Licence #:1744-425-62-412
    //Commercial Licence Date:2004-08-20
    //*******************************************
    
    
    
    function stripNum(num) {
    
    var iPercent
    var iDollar
    var iSpace
    var iComma
    var numLength = num.length
    
    //lalalla Line #114
    
    if(numLength > 0) {
    
       num=num.toString();
    
       iPercent = num.indexOf("%");
       if(iPercent >= 0) {
          num=num.substring(0,iPercent) + "" + num.substring(iPercent + 1,numLength);
          numLength=num.length;
          }
       iDollar = num.indexOf("$");
       if(iDollar >= 0) {
          num=num.substring(0,iDollar) + "" + num.substring(iDollar + 1,numLength);
          numLength=num.length;
          }
       iSpace = num.indexOf(" ");
       if(iSpace >= 0) {
          num=num.substring(0,iSpace) + "" + num.substring(iSpace + 1,numLength);
          numLength=num.length;
          }
       iComma = num.indexOf(",");
       if(iComma >= 0) {
          while(iComma >=1) {
             num=num.substring(0,iComma) + "" + num.substring(iComma + 1,numLength);
             numLength=num.length;
             iComma = num.indexOf(",");
          }
          }
    
          num = eval(num);
    
    
    } else {
    
    num = 0;
    
    }
    
    return num;
    
    }
    
    
    
    
    function formatCurrency(num) {
    
    var isNeg=0;
    
        if(num < 0) {
           num=num*-1;
           isNeg=1;
        }
    
        
        onum=Math.round(num*100)/100;
            
        integer=Math.floor(onum);
    
        if (Math.ceil(onum) == integer) {
            decimal="00";
        } else{
            decimal=Math.round((onum-integer)*100)
        }
        decimal=decimal.toString();
        if (decimal.length<2) decimal="0"+decimal;
    
        integer=integer.toString();
        var tmpnum="";
        var tmpinteger="";
        var y=0;
    
        for (x=integer.length;x>0;x--) {
            tmpnum=tmpnum+integer.charAt(x-1);
            y=y+1;
            if (y==3 & x>1) {
                tmpnum=tmpnum+",";
                y=0;
            }
        }
    
        for (x=tmpnum.length;x>0;x--) {
            tmpinteger=tmpinteger+tmpnum.charAt(x-1);
        }
            
        finNum="$"+tmpinteger+"."+decimal;
    
        if(isNeg == 1) {
           finNum = "-" + finNum;
        }
    
        return finNum;
    }
    
    
    
    
    function formatNumber(num) {
    
    var isNeg=0;
    
        if(num < 0) {
           num=num*-1;
           isNeg=1;
        }
    
        
        onum=Math.round(num*100)/100;
            
        integer=Math.floor(onum);
    
        if (Math.ceil(onum) == integer) {
            decimal="00";
        } else{
            decimal=Math.round((onum-integer)*100)
        }
        decimal=decimal.toString();
        if (decimal.length<2) decimal="0"+decimal;
    
        integer=integer.toString();
        var tmpnum="";
        var tmpinteger="";
        var y=0;
    
        for (x=integer.length;x>0;x--) {
            tmpnum=tmpnum+integer.charAt(x-1);
            y=y+1;
            if (y==3 & x>1) {
                tmpnum=tmpnum+",";
                y=0;
            }
        }
    
        for (x=tmpnum.length;x>0;x--) {
            tmpinteger=tmpinteger+tmpnum.charAt(x-1);
        }
            
        finNum=tmpinteger+"."+decimal;
    
        if(isNeg == 1) {
           finNum = "-" + finNum;
        }
    
        return finNum;
    }
    
    
    function computeForm(form) {
    
    //get loan variables
    
    
    var VpurchaseAmt = stripNum(form.purchaseAmt.value);
    if(VpurchaseAmt == "" || VpurchaseAmt == 0) {
       VpurchaseAmt = 60000;
       }
    
    var VdownPayPercAmt = stripNum(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 = formatNumber(VdownPayAmt);
    
    //CALCULATE LOAN AMOUNT
    var VloanAmt = 0;
    var VloanAmt = eval(VpurchaseAmt) - eval(VdownPayAmt);
    form.loanAmt.value = formatNumber(VloanAmt);
    
    //ADD LOAN AMOUNT TO HIDDEN AMORT FIELD
    form.Hprincipal.value = VloanAmt;
    
    //GET INTEREST RATE AND CONVERT TO FRACTION IF NEC
    var VintRate = stripNum(form.intRate.value);
    if(VintRate == "" || VintRate == 0) {
       VintRate = 8;
       }
    if(VintRate >= 1) {
       VintRate /= 100;
       }
    VintRate /= 12;
    
    //GET YEARS AND CONVERT TO MONTHS
    var VnoYears = stripNum(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 = formatNumber(VpmtPI);
    
    //ADD PAYMENT TO HIDDEN AMORT FIELD
    form.HmoPmt.value = VpmtPI;
    
    //COMPUTE MONTHLY PROPERTY TAX PAYMENT
    var VpropTaxPercAmt = stripNum(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 = formatNumber(VpropTaxAmt);
    
    //COMPUTE MONTHLY INSURANCE PAYMENT
    var VinsPercAmt = stripNum(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 = formatNumber(VinsAmt);
    
    //COMPUTE PRIVATE MORTGAGE INSURANCE (PMI) PAYMENT
    var VpmiPercAmt = stripNum(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 = formatNumber(VpmiAmt);
    
    //GET MONTHLY ASSOCIATION FEES
    VassocAmt = stripNum(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 = formatNumber(VpmtPITI);
    
    //COMPUTE TAX DEDUCTABLE PORTION OF PAYMENT
    var VintDeduct = VintRate * VloanAmt;
    var VpropTaxDeduct = VinsAmt;
    var VdeductAmt = eval(VintDeduct) + eval(VpropTaxDeduct);
    form.deductAmt.value = formatNumber(VdeductAmt);
    
    //GET GROSS PAY AND CONVERT TO MONTHLY
    var VgrossPay = stripNum(form.grossPay.value);
    if(form.payMethod.selectedIndex == 0) {
       var VmoPay = VgrossPay / 12;
       } else {
       var VmoPay = VgrossPay;
       }
    
    //GET MONTHLY DEBTS
    var VmoDebts = stripNum(form.moDebts.value);
    if(VmoDebts == "" || VmoDebts == 0) {
       VmoDebts = 0;
       form.moDebts.value = 0;
       }
    
    //CALCULATE PITI TO MONTHLY INCOME RATIO (28% max)
    var VratioIncome = VpmtPITI / VmoPay;
    if(VratioIncome < .01) {
       form.ratioIncome.value = formatNumber(VratioIncome *100) + "%";
       } else {
       form.ratioIncome.value = formatNumber(VratioIncome *100) + "%";
       }
    
    //CALCULATE PITI + DEBT TO MONTHLY INCOME RATIO (36% max)
    var VratioDebt = (eval(VpmtPITI) + eval(VmoDebts)) / VmoPay ;
    if(VratioDebt < .01) {
       form.ratioDebt.value = formatNumber(VratioDebt * 100) + "%";
       } else {
       form.ratioDebt.value = formatNumber(VratioDebt * 100) + "%";
       }
    
    //CALCULATE MAXIMUM LOAN AMOUNT
    var VmaxPmtIncome = VmoPay * .28;
    var VmaxPmtDebt = eval(VmoPay  * .36) - 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 = formatNumber(VmaxLoanAmt);
          }
       } 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 = formatNumber(VmaxLoanAmt);
          }
       }
    
    
    //DETERMINE IF QUALIFY
    if(VratioIncome > .28 || VratioDebt > .36) {
       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 Vprincipal = stripNum(form.Hprincipal.value);
    
    var VintRate = stripNum(form.intRate.value);
    
    var VnumPmts = stripNum(form.HaNPer.value);
    
    var pmtAmt = stripNum(form.HmoPmt.value);
    
    var prin = Vprincipal;
    var Vint = VintRate;
    if(Vint >= 1) {
       Vint /= 100;
       }
    Vint /= 12;
    
    var nPer = VnumPmts;
    
    var intPort = 0;
    var accumInt = 0;
    var prinPort = 0;
    var accumPrin = 0;
    var count = 0;
    var pmtRow = "";
    var pmtNum = 0;
    
    
    var today = new Date();
    var dayFactor = today.getTime();
    var pmtDay = today.getDate();
    var loanMM = today.getMonth() + 1;
    var loanYY = today.getYear();
    if(loanYY < 1900) {
       loanYY += 1900;
    }
    
    var loanDate = (loanMM + "/" + pmtDay + "/" + loanYY);
    var monthMS = 86400000 * 30.4;
    var pmtDate = 0;
    
    var displayPmtAmt = 0;
    
    var accumYearPrin = 0;
    var accumYearInt = 0;
    
    while(count < nPer) {
    
       if(count < (nPer - 1)) {
    
          intPort = prin * Vint;
          intPort *= 100;
          intPort = Math.round(intPort);
          intPort /= 100;
    
          accumInt = eval(accumInt) + eval(intPort);
          accumYearInt = eval(accumYearInt) + eval(intPort);
    
          prinPort = eval(pmtAmt) - eval(intPort);
          prinPort *= 100;
          prinPort = Math.round(prinPort);
          prinPort /= 100;
    
          accumPrin = eval(accumPrin) + eval(prinPort);
          accumYearPrin = eval(accumYearPrin) + eval(prinPort);
    
          prin = eval(prin) - eval(prinPort);
    
          displayPmtAmt = eval(prinPort) + eval(intPort);
    
       } else {
    
          intPort = prin * Vint;
          intPort *= 100;
          intPort = Math.round(intPort);
          intPort /= 100;
    
          accumInt = eval(accumInt) + eval(intPort);
          accumYearInt = eval(accumYearInt) + eval(intPort);
    
          prinPort = prin;
    
          accumPrin = eval(accumPrin) + eval(prinPort);
          accumYearPrin = eval(accumYearPrin) + eval(prinPort);
    
          prin = 0;
    
          //pmtAmt = eval(intPort) + eval(prinPort);
          displayPmtAmt = eval(prinPort) + eval(intPort);
       }
    
       count = eval(count) + eval(1);
    
       pmtNum = eval(pmtNum) + eval(1);
    
       dayFactor = eval(dayFactor) + eval(monthMS);
    
       pmtDate = new Date(dayFactor);
    
       pmtMonth = pmtDate.getMonth();
    
       pmtMonth = pmtMonth + 1;
    
       pmtYear = pmtDate.getYear();
       if(pmtYear < 1900) {
          pmtYear += 1900;
       }
    
    
       pmtString = (pmtMonth + "/" + pmtDay + "/" + pmtYear);
    
       pmtRow = ("" + pmtRow + "<tr><td align=right><font face='arial'><small>" + pmtNum + "</small></font></td><td align=right><font face='arial'><small>" + pmtString + "</small></font></td><td align=right><font face='arial'><small>" + formatCurrency(prinPort) + "</small></font></td><td align=right><font face='arial'><small>" + formatCurrency(intPort) + "</small></font></td><td align=right><font face='arial'><small>" + formatCurrency(displayPmtAmt) + "</small></font></td><td align=right><font face='arial'><small>" + formatCurrency(prin) + "</small></font></td></tr>");
    
       if(pmtMonth == 12 || count == nPer) {
    
    pmtRow = ("" + pmtRow + "<tr bgcolor='#dddddd'><td align=right><font face='arial'><small>Total</small></font></td><td align=left><font face='arial'><small>" + pmtYear + "</small></font></td><td align=right><font face='arial'><small>" + formatCurrency(accumYearPrin) + "</small></font></td><td align=right><font face='arial'><small>" + formatCurrency(accumYearInt) + "</small></font></td><td align=right><font face='arial'><small> </small></font></td><td align=right><font face='arial'><small> </small></font></td></tr>");
    
       accumYearPrin = 0;
       accumYearInt = 0;
    
       }
    
          if(count > 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 face='arial'><big><strong>Amortization Schedule</strong></big></font></center>");
    
    var part2 = ("<center><table border=1 cellpadding=2 cellspacing=0><tr><td colspan=6><font face='arial'><small><b>Loan Date: " + loanDate + "<br>Principal: $" + formatNumber(Vprincipal) + "<br># of Payments: " + nPer + "<br>Interest Rate: " + formatNumber(VintRate) + "%<br>Payment: $" + formatNumber(pmtAmt) + "</b></small></font></td></tr><tr><td colspan=6><center><font face='arial'><b>Schedule of Payments</b></font><br><font face='arial'><small><small>Please allow for slight rounding differences.</small></small></font></center></td></tr><tr bgcolor='silver'><td align='center'><font face='arial'><small><b>Pmt #</b></small></font></td><td align='center'><font face='arial'><small><b>Date</b></small></font></td><td align='center'><font face='arial'><small><b>Principal</b></small></font></td><td align='center'><font face='arial'><small><b>Interest</b></small></font></td><td align='center'><font face='arial'><small><b>Payment</b></small></font></td><td align='center'><font face='arial'><small><b>Balance</b></small></font></td></tr>");
    
    var part3 = ("" + pmtRow + "");
    
    var part4 = ("<tr><td colspan='2'><font face='arial'><small><b>Grand Total</b></small></font></td><td align=right><font face='arial'><small><b>" + formatCurrency(accumPrin) + "</b></small></font></td><td align=right><font face='arial'><small><b>" + formatCurrency(accumInt) + "</b></small></font></td><td> </td><td> </td></tr></table><br><center><form method='post'><input type='button' value='Print Window' onclick='window.print()'>&nbsp;&nbsp;&nbsp;<input type='button' value='Close Window' onclick='window.close()'></form></center></body></html>");
    
    var schedule = (part1 + "" + part2 + "" + part3 + part4 + "");
    
      reportWin = window.open("","","width=540,height=400,toolbar=yes,menubar=yes,scrollbars=yes");
    
      reportWin.document.write(schedule);
    
      reportWin.document.close();
    
       }
    
    }

