function homeloancalc(homeloan) {
	// need to strip out any commas
	deposit = replace(homeloan.deposit.value,",","");
	totalprice = replace(homeloan.totalprice.value,",","");
	loanamount = totalprice - deposit;
	
	//work on monthly calculations
	totalloanterm = homeloan.loanterm.value * 12;
	totalinterestrate = homeloan.interestrate.value / 1200;
	oneplusr = 1 + totalinterestrate;
	oneplusrton = Math.pow(oneplusr, totalloanterm);
	oneplusrtonlessone = oneplusrton - 1;
	

	repayment = loanamount * totalinterestrate * oneplusrton / oneplusrtonlessone;
	repayment = Math.round(repayment);
	repayment = formatValue(repayment, "###,###.");
	homeloan.repayment.value = replace(repayment,".","");
	loanamount = formatValue(loanamount, "##,###,###.");
	homeloan.loanamount.value = replace(loanamount, ".", "");
	totalprice = formatValue(totalprice, "##,###,###.");
	homeloan.totalprice.value =  replace(totalprice, ".", "");
	deposit = formatValue(deposit, "##,###,###.");
	homeloan.deposit.value =  replace(deposit, ".", "");
	
	//homeloan.repayment.value = "$" + repayment;
}

function replace(argvalue, x, y) {
  if ((x == y) || (parseInt(y.indexOf(x)) > -1)) {
    errmessage = "replace function error: \n";
    errmessage += "Second argument and third argument could be the same ";
    errmessage += "or third argument contains second argument.\n";
    errmessage += "This will create an infinite loop as it's replaced globally.";
    alert(errmessage);
    return false;
  }
    
  while (argvalue.indexOf(x) != -1) {
    var leading = argvalue.substring(0, argvalue.indexOf(x));
    var trailing = argvalue.substring(argvalue.indexOf(x) + x.length, 
	argvalue.length);
    argvalue = leading + y + trailing;
  }

  return argvalue;

}	
	
function formatValue(argvalue, format) {
  var numOfDecimal = 0;
  if (format.indexOf(".") != -1) {
    numOfDecimal = format.substring(format.indexOf(".") + 1, format.length).length;
  }
  argvalue = formatDecimal(argvalue, true, numOfDecimal);

  argvalueBeforeDot = argvalue.substring(0, argvalue.indexOf("."));
  retValue = argvalue.substring(argvalue.indexOf("."), argvalue.length);

  strBeforeDot = format.substring(0, format.indexOf("."));

  for (var n = strBeforeDot.length - 1; n >= 0; n--) {
    oneformatchar = strBeforeDot.substring(n, n + 1);
    if (oneformatchar == "#") {
      if (argvalueBeforeDot.length > 0) {
        argvalueonechar = argvalueBeforeDot.substring(argvalueBeforeDot.length - 1, argvalueBeforeDot.length);
        retValue = argvalueonechar + retValue;
        argvalueBeforeDot = argvalueBeforeDot.substring(0, argvalueBeforeDot.length - 1);
      }
    }
    else {
      if (argvalueBeforeDot.length > 0 || n == 0)
        retValue = oneformatchar + retValue;
    }
  }

  return retValue;
}

function formatDecimal(argvalue, addzero, decimaln) {
  var numOfDecimal = (decimaln == null) ? 2 : decimaln;
  var number = 1;

  number = Math.pow(10, numOfDecimal);

  argvalue = Math.round(parseFloat(argvalue) * number) / number;
  // If you're using IE3.x, you will get error with the following line.
  // argvalue = argvalue.toString();
  // It works fine in IE4.
  argvalue = "" + argvalue;

  if (argvalue.indexOf(".") == 0)
    argvalue = "0" + argvalue;

  if (addzero == true) {
    if (argvalue.indexOf(".") == -1)
      argvalue = argvalue + ".";

    while ((argvalue.indexOf(".") + 1) > (argvalue.length - numOfDecimal))
      argvalue = argvalue + "0";
  }

  return argvalue;
}

function calcForm(form) {
	var w = 1
	var N = parseInt(form.years.value)
	var n = N * 12
	
	var r = parseFloat(form.rate.value)
	if (r > 1.0) {
		r = r / 100
		form.rate.value = r
	}
	r /= 12
	var a = parseFloat(r + 1)

	// b = interest paid over total loan period
	var b = 0
	// s = the total amount repaid
	var s = 0
	// p = the monthly repayment amount
	var p = 0
	// owing = total amount owing after repayment period
	var owing = 0
	// fi = interest paid over total fortnightly repayments
	var fi = 0
	// fip = interest paid per period
	var fip = 0
	// f = number of fortnightly repayments
	var f = 0
	// fn = fortnightly repayment amt
	var fn = 0
	// ft = total repaid fortnightly
	var ft = 0
	// fnb = amount saved by paying fortnightly
	var fnb = 0
	// dint = interest calculated daily
	var dint = 0
	// wn = weekly repayment amount
	var wn = 0
	// wip = interest paid per period
	var wip = 0
	// wi = total interest paid on loan
	var wi = 0
	// wt = total repaid on loan
	var wt = 0
	// wl = number of weekly repayments
	var wl = 0

	w = Math.pow(a,n)
	var P = parseInt(form.principal.value) 


	p = (P * w * r) / (w -1)
	p = (Math.round(p * 100))/100
	s = (Math.round(p * n*100))/100
	b = s - P
	fn = p / 2
	wn = fn / 2
	owing = P
	var dir = (parseFloat(form.rate.value)) / 365
	var dip = 1

	var currDate = new Date()
	var day = currDate.getDate()

	while (fn < owing) {
		dint = owing * dir
		fip += dint

		if (dip == 14) {
			owing -= fn
			ft += fn
			dip = 0
			f++
		}
		if (day ==30) {
			owing += fip
			fi += fip
			fip = 0
			day = 1 

		}
		day++
		dip++
	}

	fn = (Math.round(fn*100))/100
	ft += owing	
	fnb = s - ft
	ft = (Math.round(ft * 100))/100
	fnb = (Math.round(fnb*100))/100
	fi = (Math.round(fi*100))/100

	form.numpay.value = n
	form.totpaid.value = '$' + (Math.round(s)*100)/100
	form.repayments.value = '$' + (Math.round(p)*100)/100
	form.fn_repay.value = '$' + (Math.round(fn)*100)/100
	form.intpaid.value = '$'+ (Math.round(b)*100)/100
	form.fn_intpaid.value = '$' + (Math.round(fi)*100)/100
	form.fn_totpaid.value = '$' + (Math.round(ft)*100)/100
	form.saved.value = '$' + (Math.round(fnb)*100)/100
	form.fn_numpay.value = f
	form.fn_time.value = (Math.round(f / 26)*100)/100 + " years"

	owing = P
	day = 1
	dip = 1

		while (wn < owing) {
		dint = owing * dir
		wip += dint

		if (dip == 7) {
			owing -= wn
			wt += wn
			dip = 1
			wl++
		}
		if (day ==30) {
			owing += wip
			wi += wip
			wip = 0
			day = 1 
		}

		day++
		dip++
	}
	wnb = s - wt

	form.wl_repay.value = "$" + (Math.round(wn)*100)/100
	form.wl_intpaid.value = "$" + (Math.round(wi)*100)/100
	form.wl_totpaid.value = "$" + (Math.round(wt)*100)/100
	form.wl_numpay.value = wl
	form.wl_saved.value = "$" + (Math.round(wnb)*100)/100
	form.wl_time.value = (Math.round(wl / 52)*100)/100 + " years"
}

var temp1;
function incomeForm(form) {
		if (form.yourIncome.value == "")
        form.yourIncome.value = 0;
		
    if (form.spouseIncome.value == "")
        form.spouseIncome.value = 0;
		
    if (form.savingAccount.value == "")
        form.savingAccount.value = 0;
		
    if (form.investShares.value == "" )
        form.investShares.value = 0;
		
    if (form.other.value == "")
        form.other.value = 0;
	
    temp1 = eval(form.yourIncome.value) + eval(form.spouseIncome.value) +
    eval(form.savingAccount.value) + eval(form.investShares.value) + eval(form.other.value);
    form.totalIncome.value = temp1;
    if (form.yourIncome.value == 0)
        form.yourIncome.value = "";
		
    if (form.spouseIncome.value == 0)
        form.spouseIncome.value = "";
		
    if (form.savingAccount.value == 0)
        form.savingAccount.value = "";
		
 if (form.investShares.value == 0 )
        form.investShares.value = "";
		
    if (form.other.value == 0)
        form.other.value = "";
}

function monthlyExpenditure(form) {
    if (form.food.value == "")
	
        form.food.value = 0;
		
    if (form.doctor.value == "")
	
        form.doctor.value = 0;
		
    if (form.clothing.value == "")
	
        form.clothing.value = 0;
		
    if (form.dentist.value == "")
	
        form.dentist.value = 0;
		
    if (form.rent.value == "")
	
        form.rent.value = 0;
		
    if (form.physio.value == "")
	
	  form.physio.value = 0;
	  
    if (form.electricity.value == "")
	
        form.electricity.value = 0;
		
    if (form.chemist.value == "")
	
        form.chemist.value = 0;
		
    if (form.phone.value == "")
	
        form.phone.value = 0;
		
    if (form.gas.value == "")
	
        form.gas.value = 0;
		
    if (form.medical.value == "")
	
        form.medical.value = 0;
		
    if (form.homeContents.value == "")
	
        form.homeContents.value = 0;
		
    if (form.otherHousehold.value == "")
	
        form.otherHousehold.value = 0;
		
    if (form.life.value == "")
	
        form.life.value = 0;
		
    if (form.creditCard.value == "")
	
     form.creditCard.value = 0;
	 
    if (form.barber.value == "")
	
        form.barber.value = 0;
		
    if (form.hire.value == "")
	
        form.hire.value = 0;
		
		if (form.personalLoan.value == "")
		
        form.personalLoan.value = 0;
		
   if (form.entertainment.value == "")
   
        form.entertainment.value = 0;
		
    if (form.otherMonthly.value == "")
	
        form.otherMonthly.value = 0;
		
    if (form.children.value == "")
	
	     form.children.value = 0;
		 
   if (form.other.value == "")
   
    form.other.value = 0;
	
    if (form.leisure.value == "")
	
        form.leisure.value = 0;
		
    if (form.carLoan.value == "")
	
        form.carLoan.value = 0;
		
    if (form.subscription.value == "")
	
        form.subscription.value = 0;
		
    if (form.petrol.value == "")
	
        form.petrol.value = 0;
		
    if (form.rego.value == "")
	
        form.rego.value = 0;
		
    if (form.carInsurance.value == "")
	
        form.carInsurance.value = 0;
	
    if (form.publicTransport.value == "")
	
        form.publicTransport.value = 0;
 if (form.totalMonthly.value == "")
   form.totalMonthly.value = 0;
   form.totalMonthly.value =
    eval(form.food.value) +
    eval(form.doctor.value) +
     eval(form.clothing.value) +
      eval(form.dentist.value) +
	        eval(form.rent.value) +
       eval(form.physio.value) +
       eval(form.electricity.value) +
        eval(form.chemist.value) +
       eval(form.phone.value) +
     eval(form.gas.value) +
      eval(form.medical.value) +
	  eval(form.homeContents.value) +
     eval(form.otherHousehold.value) +
      eval(form.life.value) +
      eval(form.creditCard.value) +
     eval(form.barber.value) +
      eval(form.hire.value) +
      eval(form.personalLoan.value) +
    eval(form.entertainment.value) +
     eval(form.otherMonthly.value) +
     eval(form.children.value) +
      eval(form.other.value) +
     eval(form.leisure.value) +
      eval(form.carLoan.value) +
      eval(form.subscription.value) +
       eval(form.petrol.value) +
      eval(form.rego.value) +
      eval(form.carInsurance.value) +
       eval(form.publicTransport.value);
    form.totalIncome.value = temp1;
   form.maxTotal.value = eval(form.totalIncome.value) - eval(form.totalMonthly.value);
   form.maxTotal.value = eval(form.maxTotal.value);
   form.totalMonthly.value = eval(form.totalMonthly.value);
  form.totalIncome.value = eval(temp1);
  if (form.food.value == 0)
      form.food.value = "";
   if (form.doctor.value == 0)
      form.doctor.value = "";
  if (form.clothing.value == 0)
      form.clothing.value = "";
  if (form.dentist.value == 0)
    form.dentist.value = "";
 if (form.rent.value == 0)
     form.rent.value = "";
  if (form.physio.value == 0)
     form.physio.value = "";
   if (form.electricity.value == 0)
      form.electricity.value = "";
  if (form.chemist.value == 0)
     form.chemist.value = "";
  if (form.phone.value == 0)
      form.phone.value = "";
  if (form.gas.value == 0)
      form.gas.value = "";
    if (form.medical.value == 0)
       form.medical.value = "";
   if (form.homeContents.value == 0)
       form.homeContents.value = "";
 if (form.otherHousehold.value == 0)
    form.otherHousehold.value = "";
  if (form.life.value == 0)
      form.life.value = "";
   if (form.creditCard.value == 0)
      form.creditCard.value = "";
 if (form.barber.value == 0)
  form.barber.value = "";
  if (form.hire.value == 0)
   form.hire.value = "";
  if (form.personalLoan.value == 0)
 form.personalLoan.value = "";
 if (form.entertainment.value == 0)
    form.entertainment.value = "";
 if (form.otherMonthly.value == 0)
     form.otherMonthly.value = "";
 if (form.children.value == 0)
 form.children.value = "";
  if (form.other.value == 0)
    form.other.value = "";
  if (form.leisure.value == 0)
      form.leisure.value = "";
  if (form.carLoan.value == 0)
     form.carLoan.value = "";
  if (form.subscription.value == 0)
    form.subscription.value = "";
  if (form.petrol.value == 0)
    form.petrol.value = "";
  if (form.rego.value == 0)
     form.rego.value = "";
  if (form.carInsurance.value == 0)
      form.carInsurance.value = "";
  if (form.publicTransport.value == 0)
     form.publicTransport.value = "";
}

function clearForm1(form) {
    form.yourIncome.value = "";
  form.spouseIncome.value = "";
  form.totalIncome.value = "";
  form.savingAccount.value = "";
  form.investShares.value = "";
  form.other.value = "";
}

function clearForm2(form) {
        form.food.value = "";
    form.doctor.value = "";
    form.clothing.value = "";
   form.dentist.value = "";
    form.rent.value = "";
   form.physio.value = "";
   form.electricity.value = "";
   form.chemist.value = "";
      form.phone.value = "";
      form.gas.value = "";
     form.medical.value = "";
        form.homeContents.value = "";
      form.otherHousehold.value = "";
     form.life.value = "";
     form.creditCard.value = "";
    form.barber.value = "";
    form.hire.value = "";
   form.personalLoan.value = "";
    form.entertainment.value = "";
    form.otherMonthly.value = "";
   form.children.value = "";
   form.other.value = "";
    form.leisure.value = "";
   form.carLoan.value = "";
    form.subscription.value = "";
   form.petrol.value = "";
    form.rego.value = "";
     form.carInsurance.value = "";
     form.publicTransport.value = "";
   form.totalMonthly.value = "";
   form.totalIncome.value = "";
   form.maxTotal.value = "";
}

function computeForm(form) {
    if (form.property.value == null || form.property.value.length == 0)
    	form.property.value = 0;
    if (form.amount.value == null || form.amount.value.length == 0)
        form.amount.value = 0;

    form.nswStampDuty.value = 0;
    form.nswStampDuty2.value = 0;
    form.nswTransfer.value = 0;

    var tempAmount = form.amount.value;
    var tempProperty = form.property.value;

	if (form.amount.value >0 && form.amount.value <= 16000)
	    form.nswStampDuty.value = 5;
    if (form.amount.value > 16000) 
	{
         tempAmount = (tempAmount - 16000) / 1000;
         for (var i=0, k=1; tempAmount >i && tempAmount > k ; i++, k++);
         form.nswStampDuty.value = (k * 4) + 5;
	}             

	if (form.property.value >0 && form.property.value <= 14000) 
	{  
	    tempProperty = (tempProperty / 100);
        for (var i=0, k=1; tempProperty >i && tempProperty > k ; i++, k++);
        form.nswStampDuty2.value = eval(form.nswStampDuty2.value) + (k * 1.25);
    }

    if (form.property.value > 14000 && form.property.value <= 30000) 
	{
	    tempProperty = (tempProperty - 14000) / 100;
	    for (var i=0, k=1; tempProperty >i && tempProperty > k ; i++, k++);
        form.nswStampDuty2.value = eval(form.nswStampDuty2.value) + (k * 1.5) + 175;
     }

    if (form.property.value > 30000 && form.property.value <= 80000) 
	{
		tempProperty = (tempProperty - 30000) / 100;
	    for (var i=0, k=1; tempProperty >i && tempProperty > k ; i++, k++);
        form.nswStampDuty2.value = eval(form.nswStampDuty2.value) + (k * 1.75) + 415;
    }

    if (form.property.value > 80000 && form.property.value <= 300000) 
	{
    	tempProperty = (tempProperty - 80000) / 100;
        for (var i=0, k=1; tempProperty >i && tempProperty > k ; i++, k++);
        form.nswStampDuty2.value = eval(form.nswStampDuty2.value) + (k * 3.5) + 1290;
     }

    if (form.property.value > 300000 && form.property.value <= 1000000) 
	{
    	tempProperty = (tempProperty - 300000) / 100;
    	for (var i=0, k=1; tempProperty >i && tempProperty > k ; i++, k++);
    	form.nswStampDuty2.value = eval(form.nswStampDuty2.value) + (k * 4.5) + 8990;
    }            
	if (form.property.value > 1000000 && form.property.value <= 3000000) 
	 {
    	tempProperty = (tempProperty - 1000000) / 100;
    	for (var i=0, k=1; tempProperty >i && tempProperty > k ; i++, k++);
    	form.nswStampDuty2.value = eval(form.nswStampDuty2.value) + (k * 5.5) + 40490;
    }             
	if (form.property.value > 3000000)
	 {
    	tempProperty = (tempProperty - 3000000) / 100;
    	for (var i=0, k=1; tempProperty >i && tempProperty > k ; i++, k++);
    	form.nswStampDuty2.value = eval(form.nswStampDuty2.value) + (k * 7) + 150490;
    }             
	form.nswTransfer.value = 56;
	form.nswTotalDuty.value = eval(form.nswStampDuty.value) + eval(form.nswStampDuty2.value)
            	+ eval(form.nswTransfer.value);
	form.nswStampDuty.value = format(round(form.nswStampDuty.value));
	form.nswStampDuty2.value = format(round(form.nswStampDuty2.value));
	form.nswTotalDuty.value = format(round(form.nswTotalDuty.value));
	form.nswTransfer.value = format(round(form.nswTransfer.value));
}

function format(number) {
	if (number.length > 9 && number.length <= 12) 
	{
	   number = (number.substring(0,number.length-9) + 
	   "," + number.substring(number.length-9,number.length-6) +
	   "," + number.substring(number.length-6,number.length));
	   return number;
	}

	if (number.length > 6 && number.length <= 9) 
	{
   		number = (number.substring(0,number.length-6) + 
   		"," + (number.substring(number.length-6,number.length)));
   		return number;
   	}
	return number;
}

function round(number) {
	var dollars = Math.floor(number);
	for (var decimalAt = 0; decimalAt < number.length; decimalAt++) {
   		if (number.charAt(decimalAt)==".")
 		break;
	}
	var cents = "" + Math.round(number * 100);
	cents = cents.substring(cents.length-2, cents.length);
	dollars += ((number.charAt(decimalAt+2)=="9")&&(cents=="00"))? 1 : 0;
	return (dollars + "." + cents)
}

function clearForm(form) {
	form.amount.value = "";
	form.property.value = "";
}

