﻿//Used for the Mortgage calculator.

    var isIE4 = false;
	var cache;
	
	if(navigator.appName.indexOf("Microsoft") != -1  &&  parseInt(navigator.appVersion) >= 4)
	 isIE4 = true;
	
	function ReadDollarDecision(whichVal) {
		dwnPayFld 	= document.aspnetForm.downpay; //before the name of the form was 'frmCalc'. 'aspnetForm' is what asp.net 2.0 forces as the name of the form. Not frmCalc. Look at viewsource of page to see. May be a bug.
		price 	= document.aspnetForm.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(frm) {
	   var tYr = parseFloat(frm.termYears.value);
	   var tMon = Math.round(tYr * 12.0);
	   tYr = parseFloat(tMon) / 12.0;
	   frm.termYears.value = "" + tYr;
	   frm.termMonths.value = "" + tMon;
	}
	
	
	function recalcTermYears(frm) {
	   var tMon = parseInt(frm.termMonths.value);
	   var tYr = parseFloat(tMon) / 12.0;
	   frm.termYears.value = "" + tYr;
	   frm.termMonths.value = "" + tMon;
	}
	
	
	function RecalcMonthlyPay(frm) {
	   var Principle  = ReadDollarField(frm.price) - ReadDollarField(frm.downpay);
	   var AnnualInt  = parseFloat(frm.intYear.value);
	   var MonthlyInt = AnnualInt / (12.0 * 100.0);
	   var LenMonths  = parseInt(frm.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;
	
	   frm.payMonth.value = FloatToDollarString(MonthlyPay);
	}
	
	
	function RecalcDownPay(frm) {
	   var AnnualInt  = parseFloat(frm.intYear.value);
	   var MonthlyInt = AnnualInt / (12.0 * 100.0);
	   var LenMonths  = parseInt(frm.termMonths.value);
	   var MonthlyPay = ReadDollarField(frm.payMonth);
	   var Principle  = ReadDollarField(frm.price) - ReadDollarField(frm.downpay);
	   var OldDownPay = ReadDollarField(frm.downpay);
	   var EffPrinciple
	
	   if(MonthlyInt == 0)
	      EffPrinciple = MonthlyPay * LenMonths;
	   else
	      EffPrinciple = MonthlyPay * ((1 - Math.pow((1 + MonthlyInt), -LenMonths)) / MonthlyInt);
	
	   var NewDownPay = OldDownPay + (Principle - EffPrinciple);
	   frm.downpay.value = "" + NewDownPay;
	   CheckDollarField(frm.downpay);
	
	   RecalcDownPayPerc(frm);
	   RecalcMonthlyPay(frm);
	}
	
	
	function RecalcDownPayPerc(frm) {
	   var HomePrice  = ReadDollarField(frm.price);
	   var DownPay = ReadDollarField(frm.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);
	
	      frm.downpayperc.value = DownPayPercStr;
	   }
	   else if(DownPayPerc < 0) {
	      frm.downpayperc.value = "0";
	      RecalcDownPayAmount(frm);
	   }
	   else {
	      frm.downpayperc.value = "100";
	      RecalcDownPayAmount(frm);
	   }
	}
	
	
	function RecalcDownPayAmount(frm) {
	   var HomePrice  = ReadDollarField(frm.price);
	   var DownPayPerc = parseFloat(frm.downpayperc.value);
	   if(DownPayPerc < 0) {
	      frm.downpayperc.value = "0";
	      RecalcDownPayAmount(frm)
	   }
	   else if(DownPayPerc > 100) {
	      frm.downpayperc.value = "100";
	      RecalcDownPayAmount(frm)
	   }
	   else {
	      var DownPay = HomePrice * DownPayPerc / 100;
	      DownPay = FloatToDollarString(DownPay);
	      frm.downpay.value = "" + DownPay;
	   }
	}