function strPercentageToNum(ln)
{
  var ln2;
  ln2 = new String(ln);

  chr = '';
  result = '';

  for (i=0; i<ln2.length; i++) {
    chr = ln2.charAt(i);

    if(chr == "%") { 
      continue;
    } 
    else {
      result += chr;
    }
  }
  return result;       
}

function strDollarsToNum(ln)
{
  var ln2;
  ln2 = new String(ln);

  chr = '';
  result = '';

  for (i=0; i<ln2.length; i++) {
    chr = ln2.charAt(i);

    if( chr == "," || chr == "$" ) { 
      continue;
    } 
    else {
      result += chr;
    }
  }

  return result;       
}

function strNumToDollars(ln, dec)
{
  var ln2;
  ln2 = new String(ln);
  ln2 = strDollarsToNum(ln2);

  var first = '';
  var last = '';

  var pos = ln2.indexOf(".");
  if(pos == -1) {
    first = ln2;
    if(dec=="0") last = '';
    else last  = '.00';
  } 
  else {
    first = ln2.substring(0, pos); 
    last  = ln2.substring(pos, ln2.length);

    if(dec=="0") {
      last = '';
    }
    else {    
     if(last.length < 3) {
      if(last.length==2) {
        last += "0";
      }
      if(last.length==1) {
        last += "00";
      }   
     }
    }
  }
  if(!first) {
     first += "0";
  }

  result = '';
  j 	 = 0;  

  for (i=first.length; i>0; i--) {
//    result = first.substring(i-1,i) + result;

    result = first.charAt(i-1) + result;
    j+=1;
    if(j>2 && i>1) { 
      if(first.charAt(0)!="-") {
        result = "," + result; 
      } else if (i>2) {
        result = "," + result; 
      }
      j = 0;      
    }

  }

  result = "$" + result + last;  

  return result;       
}

function doFixPerc(input, dec) 
{
  if( !input ) {
    if(dec=="0") input="0";
    else input = "0.00";
  }

  input = strPercentageToNum(input);

  if( isNaN(parseFloat(input)) ) {
    alert("Only numbers allowed for input values.");
    if(dec=="0") return "0";   
    else return "0.00";
  }
  if( input < 0 ) {
    alert("Please enter positive values.");
    if(dec=="0") return "0";
    else return "0.00";
  }

  var first = '';
  var last = '';

  var pos = input.indexOf(".");
  if(pos == -1) {
    first = input;
    if(dec=="0") last  = '';
    else last = '.00';
  } 
  else {
    first = input.substring(0, pos); 
    last  = input.substring(pos, input.length);

    if(last.length < 3) {
      if(last.length==2) {
        last += "0";
      }
      if(last.length==1) {
        last += "00";
      }   
    }
  }
  if(!first) {
     first += "0";
  }

  return first + last;
}

function doAdjust(what, type, dec) 
{
  var value = what.value;
  var v = new String(value);

  if(type==0) {
    value  = doFixPerc(value, dec) + "%";
  }
  if(type==1) {
    if( !value ) {
      if(dec=="0") value = "0";
      else value = "0.00";
    }

    MM = 0;
    if(	v.substring(v.length-2, v.length) == "MM" ||
	v.substring(v.length-2, v.length) == "mm" ) {
	v = v.substring(0, v.length-2);
	v += "000000";
	value = parseInt(v);
	MM = 1;
    }

    if( !MM && (v.substring(v.length-1, v.length) == "M" ||
	v.substring(v.length-1, v.length) == "m")) {
	v = v.substring(0, v.length-1);
	v += "000";
	value = parseInt(v);
    }

    value = strDollarsToNum(value);

    if( isNaN(value) ) {
      alert("Only numbers allowed for input values.");
      if(dec=="0") value = "0";
      else value = "0.00";
    }
    if( value < 0 ) {
      alert("Please enter positive values.");
      if(dec=="0") value = "0";
      else value = "0.00";
    }
    value  = strNumToDollars(value, dec);
  }

  what.value	= value;
}

function strNumToCommas(ln)
{
  var ln2;

  ln2 = new String(ln);

  pos 	 = ln2.indexOf(".");
  if(pos == -1) {
    first = ln2;
    last  = '';    
  } else {
    first = ln2.substring(0, pos); 
    last  = ln2.substring(pos, ln2.length);
  }

  result = '';
  j 	 = 0;  

  for ( i=first.length; i>0; i-- ) {
    result = first.substring(i-1,i) + result;
    j+=1;

    if(j==3 && i!=1) { 
      result = "," + result; 
      j = 0;      
    }
  }
  result = result + last;  

  return result;       
}

function clearForm(theForm) {
  eval("document.form" + theForm + ".loan" + theForm + ".value = ''");
  eval("document.form" + theForm + ".rate" + theForm + ".value = ''");
  eval("document.form" + theForm + ".termyr" + theForm + ".value = ''");
  eval("document.form" + theForm + ".termmo" + theForm + ".value = ''");
  eval("document.form" + theForm + ".amortyr" + theForm + ".value = ''");
  eval("document.form" + theForm + ".amortmo" + theForm + ".value = ''");

  eval("document.form" + theForm + ".monthly" + theForm + ".value = ''");
  eval("document.form" + theForm + ".annual" + theForm + ".value = ''");
  eval("document.form" + theForm + ".constant" + theForm + ".value = ''");
  eval("document.form" + theForm + ".balance" + theForm + ".value = ''");
}

function doPadding(value) {
  var sValue = new String(value);
  var sPad   = '';

  sLength = sValue.length;
  for (i=sLength; i<11; i++) {
    sPad += ' ';
  }

  return sPad;
}

function doCalculations(theForm, Amount, Rate, TermYr, TermMo, AmortYr, AmortMo) {

//  Amount = strCommaToNull(Amount);
  Amount = strDollarsToNum(Amount);
  Rate = strPercentageToNum(Rate);

  if( !Amount ) {
    alert("Please enter a value for Loan Amount.");
    return;
  }
  if( !Rate ) {
    alert("Please enter a value for Interest Rate.");
    return;
  }
  if( !TermYr && !TermMo ) {
    alert("Please enter a value for Term.");
    return;
  }
  if( !AmortYr && !AmortMo) {
    alert("Please enter a value for Amortization.");
    return;
  }

  if( !TermYr )  TermYr = 0;
  if( !TermMo )  TermMo = 0;
  if( !AmortYr ) AmortYr = 0;
  if( !AmortMo ) AmortMo = 0;

  var mo_debt	= 0;
  var an_debt	= 0;
  var constant	= 0;
  var balance	= 0;

  var fv_temp1	= 0;
  var fv_temp2	= 0;

  if( isNaN(parseInt(Amount)) || isNaN(parseFloat(Rate)) || 
      isNaN(parseInt(TermYr)) || isNaN(parseInt(TermMo)) || 
      isNaN(parseInt(AmortYr)) || isNaN(parseInt(AmortMo)) ) {
    alert("Only numbers allowed for input values.");
    return;
  }

  if( parseInt(Amount) < 0 ) {
    alert("Please enter a positive Loan Amount.");
    return;
  }
  if( parseInt(Rate) < 0) {
    alert("Please enter a positive Interest Rate.");
    return;
  }

  TermMo  = parseInt(TermMo) + parseInt(TermYr) * 12;
  AmortMo = parseInt(AmortMo) + parseInt(AmortYr) * 12;

  if( TermMo <= 0 ) {
    alert("Please enter positive Term values.");
    return;
  }
/*
  if( AmortMo <= 0 ) {
    alert("Please enter positive Amortization values.");
    return;
  }
*/  
  mo_debt = 1 + Rate / 1200;
  mo_debt = Math.pow(mo_debt, (-AmortMo));
  mo_debt = 1 - mo_debt;
  mo_debt = (Amount * Rate / 1200) / mo_debt;
  mo_debt = Math.round(mo_debt * 100) / 100;
  
//  an_debt = Math.round(mo_debt * 12 * 100) / 100;
  an_debt = Math.round(mo_debt * 12);

  constant = Math.round(an_debt / Amount * 100000) / 1000;

  fv_temp1 = 1 + Rate / 1200;
  fv_temp1 = Math.pow(fv_temp1, AmortMo) - 1;

  fv_temp2 = 1 + Rate / 1200;
  fv_temp2 = Math.pow(fv_temp2, TermMo) - 1;

  balance = 1 - fv_temp2 / fv_temp1;
//  balance = Math.round(Amount * balance * 100) / 100;
  balance = Math.round(Amount * balance);

  mo_debt = Math.round(mo_debt);

  if( isNaN(mo_debt) )  mo_debt = 0;
  if( isNaN(an_debt) )  an_debt = 0;
  if( isNaN(constant) ) constant = 0;
  if( isNaN(balance) )  balance = 0;

  eval("document.form" + theForm + ".monthly" + theForm + ".value = '" + "$" + strNumToCommas(mo_debt) + "'");
  eval("document.form" + theForm + ".annual" + theForm + ".value = '" + "$" + strNumToCommas(an_debt) + "'");
  eval("document.form" + theForm + ".constant" + theForm + ".value = '" + constant + "%'");
  eval("document.form" + theForm + ".balance" + theForm + ".value = '" + "$" + strNumToCommas(balance) + "'");
}
