var frm = document.calculator;


function evaltaxcode(element) {

  var code = element.value;

  done = false;
  revCode = false;

  code = code.toUpperCase ();
  if (code.match (/(^[A-Z]{1,1}[0-9]+$)|(^[0-9]+[A-Z]{1,1}$)|(^[A-Z]{2,2}$)/gi))
  {

    // for people that misread
    if (code == 'D0')
      code = 'DO';

    if (code == 'NT' || code == 'BR' || code == 'DO')
    {
      c = code;
      v = "";
      done = true;
    }
    else
    {

      l=code.length;
      c = code.charAt (l-1);

      if (c>="A" && c<="Z")
      {
        v = evalnum(code);
        if (v>0)
          done = true;
      }
      else
      {

        c = code.charAt(0);
        revCode = true;
        if (c>="A" && c<="Z")
        {
          v = evalnum(code);
          if (v>0)
            done = true;
        }
      }
    }

  }

  if (!done)
  {
    alert ("Please enter an appropriate tax code.");
    element.focus ();
    return;
  }
  else
  {
    if(!revCode) { element.value = v + c; } else {  element.value = c + v; }
  }

}


function evalnum(numstr) {

  var i,c,neg;
  var ret="";
  var p=false;

  neg = 1;
  if (numstr.indexOf("-") >=0) { neg = -1; }

  for (i=numstr.length-1; i>=0; i--) {
    c=numstr.charAt(i);

    if (c == ".") {
      if (p == false) p=true;
      else c="";
    }

    if ((c < "0" || c > "9") && c != ".") c="";

    ret = c + ret;
  }

  if (ret=="" || ret=="NaN") ret="0";
  return parseFloat(ret*neg);

}


function evalpound(num) {

  var i,l,d,n;
  var nums;
  var ret;

  nums = String(Math.round(num*100));
  n = ((num < 0)? 1:0);

  while (nums.length <3) nums = "0" + nums;

  l = nums.length-3;
  ret = "." + nums.charAt(l+1) + nums.charAt(l+2);

  d=0;
  for (i=l; i>=0; i--) {
    ret = nums.charAt(i) + ret;
    d++;
    if (d==3 && i>n) {
      ret="," + ret;
      d=0;
    }
  }

  ret = "\u00a3" + ret;
  return ret;

}


function evalpoundonly(num) {

  var i,l,d;
  var nums;
  var ret='';

  nums = String(Math.round(num*100));

  while (nums.length <3) nums = "0" + nums;

  l = nums.length-3;
  //ret = "." + nums.charAt(l+1) + nums.charAt(l+2);

  d=0;
  for (i=l; i>=0; i--) {
    ret = nums.charAt(i) + ret;
    d++;
    if (d==3 && i>0) {
      ret="," + ret;
      d=0;
    }
  }

  ret = "\u00a3" + ret;
  return ret;

}


// VAT calculator JavaScript code
// (c)2005 Digita.com
// Written by Colin Shanahan 29/11/99

// Updated by Tom Dommett 25/10/02
// Updated by Tom Dommett 28/10/02
// Updated by Colin Shanahan 28/09/05 - fixed rounding error and now works in Mozilla
// Updated by Colin Shanahan 25/11/08 - changed to new 15% rate

// ----------------------------------------------------------------------------
// starts calculation

function calculate() {
  var vat, total, vatTotal, finalTotal;

  var frm = document.calculator;

  total = evalnum( frm.total.value );
  if (total == "NaN") total=0;
  if (total == 0) {
    alert("You must enter a figure.");
    frm.total.focus()
    return
  }
  else

    if ( frm.vatrate[0].selected ) {
      var vatRate = ( frm.vatrate[0].selected )? 0.175 : 0.05;
      var vatFraction = ( frm.vatrate[0].selected )? (1-(1/1.175)) : (1-(1/1.05));
    }
    else {
      var vatRate = ( frm.vatrate[1].selected )? 0.15 : 0.05;
      var vatFraction = ( frm.vatrate[1].selected )? (1-(1/1.15)) : (1-(1/1.05));
    }

    frm.total.value = evalpound( total );
    if (frm.chkvat.checked)
    {
      vatTotal = total * vatFraction;
      finalTotal = total - vatTotal;
      frm.calcvat.value = evalpound( vatTotal );
      frm.calctotal.value = evalpound( finalTotal );
      document.getElementById("netgross").firstChild.nodeValue = 'Net amount (excluding VAT)';
    }
    else
    {
      vatTotal = total * vatRate;
      vatTotal = Math.round(vatTotal * 100) / 100;
      frm.calcvat.value = evalpound( vatTotal );
      frm.calctotal.value = evalpound( total + vatTotal );
      document.getElementById("netgross").firstChild.nodeValue = 'Gross amount (including VAT)';
    }
}

function autocalc () {

  if ( document.calculator.total.value != '' ) {
    calculate();
  }

}
