$(document).ready(function(){

    $('#annualincome').bind('keyup',function(){ updateIncomeTotals(); });
    $('#portionrequired').bind('keyup',function(){ updateIncomeTotals(); });

    $('#mortgage').bind('keyup',function(){ updateMonthlyExpenses() });
    $('#loans').bind('keyup',function(){ updateMonthlyExpenses() });
    $('#otherexpenses').bind('keyup',function(){ updateMonthlyExpenses() });
    
    $('#hc-cpd').bind('keyup',function(){ updateHealthcare() });
    $('#hc-dpw').bind('keyup',function(){ updateHealthcare() });
    
    $('#rpn-cpd').bind('keyup',function(){ updateRPN() });
    $('#rpn-dpw').bind('keyup',function(){ updateRPN() });
    
    $('#rn-cpd').bind('keyup',function(){ updateRN() });
    $('#rn-dpw').bind('keyup',function(){ updateRN() });
    
    $('#additionalmedical').bind('keyup',function(){ updateAdditionalMedical() });
    $('#careoutidecanada').bind('keyup',function(){ updateAdditionalMedical() });
    $('#transportcareoutsidecanada').bind('keyup',function(){ updateAdditionalMedical() });
    
    $('#wheelchair').bind('keyup',function(){ updateMedicalEquipment() });
    $('#walker').bind('keyup',function(){ updateMedicalEquipment() });
    $('#chairlift').bind('keyup',function(){ updateMedicalEquipment() });
    
    $('#homerenovations').bind('keyup',function(){ updateOtherExpenses() });
    $('#recup').bind('keyup',function(){ updateOtherExpenses() });
    $('#vanconversion').bind('keyup',function(){ updateOtherExpenses() });
    $('#misc').bind('keyup',function(){ updateOtherExpenses() });
    
    $('#bankdep').bind('keyup',function(){ updateFundsAvailable() });
    $('#savings').bind('keyup',function(){ updateFundsAvailable() });
    $('#currentci').bind('keyup',function(){ updateFundsAvailable() });
    
    $('#rrsp-total').bind('keyup',function(){ updateRRSP(); updateFundsAvailable(); });
    $('#rrsp-tax').bind('keyup',function(){ updateRRSP(); updateFundsAvailable(); });
    
    // This is a hack to update all fields on loading the page.
    $('input').trigger('keyup');
    updateSummary();
    /*updateFundsAvailable();
    updateRRSP();
    updateFundsAvailable();
    updateOtherExpenses();
    updateMedicalEquipment();
    updateAdditionalMedical();
    updateRN();
    updateRPN();
    updateHealthcare();*/
    
    $('input').bind('keyup',function(){ updateSummary(); });
    
    
});

function updateIncomeTotals() {
  var annualIncome = moneyToFloat($('#annualincome').val());
  var portionrequired = percentToFloat($('#portionrequired').val());
  var requiredincome = annualIncome * portionrequired;
  if (!isNaN(requiredincome)) {
    $('#requiredincome').html(commify(Math.round(requiredincome*100)/100));
    $('#total36morequired').html(commify(Math.round(requiredincome*3*100)/100));
    return requiredincome*3;
  }
  else { return false; }
}
function updateMonthlyExpenses() {
  var mortgage = moneyToFloat($('#mortgage').val());
  var loans = moneyToFloat($('#loans').val());
  var otherExpenses = moneyToFloat($('#otherexpenses').val());
  
  var totalMonthlyExpenses = mortgage + loans + otherExpenses;
  if (!isNaN(totalMonthlyExpenses)) {
    $('#totalmonthlyexpenses').html(commify(Math.round(totalMonthlyExpenses*100)/100));
    $('#total36moexpenses').html(commify(Math.round(totalMonthlyExpenses*36*100)/100));
    return totalMonthlyExpenses*36;
  }
  else { return false; }
}
function updateHealthcare() {
  var hccpd = moneyToFloat($('#hc-cpd').val());
  var hcdpw = moneyToFloat($('#hc-dpw').val());
  
  var hcmc = hccpd * hcdpw * 4;
  if (!isNaN(hcmc)) {
    $('#hc-mc').html(commify(Math.round(hcmc*100)/100));
    return hcmc;
  }
  else { return false; }
}
function updateRPN() {
  var rpncpd = moneyToFloat($('#rpn-cpd').val());
  var rpndpw = moneyToFloat($('#rpn-dpw').val());
  
  var rpnmc = rpncpd * rpndpw * 4;
  if (!isNaN(rpnmc)) {
    $('#rpn-mc').html(commify(Math.round(rpnmc*100)/100));
    return rpnmc;
  }
  else { return false; }
}
function updateRN() {
  var rncpd = moneyToFloat($('#rn-cpd').val());
  var rndpw = moneyToFloat($('#rn-dpw').val());
  
  var rnmc = rncpd * rndpw * 4;
  if (!isNaN(rnmc)) {
    $('#rn-mc').html(commify(Math.round(rnmc*100)/100));
    return rnmc;
  }
  else { return false; }
}
function updateAdditionalMedical() {
  var additionalmedical = moneyToFloat($('#additionalmedical').val());
  var careoutidecanada = percentToFloat($('#careoutidecanada').val());
  var transportcareoutsidecanada = percentToFloat($('#transportcareoutsidecanada').val());
  
  var totaladditionalmedical = additionalmedical + careoutidecanada + transportcareoutsidecanada;
  if (!isNaN(totaladditionalmedical)) {
    $('#totaladditionalmedical').html(commify(Math.round(totaladditionalmedical*100)/100));
    return totaladditionalmedical;
  }
  else { return false; }
}

function updateMedicalEquipment() {
  var wheelchair = moneyToFloat($('#wheelchair').val());
  var walker = moneyToFloat($('#walker').val());
  var chairlift = moneyToFloat($('#chairlift').val());
  
  var totalEquipment = wheelchair + walker + chairlift;
  if (!isNaN(totalEquipment)) {
    $('#totalmedicalequipment').html(commify(Math.round(totalEquipment*100)/100));
    return totalEquipment;
  }
  else { return false; }
}
function updateOtherExpenses() {
  var homerenovations = moneyToFloat($('#homerenovations').val());
  var recup = moneyToFloat($('#recup').val());
  var vanconversion = moneyToFloat($('#vanconversion').val());
  var misc = moneyToFloat($('#misc').val());
  
  var totalOther = homerenovations + recup + vanconversion + misc;
  if (!isNaN(totalOther)) {
    $('#totalanyother').html(commify(Math.round(totalOther*100)/100));
    return totalOther;
  }
  else { return false; }
}
function updateRRSP() {
  var rrsptotal = moneyToFloat($('#rrsp-total').val());
  var rrsptax = percentToFloat($('#rrsp-tax').val());
  
  var rrspnet = rrsptotal * (1-rrsptax);
  if (!isNaN(rrspnet)) {
    $('#rrsp-net').html(commify(Math.round(rrspnet*100)/100));
    return rrspnet;
  }
  else { return false; }
}
function updateFundsAvailable() {
  var bankdep = moneyToFloat($('#bankdep').val());
  var savings = moneyToFloat($('#savings').val());
  var currentci = moneyToFloat($('#currentci').val());
  var rrsptotal = updateRRSP();
  
  var fundsAvailable = bankdep + savings + currentci + rrsptotal;
  if (!isNaN(fundsAvailable)) {
    $('#totalfundsavail').html(commify(Math.round(fundsAvailable*100)/100));
    return fundsAvailable;
  }
  else { return false; }
}
function updateSummary() {
  var fundsavailable = updateFundsAvailable();
  var incometotals = updateIncomeTotals();
  
  var otherexpenses = updateOtherExpenses();
  var medicalequipment = updateMedicalEquipment();
  var additionalmedical = updateAdditionalMedical();
  var rn = updateRN();
  var rpn = updateRPN();
  var healthcare = updateHealthcare();
  var monthlyexpenses = updateMonthlyExpenses();
  
  //alert(otherexpenses);
  //alert(medicalequipment);
  //alert(additionalmedical);
  //alert(rn);
  //alert(rpn);
  //alert(healthcare);
  //alert(monthlyexpenses);
  
  var replaceIncome = incometotals;
  var totalFundsRequired = monthlyexpenses+healthcare+rpn+rn+additionalmedical+medicalequipment+otherexpenses;
  var assetsAvailable = fundsavailable;
  var recommendedCoverage = replaceIncome+totalFundsRequired-assetsAvailable;

  //alert(totalFundsRequired);
  
  $('#table-caprequired').html(commify(Math.round(replaceIncome*100)/100));
  $('#table-totalfees').html(commify(Math.round(totalFundsRequired*100)/100));
  $('#table-assetsavailable').html(commify(Math.round(assetsAvailable*100)/100));
  $('#table-recommendedcoverage').html(commify(Math.round(recommendedCoverage*100)/100));
  
}
