var Validators=function()
{this.validators=new Array();this.results=new Array();this.add=function(vid,params)
{params.cids=params.cids.split(',');params.groups=params.groups.split(',');this.validators[vid]=params;};this.remove=function(vid)
{delete this.validators[vid];};this.clean=function(group)
{if(group==undefined)group='default';this.results=new Array();for(vid in this.validators)
{if(typeof this.validators[vid]!='object'||!document.getElementById(vid))continue;if(group==''||this._contains(this.validators[vid].groups,group))
{document.getElementById(vid).style.display='none';if(this.validators[vid].unaction)eval(this.validators[vid].unaction);}}};this.isValid=function(groups,isAll)
{if(groups==undefined)groups='default';groups=groups.split(',');if(isAll==undefined)isAll=true;this.results=new Array();this._sortValidators();if(!isAll)
{for(groupIdx in groups)
{group=groups[groupIdx].replace(/^\s+|\s+$/g,'');for(vid in this.validators)
{if(typeof this.validators[vid]!='object')continue;if((group==''||this._contains(this.validators[vid].groups,group))&&!this.validate(vid))return false;}}
return true;}
var flag=true;for(groupIdx in groups)
{group=groups[groupIdx].replace(/^\s+|\s+$/g,'');for(vid in this.validators)
{if(typeof this.validators[vid]!='object')continue;if((group==''||this._contains(this.validators[vid].groups,group))&&!this.validate(vid))flag=false;}}
return flag;};this.validate=function(vid)
{if(!document.getElementById(vid))return true;var val=this.validators[vid];if(typeof val!='object')return true;var flag=true,valtype=val.type.toLowerCase();switch(valtype)
{case'required':case'email':case'regularexpression':switch(val.mode.toUpperCase())
{case'AND':for(cid in val.cids)flag&=this.check(val.cids[cid],valtype,vid);break;case'OR':flag=false;for(cid in val.cids)flag|=this.check(val.cids[cid],valtype,vid);break;case'XOR':var n=0;for(cid in val.cids)if(this.check(val.cids[cid],valtype,vid))n++;flag=(n==1);break;}
break;case'compare':var ctrl1,ctrl2;switch(val.mode.toUpperCase())
{case'AND':for(cid1 in val.cids)
{ctrl1=document.getElementById(val.cids[cid1]);if(!ctrl1)continue;for(cid2 in val.cids)
{ctrl2=document.getElementById(val.cids[cid2]);if(!ctrl2)continue;flag&=(ctrl1.value==ctrl2.value);}}
break;case'OR':flag=false;for(cid1 in val.cids)
{ctrl1=document.getElementById(val.cids[cid1]);if(!ctrl1)continue;for(cid2 in val.cids)
{ctrl2=document.getElementById(val.cids[cid2]);if(!ctrl2)continue;flag|=(ctrl1.id!=ctrl2.id&&ctrl1.value==ctrl2.value);if(flag)break;}
if(flag)break;}
break;case'XOR':var n=0;for(cid1 in val.cids)
{ctrl1=document.getElementById(val.cids[cid1]);if(!ctrl1)continue;for(cid2 in val.cids)
{ctrl2=document.getElementById(val.cids[cid2]);if(!ctrl2)continue;if(ctrl1.id!=ctrl2.id&&ctrl1.value==ctrl2.value)n++;}}
flag=(n==1);break;}
for(id in val.cids)
{var cid=document.getElementById(val.cids[id]);if(!cid)break;this.results[cid.id]&=flag;}
break;}
if(!flag)document.getElementById(vid).innerHTML=val.message;else document.getElementById(vid).innerHTML='';if(!flag&&val.action!='')eval(val.action);if(flag&&val.unaction!='')eval(val.unaction);return flag;};this.check=function(cid,type,vid)
{var cid=document.getElementById(cid);if(!cid)return true;var flag=true;switch(type.toLowerCase())
{case'required':switch(cid.type)
{case'text':case'password':case'file':case'textarea':flag=!(!cid.value);break;case'select-one':case'select-multiple':flag=(cid.value!='');break;case'checkbox':case'radio':flag=cid.checked;break;default:var elements=ajax.getFormElements(cid);if(elements.length==0)flag=true;else
{flag=false;for(var i=0;i<elements.length;i++)
if(elements[i].type=='radio'||elements[i].type=='checkbox')flag|=elements[i].checked;}
break;}
break;case'email':if(cid.value)
{var re=/^[0-9a-z_\.\-]+@[0-9a-z_^\.\-]+\.[a-z]{2,6}$/i;flag=re.test(cid.value);}
else flag=true;break;case'regularexpression':if(cid.value.length>0)
{if(this.validators[vid].exparam.expression.charAt(0)=='i')eval("var re = "+this.validators[vid].exparam.expression.substr(1)+"; flag = !re.test(cid.value);");else eval("var re = "+this.validators[vid].exparam.expression+"; flag = re.test(cid.value);");}
else flag=true;break;}
if(this.results[cid.id]==undefined)this.results[cid.id]=true;this.results[cid.id]&=flag;return flag;};this._contains=function(arr,el)
{for(var i=0;i<arr.length;i++)if(arr[i]===el)return true;return false;};this._sortValidators=function()
{var keys=vals=new Array(),bind=this;for(var i in this.validators)keys[keys.length]=i;keys.sort(function(a,b){return((typeof(bind.validators[a].order)=='undefined')?0:bind.validators[a].order)-((typeof(bind.validators[b].order)=='undefined')?0:bind.validators[b].order);});for(var i=0;i<keys.length;i++)vals[keys[i]]=this.validators[keys[i]];this.validators=vals;}};var validators=new Validators();

