PageSourceSearch

https://www.shootersexpress.com/js/validate.js

js shootersexpress.com collected 2026-09-27 06:28:01 UTC 42,471 bytes, 1,512 lines download raw bytes

1$().ready(function(){ 
2	console.log('vl ready!')
3	var IS_CC_VALID = false;
4
5	function isRecaptchaResponseMissing(formSelector, hiddenFieldSelector) {
6		var $form = $(formSelector);
7		var hiddenResponse = '';
8
9		if ($form.length && hiddenFieldSelector) {
10			hiddenResponse = $.trim($form.find(hiddenFieldSelector).val() || '');
11		}
12
13		if (!hiddenResponse && $form.length) {
14			hiddenResponse = $.trim($form.find('#g-recaptcha-response').val() || '');
15		}
16		
17		if (window.grecaptcha && typeof grecaptcha.getResponse === 'function') {
18			try {				
19				return grecaptcha.getResponse() == '' && hiddenResponse == '';
20			} catch (error) {
21				return hiddenResponse == '';
22			}
23		}
24
25		return hiddenResponse == '';
26	}
27
28	jQuery.validator.addMethod("validExpiryDate", function(val, elm){
29		
30		
31			    var vals=val;
32				
33				if(vals.indexOf("/")>-1){
34					val=vals.split('/');
35					val=val[0]+''+val[1];
36				
37					var numbers = /^[0-9]+$/;
38					if(val.match(numbers))
39					{
40						if(val.length === 4){
41							cardMonth = val.substr(0, 2);
42							cardYear = Number('20'+val.substr(2, 2));
43							
44							curMonth = Number(new Date().getMonth()) + 1; 
45							curYear = Number(new Date().getFullYear());
46							
47							if(cardMonth === 0)return false;
48							if(cardMonth > 12)return false;
49							if(cardYear < curYear)return false;
50							if(cardYear === curYear){
51								if(cardMonth < curMonth)return false;
52							}
53							return true;
54						}else{
55							return false;	
56						}
57					}else{
58						return false;	
59					}	
60				}
61	});
62
63	jQuery.validator.addMethod("validateCC", function(val, elm) {
64		return IS_CC_VALID;
65	});
66	
67	jQuery.validator.addMethod("match_password", function(val, elm) {
68		if($("#LoginInfoPassword").val() == $("#LoginInfoPasswordAgain").val()){
69			return true;
70		}else{
71			return false;
72		}
73	});
74
75	jQuery.validator.addMethod("alphanumericName", function(val, elm) {
76		if (this.optional(elm)) {
77			return true;
78		}
79		var urlPattern = /(?:https?:\/\/|www\.)[^\s]+|[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+/i;
80		return !urlPattern.test($.trim(val));
81	}, "Please enter a valid name.");
82	
83	jQuery.validator.addMethod("checkEmailExist", function(val, elm){	
84       
85        if(event && event.type!='blur'){
86				if($("#CustomerInfoEmail").length>0){
87					$("#CustomerInfoEmail").parent().next(".loader_em_pos").addClass("hide");
88				}
89				return true;
90			}else{
91				if($("#CustomerInfoEmail").length>0){
92					$("#CustomerInfoEmail").parent().next(".loader_em_pos").removeClass("hide");
93				}
94			}
95	   
96		if(signed_in == ""){
97			var isSuccess = false;
98			$.ajax({
99			    url: BASE_PATH+"/site/checkEmail",
100		        type: "post",
101		        async : false,
102		        data: {
103		        	email_id: function() {			        		
104		        		return $("#CustomerInfoEmail").val();
105		        	}
106		        },
107		        success: function (msg){		        	
108					
109						if($("#CustomerInfoEmail").length>0){
110							$("#CustomerInfoEmail").parent().next(".loader_em_pos").addClass("hide");
111						}	
112					
113					if($.trim(msg) == "false"){
114							$("#signin_otp_modal").show();
115							$(".otp_mail").html("").removeClass("error");
116							$("#ContactLoginEmailOtp").val('').hide();
117							$("#ContactLoginEmailOtp").prev().hide();
118							$(".resend_otp").hide();
119							$('#otp_counter').text('');
120							$("#ContactOtpLoginEmail-error").remove();
121							$("#ContactLoginEmailOtp-error").remove();
122							$("#ContactOtpLoginEmail").val("");
123							$(".login_otp_form_btn").show().attr("disabled",false);
124							$("#ContactSigninOtpForm .simple_security").hide();
125							if( !$('#ContactSigninOtpForm #g-recaptcha-response').length )
126								$('#ContactSigninOtpForm .simple_security').after("<input type='hidden' id='g-recaptcha-response' name='g-recaptcha-response' value=''  >");
127							reset_captcha();
128		        		isSuccess = false;
129		        	}else{
130		        		isSuccess = true;
131		        	}
132		        }
133			});
134			return isSuccess;
135		}else{
136			return true;
137		}
138	});
139	jQuery.validator.addMethod("checkPhoneExist", function(val, elm){		
140	
141		
142		if(event && event.type!='blur'){
143				if($("#CustomerInfoPhone").length>0){
144					$("#CustomerInfoPhone").parent().next(".loader_ph_pos").addClass("hide");
145				}
146				return true;
147			}else{
148				if($("#CustomerInfoPhone").length>0){
149					$("#CustomerInfoPhone").parent().next(".loader_ph_pos").removeClass("hide");
150				}
151			}		
152		
153		//if(signed_in == ""){
154			var isSuccess = false;
155			var b2b_customer_save_card_add_issue_fixing = $("#b2b_customer_save_card_add_issue_fixing").val();
156			var business_type = $("#business_type").val();
157			$.ajax({
158			    url: BASE_PATH+"/site/checkPhone",
159		        type: "post",
160		        async : false,
161		        data: {
162		        	phone_number: function() {			        		
163		        		return $("#CustomerInfoPhone").val();
164		        	}
165		        },
166		        success: function (msg){
167					
168						if($("#CustomerInfoPhone").length>0){
169							$("#CustomerInfoPhone").parent().next(".loader_ph_pos").addClass("hide");
170						}
171							
172					if($.trim(msg) == "2"){		 
173						$("#signin_signup").show();
174						isSuccess = false;
175					}else if($.trim(msg) == "false"){
176						if(b2b_customer_save_card_add_issue_fixing==1){
177							if(business_type!='b2b'){
178								$("#signin_otp_modal").show();
179								$(".otp_mail").html("").removeClass("error");
180								$("#ContactLoginEmailOtp").val('').hide();
181								$("#ContactLoginEmailOtp").prev().hide();
182								$(".resend_otp").hide();
183								$('#otp_counter').text('');
184								$("#ContactOtpLoginEmail-error").remove();
185								$("#ContactLoginEmailOtp-error").remove();
186								$("#ContactOtpLoginEmail").val("");
187								$(".login_otp_form_btn").show().attr("disabled",false);
188								$("#ContactSigninOtpForm .simple_security").hide();
189								if( !$('#ContactSigninOtpForm #g-recaptcha-response').length )
190									$('#ContactSigninOtpForm .simple_security').after("<input type='hidden' id='g-recaptcha-response' name='g-recaptcha-response' value=''  >");
191								reset_captcha();
192							}
193						}else{
194								$("#signin_otp_modal").show();
195								$(".otp_mail").html("").removeClass("error");
196								$("#ContactLoginEmailOtp").val('').hide();
197								$("#ContactLoginEmailOtp").prev().hide();
198								$(".resend_otp").hide();
199								$('#otp_counter').text('');
200								$("#ContactOtpLoginEmail-error").remove();
201								$("#ContactLoginEmailOtp-error").remove();
202								$("#ContactOtpLoginEmail").val("");
203								$(".login_otp_form_btn").show().attr("disabled",false);
204								$("#ContactSigninOtpForm .simple_security").hide();
205								if( !$('#ContactSigninOtpForm #g-recaptcha-response').length )
206									$('#ContactSigninOtpForm .simple_security').after("<input type='hidden' id='g-recaptcha-response' name='g-recaptcha-response' value=''  >");
207								reset_captcha();
208						}
209						isSuccess = false;
210					}else{
211						isSuccess = true;
212					}
213		        }
214			});
215			return isSuccess;
216		//}else{
217			//return true;
218		//}
219	});
220	// jQuery.validator.addMethod("checkFflmasking", function(val, elm){		
221	// 	var i = 0;
222	// 	val  = val.split("-");
223	// 	$.each( val, function( key, value ) {
224	// 	  	if( /[^a-zA-Z0-9]/.test( value ) ) {
225	// 	       i++;
226	// 	    }
227	// 	});
228	// 	return (i==0)?true:false;
229	// });
230
231	jQuery.validator.addMethod("checkFfl", function(val, elm){	
232		if($("#select_ffl").prop("checked")==true)
233		{
234			if($("#CustomerInfoFflId").val()!='0'){
235				return true;
236			}else{
237				return false;
238			}
239		}else{
240			return true;
241		}
242	});
243	
244       
245    
246	   	jQuery.validator.addMethod("validateShippingEmail", function(val, elm) {
247		var em = $("#CustomerInfoEmail").val();	
248		return checkValidateEmail(em);
249       	});
250	
251	//Customer Info Form
252	$("#CustomerInfoShippingForm").validate({		
253				'rules' : {
254					"data[CustomerInfo][firstName]": {
255						required : true
256					},
257					"data[CustomerInfo][lastName]": "required",
258					"data[CustomerInfo][email]": {
259						required : true,
260						email : true,
261						validateShippingEmail: true,
262						checkEmailExist : true				
263					},
264					"data[CustomerInfo][phone]" : {
265						required: true,
266						number : true,				
267				minlength: 10,
268						checkPhoneExist : true	
269					},
270					"data[CustomerInfo][address]" : "required",
271					"data[CustomerInfo][city]" : "required",
272					"data[CustomerInfo][state]" : "required",
273					
274					"data[CustomerInfo][country]" : "required",
275					"data[CustomerInfo][zip]" : {
276						required: true,
277						//number : true,
278						minlength: 4
279					},
280					"data[CustomerInfo][ffl_id]" :{
281						checkFfl:true
282					},
283					hiddenRecaptchashipping: {
284						required: function () {
285							
286								if($("#CustomerInfoShippingForm:visible #UserCaptcha").length)
287								{
288									if (grecaptcha.getResponse() == '') {
289				                        return true;
290				                    } else {
291				                        return false;
292				                    }
293				                }
294			                
295		                }
296		            }
297				},
298				'messages' : {
299					"data[CustomerInfo][firstName]": "Enter First Name",
300					"data[CustomerInfo][lastName]": "Enter Last Name",
301					"data[CustomerInfo][email]": {
302						required : 'Enter Email Address',
303						email : 'Invalid Email',
304						validateShippingEmail: 'Email not valid',
305						checkEmailExist : "Seems Like You have an Account. Kindly Sign In to Continue"
306					},
307					"data[CustomerInfo][phone]" : {
308						required: "Enter Phone Number",
309						minlength: "Enter Valid Number",
310						number : "Mobile number should contain only numbers",
311						checkPhoneExist : "This phone number already linked with another account"
312					},
313					"data[CustomerInfo][address]" : "Enter Valid Address",
314					"data[CustomerInfo][city]" : "Enter City Name",
315					"data[CustomerInfo][country]" : "Choose Country",
316					"data[CustomerInfo][state]" : "Choose State",
317					//"data[CustomerInfo][state]" : ($("#remove_duplicitous_shipping_address_step").length>0 && $("#remove_duplicitous_shipping_address_step").val()==1)?"State/Region required":"Choose State",
318					
319					"data[CustomerInfo][zip]" : {
320						required : "Enter Zipcode",
321						//number : "Invalid Zipcode",
322						minlength: "Enter Valid Zipcode"
323					},
324					"data[CustomerInfo][ffl_id]" :{
325						checkFfl:"Select FLL"
326					},
327					hiddenRecaptchashipping: {
328		                 required: "Please confirm that you are not a robot"
329		            }
330					// "data[CustomerInfo][ffl_name]" : "Enter FFL name",
331					// "data[CustomerInfo][ffl_number]" :  {
332					// 	required: "Enter Phone Number",
333					// 	checkFflmasking: "Invalid FFL Number"
334					// },
335					// "data[CustomerInfo][ffl_address]" : "Enter FFL Address"
336				}
337			});
338
339	$("#CreditCardAuthForm").validate({
340		submitHandler: function(form) {
341			
342				process_payment();
343			
344			$("#btnSubmitPay").attr("disabled", true);
345		},
346		'rules' : {
347			"data[CreditCard][cardNumber]" : {
348				required : true,
349				minlength: 13,
350				maxlength: 19,
351				validateCC: true
352			},
353			"data[CreditCard][cvv]" : {
354				required : true,
355				number : true
356			},
357			"data[CreditCard][expiry]" : {
358				required : true,
359				number : false,
360				validExpiryDate : true
361			},
362			"data[CreditCard][name]" : {
363				required : true
364			},
365			"data[CreditCard][firstName]": {
366				required : true
367			},
368			"data[CreditCard][lastName]": "required",
369			"data[CreditCard][email]": {
370				required : true,
371				email : true	
372			},
373			"data[CreditCard][address]" : "required",
374			"data[CreditCard][city]" : "required",
375			"data[CreditCard][state]" : "required",
376			"data[CreditCard][country]" : "required",
377			"data[CreditCard][phone]" : {
378				required: true,				
379				minlength: 10
380			},
381			"data[CreditCard][zip]" : {
382				required: true,
383				//number : true,
384				minlength: 4
385			}
386		},
387		'messages' : {
388			"data[CreditCard][cardNumber]" : {
389				required : "Enter Card Number",
390				minlength: "Invalid Card",
391				maxlength: "Invalid Card",
392				validateCC: "Invalid Card"
393			},
394			"data[CreditCard][cvv]" : {
395				required : "Enter CVV",
396				number : "Invalid CVV"
397			},
398			"data[CreditCard][expiry]" : {
399				required : "Enter Expiry Date",
400				validExpiryDate : "Date Format should be in mm/yy"
401			},
402			"data[CreditCard][name]" : {
403				required : "Enter Cardholder name"
404			},
405			"data[CreditCard][firstName]": "Enter Firstname",
406			"data[CreditCard][lastName]": "Enter Lastname",
407			"data[CreditCard][email]": {
408				required : 'Please enter email',
409				email : 'Invalid Email'	
410			},
411			"data[CreditCard][address]" : "Enter Valid address",
412			"data[CreditCard][city]" : "Enter city name",
413			"data[CreditCard][country]" : "Choose Country",
414			"data[CreditCard][state]" : "Choose State",
415			"data[CreditCard][phone]" : {
416				required: "Enter Phone Number",
417				minlength: "Enter Valid Number"
418			},
419			"data[CreditCard][zip]" : {
420				required : "Enter Zipcode",
421				//number : "Invalid Zipcode",
422				minlength: "Enter Valid Zipcode"
423			}
424		}
425	});
426	$("#CardConnectCreditCardAuthForm").validate({
427		submitHandler: function(form) {
428			if($("#pay_by").attr("data-action")=="cc" && parseFloat($("#amountPayable_ship").attr("data-amount"))==0)
429			{
430				
431					process_payment();
432				
433				$("#btnSubmitPay").attr("disabled", true);
434			}
435			else
436			{
437				if($('#cc_tokenizedcardnumber').val()==''){
438					$('#CreditCardccnumfield-error').html("Please enter a valid Card number");
439					$('#CreditCardccnumfield-error').css('display','block');
440					
441						$("#btnSubmitPay").attr("disabled", false);
442					
443				}else{
444					if($('#cc_iframe_token_error').val()!=''){
445						$('#CreditCardccnumfield-error').html($('#cc_iframe_token_error').val());
446						$('#CreditCardccnumfield-error').css('display','block');
447							
448							$("#btnSubmitPay").attr("disabled", false);
449						
450					}else{
451						$('#CreditCardccnumfield-error').html('');
452						$('#CreditCardccnumfield-error').css('display','none');
453							
454							process_payment();
455					
456						$("#btnSubmitPay").attr("disabled", true);
457
458					}
459				}
460			}
461		},
462		'rules' : {
463			"data[CreditCard][cardNumber]" : {
464				required : true,
465			},
466			"data[CreditCard][cvv]" : {
467				required : true,
468				number : true
469			},
470			"data[CreditCard][expiry]" : {
471				required : true,
472				validExpiryDate : true
473			},
474			"data[CreditCard][name]" : {
475				required : true
476			},
477			"data[CreditCard][firstName]": {
478				required : true
479			},
480			"data[CreditCard][lastName]": "required",
481			"data[CreditCard][email]": {
482				required : true,
483				email : true	
484			},
485			"data[CreditCard][address]" : "required",
486			"data[CreditCard][city]" : "required",
487			"data[CreditCard][state]" : "required",
488			"data[CreditCard][country]" : "required",
489			"data[CreditCard][phone]" : {
490				required: true,				
491				minlength: 10
492			},
493			"data[CreditCard][zip]" : {
494				required: true,
495				//number : true,
496				minlength: 4
497			}
498		},
499		'messages' : {
500			"data[CreditCard][cardNumber]" : {
501				required : "Enter Card Number",
502			},
503			"data[CreditCard][cvv]" : {
504				required : "Enter CVV",
505				number : "Invalid CVV"
506			},
507			"data[CreditCard][expiry]" : {
508				required : "Enter Expiry Date",
509				validExpiryDate : "Date Format should be in mm/yy"
510				
511			},
512			"data[CreditCard][name]" : {
513				required : "Enter Cardholder name"
514			},
515			"data[CreditCard][firstName]": "Enter Firstname",
516			"data[CreditCard][lastName]": "Enter Lastname",
517			"data[CreditCard][email]": {
518				required : 'Please enter email',
519				email : 'Invalid Email'	
520			},
521			"data[CreditCard][address]" : "Enter Valid address",
522			"data[CreditCard][city]" : "Enter city name",
523			"data[CreditCard][country]" : "Choose Country",
524			"data[CreditCard][state]" : "Choose State",
525			"data[CreditCard][phone]" : {
526				required: "Enter Phone Number",
527				minlength: "Enter Valid Number"
528			},
529			"data[CreditCard][zip]" : {
530				required : "Enter Zipcode",
531				//number : "Invalid Zipcode",
532				minlength: "Enter Valid Zipcode"
533			}
534		},
535		invalidHandler : function() {
536			if($('#cc_tokenizedcardnumber').val()==''){
537				$('#CreditCardccnumfield-error').html("Please enter a valid Card number");
538				$('#CreditCardccnumfield-error').css('display','block');
539					
540					$("#btnSubmitPay").attr("disabled", false);
541				
542			}else{
543				if($('#cc_iframe_token_error').val()!=''){
544					$('#CreditCardccnumfield-error').html($('#cc_iframe_token_error').val());
545					$('#CreditCardccnumfield-error').css('display','block');
546						
547						$("#btnSubmitPay").attr("disabled", false);
548					
549				}else{
550					$('#CreditCardccnumfield-error').html('');
551					$('#CreditCardccnumfield-error').css('display','none');
552				}
553			}
554		}
555	});
556
557	
558	$("#payment-form").validate({
559        submitHandler: function(form) {
560            console.log(form);
561            $("#btnSubmitPay").focus(); 
562            if($("#pay_by").attr("data-action")=="cc" && parseFloat($("#amountPayable_ship").attr("data-amount"))==0)
563            {
564            	
565					process_payment();
566				
567                $("#btnSubmitPay").attr("disabled", true);
568            }
569            else
570            {console.log(manualInputStates);
571               if(manualInputStates['cardNumber']==false  ){
572                    $('#card-errors1').html(errorInputmsg['cardNumber']);
573                     $('#card-errors1').css('display','block');
574                    $("#btnSubmitPay").attr("disabled", false);
575                }else{
576						$('#card-errors1').html('');
577                        $('#card-errors1').css('display','none');
578				}
579   				if( manualInputStates['cardExpiry']==false ){
580                    $('#card-errors3').html(errorInputmsg['cardExpiry']);
581                     $('#card-errors3').css('display','block');
582                    $("#btnSubmitPay").attr("disabled", false);
583                }else{
584						$('#card-errors3').html('');
585                        $('#card-errors3').css('display','none');
586				}
587				if( manualInputStates['cardCvc']==false  ){
588                    $('#card-errors2').html(errorInputmsg['cardCvc']);
589                     $('#card-errors2').css('display','block');
590                    $("#btnSubmitPay").attr("disabled", false);
591                }else{
592						$('#card-errors2').html('');
593                        $('#card-errors2').css('display','none');
594				}
595				if( manualInputStates['postalCode']==false){
596                    $('#card-errors4').html(errorInputmsg['postalCode']);
597                     $('#card-errors4').css('display','block');
598                    $("#btnSubmitPay").attr("disabled", false);
599                }else{
600						$('#card-errors4').html('');
601                        $('#card-errors4').css('display','none');
602				}
603				if(manualInputStates['cardNumber']==false || manualInputStates['cardExpiry']==false||manualInputStates['cardCvc']==false   || manualInputStates['postalCode']==false){
604				}else{ 
605                        
606                        $("#btnSubmitPay").attr("disabled", true);
607						handleStripeHandkeyPayment();
608                }
609            }
610        },
611        'rules' : {
612            "data[firstName]": {
613                required : true
614            },
615            "data[lastName]": "required",
616            "data[email]": {
617                required : true,
618                email : true
619            },
620            "data[address]" : "required",
621            "data[city]" : "required",
622            "data[state]" : "required",
623            "data[country]" : "required",
624            "data[phone]" : {
625                required: true,
626                minlength: 10
627            },
628            "data[zip]" : {
629                required: true,
630                //number : true,
631                minlength: 4
632            }
633        },
634        'messages' : {
635            "data[firstName]": "Enter Firstname",
636            "data[lastName]": "Enter Lastname",
637            "data[email]": {
638                required : 'Please enter email',
639                email : 'Invalid Email'
640            },
641            "data[address]" : "Enter Valid address",
642            "data[city]" : "Enter city name",
643            "data[country]" : "Choose Country",
644            "data[state]" : "Choose State",
645            "data[phone]" : {
646                required: "Enter Phone Number",
647                minlength: "Enter Valid Number"
648            },
649            "data[zip]" : {
650                required : "Enter Zipcode",
651                //number : "Invalid Zipcode",
652                minlength: "Enter Valid Zipcode"
653            }
654        },
655        invalidHandler : function() {
656        }
657    });
658	$("#TsysCreditCardAuthForm").validate({
659		submitHandler: function(form) {
660			if($("#pay_by").attr("data-action")=="cc" && parseFloat($("#amountPayable_ship").attr("data-amount"))==0)
661			{
662				
663					process_payment();
664				
665				$("#btnSubmitPay").attr("disabled", true);
666			}
667			else
668			{
669				if($('#tseptoken').val()==''){
670					$('#CreditCardtsysnumfield-error').html("Please enter a valid Card number");
671					$('#CreditCardtsysnumfield-error').css('display','block');
672					$("#btnSubmitPay").attr("disabled", false);
673				}else{ 
674						$('#CreditCardtsysnumfield-error').html('');
675						$('#CreditCardtsysnumfield-error').css('display','none');
676							
677							process_payment();
678						
679						$("#btnSubmitPay").attr("disabled", true); 
680				}
681			}
682		},
683		'rules' : {
684			"data[CreditCard][tseptoken]" : {
685				required : true,
686			}, 
687			"data[CreditCard][tsepexp_date]" : {
688				required : true, 
689			}, 
690			"data[CreditCard][firstName]": {
691				required : true
692			},
693			"data[CreditCard][lastName]": "required",
694			"data[CreditCard][email]": {
695				required : true,
696				email : true	
697			},
698			"data[CreditCard][address]" : "required",
699			"data[CreditCard][city]" : "required",
700			"data[CreditCard][state]" : "required",
701			"data[CreditCard][country]" : "required",
702			"data[CreditCard][phone]" : {
703				required: true,				
704				minlength: 10
705			},
706			"data[CreditCard][zip]" : {
707				required: true,
708				//number : true,
709				minlength: 4
710			}
711		},
712		'messages' : {
713			"data[CreditCard][cardNumber]" : {
714				required : "Enter Card Number",
715			},
716			"data[CreditCard][cvv]" : {
717				required : "Enter CVV",
718				number : "Invalid CVV"
719			},
720			"data[CreditCard][expiry]" : {
721				required : "Enter Expiry Date",
722				validExpiryDate : "Date Format should be in mm/yy"
723			},
724			"data[CreditCard][name]" : {
725				required : "Enter Cardholder name"
726			},
727			"data[CreditCard][firstName]": "Enter Firstname",
728			"data[CreditCard][lastName]": "Enter Lastname",
729			"data[CreditCard][email]": {
730				required : 'Please enter email',
731				email : 'Invalid Email'	
732			},
733			"data[CreditCard][address]" : "Enter Valid address",
734			"data[CreditCard][city]" : "Enter city name",
735			"data[CreditCard][country]" : "Choose Country",
736			"data[CreditCard][state]" : "Choose State",
737			"data[CreditCard][phone]" : {
738				required: "Enter Phone Number",
739				minlength: "Enter Valid Number"
740			},
741			"data[CreditCard][zip]" : {
742				required : "Enter Zipcode",
743				//number : "Invalid Zipcode",
744				minlength: "Enter Valid Zipcode"
745			}
746		},
747		invalidHandler : function() {
748			if($('#tseptoken').val()==''){
749				$('#CreditCardtsysnumfield-error').html("Please enter a valid Card number");
750				$('#CreditCardtsysnumfield-error').css('display','block');
751				$("#btnSubmitPay").attr("disabled", false);
752			}else{ 
753					$('#CreditCardtsysnumfield-error').html('');
754					$('#CreditCardtsysnumfield-error').css('display','none'); 
755			}
756		}
757	});
758	
759
760	try {
761		$("#CreditCardCardNumber").validateCreditCard(function(result){
762			if(result.card_type)
763			$('#CreditCardCardNumber').addClass(result.card_type.name);
764			
765			IS_CC_VALID = result.valid;
766
767			if(result.valid) {
768				$('#CreditCardCardNumber').removeClass('error');
769				$('#CreditCardCardNumber').addClass('valid');	
770			}else {
771				$('#CreditCardCardNumber').removeClass('valid');
772				$('#CreditCardCardNumber').addClass('error');
773			}
774		})
775	}catch(e) {	}
776	
777	//Sign up form validation
778	$("#LoginInfoCreateAccountForm").validate({
779		ignore: ".ignore",
780		'rules' : {
781			"data[LoginInfo][first name]": { required: true, alphanumericName: true },
782			"data[LoginInfo][last name]": { required: true, alphanumericName: true },
783			"username": {
784				required : true,
785				email : true,
786				remote: {
787				    url: $("#base_path").val()+"/site/checkEmail",
788			        type: "post",
789			        data: {
790			        	email_id: function() {
791			        		return $("#LoginInfoEmail").val();
792			        	}
793			        }
794			    }
795			},
796			"data[LoginInfo][password]" : {
797				required: true,
798				minlength: 6
799			},
800			"data[LoginInfo][password again]" :{
801				required: true,
802				match_password: true
803			},
804			"data[LoginInfo][cell]": {
805				required : true,
806				number : true,
807				minlength : 10,
808				remote: {
809				    url: $("#base_path").val()+"/site/checkPhone",
810			        type: "post",
811			        data: {
812			        	phone_number: function() {
813			        		return $("#LoginInfoCell").val();
814			        	}
815			        }
816			    }
817			},
818			hiddenRecaptcha: {
819				required: function () {
820					if ($("#sf_google_recaptcha_v3").val() == 1) {
821						return false;
822					}else{
823					if (grecaptcha.getResponse() == '') {
824                        return true;
825                    } else {
826                        return false;
827                    }
828				    }
829                }
830            }
831			
832		},
833		'messages' : {
834			"data[LoginInfo][first name]": {
835				required: "Enter Your First Name",
836				alphanumericName: "Please enter a valid first name."
837			},
838			"data[LoginInfo][last name]": {
839				required: "Enter Your Last Name",
840				alphanumericName: "Please enter a valid last name."
841			},
842			
843			"username": {
844				required : 'Please enter email',
845				email : 'Invalid Email',
846				remote : 'Email already exists'
847			},
848			"data[LoginInfo][password]" : {
849				required: 'Please enter password',
850				minlength: 'Password should contain atleast 6 characters'
851			},
852			"data[LoginInfo][password again]" : {
853				required: 'Please re-enter password',
854				match_password : 'Passwords do not match'
855			},
856			"data[LoginInfo][cell]": {
857				required : 'Please enter mobile number',
858				number : 'Mobile number should contain only numbers',
859				minlength: 'Mobile number should have at least 10 characters',
860				remote : 'Mobile number already exists'
861			},
862			hiddenRecaptcha: {
863                required: "Please confirm that you are not a robot"
864            }
865			
866		}
867	});
868
869
870
871	$("#LoginInfo1CreateAccountForm").validate({
872		
873		
874		ignore: ".ignore",
875		'rules' : {
876			"data[LoginInfo1][business name]": "required",
877			"data[LoginInfo1][first name]": { required: true, alphanumericName: true },
878			"data[LoginInfo1][head_quarters]": "required",
879			"data[LoginInfo1][precincts]": "required",
880			"data[LoginInfo1][organizations]": "required",
881			"data[LoginInfo1][last name]": { required: true, alphanumericName: true },
882			"username": {
883				required : true,
884				email : true,
885				remote: {
886				    url: $("#base_path").val()+"/site/checkEmail",
887			        type: "post",
888			        data: {
889			        	email_id: function() {
890			        		return $("#LoginInfo1Email").val();
891			        	}
892			        }
893			    }
894			},
895			"data[LoginInfo1][password]" : {
896				required: true,
897				minlength: 6
898			},
899			"data[LoginInfo1][password again]" :{
900				required: true,
901				match_password: true
902			},
903			"data[LoginInfo1][cell]": {
904				required : true,
905				number : true,
906				minlength : 10,
907				remote: {
908				    url: $("#base_path").val()+"/site/checkPhone",
909			        type: "post",
910			        data: {
911			        	phone_number: function() {
912			        		return $("#cell").val();
913			        	}
914			        }
915			    }
916			},
917
918
919		
920			
921			hiddenRecaptcha1: {
922				required: function () {
923					if ($("#sf_google_recaptcha_v3").val() == 1) {
924						return false;
925					}else{
926					if (grecaptcha.getResponse() == '') {
927                        return true;
928                    } else {
929                        return false;
930                    }
931				    }
932                }
933            }
934			
935			},
936			'messages' : {
937				"data[LoginInfo1][first name]": {
938					required: "Enter Your First Name",
939					alphanumericName: "Please enter a valid first name."
940				},
941				"data[LoginInfo1][business name]": "Enter Your business Name",
942				"data[LoginInfo1][head_quarters]": "Select Head quarters",
943				"data[LoginInfo1][precincts]": "Select Precincts",
944				"data[LoginInfo1][organizations]": "Select Organizations",
945				"data[LoginInfo1][last name]": {
946					required: "Enter Your last Name",
947					alphanumericName: "Please enter a valid last name."
948				},
949				"username": {
950					required : 'Please enter email',
951					email : 'Invalid Email',
952					remote : 'Email already exists'
953				},
954			
955
956				
957				hiddenRecaptcha1: {
958					required: "Please confirm that you are not a robot"
959				},
960			
961			}
962
963	});
964
965	//Sign in form validation
966	$("#ContactSigninForm").validate({		
967		'rules' : {						
968			"data[Contact][login_email]": {
969				required : true,
970				email : true,
971				remote: {
972				    url: $("#base_path").val()+"/site/checkContactEmail",
973			        type: "post",
974			        data: {
975			        	email_id: function() {
976			        		return $("#ContactLoginEmail").val();
977			        	}
978			        }
979			    }	
980			},
981			"data[Contact][login_password]" : {
982				required: true,				
983			}
984		},
985		'messages' : {					
986			"data[Contact][login_email]": {
987				required : 'Please enter email',
988				email : 'Invalid Email',
989				remote : 'Email does not exist'		
990			},
991			"data[Contact][login_password]" : {
992				required: 'Please enter password'
993			}		
994		}
995	});
996	// Validate ForgetPassword Form
997	$("#ContactForgetPasswordForm").validate({		
998		'rules' : {						
999			"data[Contact][contact_email]": {
1000				required : true,
1001				email : true,
1002				remote: {
1003				    url: $("#base_path").val()+"/site/checkContactEmail",
1004			        type: "post",
1005			        data: {
1006			        	email_id: function() {
1007			        		return $("#ContactContactEmail").val();
1008			        	}
1009			        }
1010			    }
1011			},
1012			hiddenRecaptchaForget: {
1013				required: function () {
1014					if ($("#sf_google_recaptcha_v3").val() == 1) {
1015						return false;
1016					}else{
1017					if (grecaptcha.getResponse() == '') {
1018                        return true;
1019                    } else {
1020                        return false;
1021                    }
1022				    }
1023                }
1024            }
1025		},
1026		'messages' : {					
1027			"data[Contact][contact_email]": {
1028				required : 'Please enter email',
1029				email : 'Invalid Email',
1030				remote: 'Email does not exist'
1031			},
1032			hiddenRecaptchaForget: {
1033                required: "Please confirm that you are not a robot"
1034            }	
1035		}
1036	});
1037	
1038	// Validate Contact Us Form
1039	$("#ContactContactUsForm").validate({
1040		ignore: ".ignore",
1041		'rules' : {	
1042			"data[Contact][name]": {
1043				required : true		
1044			},
1045			"data[Contact][email]": {
1046				required : true,
1047				email : true				
1048			},
1049			hiddenRecaptchaContactus: {
1050                required: function () {
1051					if ($("#sf_google_recaptcha_v3").val() == 1) {
1052						return false;
1053					}else{
1054                    if (grecaptcha.getResponse() == '') {
1055                        return true;
1056                    } else {
1057                        return false;
1058                    }
1059				    }
1060                }
1061            }
1062		},
1063		'messages' : {	
1064			"data[Contact][name]": {
1065				required : 'Please enter your name',
1066			},
1067			"data[Contact][email]": {
1068				required : 'Please enter your email',
1069				email : 'Invalid Email'
1070			},
1071			hiddenRecaptchaContactus: {
1072                required: "Please confirm that you are not a robot"
1073            }
1074		}
1075	});
1076	
1077	$("#ReviewProductForm").validate({
1078		submitHandler: function(form) {
1079			//Notify Alert
1080			$.notify({
1081				 title: "<strong>Review</strong> ",
1082				 icon: 'fa fa-edit',
1083				 message: "added successfully..!"
1084			},
1085			{timer: 1000,type: 'success',animate: {enter: 'animated lightSpeedIn',exit: 'animated lightSpeedOut'}});
1086			//Notify Alert
1087			//$("#preloader").attr('style','display: block');
1088			$("#submit_preview").attr("disabled",true);
1089			$("#submit_preview").val("Processing...");
1090			$.ajax({
1091	 			 url : BASE_PATH+"/api/save_review",
1092	 			 type : "post",
1093	 			 data: {form_data : $(".review-form").serialize()},
1094	 		 	 success: function (msg){
1095		 		 	 if($.trim(msg) == 1){
1096		 		 		location.reload();
1097		 		 	 }	
1098	 		 	 }
1099		 	});
1100		},
1101		ignore: ".ignore",
1102		'rules' : {	
1103			"data[Review][name]": {
1104				required : true		
1105			},
1106			"data[Review][email]": {
1107				required : true,
1108				email : true				
1109			},
1110			"data[Review][rating]": {
1111				required: true
1112			},
1113			"data[Review][review]": {
1114				required : true			
1115			},
1116			hiddenRecaptchaReview: {
1117				required : true
1118            }
1119		},
1120		'messages' : {	
1121			"data[Review][name]": {
1122				required : 'Please enter your Name',
1123			},
1124			"data[Review][email]": {
1125				required : 'Please enter your Email',
1126				email : 'Invalid Email'
1127			},
1128			"data[Review][rating]": {
1129				required : 'Please select your Rating',	
1130			},
1131			"data[Review][review]": {
1132				required : 'Please enter your Review',	
1133			},
1134			hiddenRecaptchaReview: {
1135                required: "Please confirm that you are not a robot"
1136            }
1137		}
1138	});
1139
1140
1141
1142	//GC form validation
1143	$("#gc_form").validate({		
1144		'rules' : {						
1145			"gc_to_amount": {
1146				required : true,
1147			},
1148			"gc_to_email": {
1149				required : true,
1150				email : true
1151			},
1152			"gc_from_name": {
1153				required : true,
1154			},
1155			"gc_msg": {
1156				required : true,
1157			},
1158			"gc_qty": {
1159				required : true,
1160				number: true,
1161				notEqual: '0'
1162			},
1163			"gc_delivery_date": {
1164				required : true,
1165			}
1166		},
1167		'messages' : {					
1168			"gc_to_amount": {
1169				required : 'Please choose or enter gift card amount.',
1170			},
1171			"gc_to_email": {
1172				required : 'Please enter an email for recipient',
1173				email : 'Invalid Email'
1174			},
1175			"gc_from_name": {
1176				required : 'Please enter your name',
1177			},
1178			"gc_msg": {
1179				required : 'Please enter your message',
1180			},
1181			"gc_qty": {
1182				required : 'Please enter number of quantity',
1183				number:"Please enter numbers only",
1184            	notEqual:"Quantity can not be zero"
1185			},
1186			"gc_delivery_date": {
1187				required : 'Please enter delivery date',
1188			}
1189			
1190		}
1191	});
1192
1193	// Customer Personal Info Form
1194	$("#personalInfo").validate({
1195		ignore: ".ignore",
1196		'rules' : {	
1197			"data[personalInfo][first_name]": {
1198				required : true		
1199			},
1200			"data[personalInfo][last_name]": {
1201				required : true,
1202			},
1203			"data[personalInfo][login_email]": {
1204				required : true,
1205				email : true,
1206				remote: {
1207				    url: $("#base_path").val()+"/site/checkEmail",
1208			        type: "post",
1209			        data: {
1210			        	email_id: function() {
1211			        		return $("#personalInfoLoginEmail").val();
1212			        	},
1213			        	profile_email : true
1214			        }
1215			    }
1216			},
1217			"data[personalInfo][c_login_email]": {
1218				required : true,
1219				change_match_email: true
1220			},
1221			"data[personalInfo][login_phone]": {
1222				required : true,
1223				number : true,
1224				minlength : 10,
1225				remote: {
1226				    url: $("#base_path").val()+"/site/checkPhone",
1227			        type: "post",
1228			        data: {
1229			        	phone_number: function() {
1230			        		return $("#personalInfoLoginPhone").val();
1231			        	},
1232			        	profile_phone : true
1233			        }
1234			    }
1235			},
1236			"data[personalInfo][c_login_phone]": {
1237				required : true,
1238				number : true,
1239				change_match_phone: true
1240			},
1241		},
1242		'messages' : {	
1243			"data[personalInfo][first_name]": {
1244				required : 'Please enter your first name',
1245			},
1246			"data[personalInfo][last_name]": {
1247				required : 'Please enter your last name',
1248			},
1249			"data[personalInfo][login_email]": {
1250				required : 'Please enter your email',
1251				email : 'Invalid email',
1252				remote : "Email already exists"
1253			},
1254			"data[personalInfo][c_login_email]": {
1255				required : 'Please enter your confirm email',
1256				change_match_email : 'Confirm email does not match'
1257			},
1258			"data[personalInfo][login_phone]": {
1259				required : 'Please enter your mobile number',
1260				number : 'Invalid mobile number',
1261				minlength : "Mobile number should have at least 10 characters",
1262				remote : "Mobile number already exists"
1263			},
1264			"data[personalInfo][c_login_phone]": {
1265				required : 'Please enter your confirm mobile number',
1266				number : 'Invalid mobile number',
1267				change_match_phone : 'Confirm mobile number does not match'
1268			},
1269		}
1270	});
1271
1272
1273	
1274		jQuery.validator.addMethod("validatePersonalEmail", function(val, elm) {
1275			var em = $("#personalInfoLoginEmail").val();	
1276			return checkValidateEmail(em);
1277		});
1278	
1279	jQuery.validator.addMethod("change_match_email", function(val, elm) {
1280		if($("#personalInfoLoginEmail").val() == $("#personalInfoCLoginEmail").val()){
1281			return true;
1282		}else{
1283			return false;
1284		}
1285	});
1286	jQuery.validator.addMethod("change_match_phone", function(val, elm) {
1287		if($("#personalInfoLoginPhone").val() == $("#personalInfoCLoginPhone").val()){
1288			return true;
1289		}else{
1290			return false;
1291		}
1292	});
1293	// Change Password Form
1294	$("#changePassword").validate({
1295		ignore: ".ignore",
1296		'rules' : {	
1297			"data[changePassword][current_password]": {
1298				required : true,
1299				minlength: 6,
1300				remote: {
1301				    url: $("#base_path").val()+"/api/checkContactPassword",
1302			        type: "post",
1303			        data: {
1304			        	current_password: function() {
1305			        		return $("#changePasswordCurrentPassword").val();
1306			        	}
1307			        }
1308			    }		
1309			},
1310			"data[changePassword][new_password]": {
1311				required : true,
1312				minlength: 6
1313			},
1314			"data[changePassword][confirm_password]": {
1315				required : true,
1316				minlength: 6,
1317				change_match_password: true
1318			}
1319		},
1320		'messages' : {	
1321			"data[changePassword][current_password]": {
1322				required : 'Please enter your current password',
1323				minlength: 'Password should contain atleast 6 characters',
1324				remote	 : 'Incorrect old password'
1325			},
1326			"data[changePassword][new_password]": {
1327				required : 'Please enter your new password',
1328				minlength: 'Password should contain atleast 6 characters'
1329			},
1330			"data[changePassword][confirm_password]": {
1331				required : 'Please enter your confirm password',
1332				minlength: 'Password should contain atleast 6 characters',
1333				change_match_password : 'Confirm Password do not match'
1334			}
1335		}
1336	});
1337	jQuery.validator.addMethod("change_match_password", function(val, elm) {
1338		if($("#changePasswordNewPassword").val() == $("#changePasswordConfirmPassword").val()){
1339			return true;
1340		}else{
1341			return false;
1342		}
1343	});
1344
1345	//Address Info Form
1346	$("#ContactAddress").validate({		
1347		'rules' : {
1348			"data[ContactAddress][ship_to]": "required",
1349			"data[ContactAddress][bill_to]": "required",
1350			"data[ContactAddress][street1]": "required",
1351			"data[ContactAddress][city]" : "required",
1352			"data[ContactAddress][state]" : "required",
1353			"data[ContactAddress][country]" : "required",
1354			"data[ContactAddress][phone]" : {
1355				required: true,				
1356				minlength: 10
1357			},
1358			"data[ContactAddress][zip_code]" : {
1359				required: true,
1360				minlength: 4
1361			}
1362		},
1363		'messages' : {
1364			"data[ContactAddress][ship_to]": "Enter Ship to name",
1365			"data[ContactAddress][bill_to]": "Enter Bill to name",
1366			"data[ContactAddress][street1]": "Enter Address",
1367			"data[ContactAddress][city]" : "Enter City Name",
1368			"data[ContactAddress][country]" : "Choose Country",
1369			"data[ContactAddress][state]" : "Choose State",
1370			"data[ContactAddress][phone]" : {
1371				required: "Enter Phone Number",
1372				minlength: "Enter Valid Number"
1373			},
1374			"data[ContactAddress][zip_code]" : {
1375				required : "Enter Zipcode",
1376				//number : "Invalid Zipcode",
1377				minlength: "Enter Valid Zipcode"
1378			}
1379		}
1380	});
1381
1382
1383		//Sign in otp form validation
1384		$("#ContactSigninOtpForm").validate({		
1385			'rules' : {
1386				"data[Contact][login_email]": {
1387					required : true
1388				},						
1389				"data[Contact][login_email_otp]": {
1390					required : true,
1391					number : true,
1392					minlength: 6,
1393					remote: {
1394						url: $("#base_path").val()+"/api/checkContactOtp",
1395						type: "post",
1396						data: {
1397							otp: function() {
1398								return $("#ContactLoginEmailOtp").val();
1399							},
1400							email: function() {
1401								return $("#ContactOtpLoginEmail").val();
1402							}
1403						}
1404					}	
1405				},
1406				"data[User][captcha]": {
1407					required : true
1408				},
1409			},
1410			'messages' : {
1411				"data[Contact][login_email]": {
1412					required : 'Please enter email/mobile number'
1413				},					
1414				"data[Contact][login_email_otp]": {
1415					required : 'Please enter OTP',
1416					number : "Invalid OTP/Email/Mobile Number",
1417					minlength: "Enter Valid OTP",
1418					remote : 'Incorrect OTP/Email/Mobile Number'		
1419				},
1420				"data[User][captcha]": {
1421					required : "Please enter the security code"
1422				},		
1423			}
1424		});
1425
1426
1427
1428
1429
1430		// Avalara related
1431		
1432			var validatorP = $("#personalInfo").validate(); 
1433			if (validatorP) {
1434				validator.settings.messages["data[personalInfo][login_email]"] = {
1435					validatePersonalEmail: "Email not valid"
1436				};
1437				$("input[name='data[personalInfo][login_email]']").rules("add", {
1438					validatePersonalEmail: true,
1439					messages: {
1440						validatePersonalEmail: "Email not valid"
1441					}
1442				});
1443			}
1444			var validatorC = $("#CustomerInfoShippingForm").validate(); 
1445			if (validatorC) {
1446			$("input[name='data[CustomerInfo][state1]']").rules("add", {
1447				required: true, 
1448				messages: {
1449					required: "Choose State"
1450				}
1451			});
1452			}
1453		
1454
1455});
1456
1457jQuery.validator.addMethod("notEqual", function (value, element, param) { // Adding rules for Amount(Not equal to zero)
1458    return this.optional(element) || value != '0';
1459});
1460
1461
1462function checkValidateEmail(em){
1463
1464	if(em!=''){
1465		var regex = /(\.\.)/g;  // For Double Dot like '..'
1466		var em_result = regex.test(em);
1467		var regex1 = /^^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/g;
1468		var em_result1 = regex1.test(em);
1469		if (em_result==false && em_result1 == true) {
1470			return true;
1471		} else {
1472			return false;
1473		}
1474	}else{
1475		return false;
1476	}
1477
1478}
1479
1480// Change ResetPasswordResetPasswordForm Form
1481$("#ResetPasswordResetPasswordForm").validate({
1482	ignore: ".ignore",
1483	'rules' : {	
1484		"data[ResetPassword][password]": {
1485			required : true,
1486			minlength: 6,
1487		},
1488		"data[ResetPassword][confirm_password]": {
1489			required : true,
1490			minlength: 6,
1491			change_match_reset_password: true
1492		}
1493	},
1494	'messages' : {	
1495		"data[ResetPassword][password]": {
1496			required : 'Please enter your current password',
1497			minlength: 'Password should contain at least 6 characters'			
1498		},
1499		"data[ResetPassword][confirm_password]": {
1500			required : 'Please enter your confirm password',
1501			minlength: 'Password should contain at least 6 characters',
1502			change_match_reset_password : 'Confirm Password do not match'
1503		}
1504	}
1505});
1506jQuery.validator.addMethod("change_match_reset_password", function(val, elm) {
1507	if($("#ResetPasswordPassword").val() == $("#ResetPasswordConfirmPassword").val()){
1508		return true;
1509	}else{
1510		return false;
1511	}
1512});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.