if(typeof(Meetup.UI)=="undefined"){Meetup.UI={}}Meetup.UI.ValidatorRules={notEmpty:function(el){if(el.value.replace(/^\s+|\s+$/g,"")==""){return Meetup.Copy.rule_notEmpty}else{return false}},isEmail:function(el){if(!el.value.match(/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/)){return Meetup.Copy.rule_isEmail}else{return false}},isChecked:function(el){return(!el.checked)?Meetup.Copy.rule_isChecked:false},isMinLength:function(el,min){if(el.value.replace(/^\s+|\s+$/g,"").length<min){return Meetup.Copy.rule_isMinLength.replace("__MIN__",min)}else{return false}},isMaxLength:function(el,max){if(el.value.replace(/^\s+|\s+$/g,"").length>max){return Meetup.Copy.rule_isMaxLength.replace("__MAX__",max)}else{return false}}};Meetup.UI.Validator=function(formEl,oCfg){bindMethods(this);this.init(formEl,oCfg);this._cfg={inlineError:true};if(oCfg){this._cfg=oCfg}};Meetup.UI.Validator.prototype={init:function(formEl,oCfg){this._cfg=oCfg;this.formEl=formEl;this.activeRules=[];connect(this.formEl,"onsubmit",this.evaluateRules)},addRule:function(fn){this.activeRules.push({fn:fn,args:Array.prototype.slice.call(arguments,1)})},evaluateRules:function(e){addElementClass(this.formEl,"validating");for(el in this.errorEls){removeElement(this.errorEls[el])}this.errorEls={};forEach(this.activeRules,function(r){var el=r.args[0];if(isUndefinedOrNull(el)){return}var name=getNodeAttribute(el,"name");var hasErrorMsg=r.fn.apply(this,r.args);if(el.type=="checkbox"||el.type=="radio"){el=el.parentNode}if(hasErrorMsg&&this._cfg.inlineError){e.stop();if(this.errorEls[name]===undefined){var dim=getElementDimensions(el);this.errorEls[name]=DIV({"class":"inlineErrorMsgs",style:"width: "+dim.w+"px;"});insertSiblingNodesAfter(el,this.errorEls[name]);var errorMsg=DIV({"class":"inlineErrorMsg"},hasErrorMsg);appendChildNodes(this.errorEls[name],errorMsg);el.style.backgroundColor="pink"}}else{if(hasErrorMsg){e.stop();var container=getFirstParentByTagAndClassName(el,null,"element");this.errorEls[name]=P({"class":"error"});insertSiblingNodesAfter(el,this.errorEls[name]);appendChildNodes(this.errorEls[name],hasErrorMsg);removeElementClass(container,"complete");addElementClass(container,"error")}else{el.style.backgroundColor="white"}}},this)},formEl:null,inputEls:null,activeRules:null,errorEls:null};Meetup.Copy.rule_notEmpty="Can't be empty.";Meetup.Copy.rule_isChecked="This checkbox is required.";Meetup.Copy.rule_isEmail="Doesn't look like an email address.";Meetup.Copy.rule_isMinLength="Should be at least __MIN__ characters.";Meetup.Copy.rule_isMaxLength="Should be fewer than __MAX__ characters.";