var cache;
function ReadDollarDecision(whichVal){
 dwnPayFld = document.getElementById("downpay");
 price = document.getElementById("price");
 if(whichVal < ReadDollarField(dwnPayFld)){dwnPayFld.value = price.value;}
}

function CheckFloatField(field) {
 var val = field.value;
 // lop off trailing "0"s after a decimal point first
 if(val.indexOf(".") != -1) {
  while(val.charAt(val.length-1) == "0")
   val = val.substring(0,val.length-1);
  if(val.charAt(val.length-1) == ".")
   val = val.substring(0,val.length-1);
 }
 if("" + parseFloat(val) != val)
  field.value = field.defaultValue;
}

function CheckIntField(field) {
 var val = field.value;
 if("" + parseInt(val) != val)
  field.value = field.defaultValue;
}

function CheckDollarField(field){
 var flt = ReadDollarField(field);
 if(isNaN(flt))
  field.value = cache;
 else {
  str = FloatToDollarString(flt);
  field.value = str;
 }
}

function ReadDollarField(field){
 var str = field.value;
 if(str.charAt(0) == "$")
  str = str.substring(1, str.length);
 var pos = str.lastIndexOf(",");
 while(pos != -1) {
  str = str.substring(0,pos) + str.substring(pos+1, str.length);
  pos = str.lastIndexOf(",", pos);
 }
 return parseFloat(str);
}

function FloatToDollarString(flt){
 // round off to nearest dollar
 var str = "" + Math.round(flt)
 // add commas
 pos = str.length;  // str.indexOf(".");
 pos -= 4;
 while(pos >= 0) {
  str = str.substring(0,pos+1) + "," + str.substring(pos+1, str.length);
  pos -= 3;
 }
 return str;
}

function recalcTermMonths(){
 var tYr = parseFloat(document.getElementById("termYears").value);
 var tMon = Math.round(tYr * 12.0);
 tYr = parseFloat(tMon) / 12.0;
 document.getElementById("termYears").value = "" + tYr;
 document.getElementById("termMonths").value = "" + tMon;
}

function recalcTermYears(){
 var tMon = parseInt(document.getElementById("termMonths").value);
 var tYr = parseFloat(tMon) / 12.0;
 document.getElementById("termYears").value = "" + tYr;
 document.getElementById("termMonths").value = "" + tMon;
}

function RecalcMonthlyPay(){
 var Principle = ReadDollarField(document.getElementById("price")) - ReadDollarField(document.getElementById("downpay"));
 var AnnualInt = parseFloat(document.getElementById("intYear").value);
 var MonthlyInt = AnnualInt / (12.0 * 100.0);
 var LenMonths = parseInt(document.getElementById("termMonths").value);
 if(MonthlyInt == 0)
  var MonthlyPay = Principle / LenMonths;
 else
  var MonthlyPay = Principle * ( MonthlyInt / ( 1 - Math.pow((1 + MonthlyInt), -LenMonths) ) );
 MonthlyPay = Math.round(MonthlyPay * 100) / 100;
 document.getElementById("payMonth").value = FloatToDollarString(MonthlyPay);
}

function RecalcDownPay(){
 var AnnualInt = parseFloat(document.getElementById("intYear").value);
 var MonthlyInt = AnnualInt / (12.0 * 100.0);
 var LenMonths = parseInt(document.getElementById("termMonths").value);
 var MonthlyPay = ReadDollarField(document.getElementById("payMonth"));
 var Principle = ReadDollarField(document.getElementById("price")) - ReadDollarField(document.getElementById("downpay"));
 var OldDownPay = ReadDollarField(document.getElementById("downpay"));
 var EffPrinciple
 if(MonthlyInt == 0)
  EffPrinciple = MonthlyPay * LenMonths;
 else
  EffPrinciple = MonthlyPay * ((1 - Math.pow((1 + MonthlyInt), -LenMonths)) / MonthlyInt);
 var NewDownPay = OldDownPay + (Principle - EffPrinciple);
 document.getElementById("downpay").value = "" + NewDownPay;
 CheckDollarField(document.getElementById("downpay"));

 RecalcDownPayPerc();
 RecalcMonthlyPay();
}

function RecalcDownPayPerc(){
 var HomePrice = ReadDollarField(document.getElementById("price"));
 var DownPay = ReadDollarField(document.getElementById("downpay"));
 var DownPayPerc = 100 * DownPay / HomePrice;
 if(DownPayPerc >= 0  &&  DownPayPerc <= 100){
  var DownPayPercStr = "" + DownPayPerc;
  var pos = DownPayPercStr.indexOf(".");
  if(DownPayPercStr.length > pos + 4)
   DownPayPercStr = DownPayPercStr.substring(0,pos+4);
  document.getElementById("downpayperc").value = DownPayPercStr;
 }else if(DownPayPerc < 0){
  document.getElementById("downpayperc").value = "0";
  RecalcDownPayAmount();
 }else{
  document.getElementById("downpayperc").value = "100";
  RecalcDownPayAmount();
 }
}

function RecalcDownPayAmount(){
 var HomePrice=ReadDollarField(document.getElementById("price"));
 var DownPayPerc=parseFloat(document.getElementById("downpayperc").value);
 if(DownPayPerc < 0){
  document.getElementById("downpayperc").value = "0";
  RecalcDownPayAmount()
 }else if(DownPayPerc > 100){
  document.getElementById("downpayperc").value = "100";
  RecalcDownPayAmount()
 }else{
  var DownPay = HomePrice * DownPayPerc / 100;
  DownPay = FloatToDollarString(DownPay);
  document.getElementById("downpay").value = "" + DownPay;
 }
}
