function alpha(val) {expr=/^[a-z ._-]+$/i; return (expr.test(val));}
function alphanum(val) {expr=/^[a-z0-9 ._-]+$/i; return (expr.test(val));}
function name(val) {expr=/^[a-z -'.]+$/i; return (expr.test(val));}
function digit(val) {expr=/^[-+]?[0-9]+$/; return (expr.test(val));}
function nodigit(val) {expr=/^[^0-9]+$/; return (expr.test(val));}
function number(val) {expr=/^[-+]?\d*\.?\d+$/; return (expr.test(val));}
function email(val) {expr=/^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i; return (expr.test(val));}
function emails(val) {expr=/^([a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}(\s*,\s*|\s+|$))+$/i; return (expr.test(val));}
function phone(val) {expr=/^[\d\s ().-]+$/; return (expr.test(val));}
function url(val) {expr=/^(http|https|ftp)\:\/\/[a-z0-9\-\.]+\.[a-z]{2,3}(:[a-z0-9]*)?\/?([a-z0-9\-\._\?\,\'\/\\\+&amp;%\$#\=~])*$/i; return (expr.test(val));}
function ssn(val) {expr=/^\d{3}-\d{2}-\d{4}$/; return (expr.test(val));}
function checkbox(val,m) {return (val==m[1]);}
function ccheckbox(val,m) {return ( (val.indexOf(m[1])>=0) );}
function maxlen(val,m) {return val.length<=m[1];}
function minlen(val,m) {return val.length>=m[1];}
function nmaxlen(val,m) {if(val.length>0) {return val.length<=m[1];} else {return true;}}
function nminlen(val,m) {if(val.length>0) {return val.length>=m[1];} else {return true;}}
function okhandler(val,m) {this[m[1]](m[2]);return true;}
function okwhandler(val,m) {
if(_ok_lock==true) {
_ok_fkt[0]=val;_ok_fkt[1]=m;
_ok_lock=false;setTimeout("okwhandler('cache,0')", m[1]);}
else {_ok_lock=true;this[_ok_fkt[1][2]](_ok_fkt[1][3]);}return true;}



var _error_mask=new Array();
var _error_mask_cnt=0;
var _ok_lock=true;
var _ok_fkt=new Array();
function _chk()
{
/*www1|alpha|minlen,2|maxlen,5*/
var up_mode='';
var i = 0;
var erg=true;
var ed=new Array();
var fk=new Array();
var k=new Array();
if(arguments.length>0) {up_mode=arguments[0];}
/*alert(up_mode);*/
ed=up_mode.split("|");
if(ed[0].match(","))
{fk=ed[0].split(",");}
else {fk[0]=ed[0];fk[1]=ed[0];}

i=1;
while(i<ed.length && erg!=false) {
if(ed[i].match(",")) {k=ed[i].split(",");}
else {k[0]=ed[i];}
erg=_alpha(fk,k);
i++;
}
return erg;
}

function _alpha(field,fkt)
{
var ff="";
/*#.is(':checked')*/
var a=$("label[for="+field[0]+"]");
var c=$("input[id="+field[1]+"]");

/*var d=$("input[id="+field[1]+"]").attr('checked');
.attr('checked', true/false);*/
/*checkbox handling  - todo put it in an loop */
if(fkt[0]=="checkbox" || fkt[0]=="ccheckbox") {if(c.is(':checked')) {ff=":checked";} else {ff=":unchecked";}}
else {
ff=c.val();}

if(field.length>=3) {
var b=$("input[id="+field[2]+"]");
if(fkt[0]=="checkbox" || fkt[0]=="ccheckbox") {if(b.is(':checked')) {ff=ff+":checked";} else {ff=ff+":unchecked";}}
else {
ff=ff+b.val();}
}

if(field.length>=4) {
var d=$("input[id="+field[3]+"]");
if(fkt[0]=="checkbox" || fkt[0]=="ccheckbox") {if(d.is(':checked')) {ff=ff+":checked";} else {ff=ff+":unchecked";}}
else {
ff=ff+d.val();}
}


var erg=false;

if(fkt.length==1)
{
erg=this[fkt[0]](ff);
}
else {
erg=this[fkt[0]](ff,fkt);/*more param start at:1 */
}

if(erg==true) {
a.removeClass("neutral").removeClass("error").addClass("success");
}
else {
a.removeClass("neutral").removeClass("success").addClass("error");
}

return erg;
}


function _errorhandler(num)
{
var erg=true;
var ptr,i=0;
if(_error_mask.length<=0) {return erg;}

while(erg==true && i<_error_mask.length)
{
ptr=_error_mask[i++];
if(ptr[1]==num) {
erg=_chk(ptr[0]);}
}

return erg;
}

function _register_error(val,num)
{
var f=new Array();
f[0]=val;f[1]=num;
_error_mask[_error_mask_cnt++]=f;
}

