/*
* Really easy field validation with Prototype
* http://tetlaw.id.au/view/javascript/really-easy-field-validation
* Andrew Tetlaw
* Version 1.5.4.1 (2007-01-05)
* 
* Copyright (c) 2007 Andrew Tetlaw
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
* 
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
* 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
* 
*/
var Validator=Class.create();Validator.prototype={initialize:function(c,b,d,a){if(typeof d=="function"){this.options=$H(a);this._test=d;}else{this.options=$H(d);this._test=function(){return true;};}this.error=b||"Validation failed.";this.className=c;},test:function(a,b){return(this._test(a,b)&&this.options.all(function(c){return Validator.methods[c.key]?Validator.methods[c.key](a,b,c.value):true;}));}};Validator.methods={pattern:function(a,c,b){return Validation.get("IsEmpty").test(a)||b.test(a);},minLength:function(a,c,b){return a.length>=b;},maxLength:function(a,c,b){return a.length<=b;},min:function(a,c,b){return a>=parseFloat(b);},max:function(a,c,b){return a<=parseFloat(b);},notOneOf:function(a,c,b){return $A(b).all(function(d){return a!=d;});},oneOf:function(a,c,b){return $A(b).any(function(d){return a==d;});},is:function(a,c,b){return a==b;},isNot:function(a,c,b){return a!=b;},equalToField:function(a,c,b){return a==$F(b);},notEqualToField:function(a,c,b){return a!=$F(b);},include:function(a,c,b){return $A(b).all(function(d){return Validation.get(d).test(a,c);});}};var Validation=Class.create();Validation.prototype={initialize:function(c,a){this.options=Object.extend({onSubmit:true,stopOnFirst:false,immediate:false,focusOnError:true,useTitles:false,onFormValidate:function(e,f){},onElementValidate:function(e,f){}},a||{});this.form=$(c);if(this.options.onSubmit){Event.observe(this.form,"submit",this.onSubmit.bind(this),false);}if(this.options.immediate){var b=this.options.useTitles;var d=this.options.onElementValidate;Form.getElements(this.form).each(function(e){Event.observe(e,"blur",function(f){Validation.validate(Event.element(f),{useTitle:b,onElementValidate:d});});});}},onSubmit:function(a){if(!this.validate()){Event.stop(a);}},validate:function(){var a=false;var b=this.options.useTitles;var c=this.options.onElementValidate;if(this.options.stopOnFirst){a=Form.getElements(this.form).all(function(d){return Validation.validate(d,{useTitle:b,onElementValidate:c});});}else{a=Form.getElements(this.form).collect(function(d){return Validation.validate(d,{useTitle:b,onElementValidate:c});}).all();}if(!a&&this.options.focusOnError){Form.getElements(this.form).findAll(function(d){return $(d).hasClassName("formFieldError");}).first().focus();}this.options.onFormValidate(a,this.form);return a;},reset:function(){Form.getElements(this.form).each(Validation.reset);},ajaxValidate:function(a){var b=$F(a);var c={asynchronous:true,method:"post",cancelableRequest:"formValidation",parameters:{fieldId:a,fieldValue:b},onSuccess:function(g){try{if(g.status!=0){var d=g.responseText.evalJSON(true);if(d.valid){$("advice-"+a).addClassName("adviceFieldValid");$("advice-"+a).removeClassName("adviceFieldError");}else{$("advice-"+a).removeClassName("adviceFieldValid");$("advice-"+a).addClassName("adviceFieldError");$("advice-"+a).update(d.message);}}}catch(f){Philotki.debug("OnSuccess Error",f);}}};new Ajax.Request("/action/validate",c);}};Object.extend(Validation,{validate:function(c,a){a=Object.extend({useTitle:false,onElementValidate:function(d,e){}},a||{});c=$(c);var b=c.classNames();return result=b.all(function(d){if(d.startsWith("validate-")){var e=Validation.test(d,c,a.useTitle);a.onElementValidate(e,c);return e;}else{return true;}});},test:function(b,h,i){var j=Validation.get(b);var a="__advice"+b.camelize();try{if(Validation.isVisible(h)&&!j.test($F(h),h)){var d=Validation.getAdvice(b,h);var f=i?((h&&h.title)?h.title:j.error):j.error;if(d==null){d='<div class="validation-advice" id="advice-'+b+"-"+Validation.getElmID(h)+'" style="display:none">'+f+"</div>";switch(h.type.toLowerCase()){case"checkbox":case"radio":var c=h.parentNode;if(c){new Insertion.Bottom(c,d);}else{new Insertion.After(h,d);}break;default:new Insertion.After(h,d);}d=Validation.getAdvice(b,h);}else{d.update(f);}d.removeClassName("adviceFieldValid");d.addClassName("adviceFieldError");d.show();if(typeof Effect=="undefined"){}else{}h[a]=true;h.removeClassName("formFieldValid");h.addClassName("formFieldError");return false;}else{var d=Validation.getAdvice(b,h);if(d!=null){d.update();d.removeClassName("adviceFieldError");d.addClassName("adviceFieldValid");}h[a]="";h.removeClassName("formFieldError");h.addClassName("formFieldValid");return true;}}catch(g){throw (g);}},isVisible:function(a){while(a.tagName!="BODY"){if(!$(a).visible()){return false;}a=a.parentNode;}return true;},getAdvice:function(a,b){return $("advice-"+a+"-"+Validation.getElmID(b))||$("advice-"+Validation.getElmID(b));},getElmID:function(a){return a.id?a.id:a.name;},reset:function(b){b=$(b);var a=b.classNames();a.each(function(d){var e="__advice"+d.camelize();if(b[e]){var c=Validation.getAdvice(d,b);c.hide();b[e]="";}b.removeClassName("formFieldError");b.removeClassName("formFieldValid");});},add:function(d,c,e,b){var a={};a[d]=new Validator(d,c,e,b);Object.extend(Validation.methods,a);},addAllThese:function(a){var b={};$A(a).each(function(c){b[c[0]]=new Validator(c[0],c[1],c[2],(c.length>3?c[3]:{}));});Object.extend(Validation.methods,b);},get:function(a){return Validation.methods[a]?Validation.methods[a]:Validation.methods._LikeNoIDIEverSaw_;},methods:{_LikeNoIDIEverSaw_:new Validator("_LikeNoIDIEverSaw_","",{})}});Validation.add("IsEmpty","",function(a){return((a==null)||(a.length==0));});Validation.addAllThese([["validate-required",Lang.validateRequired,function(a){return !Validation.get("IsEmpty").test(a);}],["validate-number",Lang.validateNumberOnly,function(a){return Validation.get("IsEmpty").test(a)||(!isNaN(a)&&!/^\s+$/.test(a));}],["validate-digits",Lang.validateDigitsOnly,function(a){return Validation.get("IsEmpty").test(a)||!/[^\d]/.test(a);}],["validate-alpha",Lang.validateAlfa,function(a){return Validation.get("IsEmpty").test(a)||/^[a-zA-Z]+$/.test(a);}],["validate-alphanum",Lang.validateAlfanumeric,function(a){return Validation.get("IsEmpty").test(a)||!/\W/.test(a);}],["validate-date",Lang.validateDate,function(a){var b=new Date(a);return Validation.get("IsEmpty").test(a)||!isNaN(b);}],["validate-email",Lang.validateEmail,function(a){return Validation.get("IsEmpty").test(a)||/^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$/i.test(a);}],["validate-url",Lang.validateUrl,function(a){return Validation.get("IsEmpty").test(a)||/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(a);}],["validate-date-au",Lang.validateDateAU,function(a){if(Validation.get("IsEmpty").test(a)){return true;}var b=/^(\d{2})\/(\d{2})\/(\d{4})$/;if(!b.test(a)){return false;}var c=new Date(a.replace(b,"$2/$1/$3"));return(parseInt(RegExp.$2,10)==(1+c.getMonth()))&&(parseInt(RegExp.$1,10)==c.getDate())&&(parseInt(RegExp.$3,10)==c.getFullYear());}],["validate-currency-dollar",Lang.validateCurrency,function(a){return Validation.get("IsEmpty").test(a)||/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(a);}],["validate-selection",Lang.validateSelection,function(a,b){return b.options?b.selectedIndex>0:!Validation.get("IsEmpty").test(a);}],["validate-one-required",Lang.validateOneRequired,function(a,d){var c=d.parentNode;var b=c.getElementsByTagName("INPUT");return $A(b).any(function(e){return $F(e);});}],["validate-min-length-5",Lang.validateMinLength.replace(/#{value}/g,5),{minLength:5}],["validate-min-length-6",Lang.validateMinLength.replace(/#{value}/g,6),{minLength:6}],["validate-length-5",Lang.validateMaxLength.replace(/#{value}/g,5),{maxLength:5}],["validate-length-6",Lang.validateMaxLength.replace(/#{value}/g,6),{maxLength:6}],["validate-length-10",Lang.validateMaxLength.replace(/#{value}/g,10),{maxLength:10}],["validate-length-50",Lang.validateMaxLength.replace(/#{value}/g,50),{maxLength:50}],["validate-length-100",Lang.validateMaxLength.replace(/#{value}/g,100),{maxLength:100}],["validate-length-2000",Lang.validateMaxLength.replace(/#{value}/g,2000),{maxLength:2000}]]);