Ext.namespace('Ext.ux','Ext.ux.plugins');Ext.ux.plugins.RemoteValidator={init:function(field){var isValid=field.isValid;var validate=field.validate;Ext.apply(field,{remoteValid:true,isValid:function(preventMark){if(this.disabled){return true;}
return isValid.call(this,preventMark)&&this.remoteValid;},validate:function(){var clientValid=validate.call(this);if(!this.disabled&&!clientValid){return false;}
if(this.disabled||(clientValid&&this.remoteValid)){this.clearInvalid();return true;}
if(!this.remoteValid){this.markInvalid(this.reason);return false;}
return false;},validateRemote:function(){this.rvOptions.params=this.rvOptions.params||{};this.rvOptions.params.field=this.name;this.rvOptions.params.value=this.getValue();Ext.Ajax.request(this.rvOptions);},rvSuccess:function(response,options){var o;try{o=Ext.decode(response.responseText);}
catch(e){throw this.cannotDecodeText;}
if('object'!==typeof o){throw this.notObjectText;}
if(true!==o.success){throw this.serverErrorText+': '+o.error;}
var names=this.rvOptions.paramNames;this.remoteValid=true===o[names.valid];this.reason=o[names.reason];this.validate();},rvFailure:function(response,options){throw this.requestFailText},filterRemoteValidation:function(e){if(!e.isNavKeyPress()){this.remoteValidationTask.delay(this.remoteValidationDelay);}}});Ext.applyIf(field,{remoteValidationDelay:500,reason:'Deze waarde mag niet leeg zijn.',cannotDecodeText:'Kan json object niet decoden',notObjectText:'Server response is geen object',serverErrorText:'Server fout',requestFailText:'Server request mislukt'});field.on({render:{single:true,scope:field,fn:function(){this.remoteValidationTask=new Ext.util.DelayedTask(this.validateRemote,this);this.el.on('keyup',this.filterRemoteValidation,this);}},blur:{single:false,scope:field,fn:function(){this.validateRemote();this.remoteValidationTask.cancel();}}});field.rvOptions=field.rvOptions||{};Ext.applyIf(field.rvOptions,{method:'post',scope:field,success:field.rvSuccess,failure:field.rvFailure,paramNames:{valid:'valid',reason:'reason'}});}};