// remove non-numeric, non-decimal characters from input string
function Cleanit(InputString)
{
OutputString = "";
for (i=0;i<InputString.length;i++)
  {
  var chr = InputString.substring(i,i+1);
		if ((chr=="0") || (chr=="1") || (chr=="2") || (chr=="3") || (chr=="4") || (chr=="5") || (chr=="6") || (chr=="7") || (chr=="8") || (chr=="9") || (chr=="."))	
					{				
					OutputString = OutputString + chr;
					}
  }
return (OutputString);
}
// Round off and insert decimal point in output
function Dec(q)
{
b = ""+Math.round(q*100);
c = b.substring(0,b.length-2);
d = b.substring(b.length-2,b.length);
return (c+"."+d);
}
function Base1(k, n)
{
b = 1;
for (j=0;j<n;j++)
  {
  b = b*(1+k);
  }
return b;
}
//caluclate
function CalcRvB(form)
{
// convert input values to all numerals
form.b_rent.value = Cleanit(form.b_rent.value);
form.b_savings.value = Cleanit(form.b_savings.value);
form.b_rate.value = Cleanit(form.b_rate.value);
form.b_points.value = Cleanit(form.b_points.value);
form.b_costs.value = Cleanit(form.b_costs.value);
form.b_tax.value = Cleanit(form.b_tax.value);
form.b_insurance.value = Cleanit(form.b_insurance.value);
// check input values and convert to numbers if OK
flag = 0;
if (form.b_rent.value == ""){flag = 1;form.b_rent.value ="????"}
else {pmt = parseFloat(form.b_rent.value)}
if (form.b_savings.value == ""){sav = 0}
else {sav = parseFloat(form.b_savings.value)}
if (form.b_rate.value == ""){i = 0}
else {i = parseFloat(form.b_rate.value)}
if (form.b_points.value == ""){pnt = 0}
else {pnt = parseFloat(form.b_points.value)}
if (form.b_costs.value == ""){cst = 0}
else {cst = parseFloat(form.b_costs.value)}
if (form.b_tax.value == ""){tax = 0}
else {tax = parseFloat(form.b_tax.value)}
if (form.b_insurance.value == ""){ins = 0}
else {ins = parseFloat(form.b_insurance.value)}
// get number of payments and set balloon payment value to 0
var a = form.b_term.selectedIndex;
n = parseFloat(form.b_term.options[a].value);
fv = 0;
if (flag == 0)	
	{
	piti = pmt-((tax/12)+(ins/12));
    	if (i > 0)
      	{
      	k = i/1200;
     		c = Base1(k,n);
      	mamt = Dec(piti*((1-(1/c))/k)+fv/c);
		}
	else
      	{
      	mamt = Dec(piti*n + fv);
		}
	housecost = Dec(mamt-(mamt*(pnt/100))-cst+sav);
      if (sav > (mamt*(pnt/100))+cst)
		{
		downpayment = sav-(mamt*(pnt/100))-cst;
		downpercent = (downpayment/housecost)*100;
		}
	else 
		{
		downpayment = 0
		}
	form.b_mortamt.value = "$" + mamt;
	form.b_housecost.value = "$" + housecost;
	if (downpayment == 0)
		{
		form.b_down.value = "None";
		form.b_downpercent.value = "None";
		}	
	else
		{
		form.b_down.value = "$" + Dec(downpayment);
		form.b_downpercent.value = Dec(downpercent) + "%";
		}
	}
else
	{
	alert("You must enter a monthly rent payment.");
	}
}
// clear the form
function clearRvBForm(form)
{
form.b_rent.value = "";
form.b_savings.value = "";
form.b_rate.value = "";
form.b_points.value = "";
form.b_costs.value = "";
form.b_tax.value = "";
form.b_insurance.value = "";
form.b_mortamt.value = "";
form.b_housecost.value = "";
form.b_down.value = "";
form.b_downpercent.value = "";
}


function floor(number)
{
  return Math.floor(number*Math.pow(10,2) + 0.5)/Math.pow(10,2);
}
 
function dosum()
{
  var mi = document.calc1.IR.value / 1200;
  var base = 1;
  var mbase = 1 + mi;
  for (i=0; i<document.calc1.YR.value * 12; i++)
  {
    base = base * mbase
  }
  document.calc1.PI.value = floor(document.calc1.LA.value * mi / ( 1 - (1/base)))
  document.calc1.MT.value = floor(document.calc1.AT.value / 12)
  document.calc1.MI.value = floor(document.calc1.AI.value / 12)
  var dasum = document.calc1.LA.value * mi / ( 1 - (1/base)) +
	document.calc1.AT.value / 12 + 
	document.calc1.AI.value / 12;
  document.calc1.MP.value = floor(dasum);
}
 

function checkInput(input, min, max, msg)
{   
	msg = msg + " field has invalid data: " + input.value;
	var lField = ltrim(rtrim(String(input.value)));
    myeareg=new RegExp("^[$]?[0-9]*\\.?[0-9]"); 
	if (!(myeareg.test(lField) && lField!='.'))
	{          
		alert("Only numeric values are allowed!");
		input.focus();
		input.select();
		return false;
	}   	
	var num = parseFloat(input.value);
	if (num < min || max < num)
	{        
		alert(msg + " not in range [" + min + ".." + max + "]"); 
		return false;    
	}      
		return true;
}
function rtrim(argvalue) {
  while (1) {
    if (argvalue.substring(argvalue.length - 1, argvalue.length) != " ")
      break;
    argvalue = argvalue.substring(0, argvalue.length - 1);
  }
  return argvalue;
}
 
function ltrim(argvalue) {
  while (1) {
    if (argvalue.substring(0, 1) != " ")
      break;
    argvalue = argvalue.substring(1, argvalue.length);
  }
    return argvalue;
}
// Round a field two (2) decimals
function round(number)
{
  return Math.round(number*Math.pow(10,2))/Math.pow(10,2);
}
 
function trim(str)
{
     return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}
 
function count(form)
{
    if (( trim(form.mortAmt.value) != "" && trim(form.numYears.value) != "" && trim(form.propTax.value) != "" &&
        trim(form.debt.value) != "" && trim(form.mortRate.value) != "")) 
{   	
	var tmp1,tmp2, tmp3, tmp4, tmp5, tmp6 ,tmp7, tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15
 
	tmp1 = parseFloat(form.mortAmt.value);
	if (isNaN(tmp1)) tmp1=0;
	tmp2 = parseFloat(form.numYears.value);
	if (isNaN(tmp2)) tmp2=0;
	tmp3 = parseFloat(form.mortRate.value);
	if (isNaN(tmp3)) tmp3=0;
	tmp4 = parseFloat(form.propTax.value);
	if (isNaN(tmp4)) tmp4=0;
	tmp5 = parseFloat(form.debt.value);
	if (isNaN(tmp5)) tmp5=0;
	tmp6 = 0;
 
	 tmp7 = tmp4/12;
	 tmp8= tmp5;
     tmp9 = tmp3/1200;
     tmp10= tmp2 * 12;
     tmp11 = (1 + tmp9);
    for (i=1; i < tmp10; i++) {
        tmp11 = tmp11 * (1 + tmp9);
    }
     tmp12  = tmp1 * tmp11 * tmp9 / (tmp11 - 1);
     tmp13 = tmp12 + tmp7 + tmp8;
     tmp14= (tmp12 + tmp7) / 0.35;
     tmp15 = tmp13 / 0.45;
 
    if (tmp14 > tmp15) {
		tmp6 = 12 * tmp14;
    } else {
		tmp6 = 12 * tmp15;
    }
    form.mortPay.value = round(tmp12);
	form.totalPay.value = round(tmp13);
    form.reqdSal.value = round(tmp6);
}
  }

function MyCheckEnteredValue(element) {
	var lField = ltrim(rtrim(String(element.value)));
 
    myReg=new RegExp("^[0-9]*\\.?[0-9]*$"); 
        if (!(myReg.test(lField) && lField!='.')) {
			alert("Please enter valid numerical data in all fields!");
			return false;
		}
 
	element.value=lField; 
	return true;
}
 
 
function rtrim(argvalue) {
 
  while (1) {
    if (argvalue.substring(argvalue.length - 1, argvalue.length) != " ")
      break;
    argvalue = argvalue.substring(0, argvalue.length - 1);
  }
  return argvalue;
}
 
function ltrim(argvalue) {
 
  while (1) {
    if (argvalue.substring(0, 1) != " ")
      break;
    argvalue = argvalue.substring(1, argvalue.length);
  }
    return argvalue;
}
 
 function trim(str)
{
     return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}  
 
function count(form) 
{
var tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8, tmp9, tmp10, tmp11
  if ( trim(form.income.value) != "" &&  trim(form.other.value) != "" &&  trim(form.taxes.value) != "" &&  trim(form.insurance.value) != "" &&  trim(form.auto.value) != "" &&  trim(form.cards.value) != "" &&  trim(form.term.value) != "" &&  trim(form.rate.value) != ""){
									 
    tmp12 = Math.round(eval(form.income.value * .35) + eval(form.other.value * .35) - form.taxes.value - form.insurance.value);
 
    tmp13 = Math.round(eval(form.income.value * .45) + eval(form.other.value * .45) - form.taxes.value -  form.insurance.value - form.auto.value - form.cards.value);
 
      if (tmp12>tmp13) {
      form.payment.value = tmp13
      }
      else {
      form.payment.value = tmp12
      }
 
    tmp1 = parseFloat(form.rate.value);
	if (isNaN(tmp1)) tmp1=0;
    tmp2 = parseFloat(form.term.value);
	if (isNaN(tmp2)) tmp2=0;
    tmp3 = parseFloat(form.payment.value);
	if (isNaN(tmp3)) tmp3=0;
    tmp4 = parseFloat(tmp1 / 1200); 
    tmp5 = parseFloat(tmp2 * 12);
    tmp6 = parseFloat(1 + tmp4);
    tmp7 = parseFloat(Math.pow(tmp6, tmp5));
    tmp8 = parseFloat(1 / tmp7);
    tmp9 = parseFloat(1 - tmp8);
    tmp10 = parseFloat(tmp9 / tmp4);
    tmp11 = parseFloat(tmp3 * tmp10);
    form.amount.value = Math.round(tmp11);
 
    }
else
	{
		alert("Please enter valid numerical data in all fields!");
		return false;
	}
}
