
 function check_field (s,o)
 // s = input string, o = obj
 { if (!val_fld (s, o))
  { o.focus();
    return false;
  }
  return true;
 }

 function val_fld_email (email)
 { if (email.length <= 0)
    return true;
   var splitted = email.match("^(.+)@(.+)$");
   if(splitted == null) return false;
   if(splitted[1] != null )
   { var regexp_user=/^\"?[\w-_\.]*\"?$/;
     if(splitted[1].match(regexp_user) == null) return false;
   }
   if(splitted[2] != null)
   { var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
     if(splitted[2].match(regexp_domain) == null) 
     { var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
       if (splitted[2].match(regexp_ip) == null) return false;
     }
     return true;
   }
   return false;
 }

function find_trans(obj_name)
{ for (i=0; i < trans.length; i++)
  { t = trans[i].split('|')
    if (t[0] == obj_name)
     return (t[1])
  }
  return obj_name
}

function val_fld(cmd_str,obj,err_str)
{ var epos = cmd_str.search("=");
  var command  = "";
  var cmdvalue = "";
  if(epos >= 0)
  { command  = cmd_str.substring(0,epos);
    cmdvalue = cmd_str.substr(epos+1);
  }
  else
   command = cmd_str;

  switch(command)
  { case "req":
    case "required":
     if(eval(obj.value.length) == 0)
     { if(!err_str || err_str.length ==0)
        err_str = find_trans(obj.name) + " : "+check_fld_err[0]
       alert(err_str);
       return false;
     }
     break;

    case "equals":
    case "eq":
     o=attach(cmdvalue)
     if(obj.value != o.value)
     { if(!err_str || err_str.length ==0)
        err_str = find_trans(obj.name) + " => " + find_trans(o.name) + " : "+check_fld_err[1]
       alert(err_str);
       return false;
     }
     break;

    case "maxlength":
    case "maxlen":
     if(eval(obj.value.length) >  eval(cmdvalue))
     { if(!err_str || err_str.length ==0)
        err_str = find_trans(obj.name) + " : "+check_fld_err[4]+" "+cmdvalue+" "+check_fld_err[2]
       alert(err_str + "\n["+check_fld_err[5]+" = " + obj.value.length + " ]");
       return false;
     }
     break;

    case "minlength":
    case "minlen":
     if(eval(obj.value.length) <  eval(cmdvalue))
     { if(!err_str || err_str.length ==0)
        err_str = find_trans(obj.name) + " : "+check_fld_err[3]+" " + cmdvalue + " "+check_fld_err[2]
       alert(err_str + "\n["+check_fld_err[5]+" = " + obj.value.length + " ]");
       return false;
     }
     break;

    case "alnum":
    case "alphanumeric":
     var charpos = obj.value.search("[^A-Za-z0-9 ,+-.:/?&=]");
     if(obj.value.length > 0 &&  charpos >= 0)
     { if(!err_str || err_str.length ==0)
        err_str = find_trans(obj.name)+": "+check_fld_err[6]
       alert(err_str + "\n ["+check_fld_err[8]+" " + eval(charpos+1)+"]");
       return false;
     }
     break;

    case "num":
    case "numeric":
     var charpos = obj.value.search("[^0-9 ]");
     if(obj.value.length > 0 &&  charpos >= 0)
     { if(!err_str || err_str.length ==0)
        err_str = find_trans(obj.name)+": "+check_fld_err[7]
       alert(err_str + "\n ["+check_fld_err[8]+" " + eval(charpos+1)+"]");
       return false;
     }
     break;

    case "alphabetic":
    case "alpha":
     var charpos = obj.value.search("[^A-Za-z ]");
     if(obj.value.length > 0 &&  charpos >= 0)
     { if(!err_str || err_str.length ==0)
        err_str = find_trans(obj.name)+": "+check_fld_err[9]
       alert(err_str + "\n ["+check_fld_err[8]+" " + eval(charpos+1)+"]");
       return false;
     }
     break;

    case "alnumhyphen":
     var charpos = obj.value.search("[^A-Za-z0-9\-_]");
     if(obj.value.length > 0 &&  charpos >= 0)
     { if(!err_str || err_str.length ==0) 
        err_str = find_trans(obj.name)+": "+check_fld_err[10]+" A-Z,a-z,0-9,-, _";
       alert(err_str + "\n ["+check_fld_err[8]+" " + eval(charpos+1)+"]");
       return false;
     }
     break;

    case "email":
     if(!val_fld_email(obj.value))
     { if(!err_str || err_str.length ==0)
        err_str = find_trans(obj.name)+": "+check_fld_err[11]
       alert(err_str);
       return false;
     }
     break; 

    case "lt":
    case "lessthan":
     if(isNaN(obj.value))
     { alert(find_trans(obj.name)+": "+check_fld_err[12]+" "+check_fld_err[13]);
       return false;
     }
     if(eval(obj.value) >=  eval(cmdvalue))
     { if(!err_str || err_str.length ==0)
        err_str = find_trans(obj.name) + " : "+check_fld_err[12]+" "+check_fld_err[13]+" "+check_fld_err[14]+" "+ cmdvalue;
       alert(err_str);
       return false;
     }
     break;

    case "gt":
    case "greaterthan":
     if(isNaN(obj.value))
     { alert(find_trans(obj.name)+": "+check_fld_err[12]+" "+check_fld_err[13]);
       return false;
     }
     if(eval(obj.value) <=  eval(cmdvalue))
     { if(!err_str || err_str.length ==0)
        err_str = find_trans(obj.name) + " : "+check_fld_err[12]+" "+check_fld_err[13]+" "+check_fld_err[15]+" "+cmdvalue;
       alert(err_str);
       return false;
     }
     break;

    case "regexp":
     if(obj.value.length > 0)
      if(!obj.value.match(cmdvalue))
      { if(!err_str || err_str.length ==0)
         err_str = find_trans(obj.name)+": "+check_fld_err[16]
        alert(err_str);
        return false;
      }
     break;

    case "dontselect":
     if(obj.selectedIndex == null)
     { alert("BUG: dontselect command for non-select Item");
       return false;
     }
     if(obj.selectedIndex == eval(cmdvalue))
     { if(!err_str || err_str.length ==0)
        err_str = find_trans(obj.name)+": "+check_fld_err[17]
       alert(err_str);
       return false;
     }
     break;
   }
   return true;
}
