function show_calculation() {
  // seller or buyer?
  cCustomer_type = '';
  if (document.getElementById('customer_seller').checked == true)
    cCustomer_type = 'Seller';
  if (document.getElementById('customer_buyer').checked == true)
    cCustomer_type = 'Buyer';
  if ((cCustomer_type != 'Seller') && (cCustomer_type != 'Buyer')) {
    alert ('You must select Seller or Buyer option!');
    return false;
  }
	
	// residential or commercial?
	cProperty_type = '';
  if (document.getElementById('property_residential').checked == true)
    cProperty_type = 'Residential';
  if (document.getElementById('property_commercial').checked == true)
    cProperty_type = 'Commercial';
  if ((cProperty_type != 'Residential') && (cProperty_type != 'Commercial')) {
    alert ('You must select type of your property - Residential or Commercial!');
    return false;
  }
  
	// get price
  cPrice = Math.round(removeSpaces(document.getElementById("s_sale_price").value));
  if ((cPrice == 0) || (isNaN(cPrice)))  {
    alert ('You must enter valid price!');
    return false;
  }

  // calculation for both
  // calculate settlement fee
  cSettlement_fee = 0;
  cSettlement_fee = calcSettlementFee(cPrice, cCustomer_type);
  // calculate strata fee (if applicable)
  cStrata = document.getElementById('p_strata_yes').checked;
  cStrata_fee = 0;
  if (cStrata) {
    cStrata_fee = calcStrataFee(cCustomer_type);
   }

  // calculation for sellers
  if (cCustomer_type == 'Seller') {
    cDisbursements_fee = 115;
    // calculate total fee
    cTotal_fee = cSettlement_fee + cStrata_fee + cDisbursements_fee;
  }


  // calculation for buyers
  if (cCustomer_type == 'Buyer') {
    cDisbursements_fee = 183;
    cGov_enquiry_fee = 172;
    cAdjRatesTaxes = calcAdjRatesTaxes((new Date().getMonth())+1);
    cTransfer_fee = calcTransferFee(cPrice);
    cFirstHomeOwner = document.getElementById('p_first_yes').checked;
    cOccupy = document.getElementById('p_occupying_yes').checked;
    cVacant = document.getElementById('p_vacant_yes').checked;
		cContract = document.getElementById('p_contract_yes').checked;
    cStamp_duty_fee = 0;
    cStamp_duty_fee = calcStampDutyFee(cPrice, cOccupy, cFirstHomeOwner, cVacant, cContract, cProperty_type);
    // calculate total fee
    cTotal_fee = cSettlement_fee + cStrata_fee + cTransfer_fee + cStamp_duty_fee + cDisbursements_fee + cGov_enquiry_fee + cAdjRatesTaxes;
  }

  // display info
  // for both
  setObjInnerText(document.getElementById("settlement_fee"), formatCurrency(cSettlement_fee + cStrata_fee));
  // for sellers only
  if (cCustomer_type == 'Seller') {
    setObjInnerText(document.getElementById("sel_disbursements"), formatCurrency(cDisbursements_fee));
    setObjInnerText(document.getElementById("sel_total_fee"), formatCurrency(cTotal_fee));
    document.getElementById("buyer_fields").style.display = "none";
    document.getElementById("seller_fields").style.display = "block";
  }
  // for buyers only
  if (cCustomer_type == 'Buyer') {
    setObjInnerText(document.getElementById("buy_transfer_fee"), formatCurrency(cTransfer_fee));
    setObjInnerText(document.getElementById("buy_stamp_duty_fee"), formatCurrency(cStamp_duty_fee));
    setObjInnerText(document.getElementById("buy_disbursements"), formatCurrency(cDisbursements_fee));
    setObjInnerText(document.getElementById("buy_gov_enquiry_fee"), formatCurrency(cGov_enquiry_fee));
    setObjInnerText(document.getElementById("buy_adj_rates_taxes"), formatCurrency(cAdjRatesTaxes));
    setObjInnerText(document.getElementById("buy_total_fee"), formatCurrency(cTotal_fee));
    document.getElementById("seller_fields").style.display = "none";
    document.getElementById("buyer_fields").style.display = "block";
  }
  show_result_block();
  return false;
}

// remove spaces
function removeSpaces(string) {
  var tstring = "";
  string = '' + string;
  splitstring = string.split(" ");
  for(i = 0; i < splitstring.length; i++)
  tstring += splitstring[i];
  return tstring;
}

// calculate settlement fee
function calcSettlementFee(price, customer_type) {
  if (customer_type == 'Seller') {
    if ((price>0) && (price<=150000))
      fee = 566;
    else if ((price>=150001) && (price<=500000))
      fee = 566 + (price-150000)*0.00143;
    else if ((price>=500001) && (price<=1000000))
      fee = 1066.5 + (price-500000)*0.00110;
    else if (price>=1000001)
      fee = 1616.5 + (price-1000000)*0.00077;
    return roundNumber(fee,2);
  }
  if (customer_type == 'Buyer') {
   if ((price>0) && (price<=150000))
      fee = 849;
    else if ((price>=150001) && (price<=500000))
      fee = 849 + (price-150000)*0.00220;
    else if ((price>=500001) && (price<=1000000))
      fee = 1619 + (price-500000)*0.00165;
    else if (price>=1000001)
      fee = 2444 + (price-1000000)*0.00110;
    return roundNumber(fee,2);
  }
  return false;
}

// calculate strata fee
function calcStrataFee(customer_type){
  if (customer_type == 'Seller')
    return 55;
  if (customer_type == 'Buyer')
    return 110;
}

// calculate transfer fee
function calcTransferFee(price) {
  fee = 0;
  if (price<=200000)
    fee = 118;
  else
    fee = 118 + Math.ceil((price-200000)/100000)*20;
  return fee;
}

// calculate stamp duty fee
function calcStampDutyFee(price, occupy, first_home_owner, vacant, contract, property_type) {
  fee = calcStampDutyFeeResRate(price);
  if (first_home_owner) {
    if (occupy && vacant && contract) {
      if (price<=400000)
        fee = calcStampDutyFeeVacantLand(price);
    }
    if (occupy && !vacant) {
      if (price<=600000)
        fee = calcStampDutyFeeFirstHomeOwner(price);
    }
  }
	else {
		if (vacant && !contract)
				fee = calcStampDutyFeeFullRate(price);
	  if (property_type != 'Residential')
				fee = calcStampDutyFeeFullRate(price);
	}
  return fee;
}

// calculate stamp duty fee - full rate
function calcStampDutyFeeFullRate(price) {
//	alert ('Full Rate Calcultaion!');
  fee=0;
  if ((price>0) && (price<=80000))
     fee = Math.ceil((price)/100)*1.9;
   else if ((price>=80001) && (price<=100000))
     fee = 1520 + Math.ceil((price-80000)/100)*2.85;
   else if ((price>=100001) && (price<=250000))
     fee = 2090 + Math.ceil((price-100000)/100)*3.8;
   else if ((price>=250001) && (price<=500000))
     fee = 7790 + Math.ceil((price-250000)/100)*4.75;
   else if (price>=500001)
     fee = 19665 + Math.ceil((price-500000)/100)*5.15;
   return roundNumber(fee,2);
}

// calculate stamp duty fee - residential concessional rate
function calcStampDutyFeeResRate(price) {
//	alert ('Residential Rate Calcultaion!');
  fee=0;
  if ((price>0) && (price<=120000))
     fee = Math.ceil((price)/100)*1.9;
   else if ((price>=120001) && (price<=150000))
     fee = 2280 + Math.ceil((price-120000)/100)*2.85;
   else if ((price>=150001) && (price<=360000))
     fee = 3135 + Math.ceil((price-150000)/100)*3.8;
   else if ((price>=360001) && (price<=725000))
     fee = 11115 + Math.ceil((price-360000)/100)*4.75;
   else if (price>=725001)
     fee = 28453 + Math.ceil((price-725000)/100)*5.15;
   return roundNumber(fee,2);
}

// calculate stamp duty fee - concessional
function calcStampDutyFeeConcessional(price) {
  fee = 0;
  if ((price>0) && (price<=100000))
    fee = Math.ceil((price)/100)*1.5;
  else if ((price>=100001) && (price<=200000))
    fee = 1500 + Math.ceil((price-100000)/100)*4.7;
  return fee;
}

// calculate stamp duty fee - first home owner
function calcStampDutyFeeFirstHomeOwner(price) {
  fee = 0;
  if ((price>0) && (price<=500000))
    fee = 0;
  else if ((price>=500001) && (price<=600000))
    fee = Math.ceil((price-500000)/100)*22.51;
  return fee;
}

// calculate stamp duty fee - vacant land
function calcStampDutyFeeVacantLand(price) {
  fee = 0;
  if ((price>0) && (price<=300000))
    fee = 0;
  else if ((price>=300001) && (price<=400000))
    fee = Math.ceil((price-300000)/100)*13.01;
  return fee;
}

function calcAdjRatesTaxes(month) {
  fee = 0;
  switch (month) {
    case 1:
      fee = 1000;
      break;
    case 2:
      fee = 835;
      break;
    case 3:
      fee = 670;
      break;
    case 4:
      fee = 500;
      break;
    case 5:
      fee = 335;
      break;
    case 6:
      fee = 170;
      break;
    case 7:
      fee = 2000;
      break;
    case 8:
      fee = 1835;
      break;
    case 9:
      fee = 1670;
      break;
    case 10:
      fee = 1500;
      break;
    case 11:
      fee = 1335;
      break;
    case 12:
      fee = 1170;
      break;
    default:
      fee = 0;
  }
  return fee;
}

// set text between two html tags (IE & FF)
function setObjInnerText(el, text){
  if(document.all){
     el.innerText = text;
  } else{
    el.textContent = text;
  }
}

// round numbers to given decimal places (not absolute precise)
function roundNumber(num, dec) {
  var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
  return result;
}

// format currency
function formatCurrency(num) {
  num = num.toString().replace(/\$|\,/g,'');
  if(isNaN(num))
  num = "0";
  sign = (num == (num = Math.abs(num)));
  num = Math.floor(num*100+0.50000000001);
  cents = num%100;
  num = Math.floor(num/100).toString();
  if(cents<10)
    cents = "0" + cents;
  for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
    num = num.substring(0, num.length-(4*i+3)) + ',' + num.substring(num.length-(4*i+3));
  return (((sign)?'':'-') + '$' + num + '.' + cents);
}

// set fields
function setFields(customer_type){
  if (customer_type == 'Seller') {
    document.getElementById('label_fho').className = 'disabled';
    document.getElementById('label_p_first_yes').className = 'disabled';
    document.getElementById('p_first_yes').disabled = true;
    document.getElementById('label_p_first_no').className = 'disabled';
    document.getElementById('p_first_no').disabled =true;

    document.getElementById('label_occ').className = 'disabled';
    document.getElementById('label_p_occupying_yes').className = 'disabled';
    document.getElementById('p_occupying_yes').disabled = true;
    document.getElementById('label_p_occupying_no').className = 'disabled';
    document.getElementById('p_occupying_no').disabled = true;

    document.getElementById('label_vac').className = 'disabled';
    document.getElementById('label_p_vacant_yes').className = 'disabled';
    document.getElementById('p_vacant_yes').disabled = true;
    document.getElementById('label_p_vacant_no').className = 'disabled';
    document.getElementById('p_vacant_no').disabled = true;
		
    document.getElementById('label_con').className = 'disabled';
    document.getElementById('label_p_contract_yes').className = 'disabled';
    document.getElementById('p_contract_yes').disabled = true;
    document.getElementById('label_p_contract_no').className = 'disabled';
    document.getElementById('p_contract_no').disabled = true;		
		
  }
  if (customer_type == 'Buyer') {
    document.getElementById('label_fho').className = 'enabled';
    document.getElementById('label_p_first_yes').className = 'enabled';
    document.getElementById('p_first_yes').disabled = false;
    document.getElementById('label_p_first_no').className = 'enabled';
    document.getElementById('p_first_no').disabled = false;

    document.getElementById('label_occ').className = 'enabled';
    document.getElementById('label_p_occupying_yes').className = 'enabled';
    document.getElementById('p_occupying_yes').disabled = false;
    document.getElementById('label_p_occupying_no').className = 'enabled';
    document.getElementById('p_occupying_no').disabled = false;

    document.getElementById('label_vac').className = 'enabled';
    document.getElementById('label_p_vacant_yes').className = 'enabled';
    document.getElementById('p_vacant_yes').disabled = false;
    document.getElementById('label_p_vacant_no').className = 'enabled';
    document.getElementById('p_vacant_no').disabled = false;
		
		document.getElementById('label_con').className = 'enabled';
    document.getElementById('label_p_contract_yes').className = 'enabled';
    document.getElementById('p_contract_yes').disabled = false;
    document.getElementById('label_p_contract_no').className = 'enabled';
    document.getElementById('p_contract_no').disabled = false;
  }
}

function show_calc_block(){
  // hide calculator form block
  document.getElementById("calculator").style.display = "block";
  // display result block
  document.getElementById("results").style.display = "none";
  // display button New calculation
  document.getElementById("calc_again").style.display = "none";
}

function show_result_block(){
  // hide calculator form block
  document.getElementById("calculator").style.display = "none";
  // display result block
  document.getElementById("results").style.display = "block";
  // display button New calculation
  document.getElementById("calc_again").style.display = "block";
}

function fill_form_variables() {
  // customer type
  document.getElementById('CAT_Custom_36036').value = cCustomer_type;
  // sale price
  document.getElementById('CAT_Custom_36037').value = cPrice;
  // strata
  if (document.getElementById('p_strata_yes').checked)
    document.getElementById('CAT_Custom_36038').value = 'Yes';
  else
    document.getElementById('CAT_Custom_36038').value = 'No';
  // if customer is buyer, send also these values
  if (cCustomer_type == 'Buyer') {
    if (document.getElementById('p_first_yes').checked)
      document.getElementById('CAT_Custom_36039').value = 'Yes';
    else
      document.getElementById('CAT_Custom_36039').value = 'No';
    if (document.getElementById('p_occupying_yes').checked)
      document.getElementById('CAT_Custom_36040').value = 'Yes';
    else
      document.getElementById('CAT_Custom_36040').value = 'No';
    if (document.getElementById('p_vacant_yes').checked)
      document.getElementById('CAT_Custom_36041').value = 'Yes';
    else
      document.getElementById('CAT_Custom_36041').value = 'No';
		if (document.getElementById('p_contract_yes').checked)
      document.getElementById('CAT_Custom_36050').value = 'Yes';
    else
      document.getElementById('CAT_Custom_36050').value = 'No';
} else {
    // remove unused hidden fields
    document.getElementById('theForm').removeChild(document.getElementById('CAT_Custom_36039'));
    document.getElementById('theForm').removeChild(document.getElementById('CAT_Custom_36040'));
    document.getElementById('theForm').removeChild(document.getElementById('CAT_Custom_36041'));
		document.getElementById('theForm').removeChild(document.getElementById('CAT_Custom_36050'));
  }
  document.getElementById('CAT_Custom_36042').value = cSettlement_fee;
  document.getElementById('CAT_Custom_36045').value = cDisbursements_fee;
  if (cCustomer_type == 'Buyer') {
    document.getElementById('CAT_Custom_36043').value = cTransfer_fee;
    document.getElementById('CAT_Custom_36044').value = cStamp_duty_fee;
    document.getElementById('CAT_Custom_36046').value = cGov_enquiry_fee;
    document.getElementById('CAT_Custom_36047').value = cAdjRatesTaxes;
  } else {
    document.getElementById('theForm').removeChild(document.getElementById('CAT_Custom_36043'));
    document.getElementById('theForm').removeChild(document.getElementById('CAT_Custom_36044'));
    document.getElementById('theForm').removeChild(document.getElementById('CAT_Custom_36046'));
    document.getElementById('theForm').removeChild(document.getElementById('CAT_Custom_36047'));
  }
  document.getElementById('CAT_Custom_36048').value = cTotal_fee;
}