var ERR_NAN = ' Not a Number!!';
var ERR_EMPTY = ' this field cannot be empty!';
var ERR_SLASH = ' paths must end with a slash!';
var ERR_PWMATCH = ' passwords do NOT match!';
var ERR_COUNT = ' field must be %min to %max characters long';
var ERR_NUMERIC = ' Please enter a number from ';
var ERR_NONE = '';

function form_submit(fields) {
  submit = true;
  for (i=0; i<fields.length; i++) {
    if (document.getElementById(fields[i])) {
      obj = document.getElementById(fields[i]);
      if (obj.onblur) {
        //this function should be IN this file! (Usually the validate function)
        func=obj.onblur;
        s=func.apply(obj);
        submit=(s==false)?false:submit;
      }
    }
  }
  return submit;
}

function validate(obj, required, numeric, min, max, regexp, regexp_error, regexp_error,equals,equals_error) {
  //alert("validate: "+obj+'=>'+str+'=>'+required+', '+numeric+', '+min+', '+max+', '+regexp+', '+regexp_error);
  if (!document.getElementById) { return false; }
  str = '';
  if (obj.text){str=obj.text;}
  else if (obj.value){str=obj.value;}
  var err_id = 'err_' + obj.id;
//alert(err_id);
  if (required==true && str.length==0) { 
    document.getElementById(err_id).innerHTML=ERR_EMPTY;
    return false;
  }
  if (numeric==true) {
    error=validate_numeric(str, min, max);
    if (error!='') { 
      document.getElementById(err_id).innerHTML=error;
      return false;
    }
  }
  else {
    error=validate_text(str, min, max, regexp, regexp_error, regexp_error,equals,equals_error);
    if (error!='') {
      document.getElementById(err_id).innerHTML=error;
      return false;
    }
  }
  document.getElementById(err_id).innerHTML=ERR_NONE;
  return true;
}

function validate_by_id(id, required, numeric, min, max, regexp, regexp_error,equals,equals_error) {
  if (!document.getElementById) { return false; }
  obj=document.getElementById(id);
  str = '';
  if (obj.text){str=obj.text;}
  else if (obj.value){str=obj.value;}
  err_id='err_'+id;
  if (required==true && str.length==0) { 
    document.getElementById(err_id).innerHTML=ERR_EMPTY;
    return false;
  }
  if (numeric==true) {
    error=validate_numeric(str, min, max);
    if (error!='') { 
      document.getElementById(err_id).innerHTML=error;
      return false;
    }
  }
  else {
    error=validate_text(str, min, max, regexp, regexp_error,equals,equals_error);
    if (error!='') {
      document.getElementById(err_id).innerHTML=error;
      return false;
    }
  }
  document.getElementById(err_id).innerHTML=ERR_NONE;
  return true;
}

function validate_size(value, min, max) {
  if (value.length<min || value.length>max) {
	error = ERR_COUNT.replace("%min",min);
	return error.replace("%max",max);
  }
  return '';
}

function validate_numeric(value, min, max) {
  if (isNaN(value)){return ERR_NAN;}
  if (value<min || value>max) {
	error = ERR_NUMERIC.replace("%min",min);
	return ERR_NUMERIC + ' ' + min + ' - ' + max;
  }
  return '';
}

function validate_regexp(value, regexp, error) {
//  if (value.search(regexp)<0) { return error; }
//  return '';
  var re = new RegExp(regexp);
  if (value.match(re)) {
    return '';
  } else {
    return error;
  }
}

function validate_equality(value, equals, error) {
  if (equals!='') {
    var check = document.getElementById(equals).value;
    return (check==value)?'':error;
  }
  return '';
}

function validate_text(value, min, max, regexp, error, equals, equals_error) {
  var temp=validate_size(value,min,max);
  if (temp=='') {
    temp=validate_regexp(value,regexp,error);
    if (temp!=''){return temp;}
	else {
      return validate_equality(value,equals,equals_error);
	}
  }
  else {
      return temp;
  }
  return '';
}