function integer_only(e) {
  e = (e) ? e : event;
  var trg = (e.target) ? e.target : ((e.srcElement) ? e.srcElement : null);
  var cc  = (e.charCode) ? e.charCode : ((e.keyCode) ? e.keyCode : ((e.which) ? e.which : 0));
  var v   = trg.value;
  // only proceed if we have a target
  if(trg) {
    // only allow a dash at the beginning
    if (cc == 45 && v.length > 0) { e.preventDefault(); return false; }
    // only allow numerals or dashes,
    if (cc > 31 && (cc <48 || cc > 57) && cc != 45) { e.preventDefault(); return false; }
    return true;
  }
  return true;
}

function posinteger_only(e) {
  e = (e) ? e : event;
  var trg = (e.target) ? e.target : ((e.srcElement) ? e.srcElement : null);
  var cc  = (e.charCode) ? e.charCode : ((e.keyCode) ? e.keyCode : ((e.which) ? e.which : 0));
  var v   = trg.value;
  // only proceed if we have a target
  if(trg) {
    // only allow numerals,
    if (cc > 31 && (cc <48 || cc > 57)) { e.preventDefault(); return false; }
    return true;
  }
  return true;
}

function decimal_only(e) {
  //cross-platform event shennanigans
  e = (e) ? e : event;
  var trg = (e.target) ? e.target : ((e.srcElement) ? e.srcElement : null);
  var cc  = (e.cc) ? e.cc : ((e.keyCode) ? e.keyCode : ((e.which) ? e.which : 0));

  // only proceed if we have a target
  if(trg) {
    var v = trg.value;
    // location of decimal point in current field value, -1 if absent
    var decPt = v.indexOf(".");

    // only allow a dash at the beginning
    if (cc == 45 && v.length > 0) { e.preventDefault(); return false; }
    // only allow one decimal point
    if (cc == 46 && decPt!=-1 ) { e.preventDefault(); return false; }
    // only allow two decimal places
    if (cc > 47 && cc < 58 && decPt!=-1 && (v.length-decPt)>2) {
      e.preventDefault();
      return false;
    }
    // only allow numerals, dashes, or decimal points.
    if (cc > 31 && (cc <48 || cc > 57) && cc != 45 && cc != 46) {
      e.preventDefault();
      return false;
    }
  }
  return true;
}

function posdecimal_only(e) {
  //cross-platform event shennanigans
  e = (e) ? e : event;
  var trg = (e.target) ? e.target : ((e.srcElement) ? e.srcElement : null);
  var cc  = (e.cc) ? e.cc : ((e.keyCode) ? e.keyCode : ((e.which) ? e.which : 0));

  // only proceed if we have a target
  if(trg) {
    var v = trg.value;
    // location of decimal point in current field value, -1 if absent
    var decPt = v.indexOf(".");

    // only allow one decimal point
    if (cc == 46 && decPt!=-1 ) { e.preventDefault(); return false; }
    // only allow two decimal places
    if (cc > 47 && cc < 58 && decPt!=-1 && (v.length-decPt)>2) {
      e.preventDefault();
      return false;
    }
    // only allow numerals or decimal points.
    if (cc > 31 && (cc <48 || cc > 57) && cc != 46) {
      e.preventDefault();
      return false;
    }
  }
  return true;
}