// Functions for the St. George/BankSA versions of the AAPR Calculator
function sgbSelectProd(obIn)
{
  var Idx = obIn.selectedIndex;
  var sgbValue = obIn[Idx].value;
  var aFieldVals = sgbValue.split(",");
  var obForm = obIn.form;

  if (Idx == obIn.options.length - 1)
  {
    // Blank all fields and wait for them to be filled in
    for (var i=1;i<obForm.length;i++)
      obForm.elements[i].value = "0";
  }
  else
  {
    for (var i=0;i<aFieldVals.length;i++)
      obForm.elements[i+1].value = aFieldVals[i];
  }

  UpdateAppletData(obForm);
  cnxAAPRUpdate(obForm, obIn.name);
}

// Update the variables in the applet from the input fields
function UpdateAppletData(obForm)
{
  document.javaapplet.setLoanAmount(ShowPrecision(obForm.cnxAmount.value,0) * 1);
  document.javaapplet.setLoanTerm(ShowPrecision(obForm.cnxTerm.value * 12,0) * 1);
  document.javaapplet.setValuationAmount(ShowPrecision(obForm.cnxValuationAmount.value,0) * 1);
  document.javaapplet.setInitialPeriod(ShowPrecision(obForm.cnxIntroTerm.value,0) * 1);
  document.javaapplet.setHoneymoonRate(ShowPrecision(obForm.cnxIntroRate.value,2) / 100);
  document.javaapplet.setVariableRate(ShowPrecision(obForm.cnxRevertRate.value,2) / 100);
  document.javaapplet.setUpfrontFee(ShowPrecision(obForm.cnxUpfrontFees.value,0) * 1);
  document.javaapplet.setMonthlyFee(ShowPrecision(obForm.cnxOngoingFees.value,0) * 1);
  document.javaapplet.setEndFee(ShowPrecision(obForm.cnxEndFees.value,0) * 1);
}

function CheckInputFields(obForm)
{
  for (var i=1;i<obForm.length-4;i++)
    if (obForm.elements[i].value == "")
      return false;
  
  // All is well
  return true;
}

function cnxAAPRUpdate(obForm, obName)
{
  var obApplet = document.javaapplet;

  var cnxAmount = obForm.cnxAmount.value;
  var cnxTerm = obForm.cnxTerm.value;

  // Blank the results fields if any of the input fields are blank
  if (!CheckInputFields(obForm))
  {
    for (var i=obForm.length-1;i>obForm.length-5;i--)
      obForm.elements[i].value = "";
    return;
  }
  document.javaapplet.setLoanAmount(cnxAmount * 1);
  document.javaapplet.setLoanTerm(cnxTerm * 12);
  obForm.cnxLVR.value = ShowPrecision(obApplet.getLVR(),2);
  obForm.cnxIntroPayment.value = ShowPrecision(obApplet.getInitMonthlyPayment(),0);
  obForm.cnxRevertPayment.value = ShowPrecision(obApplet.getSubsMonthlyPayment(),0);
  //obForm.cnxTotalPayment.value = ShowPrecision(obApplet.getTotalPayment(),0);
  obForm.cnxAAPR.value = ShowPrecision(obApplet.getAAPR() * 100,3);
}

function CheckIntroRate(obIn)
{
  var sOrigVal = ShowPrecision(obIn.value, 2);
  
  if (sOrigVal > 100 || sOrigVal < 0)
  {
    alert("Error!\nIntro Rate must be between 0 and 100 %.");
    obIn.value = ShowPrecision(document.javaapplet.getHoneymoonRate() * 100, 2);
    return;
  }
  cnxIntroRateCalc(obIn);
}

function CheckRevertRate(obIn)
{
  var sOrigVal = ShowPrecision(obIn.value, 2);
  
  if (sOrigVal > 100 || sOrigVal < 0)
  {
    alert("Error!\nRevert Rate must be between 0 and 100 %.");
    obIn.value = ShowPrecision(document.javaapplet.getVariableRate() * 100, 2);
    return;
  }
  cnxRevertRateCalc(obIn);
}

function CheckLoanTerm(obIn)
{
  var sOrigVal = (ShowPrecision(obIn.value, 0, true) || 0);
  var obApplet = document.javaapplet;

  if(sOrigVal < 1 || sOrigVal > 50)
  {
    alert("Error!\nLoan Term must be between 1 and 50 years.");
    obIn.value = ShowPrecision(obApplet.getLoanTerm() / 12, 0);
    return;
  }
  if(!obApplet.setLoanTerm(ShowPrecision(obIn.value, 0, true) * 12))
  {
    alert("Error!\nLoan Term must be greater than Intro Term.");
    obIn.value = ShowPrecision(obApplet.getLoanTerm() / 12, 0);
    return;
  }
  cnxTermCalc(obIn);
}

function CheckIntroTerm(obIn)
{
  var sOrigVal = ShowPrecision(obIn.value, 0);
  var obApplet = document.javaapplet;
  var obForm = obIn.form;
  var sErr = "";
  var iErrCode = 0;

  if(sOrigVal < 0 || sOrigVal > obForm.cnxTerm.value * 12)
  {
    alert("Error!\nIntro Term must be between 0 and the Loan Term.");
    obIn.value = ShowPrecision(obApplet.getInitialPeriod(), 0);
    return;
  }

  obApplet.setInitialPeriod(sOrigVal);

  cnxIntroTermCalc(obIn);
}
