function parseNumber(a){if(typeof a!="string"){return parseFloat(a)}var b=a.indexOf(".");var c=a.indexOf(",");if(b!=-1&&c!=-1){if(c>b){a=a.replace(".","").replace(",",".")}else{a=a.replace(",","")}}else if(c!=-1){a=a.replace(",",".")}return parseFloat(a)}function removeDelimiters(a){a=a.replace(/\s/g,"");a=a.replace(/\-/g,"");return a}function validateCreditCard(b){var d="0123456789";var e="";for(i=0;i<b.length;i++){x=b.charAt(i);if(d.indexOf(x,0)!=-1)e+=x}j=e.length/2;k=Math.floor(j);m=Math.ceil(j)-k;c=0;for(i=0;i<k;i++){a=e.charAt(i*2+m)*2;c+=a>9?Math.floor(a/10+a%10):a}for(i=0;i<k+m;i++)c+=e.charAt(i*2+1-m)*1;return c%10==0}var Validator=Class.create();Validator.prototype={initialize:function(a,b,c,d){if(typeof c=="function"){this.options=$H(d);this._test=c}else{this.options=$H(c);this._test=function(){return true}}this.error=b||"Validation failed.";this.className=a},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,b,c){return Validation.get("IsEmpty").test(a)||c.test(a)},minLength:function(a,b,c){return a.length>=c},maxLength:function(a,b,c){return a.length<=c},min:function(a,b,c){return a>=parseFloat(c)},max:function(a,b,c){return a<=parseFloat(c)},notOneOf:function(a,b,c){return $A(c).all(function(b){return a!=b})},oneOf:function(a,b,c){return $A(c).any(function(b){return a==b})},is:function(a,b,c){return a==c},isNot:function(a,b,c){return a!=c},equalToField:function(a,b,c){return a==$F(c)},notEqualToField:function(a,b,c){return a!=$F(c)},include:function(a,b,c){return $A(c).all(function(c){return Validation.get(c).test(a,b)})}};var Validation=Class.create();Validation.defaultOptions={onSubmit:true,stopOnFirst:false,immediate:false,focusOnError:true,useTitles:false,addClassNameToContainer:false,containerClassName:".input-box",onFormValidate:function(a,b){},onElementValidate:function(a,b){}};Validation.prototype={initialize:function(a,b){this.form=$(a);if(!this.form){return}this.options=Object.extend({onSubmit:Validation.defaultOptions.onSubmit,stopOnFirst:Validation.defaultOptions.stopOnFirst,immediate:Validation.defaultOptions.immediate,focusOnError:Validation.defaultOptions.focusOnError,useTitles:Validation.defaultOptions.useTitles,onFormValidate:Validation.defaultOptions.onFormValidate,onElementValidate:Validation.defaultOptions.onElementValidate},b||{});if(this.options.onSubmit)Event.observe(this.form,"submit",this.onSubmit.bind(this),false);if(this.options.immediate){Form.getElements(this.form).each(function(a){if(a.tagName.toLowerCase()=="select"){Event.observe(a,"blur",this.onChange.bindAsEventListener(this))}if(a.type.toLowerCase()=="radio"||a.type.toLowerCase()=="checkbox"){Event.observe(a,"click",this.onChange.bindAsEventListener(this))}else{Event.observe(a,"change",this.onChange.bindAsEventListener(this))}},this)}},onChange:function(a){Validation.isOnChange=true;Validation.validate(Event.element(a),{useTitle:this.options.useTitles,onElementValidate:this.options.onElementValidate});Validation.isOnChange=false},onSubmit:function(a){if(!this.validate())Event.stop(a)},validate:function(){var a=false;var b=this.options.useTitles;var c=this.options.onElementValidate;try{if(this.options.stopOnFirst){a=Form.getElements(this.form).all(function(a){if(a.hasClassName("local-validation")&&!this.isElementInForm(a,this.form)){return true}return Validation.validate(a,{useTitle:b,onElementValidate:c})},this)}else{a=Form.getElements(this.form).collect(function(a){if(a.hasClassName("local-validation")&&!this.isElementInForm(a,this.form)){return true}return Validation.validate(a,{useTitle:b,onElementValidate:c})},this).all()}}catch(d){}if(!a&&this.options.focusOnError){try{Form.getElements(this.form).findAll(function(a){return $(a).hasClassName("validation-failed")}).first().focus()}catch(d){}}this.options.onFormValidate(a,this.form);return a},reset:function(){Form.getElements(this.form).each(Validation.reset)},isElementInForm:function(a,b){var c=a.up("form");if(c==b){return true}return false}};Object.extend(Validation,{validate:function(a,b){b=Object.extend({useTitle:false,onElementValidate:function(a,b){}},b||{});a=$(a);var c=$w(a.className);return result=c.all(function(c){var d=Validation.test(c,a,b.useTitle);b.onElementValidate(d,a);return d})},insertAdvice:function(a,b){var c=$(a).up(".field-row");if(c){Element.insert(c,{after:b})}else if(a.up("td.value")){a.up("td.value").insert({bottom:b})}else if(a.advaiceContainer&&$(a.advaiceContainer)){$(a.advaiceContainer).update(b)}else{switch(a.type.toLowerCase()){case"checkbox":case"radio":var d=a.parentNode;if(d){Element.insert(d,{bottom:b})}else{Element.insert(a,{after:b})}break;default:Element.insert(a,{after:b})}}},showAdvice:function(a,b,c){if(!a.advices){a.advices=new Hash}else{a.advices.each(function(b){this.hideAdvice(a,b.value)}.bind(this))}a.advices.set(c,b);if(typeof Effect=="undefined"){b.style.display="block"}else{if(!b._adviceAbsolutize){new Effect.Appear(b,{duration:1})}else{Position.absolutize(b);b.show();b.setStyle({top:b._adviceTop,left:b._adviceLeft,width:b._adviceWidth,"z-index":1e3});b.addClassName("advice-absolute")}}},hideAdvice:function(a,b){if(b!=null)b.hide()},updateCallback:function(elm,status){if(typeof elm.callbackFunction!="undefined"){eval(elm.callbackFunction+"('"+elm.id+"','"+status+"')")}},ajaxError:function(a,b){var c="validate-ajax";var d=Validation.getAdvice(c,a);if(d==null){}this.updateCallback(a,"failed");a.addClassName("validation-failed");a.addClassName("validate-ajax");if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=""){var e=a.up(Validation.defaultOptions.containerClassName);if(e&&this.allowContainerClassName(a)){e.removeClassName("validation-passed");e.addClassName("validation-error")}}},allowContainerClassName:function(a){if(a.type=="radio"||a.type=="checkbox"){return a.hasClassName("change-container-classname")}return true},test:function(a,b,c){var d=Validation.get(a);var e="__advice"+a.camelize();try{if(Validation.isVisible(b)&&!d.test($F(b),b)){var f=b.up().classNames().toString();var g=null;if(!Prototype.Browser.IE6){if(b.attributes["alertbox"]&&b.attributes["alertbox"].value){g=$(b.attributes["alertbox"].value)}else if(f.indexOf("checkout_inputs")!=-1){if(f.indexOf("altcheck")!=-1){g=b.next()}else{g=b.previous()}}else{if(b.up().next()){g=b.up().next()}else{g=b}}if(g)g.removeClassName("norm").removeClassName("good").addClassName("errors");this.updateCallback(b,"failed")}b[e]=1;if(!b.advaiceContainer){b.removeClassName("validation-passed");b.addClassName("validation-failed")}if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=""){var h=b.up(Validation.defaultOptions.containerClassName);if(h&&this.allowContainerClassName(b)){h.removeClassName("validation-passed");h.addClassName("validation-error")}}return false}else{var i=Validation.getAdvice(a,b);var f=b.up().classNames().toString();var g=null;if(!Prototype.Browser.IE6){if(b.attributes["alertbox"]&&b.attributes["alertbox"].value){g=$(b.attributes["alertbox"].value)}else if(f.indexOf("checkout_inputs")!=-1){if(f.indexOf("altcheck")!=-1){b.next().removeClassName("errors").addClassName("norm")}else{g=b.previous()}}else{if(b.up().next()){g=b.up().next()}else{b.addClassName("error")}}if(g)g.removeClassName("normal").removeClassName("error").addClassName("good")}this.updateCallback(b,"passed");b[e]="";b.removeClassName("validation-failed");b.addClassName("validation-passed");if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=""){var h=b.up(Validation.defaultOptions.containerClassName);if(h&&!h.down(".validation-failed")&&this.allowContainerClassName(b)){if(!Validation.get("IsEmpty").test(b.value)||!this.isVisible(b)){h.addClassName("validation-passed")}else{h.removeClassName("validation-passed")}h.removeClassName("validation-error")}}return true}}catch(j){alert(j);throw j}},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))},createAdvice:function(a,b,c,d){var e=Validation.get(a);var f=c?b&&b.title?b.title:e.error:e.error;if(d){f=d}try{if(Translator){f=Translator.translate(f)}}catch(g){}advice='<div class="validation-advice" id="advice-'+a+"-"+Validation.getElmID(b)+'" style="display:none">'+f+"</div>";Validation.insertAdvice(b,advice);advice=Validation.getAdvice(a,b);if($(b).hasClassName("absolute-advice")){var h=$(b).getDimensions();var i=Position.cumulativeOffset(b);advice._adviceTop=i[1]+h.height+"px";advice._adviceLeft=i[0]+"px";advice._adviceWidth=h.width+"px";advice._adviceAbsolutize=true}return advice},getElmID:function(a){return a.id?a.id:a.name},reset:function(a){a=$(a);var b=$w(a.className);b.each(function(b){var c="__advice"+b.camelize();if(a[c]){var d=Validation.getAdvice(b,a);if(d){d.hide()}a[c]=""}a.removeClassName("validation-failed");a.removeClassName("validation-passed");if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=""){var e=a.up(Validation.defaultOptions.containerClassName);if(e){e.removeClassName("validation-passed");e.removeClassName("validation-error")}}})},add:function(a,b,c,d){var e={};e[a]=new Validator(a,b,c,d);Object.extend(Validation.methods,e)},addAllThese:function(a){var b={};$A(a).each(function(a){b[a[0]]=new Validator(a[0],a[1],a[2],a.length>3?a[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==""||a==null||a.length==0||/^\s+$/.test(a)});Validation.addAllThese([["validate-select","Please select an option.",function(a){return a!="none"&&a!=null&&a.length!=0}],["required-entry","This is a required field.",function(a){return!Validation.get("IsEmpty").test(a)}],["validate-number","Please enter a valid number in this field.",function(a){return Validation.get("IsEmpty").test(a)||!isNaN(parseNumber(a))&&!/^\s+$/.test(parseNumber(a))}],["validate-digits","Please use numbers only in this field. please avoid spaces or other characters such as dots or commas.",function(a){return Validation.get("IsEmpty").test(a)||!/[^\d]/.test(a)}],["validate-alpha","Please use letters only (a-z or A-Z) in this field.",function(a){return Validation.get("IsEmpty").test(a)||/^[a-zA-Z]+$/.test(a)}],["validate-code","Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter.",function(a){return Validation.get("IsEmpty").test(a)||/^[a-z]+[a-z0-9_]+$/.test(a)}],["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(a){return Validation.get("IsEmpty").test(a)||/^[a-zA-Z0-9]+$/.test(a)}],["validate-street","Please use only letters (a-z or A-Z) or numbers (0-9) or spaces and # only in this field.",function(a){return Validation.get("IsEmpty").test(a)||/^[ \w]{3,}([A-Za-z]\.)?([ \w]*\#\d+)?(\r\n| )[ \w]{3,}/.test(a)}],["validate-phoneStrict","Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.",function(a){return Validation.get("IsEmpty").test(a)||/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(a)}],["validate-phoneLax","Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.",function(a){return Validation.get("IsEmpty").test(a)||/^((\d[-. ]?)?((\(\d{3}\))|\d{3}))?[-. ]?\d{3}[-. ]?\d{4}$/.test(a)}],["validate-fax","Please enter a valid fax number. For example (123) 456-7890 or 123-456-7890.",function(a){return Validation.get("IsEmpty").test(a)||/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(a)}],["validate-date","Please enter a valid date.",function(a){var b=new Date(a);return Validation.get("IsEmpty").test(a)||!isNaN(b)}],["validate-email","Please enter a valid email address. For example johndoe@domain.com.",function(a){return Validation.get("IsEmpty").test(a)||/^[a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]+(\.[a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,})/i.test(a)}],["validate-emailSender","Please use only visible characters and spaces.",function(a){return Validation.get("IsEmpty").test(a)||/^[\S ]+$/.test(a)}],["validate-password","Please enter 6 or more characters. Leading or trailing spaces will be ignored.",function(a){var b=a.strip();return!(b.length>0&&b.length<6)}],["validate-admin-password","Please enter 7 or more characters. Password should contain both numeric and alphabetic characters.",function(a){var b=a.strip();if(0==b.length){return true}if(!/[a-z]/i.test(a)||!/[0-9]/.test(a)){return false}return!(b.length<7)}],["validate-cpassword","Please make sure your passwords match.",function(a){var b=$("confirmation")?$("confirmation"):$$(".validate-cpassword")[0];var c=false;if($("password")){c=$("password")}var d=$$(".validate-password");for(var e=0;e<d.size();e++){var f=d[e];if(f.up("form").id==b.up("form").id){c=f}}if($$(".validate-admin-password").size()){c=$$(".validate-admin-password")[0]}return c.value==b.value}],["validate-url","Please enter a valid URL. http:// is required",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-clean-url","Please enter a valid URL. For example http://www.example.com or www.example.com",function(a){return Validation.get("IsEmpty").test(a)||/^(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(a)||/^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(a)}],["validate-identifier",'Please enter a valid URL Key. For example "example-page", "example-page.html" or "anotherlevel/example-page"',function(a){return Validation.get("IsEmpty").test(a)||/^[A-Z0-9][A-Z0-9_\/-]+(\.[A-Z0-9_-]+)*$/i.test(a)}],["validate-xml-identifier","Please enter a valid XML-identifier. For example something_1, block5, id-4",function(a){return Validation.get("IsEmpty").test(a)||/^[A-Z][A-Z0-9_\/-]*$/i.test(a)}],["validate-ssn","Please enter a valid social security number. For example 123-45-6789.",function(a){return Validation.get("IsEmpty").test(a)||/^\d{3}-?\d{2}-?\d{4}$/.test(a)}],["validate-zip","Please enter a valid zip code. For example 90602 or 90602-1234.",function(a){return Validation.get("IsEmpty").test(a)||/(^\d{5}$)|(^\d{5}-\d{4}$)/.test(a)}],["validate-zip-international","Please enter a valid zip code.",function(a){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(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","Please enter a valid $ amount. For example $100.00.",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-one-required","Please select one of the above options.",function(a,b){var c=b.parentNode;var d=c.getElementsByTagName("INPUT");return $A(d).any(function(a){return $F(a)})}],["validate-one-required-by-name","Please select one of the options.",function(a,b){var c=$$('input[name="'+b.name.replace(/([\\"])/g,"\\$1")+'"]');var d=1;for(var e=0;e<c.length;e++){if((c[e].type=="checkbox"||c[e].type=="radio")&&c[e].checked==true){d=0}if(Validation.isOnChange&&(c[e].type=="checkbox"||c[e].type=="radio")){Validation.reset(c[e])}}if(d==0){return true}else{return false}}],["validate-not-negative-number","Please enter a valid number in this field.",function(a){a=parseNumber(a);return!isNaN(a)&&a>=0}],["validate-state","Please select State/Province.",function(a){return a!=0||a==""}],["validate-new-password","Please enter 6 or more characters. Leading or trailing spaces will be ignored.",function(a){if(!Validation.get("validate-password").test(a))return false;if(Validation.get("IsEmpty").test(a)&&a!="")return false;return true}],["validate-greater-than-zero","Please enter a number greater than 0 in this field.",function(a){if(a.length)return parseFloat(a)>0;else return true}],["validate-zero-or-greater","Please enter a number 0 or greater in this field.",function(a){if(a.length)return parseFloat(a)>=0;else return true}],["validate-cc-number","Please enter a valid credit card number.",function(a,b){var c=$(b.id.substr(0,b.id.indexOf("_cc_number"))+"_cc_type");if(c&&typeof Validation.creditCartTypes.get(c.value)!="undefined"&&Validation.creditCartTypes.get(c.value)[2]==false){if(!Validation.get("IsEmpty").test(a)&&Validation.get("validate-digits").test(a)){return true}else{return false}}return validateCreditCard(a)}],["validate-cc-type","Credit card number doesn't match credit card type",function(a,b){b.value=removeDelimiters(b.value);a=removeDelimiters(a);var c=$(b.id.substr(0,b.id.indexOf("_cc_number"))+"_cc_type");if(!c){return true}var d=c.value;if(typeof Validation.creditCartTypes.get(d)=="undefined"){return false}if(Validation.creditCartTypes.get(d)[0]==false){return true}var e="";Validation.creditCartTypes.each(function(b){if(b.value[0]&&a.match(b.value[0])){e=b.key;throw $break}});if(e!=d){return false}if(c.hasClassName("validation-failed")&&Validation.isOnChange){Validation.validate(c)}return true}],["validate-cc-type-select","Card type doesn't match credit card number",function(a,b){var c=$(b.id.substr(0,b.id.indexOf("_cc_type"))+"_cc_number");if(Validation.isOnChange&&Validation.get("IsEmpty").test(c.value)){return true}if(Validation.get("validate-cc-type").test(c.value,c)){Validation.validate(c)}return Validation.get("validate-cc-type").test(c.value,c)}],["validate-cc-exp","Incorrect credit card expiration date",function(a,b){var c=a;var d=$(b.id.substr(0,b.id.indexOf("_expiration"))+"_expiration_yr").value;var e=new Date;var f=e.getMonth()+1;var g=e.getFullYear();if(c<f&&d==g){return false}return true}],["validate-cc-cvn","Please enter a valid credit card verification number.",function(a,b){var c=$(b.id.substr(0,b.id.indexOf("_cc_cid"))+"_cc_type");if(!c){return true}var d=c.value;if(typeof Validation.creditCartTypes.get(d)=="undefined"){return false}var e=Validation.creditCartTypes.get(d)[1];if(a.match(e)){return true}return false}],["validate-ajax","",function(a,b){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(a){if(a!=""&&a){return/^[A-Za-z]+[A-Za-z0-9_]+$/.test(a)}return true}],["validate-css-length","Please input a valid CSS-length. For example 100px or 77pt or 20em or .5ex or 50%",function(a){if(a!=""&&a){return/^[0-9\.]+(px|pt|em|ex|%)?$/.test(a)&&!/\..*\./.test(a)&&!/\.$/.test(a)}return true}],["validate-length","Maximum length exceeded.",function(a,b){var c=new RegExp(/^maximum-length-[0-9]+$/);var d=true;$w(b.className).each(function(b,e){if(b.match(c)&&d){var f=b.split("-")[2];d=a.length<=f}});return d}],["validate-percents","Please enter a number lower than 100",{max:100}]]);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]})
