function formvalidCheckElm() {
  this.formname= new Array;
  this.field=new Array;
  this.check=new Array;
  this.value=new Array;
  this.error=new Array;
}
var formvalidChecks = new formvalidCheckElm();
// whitespace characters
var formvalidWhitespace = " \t\n\r";
function formvalidIsEmpty(s){
  return ((s == null) || (s.length == 0))
}
function formvalidIsWhitespace (s){
  var i;
  if (formvalidIsEmpty(s)) return true;
  for (i = 0; i < s.length; i++)  {   
    var c = s.charAt(i);
    if (formvalidWhitespace.indexOf(c) == -1) return false;
  }
  return true;
}
function formvalidIsEmail (s) {
  if (!formvalidIsWhitespace(s)) {
    var i = 1;
    var sLength = s.length;
    while ((i < sLength) && (s.charAt(i) != "@")) {
      i++;
    }
    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;
    while ((i < sLength) && (s.charAt(i) != ".")) {
      i++;
    }
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
  } else return true;
}
function formvalidIsChatnick (s) {
  var i;
  var novalidstart = "-0123456789";
  var validChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789{}|[]\\^-_";
  if ((s.length > 30) || (s.length < 1)) return false;
  if (novalidstart.indexOf(s.charAt(0)) != -1) return false;
  for ( i = 1; i < s.length; i++) {
    if (validChars.indexOf(s.charAt(i)) == -1)
      return false;
  }
  return true;
}

function addcheck(formname, field, check, value, error) {
  var newIndex = formvalidChecks.formname.length;
  formvalidChecks.formname[newIndex] = formname;
  formvalidChecks.field[newIndex] = field;
  formvalidChecks.check[newIndex] = check;
  formvalidChecks.value[newIndex] = value;
  formvalidChecks.error[newIndex] = error;
  if (!document.forms[formname].onsubmit) {
    document.forms[formname].onsubmit = formvalidValidateForm;
  }
}
function formvalidValidateForm(formname) {
  if (typeof(formname) != 'string') {
    if (typeof(formname) == 'object' && typeof(formname.target) == 'object') {
      formname = formname.target.name;
    }
    if (typeof(event) == 'object' && typeof(event.srcElement)== 'object') {
      formname = event.srcElement.name;
    }
  }
  var numelms = formvalidChecks.formname.length;
  var cansubmit = true;
  var errorMsg = '';
  for (var i=0; i<numelms; i++) {
//    alert('formname: ' + formname + '\nform: ' + formvalidChecks.formname[i] + '\ncheck: ' + formvalidChecks.check[i] + '\nfield: ' + formvalidChecks.field[i] + '\nvalue: ' + formvalidChecks.value[i] + '\nerror: ' + formvalidChecks.error[i]);
    if (formvalidChecks.formname[i] == formname) {
      switch (document.forms[formname].elements[formvalidChecks.field[i]].type) {
        case 'text' :
          fieldvalue = document.forms[formname].elements[formvalidChecks.field[i]].value;
          break;
        case 'select-one' :
          fieldvalue = document.forms[formname].elements[formvalidChecks.field[i]].options[document.forms[formname].elements[formvalidChecks.field[i]].selectedIndex].value;
          break;
        case 'select-multiple':
          fieldvalue = '';
          for (var j=0; j<document.forms[formname].elements[formvalidChecks.field[i]].length; j++) {
            if (document.forms[formname].elements[formvalidChecks.field[i]].options[j].selected == true) {
              fieldvalue = fieldvalue + '' + document.forms[formname].elements[formvalidChecks.field[i]].options[j].value;
            }
          }
          break;
        case 'file':
          fieldvalue = '';
          break;
        case 'password':
        case 'textarea':
        default :
          fieldvalue = document.forms[formname].elements[formvalidChecks.field[i]].value;
          break;
      }
      switch (formvalidChecks.check[i]) {
        case 'required':
          if (formvalidIsWhitespace(fieldvalue)) {
            errorMsg = errorMsg + formvalidChecks.error[i] + '\n\n';
            cansubmit = false;
          }
          break;
        case 'required_if_active':
          if (document.forms[formname].elements[formvalidChecks.value[i]].value != 0 && formvalidIsWhitespace(fieldvalue)) {
            errorMsg = errorMsg + formvalidChecks.error[i] + '\n\n';
            cansubmit = false;
          }
          break;
        case 'alphanum':
          var regex = /^[\w\s]*$/;
          if (!regex.exec(fieldvalue)) {
            errorMsg = errorMsg + formvalidChecks.error[i] + '\n\n';
            cansubmit = false;
          }
          break;
        case 'numeric':
          var regex = /^[\d\s]*$/;
          if (!regex.exec(fieldvalue)) {
            errorMsg = errorMsg + formvalidChecks.error[i] + '\n\n';
            cansubmit = false;
          }
          break;
        case 'maxlen':
          if (fieldvalue.length > formvalidChecks.value[i]) {
            errorMsg = errorMsg + formvalidChecks.error[i] + '\n\n';
            cansubmit = false;
          }
          break;
        case 'minlen':
          if (fieldvalue.length < formvalidChecks.value[i] && !formvalidIsWhitespace(fieldvalue)) {
            errorMsg = errorMsg + formvalidChecks.error[i] + '\n\n';
            cansubmit = false;
          }
          break;
        case 'email' :
          if (!formvalidIsEmail(fieldvalue)) {
            errorMsg = errorMsg + formvalidChecks.error[i] + '\n\n';
            cansubmit = false;
          }
          break;
        case 'chatnick' :
          if (!formvalidIsChatnick(fieldvalue)) {
            errorMsg = errorMsg + formvalidChecks.error[i] + '\n\n';
            cansubmit = false;
          }
          break;
        case 'greater':
        case 'gt':
          if (!(fieldvalue > formvalidChecks.value[i])) {
            errorMsg = errorMsg + formvalidChecks.error[i] + '\n\n';
            cansubmit = false;
          }
          break;
        case 'less':
        case 'lt':
          if (!(fieldvalue < formvalidChecks.value[i])) {
            errorMsg = errorMsg + formvalidChecks.error[i] + '\n\n';
            cansubmit = false;
          }
          break;
        case 'notequal':
          if (!(fieldvalue != formvalidChecks.value[i])) {
            errorMsg = errorMsg + formvalidChecks.error[i] + '\n\n';
            cansubmit = false;
          }
          break;
      }
    }
  }
  if (cansubmit == false) {
    alert(errorMsg);
  }
  return cansubmit;
}
function getParm(parm) {
    // returns value of parm from string
    var passed = location.search.substring(1);
    var startPos = passed.indexOf(parm + "=");

    if (startPos > -1) {
        startPos = startPos + parm.length + 1;
        var endPos = passed.indexOf("&",startPos);
        if (endPos == -1)
            endPos = passed.length;
        return unescape(passed.substring(startPos,endPos));
    }
    return false;
}
