function calculatetax() {

/* check user has entered valid data */
if(isNaN(frmtaxcalc.grosspay.value) || frmtaxcalc.grosspay.value =="") {
  alert("Please enter Gross Pay as a number");
  frmtaxcalc.grosspay.focus();
  return;
}

if (isNaN(frmtaxcalc.taxpaid.value) || frmtaxcalc.taxpaid.value =="") {
  alert("Please enter Tax Paid as a number");
  frmtaxcalc.taxpaid.focus();
  return;
}

/* data is valid set up arrays */
allowance = new Array(4535,4615,4615,4745,4895,5035,5225,5435)
firsttaxableamount = new Array(1880,1920,1960,2020,2090,2150,2230,0)
firsttaxrate = new Array(10,10,10,10,10,10,10,0)
secondtaxableamount = new Array(27520,27980,28540,29380,30310,31150,32370,36000)
secondtaxrate = new Array(22,22,22,22,22,22,22,22)
remaindertaxrate = new Array(40,40,40,40,40,40,40,40)

/* display allowances and rates */
frmtaxcalc.allowance.value = allowance[frmtaxcalc.taxyear.value]; 
frmtaxcalc.firsttaxableamount.value = firsttaxableamount[frmtaxcalc.taxyear.value];
frmtaxcalc.firsttaxrate.value = firsttaxrate[frmtaxcalc.taxyear.value];
frmtaxcalc.secondtaxableamount.value = secondtaxableamount[frmtaxcalc.taxyear.value];
frmtaxcalc.secondtaxrate.value = secondtaxrate[frmtaxcalc.taxyear.value];
frmtaxcalc.remaindertaxrate.value = remaindertaxrate[frmtaxcalc.taxyear.value];

/* set inital overpaid and underpaid */
frmtaxcalc.underpaid.value = "0.00"
frmtaxcalc.overpaid.value = "0.00"

amounttotax = frmtaxcalc.grosspay.value - frmtaxcalc.allowance.value
if (amounttotax <= 0) {amounttotax = 0}
  
amounttotaxatfirstrate = amounttotax
if (amounttotaxatfirstrate <= 0) {amounttotaxatfirstrate = 0}
if (amounttotaxatfirstrate >= frmtaxcalc.firsttaxableamount.value) {amounttotaxatfirstrate = frmtaxcalc.firsttaxableamount.value}
taxatfirstrate = 0
if (amounttotaxatfirstrate > 0) (taxatfirstrate = amounttotaxatfirstrate * (frmtaxcalc.firsttaxrate.value/100))

amounttotaxatsecondrate = amounttotax - amounttotaxatfirstrate
if (amounttotaxatsecondrate <= 0) {amounttotaxatsecondrate = 0}
if (amounttotaxatsecondrate >= frmtaxcalc.secondtaxableamount.value) {amounttotaxatsecondrate = frmtaxcalc.secondtaxableamount.value}
taxatsecondrate = 0
if (amounttotaxatsecondrate > 0) (taxatsecondrate = amounttotaxatsecondrate * (frmtaxcalc.secondtaxrate.value/100))

amounttotaxatremainderrate = amounttotax - amounttotaxatfirstrate - amounttotaxatsecondrate
if (amounttotaxatremainderrate <= 0) {amounttotaxatremainderrate = 0}
taxatremainderrate = 0
if (amounttotaxatremainderrate > 0) (taxatremainderrate = amounttotaxatremainderrate * (frmtaxcalc.remaindertaxrate.value/100))

/*
alert("Amount to tax = " + amounttotax)
alert("Amount to tax at first rate = " + amounttotaxatfirstrate)
alert("Amount to tax at second rate = " + amounttotaxatsecondrate)
alert("Amount to tax at remainder rate = " + amounttotaxatremainderrate)
alert("Tax at First rate = " + taxatfirstrate)
alert("Tax at Second rate = " + taxatsecondrate)
alert("Tax at Remainder rate = " + taxatremainderrate)
*/

totaltax = taxatfirstrate + taxatsecondrate + taxatremainderrate

if (totaltax - frmtaxcalc.taxpaid.value == 0) {
	alert("You have paid " + frmtaxcalc.taxpaid.value + " which is the correct amount of tax");
}

if (totaltax - frmtaxcalc.taxpaid.value > 0) {
  underpaidto2decimal = new Number(totaltax - frmtaxcalc.taxpaid.value)
  frmtaxcalc.underpaid.value = underpaidto2decimal.toFixed(2)
  if (frmtaxcalc.underpaid.value > 0) {	
	alert("You have underpaid your tax by " + frmtaxcalc.underpaid.value + "");
	}
  }
if (frmtaxcalc.taxpaid.value - totaltax > 0) {
  overpaidto2decimal = new Number(frmtaxcalc.taxpaid.value - totaltax)
  frmtaxcalc.overpaid.value = overpaidto2decimal.toFixed(2)
  /*if (frmtaxcalc.overpaid.value > 0) {
  alert("Congratulations! You are due a tax rebate of €" + frmtaxcalc.overpaid.value + " Please contact TotalHelp Express to claim your refund.");
  }*/
}

}
