﻿function calculate(){
  var propertyValue = parseFloat( $F('propertyValue') );
  var depositAmount = parseFloat( $F('depositAmount') );
  var interestRate = parseFloat( $F('interestRate') );
  var termYears = parseFloat( $F('termYears') );

  if( isNaN( propertyValue ) || 
      isNaN( depositAmount ) ||
      isNaN( interestRate ) ||
      isNaN( termYears ) )
  {
    alert( 'Values must be numeric.' );
    return;
  }  

  var mortgageAmount = propertyValue - depositAmount;
  var depositPercent = 100 * depositAmount / propertyValue;

  if (termYears <= 0)
  {
    alert( 'Please enter a valid term for the mortgage.' );
    return;
  }
  if (interestRate <= 0)
  {
    alert( 'Please enter a valid interest rate.' );
    return;
  }
  if (propertyValue <= 0)
  {
    alert( 'Please enter a valid property value.' );
    return;
  }
  if (depositAmount <= 0)
  {
    alert( 'Please enter a valid deposit amount.' );
    return;
  }
  if (mortgageAmount <= 0)
  {
    alert( 'The property value must be greater than the deposit amount.' );
    return;
  }
  
  interestRate = interestRate / 100; // percent to decimal

  var termMonths = termYears * 12;
  var monthlyInterest = interestRate / 12;
  
  var monthlyPayments = mortgageAmount * monthlyInterest / (1 - Math.pow(1 + monthlyInterest, -termMonths));
  
  $('depositPercent').update( format2dp( depositPercent ) + '%' );
  $('mortgageAmount').update( '£' + format2dp( mortgageAmount ) );
  $('monthlyPayments').update( '£' + format2dp( monthlyPayments ) );
  
  [$('depositPercent'), $('mortgageAmount'), $('monthlyPayments')].invoke('highlight');
}

function format2dp(num)
{
  var result = '';
  
  if(num < 0)
  {
    result += '-';
    num = Math.abs(num);
  }
  
  result += Math.floor(num * 100) / 100;
  var l = result.length;

  var dp = result.indexOf('.');
  if( dp == -1 ) 
    return result + '.00';
  
  return result + '00'.substring(l - dp - 1,2);
}

var detailFields;
var calculateButton;

function CheckDetails()
{
  calculateButton.disabled = !detailFields.all( Form.Element.getValue );
}

Event.observe(window, 'load', function() {
  detailFields = [$('propertyValue'), $('depositAmount'), $('interestRate'), $('termYears')]
  calculateButton = $('submit');
  
  CheckDetails();
  
  detailFields.each( function(e) {
    e.observe( 'keyup', function(){
      CheckDetails();
    });
  });
});
