    /* v1.1; 2006-09-08 CH */
    var numexp = /[0-9]/i

    function hasNumeral(str)
	{
	  return numexp.test(str)
	}

    function stripNonNumeric(str)
    {
      if (str.indexOf(".") != -1)
      {
        var d = /.*\d.\b/
        var numparts = str.split('.')
        numparts[0] = numparts[0].replace(/[^0-9]/g,"")
        numparts[1] = numparts[1].replace(/[^0-9]/g,"")
        var n = numparts[0] + '.' + numparts[1];
        return n
      } else {
        return str.replace(/[^0-9]/g,"")
      }
    }

    function number_format(numeric_expression, decimals) {
      var pre = '';
      var post = '';
      if (0 == numeric_expression) { return 0; }
      var strNum = numeric_expression.toString();
      var p = -1;
      for (var i=0; i<strNum.length; i++) {
        if ('.' == strNum.charAt(i)) {
          p = i;
          break;
        }
      }
      if (p != -1) {
        pre = strNum.substring(0, p);
        post = strNum.substring(p+1, p+decimals+1);
        if (strNum.length > (p+decimals+1)) {
          post += '.' + strNum.substring(p+decimals+2);
          var fpost = Math.round(post);
          post = fpost.toString();
        }
        var fill_length = decimals - post.length;
        for (var i=0; i<fill_length; i++) {
          post += '0';
        }
        return pre + '.' + post;
      } else {
        for (var i=0; i<decimals; i++) {
          post += '0';
        }
       return strNum + '.' + post;
      }
    }

    function updateDraftTotals()
    {
      var f = document.forms['worksheet'];
      var t = 0;
      if (f.amount_1.value && hasNumeral(f.amount_1.value))
        t += parseFloat(stripNonNumeric(f.amount_1.value));
      if (f.amount_2.value && hasNumeral(f.amount_2.value))
        t += parseFloat(stripNonNumeric(f.amount_2.value));
      if (f.amount_3.value && hasNumeral(f.amount_3.value))
        t += parseFloat(stripNonNumeric(f.amount_3.value));
      if (f.amount_4.value && hasNumeral(f.amount_4.value))
        t += parseFloat(stripNonNumeric(f.amount_4.value));
      if (f.amount_5.value && hasNumeral(f.amount_5.value))
        t += parseFloat(stripNonNumeric(f.amount_5.value));
      if (f.amount_6.value && hasNumeral(f.amount_6.value))
        t += parseFloat(stripNonNumeric(f.amount_6.value));
      if (f.amount_7.value && hasNumeral(f.amount_7.value))
        t += parseFloat(stripNonNumeric(f.amount_7.value));
      if (f.amount_8.value && hasNumeral(f.amount_8.value))
        t += parseFloat(stripNonNumeric(f.amount_8.value));
      return number_format(t, 2);
    }

    function updateDepositTotals()
    {
      var f = document.forms['worksheet'];
      var t = 0;
      if (f.deposit_1.value && hasNumeral(f.deposit_1.value))
        t += parseFloat(stripNonNumeric(f.deposit_1.value));
      if (f.deposit_2.value && hasNumeral(f.deposit_2.value))
        t += parseFloat(stripNonNumeric(f.deposit_2.value));
      if (f.deposit_3.value && hasNumeral(f.deposit_3.value))
        t += parseFloat(stripNonNumeric(f.deposit_3.value));
      return number_format(t, 2);
    }

    function checkAmount(tbox)
    {
      var f = document.forms['worksheet'];
      var final_total = 0;
      var p = -1;

      if (tbox.value && hasNumeral(tbox.value))
      {
        var nstr = stripNonNumeric(tbox.value);
        var dr = updateDraftTotals();
        dr = number_format(dr, 2);
        final_total -= dr;
        var sdr = dr.toString();
        f.draft_sum.value = sdr;
        f.subtract.value = sdr;

        var dep = parseFloat(stripNonNumeric(f.balance_in.value));
        if (isNaN(dep))
          dep = 0;
        dep += parseFloat(updateDepositTotals());

        var subt = (isNaN(dep)) ? parseFloat(stripNonNumeric(dep)) : dep;
        f.subtotal.value = number_format(dep, 2);
        var ft = final_total + dep;
        f.balance_out.value = number_format(ft, 2);
      }
    }