function v_number(number){
	var digits="0123456789.Â£";
	if (number=="Â£") {return false;}
	if (number.length==0) {return false;}
	for (var i=0;i<number.length;i++){if (digits.indexOf(number.substring(i,i+1))==-1 && number.substring(i,i+1)!="."){return false;}}
}

function validate(){			
	var f_form = document.payrollform;
	var strerror = "";

	if (v_number(f_form.gmp.value)==false) {
		strerror = "> Gross pay\n";
		f_form.gmp.focus();
		f_form.gmp.select();
	}

	if (v_number(f_form.code.value)==false) {
	  if (f_form.stc.value != "BR" && f_form.stc.value != "DO" && f_form.stc.value != "NT") {
  		strerror = strerror + "> Numerical Tax code\n";
  		f_form.code.focus();
  		f_form.code.select();
    }
	}
	
	if (strerror != "") {
	  alert("Please complete the following fields correctly\nbefore resubmitting this form:\n\n" + strerror + "\nThank you.");
	  return false;
	}


  var MGP = 0;          //Monthly gross pay
  var NTC = 0;          //Numeric part of tax code
  var STC = 0;          //Special tax code
      
  var PYD = 0;          //PAYE deduction (Was Y)
  var NIEE = 0;         //National Insurance employees deduction
  var NIER = 0;         //National Insurance employers deduction
  var GP = 0;           //Gross pay
  var NP = 0;           //Net pay
  var CE = 0;           //Cost to employer
  var MTC = 0;          //Monthly tax code
  var P = 0;            //Monthly or weekly pay
  var RLT = 0;          //K code regulatory limit
  var RLTM = 50;        //K code regulatory limit multiplier
  
  var LTB = 10;         //Lower tax bracket
  var MTB = 22;         //Middle tax bracket
  var HTB = 40;         //Higher tax bracket
  var LTL = 186;        //Lower tax limit
  var MTL = 2698;       //Middle tax limit
  var JTL = (LTL+MTL);  //Joint tax limit
  
  var WLTL = 42;	//Lower tax limit - weekly
  var WMTL = 611;	//Middle tax limit - weekly
  var WJTL = (WLTL + WMTL);//Joint tax limit - weekly

  var LMGPB = 11;       //Lower monthly gross pay bracket
  var LMGPL = 433;      //Lower monthly gross pay limit
  var HMGPL = 2903;     //Higher monthly gross pay limit
  
  var LWGPL = 100;      //Lower weekly gross pay limit
  var HWGPL = 670;     //Higher weekly gross pay limit
  


  var NIERP = 12.8;     //National Insurance employers deduction percentage
  
  var LTS = ((LTL/100)*LTB);    //Lower tax sum
  var MTS = ((MTL/100)*MTB);    //Middle tax sum


 
// ------------------------------------------
// Take values from the form
// ------------------------------------------

  MGP = f_form.gmp.value;
  WGP = f_form.gmp.value;
  NTC = f_form.code.value;
  STC = f_form.stc.value;

// ------------------------------------------
// Calculate values required later
// ------------------------------------------

  MTC = (((10*NTC)+9)/12);


// If weekly is selected, swap the weekly values into the monthly - rest is the same
if (f_form.radWeekly.checked) {

  LTL = WLTL;        	//Lower tax limit
  MTL = WMTL;       	//Middle tax limit
  JTL = WJTL;  		//Joint tax limit

  LTS = (WLTL/100 * LTB) // Lower tax sum
  MTS = (WMTL/100 * MTB) // Middle tax sum

  LMGPL = LWGPL;      	//Lower monthly gross pay limit
  HMGPL = HWGPL;     	//Higher monthly gross pay limit

  MTC = (((10*NTC)+9)/52);

}



// ------------------------------------------
// First, determine value for PYD
// ------------------------------------------


  if      (STC=="BR") {PYD=((MGP/100)*MTB);}
  else if (STC=="DO") {PYD=((MGP/100)*HTB);}
  else if (STC=="NT") {PYD=0;}
  else if (STC=="K")  {
    P=(((MGP-1)+1)+MTC);
    RLT=((MGP/100)*RLTM);
    if (P<=LTL)      {PYD=(P/100)*LTB;}
    else if (P<=JTL) {PYD=(((P-LTL)/100)*MTB)+LTS;}
    else             {PYD=(((P-JTL)/100)*HTB)+MTS+LTS;}
    if (PYD>RLT)     {PYD=RLT;}
  }else{
    P=MGP;
    if      (P<=MTC)       {PYD=0;}
    else if (P<=(MTC+LTL)) {PYD=((P-MTC)/100)*LTB;}
    else if (P<=(MTC+JTL)) {PYD=(((P-MTC-LTL)/100)*MTB)+LTS;}
    else                   {PYD=(((P-MTC-JTL)/100)*HTB)+MTS+LTS;}
  }
    
// ------------------------------------------
// Determine value for NIEE
// ------------------------------------------

  if      (MGP<=LMGPL) {NIEE=0;}
  else if (MGP<=HMGPL) {NIEE=((MGP-LMGPL)/100)*LMGPB;}
  else                 {NIEE=(((HMGPL-LMGPL)/100)*LMGPB)+((MGP-HMGPL)/100);}

// ------------------------------------------
// Determine value for NIER
// ------------------------------------------

  if (MGP<=LMGPL) {NIER=0;}
  else            {NIER=((MGP-LMGPL)/100)*NIERP;}

// ------------------------------------------
// Copy over other values
// ------------------------------------------

  GP = MGP;
  NP = ((MGP-PYD)-NIEE);
  CE = ((GP-1)+NIER+1);

// ------------------------------------------
// Place values into the form
// ------------------------------------------

  PYD=Math.round(PYD);
	NIEE=Math.round(NIEE);
	NP=(GP-PYD-NIEE);
	NIER=Math.round(NIER);
	CE=((GP-1)+NIER+1);

	f_form.grosspay.value="£"+(GP);
	f_form.tax.value="£"+PYD;
	f_form.nic.value="£"+NIEE;
	f_form.net.value="£"+NP;
	f_form.enic.value="£"+NIER;
	f_form.emptotal.value="£"+CE;

	return false;
}
