var Validator=Class.create();Validator.prototype={initialize:function(e,d,f,b){if(typeof f=="function"){this.options=$H(b);this._test=f;}else{this.options=$H(f);this._test=function(){return true;};}this.error=d||"Validation failed.";this.className=e;},test:function(b,d){return(this._test(b,d)&&this.options.all(function(e){return Validator.methods[e.key]?Validator.methods[e.key](b,d,e.value):true;
}));}};Validator.methods={pattern:function(b,e,d){return Validation.get("IsEmpty").test(b)||d.test(b);},minLength:function(b,e,d){return b.length>=d;},maxLength:function(b,e,d){return b.length<=d;},min:function(b,e,d){return b>=parseFloat(d);},max:function(b,e,d){return b<=parseFloat(d);},notOneOf:function(b,e,d){return $A(d).all(function(f){return b!=f;
});},oneOf:function(b,e,d){return $A(d).any(function(f){return b==f;});},is:function(b,e,d){return b==d;},isNot:function(b,e,d){return b!=d;},equalToField:function(b,e,d){return b==$F(d);},notEqualToField:function(b,e,d){return b!=$F(d);},include:function(b,e,d){return $A(d).all(function(f){return Validation.get(f).test(b,e);
});}};var Validation=Class.create();Validation.prototype={initialize:function(e,b){this.form=$(e);if(!this.form){return;}this.options=Object.extend({onSubmit:true,stopOnFirst:false,immediate:false,focusOnError:true,useTitles:false,onFormValidate:function(g,h){},onElementValidate:function(g,h){}},b||{});
if(this.options.onSubmit){Event.observe(this.form,"submit",this.onSubmit.bind(this),false);}if(this.options.immediate){var d=this.options.useTitles;var f=this.options.onElementValidate;Form.getElements(this.form).each(function(g){Event.observe(g,"blur",function(h){Validation.validate(Event.element(h),{useTitle:d,onElementValidate:f});
});});}},onSubmit:function(b){if(!this.validate()){Event.stop(b);}},validate:function(){var b=false;var d=this.options.useTitles;var g=this.options.onElementValidate;try{if(this.options.stopOnFirst){b=Form.getElements(this.form).all(function(e){return Validation.validate(e,{useTitle:d,onElementValidate:g});
});}else{b=Form.getElements(this.form).collect(function(e){return Validation.validate(e,{useTitle:d,onElementValidate:g});}).all();}}catch(f){}if(!b&&this.options.focusOnError){try{Form.getElements(this.form).findAll(function(e){return $(e).hasClassName("validation-failed");}).first().focus();}catch(f){}}this.options.onFormValidate(b,this.form);
return b;},reset:function(){Form.getElements(this.form).each(Validation.reset);}};Object.extend(Validation,{validate:function(e,b){b=Object.extend({useTitle:false,onElementValidate:function(f,g){}},b||{});e=$(e);var d=$w(e.className);return result=d.all(function(f){var g=Validation.test(f,e,b.useTitle);
b.onElementValidate(g,e);return g;});},insertAdvice:function(f,d){var b=$(f).up(".field-row");if(b){Element.insert(b,{after:d});}else{if(f.advaiceContainer&&$(f.advaiceContainer)){$(f.advaiceContainer).update(d);}else{switch(f.type.toLowerCase()){case"checkbox":case"radio":var e=f.parentNode;if(e){Element.insert(e,{"bottom":d});
}else{Element.insert(f,{"after":d});}break;default:Element.insert(f,{"after":d});}}}},showAdvice:function(e,d,b){if(!e.advices){e.advices=new Hash();}else{e.advices.each(function(f){this.hideAdvice(e,f.value);}.bind(this));}e.advices.set(b,d);if(typeof Effect=="undefined"){d.style.display="block";}else{if(!d._adviceAbsolutize){new Effect.Appear(d,{duration:1});
}else{Position.absolutize(d);d.show();d.setStyle({"top":d._adviceTop,"left":d._adviceLeft,"width":d._adviceWidth,"z-index":1000});d.addClassName("advice-absolute");}}},hideAdvice:function(d,b){if(b!=null){b.hide();}},updateCallback:function(elm,status){if(typeof elm.callbackFunction!="undefined"){eval(elm.callbackFunction+"('"+elm.id+"','"+status+"')");
}},ajaxError:function(f,e){var d="validate-ajax";var b=Validation.getAdvice(d,f);if(b==null){b=this.createAdvice(d,f,false,e);}this.showAdvice(f,b,"validate-ajax");this.updateCallback(f,"failed");f.addClassName("validation-failed");f.addClassName("validate-ajax");},test:function(f,n,h){var b=Validation.get(f);
var l="__advice"+f.camelize();try{if(Validation.isVisible(n)&&!b.test($F(n),n)){var d=Validation.getAdvice(f,n);if(d==null){d=this.createAdvice(f,n,h);}this.showAdvice(n,d,f);this.updateCallback(n,"failed");n[l]=1;if(!n.advaiceContainer){n.removeClassName("validation-passed");n.addClassName("validation-failed");
}return false;}else{var d=Validation.getAdvice(f,n);this.hideAdvice(n,d);this.updateCallback(n,"passed");n[l]="";n.removeClassName("validation-failed");n.addClassName("validation-passed");return true;}}catch(g){throw (g);}},isVisible:function(b){while(b.tagName!="BODY"){if(!$(b).visible()){return false;
}b=b.parentNode;}return true;},getAdvice:function(b,d){return $("advice-"+b+"-"+Validation.getElmID(d))||$("advice-"+Validation.getElmID(d));},createAdvice:function(d,n,o,f){var p=Validation.get(d);var h=o?((n&&n.title)?n.title:p.error):p.error;if(f){h=f;}try{if(Translator){h=Translator.translate(h);
}}catch(l){}advice='<div class="validation-advice" id="advice-'+d+"-"+Validation.getElmID(n)+'" style="display:none">'+h+"</div>";Validation.insertAdvice(n,advice);advice=Validation.getAdvice(d,n);if($(n).hasClassName("absolute-advice")){var b=$(n).getDimensions();var g=Position.cumulativeOffset(n);advice._adviceTop=(g[1]+b.height)+"px";
advice._adviceLeft=(g[0])+"px";advice._adviceWidth=(b.width)+"px";advice._adviceAbsolutize=true;}return advice;},getElmID:function(b){return b.id?b.id:b.name;},reset:function(d){d=$(d);var b=$w(d.className);b.each(function(f){var g="__advice"+f.camelize();if(d[g]){var e=Validation.getAdvice(f,d);e.hide();
d[g]="";}d.removeClassName("validation-failed");d.removeClassName("validation-passed");});},add:function(f,e,g,d){var b={};b[f]=new Validator(f,e,g,d);Object.extend(Validation.methods,b);},addAllThese:function(b){var d={};$A(b).each(function(e){d[e[0]]=new Validator(e[0],e[1],e[2],(e.length>3?e[3]:{}));
});Object.extend(Validation.methods,d);},get:function(b){return Validation.methods[b]?Validation.methods[b]:Validation.methods["_LikeNoIDIEverSaw_"];},methods:{"_LikeNoIDIEverSaw_":new Validator("_LikeNoIDIEverSaw_","",{})}});Validation.add("IsEmpty","",function(b){return(b==""||(b==null)||(b.length==0)||/^\s+$/.test(b));
});Validation.addAllThese([["validate-select","Please select an option.",function(b){return((b!="none")&&(b!=null)&&(b.length!=0));}],["required-entry","This is a required field.",function(b){return !Validation.get("IsEmpty").test(b);}],["validate-number","Please enter a valid number in this field.",function(b){return Validation.get("IsEmpty").test(b)||(!isNaN(parseNumber(b))&&!/^\s+$/.test(parseNumber(b)));
}],["validate-digits","Please use numbers only in this field. please avoid spaces or other characters such as dots or commas.",function(b){return Validation.get("IsEmpty").test(b)||!/[^\d]/.test(b);}],["validate-alpha","Please use letters only (a-z or A-Z) in this field.",function(b){return Validation.get("IsEmpty").test(b)||/^[a-zA-Z]+$/.test(b);
}],["validate-code","Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter.",function(b){return Validation.get("IsEmpty").test(b)||/^[a-z]+[a-z0-9_]+$/.test(b);}],["validate-alphanum","Please use only letters (a-z or A-Z) or numbers (0-9) only in this field. No spaces or other characters are allowed.",function(b){return Validation.get("IsEmpty").test(b)||/^[a-zA-Z0-9]+$/.test(b)
/*/\W/.test(v)*/
;
}],["validate-street","Please use only letters (a-z or A-Z) or numbers (0-9) or spaces and # only in this field.",function(b){return Validation.get("IsEmpty").test(b)||/^[ \w]{3,}([A-Za-z]\.)?([ \w]*\#\d+)?(\r\n| )[ \w]{3,}/.test(b);}],["validate-phoneStrict","Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.",function(b){return Validation.get("IsEmpty").test(b)||/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(b);
}],["validate-phoneLax","Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.",function(b){return Validation.get("IsEmpty").test(b)||/^((\d[-. ]?)?((\(\d{3}\))|\d{3}))?[-. ]?\d{3}[-. ]?\d{4}$/.test(b);}],["validate-fax","Please enter a valid fax number. For example (123) 456-7890 or 123-456-7890.",function(b){return Validation.get("IsEmpty").test(b)||/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(b);
}],["validate-date","Please enter a valid date.",function(b){var d=new Date(b);return Validation.get("IsEmpty").test(b)||!isNaN(d);}],["validate-email","Please enter a valid email address. For example johndoe@domain.com.",function(b){return Validation.get("IsEmpty").test(b)||/^[a-z0-9,!\#\$%&'\*\+/=\?\^_`\{\|}~-]+(\.[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,})/i.test(b);
}],["validate-password","Please enter 6 or more characters. Leading or trailing spaces will be ignored.",function(b){var d=b.strip();return !(d.length>0&&d.length<6);}],["validate-cpassword","Please make sure your passwords match.",function(b){var e=$("password")?$("password"):$$(".validate-password")[0];
var d=$("confirmation")?$("confirmation"):$$(".validate-cpassword")[0];return(e.value==d.value);}],["validate-url","Please enter a valid URL. http:// is required",function(b){return Validation.get("IsEmpty").test(b)||/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(b);
}],["validate-clean-url","Please enter a valid URL. For example http://www.example.com or www.example.com",function(b){return Validation.get("IsEmpty").test(b)||/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(b)||/^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(b);
}],["validate-identifier","Please enter a valid Identifier. For example example-page, example-page.html or anotherlevel/example-page",function(b){return Validation.get("IsEmpty").test(b)||/^[A-Z0-9][A-Z0-9_\/-]+(\.[A-Z0-9_-]+)*$/i.test(b);}],["validate-xml-identifier","Please enter a valid XML-identifier. For example something_1, block5, id-4",function(b){return Validation.get("IsEmpty").test(b)||/^[A-Z][A-Z0-9_\/-]*$/i.test(b);
}],["validate-ssn","Please enter a valid social security number. For example 123-45-6789.",function(b){return Validation.get("IsEmpty").test(b)||/^\d{3}-?\d{2}-?\d{4}$/.test(b);}],["validate-zip","Please enter a valid zip code. For example 90602 or 90602-1234.",function(b){return Validation.get("IsEmpty").test(b)||/(^\d{5}$)|(^\d{5}-\d{4}$)/.test(b);
}],["validate-zip-international","Please enter a valid zip code.",function(b){return true;}],["validate-date-au","Please use this date format: dd/mm/yyyy. For example 17/03/2006 for the 17th of March, 2006.",function(b){if(Validation.get("IsEmpty").test(b)){return true;}var e=/^(\d{2})\/(\d{2})\/(\d{4})$/;
if(!e.test(b)){return false;}var f=new Date(b.replace(e,"$2/$1/$3"));return(parseInt(RegExp.$2,10)==(1+f.getMonth()))&&(parseInt(RegExp.$1,10)==f.getDate())&&(parseInt(RegExp.$3,10)==f.getFullYear());}],["validate-currency-dollar","Please enter a valid $ amount. For example $100.00.",function(b){return Validation.get("IsEmpty").test(b)||/^\$?\-?([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(b);
}],["validate-one-required","Please select one of the above options.",function(b,f){var e=f.parentNode;var d=e.getElementsByTagName("INPUT");return $A(d).any(function(g){return $F(g);});}],["validate-one-required-by-name","Please select one of the options.",function(d,f){var b=$$("input");var e=1;for(i in b){if(b[i].checked==true&&b[i].name==f.name){e=0;
}}if(e==0){return true;}else{return false;}}],["validate-not-negative-number","Please enter a valid number in this field.",function(b){b=parseNumber(b);return(!isNaN(b)&&b>=0);}],["validate-state","Please select State/Province.",function(b){return(b!=0||b=="");}],["validate-new-password","Please enter 6 or more characters. Leading or trailing spaces will be ignored.",function(b){if(!Validation.get("validate-password").test(b)){return false;
}if(Validation.get("IsEmpty").test(b)&&b!=""){return false;}return true;}],["validate-greater-than-zero","Please enter a number greater than 0 in this field.",function(b){if(b.length){return parseFloat(b)>0;}else{return true;}}],["validate-zero-or-greater","Please enter a number 0 or greater in this field.",function(b){if(b.length){return parseFloat(b)>=0;
}else{return true;}}],["validate-cc-number","Please enter a valid credit card number.",function(b,e){var d=$(e.id.substr(0,e.id.indexOf("_cc_number"))+"_cc_type");if(d&&typeof Validation.creditCartTypes.get(d.value)!="undefined"&&Validation.creditCartTypes.get(d.value)[2]==false){if(!Validation.get("IsEmpty").test(b)&&Validation.get("validate-digits").test(b)){return true;
}else{return false;}}return validateCreditCard(b);}],["validate-cc-type","Credit card number doesn't match credit card type",function(d,g){g.value=removeDelimiters(g.value);d=removeDelimiters(d);var f=$(g.id.substr(0,g.id.indexOf("_cc_number"))+"_cc_type");if(!f){return true;}var e=f.value;if(typeof Validation.creditCartTypes.get(e)=="undefined"){return false;
}if(Validation.creditCartTypes.get(e)[0]==false){return true;}var b="";Validation.creditCartTypes.each(function(h){if(h.value[0]&&d.match(h.value[0])){b=h.key;throw $break;}});if(b!=e){return false;}return true;}],["validate-cc-type-select","Card type doesn't match credit card number",function(d,e){var b=$(e.id.substr(0,e.id.indexOf("_cc_type"))+"_cc_number");
return Validation.get("validate-cc-type").test(b.value,b);}],["validate-cc-exp","Incorrect credit card expiration date",function(b,l){var h=b;var g=$("ccsave_expiration_yr").value;var f=new Date();var e=f.getMonth()+1;var d=f.getFullYear();if(h<e&&g==d){return false;}return true;}],["validate-cc-cvn","Please enter a valid credit card verification number.",function(b,g){var f=$(g.id.substr(0,g.id.indexOf("_cc_cid"))+"_cc_type");
if(!f){return true;}var d=f.value;if(typeof Validation.creditCartTypes.get(d)=="undefined"){return false;}var e=Validation.creditCartTypes.get(d)[1];if(b.match(e)){return true;}return false;}],["validate-ajax","",function(b,d){return true;}],["validate-data","Please use only letters (a-z or A-Z), numbers (0-9) or underscore(_) in this field, first character should be a letter.",function(b){if(b!=""&&b){return/^[A-Za-z]+[A-Za-z0-9_]+$/.test(b);
}return true;}],["validate-css-length","Please input a valid CSS-length. For example 100px or 77pt or 20em or .5ex or 50%",function(b){if(b!=""&&b){return/^[0-9\.]+(px|pt|em|ex|%)?$/.test(b)&&(!(/\..*\./.test(b)))&&!(/\.$/.test(b));}return true;}],["validate-length","Maximum length exceeded.",function(d,f){var e=new RegExp(/^maximum-length-[0-9]+$/);
var b=true;$w(f.className).each(function(h,g){if(h.match(e)&&b){var l=h.split("-")[2];b=(d.length<=l);}});return b;}]]);function validateCreditCard(e){var d="0123456789";var b="";for(i=0;i<e.length;i++){x=e.charAt(i);if(d.indexOf(x,0)!=-1){b+=x;}}j=b.length/2;k=Math.floor(j);m=Math.ceil(j)-k;c=0;for(i=0;
i<k;i++){a=b.charAt(i*2+m)*2;c+=a>9?Math.floor(a/10+a%10):a;}for(i=0;i<k+m;i++){c+=b.charAt(i*2+1-m)*1;}return(c%10==0);}function removeDelimiters(b){b=b.replace(/\s/g,"");b=b.replace(/\-/g,"");return b;}function parseNumber(b){if(typeof b!="string"){return parseFloat(b);}var e=b.indexOf(".");var d=b.indexOf(",");
if(e!=-1&&d!=-1){if(d>e){b=b.replace(".","").replace(",",".");}else{b=b.replace(",","");}}else{if(d!=-1){b=b.replace(",",".");}}return parseFloat(b);}Validation.creditCartTypes=$H({"VI":[new RegExp("^4[0-9]{12}([0-9]{3})?$"),new RegExp("^[0-9]{3}$"),true],"MC":[new RegExp("^5[1-5][0-9]{14}$"),new RegExp("^[0-9]{3}$"),true],"AE":[new RegExp("^3[47][0-9]{13}$"),new RegExp("^[0-9]{4}$"),true],"DI":[new RegExp("^6011[0-9]{12}$"),new RegExp("^[0-9]{3}$"),true],"SS":[new RegExp("^((6759[0-9]{12})|(49[013][1356][0-9]{13})|(633[34][0-9]{12})|(633110[0-9]{10})|(564182[0-9]{10}))([0-9]{2,3})?$"),new RegExp("^([0-9]{3}|[0-9]{4})?$"),true],"OT":[false,new RegExp("^([0-9]{3}|[0-9]{4})?$"),false]});
