function calculate(type) {
  // explicit (type) arguments are: "register" or "transfer".
  // the empty or implicit (type) calculates as a renewal.
  var qty = eval(document.order.number.value);
  if (!qty) { var qty = 0; }
  if (qty == 0) {
    qty = 1;
    document.order.number.value = qty;
    calculate(type);
  }
    var yrs = eval(document.order.years.value);
    if (yrs > 9) {
      yrs = 9;
      document.order.years.value = yrs;
    }
    if (!yrs) { var yrs = 0; }
    if (yrs == 0) {
      yrs = 2;
      document.order.years.value = yrs;
      calculate(type);
    }
    var cirafee = eval(qty);
    var cirafee = eval(cirafee)*(eval(yrs));
  var lwebfee = eval(eval(cirafee)*20)+(eval(qty)*25);
  if (type == 'register') {
    var lwebfee = eval(lwebfee)+25;
    if ( yrs > 4 ) { var lwebfee = eval(lwebfee)-25; }
  }
if ( yrs > 4 ) { var lwebfee = eval(lwebfee)-(eval(qty)*25); }
  if (type == 'transfer') {
    var lwebfee=5+(eval(qty)*eval(yrs)*20);
    if (!document.order.monthly_services.checked) { var lwebfee = eval(lwebfee)+20; }
  }
  var subtot = Format(lwebfee);
  var gst = eval(subtot)*.13;
  var gst = Format(gst);
  var grandtot = eval(subtot)+(eval(gst));
  var grandtot = Format(grandtot);
  document.order.subtot.value = subtot;
  document.order.gst.value = gst;
  document.order.grandtot.value = grandtot;
}

function Format(value) {
  result=Math.floor(value)+".";
  var cents=100*(value-Math.floor(value))+0.5;
  result += Math.floor(cents/10);
  result += Math.floor(cents%10);
  return result;
}

