


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 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 computePmtLeft(prin,iRate,pmt)  {

   var count = 0;
   var prinPort = 0;
   var intPort = 0;
   
   var i = iRate;
        if (i > 1.0) {
        i = i / 100.0;
        } else {
        i = i
        }

    i /= 12;

   while(prin > 0) {
       intPort = prin * i;
       prinPort = pmt - intPort;
       prin = prin - prinPort;
       count = count + 1;
       if(count > 600) {break; } else {continue; }
       }
       
       return count;

}

function computeIntLeft(prinB,iRateB,pmtB)  {

   var countB = 0;
   var prinPortB = 0;
   var intPortB = 0;
   var accumIntB = 0;
   
   var iB = iRateB;
        if (iB > 1.0) {
        iB = iB / 100.0;
        
        } else {
        iB = iB
        }

     iB /= 12;


   while(prinB > 0) {
       intPortB = prinB * iB;
       accumIntB = eval(accumIntB) + eval(intPortB);
       prinPortB = eval(pmtB) - eval(intPortB);
       prinB = eval(prinB) - eval(prinPortB);
       countB = eval(countB) + eval(1);
       if(countB > 600) { break; } else { continue; }
       }
       
       return accumIntB;

}


function computeNewPmt(principal,interest,payments) {

 var i = interest;

    if (i > 1.0) {

        i = i / 100.0;

    }

    i /= 12;



    var pow = 1;

    for (var j = 0; j < payments; j++)

        pow = pow * (1 + i);

    var newPmt = (principal * pow * i) / (pow - 1);

    return newPmt;

}


function computeForm(form) {

    var accumTotBal = 0;
    var accumTotInt = 0;
    var accumTotPmt = 0;
    var accumCount = 0;
    var accumRate = 0;

//START LINE 1
     if(form.prin1.value == "" || form.intRate1.value == "" || form.pmt1.value == "") {
    form.pmtLeft1.value = 0;
    form.intLeft1.value = 0;
    } else {
    var Vprin1 = stripNum(form.prin1.value);
    var VintRate1 = stripNum(form.intRate1.value);
    var Vpmt1 = stripNum(form.pmt1.value);
    var VpmtLeft1 = computePmtLeft(Vprin1,VintRate1,Vpmt1);

    if(VpmtLeft1 >= 600) {
       alert("The payment amount entered on line #1 is not large enough to cover the monthly interest being charged.  Please increase that payment amount and try again.");
       form.pmtLeft1.value = 0;
       form.intLeft1.value = 0;
       } else {

    form.pmtLeft1.value = formatNumber(VpmtLeft1);

    var VintLeft1 = computeIntLeft(Vprin1,VintRate1,Vpmt1);

    form.intLeft1.value = formatNumber(VintLeft1);

    accumCount = eval(accumCount) + eval(1);
    accumRate = eval(accumRate) + eval(VintRate1);
    accumTotBal = eval(accumTotBal) + eval(Vprin1);
    accumTotPmt = eval(accumTotPmt) + eval(Vpmt1);
    accumTotInt = eval(accumTotInt) + eval(VintLeft1);
    }
    
  }

//START LINE 2
     if(form.prin2.value == "" || form.intRate2.value == "" || form.pmt2.value == "") {
    form.pmtLeft2.value = 0;
    form.intLeft2.value = 0;
    } else {
    var Vprin2 = stripNum(form.prin2.value);
    var VintRate2 = stripNum(form.intRate2.value);
    var Vpmt2 = stripNum(form.pmt2.value);
    var VpmtLeft2 = computePmtLeft(Vprin2,VintRate2,Vpmt2);

    if(VpmtLeft2 >= 600) {
       alert("The payment amount entered on line #2 is not large enough to cover the monthly interest being charged.  Please increase that payment amount and try again.");
       form.pmtLeft2.value = 0;
       form.intLeft2.value = 0;
       } else {

    form.pmtLeft2.value = formatNumber(VpmtLeft2);

    var VintLeft2 = computeIntLeft(Vprin2,VintRate2,Vpmt2);

    form.intLeft2.value = formatNumber(VintLeft2);

    accumCount = eval(accumCount) + eval(2);
    accumRate = eval(accumRate) + eval(VintRate2);
    accumTotBal = eval(accumTotBal) + eval(Vprin2);
    accumTotPmt = eval(accumTotPmt) + eval(Vpmt2);
    accumTotInt = eval(accumTotInt) + eval(VintLeft2);
    }
    
  }

//START LINE 3
     if(form.prin3.value == "" || form.intRate3.value == "" || form.pmt3.value == "") {
    form.pmtLeft3.value = 0;
    form.intLeft3.value = 0;
    } else {
    var Vprin3 = stripNum(form.prin3.value);
    var VintRate3 = stripNum(form.intRate3.value);
    var Vpmt3 = stripNum(form.pmt3.value);
    var VpmtLeft3 = computePmtLeft(Vprin3,VintRate3,Vpmt3);

    if(VpmtLeft3 >= 600) {
       alert("The payment amount entered on line #3 is not large enough to cover the monthly interest being charged.  Please increase that payment amount and try again.");
       form.pmtLeft3.value = 0;
       form.intLeft3.value = 0;
       } else {

    form.pmtLeft3.value = formatNumber(VpmtLeft3);

    var VintLeft3 = computeIntLeft(Vprin3,VintRate3,Vpmt3);

    form.intLeft3.value = formatNumber(VintLeft3);

    accumCount = eval(accumCount) + eval(3);
    accumRate = eval(accumRate) + eval(VintRate3);
    accumTotBal = eval(accumTotBal) + eval(Vprin3);
    accumTotPmt = eval(accumTotPmt) + eval(Vpmt3);
    accumTotInt = eval(accumTotInt) + eval(VintLeft3);
    }
    
  }

//START LINE 4
     if(form.prin4.value == "" || form.intRate4.value == "" || form.pmt4.value == "") {
    form.pmtLeft4.value = 0;
    form.intLeft4.value = 0;
    } else {
    var Vprin4 = stripNum(form.prin4.value);
    var VintRate4 = stripNum(form.intRate4.value);
    var Vpmt4 = stripNum(form.pmt4.value);
    var VpmtLeft4 = computePmtLeft(Vprin4,VintRate4,Vpmt4);

    if(VpmtLeft4 >= 600) {
       alert("The payment amount entered on line #4 is not large enough to cover the monthly interest being charged.  Please increase that payment amount and try again.");
       form.pmtLeft4.value = 0;
       form.intLeft4.value = 0;
       } else {

    form.pmtLeft4.value = formatNumber(VpmtLeft4);

    var VintLeft4 = computeIntLeft(Vprin4,VintRate4,Vpmt4);

    form.intLeft4.value = formatNumber(VintLeft4);

    accumCount = eval(accumCount) + eval(4);
    accumRate = eval(accumRate) + eval(VintRate4);
    accumTotBal = eval(accumTotBal) + eval(Vprin4);
    accumTotPmt = eval(accumTotPmt) + eval(Vpmt4);
    accumTotInt = eval(accumTotInt) + eval(VintLeft4);
    }
    
  }

//START LINE 5
     if(form.prin5.value == "" || form.intRate5.value == "" || form.pmt5.value == "") {
    form.pmtLeft5.value = 0;
    form.intLeft5.value = 0;
    } else {
    var Vprin5 = stripNum(form.prin5.value);
    var VintRate5 = stripNum(form.intRate5.value);
    var Vpmt5 = stripNum(form.pmt5.value);
    var VpmtLeft5 = computePmtLeft(Vprin5,VintRate5,Vpmt5);

    if(VpmtLeft5 >= 600) {
       alert("The payment amount entered on line #5 is not large enough to cover the monthly interest being charged.  Please increase that payment amount and try again.");
       form.pmtLeft5.value = 0;
       form.intLeft5.value = 0;
       } else {

    form.pmtLeft5.value = formatNumber(VpmtLeft5);

    var VintLeft5 = computeIntLeft(Vprin5,VintRate5,Vpmt5);

    form.intLeft5.value = formatNumber(VintLeft5);

    accumCount = eval(accumCount) + eval(5);
    accumRate = eval(accumRate) + eval(VintRate5);
    accumTotBal = eval(accumTotBal) + eval(Vprin5);
    accumTotPmt = eval(accumTotPmt) + eval(Vpmt5);
    accumTotInt = eval(accumTotInt) + eval(VintLeft5);
    }
    
  }

//START LINE 6
     if(form.prin6.value == "" || form.intRate6.value == "" || form.pmt6.value == "") {
    form.pmtLeft6.value = 0;
    form.intLeft6.value = 0;
    } else {
    var Vprin6 = stripNum(form.prin6.value);
    var VintRate6 = stripNum(form.intRate6.value);
    var Vpmt6 = stripNum(form.pmt6.value);
    var VpmtLeft6 = computePmtLeft(Vprin6,VintRate6,Vpmt6);

    if(VpmtLeft6 >= 600) {
       alert("The payment amount entered on line #6 is not large enough to cover the monthly interest being charged.  Please increase that payment amount and try again.");
       form.pmtLeft6.value = 0;
       form.intLeft6.value = 0;
       } else {

    form.pmtLeft6.value = formatNumber(VpmtLeft6);

    var VintLeft6 = computeIntLeft(Vprin6,VintRate6,Vpmt6);

    form.intLeft6.value = formatNumber(VintLeft6);

    accumCount = eval(accumCount) + eval(6);
    accumRate = eval(accumRate) + eval(VintRate6);
    accumTotBal = eval(accumTotBal) + eval(Vprin6);
    accumTotPmt = eval(accumTotPmt) + eval(Vpmt6);
    accumTotInt = eval(accumTotInt) + eval(VintLeft6);
    }
    
  }

//START LINE 7
     if(form.prin7.value == "" || form.intRate7.value == "" || form.pmt7.value == "") {
    form.pmtLeft7.value = 0;
    form.intLeft7.value = 0;
    } else {
    var Vprin7 = stripNum(form.prin7.value);
    var VintRate7 = stripNum(form.intRate7.value);
    var Vpmt7 = stripNum(form.pmt7.value);
    var VpmtLeft7 = computePmtLeft(Vprin7,VintRate7,Vpmt7);

    if(VpmtLeft7 >= 600) {
       alert("The payment amount entered on line #7 is not large enough to cover the monthly interest being charged.  Please increase that payment amount and try again.");
       form.pmtLeft7.value = 0;
       form.intLeft7.value = 0;
       } else {

    form.pmtLeft7.value = formatNumber(VpmtLeft7);

    var VintLeft7 = computeIntLeft(Vprin7,VintRate7,Vpmt7);

    form.intLeft7.value = formatNumber(VintLeft7);

    accumCount = eval(accumCount) + eval(7);
    accumRate = eval(accumRate) + eval(VintRate7);
    accumTotBal = eval(accumTotBal) + eval(Vprin7);
    accumTotPmt = eval(accumTotPmt) + eval(Vpmt7);
    accumTotInt = eval(accumTotInt) + eval(VintLeft7);
    }
    
  }

//START LINE 8
     if(form.prin8.value == "" || form.intRate8.value == "" || form.pmt8.value == "") {
    form.pmtLeft8.value = 0;
    form.intLeft8.value = 0;
    } else {
    var Vprin8 = stripNum(form.prin8.value);
    var VintRate8 = stripNum(form.intRate8.value);
    var Vpmt8 = stripNum(form.pmt8.value);
    var VpmtLeft8 = computePmtLeft(Vprin8,VintRate8,Vpmt8);

    if(VpmtLeft8 >= 600) {
       alert("The payment amount entered on line #8 is not large enough to cover the monthly interest being charged.  Please increase that payment amount and try again.");
       form.pmtLeft8.value = 0;
       form.intLeft8.value = 0;
       } else {

    form.pmtLeft8.value = formatNumber(VpmtLeft8);

    var VintLeft8 = computeIntLeft(Vprin8,VintRate8,Vpmt8);

    form.intLeft8.value = formatNumber(VintLeft8);

    accumCount = eval(accumCount) + eval(8);
    accumRate = eval(accumRate) + eval(VintRate8);
    accumTotBal = eval(accumTotBal) + eval(Vprin8);
    accumTotPmt = eval(accumTotPmt) + eval(Vpmt8);
    accumTotInt = eval(accumTotInt) + eval(VintLeft8);
    }
    
  }

//START LINE 9
     if(form.prin9.value == "" || form.intRate9.value == "" || form.pmt9.value == "") {
    form.pmtLeft9.value = 0;
    form.intLeft9.value = 0;
    } else {
    var Vprin9 = stripNum(form.prin9.value);
    var VintRate9 = stripNum(form.intRate9.value);
    var Vpmt9 = stripNum(form.pmt9.value);
    var VpmtLeft9 = computePmtLeft(Vprin9,VintRate9,Vpmt9);

    if(VpmtLeft9 >= 600) {
       alert("The payment amount entered on line #9 is not large enough to cover the monthly interest being charged.  Please increase that payment amount and try again.");
       form.pmtLeft9.value = 0;
       form.intLeft9.value = 0;
       } else {

    form.pmtLeft9.value = formatNumber(VpmtLeft9);

    var VintLeft9 = computeIntLeft(Vprin9,VintRate9,Vpmt9);

    form.intLeft9.value = formatNumber(VintLeft9);

    accumCount = eval(accumCount) + eval(9);
    accumRate = eval(accumRate) + eval(VintRate9);
    accumTotBal = eval(accumTotBal) + eval(Vprin9);
    accumTotPmt = eval(accumTotPmt) + eval(Vpmt9);
    accumTotInt = eval(accumTotInt) + eval(VintLeft9);
    }
    
  }

//START LINE 10
     if(form.prin10.value == "" || form.intRate10.value == "" || form.pmt10.value == "") {
    form.pmtLeft10.value = 0;
    form.intLeft10.value = 0;
    } else {
    var Vprin10 = stripNum(form.prin10.value);
    var VintRate10 = stripNum(form.intRate10.value);
    var Vpmt10 = stripNum(form.pmt10.value);
    var VpmtLeft10 = computePmtLeft(Vprin10,VintRate10,Vpmt10);

    if(VpmtLeft10 >= 600) {
       alert("The payment amount entered on line #10 is not large enough to cover the monthly interest being charged.  Please increase that payment amount and try again.");
       form.pmtLeft10.value = 0;
       form.intLeft10.value = 0;
       } else {

    form.pmtLeft10.value = formatNumber(VpmtLeft10);

    var VintLeft10 = computeIntLeft(Vprin10,VintRate10,Vpmt10);

    form.intLeft10.value = formatNumber(VintLeft10);

    accumCount = eval(accumCount) + eval(10);
    accumRate = eval(accumRate) + eval(VintRate10);
    accumTotBal = eval(accumTotBal) + eval(Vprin10);
    accumTotPmt = eval(accumTotPmt) + eval(Vpmt10);
    accumTotInt = eval(accumTotInt) + eval(VintLeft10);
    }
    
  }

//TOTALS
form.totalBal.value = formatNumber(accumTotBal);

form.totalpmt.value = formatNumber(accumTotPmt);

form.totalint.value = formatNumber(accumTotInt);


//BEGIN NEW LOAN CALC

if(form.totalint.value == "" || form.totalint.value == "0.00") {
   alert("Please complete and compute the top section of this form before attempting to calculate the new loan information.");
   } else {

//PLACE TOTAL OF CURRENT DEBT BALANCES
form.totCur.value = formatNumber(accumTotBal);

//PLACE TOTAL OF CURRENT DEBT PAYMENTS
form.totPmtCur.value = formatNumber(accumTotPmt);

//PLACE CURRENT EFFECTIVE RATE BEFORE TAX
var VeffRateCur = accumRate / accumCount;
form.effRateCur.value = formatNumber(VeffRateCur);

//PLACE CURRENT EFFECTIVE RATE AFTER TAX
form.effRateCurTax.value = formatNumber(VeffRateCur);

//PLACE PROPOSED NEW LOAN AMOUNT
var VcashOut = stripNum(form.cashOut.value);
var VcloseCost = stripNum(form.closeCost.value);
var proposed = eval(accumTotBal) + eval(VcashOut) + eval(VcloseCost);
form.totProp.value = formatNumber(proposed);

//PLACE PROPOSED EFFECTIVE RATE BEFORE TAX
var VpropIntRate = stripNum(form.newRate.value);
form.effRateProp.value = formatNumber(VpropIntRate);

//PLACE PROPOSED EFFECTIVE RATE AFTER TAX
var taxPercent = stripNum(form.incomeTax.value);
    if(taxPercent > 1) {
       taxPercent = taxPercent / 100;
       } else {
       taxPercent = taxPercent;
       }

var VnewRate = stripNum(form.newRate.value);
var VpropIntRateTax = eval(VnewRate) - (taxPercent * VnewRate);
form.effRatePropTax.value = formatNumber(VpropIntRateTax);

//CONVERT SELECTED TERM TO MONTHS

if(form.newTerm.selectedIndex == 0) {
    VnewTerm = 60;
    } else
      if(form.newTerm.selectedIndex == 1) {
      VnewTerm = 120;
      } else
         if(form.newTerm.selectedIndex == 2) {
         VnewTerm = 180;
         } else
            if(form.newTerm.selectedIndex == 3) {
            VnewTerm = 240;
            } else
               if(form.newTerm.selectedIndex == 4) {
               VnewTerm = 300;
               } else {
               Vterm = 0;
               }


//COMPUTE NEW LOAN PAYMENT BASED ON NEW TERMS

var VtotPmtProp = computeNewPmt(proposed,VpropIntRate,VnewTerm);
form.totPmtProp.value = formatNumber(VtotPmtProp);

Vsavings = eval(accumTotPmt) - eval(VtotPmtProp);
if(Vsavings < 0) {
   form.savings.value = 0;
   } else {
   form.savings.value = formatNumber(Vsavings);
   }

//COMPUTE FIRST YEAR MONTHLY TAX SAVINGS

VtaxSavings = 0;

taxRate = (taxPercent * VnewRate) / 100 / 12;
taxIntPort = 0;
taxAccumInt = 0;
taxPrinPort = 0;
taxCount = 0;
taxPrin = proposed;
taxPmt = VtotPmtProp;

while(taxCount < 12) {
   taxIntPort = taxPrin * taxRate;
   taxAccumInt = taxAccumInt + taxIntPort;
   taxPrinPort = taxPmt - taxIntPort;
   taxPrin = taxPrin - taxPrinPort;
   taxCount = taxCount + 1
   }

var moTaxSave = taxAccumInt / 12;
form.taxSave.value = formatNumber(moTaxSave);

//COMPUTE TOTAL MONTHLY SAVINGS

var VtotMoSave = eval(moTaxSave) + eval(Vsavings);
   if(VtotMoSave > 0) {
   form.totMoSave.value = formatNumber(VtotMoSave);
   } else {
   form.totMoSave.value = 0;
   }



  }
}
