var v_did_inline={};var v_event;function ValidateError(B,A){this.errors=B;this.extra=A;this.as_string=eob_as_string;this.as_array=eob_as_array;this.as_hash=eob_as_hash;this.first_field=eob_first_field}function v_error(A){alert(A);return 1}function v_clean_val_hash(val_hash){if(typeof (val_hash)!="object"){return{error:v_error("Validation must be an associative array (hash)")}}var order=[];for(var key in val_hash){if(key=="extend"){continue}if(key.match(/^general\s/)){var new_key=key.replace(/^general\s+/,"group ");val_hash[new_key]=val_hash[key];delete (val_hash[key]);key=new_key}order.push(key)}order=order.sort();var f=val_hash["group set_hook"];if(f&&typeof (f)=="string"){eval("val_hash['group set_hook'] = "+f)}f=val_hash["group clear_hook"];if(f&&typeof (f)=="string"){eval("val_hash['group clear_hook'] = "+f)}if(f=val_hash["group validate_if"]){if(typeof (f)=="string"||!f.length){f=[f]}var deps=v_clean_cond(f)}var fields=val_hash["group fields"];if(fields){if(typeof (fields)!="object"||!fields.length){return{error:v_error("'group fields' must be a non-empty array")}}}else{fields=[];var _order=(val_hash["group order"])?val_hash["group order"]:order;if(typeof (_order)!="object"||!_order.length){return{error:v_error("'group order' must be a non-empty array")}}for(var i=0;i<_order.length;i++){var field=_order[i];if(field.match(/^group\s/)){continue}var field_val=val_hash[field];if(!field_val){if(field=="OR"){field_val="OR"}else{return{error:v_error("No element found in group for "+field)}}}if(typeof (field_val)=="object"&&!field_val.field){field_val.field=field}fields.push(field_val)}}var found={};for(var i=0;i<fields.length;i++){var field_val=fields[i];var field=field_val.field;if(!field){return{error:v_error("Missing field key in validation")}}found[field]=1}for(var i=0;i<order.length;i++){var field=order[i];if(found[field]||field.match(/^group\s/)){continue}var field_val=val_hash[field];if(typeof (field_val)!="object"||field_val.length){return{error:v_error("Found a non-hash value on field "+field)}}if(!field_val.field){field_val.field=field}fields.push(field_val)}for(var i=0;i<fields.length;i++){v_clean_field_val(fields[i])}val_hash["group was_checked"]={};val_hash["group was_valid"]={};val_hash["group had_error"]={};return{fields:fields,order:order}}function v_clean_field_val(field_val,N_level){if(!field_val.order){field_val.order=v_field_order(field_val)}if(!field_val.deps){field_val.deps={}}for(var i=0;i<field_val.order.length;i++){var k=field_val.order[i];var v=field_val[k];if(typeof (v)=="undefined"){return{error:v_error("No matching validation found on field "+field+" for type "+k)}}if(k.match(/^(min|max)_in_set(\d*)$/)){if(typeof (v)=="string"){if(!(m=v.match(/^\s*(\d+)(?:\s*[oO][fF])?\s+(.+)\s*$/))){return{error:v_error("Invalid "+k+" check "+v)}}field_val[k]=m[2].split(/[\s,]+/);field_val[k].unshift(m[1])}for(var j=1;j<field_val[k].length;j++){if(field_val[k][j]!=field_val.field){field_val.deps[field_val[k][j]]=1}}}else{if(k.match(/^(enum|compare)\d*$/)){if(typeof (v)=="string"){field_val[k]=v.split(/\s*\|\|\s*/)}}else{if(k.match(/^match\d*$/)){if(typeof (v)=="string"){v=field_val[k]=v.split(/\s*\|\|\s*/)}for(var j=0;j<v.length;j++){if(typeof (v[j])!="string"||v[j]=="!"){continue}var m=v[j].match(/^\s*(!\s*|)m([^\s\w])(.*)\2([eigsmx]*)\s*$/);if(!m){return{error:v_error("Not sure how to parse that match ("+v[j]+")")}}var not=m[1];var pat=m[3];var opt=m[4];if(opt.indexOf("e")!=-1){return{error:v_error("The e option cannot be used on field "+field_val.field+", test "+k)}}opt=opt.replace(/[sg]/g,"");v[j]=new RegExp(pat,opt);if(not){v.splice(j,0,"!")}}}else{if(k.match(/^custom_js\d*$/)){if(typeof (v)=="string"&&v.match(/^\s*function\s*\(/)){eval("field_val[k] = "+v)}}else{if(k.match(/^(validate|required)_if\d*$/)){if(typeof (v)=="string"||!v.length){v=field_val[k]=[v]}var deps=v_clean_cond(v,N_level);for(var k in deps){field_val.deps[k]=2}}}}}}}}function v_clean_cond(ifs,N_level,ifs_match){if(typeof (ifs)!="object"){v_error("Need reference v_clean_cond "+typeof (ifs));return[]}if(!N_level){N_level=0}if(++N_level>10){v_error("Max dependency level reached "+N_level);return[]}var deps={};var m;for(var i=0;i<ifs.length;i++){if(typeof (ifs[i])=="string"){if(ifs[i].match(/^\s*function\s*\(/)){eval("ifs[i] = "+ifs[i])}else{if(m=ifs[i].match(/^(.+?)\s+was_valid$/)){ifs[i]={field:m[1],was_valid:1}}else{if(m=ifs[i].match(/^(.+?)\s+had_error$/)){ifs[i]={field:m[1],had_error:1}}else{if(m=ifs[i].match(/^(.+?)\s+was_checked$/)){ifs[i]={field:m[1],was_checked:1}}else{if(m=ifs[i].match(/^(\s*!\s*)(.+)\s*$/)){ifs[i]={field:m[2],max_in_set:[0,m[2]]}}else{if(ifs[i]!="OR"){ifs[i]={field:ifs[i],required:1}}}}}}}}if(typeof (ifs[i])!="object"){continue}if(!ifs[i].field){v_error("Missing field key during validate_if");return[]}deps[ifs[i].field]=2;v_clean_field_val(ifs[i],N_level);for(var k in ifs[i].deps){deps[k]=2}}return deps}function v_validate(C,I){var O=v_clean_val_hash(I);if(O.error){return }var Q=O.order;var J=O.fields;var H=[];var L=[];var T=I["group title"];var M=I["group validate_if"];if(M&&!v_check_conditional(C,M,I)){return }var B=1;var G=[];var D;var S={};for(var P=0;P<J.length;P++){var F=J[P];if(typeof (F)!="object"&&F=="OR"){if(B){P++}B=1;continue}B=1;var R=F.field;if(!S[R]){S[R]=1;I["group was_checked"][R]=1;I["group was_valid"][R]=1;I["group had_error"][R]=0}var E=v_validate_buddy(C,R,F,I);if(E.length){I["group had_error"][R]=1;I["group was_valid"][R]=0;if(P<=J.length&&typeof (J[P+1]!="object")&&J[P+1]=="OR"){D=E}else{if(D){E=D}for(var N=0;N<E.length;N++){G.push(E[N])}D=""}}else{D=""}}if(G.length){if(T){H.push(T)}for(var P=0;P<G.length;P++){H.push(G[P])}}var K;for(var P=0;P<Q.length;P++){var A=Q[P];if(!(K=A.match(/^group\s+(\w+)$/))){continue}if(G.length==0||K[1].match(/^(field|order|title|validate_if)$/)){continue}L[K[1]]=I[A]}if(H.length){return new ValidateError(H,L)}return }function v_check_conditional(D,H,G,B){var F=1;for(var A=0;A<H.length;A++){if(typeof (H[A])=="function"){if(!F){break}if(!H[A]({form:D})){F=0}}else{if(typeof (H[A])=="string"){if(H[A]!="OR"){v_error("Found non-OR string");return }if(F){A++}F=1;continue}else{if(!F){break}var E=H[A].field;E=E.replace(/\$(\d+)/g,function(I,J){return(typeof (B)!="object"||typeof (B[J])=="undefined")?"":B[J]});var C=v_validate_buddy(D,E,H[A],G);if(C.length){F=0}}}}return F}function v_filter_types(D,C){var A=[];var E=new RegExp("^"+D+"_?\\d*$");for(var B=0;B<C.length;B++){if(C[B].match(E)){A.push(C[B])}}return A}function v_add_error(G,E,C,F,A,D){G.push([E,C,F,A]);if(F.clear_on_error){var B=D[E];if(B&&B.type&&B.type.match(/(hidden|password|text|textarea|submit)/)){B.value=""}}return G}function v_field_order(C){var B=[];for(var A in C){if(!A.match(/^(extend|field|name|required|was_valid|was_checked|had_error)$/)&&!A.match(/_error$/)){B.push(A)}}return B.sort()}function v_validate_buddy(form,field,field_val,val_hash,ifs_match){var errors=[];if(!form.elements||field_val.exclude_js){return[]}var types=field_val.order||v_field_order(field_val);var m;if(m=field.match(/^(!\s*|)m([^\s\w])(.*)\2([eigsmx]*)$/)){var not=m[1];var pat=m[3];var opt=m[4];if(opt.indexOf("e")!=-1){v_error("The e option cannot be used on field "+field);return[]}opt=opt.replace(/[sg]/g,"");var reg=new RegExp(pat,opt);for(var i=0;i<form.elements.length;i++){var _field=form.elements[i].name;if(!_field){continue}if((not&&!(m=_field.match(reg)))||(m=_field.match(reg))){var err=v_validate_buddy(form,_field,field_val,val_hash,m);for(var j=0;j<err.length;j++){errors.push(err[j])}}}return errors}if(field_val.was_valid&&!val_hash["group was_valid"][field]){return v_add_error(errors,field,"was_valid",field_val,ifs_match,form)}if(field_val.had_error&&!val_hash["group had_error"][field]){return v_add_error(errors,field,"had_error",field_val,ifs_match,form)}if(field_val.was_checked&&!val_hash["group was_checked"][field]){return v_add_error(errors,field,"was_checked",field_val,ifs_match,form)}var _value=v_get_form_value(form[field]);var modified=0;if(typeof (field_val["default"])!="undefined"&&(typeof (_value)=="undefined"||(typeof (_value)=="object"&&_value.length==0)||!_value.length)){_value=field_val["default"];modified=1}var values=(typeof (_value)=="object")?_value:[_value];var n_values=(typeof (_value)=="undefined")?0:values.length;for(var i=0;i<values.length;i++){if(typeof (values[i])=="undefined"){continue}var orig=values[i];if(!field_val.do_not_trim){values[i]=values[i].replace(/^\s+/,"").replace(/\s+$/,"")}if(field_val.trim_control_chars){values[i]=values[i].replace(/\t/g," ").replace(/[\x00-\x1F]/g,"")}if(field_val.to_upper_case){values[i]=values[i].toUpperCase()}if(field_val.to_lower_case){values[i]=values[i].toLowerCase()}var tests=v_filter_types("replace",types);for(var k=0;k<tests.length;k++){var ref=field_val[tests[k]];ref=(typeof (ref)=="object")?ref:ref.split(/\s*\|\|\s*/);for(var j=0;j<ref.length;j++){if(!(m=ref[j].match(/^\s*s([^\s\w])(.+)\1(.*)\1([eigmx]*)$/))){return v_error("Not sure how to parse that replace "+ref[j])}var pat=m[2];var swap=m[3];var opt=m[4];if(opt.indexOf("e")!=-1){v_error("The e option cannot be used on field "+field+", replace "+tests[i]);return[]}var regexp=new RegExp(pat,opt);values[i]=values[i].replace(regexp,swap)}}if(orig!=values[i]){modified=1}}if(modified){var el=form[field];if(el){v_set_form_value(el,values)}}var needs_val=0;var tests=v_filter_types("validate_if",types);for(var i=0;i<tests.length;i++){var ifs=field_val[tests[i]];var ret=v_check_conditional(form,ifs,val_hash,ifs_match);if(ret){needs_val++}}if(tests.length&&!needs_val){if(field_val.vif_disable&&val_hash["group was_valid"][field]){v_set_disable(form[field],true)}val_hash["group was_valid"][field]=0;return[]}if(field_val.vif_disable){v_set_disable(form[field],false)}var is_required=field_val.required?"required":"";if(!is_required){var tests=v_filter_types("required_if",types);for(var i=0;i<tests.length;i++){var ifs=field_val[tests[i]];if(!v_check_conditional(form,ifs,val_hash,ifs_match)){continue}is_required=tests[i];break}}if(is_required){var found;for(var i=0;i<values.length;i++){if(values[i].length){found=1;break}}if(!found){return v_add_error(errors,field,is_required,field_val,ifs_match,form)}}if(field_val.min_values&&n_values<field_val.min_values){return v_add_error(errors,field,"min_values",field_val,ifs_match,form)}if(typeof (field_val.max_values)=="undefined"){field_val.max_values=1}if(field_val.max_values&&n_values>field_val.max_values){return v_add_error(errors,field,"max_values",field_val,ifs_match,form)}for(var h=0;h<2;h++){var minmax=(h==0)?"min":"max";var tests=v_filter_types(minmax+"_in_set",types);for(var i=0;i<tests.length;i++){var a=field_val[tests[i]];var n=a[0];for(var k=1;k<a.length;k++){var _value=v_get_form_value(form[a[k]]);var _values;if(typeof (_value)=="undefined"){continue}_values=(typeof (_value)=="object")?_value:[_value];for(var l=0;l<_values.length;l++){var _value=_values[l];if(typeof (_value)!="undefined"&&_value.length){n--}}}if((minmax=="min"&&n>0)||(minmax=="max"&&n<0)){v_add_error(errors,field,tests[i],field_val,ifs_match,form);return errors}}}for(var i=0;i<types.length;i++){var type=types[i];var _fv=field_val[type];for(var n=0;n<values.length;n++){var value=values[n];if(type.match(/^enum\d*$/)){var is_found=0;for(var j=0;j<_fv.length;j++){if(value==_fv[j]){is_found=1;break}}if(!is_found){v_add_error(errors,field,type,field_val,ifs_match,form)}}if(type.match(/^equals\d*$/)){var not=_fv.match(/^!\s*/);if(not){_fv=_fv.substring(not[0].length)}var success=0;if(m=_fv.match(/^([\"\'])(.*)\1$/)){if(value==m[2]){success=1}}else{var value2=v_get_form_value(form[_fv]);if(typeof (value2)=="undefined"){value2=""}if(value==value2){success=1}}if(not&&success||!not&&!success){v_add_error(errors,field,type,field_val,ifs_match,form)}}if(type=="min_len"&&value.length<_fv){v_add_error(errors,field,"min_len",field_val,ifs_match,form)}if(type=="max_len"&&value.length>_fv){v_add_error(errors,field,"max_len",field_val,ifs_match,form)}if(type.match(/^match\d*$/)){for(var j=0;j<_fv.length;j++){if(typeof (_fv[j])=="string"){continue}var not=(j>0&&typeof (_fv[j-1])=="string"&&_fv[j-1]=="!")?1:0;if((not&&value.match(_fv[j]))||(!not&&!value.match(_fv[j]))){v_add_error(errors,field,type,field_val,ifs_match,form)}}}if(type.match(/^compare\d*$/)){for(var j=0;j<_fv.length;j++){var comp=_fv[j];if(!comp){continue}var hold=false;var copy=value;if(m=comp.match(/^\s*(>|<|[><!=]=)\s*([\d\.\-]+)\s*$/)){if(!copy){copy=0}copy*=1;if(m[1]==">"){hold=(copy>m[2])}else{if(m[1]=="<"){hold=(copy<m[2])}else{if(m[1]==">="){hold=(copy>=m[2])}else{if(m[1]=="<="){hold=(copy<=m[2])}else{if(m[1]=="!="){hold=(copy!=m[2])}else{if(m[1]=="=="){hold=(copy==m[2])}}}}}}}else{if(m=comp.match(/^\s*(eq|ne|gt|ge|lt|le)\s+(.+?)\s*$/)){if(m[2].match(/^\"/)){m[2]=m[2].replace(/^"(.*)"$/,"$1")}else{if(m[2].match(/^\'/)){m[2]=m[2].replace(/^'(.*)'$/,"$1")}}if(m[1]=="gt"){hold=(copy>m[2])}else{if(m[1]=="lt"){hold=(copy<m[2])}else{if(m[1]=="ge"){hold=(copy>=m[2])}else{if(m[1]=="le"){hold=(copy<=m[2])}else{if(m[1]=="ne"){hold=(copy!=m[2])}else{if(m[1]=="eq"){hold=(copy==m[2])}}}}}}}else{v_error('Not sure how to compare "'+comp+'"');return errors}}if(!hold){v_add_error(errors,field,type,field_val,ifs_match,form)}}}if(type.match(/^type\d*$/)){if(!v_check_type(value,_fv,field,form)){v_add_error(errors,field,type,field_val,ifs_match,form)}}}if(type.match(/^custom_js\d*$/)){var value=values.length==1?values[0]:values;if(typeof (_fv)=="function"?!_fv({value:value,field_val:field_val,form:form,key:field_val.field,errors:errors,event:v_event}):!eval(_fv)){v_add_error(errors,field,type,field_val,ifs_match,form)}}}return errors}function v_check_type(K,G,J,A){var B;G=G.toUpperCase();if(G=="EMAIL"){if(!K){return 0}if(!(B=K.match(/^(.+)@(.+?)$/))){return 0}if(B[1].length>60){return 0}if(B[2].length>100){return 0}if(!v_check_type(B[2],"DOMAIN")&&!v_check_type(B[2],"IP")){return 0}if(!v_check_type(B[1],"LOCAL_PART")){return 0}}else{if(G=="LOCAL_PART"){if(typeof (K)=="undefined"||!K.length){return 0}if(typeof (v_local_part)!="undefined"){return(K.match(v_local_part)?1:0)}if(K.match(/[^a-z0-9.\-!&+]/)){return 0}if(K.match(/^[.\-]/)){return 0}if(K.match(/[.\-&]$/)){return 0}if(K.match(/(\.-|-\.|\.\.)/)){return 0}}else{if(G=="IP"){if(!K){return 0}var I=K.split(/\./);if(I.length!=4){return 0}for(var E=0;E<4;E++){if(typeof (I[E])=="undefined"||I[E].match(/\D/)||I[E]>255){return 0}}}else{if(G=="DOMAIN"){if(!K){return 0}if(!K.match(/^[a-z0-9.-]{4,255}$/)){return 0}if(K.match(/^[.\-]/)){return 0}if(K.match(/(\.-|-\.|\.\.)/)){return 0}if(!(B=K.match(/^(.+\.)([a-z]{2,10})$/))){return 0}if(!B[1].match(/^([a-z0-9\-]{1,62}\.)+$/)){return 0}}else{if(G=="URL"){if(!K){return 0}if(!(B=K.match(/^https?:\/\/([^\/]+)/i))){return 0}K=K.substring(B[0].length);var D=B[1].replace(/:\d+$/).replace(/\.$/);if(!v_check_type(D,"DOMAIN")&&!v_check_type(B[1],"IP")){return 0}if(K&&!v_check_type(K,"URI")){return 0}}else{if(G=="URI"){if(!K){return 0}if(K.match(/\s/)){return 0}}else{if(G=="CC"){if(!K){return 0}if(K.match(/[^\d\- ]/)){return 0}K=K.replace(/[\- ]/g,"");if(K.length>16||K.length<13){return 0}var F=0;var C=0;for(var E=K.length-1;E>=0;E--){if(++C>2){C=1}var H=K.charAt(E)*C;if(H>9){H-=9}F+=H}if(F%10){return 0}}}}}}}}return 1}function v_set_form_value(D,A,E){if(typeof (D)=="string"){D=E[D]}if(typeof (A)!="object"){A=[A]}if(!D){return }var C=(D.type&&!(""+D).match(/HTMLCollection/))?D.type.toLowerCase():"";if(D.length&&C!="select-one"){for(var B=0;B<D.length;B++){if(!D[B]||!D[B].type){continue}v_set_form_value(D[B],(D[B].type.match(/^(checkbox|radio)$/)?A:B<A.length?[A[B]]:[""]))}return }if(!C){return }if(C.match(/(hidden|password|text|textarea|submit)/)){return D.value=A[0]}if(C.indexOf("select")!=-1){if(D.length){for(var B=0;B<D.length;B++){D[B].selected=(D[B].value==A[0])?true:false}}return }if(C=="checkbox"||C=="radio"){var F;for(var B=0;B<A.length;B++){if(A[B]==D.value){F=1}}return D.checked=F?true:false}if(C=="file"){return }alert("Unknown form type for "+D.name+": "+C);return }function v_set_disable(D,B){if(!D){return }var C=D.type?D.type.toLowerCase():"";if(D.length&&C!="select-one"){for(var A=0;A<D.length;A++){D[i].disabled=B}}else{D.disabled=B}}function v_get_form_value(D,E){if(typeof (D)=="string"){D=E[D]}if(!D){return""}var C=(D.type&&!(""+D).match(/HTMLCollection/))?D.type.toLowerCase():"";if(D.length&&C!="select-one"){var A=[];for(var B=0;B<D.length;B++){if(C.indexOf("multiple")!=-1){if(D[B].selected){A.push(D[B].value)}}else{if(D[B].checked){A.push(v_get_form_value(D[B]))}}}if(A.length==0){return""}if(A.length==1){return A[0]}return A}if(!C){return""}if(C.match(/(hidden|password|text|textarea|submit)/)){return D.value}if(C.indexOf("select")!=-1){if(!D.length){return""}if(D.selectedIndex==-1){return""}return D[D.selectedIndex].value}if(C=="checkbox"||C=="radio"){return D.checked?D.value:""}if(C=="file"){return D.value}alert("Unknown form type for "+D.name+": "+C);return""}function v_find_val(){var B=arguments[0];for(var A=1;A<arguments.length;A++){if(typeof (arguments[A])=="string"){return arguments[A]}if(typeof (arguments[A])=="undefined"){continue}if(typeof (arguments[A][B])!="undefined"){return arguments[A][B]}}return""}function v_get_error_text(H,E,B){var M=H[0];var J=H[1];var O=H[2];var C=H[3];var F;var L="";if(F=J.match(/^(.+?)(\d+)$/)){J=F[1];L=F[2]}var K=J.toLowerCase();var N=O[J+L];if(O.delegate_error){M=O.delegate_error;M=M.replace(/\$(\d+)/g,function(P,Q){if(typeof (C)!="object"||typeof (C[Q])=="undefined"){return""}return C[Q]})}var A=O.name||"The field "+M;A=A.replace(/\$(\d+)/g,function(P,Q){if(typeof (C)!="object"||typeof (C[Q])=="undefined"){return""}return C[Q]});var D=v_find_val(J+"_error",E,B);if(!D){if(L.length){D=O[J+L+"_error"]}if(!D){D=O[J+"_error"]}}if(D){D=D.replace(/\$(\d+)/g,function(P,Q){if(typeof (C)!="object"||typeof (C[Q])=="undefined"){return""}return C[Q]});D=D.replace(/\$field/g,M);D=D.replace(/\$name/g,A);if(N&&typeof (N)=="string"){D=D.replace(/\$value/g,N)}return D}if(J=="equals"){var G=O["equals"+L];var I=O["equals"+L+"_name"];if(!I){I="the field "+G}I=I.replace(/\$(\d+)/g,function(P,Q){return(typeof (C)!="object"||typeof (C[Q])=="undefined")?"":C[Q]});return A+" did not equal "+I+"."}if(J=="min_in_set"){return"Not enough fields were chosen from the set ("+N[0]+" of "+N.join(", ").replace(/^\d+,\s*/,"")+")"}if(J=="max_in_set"){return"Too many fields were chosen from the set ("+N[0]+" of "+N.join(", ").replace(/^\d+,\s*/,"")+")"}return A+((J=="required"||J=="required_if")?" is required.":J=="match"?" contains invalid characters.":J=="compare"?" did not fit comparison.":J=="custom_js"?" did not match custom_js"+L+" check.":J=="enum"?" is not in the given list.":J=="min_values"?" had less than "+N+" value"+(N==1?"":"s")+".":J=="max_values"?" had more than "+N+" value"+(N==1?"":"s")+".":J=="min_len"?" was less than "+N+" character"+(N==1?"":"s")+".":J=="max_len"?" was more than "+N+" character"+(N==1?"":"s")+".":J=="type"?" did not match type "+N+".":J=="had_error"?" had no error (but should have had).":J=="was_valid"?" was not valid.":J=="was_checked"?" was not checked.":alert("Missing error on field "+M+" for type "+J+L))}function eob_as_string(A){var B=v_find_val("as_string_join",A,this.extra,"\n");var D=v_find_val("as_string_header",A,this.extra,"");var C=v_find_val("as_string_footer",A,this.extra,"");return D+this.as_array(A).join(B)+C}function eob_as_array(A){var F=this.errors;var E=v_find_val("as_array_title",A,this.extra,"Please correct the following items:");var H;if(E){H=1}else{for(var B=0;B<F.length;B++){if(typeof (F[B])=="string"){H=1}}}var D=v_find_val("as_array_prefix",A,this.extra,(H?"  ":""));var C=[];if(E&&E.length){C.push(E)}var I={};for(var B=0;B<F.length;B++){if(typeof (F[B])=="string"){C.push(F[B]);I={}}else{var G=v_get_error_text(F[B],A,this.extra);if(I[G]){continue}I[G]=1;C.push(D+G)}}return C}function eob_as_hash(B){var J=this.errors;var N=v_find_val("as_hash_suffix",B,this.extra,"_error");var C=v_find_val("as_hash_join",B,this.extra,"<br/>");var O={};var F={};for(var D=0;D<J.length;D++){if(typeof (J[D])=="string"){continue}if(!J[D].length){continue}var H=J[D][0];var G=J[D][1];var M=J[D][2];var A=J[D][3];if(!H){return alert("Missing field name")}if(M.delegate_error){H=M.delegate_error;H=H.replace(/\$(\d+)/g,function(P,Q){if(typeof (A)!="object"||typeof (A[Q])=="undefined"){return""}return A[Q]})}var L=v_get_error_text(J[D],B,this.extra);if(!O[H]){O[H]={}}if(O[H][L]){continue}O[H][L]=1;H+=N;if(!F[H]){F[H]=[]}F[H].push(L)}if(C){var E=v_find_val("as_hash_header",B,this.extra,"");var I=v_find_val("as_hash_footer",B,this.extra,"");for(var K in F){if(K=="extend"){continue}F[K]=E+F[K].join(C)+I}}return F}function eob_first_field(){for(var A=0;A<this.errors.length;A++){if(typeof (this.errors[A])!="object"){continue}if(!this.errors[A][0]){continue}return this.errors[A][0]}return }document.validate=function(B,F){F=document.load_val_hash(B,F);if(typeof (F)=="undefined"){return true}if(v_event!="load"){for(var A in v_did_inline){if(A=="extend"){continue}v_inline_error_clear(A,F,B)}}var E=v_validate(B,F);if(!E){return true}var D=E.first_field();if(D&&B[D]){if(B[D].focus){B[D].focus()}else{if(B[D].length&&B[D][0].focus){B[D][0].focus()}}}if(!F["group no_inline"]){var C=E.as_hash({as_hash_suffix:""});for(var A in C){if(A=="extend"){continue}v_inline_error_set(A,C[A],F,B)}}if(v_event=="load"){return false}else{if(!F["group no_confirm"]){return confirm(E.as_string())?false:true}else{if(!F["group no_alert"]){alert(E.as_string());return false}else{if(!F["group no_inline"]){return false}else{return true}}}}};document.load_val_hash=function(B,H){if(!B){return alert("Missing form or form name")}if(typeof (B)=="string"){if(!document[B]){return alert("No form by name "+B)}B=document[B]}if(B.val_hash){return B.val_hash}if(typeof (H)!="object"){if(typeof (H)=="function"){H=H(formname)}else{if(typeof (H)=="undefined"){var C;if(typeof (document.validation)!="undefined"){H=document.validation}else{if(C=document.getElementById("validation")){H=C.innerHTML.replace(/&lt;/ig,"<").replace(/&gt;/ig,">").replace(/&amp;/ig,"&")}else{var D=[];var G="";var I=B.getAttribute("validation");if(I){if(E=I.match(/^( +)/)){I=I.replace(new RegExp("^"+E[1],"g"),"")}I=I.replace(/\s*$/,"\n");G+=I}var E;for(var F=0;F<B.elements.length;F++){var A=B.elements[F].name;var I=B.elements[F].getAttribute("validation");if(!A||!I){continue}I=I.replace(/\s*$/,"\n").replace(/^(.)/mg," $1").replace(/^( *[^\s&*\[\{])/,"\n$1");G+=A+":"+I;D.push(A)}if(G){H=G+"group order: ["+D.join(", ")+"]\n"}}}}}if(typeof (H)=="string"){if(!document.yaml_load){return }document.hide_yaml_errors=(!document.show_yaml_errors);if(location.search&&location.search.indexOf("show_yaml_errors")!=-1){document.hide_yaml_errors=0}H=document.yaml_load(H);if(document.yaml_error_occured){return }H=H[0]}}B.val_hash=H;return B.val_hash};document.check_form=function(A,I){if(!A){return alert("Missing form or form name")}if(typeof (A)=="string"){if(!document[A]){return alert("No form by name "+A)}A=document[A]}I=document.load_val_hash(A,I);if(!I){return }var G=I["group onevent"]||{submit:1};if(typeof (G)=="string"){G=G.split(/\s*,\s*/)}if(typeof (G.length)!="undefined"){var K={};for(var E=0;E<G.length;E++){K[G[E]]=1}G=K}I["group onevent"]=G;if(G.change||G.blur){var H=v_clean_val_hash(I);if(H.error){return H.error}var F={};_add=function(M,L){if(!F[M]){F[M]=[]}F[M].push(L)};for(var E=0;E<H.fields.length;E++){_add(H.fields[E].field,H.fields[E]);for(var D in H.fields[E].deps){if(D!=H.fields[E].field){_add(D,H.fields[E])}}}for(var C in F){if(C=="extend"){continue}var B=A[C];if(!B){return v_error("No form element by the name "+C)}v_el_attach(B,F[C],A,I)}}if(G.submit){var J=A.onsubmit||function(){return true};A.onsubmit=function(L){v_event="submit";return document.validate(this)&&J(L,this)}}if(G.load){v_event="load";document.validate(A)}};function v_el_attach(D,H,F,G){if(!D.type){if(D.length){for(var B=0;B<D.length;B++){v_el_attach(D[B],H,F,G)}}return }var A=G["group onevent"];var E=function(){v_event="change";var O=[];var N={};var J={};for(var M=0;M<H.length;M++){var P=H[M];var K=P.field;if(!J[K]){J[K]=1;G["group was_checked"][K]=1;G["group was_valid"][K]=1;G["group had_error"][K]=0}var I=v_validate_buddy(F,K,P,G);if(I.length){G["group had_error"][K]=1;G["group was_valid"][K]=0;for(var L=0;L<I.length;L++){O.push(I[L])}}N[P.delegate_error||P.field]=I.length?0:1}for(var K in N){if(N[K]){v_inline_error_clear(K,G,F)}}if(!O.length){return }O=new ValidateError(O,{});O=O.as_hash({as_hash_suffix:"",first_only:(G["group first_only"]?1:0)});for(var K in O){if(K=="extend"){continue}v_inline_error_set(K,O[K],G,F)}};if(A.blur){D.onblur=E}if(A.change&&!(""+D).match(/HTMLCollection/)){var C=D.type?D.type.toLowerCase():"";if(C.match(/(password|text|textarea)/)){D.onkeyup=E}else{if(C.match(/(checkbox|radio)/)){D.onclick=E}else{if(C.match(/(select)/)){D.onchange=E}}}}}function v_inline_error_clear(A,F,D){delete (v_did_inline[A]);var E=F["group clear_hook"]||document.validate_clear_hook;var C=F["group was_valid"]||{};if(typeof (E)=="function"){if(E({key:A,val_hash:F,form:D,was_valid:C[A],event:v_event})){return 1}}var B=document.getElementById(A+v_find_val("as_hash_suffix",F,"_error"));if(B){B.innerHTML=""}}function v_inline_error_set(A,F,E,C){v_did_inline[A]=1;var D=E["group set_hook"]||document.validate_set_hook;if(typeof (D)=="function"){if(D({key:A,value:F,val_hash:E,form:C,event:v_event})){return 1}}var B=document.getElementById(A+v_find_val("as_hash_suffix",E,"_error"));if(B){B.innerHTML=F}};