var inputStr = "";
var invalidNumber = 0;
var errorNumber = "";
var checkZero = 0;
var numtemp = "";
var prnttemp = "";
var P = 0;
var p = 0;
var I = 0;
var II = 0;
var N = 0;
var n = 0;
var blank = "                         ";
var pfinal = "";



function loanCalc(form) {

// get form input and determine if valid

  var Ptemp = document.calc.amtLoan.value;
  var itemp = document.calc.intRate.value;
  var ntemp = document.calc.years.value;
  //var ntemp = divtemp / 12;

  inputStr = Ptemp;
  errorNumber = "Amount of Loan";
  validNumber();

  Ptemp = inputStr;


  inputStr = itemp;
  errorNumber = "Annual Interest Rate";
  validNumber();
  itemp = inputStr;

  inputStr = ntemp;
  errorNumber = "Number of Years";
  validNumber();
  ntemp = inputStr;



// invalid input, clear monthly payment

  if (invalidNumber == 1) {

    document.calc.payment.value = "";

  }

// valid input, calculate payment********************************************

  else {

    P = parseFloatX(Ptemp);
    II = parseFloatX(itemp);
    I = II / 100 / 12;
    N = parseFloatX(ntemp);
    n = N //* 12;
//************************n = N * 12;****************************************




    if (n == 0) {
      standardOutput(P);
      document.calc.payment.value = numtemp;
    }

    else {
      if (I == 0) {
        p = P/n;
        standardOutput(p);
        document.calc.payment.value = numtemp;

      }
      else {
        p = -((-P * I * Math.pow((1 + I),n)) / (Math.pow((1 + I),n) - 1));
        standardOutput(p);
        pfinal = numtemp;
        document.calc.payment.value = pfinal;
        //if (document.calc.amortTable.checked) {
          //makeTable();
        //}
      }
    }
  }
}


//*******************************************************
// construct amorization table from data

function makeTable() {

  standardOutput(P);

  var PP = numtemp;

  inputStr = document.calc.year1.value;

  errorNumber = "First Payment";

  validNumber();

  var year = parseFloatX(inputStr);

  var month = document.calc.month1.selectedIndex;

  var firstMonth = month;

  var curMonth = "";

  var prntMonth = "";

  var balance = P;

  var prntBal = ""

  var prinPaid = 0;

  var prntPrin = ""

  var intPaid = 0;

  var prntInt = "";

  var accumInt = 0;



// create new window for amortization data

  var dataWindow = window.open("","dataWindow","menubar,scrollbars,resizable,width=625,height=350");

  if (dataWindow != null) {

// assemble content for data window

    var data = "";

    data += '<HTML><HEAD><TITLE>Amortization Schedule</TITLE></HEAD>';

    data += '<BODY BGCOLOR="#FFFFFF"><CENTER><FONT SIZE=5><B>Loan Amortization ';

    data += 'Schedule</B></FONT><BR><FONT SIZE=4><B>' + PP + ' at ' + II + '% ';

    data += 'for ' + N + ' years<BR>Monthly Payment: ' + pfinal + '</B></FONT>';

    data += '</CENTER><P><FONT COLOR="#FF0000"><B>Please Wait</B></FONT> ';

    data += '- slower CPU\'s may take a minute to build the table.<P>'

    dataWindow.document.write(data);



    data = "";

    data += '<CENTER><TABLE BORDER=0 WIDTH=590><TR><TD ALIGN=center>';

    data += '<FONT SIZE=4 COLOR="#663300"><B>Month</B></FONT></TD><TD ALIGN=center>';

    data += '<FONT SIZE=4 COLOR="#006633"><B>Principal Paid</B></FONT></TD>';

    data += '<TD ALIGN=center><FONT SIZE=4 COLOR="#003399"><B>Interest Paid</B>';

    data += '</FONT></TD><TD ALIGN=center><FONT SIZE=4 COLOR="#CC0033"><B>';

    data += 'Balance Remaining</B></FONT></TD></TR><TR><TD ALIGN=center>';

    data += '<FONT SIZE=3 COLOR="#000000" FACE="ARIAL,HELVETICA"><B>' + year + '</B>';

    data += '</FONT></TD><TD></TD><TD></TD><TD></TD></TR>';



    for (i = 0; i < n; i++) {

      curMonth = document.calc.month1.options[month].text;

      prntMonth = curMonth + blank;

      prntMonth = prntMonth.substring(0,12);



      intPaid = balance * I;

      prntValue(intPaid,22);

      prntInt = prnttemp;



      accumInt += intPaid;



      prinPaid = p - intPaid;

      prntValue(prinPaid,22);

      prntPrin = prnttemp;



      balance -= prinPaid;

      prntValue(balance,23);

      prntBal = prnttemp;



      data += '<TR><TD ALIGN=center><FONT SIZE=2 COLOR="#663300" FACE="ARIAL,HELVETICA">';

      data += '<B>' + prntMonth + '</B></FONT></TD><TD ALIGN=center>';

      data += '<FONT SIZE=2 COLOR="#006633" FACE="ARIAL,HELVETICA"><B>' + prntPrin;

      data += '</B></FONT></TD><TD ALIGN=center><FONT SIZE=2 COLOR="#003399" ';

      data += 'FACE="ARIAL,HELVETICA"><B>' + prntInt + '</B></FONT></TD>';

      data += '<TD  ALIGN=center><FONT SIZE=2 COLOR="#CC0033" FACE="ARIAL,HELVETICA">';

      data += '<B>' + prntBal + '</B></FONT></TD></TR>';



      if (month != 11) {

        month++;

      }

      else {

        month = 0;

        year++;

        if ((firstMonth != 0) || (i != n-1)) {

          data += '<TR><TD ALIGN=center><IMG ';

          data += 'SRC="dot.gif" ';

          data += 'ALT=" " WIDTH="10" HEIGHT="10" BORDER=0><BR><FONT SIZE=3 '

          data += 'COLOR="#000000" FACE="ARIAL,HELVETICA"><B>' + year;

          data += '</B></FONT></TD><TD></TD><TD></TD><TD></TD></TR>';

        }

      }

    }

  }



  standardOutput(accumInt);

  prntAccumInt = numtemp;

  standardOutput(P+accumInt);

  var Total = numtemp;



  data += '<TR><TD COLSPAN=4><IMG SRC="http://www.ataccorp.com/graphics/dot.gif" ';

  data += 'ALT=" " WIDTH="10" HEIGHT="10" BORDER=0>';

  data += '</TD></TR><TR><TD ALIGN=center VALIGN=middle>';

  data += '<FONT SIZE=3 FACE="ARIAL,HELVETICA"><B>Totals</B></FONT></TD>';

  data += '<TD ALIGN=center><FONT SIZE=2 FACE="ARIAL,HELVETICA"><B>Loan:<BR>' + PP;

  data += '</B></FONT></TD><TD ALIGN=center><FONT SIZE=2 FACE="ARIAL,HELVETICA">';

  data += '<B>Interest:<BR>' + prntAccumInt + '</B></FONT></TD><TD ALIGN=center>';

  data += '<FONT SIZE=2 FACE="ARIAL,HELVETICA"><B>Loan + Interest:<BR>' + Total;

  data += '</B></FONT></TD></TR></TABLE></CENTER><P><CENTER><FORM><INPUT ';

  data += 'NAME="CloseWindow" TYPE="button" VALUE="Close Window" ';

  data += 'onClick="self.close()"></FORM></CENTER></BODY></HTML>';



// write HTML to new window document

  dataWindow.document.write(data);

  dataWindow.document.close() // close layout stream;

}



// format for printing

function prntValue(value,len) {

  standardOutput(value);

  prnttemp = numtemp + blank;

  prnttemp = prnttemp.substring(0,len);

}



// add dollar sign and commas

function standardOutput(num) {

  num = Math.round(num * 100) / 100;

  num += "";

  cpl = num.indexOf(".");

  if (cpl == -1) {

    cpl = num.length;

    numtemp = ".00";

  }

  else {

    numtemp = num.substring(cpl,num.length) + "00";

    numtemp = numtemp.substring(0,3);

  }

  while (cpl > 3) {

  numtemp = "," + num.substring(cpl-3,cpl) + numtemp;

    cpl -= 3;

  }

  numtemp =  num.substring(0,cpl) + numtemp

}



function validNumber() {

  var oneChar = "";

  var decimalFlag = 0;

  checkZero = 0;



  for (var i = 0; i < inputStr.length; i++) {

    oneChar = inputStr.charAt(i);



// check for 0 1 2 3 4 5 6 7 8 9 , . $ % or if not, alert user of error

    if ((oneChar < "0" || oneChar > "9") && (oneChar != ",") && (oneChar != ".") && (oneChar != "$") && (oneChar != "%")) {

      numberAlert();

      continue;

    }



// check for dollar signs, commas or percent signs and eliminate

    if ((oneChar == "$") || (oneChar == ",") || (oneChar == "%")) {

      inputStr = inputStr.substring(0,i) + inputStr.substring((i + 1),inputStr.length);

      i--;

    continue;

    }



// check for decimal points and determine if valid or if not, alert user of error

    if (oneChar == ".") {

      if ((inputStr.length == 1) || (decimalFlag == 1)) {

        numberAlert();

      }

      else {

        decimalFlag = 1;

      }

    continue;

    }

  }

  if (inputStr == "") {

    inputStr = "0";

  }

}



function numberAlert() {

  var msg = "An invalid number was entered.\nPlease re-enter " + errorNumber + ".\nPress control R (command R for Macintosh),\nand then the Calculate button.";

  alert(msg);

  invalidNumber = 1;

  checkZero = 1;

  i = inputStr.length;

}


function carryOverPrincipal(){
  var myPrincipal = document.calc.amtLoan.value;
  //var adjPrincipal = (myPrincipal * .9);
document.calc.wInvestment.value = myPrincipal;
     return true;
}


function carryOverLength(){
  var myLength = document.calc.years.value;

document.calc.wLength.value=myLength;
     return true;
}




function formatUSCurrency(theNumber) {
  var isNegative = 0
  if (theNumber != "") {

    var workingNumber = theNumber + "" // Evaluate to a string

    if (workingNumber.charAt(0) == "-") {
      isNegative = 1;
      workingNumber = workingNumber.substring(1, workingNumber.length)
    }

    var withoutChars = ""
    for (x=0; x<=((workingNumber.length)-1); x++) {
      thisChar = workingNumber.charAt(x)
      charAsNum = parseInt(thisChar)
      if ( ((thisChar >= "0") & (thisChar <= "9")) || (thisChar == ".")  ) {
        withoutChars += workingNumber.charAt(x)
      }
    }
    workingNumber = withoutChars
    decimalPoint = workingNumber.indexOf(".")

    if (decimalPoint == -1) {
      dollarValue = workingNumber
      centsValue = "00"
      } else if (decimalPoint == 0) {
      dollarValue = "0"
      centsValue = workingNumber.substring(decimalPoint + 1, workingNumber.length)
    } else {
        dollarValue = workingNumber.substring(0, decimalPoint)
        if (decimalPoint == (workingNumber.length - 1)) {
          centsValue = "00";
        } else {
          centsValue = getValue(workingNumber.substring(decimalPoint + 1, workingNumber.length));
          centsValue += "0";
          centsValue = centsValue.charAt(0) + centsValue.charAt(1)
        }
    }

    var theString = dollarValue;
    var totalCommas = Math.floor((theString.length - 1) / 3)

    var dollarAmt = ""
    x=dollarValue.length
    position = 0
    while (x > 0) {
        x = x - 1
        thisChar = dollarValue.charAt(x)
        rounded = Math.round(position/3)
        if ( (position/3 == rounded ) & (position != 0) ) {
           dollarAmt = "," + dollarAmt
        }
        dollarAmt = thisChar +  dollarAmt
        position = position + 1
    }

    if (isNegative) {
      theString = "$" + dollarAmt + "." + centsValue
      //theString = "($" + dollarAmt + "." + centsValue + ")"
    } else {
      theString = "$" + dollarAmt + "." + centsValue
    }
    return (theString);
  } else {
    return("$0.00");
  }
}

function parseFloatX(s)
{
  var r = /[^0-9\.\-]/g;
  return parseFloat(s.replace(r,""));
}


function addNode(){

     var principalTotal = document.calc.amtLoan.value;
     var lengthMonths = document.calc.years.value;
     var monthlyTotal = document.calc.payment.value;
     var taxBracket = document.calc.taxBracket.value;
     var NetIncome = document.calc.wNetIncomeTemp.value;
     var MinusCostOfLoan = document.calc.wMinusCostOfLoan.value;

 p = parseFloatX(principalTotal);//50,000
 l = parseFloatX(lengthMonths);//180
 m = parseFloatX(monthlyTotal);//537.00
 var yearlyTotal = m * 12;//537 * 12 = 6444/year********************tried commenting out****************
 periodTotal = m * l; //6444 * 180 =
 T = periodTotal - p;
 ts = T * parseFloatX(taxBracket);
 tsi = myRound(ts,2);
 tcl = T - tsi;
 totsav = parseFloatX(NetIncome) - tcl;

        /*
	alert('p = ' + p);
	alert('l = ' + l);
	alert('m = ' + m);
	alert('t = ' + yearlyTotal);
	alert('ttemp = ' + periodTotal);
	alert('T = ' + T);
	alert('ts = ' + ts);
	alert('tsi = ' + tsi);
	alert('tcl = ' + tcl);
	alert('totsav = ' + totsav);
	alert('NetIncome = ' + NetIncome);
	alert('MinusCostOfLoan = ' + MinusCostOfLoan);
        */

document.calc.t.value = yearlyTotal
document.calc.T.value = T
document.calc.ttemp.value = periodTotal
document.calc.bTaxSavings.value = formatUSCurrency(ts);
document.calc.bTotalCostOfLoan.value = formatUSCurrency(tcl);
document.calc.wMinusCostOfLoan.value = formatUSCurrency(tcl);
document.calc.TotalSavings.value = formatUSCurrency(totsav);
	//alert('NetIncome = ' + NetIncome);
}


function myRound( number , places )
 {
   var factor = 100;
   for (var i = 0;i < places;i++) factor *= factor

   return (Math.round(number * factor))/factor
 }

function getValue(theString)
{
    var noJunk = "";
    var withDollar = "";
    var foundDecimal = 0;
    var foundAlphaChar = 0;

    theString += "";
    for (i=0; i <= theString.length; i++) {
        var thisChar = theString.substring(i, i+1);

        if (thisChar == ".") {
          foundDecimal = 1;
          noJunk = noJunk + thisChar;
        }

        if ((thisChar < "0") || (thisChar > "9")) {
          if ((thisChar != "$") && (thisChar !=".") && (thisChar != ",") && (thisChar != " ") && (thisChar !="")) foundAlphaChar = 1;
        } else {
           withDollar = withDollar + thisChar
           noJunk = noJunk + thisChar
        }

        if ((thisChar == "$") || (thisChar == ".") || (thisChar == ",")) {
          withDollar = withDollar + thisChar
        }
     }

     if (foundDecimal) { return parseFloatX(noJunk); }
     else if (noJunk.length > 0) { return parseInt(noJunk); }
     else return 0;
}

function formatUSCurrency(theNumber) {
  var isNegative = 0
  if (theNumber != "") {

    var workingNumber = theNumber + "" // Evaluate to a string

    if (workingNumber.charAt(0) == "-") {
      isNegative = 1;
      workingNumber = workingNumber.substring(1, workingNumber.length)
    }

    var withoutChars = ""
    for (x=0; x<=((workingNumber.length)-1); x++) {
      thisChar = workingNumber.charAt(x)
      charAsNum = parseInt(thisChar)
      if ( ((thisChar >= "0") & (thisChar <= "9")) || (thisChar == ".")  ) {
        withoutChars += workingNumber.charAt(x)
      }
    }
    workingNumber = withoutChars
    decimalPoint = workingNumber.indexOf(".")

    if (decimalPoint == -1) {
      dollarValue = workingNumber
      centsValue = "00"
      } else if (decimalPoint == 0) {
      dollarValue = "0"
      centsValue = workingNumber.substring(decimalPoint + 1, workingNumber.length)
    } else {
        dollarValue = workingNumber.substring(0, decimalPoint)
        if (decimalPoint == (workingNumber.length - 1)) {
          centsValue = "00";
        } else {
          centsValue = getValue(workingNumber.substring(decimalPoint + 1, workingNumber.length));
          centsValue += "0";
          centsValue = centsValue.charAt(0) + centsValue.charAt(1)
        }
    }

    var theString = dollarValue;
    var totalCommas = Math.floor((theString.length - 1) / 3)

    var dollarAmt = ""
    x=dollarValue.length
    position = 0
    while (x > 0) {
        x = x - 1
        thisChar = dollarValue.charAt(x)
        rounded = Math.round(position/3)
        if ( (position/3 == rounded ) & (position != 0) ) {
           dollarAmt = "," + dollarAmt
        }
        dollarAmt = thisChar +  dollarAmt
        position = position + 1
    }

    if (isNegative) {
      theString = "$" + dollarAmt + "." + centsValue
      //theString = "($" + dollarAmt + "." + centsValue + ")"
    } else {
      theString = "$" + dollarAmt + "." + centsValue
    }
    return (theString);
  } else {
    return("$0.00");
  }
}

function formatPercent(theNumber,decimalPlaces) {
  theNumber = getValue(theNumber);
  if (theNumber < 1) { theNumber = theNumber * 100; }
  with (Math) theNumber = (round(theNumber * pow(10,decimalPlaces))) / pow(10,decimalPlaces);
  return(theNumber + "%");
}

function removeCents(theNumber) {

  theNumber = getValue(theNumber)
  theNumber = Math.round(theNumber * 100) / 100;
  theNumber = theNumber + ""
  decimalPoint = theNumber.indexOf(".")

    if (decimalPoint == -1) {
      dollarValue = theNumber
    } else if (decimalPoint == 0) {
      dollarValue = 0
    } else {
      dollarValue = theNumber.substring(0, decimalPoint)
    }

    var dollarAmt = ""
    x=dollarValue.length
    position = 0
    while (x > 0) {
        x = x - 1
        thisChar = dollarValue.charAt(x)
        rounded = Math.round(position/3)
        if ( (position/3 == rounded ) & (position != 0) ) {
           dollarAmt = "," + dollarAmt
        }
        dollarAmt = thisChar +  dollarAmt
        position = position + 1
    }

  dollarValue = "$" + dollarAmt
  return(dollarValue)
}


function monthlyPayment(term, rate, loanAmount) {
  if (rate > 1) { (rate = rate / 100); }
  rateMonthly = (rate / 12);

  totalPayments = (term * 12);
  payment = (loanAmount * rateMonthly) / (1 - Math.pow((1+rateMonthly), (-1*totalPayments)) )
  return(payment)
}


function figureLoanAPR (loanYears, iRateAnnual, loanAmount, monthly) {
  loanMonths = loanYears * 12;
  if (iRateAnnual > 1) { (iRateAnnual = iRateAnnual / 100); }
  iRateMonthly = iRateAnnual / 12;

  prepaidFinanceCharges = Math.round(((.01 * loanAmount) + 375 + (((loanAmount * iRateAnnual) / 365) * 30)) * 100) / 100;

  aprPrinciple = Math.round((loanAmount - prepaidFinanceCharges) * 100) / 100;
  compoundX = Math.pow( (1 + iRateMonthly) , (-1 * loanMonths) );

  loanAPR = ((monthly * (1 - (compoundX) )) / aprPrinciple) * 12 * 100;
  loanAPR = Math.round(loanAPR * 1000) / 1000;
  return(loanAPR);
}


function calculate1() {

    userdata    = document.forms[0];
    rate        = getValue(userdata.wInterest.value);
    time        = getValue(userdata.years.value);
    amount      = getValue(userdata.wInvestment.value);

  var intMultiplier = 1;
  var futWorth = 0;



  //Value of Savings
  rate = rate * .01;
  for (index=1; index <= time; index++) {
        intMultiplier = intMultiplier + intMultiplier * rate;
  }

  intMultiplier = intMultiplier * 100;
  intMultiplier = Math.round(intMultiplier);
  intMultiplier = intMultiplier/100;

  futWorth = amount * intMultiplier;

  futWorth = formatUSCurrency(futWorth)

  results = document.forms[0].results

  results.value = ('Based on the estimated rate of return, after ' + time + ' years, your current savings and investments will be worth ' + futWorth + '.');



}





