Element.extend({serializeFormElements:function(_243){
var _244=new Object();
_244["formName"]=this.name;
var _245=this.getFormElements();
_245.each(function(el){
if(!el.disabled&&el.name){
var key=el.name;
if(isDefined(_243)){
if(_243.stripLeading!=null){
if(key.substring(0,_243.stripLeading.length)==_243.stripLeading){
key=key.substring(_243.stripLeading.length);
}
}
}
key=camelCaseObjName(key);
var _248=el.getValue();
if(_248!=null&&_248!==false){
if(key in _244){
if($type(_244[key])!="array"){
_244[key]=[_244[key]];
}
_244[key].push(_248);
}else{
_244[key]=_248;
}
}
}
});
return _244;
}});
var FormSubmitter=new Class({initialize:function(_249,_24a){
this.element=$(_249);
this.buttons=new Array();
this.enabled=true;
this.element.addEvent("submit",function(_24b){
_24b=new Event(_24b).stop();
if(this.isEnabled()){
this.doSubmit();
}
}.bind(this));
this.setOptions(_24a);
if(this.options.initialize){
this.options.initialize.call(this);
}
this.setStateClear();
if(!isDefined(this.options.notifierOptions)){
this.options.notifierOptions={commonName:"Submit"};
}else{
if(!isDefined(this.options.notifierOptions.commonName)){
this.options.notifierOptions.commonName="Submit";
}
}
this.notifier=new NotificationIcon(this.options.notifierOptions);
},doSubmit:function(){
this.disableAllButtons();
this.notifier.showProcessing();
this.element.submit();
},buttons:null,disableAllButtons:function(){
if(this.isEnabled()){
this.buttons.each(function(item,_24d){
item.disable();
}.bind(this));
this.enabled=false;
}
},enableAllButtons:function(){
if(this.enabled==false){
this.buttons.each(function(item,_24f){
item.enable();
}.bind(this));
this.enabled=true;
}
},isEnabled:function(){
return this.enabled;
},registerButton:function(_250){
this.buttons.push(_250);
},options:{}});
FormSubmitter.implement(new Events,new Options,new ProcessingStates);
var ValidateFormSubmitter=FormSubmitter.extend({initialize:function(_251,_252){
this.parent(_251,_252);
this.fields=new Array();
},fields:null,doSubmit:function(){
if(this.isStateValid()){
this.parent();
}else{
if(this.isEnabled()){
this.disableAllButtons();
var _253=this.check();
}
}
},disableAllFields:function(){
this.setFieldsEnabled(false);
this.notifier.hide();
},enableAllFields:function(){
this.setFieldsEnabled(true);
},setFieldsEnabled:function(_254){
this.fields.each(function(item,_256){
item.setEnabled(_254);
}.bind(this));
},registerFieldValidator:function(_257){
this.fields.push(_257);
},check:function(){
this.setStateClear();
var _258=new Array();
this.fields.each(function(item,_25a){
if(item.isEnabled()){
_258.push(item);
}
}.bind(this));
if(_258.length>0){
_258.each(function(item,_25c){
item.setStateClear();
}.bind(this));
_258.each(function(item,_25e){
item.checkImmediate(function(){
this.wakeCheck(_25e);
}.bind(this));
}.bind(this));
}else{
this.wakeCheck();
}
if(this.isStateUndetermined()){
this.notifier.showProcessing();
}
return false;
},wakeCheck:function(_25f){
var _260=0;
var _261=0;
var _262=0;
this.fields.each(function(item,_264){
if(item.isEnabled()){
_260++;
if(item.isStateDone()){
_261++;
if(item.isStateError()){
_262++;
}
}
}
}.bind(this));
if(_261<_260){
return;
}
if(_262>0){
this.setStateInvalid();
this.notifier.showInvalid(this.options.defaultInvalidMessage,1);
this.enableAllButtons();
return;
}else{
this.setStateValid();
this.notifier.showProcessing(this.options.defaultValidMessage);
this.doSubmit();
return;
}
},options:{requestTimeout:5000,requestDelay:500,stickyTimeout:200,defaultValidMessage:"",defaultInvalidMessage:"Please correct errors.",timeoutCounter:0}});
var AjaxValidateFormSubmitter=ValidateFormSubmitter.extend({initialize:function(_265,_266){
this.parent(_265,_266);
if(isDefined(this.options.submitController)){
}else{
this.submitController=window[this.element.name+this.options.submitControllerNameExtension];
}
},doSubmit:function(){
if(this.isStateValid()){
this.serverErrors=0;
var _267={callback:function(_268){
this.handleSubmitResponse(_268);
}.bind(this),errorHandler:function(_269,_26a){
this.handleSubmitError(_269);
}.bind(this),exceptionHandler:function(_26b,_26c){
this.handleSubmitException(_26b,_26c);
}.bind(this),timeout:this.options.submitTimeout};
this.submitController.submitForm(this.element.serializeFormElements({stripLeading:this.options.stripLeading}),_267);
return false;
}else{
if(this.isEnabled()){
this.disableAllButtons();
return this.check();
}
}
},handleSubmitError:function(msg,_26e){
alert("handleSubmitError: "+msg);
this.serverErrors++;
},handleSubmitException:function(msg,_270){
alert("handleSubmitException: "+msg);
this.serverErrors++;
},handleSubmitResponse:function(_271){
if(_271.responseType==this.responseTypes.redirect){
window.location.href=_271.instruction;
this.notifier.showProcessing();
}else{
if(_271.responseType==this.responseTypes.failed){
setTimeout(function(){
this.notifier.showInvalid(_271.instruction,1);
}.bind(this),500);
this.setStateInvalid();
this.enableAllButtons();
}else{
if(_271.responseType==this.responseTypes.message){
setTimeout(function(){
var _272="175";
var _273="400";
if(_271.modalBoxHeight){
_272=_271.modalBoxHeight;
}
if(_271.modalBoxWidth){
_273=_271.modalBoxWidth;
}
if(_271.modalBoxUrl){
MOOdalBox.open(_271.modalBoxUrl,null,_273+" "+_272);
this.notifier.hide();
}else{
this.notifier.showValid(_271.instruction,1);
}
}.bind(this),500);
this.setStateClear();
this.enableAllButtons();
}else{
if(_271.responseType=this.responseTypes.systemError){
this.element.submit();
this.notifier.showProcessing();
}
}
}
}
},responseTypes:{message:"message",redirect:"redirect",failed:"failed",systemError:"system error"},options:{submitControllerNameExtension:"SubmitController",submitTimeout:0,maxServerErrors:2}});
var FormFieldValidator=new Class({initialize:function(_274,_275){
this.element=$(_274);
var _276=false;
if(_276){
if(this.element.getTag()=="select"){
this.element.addEvent("change",function(_277){
this.checkSoon();
}.bind(this));
this.element.addEvent("blur",function(_278){
this.checkSoon();
}.bind(this));
}else{
this.element.addEvent("keyup",function(_279){
this.checkTyping();
}.bind(this));
this.element.addEvent("blur",function(_27a){
this.checkSoon();
}.bind(this));
}
}
this.setOptions(_275);
if(this.options.initialize){
this.options.initialize.call(this);
}
this.setStateClear();
if(!isDefined(this.options.notifierOptions)){
this.options.notifierOptions={commonName:this.element.id};
}
this.notifier=new NotificationIcon(this.options.notifierOptions);
this.setEnabled(this.options.enabled);
},setEnabled:function(_27b){
if(_27b){
this.enable();
}else{
this.disable();
}
},enable:function(){
this.enabled=true;
},disable:function(){
this.notifier.hide();
this.enabled=false;
},isDisabled:function(){
return !this.enabled;
},isEnabled:function(){
return this.enabled;
},checkImmediate:function(_27c){
this.check(true,_27c);
},checkSoon:function(_27d){
this.check("soon",_27d);
},checkTyping:function(_27e){
this.check("typing",_27e);
},check:function(_27f,_280){
this.setStateProcessing();
clearInterval(this.sendVerifyRequestPending);
if(_27f===true||_27f=="immediate"){
this.validationPendingCounter=0;
this.sendVerifyRequest(_280);
}else{
if(_27f=="typing"){
this.sendVerifyRequestPending=setTimeout(function(){
this.sendVerifyRequest(_280);
}.bind(this),this.options.requestTypingDelay);
}else{
if(_27f=="soon"){
this.sendVerifyRequestPending=setTimeout(function(){
this.sendVerifyRequest(_280);
}.bind(this),this.options.requestSoonDelay);
}else{
this.sendVerifyRequestPending=setTimeout(function(){
this.sendVerifyRequest(_280);
}.bind(this),this.options.requestDelay);
}
}
}
},sendVerifyRequest:function(_281){
this.setStateValid();
if(isDefined(_281)){
_281(this);
}
return true;
},options:{enabled:true,requestTimeout:5000,requestDelay:500,requestSoonDelay:50,requestTypingDelay:1000,stickyTimeout:200,submissionRetries:2,sMode:false},timeoutCounter:0,validationPendingCounter:0,validationRequestCounter:0,validationResponseCounter:0});
FormFieldValidator.implement(new Events,new Options,new ProcessingStates);
var RegexFormFieldValidator=FormFieldValidator.extend({options:{defaultValidMessage:"",defaultInvalidMessage:"Field invalid.",matchListDefault:[{regex:/^\s*$/,invert:true,invalidMessage:"This is a required field."}]},initialize:function(_282,_283){
this.options.matchList=this.options.matchListDefault.copy();
this.parent(_282,_283);
},addRegexEntry:function(_284){
this.options.matchList.include(_284);
},sendVerifyRequest:function(_285){
var _286=true;
var _287=null;
this.options.matchList.each(function(item,_289){
var _28a=this.element.getValue();
var _28b=item.regex.test(_28a);
if(item.invert==true){
if(_28b==true){
_286=false;
if(_287==null&&isDefined(item.invalidMessage)){
_287=item.invalidMessage;
}
}
}else{
if(_28b==false){
_286=false;
if(_287==null&&isDefined(item.invalidMessage)){
_287=item.invalidMessage;
}
}
}
}.bind(this));
if(_286){
if(_287==null){
_287=this.options.defaultValidMessage;
}
this.notifier.showValid(_287,5);
this.setStateValid();
if(isDefined(_285)){
_285(this);
}
return true;
}else{
if(_287==null){
_287=this.options.defaultInvalidMessage;
}
this.notifier.showInvalid(_287,1);
this.setStateInvalid();
if(isDefined(_285)){
_285(this);
}
return false;
}
}});
var CreditCardFormFieldValidator=FormFieldValidator.extend({options:{defaultValidMessage:"",defaultInvalidMessage:"Card number invalid.",matchList:[{regex:/^\s*$/,invert:true,invalidMessage:"This is a required field."},{regex:/^\d+$/,invert:false,invalidMessage:"Only digits allowed."}]},initialize:function(_28c,_28d){
this.parent(_28c,_28d);
},massageNumber:function(_28e){
var _28f=new String(_28e);
var _290=new RegExp("[- ]","g");
var _291=_28f.replace(_290,"");
return _291;
},isNumberValid:function(_292){
var sum=0;
var _294=false;
for(var i=_292.length-1;i>=0;i--){
var n=parseInt(_292.substring(i,i+1));
if(_294){
n*=2;
if(n>9){
n=(n%10)+1;
}
}
sum+=n;
_294=!_294;
}
var ret=(sum%10==0);
return ret;
},sendVerifyRequest:function(_298){
var _299=this.element.getValue();
var _29a=this.massageNumber(_299);
var _29b=true;
var _29c=null;
this.options.matchList.each(function(item,_29e){
var _29f=item.regex.test(_29a);
if(item.invert==true){
if(_29f==true){
_29b=false;
if(_29c==null&&isDefined(item.invalidMessage)){
_29c=item.invalidMessage;
}
}
}else{
if(_29f==false){
_29b=false;
if(_29c==null&&isDefined(item.invalidMessage)){
_29c=item.invalidMessage;
}
}
}
}.bind(this));
var _2a0=(this.options.cardNumberLastFour?this.options.cardNumberLastFour.value:null);
if(_29b&&(_29a.length==4)&&(_2a0!=null)&&(_2a0.length>0)){
if((_2a0!=null)&&(_2a0.length==4)&&(_2a0!=_29a)){
_29b=false;
_29c="The last four digits don't match the current card. ("+_2a0+")";
}
}else{
if(_29b&&!this.isNumberValid(_29a)){
_29b=false;
_29c="The card number is invalid.";
}
}
if(_29b){
if(_29c==null){
_29c=this.options.defaultValidMessage;
}
this.notifier.showValid(_29c,5);
this.setStateValid();
if(isDefined(_298)){
_298(this);
}
return true;
}else{
if(_29c==null){
_29c=this.options.defaultInvalidMessage;
}
this.notifier.showInvalid(_29c,1);
this.setStateInvalid();
if(isDefined(_298)){
_298(this);
}
return false;
}
}});
var EmailFormFieldValidator=FormFieldValidator.extend({options:{validationOn:true,defaultValidMessage:"",defaultInvalidMessage:"Field invalid.",matchList:[{regex:/^\s*$/,invert:true,invalidMessage:"This is a required field."},{regex:/@/,invert:false,invalidMessage:"Must contain the @ character"}]},initialize:function(_2a1,_2a2){
this.parent(_2a1,_2a2);
},sendVerifyRequest:function(_2a3){
if(!this.options.validationOn){
return;
}
var _2a4=true;
var _2a5=null;
this.options.matchList.each(function(item,_2a7){
var _2a8=this.element.getValue();
var _2a9=item.regex.test(_2a8);
if(item.invert==true){
if(_2a9==true){
_2a4=false;
if(_2a5==null&&isDefined(item.invalidMessage)){
_2a5=item.invalidMessage;
}
}
}else{
if(_2a9==false){
_2a4=false;
if(_2a5==null&&isDefined(item.invalidMessage)){
_2a5=item.invalidMessage;
}
}
}
}.bind(this));
if(this.options.maxLength&&(this.element.getValue().length>this.options.maxLength)){
_2a4=false;
_2a5="Must be less than 50 characters in length.";
}
if(_2a4&&isDefined(this.options.matchEmail)){
if(this.element.getValue()==this.options.matchEmail.getValue()){
_2a4=true;
}else{
_2a5="Email fields must match.";
_2a4=false;
}
this.options.validationOn=false;
this.options.matchEmail.validator.checkImmediate();
this.options.validationOn=true;
}
if(_2a4){
if(_2a5==null){
_2a5=this.options.defaultValidMessage;
}
this.notifier.showValid(_2a5,5);
this.setStateValid();
if(isDefined(_2a3)){
_2a3(this);
}
return true;
}else{
if(_2a5==null){
_2a5=this.options.defaultInvalidMessage;
}
this.notifier.showInvalid(_2a5,1);
this.setStateInvalid();
if(isDefined(_2a3)){
_2a3(this);
}
return false;
}
}});
var PhoneNumberFormFieldValidator=FormFieldValidator.extend({options:{defaultValidMessage:"",defaultInvalidMessage:"Phone number invalid.",matchList:[{regex:/^\s*$/,invert:true,invalidMessage:"This is a required field."},{regex:/^\d{10}$/,invert:false,invalidMessage:"Must be a 10 digit number."}]},initialize:function(_2aa,_2ab){
this.parent(_2aa,_2ab);
},massageNumber:function(_2ac){
var _2ad=new String(_2ac);
var _2ae=new RegExp("[()\\- ]","g");
var _2af=_2ad.replace(_2ae,"");
return _2af;
},sendVerifyRequest:function(_2b0){
var _2b1=this.element.getValue();
var _2b2=this.massageNumber(_2b1);
var _2b3=true;
var _2b4=null;
this.options.matchList.each(function(item,_2b6){
var _2b7=item.regex.test(_2b2);
if(item.invert==true){
if(_2b7==true){
_2b3=false;
if(_2b4==null&&isDefined(item.invalidMessage)){
_2b4=item.invalidMessage;
}
}
}else{
if(_2b7==false){
_2b3=false;
if(_2b4==null&&isDefined(item.invalidMessage)){
_2b4=item.invalidMessage;
}
}
}
}.bind(this));
if(_2b3){
if(_2b4==null){
_2b4=this.options.defaultValidMessage;
}
this.notifier.showValid(_2b4,5);
this.setStateValid();
if(isDefined(_2b0)){
_2b0(this);
}
return true;
}else{
if(_2b4==null){
_2b4=this.options.defaultInvalidMessage;
}
this.notifier.showInvalid(_2b4,1);
this.setStateInvalid();
if(isDefined(_2b0)){
_2b0(this);
}
return false;
}
}});
var CheckboxFormFieldValidator=FormFieldValidator.extend({options:{defaultValidMessage:"",defaultInvalidMessage:""},initialize:function(_2b8,_2b9){
this.parent(_2b8,_2b9);
},sendVerifyRequest:function(_2ba){
var _2bb=this.element.getValue();
var _2bc=this.element.checked;
var _2bd=this.options.invalidMessage;
if(_2bc){
if(_2bd==null){
_2bd=this.options.defaultValidMessage;
}
this.notifier.showValid(_2bd,5);
this.setStateValid();
if(isDefined(_2ba)){
_2ba(this);
}
return true;
}else{
if(_2bd==null){
_2bd=this.options.defaultInvalidMessage;
}
this.notifier.showInvalid(_2bd,1);
this.setStateInvalid();
if(isDefined(_2ba)){
_2ba(this);
}
return false;
}
}});
var MonthYearFieldsValidator=FormFieldValidator.extend({options:{validateExpirationDate:false,defaultValidMessage:"",defaultInvalidMessage:"This is a required field."},initialize:function(_2be,_2bf){
this.parent(_2be,_2bf);
},sendVerifyRequest:function(_2c0){
var _2c1=true;
var _2c2=null;
var _2c3=this.options.monthElement.getValue();
var _2c4=this.options.yearElement.getValue();
if(!_2c3||!_2c4){
_2c1=false;
}
if(this.options.validateExpirationDate){
var now=new Date();
var _2c6=now.getMonth()+1;
var _2c7=now.getFullYear();
if(_2c4.toInt()==_2c7.toInt()){
if(_2c3.toInt()<_2c6.toInt()){
_2c1=false;
_2c2="Date must be in the future.";
}
}
}
if(_2c1){
if(_2c2==null){
_2c2=this.options.defaultValidMessage;
}
this.notifier.showValid(_2c2,5);
this.setStateValid();
if(isDefined(_2c0)){
_2c0(this);
}
return true;
}else{
if(_2c2==null){
_2c2=this.options.defaultInvalidMessage;
}
this.notifier.showInvalid(_2c2,1);
this.setStateInvalid();
if(isDefined(_2c0)){
_2c0(this);
}
return false;
}
}});
var MatchFormFieldValidator=FormFieldValidator.extend({options:{defaultValidMessage:"",defaultInvalidMessage:"Fields must match."},initialize:function(_2c8,_2c9){
this.parent(_2c8,_2c9);
},sendVerifyRequest:function(_2ca){
var _2cb=true;
var _2cc=null;
if(isDefined(this.options.match)){
if(this.element.getValue()==this.options.match.getValue()){
_2cb=true;
}else{
_2cb=false;
}
}else{
_2cb=true;
}
if(_2cb){
if(_2cc==null){
_2cc=this.options.defaultValidMessage;
}
this.notifier.showValid(_2cc,5);
this.setStateValid();
if(isDefined(_2ca)){
_2ca(this);
}
return true;
}else{
if(_2cc==null){
_2cc=this.options.defaultInvalidMessage;
}
this.notifier.showInvalid(_2cc,1);
this.setStateInvalid();
if(isDefined(_2ca)){
_2ca(this);
}
return false;
}
}});
var ElementDisabler=new Class({initialize:function(_2cd,_2ce){
this.element=$(_2cd);
this.fx=new Fx.Style(this.element,"opacity",{duration:250,transition:Fx.Transitions.Cubic.easeInOut,wait:false});
this.enable();
},click:function(){
this.disable();
},disable:function(){
this.enabled=false;
this.fx.start(0.25);
this.element.style.cursor="wait";
},enable:function(){
this.enabled=true;
this.fx.start(1);
this.element.style.cursor="auto";
}});
ElementDisabler.implement(new Events,new Options);
var ClickDisabler=ElementDisabler.extend({initialize:function(_2cf,_2d0){
this.parent(_2cf,_2d0);
this.element.addEvent("click",function(_2d1){
if(this.enabled){
this.disable();
}else{
_2d1=new Event(_2d1).stop();
}
}.bind(this));
}});
var ZipcodeFormFieldValidator=FormFieldValidator.extend({options:{defaultValidMessage:"",defaultInvalidMessage:"Zip/Postal code invalid.",matchList:[{regex:/^\s*$/,invert:true,invalidMessage:"This is a required field."},{regex:/^\d{5}(\d{4})?$/,invert:false,invalidMessage:"Zip code must be a 5 or 9 digit number.",country:"US"},{regex:/^[A-Z][0-9][A-Z][0-9][A-Z][0-9]$/,invert:false,invalidMessage:"Not a valid postal code for this country.",country:"CA"},{regex:/^[A-Z][0-9][A-Z][0-9][A-Z][0-9]$/,invert:false,invalidMessage:"Not a valid postal code for this country.",country:"GB"}]},initialize:function(_2d2,_2d3){
this.parent(_2d2,_2d3);
},massageNumber:function(_2d4){
var _2d5=new String(_2d4.toUpperCase());
var _2d6=new RegExp("[()\\- ]","g");
var _2d7=_2d5.replace(_2d6,"");
return _2d7;
},sendVerifyRequest:function(_2d8){
var _2d9=this.element.getValue();
var _2da=this.massageNumber(_2d9);
var _2db=true;
var _2dc=null;
this.options.matchList.each(function(item,_2de){
var _2df=this.options.country;
if(item.country&&_2df&&item.country==_2df[_2df.selectedIndex].value){
var _2e0=item.regex.test(_2da);
if(item.invert==true){
if(_2e0==true){
_2db=false;
if(_2dc==null&&isDefined(item.invalidMessage)){
_2dc=item.invalidMessage;
}
}
}else{
if(_2e0==false){
_2db=false;
if(_2dc==null&&isDefined(item.invalidMessage)){
_2dc=item.invalidMessage;
}
}
}
}
}.bind(this));
if(_2db){
if(_2dc==null){
_2dc=this.options.defaultValidMessage;
}
this.notifier.showValid(_2dc,5);
this.setStateValid();
if(isDefined(_2d8)){
_2d8(this);
}
return true;
}else{
if(_2dc==null){
_2dc=this.options.defaultInvalidMessage;
}
this.notifier.showInvalid(_2dc,1);
this.setStateInvalid();
if(isDefined(_2d8)){
_2d8(this);
}
return false;
}
}});
var InternationalPhoneNumberFormFieldValidator=FormFieldValidator.extend({options:{defaultValidMessage:"",defaultInvalidMessage:"Phone number invalid.",matchList:[{regex:/^\s*$/,invert:true,invalidMessage:"This is a required field."},{regex:/^\d{10}$/,invert:false,invalidMessage:"Must be a 10 digit number.",country:"US"},{regex:/^\d{10,11}$/,invert:false,invalidMessage:"Must be a 10 or 11 digit number excluding optional country code.",country:"GB"}]},initialize:function(_2e1,_2e2){
this.parent(_2e1,_2e2);
},massageNumber:function(_2e3){
var _2e4=new String(_2e3);
var _2e5=new RegExp("^\\+\\d{2,3} ","g");
var _2e6=_2e4.replace(_2e5,"");
_2e5=new RegExp("[()\\- ]","g");
_2e6=_2e6.replace(_2e5,"");
return _2e6;
},sendVerifyRequest:function(_2e7){
var _2e8=this.element.getValue();
var _2e9=this.massageNumber(_2e8);
var _2ea=true;
var _2eb=null;
this.options.matchList.each(function(item,_2ed){
var _2ee=this.options.country;
if(item.country&&_2ee&&item.country==_2ee[_2ee.selectedIndex].value){
var _2ef=item.regex.test(_2e9);
if(item.invert==true){
if(_2ef==true){
_2ea=false;
if(_2eb==null&&isDefined(item.invalidMessage)){
_2eb=item.invalidMessage;
}
}
}else{
if(_2ef==false){
_2ea=false;
if(_2eb==null&&isDefined(item.invalidMessage)){
_2eb=item.invalidMessage;
}
}
}
}
}.bind(this));
if(_2ea){
if(_2eb==null){
_2eb=this.options.defaultValidMessage;
}
this.notifier.showValid(_2eb,5);
this.setStateValid();
if(isDefined(_2e7)){
_2e7(this);
}
return true;
}else{
if(_2eb==null){
_2eb=this.options.defaultInvalidMessage;
}
this.notifier.showInvalid(_2eb,1);
this.setStateInvalid();
if(isDefined(_2e7)){
_2e7(this);
}
return false;
}
}});
