	function makeNumValid(p_value)
	{

		var FormRef = document.MortgageCalc;

		var strchar;
		var strctr;
		var strlen;
		var instr = p_value;
		var newstr;
		var tempstr;
		
		if (instr.indexOf('.') != instr.lastIndexOf('.')) return(-1); 
		
		newstr = removeCommas(instr);
		
		strlen = newstr.length;
		tempstr = '';
		for (strctr=0; strctr < strlen; strctr++)
		{
			strchar = newstr.charAt(strctr);
			if ((strchar == '.') || (strchar == '0') || (strchar == '1') || (strchar == '2') 
				|| (strchar == '3') || (strchar == '4') || (strchar == '5') || (strchar == '6') 
				|| (strchar == '7') || (strchar == '8') || (strchar == '9')) 
			tempstr = tempstr + strchar;
		}
		newstr = tempstr;
		
		if( newstr == "" ) 
			return(0);
		else 
			return(newstr); 
	}
	
	function roundFloat(s_value)
	{
		var newval;
		var FormRef = document.MortgageCalc;
		
		s_value = parseFloat(s_value);
		newval = (Math.floor(s_value*100))/100;
		newval = newval + "";

		if (newval.indexOf('.') == -1) newval = newval + ".00"; 

		return(newval);
	}
	
	function removeCommas(t_value)
	{
		var ctr;
		var newstr = t_value;
		var commapos;
		var strlen = t_value.length - 1;
		var FormRef = document.MortgageCalc;
		
		commapos = newstr.indexOf(',');
		while (commapos != -1)
		{
			newstr = newstr.substring(0,commapos) +	 newstr.substring(commapos + 1, newstr.length );
			commapos = newstr.indexOf(',');
		}

		return(newstr);
	}

	function addCommas(u_value)
	{
		var ctr;
		var decCtr=0;
		var decIndex;
		var decIncr = 3;
		var newstr = u_value;
		var strlen = u_value.length;
		var FormRef = document.MortgageCalc;
		
		decIndex = u_value.indexOf('.');
		if (decIndex == -1) decIndex = strlen; 
		
		for (ctr = decIndex - 1; ctr > 0; ctr--)
		{
			decCtr++;
			if (decCtr == 3)
			{ 
				newstr = newstr.substring(0,ctr) + "," + newstr.substring(ctr, strlen);
				strlen++;
				decCtr = 0; 
			}
		}
		
		return(newstr);
	}
	
	function isDigit(v_value)
	{
		if ((v_value >= 0) || (v_value <= 9))
			return(true);
		else 
			return(false);
	}

	function resetTextField(textField)
	{
		var FormRef = document.MortgageCalc;		
		textField.value = roundFloat("0");
		textField.focus();
		textField.select();
	}

	var v_MonthlyPaymentHold='';  // hold montly payment for onchange event

	function calcMonthlyPayment()
	{
		var FormRef = document.MortgageCalc;		
		var v_HomePrice,
		  v_InterestRate,
		  v_DownPayment,
		  v_InterestRate,
		  v_Term,
		  v_MonthlyPayment,
		  v_Principle,
		  v_formName = FormRef;

		// check values used to compute montly payment
		if (confirmTermValues())
		{
            v_HomePrice = roundFloat(makeNumValid(v_formName.HomePrice.value ));
			if (v_formName.DownPayment.value == '')
			{
		        v_DownPayment = 0;
      		}
			else
			{
				v_DownPayment = roundFloat(makeNumValid(v_formName.DownPayment.value));
			}
			v_InterestRate = makeNumValid(v_formName.InterestRate.value) / 100;
			v_Term = makeNumValid(v_formName.Term.value);
			v_Principle = v_HomePrice - v_DownPayment;
            if (v_Term == "" || v_Term == 0)
				v_MonthlyPayment = v_Principle;
			else
			{
				v_MonthlyRate = v_InterestRate/12;
				if ( v_MonthlyRate != 0 ) 
					v_MonthlyPayment = Math.floor((v_Principle*v_MonthlyRate)/(1 - Math.pow((1 + v_MonthlyRate),
												(-1 * (v_Term * 12)))) * 100) / 100;
				else  // no monthly rate
					v_MonthlyPayment = Math.floor((v_Principle / (v_Term*12)) * 100) / 100;

				if (isNaN(v_MonthlyPayment) || v_MonthlyPayment <0) v_MonthlyPayment = 0;
			}

			v_formName.MonthlyPayment.value = addCommas(roundFloat(v_MonthlyPayment));
			v_MonthlyPaymentHold = v_formName.MonthlyPayment.value; 
		}
	}

    function initializeCalc()
	{
		var FormRef = document.MortgageCalc;		
		var form = FormRef;
		
		form.HomePrice.value = addCommas(roundFloat(form.HomePrice.value));
	}

    function confirmTermValues()
	{
		var FormRef = document.MortgageCalc;		
		var v_form = FormRef;
		var	v_HomePrice = v_form.HomePrice.value,
			v_DownPayment = v_form.DownPayment.value,
			v_InterestRate = v_form.InterestRate.value,
			v_Term = v_form.Term.value,
			v_tHomePrice,
			v_tDownPayment,
			t_tInterestRate,
			v_tTerm,
			v_errorflag = 0,
			v_errorstr,
			v_returnval;

		// get values from fields  
		v_tHomePrice = parseFloat(makeNumValid(v_HomePrice));
		v_tDownPayment = parseFloat(makeNumValid(v_DownPayment));
		v_tInterestRate = parseFloat(makeNumValid(v_InterestRate));
		v_tTerm = Math.round(makeNumValid(v_Term)); 
		if (v_tHomePrice == '' || isNaN(v_tHomePrice))
		{
			v_form.HomePrice.value = 0;
			v_tHomePrice = 0;
		}
		if (v_tDownPayment < 0)
		{ // N3.x fix; -1 bleeds thru when 0
			v_tDownPayment = 0;
		}
		if (v_tInterestRate == '' || isNaN(v_tInterestRate))
		{ 
			v_tInterestRate = 0;
		}
		// Home price <0 or  > 100,000,000
		if (v_tHomePrice >= 100000000 || v_tHomePrice <= 0)
		{
			v_errorstr = "Sorry.  $" + v_HomePrice + " is an invalid price.\nPlease enter a price between $0 and $100,000,000.00"; 
			v_form.HomePrice.value = '';
			v_errorflag = 1;
			// Down payment <0 or > home price 
		}
		else if (v_tDownPayment <0 || v_tDownPayment > v_tHomePrice)
		{
			v_errorstr = "Sorry.  Your down payment of $" + v_DownPayment + " must\nbe less than your home price of $" + v_HomePrice + ".";
			v_form.DownPayment.value = '';
			v_errorflag = 1;
			// Interest rate <1 or > 25
		}
		else if (v_tInterestRate < 1 || v_tInterestRate > 25)
		{
			v_errorstr = "Sorry.  An interest rate of " + v_InterestRate + " is invalid.\nPlease enter a value between 1% and 25%.";
			v_form.InterestRate.value = '';
			v_errorflag = 1;
			// Term <5 ; textfield limited to 2 chars so not > 99 by default
		}
		else if (v_tTerm < 5)
		{
			v_errorstr = "Sorry.  Your term of " + v_Term + " is invalid.\nPlease enter a minimum value of 5 years.";
			v_form.Term.value = '';
			v_errorflag = 1;
		}
		
		// display error and clear result
		if (v_errorflag)
		{
			alert(v_errorstr);
			clearMonthlyPayment();
			v_returnval = 0;
		}
		else
		{
			v_returnval = 1;
		}
		
		return ( v_returnval );
  }

  function clearMonthlyPayment ()
  {
   	 var FormRef = document.MortgageCalc;	  
     var v_form = FormRef;

     v_form.MonthlyPayment.value = '';
  }