///////////////////////////////////////////
// VALIDATORS
///////////////////////////////////////////

function validate(validator, value, name) {
  if (validator.pattern.test(value)) {
    return true;
  }
  else {
    alert(name + " needs to be " + validator.description);
    return false;
  }
}

// The Validator "class"
function Validator(pattern, description) {
  this.pattern = pattern;
  this.description = description;
}

var validInteger
 = new Validator(/^\d+$/,
                 "an integer number, e.g., 12");

var validName
 = new Validator(/^[a-z][a-z0-9_-]*$/i,
                 "at least one letter, followed by letters, digits, hyphens"
                 + " or underscores.");

var validNumber
 = new Validator(/^\d*([.]\d*)?$/,
                 "an integer or decimal number, e.g., 12 or 5.42");

var validPathname
 = new Validator(/^([a-z][a-z0-9_-]*\/)*[a-z][a-z0-9_-]*\.[a-z0-9_-]+$/,
                 "an optional directory path plus a full file name, e.g.,"
                 + " foo.html or images/foo.jpeg");

var validText
 = new Validator(/^\S/,
                 "a string with at least one non-blank character.");