$().ready(function () {

  $("#calculateButton").click(function() {

    var inputLabels = {
      'salePrice':    'sale price',
      'downPayment':  'down payment',
      'loanAmount':   'loan amount',
      'term':         'term',
      'interestRate': 'interest rate'
    };

    var requiredInputs = {
      'salePrice':    null,
      'downPayment':  null,
      'term':         null,
      'interestRate': null
    };

    var loanAmount = null;
    var monthCount = null;
    var monthlyPayment = null;

    $('#calculatorOutput').css({ visibility: 'hidden' });

    var val = null;
    for (var key in requiredInputs) {
      val = $("#"+key).asNumber();//replace(/[^\d\.]/g, '');
      // check that:
      //   - value is entered
      //   - value is not negative
      //   - value is not zero (except for interest rate [how cool would that be?])
      if (val == '' || (val < 0 || (key != 'interestRate' && val == 0))) {
        alert('Please enter a valid '+inputLabels[key] + '.');
        return;
      } else {
        requiredInputs[key] = val;
      }
    }

    loanAmount = requiredInputs['salePrice'] - requiredInputs['downPayment'];

    if (loanAmount <= 0) {
      alert('Down payment must be only a portion of the sale price.');
      return;
    } else {
      $('#loanAmount').text(loanAmount).formatCurrency();
    }

    monthCount = requiredInputs['term'] * 12;
    requiredInputs['interestRate'] = (requiredInputs['interestRate'] / 100) / 12;

    if (requiredInputs['interestRate'] > 0) {
      monthlyPayment =
        ( loanAmount
          * requiredInputs['interestRate']
          * Math.pow((1 + requiredInputs['interestRate']), monthCount))
      / (Math.pow((1 + requiredInputs['interestRate']), monthCount) - 1);
    } else {
      monthlyPayment = loanAmount / monthCount;
    }
    $('#monthlyPayment').text(monthlyPayment).formatCurrency();

    $('#calculatorOutput').css({ visibility: 'visible' });

  });

});

