var LiveValidate={init:function(formId,fields,model){var form=$(formId);if(form){var optionDefaults={rule:/.+/,message:'Invalid.',live:false,filter:false,trim:true};if($defined(model)){fieldlist=fields;fields={};fields[model]=fieldlist;}
$each(fields,function(fieldlist,model){$each(fieldlist,function(options,field){options=$merge(optionDefaults,options);if(options.input==undefined){options.input=CakeForm.fieldId(model,field);}
if($type(options.rule)=='string'){var extract=options.rule.match(/^\/(.*)\/([a-z])*$/i);var flags=extract.pop();var regex=extract.pop();if(flags!=undefined){options.rule=new RegExp(regex,flags);}else{options.rule=new RegExp(regex);}}
var element=form.getElement('#'+options.input);if(element){if(options.live){this.initValidateLive(model,field,element,options);}else{this.initValidate(model,field,element,options);}}},this);},this);}},initValidate:function(model,field,element,options){var filter=this._filter(element,options);var ob=new Observer(element,filter);var validate=function(){ob.clear();var value=element.get('value');if(value.match(options.rule)){CakeForm.clearError(element);return true;}else{CakeForm.clearError(element);CakeForm.setFieldError(element,options.message);return false;}};element.store('validate',validate);element.addEvent('blur',validate);},initValidateLive:function(model,field,element,options){var filter=this._filter(element,options);var ob=new Observer(element,filter);var live=this._live.bind(this);var validate=function(){ob.clear();var value=element.get('value');if(value.match(options.rule)){CakeForm.clearError(element);live(model,field,element,options.live);}else{CakeForm.clearError(element);CakeForm.setFieldError(element,options.message);}
return false;}
element.store('validate',validate);element.addEvent('blur',validate);},_filter:function(element,options){var filter=(function(value){if(options.trim){this._trim(element);}
if(value.match(options.rule)){CakeForm.clearError(element);}else if(options.filter){CakeForm.clearError(element);var message=$type(options.filter)=='string'?options.filter:options.message;CakeForm.setFieldError(element,message);}}).bind(this);return filter;},_live:function(model,field,element,invalidMessage){var overlayStyles={'text-align':'right','font-weight':'bold','background-image':'none','left':'-15px'};var value=element.get('value');var verified=element.retrieve('verified')||{};var current=$defined(verified[value])?verified[value]:null;if(current!==null){if(current){CakeForm.setFieldError(element,current);}
return;}
if(Browser.Engine.trident){var ieStyles={'top':'-5px'}
$extend(overlayStyles,ieStyles);}
var overlayContent={html:'<p>Checking... <img src="/img/icons/spinner.gif" /></p>'}
var overlay=AffUI.overlay(element.getParent(),overlayStyles,overlayContent);var handleError=function(){overlay.dispose();}
var validationRequest=new Request.JSON({url:'/static/validation.php',type:'post',onSuccess:function(response){try{verified[value]=false;if(response.valid=='fail'){var message=$defined(response.message)?response.message:invalidMessage;verified[value]=message;CakeForm.setFieldError(element,message);}
element.store('verified',verified);}catch(e){};var onlive=element.retrieve('onlive');if(onlive){onlive(response);}
overlay.dispose();},onFailure:handleError,onException:handleError});var data="validate="+model+"."+field+"&"+model+"["+field+"]="+value;validationRequest.send(data);},_trim:function(element){var value=element.get('value');if(value!=''){var filtered=value.replace(/^\s+|\s+$/gi,'');element.set('value',filtered);}}};
/* Thu, 6 Oct 2011 22:05:21 GMT js/libs/live-validate.js */
