PageSourceSearch

https://briskstar.com/wp-content/themes/briskstar/js/all_form_validation.js?ver=1791260218

js briskstar.com collected 2026-10-06 04:17:21 UTC 92,948 bytes, 2,718 lines download raw bytes

1var ftr_form; // footer form
2var sp_form; // start a project form
3var inquiry_frm; // contact us page form
4var career_frm_one; // career page 1st from
5var career_frm_sec; // career page 2nd form
6var home_pg_popup; // Home page main popup
7var book_frm; // Product book a demo form
8var shake_form; // Shake inquiry form
9var referral_form; // Referral Form
10var eBook_form; // eBook Form
11let formSubmitted = false; // Variable to track form submission
12
13var CaptchaCallback = function () {
14  if (jQuery("#RecaptchaField1").length) {
15    ftr_form = grecaptcha.render("RecaptchaField1", {
16      sitekey: "6LfjgLInAAAAAAJUw2q4d6NwGd1NQM0oQ5mVgoM_",
17      callback: correctCaptcha_quote,
18    });
19  }
20
21  if (jQuery("#RecaptchaField2").length) {
22    sp_form = grecaptcha.render("RecaptchaField2", {
23      sitekey: "6LfjgLInAAAAAAJUw2q4d6NwGd1NQM0oQ5mVgoM_",
24      callback: correctCaptcha_startproject,
25    });
26  }
27
28  if (jQuery("#RecaptchaField4").length) {
29    career_frm_one = grecaptcha.render("RecaptchaField4", {
30      sitekey: "6LfjgLInAAAAAAJUw2q4d6NwGd1NQM0oQ5mVgoM_",
31      callback: correctCaptcha_cerrerone,
32    });
33  }
34  if (jQuery("#RecaptchaField5").length) {
35    career_frm_sec = grecaptcha.render("RecaptchaField5", {
36      sitekey: "6LfjgLInAAAAAAJUw2q4d6NwGd1NQM0oQ5mVgoM_",
37      callback: correctCaptcha_seccereer,
38    });
39  }
40  if (jQuery("#RecaptchaField6").length) {
41    home_pg_popup = grecaptcha.render("RecaptchaField6", {
42      sitekey: "6LfjgLInAAAAAAJUw2q4d6NwGd1NQM0oQ5mVgoM_",
43      callback: correctCaptcha_popuphome,
44    });
45  }
46
47  if (jQuery("#RecaptchaField7").length) {
48    inquiry_frm = grecaptcha.render("RecaptchaField7", {
49      sitekey: "6LfjgLInAAAAAAJUw2q4d6NwGd1NQM0oQ5mVgoM_",
50      callback: correctCaptcha_inqreach,
51    });
52  }
53
54  if (jQuery("#RecaptchaField8").length) {
55    book_frm = grecaptcha.render("RecaptchaField8", {
56      sitekey: "6LfjgLInAAAAAAJUw2q4d6NwGd1NQM0oQ5mVgoM_",
57      callback: correctCaptcha_bookprod,
58    });
59  }
60
61  if (jQuery("#RecaptchaFieldShake").length) {
62    shake_form = grecaptcha.render("RecaptchaFieldShake", {
63      sitekey: "6LfjgLInAAAAAAJUw2q4d6NwGd1NQM0oQ5mVgoM_",
64      callback: correctCaptcha_common_shake,
65    });
66  }
67
68  if (jQuery("#RecaptchaFieldeBook").length) {
69    eBook_form = grecaptcha.render("RecaptchaFieldeBook", {
70      sitekey: "6LfjgLInAAAAAAJUw2q4d6NwGd1NQM0oQ5mVgoM_",
71      callback: correctCaptcha_common_eBook,
72    });
73  }
74
75  if (jQuery("#ReferralRecaptchaField").length) {
76    referral_form = grecaptcha.render("ReferralRecaptchaField", {
77      sitekey: "6LfjgLInAAAAAAJUw2q4d6NwGd1NQM0oQ5mVgoM_",
78      callback: correctCaptcha_common_referral,
79    });
80  }
81
82};
83
84var correctCaptcha_quote = function (response) {
85  if (response) {
86    // console.log(response);
87    jQuery("#qt_hiddenRecaptcha").val("1");
88  }
89};
90var correctCaptcha_startproject = function (response) {
91  if (response) {
92    // console.log(response);
93    jQuery("#ct_hiddenRecaptcha").val("1");
94  }
95};
96
97var correctCaptcha_cerrerone = function (response) {
98  if (response) {
99    //console.log(response);
100    jQuery("#cerone_hiddenRecaptcha").val("1");
101  }
102};
103
104var correctCaptcha_seccereer = function (response) {
105  if (response) {
106    //console.log(response);
107    jQuery("#cersec_hiddenRecaptcha").val("1");
108  }
109};
110
111var correctCaptcha_popuphome = function (response) {
112  if (response) {
113    //console.log(response);
114    jQuery("#hpcpt_hiddenRecaptcha").val("1");
115  }
116};
117
118var correctCaptcha_inqreach = function (response) {
119  if (response) {
120    //console.log(response);
121    jQuery("#inquirfrm_hiddenRecaptcha").val("1");
122  }
123};
124
125var correctCaptcha_bookprod = function (response) {
126  if (response) {
127    //console.log(response);
128    jQuery("#prod_book_hiddenRecaptcha").val("1");
129  }
130};
131
132var correctCaptcha_common_shake = function (response) {
133  if (response) {
134    //console.log(response);
135    jQuery("#shake_hiddenRecaptcha").val("1");
136  }
137};
138
139var correctCaptcha_common_eBook = function (response) {
140  if (response) {
141    //console.log(response);
142    jQuery("#ebook_hiddenRecaptcha").val("1");
143  }
144};
145
146var correctCaptcha_common_referral = function (response) {
147  if (response) {
148    //console.log(response);
149    jQuery("#referralcpt_hiddenRecaptcha").val("1");
150  }
151};
152
153jQuery(document).ready(function ($) {
154  jQuery(".loader").hide();
155  // Custom email validation method using regex
156  $.validator.addMethod(
157    "emailRegex",
158    function (value, element) {
159      return (
160        this.optional(element) ||
161        /^[a-zA-Z0-9.\-]+@[a-zA-Z0-9\-]+(\.[a-zA-Z]{2,})+$/i.test(value)
162      );
163    },
164    "Please enter a valid email address"
165  );
166
167  $.validator.addMethod(
168    "validExperience",
169    function (value, element) {
170      return this.optional(element) || /^\d{1,2}(\.\d{1,2})?$/i.test(value);
171    },
172    "Only numeric is allowed (E.g. 02.05)"
173  );
174
175  // Add a custom method for file size validation
176  $.validator.addMethod(
177    "fileSize",
178    function (value, element, param) {
179      return this.optional(element) || element.files[0].size <= param;
180    },
181    "Please upload a file with a maximum size of {0}MB"
182  );
183
184  // Add a custom method for file type validation
185  $.validator.addMethod(
186    "fileType",
187    function (value, element, param) {
188      // Check if the input file is empty
189      if (element.files.length === 0) {
190        // Return true to indicate that validation should pass
191        return true;
192      }
193      // Get the file extension
194      var extension = value.split(".").pop().toLowerCase();
195
196      // Check if the file extension is allowed
197      var allowedTypes = param.split(",");
198      if (allowedTypes.indexOf(extension) === -1) {
199        return false;
200      }
201
202      return true;
203    },
204    "Please upload a PDF or DOC file"
205  );
206
207  // Footer form
208  jQuery(document).on("click", ".footer_contact_form", function () {
209    // jQuery('.loader').show();
210    jQuery("#footerForm").validate({
211      ignore: ":hidden:not(.footer_hide_capt)",
212      rules: {
213        yourname: {
214          required: true,
215          minlength: 3,
216          maxlength: 50,
217        },
218        youremail: {
219          required: true,
220          email: true,
221          emailRegex: true,
222          minlength: 10,
223          maxlength: 50,
224        },
225        phone: {
226          minlength: 7,
227          maxlength: 13,
228          number: true,
229        },
230        yourcompany: {
231          //required: true,
232          minlength: 3,
233          maxlength: 50,
234        },
235        your_message: {
236          minlength: 10,
237          /* maxlength: 500, */
238        },
239        acceptance_105: {
240          required: true,
241        },
242        qt_hiddenRecaptcha: {
243          required: true,
244        },
245      },
246      messages: {
247        yourname: {
248          required: "Your name is required",
249          minlength: "Your name must be at least 3 characters",
250          maxlength: "Your name should not be greater than 50 characters",
251        },
252        youremail: {
253          required: "Email is required",
254          email: "Please enter a valid email address",
255          emailRegex: "Please enter a valid email address",
256          minlength: "Email must be at least 10 characters",
257          maxlength: "Email should not be greater than 50 characters",
258        },
259        phone: {
260          minlength: "Phone number must be at least 7 digits",
261          maxlength: "Phone number should not be greater than 13 digits",
262          number: "Please enter a valid phone number",
263        },
264        yourcompany: {
265          //required: "Company name is required",
266          minlength: "Company name must be at least 3 characters",
267          maxlength: "Company name should not be greater than 50 characters",
268        },
269        your_message: {
270          minlength: "Project description must be at least 10 characters",
271          /* maxlength:
272            "Project description should not be greater than 500 characters", */
273        },
274        acceptance_105: {
275          required:
276            "You must accept the privacy policy before sending your message",
277        },
278        qt_hiddenRecaptcha: {
279          required: "reCAPTCHA is required",
280        },
281      },
282      submitHandler: function (form, e) {
283        e.preventDefault();
284
285        var f_id = jQuery(".footer_contact_form").closest("form").attr("id");
286        var formData = jQuery(form).serialize();
287        var recaptchaResponse = grecaptcha.getResponse(ftr_form);
288        if (recaptchaResponse === "") {
289          jQuery('.capt_error').html("reCAPTCHA expired or not solved");
290          return false;
291        }
292        else {
293          jQuery('.capt_error').html("");
294        }
295
296        $.ajax({
297          url: my_ajax_object.ajax_url,
298          type: "POST",
299          data: {
300            action: "save_contact_form_data",
301            formData: formData,
302            f_id: f_id,
303          },
304          beforeSend: function () {
305            jQuery(".loader").show();
306            jQuery('.footer_contact_form').prop('disabled', true);
307          },
308          success: function (response) {
309            var responseData = JSON.parse(response);
310            console.log(responseData);
311            if (responseData.success == true) {
312              var ftr_res_status = responseData.status;
313              rediectThankyouPage();
314              jQuery(".loader").hide();
315              jQuery(".footer_contact_form")
316                .closest("div")
317                .find(".status_msg")
318                .html(ftr_res_status);
319
320              setTimeout(function () {
321                jQuery("#footerForm").trigger("reset");
322                jQuery(".status_msg").hide();
323                jQuery("#selectPhoneFlag").val("");
324                jQuery('.footer_contact_form').prop('disabled', false);
325                jQuery('.form-group').find('.error-message').html('');
326                jQuery(".status_msg").html('');
327              }, 5000); // 5 seconds
328              grecaptcha.reset();
329              jQuery(".status_msg").show();
330            } else {
331              // Error handling
332              var errors = responseData.errors;
333              // Display errors below the input fields
334              for (var field in errors) {
335                if (errors.hasOwnProperty(field)) {
336                  var errorMessage = errors[field];
337                  jQuery("#" + field)
338                    .closest("div")
339                    .find(".error-message")
340                    .html(errorMessage);
341
342                  jQuery('#youremail').keyup(function () {
343                    jQuery(this).closest('.form-group').find('.error-message').html('');
344                  });
345                  jQuery('.footer_contact_form').prop('disabled', false);
346
347                }
348              }
349            }
350          },
351          error: function (xhr, status, error) {
352            console.log(xhr.responseText);
353          },
354          complete: function () {
355            jQuery(".loader").hide();
356          },
357        });
358      },
359    });
360  });
361
362  // Start a project from
363  jQuery(document).on("click", ".quote_form_custom", function () {
364    jQuery("#fno_751_request_quote_form").validate({
365      ignore: ":hidden:not(.sp_hide_cpt)",
366      rules: {
367        qut_f_name: {
368          required: true,
369          minlength: 3,
370          maxlength: 50,
371        },
372        qut_email: {
373          required: true,
374          email: true,
375          emailRegex: true,
376          minlength: 5,
377          maxlength: 50,
378        },
379        req_phone: {
380          minlength: 7,
381          maxlength: 13,
382          number: true,
383        },
384        company_name: {
385          minlength: 3,
386          maxlength: 50,
387        },
388        qut_project_msg: {
389          required: true,
390          minlength: 10,
391          /* maxlength: 500, */
392        },
393        sp_file_upload: {
394          // required: true,
395          fileSize: 5242880,
396          fileType: "pdf,docx,doc",
397        },
398        acceptance_712: {
399          required: true,
400        },
401        ct_hiddenRecaptcha: {
402          required: true,
403        },
404      },
405      messages: {
406        qut_f_name: {
407          required: "Your name is required",
408          minlength: "Your name must be at least 3 characters",
409          maxlength: "Your name should not be greater than 50 characters",
410        },
411        qut_email: {
412          required: "Email is required",
413          email: "Please enter a valid email address",
414          emailRegex: "Please enter a valid email address",
415          minlength: "Email must be at least 5 characters",
416          maxlength: "Email should not be greater than 50 characters",
417        },
418        req_phone: {
419          minlength: "Phone number must be at least 7 digits",
420          maxlength: "Phone number should not be greater than 13 digits",
421          number: "Please enter a valid phone number",
422        },
423        company_name: {
424          minlength: "Company name must be at least 3 characters",
425          maxlength: "Company name should not be greater than 50 characters",
426        },
427        qut_project_msg: {
428          required: "Project description is required",
429          minlength: "Project description must be at least 10 characters",
430          /* maxlength:
431            "Project description should not be greater than 500 characters", */
432        },
433        sp_file_upload: {
434          // required: "Upload file is required",
435          fileSize: "Please upload a file with a maximum size of 5MB",
436          fileType: "Please upload a PDF or DOC file",
437        },
438        acceptance_712: {
439          required:
440            "You must accept the privacy policy before sending your message",
441        },
442        ct_hiddenRecaptcha: {
443          required: "reCAPTCHA is required",
444        },
445      },
446      submitHandler: function (form, e) {
447        e.preventDefault();
448
449        var sp_recaptchaResponse = grecaptcha.getResponse(sp_form);
450        if (sp_recaptchaResponse === "") {
451          jQuery('.capt_error_st').html("reCAPTCHA expired or not solved");
452          return false;
453        }
454        else {
455          jQuery('.capt_error_st').html("");
456        }
457
458        var sp_form_id = jQuery(".quote_form_custom").closest("form").attr("id");
459        var start_prj_formData = new FormData(
460          document.getElementById("fno_751_request_quote_form")
461        );
462        var start_pr_fileInput = document.getElementById("sp_file_upload");
463        var start_pr_file = start_pr_fileInput.files[0];
464        start_prj_formData.append("image", start_pr_file);
465        start_prj_formData.append("sp_form_id", sp_form_id);
466        start_prj_formData.append("action", "start_project_form");
467
468        $.ajax({
469          url: my_ajax_object.ajax_url,
470          type: "POST",
471          dataType: "json",
472          data: start_prj_formData,
473          cache: false,
474          processData: false,
475          contentType: false,
476          beforeSend: function () {
477            jQuery(".loader").show();
478            jQuery('.quote_form_custom').prop('disabled', true);
479          },
480          success: function (response) {
481            var responseData_sproj = response;
482            console.log(responseData_sproj);
483            if (responseData_sproj.success == true) {
484              var spr_res_status = responseData_sproj.status;
485              console.log(spr_res_status);
486              jQuery(".loader").hide();
487
488              /* jQuery(".quote_form_custom")
489                .closest("div")
490                .find(".status_msg_sp")
491                .html(spr_res_status); */
492              rediectThankyouPage();
493              setTimeout(function () {
494                jQuery("#fno_751_request_quote_form").trigger("reset");
495                jQuery(".status_msg_sp").hide();
496                jQuery("#selectPhoneFlag").val("");
497                jQuery("#sp_file_upload").val("");
498                jQuery(".service_select2").val(null).trigger("change");
499                jQuery(".change_f_name").html("Upload File*");
500                jQuery("#request_quote_popup").modal("hide");
501                jQuery(".file_closed_name").attr("style", "display:none");
502                jQuery(".quote_form_custom").prop('disabled', false);
503                jQuery(".other_service_txt").attr("style", "display:none");
504                jQuery(".hide_def_file_sap").attr("style", "display:none");
505                jQuery(".hide_def_file_sap").removeClass("file_success");
506                jQuery('.quote_form_custom').prop('disabled', false);
507                jQuery(".hide_sap_after_upload").removeAttr("style", "display:none");
508                jQuery('.add_error_msg_sap').html('');
509                jQuery('.error-message').html('');
510                jQuery(".status_msg_sp").html('');
511              }, 5000); // 5 seconds
512              grecaptcha.reset();
513              /* jQuery(".status_msg_sp").show(); */
514            } else {
515              // Error handling
516              var errors = responseData_sproj.errors;
517              // Display errors below the input fields
518              for (var field in errors) {
519                if (errors.hasOwnProperty(field)) {
520                  var errorMessage = errors[field];
521                  jQuery("#" + field)
522                    .closest("div")
523                    .find(".error-message")
524                    .html(errorMessage);
525
526                  jQuery('#qut_email').keyup(function () {
527                    jQuery(this).closest('.input-group').find('.error-message').html('');
528                  });
529
530                  jQuery(".quote_form_custom").prop('disabled', false);
531                }
532              }
533            }
534          },
535          error: function (xhr, status, error) {
536            console.log(xhr.responseText);
537          },
538          complete: function () {
539            jQuery(".loader").hide();
540          },
541        });
542      },
543    });
544  });
545
546  // Contact Us Page Inquiry Form
547  jQuery(document).on("click", ".contact_page_form", function ($) {
548    jQuery("#inquiry_cu_form_359").validate({
549      ignore: ":hidden:not(.hide_cpt_inquiry)",
550      rules: {
551        first_name: {
552          required: true,
553          minlength: 3,
554          maxlength: 25,
555        },
556        last_name: {
557          required: true,
558          minlength: 3,
559          maxlength: 25,
560        },
561        your_email: {
562          required: true,
563          email: true,
564          emailRegex: true,
565          minlength: 5,
566          maxlength: 50,
567        },
568        phone_number: {
569          minlength: 7,
570          maxlength: 13,
571          number: true,
572        },
573        cu_company_name: {
574          minlength: 3,
575          maxlength: 50,
576        },
577        skype: {
578          minlength: 5,
579          maxlength: 50,
580        },
581        cu_project_description: {
582          minlength: 10,
583          /* maxlength: 500, */
584        },
585        inquirfrm_hiddenRecaptcha: {
586          required: true,
587        },
588      },
589      messages: {
590        first_name: {
591          required: "First name is required",
592          minlength: "First name must be at least 3 characters",
593          maxlength: "First name should not be greater than 25 characters",
594        },
595        last_name: {
596          required: "Last name is required",
597          minlength: "Last name must be at least 3 characters",
598          maxlength: "Last name should not be greater than 25 characters",
599        },
600        your_email: {
601          required: "Email is required",
602          email: "Please enter a valid email address",
603          emailRegex: "Please enter a valid email address",
604          minlength: "Email must be at least 5 characters",
605          maxlength: "Email should not be greater than 50 characters",
606        },
607        phone_number: {
608          minlength: "Phone number must be at least 7 digits",
609          maxlength: "Phone number should not be greater than 13 digits",
610          number: "Please enter a valid phone number",
611        },
612        cu_company_name: {
613          minlength: "Company name must be at most 3 characters",
614          maxlength: "Company name should not be greater than 50 characters",
615        },
616        skype: {
617          minlength: "Skype must be at most 5 characters",
618          maxlength: "Skype should not be greater than 50 characters",
619        },
620        cu_project_description: {
621          minlength: "Project description must be at most 10 characters",
622          /* maxlength:
623            "Project description should not be greater than 500 characters", */
624        },
625        inquirfrm_hiddenRecaptcha: {
626          required: "reCAPTCHA is required",
627        },
628      },
629      submitHandler: function (form, e) {
630        e.preventDefault();
631        var cu_recaptchaResponse = grecaptcha.getResponse(inquiry_frm);
632        if (cu_recaptchaResponse === "") {
633          jQuery('.capt_error_inq').html("reCAPTCHA expired or not solved");
634          return false;
635        }
636        else {
637          jQuery('.capt_error_inq').html("");
638        }
639
640        var inq_form_id = jQuery(".contact_page_form")
641          .closest("form")
642          .attr("id");
643        var cu_page_formData = jQuery(form).serialize();
644
645        jQuery.ajax({
646          url: my_ajax_object.ajax_url,
647          type: "POST",
648          data: {
649            action: "inquiry_contact_us_page",
650            cu_page_formData: cu_page_formData,
651            inq_form_id: inq_form_id,
652          },
653          beforeSend: function () {
654            jQuery(".loader").show();
655            jQuery('.contact_page_form').prop('disabled', true);
656          },
657          success: function (response) {
658            console.log(response);
659            var responseData_inq = JSON.parse(response);
660            console.log(responseData_inq);
661            if (responseData_inq.success == true) {
662              var inq_res_status = responseData_inq.status;
663              console.log(inq_res_status);
664              jQuery(".loader").hide();
665              rediectThankyouPage();
666              setTimeout(function () {
667                jQuery("#inquiry_cu_form_359").trigger("reset");
668                jQuery(".status_msg_inq").hide();
669                jQuery("#selectPhoneFlag").val("");
670                jQuery('.contact_page_form').prop('disabled', false);
671                jQuery(".status_msg_inq").html('');
672              }, 5000); // 5 seconds
673              grecaptcha.reset();
674              jQuery(".status_msg_inq").show();
675
676              jQuery(".contact_page_form")
677                .closest("div")
678                .find(".status_msg_inq")
679                .html(inq_res_status);
680              jQuery('.error-message').html('');
681            } else {
682              // Error handling
683              var errors = responseData_inq.errors;
684              // Display errors below the input fields
685              for (var field in errors) {
686                if (errors.hasOwnProperty(field)) {
687                  var errorMessage = errors[field];
688                  jQuery("#" + field)
689                    .closest("div")
690                    .find(".error-message")
691                    .html(errorMessage);
692                  jQuery('.contact_page_form').prop('disabled', false);
693                }
694              }
695            }
696          },
697          error: function (xhr, status, error) {
698            console.log(xhr.responseText);
699          },
700          complete: function () {
701            jQuery(".loader").hide();
702          },
703        });
704      },
705    });
706  });
707
708  // Home page popup Form
709  jQuery(document).on("click", ".home_main_popup", function () {
710    jQuery("#home_popup").validate({
711      ignore: ":hidden:not(.home_hide_cpt)",
712      rules: {
713        yourname_frm: {
714          required: true,
715          minlength: 3,
716          maxlength: 50,
717        },
718        email_frm: {
719          required: true,
720          email: true,
721          emailRegex: true,
722          minlength: 5,
723          maxlength: 50,
724        },
725        phone_frm: {
726          minlength: 7,
727          maxlength: 13,
728          number: true,
729        },
730        service_frm: {
731          minlength: 2,
732          maxlength: 50,
733        },
734        msg_frm: {
735          minlength: 10,
736          /* maxlength: 500, */
737        },
738        acceptance_712: {
739          required: true,
740        },
741        hpcpt_hiddenRecaptcha: {
742          required: true,
743        },
744      },
745      messages: {
746        yourname_frm: {
747          required: "Your first name is required",
748          minlength: "Your first name must be at most 3 characters",
749          maxlength: "Your first name should not be greater than 50 characters",
750        },
751        email_frm: {
752          required: "Email is required",
753          email: "Please enter a valid email address",
754          emailRegex: "Please enter a valid email address",
755          minlength: "Email must be at most 5 characters",
756          maxlength: "Email should not be greater than 50 characters",
757        },
758        phone_frm: {
759          minlength: "Phone number must be at most 7 digits",
760          maxlength: "Phone number should not be greater than 13 digits",
761          number: "Please enter a valid phone number",
762        },
763        service_frm: {
764          minlength: "Interested service must be at most 2 characters",
765          maxlength:
766            "Interested service should not be greater than 50 characters",
767        },
768        msg_frm: {
769          minlength: "Project description must be at most 10 characters",
770          /* maxlength:
771            "Project description should not be greater than 500 characters", */
772        },
773        acceptance_712: {
774          required:
775            "You must accept the privacy policy before sending your message",
776        },
777        hpcpt_hiddenRecaptcha: {
778          required: "reCAPTCHA is required",
779        },
780      },
781      submitHandler: function (form, e) {
782        e.preventDefault();
783        var hp_recaptchaResponse = grecaptcha.getResponse(home_pg_popup);
784        if (hp_recaptchaResponse === "") {
785          jQuery('.capt_error_hp').html("reCAPTCHA expired or not solved");
786          return false;
787        } else {
788          jQuery('.capt_error_hp').html("");
789        }
790
791        var hp_id = jQuery(".home_main_popup").closest("form").attr("id");
792        var main_home_popup_formData = jQuery(form).serialize();
793
794        $.ajax({
795          url: my_ajax_object.ajax_url,
796          type: "POST",
797          data: {
798            action: "main_home_popup_form",
799            main_home_popup_formData: main_home_popup_formData,
800            hp_id: hp_id,
801          },
802          beforeSend: function () {
803            jQuery(".loader").show();
804            jQuery('.home_main_popup').prop('disabled', true);
805          },
806          success: function (response) {
807            var responseData_hp = JSON.parse(response);
808            console.log(responseData_hp);
809            if (responseData_hp.success == true) {
810              var hp_res_status = responseData_hp.status;
811              console.log(hp_res_status);
812              jQuery(".loader").hide();
813
814              jQuery(".home_main_popup")
815                .closest("div")
816                .find(".status_msg_home")
817                .html(hp_res_status);
818              rediectThankyouPage();
819              setTimeout(function () {
820                jQuery("#home_popup").trigger("reset");
821                jQuery(".status_msg_home").hide();
822                jQuery("#selectPhoneFlag").val("");
823                jQuery("#staticBackdrop_request_quote_home").modal("hide");
824                jQuery('.home_main_popup').prop('disabled', false);
825                jQuery('.error-message').html('');
826                jQuery(".status_msg_home").html('');
827              }, 5000); // 5 seconds
828              grecaptcha.reset();
829              jQuery(".status_msg_home").show();
830            } else {
831              // Error handling
832              var errors = responseData_hp.errors;
833              // Display errors below the input fields
834              for (var field in errors) {
835                if (errors.hasOwnProperty(field)) {
836                  var errorMessage = errors[field];
837                  jQuery("#" + field)
838                    .closest("div")
839                    .find(".error-message")
840                    .html(errorMessage);
841
842                  jQuery('#email_frm').keyup(function () {
843                    jQuery(this).closest('.from-row').find('.error-message').html('');
844                  });
845
846                  jQuery('.home_main_popup').prop('disabled', false);
847
848                }
849              }
850            }
851          },
852          error: function (xhr, error) {
853            console.log(xhr.responseText);
854          },
855          complete: function () {
856            jQuery(".loader").hide();
857          },
858        });
859      },
860    });
861  });
862
863  // Career page first form
864  jQuery(document).on("click", ".apply_user_first_form", function () {
865    jQuery("#career_page_1331_first").validate({
866      ignore: ":hidden:not(.cer_one_hide)",
867      rules: {
868        apply_user_name: {
869          required: true,
870          minlength: 3,
871          maxlength: 50,
872        },
873        apply_user_email: {
874          required: true,
875          email: true,
876          emailRegex: true,
877          minlength: 5,
878          maxlength: 50,
879        },
880        apply_user_phone: {
881          minlength: 7,
882          maxlength: 13,
883          number: true,
884        },
885        apply_user_experinace: {
886          required: true,
887          minlength: 1,
888          maxlength: 5,
889          validExperience: true,
890        },
891        apply_user_desig: {
892          required: true,
893          minlength: 2,
894          maxlength: 25,
895        },
896        resumeupload: {
897          required: true,
898          fileSize: 5242880,
899          fileType: "pdf,docx,doc",
900        },
901        cerone_hiddenRecaptcha: {
902          required: true,
903        },
904      },
905      messages: {
906        apply_user_name: {
907          required: "Your name is required",
908          minlength: "Your name must be at least 3 characters",
909          maxlength: "Your name should not be greater than 500 characters",
910        },
911        apply_user_email: {
912          required: "Email is required",
913          email: "Please enter a valid email address",
914          emailRegex: "Please enter a valid email address",
915          minlength: "Email must be at least 5 characters",
916          maxlength: "Email should not be greater than 50 characters",
917        },
918        apply_user_phone: {
919          minlength: "Phone number must be at least 7 digits",
920          maxlength: "Phone number should not be greater than 13 digits",
921          number: "Please enter a valid phone number",
922        },
923        apply_user_experinace: {
924          required: "Total experinace is required",
925          minlength: "Total experinace must be at least 1 digits",
926          maxlength: "Total experinace should not be greater than 5 digits",
927          validExperience: "Only numeric is allowed (E.g. 2.05)",
928        },
929        apply_user_desig: {
930          required: "Current designation is required",
931          minlength: "Current designation must be at least 2 characters",
932          maxlength:
933            "Current designation should not be greater than 25 characters",
934        },
935        resumeupload: {
936          required: "Resume is required",
937          fileSize: "Please upload a file with a maximum size of 5MB",
938          fileType: "Please upload a PDF or DOC file",
939        },
940        cerone_hiddenRecaptcha: {
941          required: "reCAPTCHA is required",
942        },
943      },
944      submitHandler: function (form, e) {
945        e.preventDefault();
946
947        var crf_recaptchaResponse = grecaptcha.getResponse(career_frm_one);
948        if (crf_recaptchaResponse === "") {
949          jQuery('.capt_error_crone').html("reCAPTCHA expired or not solved");
950          return false;
951        }
952        else {
953          jQuery('.capt_error_crone').html("");
954        }
955
956        var cuone_form_id = jQuery(".apply_user_first_form").closest("form").attr("id");
957        var formData = new FormData(
958          document.getElementById("career_page_1331_first")
959        );
960        var fileInput = document.getElementById("resumeupload");
961        var file = fileInput.files[0];
962        formData.append("image", file);
963        formData.append("cuone_form_id", cuone_form_id);
964        formData.append("action", "form_first_career");
965        $.ajax({
966          url: my_ajax_object.ajax_url,
967          type: "POST",
968          dataType: "json",
969          data: formData,
970          cache: false,
971          processData: false,
972          contentType: false,
973          beforeSend: function () {
974            jQuery(".loader").show();
975            jQuery('.apply_user_first_form').prop('disabled', true);
976          },
977          success: function (response) {
978            // var responseData_cone = response;
979            if (response.success == true) {
980              var cr_one_res_status = response.status;
981              console.log(cr_one_res_status);
982              rediectThankyouPage();
983              jQuery(".loader").hide();
984              jQuery(".apply_user_first_form").closest("div").find(".status_msg_cr1").html(cr_one_res_status);
985
986              // var get_len_new = jQuery('.add_error_msg_career').length;
987              // if (get_len_new > 0) {
988              //   jQuery('#resumeupload-error').html("");
989              // } else {
990              //   jQuery('.add_error_msg_career').html("");
991              // }
992              setTimeout(function () {
993                jQuery("#career_page_1331_first").trigger("reset");
994                jQuery(".status_msg_cr1").hide();
995                jQuery("#selectPhoneFlag").val("");
996                jQuery("#resumeupload").val("");
997                jQuery("#staticBackdrop_apply").modal("hide");
998                jQuery(".hide_def_file").attr("style", "display:none");
999                jQuery(".hide_def_file").removeClass("file_success");
1000                jQuery('.apply_user_first_form').prop('disabled', false);
1001                jQuery(".hide_after_upload_cone").removeAttr("style", "display:none");
1002                jQuery('.add_error_msg_career').html('');
1003                jQuery('.error-message').html('');
1004                jQuery('.status_msg_cr1').html('');
1005                grecaptcha.reset();
1006              }, 5000); // 5 seconds
1007              grecaptcha.reset();
1008              jQuery(".status_msg_cr1").show();
1009            }
1010            else {
1011              console.log("error");
1012              var errors = response.errors;
1013              console.log(errors);
1014
1015              for (var field in errors) {
1016                if (errors.hasOwnProperty(field)) {
1017                  var errorMessage = errors[field];
1018                  jQuery("#" + field)
1019                    .closest("div")
1020                    .find(".error-message")
1021                    .html(errorMessage);
1022                  // console.log(field); // Output the key of each error
1023                  jQuery('#apply_user_email').keyup(function () {
1024                    jQuery(this).closest('.from-row').find('.error-message').html('');
1025                  });
1026                  jQuery('.apply_user_first_form').prop('disabled', false);
1027                }
1028              }
1029            }
1030          },
1031          error: function (xhr, error) {
1032            console.log(xhr.responseText);
1033          },
1034          complete: function () {
1035            jQuery(".loader").hide();
1036            jQuery('.user_job_second_form').removeClass('disabled');
1037            jQuery('.user_job_second_form').prop('disabled', false);
1038          },
1039        });
1040      },
1041    });
1042  });
1043
1044  // Career page second form
1045  jQuery(document).on("click", ".user_job_second_form", function () {
1046    jQuery("#career_second_1046_form").validate({
1047      ignore: ":hidden:not(.cer_sec_hide)",
1048      rules: {
1049        user_name: {
1050          required: true,
1051          minlength: 3,
1052          maxlength: 50,
1053        },
1054        user_email: {
1055          required: true,
1056          email: true,
1057          emailRegex: true,
1058          minlength: 5,
1059          maxlength: 50,
1060        },
1061        phone_num: {
1062          minlength: 7,
1063          maxlength: 13,
1064          number: true,
1065        },
1066        user_experinace: {
1067          required: true,
1068          minlength: 1,
1069          maxlength: 5,
1070          validExperience: true,
1071        },
1072        user_des: {
1073          required: true,
1074          minlength: 2,
1075          maxlength: 25,
1076        },
1077        second_cvupload: {
1078          required: true,
1079          fileSize: 5242880,
1080          fileType: "pdf,docx,doc",
1081        },
1082        cersec_hiddenRecaptcha: {
1083          required: true,
1084        },
1085      },
1086      messages: {
1087        user_name: {
1088          required: "Your name is required",
1089          minlength: "Your name must be at least 3 characters",
1090          maxlength: "Your name should not be greater than 50 characters",
1091        },
1092        user_email: {
1093          required: "Email is required",
1094          email: "Please enter a valid email address",
1095          emailRegex: "Please enter a valid email address",
1096          minlength: "Email must be at least 5 characters",
1097          maxlength: "Email should not be greater than 50 characters",
1098        },
1099        phone_num: {
1100          minlength: "Phone number must be at least 7 digits",
1101          maxlength: "Phone number should not be greater than 13 digits",
1102          number: "Please enter a valid phone number",
1103        },
1104        user_experinace: {
1105          required: "Total experinace is required",
1106          minlength: "Total experinace must be at least 1 digits",
1107          maxlength: "Total experinace should not be greater than 5 digits",
1108          validExperience: "Only numeric is allowed (E.g. 2.05)",
1109        },
1110        user_des: {
1111          required: "Current designation is required",
1112          minlength: "Current designation must be at least 2 characters",
1113          maxlength: "Current designation should not be greater than 25 characters",
1114        },
1115        second_cvupload: {
1116          required: "Resume is required",
1117          fileSize: "Please upload a file with a maximum size of 5MB",
1118          fileType: "Please upload a PDF or DOC file",
1119        },
1120        cersec_hiddenRecaptcha: {
1121          required: "reCAPTCHA is required",
1122        },
1123      },
1124      submitHandler: function (form, e) {
1125        e.preventDefault();
1126
1127        var crse_recaptchaResponse = grecaptcha.getResponse(career_frm_sec);
1128        if (crse_recaptchaResponse === "") {
1129          jQuery('.capt_error_crtwo').html("reCAPTCHA expired or not solved");
1130          return false;
1131        }
1132        else {
1133          jQuery('.capt_error_crtwo').html("");
1134        }
1135
1136        var cusec_form_id = jQuery(".user_job_second_form").closest("form").attr("id");
1137        var second_cr_formData = new FormData(
1138          document.getElementById("career_second_1046_form")
1139        );
1140
1141        if (second_cr_formData.has("second_cvupload")) {
1142          var sec_fileInput = document.getElementById("second_cvupload");
1143          var secfile = sec_fileInput.files[0];
1144          second_cr_formData.append("image", secfile);
1145        }
1146        second_cr_formData.append("cusec_form_id", cusec_form_id);
1147
1148        second_cr_formData.append("action", "form_second_career");
1149
1150        $.ajax({
1151          url: my_ajax_object.ajax_url,
1152          type: "POST",
1153          dataType: "json",
1154          data: second_cr_formData,
1155          cache: false,
1156          processData: false,
1157          contentType: false,
1158          beforeSend: function () {
1159            jQuery(".loader").show();
1160            jQuery('.user_job_second_form').prop('disabled', true);
1161          },
1162          success: function (response) {
1163            var responseData_sec_cr = response;
1164            console.log(responseData_sec_cr);
1165
1166            if (responseData_sec_cr.success == true) {
1167              var sec_cr_res_status = responseData_sec_cr.status;
1168              console.log(sec_cr_res_status);
1169              jQuery(".loader").hide();
1170
1171              jQuery(".user_job_second_form")
1172                .closest("div")
1173                .find(".status_msg_cr2")
1174                .html(sec_cr_res_status);
1175              rediectThankyouPage();
1176              setTimeout(function () {
1177                jQuery("#career_second_1046_form").trigger("reset");
1178                jQuery(".status_msg_cr2").hide();
1179                jQuery("#selectPhoneFlag").val("");
1180                jQuery("#second_cvupload").val("");
1181                jQuery("#staticBackdrop").modal("hide");
1182                jQuery(".file_closed_name_se").attr("style", "display:none");
1183                jQuery('.user_job_second_form').prop('disabled', false);
1184                jQuery(".hide_after_upload_ctwo").removeAttr("style", "display:none");
1185                jQuery('.sec_add_error_msg_career').html('');
1186                jQuery('.ctwo_hide_def_file').hide();
1187                jQuery(".ctwo_hide_def_file").removeClass("file_success");
1188                jQuery('.error-message').html('');
1189                jQuery(".status_msg_cr2").html('');
1190              }, 5000); // 5 seconds
1191              grecaptcha.reset();
1192              jQuery(".status_msg_cr2").show();
1193
1194            } else {
1195              // Error handling
1196              var errors = responseData_sec_cr.errors;
1197              // Display errors below the input fields
1198              for (var field in errors) {
1199                if (errors.hasOwnProperty(field)) {
1200                  var errorMessage = errors[field];
1201                  jQuery("#" + field)
1202                    .closest("div")
1203                    .find(".error-message")
1204                    .html(errorMessage);
1205
1206                  jQuery('#user_email').keyup(function () {
1207                    jQuery(this).closest('.from-row').find('.error-message').html('');
1208                  });
1209
1210                  jQuery('.user_job_second_form').prop('disabled', false);
1211                }
1212              }
1213            }
1214          },
1215          error: function (xhr, error) {
1216            console.log(xhr.responseText);
1217          },
1218          complete: function () {
1219            jQuery(".loader").hide();
1220          },
1221        });
1222      },
1223    });
1224  });
1225
1226
1227  // jQuery('#shake_form_submit').on("click", function () {
1228  // jQuery('.loader').show();
1229  jQuery("#contact_shake_form").validate({
1230    ignore: ":hidden:not(.hide_cpt_shake)",
1231    rules: {
1232      shake_name: {
1233        required: true,
1234        minlength: 3,
1235        maxlength: 50,
1236      },
1237      shake_email: {
1238        required: true,
1239        email: true,
1240        emailRegex: true,
1241        minlength: 10,
1242        maxlength: 50,
1243      },
1244      shake_phone: {
1245        minlength: 7,
1246        maxlength: 13,
1247        number: true,
1248      },
1249      shake_msg: {
1250        minlength: 10,
1251        /* maxlength: 500, */
1252      },
1253      shake_hiddenRecaptcha: {
1254        required: true,
1255      },
1256    },
1257    messages: {
1258      shake_name: {
1259        required: "Your name is required",
1260        minlength: "Your name must be at least 3 characters",
1261        maxlength: "Your name should not be greater than 50 characters",
1262      },
1263      shake_email: {
1264        required: "Email is required",
1265        email: "Please enter a valid email address",
1266        emailRegex: "Please enter a valid email address",
1267        minlength: "Email must be at least 10 characters",
1268        maxlength: "Email should not be greater than 50 characters",
1269      },
1270      shake_phone: {
1271        minlength: "Phone number must be at least 7 digits",
1272        maxlength: "Phone number should not be greater than 13 digits",
1273        number: "Please enter a valid phone number",
1274      },
1275      shake_msg: {
1276        minlength: "Message must be at least 10 characters",
1277        /* maxlength:
1278          "Message should not be greater than 500 characters", */
1279      },
1280      shake_hiddenRecaptcha: {
1281        required: "reCAPTCHA is required",
1282      },
1283    },
1284    submitHandler: function (form, e) {
1285      e.preventDefault();
1286      formSubmitted = true;
1287      var sh_form_id = jQuery(".common_shake_form_submit").closest("form").attr("id");
1288      var formDataShake = jQuery(form).serialize();
1289      var recaptchaResponse = grecaptcha.getResponse(shake_form);
1290      if (recaptchaResponse === "") {
1291        jQuery('.capt_error_shake').html("reCAPTCHA expired or not solved");
1292        return false;
1293      }
1294      else {
1295        jQuery('.capt_error_shake').html("");
1296      }
1297
1298      $.ajax({
1299        url: my_ajax_object.ajax_url,
1300        type: "POST",
1301        data: {
1302          action: "shake_common_form",
1303          formDataShake: formDataShake,
1304          sh_form_id: sh_form_id,
1305        },
1306        beforeSend: function () {
1307          jQuery(".loader").show();
1308          // jQuery('.common_shake_form_submit').prop('disabled', true);
1309        },
1310        success: function (response) {
1311          var responseData = JSON.parse(response);
1312          console.log(responseData);
1313          if (responseData.success == true) {
1314            var ftr_res_status = responseData.status;
1315
1316            jQuery(".loader").hide();
1317            jQuery(".common_shake_form_submit")
1318              .closest("div")
1319              .find(".status_msg")
1320              .html(ftr_res_status);
1321
1322            setTimeout(function () {
1323              jQuery("#contact_shake_form").trigger("reset");
1324              jQuery(".status_msg").hide();
1325              jQuery("#selectPhoneFlag").val("");
1326              // jQuery('.common_shake_form_submit').prop('disabled', false);
1327              jQuery('.form-group').find('.error-message').html('');
1328              jQuery('.sidebar-contact').removeClass('active');
1329              jQuery('.inquiry-slidebar').removeClass('active');
1330              jQuery('.close-icon-click').removeClass('active');
1331              jQuery(".status_msg").html('');
1332            }, 5000); // 5 seconds
1333            grecaptcha.reset();
1334            jQuery(".status_msg").show();
1335          } else {
1336            // Error handling
1337            var errors = responseData.errors;
1338            // Display errors below the input fields
1339            for (var field in errors) {
1340              if (errors.hasOwnProperty(field)) {
1341                var errorMessage = errors[field];
1342                jQuery("#" + field)
1343                  .closest("div")
1344                  .find(".error-message")
1345                  .html(errorMessage);
1346
1347                jQuery('#shake_email').keyup(function () {
1348                  jQuery(this).closest('.form-group').find('.error-message').html('');
1349                });
1350                // jQuery('.common_shake_form_submit').prop('disabled', false);
1351              }
1352            }
1353          }
1354        },
1355        error: function (xhr, status, error) {
1356          console.log(xhr.responseText);
1357        },
1358        complete: function () {
1359          jQuery(".loader").hide();
1360        },
1361      });
1362      return false;
1363    },
1364  });
1365  // });
1366
1367  $.validator.addMethod("emailOrPhone", function (value, element) {
1368    if (!value) return false;
1369    if (value.indexOf("@") !== -1) {
1370      // treat as email
1371      return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
1372    }
1373    // treat as phone: 7–20 digits (allow symbols)
1374    var digits = value.replace(/\D+/g, "");
1375    return digits.length >= 7 && digits.length <= 20;
1376  }, "Please enter a valid email or phone");
1377
1378  //Referral Form Validation
1379  jQuery('.referral_form_submit').click(function (){
1380    $("#referralForm").validate({
1381      ignore: ":hidden:not(.referral_hide_cpt)",
1382      rules: {
1383        referral_form_name: { required: true, minlength: 3, maxlength: 50 },
1384        referral_form_email: { required: true, email: true, minlength: 6, maxlength: 50 },
1385        referral_form_referrals_full_name: { required: true, minlength: 3, maxlength: 50 },
1386        referral_form_referrals_email_or_phone: { required: true, emailOrPhone: true, minlength: 6, maxlength: 50 },
1387        acceptance_referral: { required: true },
1388        referralcpt_hiddenRecaptcha: { required: true }
1389      },
1390      messages: {
1391        referral_form_name: {
1392          required: "Your full name is required",
1393          minlength: "Your name must be at least 3 characters",
1394          maxlength: "Your name should not be greater than 50 characters",
1395        },
1396        referral_form_email: {
1397          required: "Your email is required",
1398          email: "Please enter a valid email address",
1399          minlength: "Email must be at least 6 characters",
1400          maxlength: "Email should not be greater than 50 characters",
1401        },
1402        referral_form_referrals_full_name: {
1403          required: "Referral's full name is required",
1404          minlength: "Referral's full name must be at least 3 characters",
1405          maxlength: "Referral's full name should not be greater than 50 characters",
1406        },
1407        referral_form_referrals_email_or_phone: {
1408          required: "Referral's Email / Phone is required",
1409        },
1410        acceptance_referral: {
1411          required: "You must accept the privacy policy before sending your message",
1412        },
1413        referralcpt_hiddenRecaptcha: {
1414          required: "reCAPTCHA is required",
1415        },
1416      },
1417      submitHandler: function (form, e) {
1418        e.preventDefault();
1419
1420        var referral_form_id = $(form).attr("id"); // "referralForm"
1421        var formDataReferral = $(form).serialize();
1422
1423        /* var recaptchaResponse = (typeof grecaptcha !== "undefined") ? grecaptcha.getResponse() : "";
1424        if (recaptchaResponse === "") {
1425          $('.capt_error_referral').html("reCAPTCHA expired or not solved");
1426          return false;
1427        } else {
1428          $('.capt_error_referral').html("");
1429        } */
1430
1431        var referral_recaptchaResponse = grecaptcha.getResponse(referral_form);
1432        if (referral_recaptchaResponse === "") {
1433          jQuery('.capt_error_referral').html("reCAPTCHA expired or not solved");
1434          return false;
1435        }
1436        else {
1437          jQuery('.capt_error_referral').html("");
1438        }
1439
1440        $.ajax({
1441          url: my_ajax_object.ajax_url,
1442          type: "POST",
1443          data: {
1444            action: "main_referral_form",
1445            formDataReferral: formDataReferral,
1446            referral_form_id: referral_form_id,
1447            nonce: my_ajax_object.nonce
1448          },
1449          beforeSend: function () {
1450            $(".loader").show();
1451          },
1452          success: function (response) {
1453            $(".loader").hide();
1454            try {
1455              var res = (typeof response === "string") ? JSON.parse(response) : response;
1456
1457              if (res.success) {
1458                $(".referral_status_msg").html(res.data.status).show();
1459                form.reset();
1460                $(".form-group .error-message").html("");
1461                setTimeout(function () {
1462                  $(".referral_status_msg").fadeOut().html("");
1463                }, 5000);
1464                grecaptcha.reset();
1465                rediectThankyouPage();
1466                
1467              } else {
1468                var errors = res.errors || {};
1469                // Show field-specific errors
1470                Object.keys(errors).forEach(function (field) {
1471                  $("#" + field).closest(".form-group").find(".error-message").html(errors[field]);
1472                });
1473              }
1474            } catch (err) {
1475              console.error(err);
1476            }
1477          },
1478          error: function (xhr) {
1479            $(".loader").hide();
1480            console.error(xhr.responseText || xhr.statusText);
1481          }
1482        });
1483
1484        return false;
1485      }
1486    });
1487  })
1488
1489  // Open product listing page book demo popup
1490  jQuery("#book_now_product").click(function () {
1491    var data_prod_id = jQuery(this).attr('data-id');
1492    jQuery('#product_name').val(data_prod_id);
1493    jQuery('#staticBackdrop_products').modal('show');
1494    setTimeout(function () {
1495      jQuery("#yourname_apply").focus();
1496    }, 1000);
1497  });
1498
1499  // Book Demo Form
1500  jQuery(document).on('click', ".book_demo_submit", function () {
1501    jQuery("#product_book_demo_111").validate({
1502      ignore: ":hidden:not(.prod_hide)",
1503      rules: {
1504        prod_email: {
1505          required: true,
1506          email: true,
1507          emailRegex: true,
1508          minlength: 5,
1509          maxlength: 50,
1510        },
1511        prod_company_name: {
1512          minlength: 2,
1513          maxlength: 50,
1514        },
1515        prod_number: {
1516          minlength: 7,
1517          maxlength: 13,
1518          number: true,
1519        },
1520        product_description:
1521        {
1522          minlength: 10,
1523          /* maxlength: 500, */
1524        },
1525        prod_book_hiddenRecaptcha:
1526        {
1527          required: true,
1528        }
1529      },
1530      messages: {
1531        prod_email: {
1532          required: "Email is required",
1533          email: "Please enter a valid email address",
1534          emailRegex: "Please enter a valid email address",
1535          minlength: "Email must be at least 5 characters",
1536          maxlength: "Email should not be greater than 50 characters",
1537        },
1538        prod_company_name: {
1539          minlength: "Company name must be at least 2 characters",
1540          maxlength: "Company name should not be greater than 50 characters",
1541        },
1542        prod_number:
1543        {
1544          minlength: "Phone number must be at least 7 digits",
1545          maxlength: "Phone number should not be greater than 13 digits",
1546          number: "Please enter a valid phone number",
1547        },
1548        product_description:
1549        {
1550          minlength: "Product description must be at least 10 characters",
1551          /* maxlength: "Product description should not be greater than 500 characters", */
1552        },
1553        prod_book_hiddenRecaptcha: {
1554          required: "reCAPTCHA is required",
1555        }
1556      },
1557      submitHandler: function (form, e) {
1558        e.preventDefault();
1559
1560        var prod_form_id = jQuery(".book_demo_submit").closest("form").attr("id");
1561        console.log(prod_form_id);
1562        var product_formData = new FormData(
1563          document.getElementById("product_book_demo_111")
1564        );
1565
1566        product_formData.append("prod_form_id", prod_form_id);
1567        product_formData.append("action", "form_book_a_demo");
1568
1569        $.ajax({
1570          url: my_ajax_object.ajax_url,
1571          type: "POST",
1572          dataType: "json",
1573          data: product_formData,
1574          cache: false,
1575          processData: false,
1576          contentType: false,
1577          beforeSend: function () {
1578            jQuery(".loader").show();
1579            jQuery('.book_demo_submit').prop('disabled', true);
1580          },
1581          success: function (response) {
1582            var prodct_frm = response;
1583            console.log(prodct_frm);
1584
1585            var prod_recaptchaResponse = grecaptcha.getResponse(book_frm);
1586            if (prod_recaptchaResponse === "") {
1587              jQuery('.prod_error_book').html("reCAPTCHA expired or not solved");
1588              return false;
1589            }
1590            else {
1591              jQuery('.prod_error_book').html("");
1592            }
1593
1594            if (prodct_frm.success == true) {
1595              var prd_res_status = prodct_frm.status;
1596              console.log(prd_res_status);
1597              jQuery(".loader").hide();
1598
1599              jQuery(".book_demo_submit")
1600                .closest("div")
1601                .find(".status_msg_prod_book")
1602                .html(prd_res_status);
1603
1604              setTimeout(function () {
1605                jQuery("#product_book_demo_111").trigger("reset");
1606                jQuery(".status_msg_prod_book").hide();
1607                jQuery("#selectPhoneFlag").val("");
1608                jQuery("#staticBackdrop_products").modal("hide");
1609                jQuery('.book_demo_submit').prop('disabled', false);
1610                jQuery('#product_name option').removeAttr('selected');
1611                jQuery('.error-message').html('');
1612                jQuery(".status_msg_prod_book").html('');
1613              }, 5000); // 5 seconds
1614              grecaptcha.reset();
1615              jQuery(".status_msg_prod_book").show();
1616
1617            } else {
1618              // Error handling
1619              var errors = prodct_frm.errors;
1620              // Display errors below the input fields
1621              for (var field in errors) {
1622                if (errors.hasOwnProperty(field)) {
1623                  var errorMessage = errors[field];
1624                  jQuery("#" + field)
1625                    .closest("div")
1626                    .find(".error-message")
1627                    .html(errorMessage);
1628
1629                  jQuery('#prod_email').keyup(function () {
1630                    jQuery(this).closest('.from-row').find('.error-message').html('');
1631                  });
1632
1633                  jQuery('.book_demo_submit').prop('disabled', false);
1634                }
1635              }
1636            }
1637          },
1638          error: function (xhr, error) {
1639            console.log(xhr.responseText);
1640          },
1641          complete: function () {
1642            jQuery(".loader").hide();
1643          },
1644        });
1645
1646      }
1647    });
1648  });
1649
1650  // Delegate click event to a parent element that exists on page load
1651  jQuery(document).on('click', '.getval', function () {
1652    var dataIdValue = jQuery(this).data('id');
1653    console.log(dataIdValue); // This will log the data-id value to the console
1654    setSelectedOption(dataIdValue);
1655  });
1656
1657  // Change event handler for the product_name select element
1658  jQuery(document).on('change', '#product_name', function () {
1659    var selectedValue = jQuery(this).val();
1660    console.log(selectedValue);
1661  });
1662
1663  function setSelectedOption(dataIdValue) {
1664    jQuery('#product_name option').removeAttr('selected');
1665    jQuery('#product_name option[value="' + dataIdValue + '"]').prop('selected', true);
1666  }
1667
1668  // Case studies Load More
1669  /* if(jQuery('body').hasClass('page-template-case-study-listing')){
1670    jQuery(document).ready(function ($) {
1671      let page = 2; // Start with page 2 since the first 10 posts are already loaded.
1672      let loading = false;
1673
1674      function loadMorePosts() {
1675          if (!loading) {
1676              loading = true;
1677
1678              // Show loader after a short delay
1679              setTimeout(() => {
1680                  $('#load_more_case_studies').append('<div id="loading-spinner"><div class="loader-text"><div class="scanner"><p>Loading...</p></div></div></div>');
1681              }, 300); // Delay of 300ms before showing the loader
1682
1683              setTimeout(() => {
1684                  $.ajax({
1685                      url: my_ajax_object.ajax_url,
1686                      type: 'POST',
1687                      data: {
1688                          action: 'load_more_case_studies',
1689                          page: page,
1690                      },
1691                      success: function (response) {
1692                          // Remove the loading spinner
1693                          $('#loading-spinner').remove();
1694
1695                          if (response.trim() !== '') {
1696                              $('#load_more_case_studies').append(response); // Append new posts to the row
1697                              page++;
1698                              loading = false;
1699                          } else {
1700                              // Remove spinner and disable further loading
1701                              $('#loading-spinner').remove();
1702                              $(window).off('scroll');
1703                          }
1704                      },
1705                      error: function () {
1706                          console.error('An error occurred while loading more posts.');
1707                          // Remove the loading spinner and reset loading
1708                          $('#loading-spinner').remove();
1709                          loading = false;
1710                      },
1711                  });
1712              }, 1500); // Delay of 500ms before making the AJAX call
1713          }
1714      }
1715
1716      // Check scroll position relative to the #load_more_case_studies section
1717      $(window).scroll(function () {
1718          const section = $('#load_more_case_studies');
1719          const sectionOffset = section.offset().top + section.outerHeight();
1720          const scrollPosition = $(window).scrollTop() + $(window).height();
1721          const offset = 100; // Offset from the bottom to trigger loading
1722
1723          if (scrollPosition >= sectionOffset - offset && !loading) {
1724              loadMorePosts();
1725          }
1726      });
1727    });
1728  } */
1729  // Case studies Load More
1730
1731// New Portfolio Listing Filter
1732if(jQuery('body').hasClass('page-template-portfolio-list')){
1733    let currentPage = 1;
1734    let loading = false;
1735
1736    function getUrlParameter(name) {
1737        const urlParams = new URLSearchParams(window.location.search);
1738        return urlParams.get(name);
1739    }
1740
1741    function fetchPortfolio(loadMore = false, ) {
1742      
1743        if (!loading) {
1744            loading = true;
1745
1746            // Show loader in the correct location
1747            const loaderHtml = `
1748                <div id="loading-spinner">
1749                    <div class="loader-text ${loadMore ? 'load-more-loader' : ''}">
1750                        <div class="scanner"><p>Loading...</p></div>
1751                    </div>
1752                </div>
1753            `;
1754            if (loadMore) {
1755                // Append loader at the bottom for "Load More"
1756                $('.portfolio-list-sec').append(loaderHtml);
1757            } else {
1758                // Show loader at the center for filter and search
1759                $('.portfolio-list-sec').html(loaderHtml);
1760            }
1761
1762            setTimeout(() => {
1763                const technology = $('#technologies').find(':selected').val() || 0;
1764                const category = $('#categories').find(':selected').val() || 0;
1765                const search = $('#search-input').val() || '';
1766
1767                $.ajax({
1768                    url: my_ajax_object.ajax_url,
1769                    type: 'POST',
1770                    data: {
1771                        action: 'filter_portfolio',
1772                        technology: technology,
1773                        category: category,
1774                        search: search,
1775                        paged: currentPage, // Pass the current page
1776                    },
1777                    success: function(response) {
1778                        // Remove the loading spinner
1779                        $('#loading-spinner').remove();
1780
1781                        if (response.success) {
1782                            if (loadMore) {
1783                                // Append new results
1784                                $('.portfolio-list-sec').append(response.data.content);
1785                            } else {
1786                                // Replace results if not load more
1787                                $('.portfolio-list-sec').html(response.data.content);
1788                            }
1789                            loading = false;
1790
1791                            // Show or hide the "Load More" button based on response
1792                            if (response.data.has_more) {
1793                                $('#load-more').show();
1794                            } else {
1795                                $('#load-more').hide();
1796                            }
1797                        } else {
1798                            if (!loadMore) {
1799                                $('.portfolio-list-sec').html('<p style="text-align: center; font-weight: 500;">No data found.</p>');
1800                            }
1801                            $('#load-more').hide();
1802                        }
1803                    },
1804                });
1805                loading = false;
1806            }, 1000); // Delay of 1500ms before making the AJAX call
1807        }
1808    }
1809
1810    // Preselect category or technology based on URL parameter
1811    $(document).ready(function() {
1812      const categorySlug = getUrlParameter('category');
1813      const technologySlug = getUrlParameter('technology');
1814
1815      if (categorySlug) {
1816          $('#categories option').each(function() {
1817              if ($(this).val() == categorySlug) {
1818                  $(this).prop('selected', true);
1819              }
1820          });
1821      }
1822
1823      if (technologySlug) {
1824          $('#technologies option').each(function() {
1825              if ($(this).val() == technologySlug) {
1826                  $(this).prop('selected', true);
1827              }
1828          });
1829      }
1830
1831      // Trigger change event for selected options to update the UI properly
1832      $('#technologies, #categories').trigger('change');
1833
1834      // Initial load with filtered parameters
1835      fetchPortfolio();
1836    });
1837
1838    // Filter change
1839    $('#technologies, #categories').on('change', function() {
1840        currentPage = 1; // Reset to the first page
1841        fetchPortfolio();
1842    });
1843
1844    $('#search-input').on('input', function() {
1845      currentPage = 1; // Reset to the first page
1846      fetchPortfolio();
1847    });
1848
1849    // Load more
1850    $('#clear-btn').on('click', function(e) {
1851      fetchPortfolio(); // Pass true for appending
1852    });
1853
1854    // Load more
1855    $('#load-more').on('click', function(e) {
1856        e.preventDefault();
1857        currentPage++; // Increment the page number
1858        fetchPortfolio(true); // Pass true for appending
1859    });
1860
1861
1862}
1863// New Portfolio Listing Filter
1864
1865// Case Study Listing Filter
1866if(jQuery('body').hasClass('page-template-case-study-listing')){
1867    let currentPage = 1;
1868    let loading = false;
1869
1870    function getUrlParameter(name) {
1871        const urlParams = new URLSearchParams(window.location.search);
1872        return urlParams.get(name);
1873    }
1874
1875    function fetchCaseStudy(loadMore = false, ) {
1876      
1877        if (!loading) {
1878            loading = true;
1879
1880            // Show loader in the correct location
1881            const loaderHtml = `
1882                <div id="loading-spinner">
1883                    <div class="loader-text ${loadMore ? 'load-more-loader' : ''}">
1884                        <div class="scanner"><p>Loading...</p></div>
1885                    </div>
1886                </div>
1887            `;
1888            if (loadMore) {
1889                // Append loader at the bottom for "Load More"
1890                $('#load_more_case_studies').append(loaderHtml);
1891            } else {
1892                // Show loader at the center for filter and search
1893                $('#load_more_case_studies').html(loaderHtml);
1894            }
1895
1896            setTimeout(() => {
1897                const technology = $('#technologies').find(':selected').val() || 0;
1898                const category = $('#categories').find(':selected').val() || 0;
1899                const search = $('#search-input').val() || '';
1900
1901                $.ajax({
1902                    url: my_ajax_object.ajax_url,
1903                    type: 'POST',
1904                    data: {
1905                        action: 'filter_case_study',
1906                        technology: technology,
1907                        category: category,
1908                        search: search,
1909                        paged: currentPage, // Pass the current page
1910                    },
1911                    success: function(response) {
1912                        // Remove the loading spinner
1913                        $('#loading-spinner').remove();
1914
1915                        if (response.success) {
1916                            if (loadMore) {
1917                                // Append new results
1918                                $('#load_more_case_studies').append(response.data.content);
1919                            } else {
1920                                // Replace results if not load more
1921                                $('#load_more_case_studies').html(response.data.content);
1922                            }
1923                            loading = false;
1924
1925                            // Show or hide the "Load More" button based on response
1926                            if (response.data.has_more) {
1927                                $('#load-more').show();
1928                            } else {
1929                                $('#load-more').hide();
1930                            }
1931                        } else {
1932                            if (!loadMore) {
1933                                $('#load_more_case_studies').html('<p class="casestudy-no-data" style="text-align: center; font-weight: 500; color: #fff;font-size: 20px !important;padding: 0;margin: 0;">No data found.</p>');
1934                            }
1935                            $('#load-more').hide();
1936                        }
1937                    },
1938                });
1939                loading = false;
1940            }, 1000
1941          ); // Delay of 1500ms before making the AJAX call
1942        }
1943    }
1944
1945    // Preselect category or technology based on URL parameter
1946    $(document).ready(function() {
1947      const categorySlug = getUrlParameter('category');
1948      const technologySlug = getUrlParameter('technology');
1949
1950      if (categorySlug) {
1951          $('#categories option').each(function() {
1952              if ($(this).val() == categorySlug) {
1953                  $(this).prop('selected', true);
1954              }
1955          });
1956      }
1957
1958      if (technologySlug) {
1959          $('#technologies option').each(function() {
1960              if ($(this).val() == technologySlug) {
1961                  $(this).prop('selected', true);
1962              }
1963          });
1964      }
1965
1966      // Trigger change event for selected options to update the UI properly
1967      $('#technologies, #categories').trigger('change');
1968
1969      // Initial load with filtered parameters
1970      fetchCaseStudy();
1971    });
1972
1973    // Filter change
1974    $('#technologies, #categories').on('change', function() {
1975        currentPage = 1; // Reset to the first page
1976        fetchCaseStudy();
1977    });
1978
1979    $('#search-input').on('input', function() {
1980      currentPage = 1; // Reset to the first page
1981      fetchCaseStudy();
1982    });
1983
1984    // Load more
1985    $('#clear-btn').on('click', function(e) {
1986      fetchCaseStudy(); // Pass true for appending
1987    });
1988
1989    // Load more
1990    $('#load-more').on('click', function(e) {
1991        e.preventDefault();
1992        currentPage++; // Increment the page number
1993        fetchCaseStudy(true); // Pass true for appending
1994    });
1995
1996
1997}
1998// Case Study Listing Filter
1999
2000  //  portfolio technology ajax function
2001  jQuery(".portfolio_techno li").on("click", function () {
2002    jQuery('.portfolio-showdrop').removeClass('active');
2003    jQuery('.portfolio_submenu').slideUp();
2004    jQuery(".portfolio_techno li").removeClass("filter-active");
2005    jQuery(this).addClass("filter-active");
2006    var get_cat_id = jQuery(this).data('id');
2007    jQuery('.portfolio-loader').css('display', 'block');
2008    jQuery(".portfolio_cat li").removeClass("filter-active");
2009    /* console.log(get_cat_id); */
2010
2011    if (get_cat_id != '') {
2012      $.ajax({
2013        url: my_ajax_object.ajax_url,
2014        type: "POST",
2015        data: {
2016          action: "portfolio_technology_ajax",
2017          get_cat_id: get_cat_id
2018        },
2019        cache: false,
2020        success: function (response) {
2021          /* console.log('response', response);
2022          console.log(response.success); */
2023          console.log('status' + response.data.status);
2024          if (response.data.status == 'true') {
2025
2026            jQuery('.portfolio-loader').css('display', 'none');
2027            var apt_data = response.data.html;
2028
2029            jQuery('.append_ajax_portfolio_data').html(apt_data);
2030            // jQuery('.append_ajax_data').show();
2031            setTimeout(function () {
2032              document.addEventListener("DOMContentLoaded", (event) => {
2033                gsap.registerPlugin(ScrollTrigger)
2034              });
2035
2036              // Adjust the smoother to account for the top padding
2037              const smoother = ScrollSmoother.create({
2038                wrapper: "#js-gsap",
2039                content: "#js-gsap__content",
2040                smooth: 1,
2041                normalizeScroll: true,
2042                ignoreMobileResize: true,
2043                effects: true,
2044                preventDefault: true
2045              });
2046
2047              smoother.effects(".fx-scroll-slower", {
2048                speed: 0.8
2049              });
2050
2051              // MEMBERS CARDS
2052              const cards = gsap.utils.toArray(".c-card");
2053              const lastCardIndex = cards.length - 1;
2054
2055              // Create the ScrollTrigger for the first and last card
2056              const firstCardST = ScrollTrigger.create({
2057                trigger: cards[1],
2058                start: "center center"
2059              });
2060
2061              const lastCardST = ScrollTrigger.create({
2062                trigger: cards[cards.length - 1],
2063                start: "center center"
2064              });
2065
2066              // Iterate over each card
2067              cards.forEach((card, index) => {
2068                const scale = index === lastCardIndex ? 1 : 1;
2069                const scaleDown = gsap.to(card, {
2070                  scale: scale,
2071                });
2072
2073                ScrollTrigger.create({
2074                  trigger: card,
2075                  start: "center center",
2076                  end: () => lastCardST.start,
2077                  pin: true,
2078                  pinSpacing: false,
2079                  scrub: 0.5,
2080                  ease: "none",
2081                  animation: scaleDown,
2082                  toggleActions: "restart none none reverse",
2083                  onRefresh: self => {
2084                    if (index === lastCardIndex) {
2085                      self.start = () => lastCardST.start;
2086                      self.end = () => lastCardST.start + card.offsetHeight;
2087                    }
2088                  }
2089                });
2090
2091                // Add resize listener to recalculate sizes
2092                window.addEventListener('resize', () => {
2093                  ScrollTrigger.refresh();
2094                });
2095              });
2096
2097
2098              // jQuery('.append_ajax_data').show();
2099              /* jQuery('.portfolio-old-data').hide(); */
2100            }, 100);
2101          } else {
2102            console.log('demo1');
2103            jQuery('.portfolio-loader').css('display', 'none');
2104            var apt_data1 = '<div class="row d-flex justify-content-center align-items-center"><div class="col-md-4"><div class="card"><div class="card-body data-not-found"><p> No data found</p></div></div></div></div>';
2105            jQuery('.append_ajax_portfolio_data').html(apt_data1);
2106          }
2107        },
2108      });
2109    }
2110  });
2111
2112  //  portfolio category ajax function
2113  jQuery(".portfolio_cat li").on("click", function () {
2114    jQuery('.portfolio-showdrop').removeClass('active');
2115    jQuery('.portfolio_submenu').slideUp();
2116    jQuery(".portfolio_cat li").removeClass("filter-active");
2117    jQuery(this).addClass("filter-active");
2118    var get_cat_id = jQuery(this).data('id');
2119    jQuery('.portfolio-loader').css('display', 'block');
2120    jQuery(".portfolio_techno li").removeClass("filter-active");
2121
2122    if (get_cat_id != '') {
2123      $.ajax({
2124        url: my_ajax_object.ajax_url,
2125        type: "POST",
2126        data: {
2127          action: "portfolio_category_ajax",
2128          get_cat_id: get_cat_id
2129        },
2130        cache: false,
2131        success: function (response) {
2132
2133          if (response.data.status == 'true') {
2134            jQuery('.portfolio-loader').css('display', 'none');
2135            var apt_data = response.data.html;
2136            jQuery('.append_ajax_portfolio_data').html(apt_data);
2137            // jQuery('.append_ajax_data').show();
2138            setTimeout(function () {
2139              document.addEventListener("DOMContentLoaded", (event) => {
2140                gsap.registerPlugin(ScrollTrigger)
2141              });
2142
2143              // Adjust the smoother to account for the top padding
2144              const smoother = ScrollSmoother.create({
2145                wrapper: "#js-gsap",
2146                content: "#js-gsap__content",
2147                smooth: 1,
2148                normalizeScroll: true,
2149                ignoreMobileResize: true,
2150                effects: true,
2151                preventDefault: true
2152              });
2153
2154              smoother.effects(".fx-scroll-slower", {
2155                speed: 0.8
2156              });
2157
2158              // MEMBERS CARDS
2159              const cards = gsap.utils.toArray(".c-card");
2160              const lastCardIndex = cards.length - 1;
2161
2162              // Create the ScrollTrigger for the first and last card
2163              const firstCardST = ScrollTrigger.create({
2164                trigger: cards[1],
2165                start: "center center"
2166              });
2167
2168              const lastCardST = ScrollTrigger.create({
2169                trigger: cards[cards.length - 1],
2170                start: "center center"
2171              });
2172
2173              // Iterate over each card
2174              cards.forEach((card, index) => {
2175                const scale = index === lastCardIndex ? 1 : 1;
2176                const scaleDown = gsap.to(card, {
2177                  scale: scale,
2178                });
2179
2180                ScrollTrigger.create({
2181                  trigger: card,
2182                  start: "center center",
2183                  end: () => lastCardST.start,
2184                  pin: true,
2185                  pinSpacing: false,
2186                  scrub: 0.5,
2187                  ease: "none",
2188                  animation: scaleDown,
2189                  toggleActions: "restart none none reverse",
2190                  onRefresh: self => {
2191                    if (index === lastCardIndex) {
2192                      self.start = () => lastCardST.start;
2193                      self.end = () => lastCardST.start + card.offsetHeight;
2194                    }
2195                  }
2196                });
2197
2198                // Add resize listener to recalculate sizes
2199                window.addEventListener('resize', () => {
2200                  ScrollTrigger.refresh();
2201                });
2202              });
2203
2204
2205              // jQuery('.append_ajax_data').show();
2206              /* jQuery('.portfolio-old-data').hide(); */
2207            }, 100);
2208          } else {
2209            jQuery('.portfolio-loader').css('display', 'none');
2210            var apt_data = '<div class="row d-flex justify-content-center align-items-center"><div class="col-md-4"><div class="card"><div class="card-body data-not-found"><p> No data found</p></div></div></div></div>';
2211            jQuery('.append_ajax_portfolio_data').html(apt_data);
2212          }
2213        },
2214      });
2215    }
2216  });
2217
2218  //  portfolio all filter ajax function
2219  if (jQuery('.portfolio-filter .portfolio_all_list').hasClass('active')) {
2220    jQuery('.portfolio-loader').css('display', 'block');
2221    jQuery(".portfolio_techno li").removeClass("filter-active");
2222    $.ajax({
2223      url: my_ajax_object.ajax_url,
2224      type: "POST",
2225      data: {
2226        action: "portfolio_ajax",
2227      },
2228      cache: false,
2229      success: function (response) {
2230        console.log('status' + response.data.status);
2231
2232        if (response.data.status == true) {
2233          jQuery('.portfolio-loader').css('display', 'none');
2234          var apt_data = response.data.html;
2235          jQuery('.append_ajax_portfolio_data').html(apt_data);
2236          setTimeout(function () {
2237            document.addEventListener("DOMContentLoaded", (event) => {
2238              gsap.registerPlugin(ScrollTrigger)
2239            });
2240
2241            // Adjust the smoother to account for the top padding
2242            const smoother = ScrollSmoother.create({
2243              wrapper: "#js-gsap",
2244              content: "#js-gsap__content",
2245              smooth: 1,
2246              normalizeScroll: true,
2247              ignoreMobileResize: true,
2248              effects: true,
2249              preventDefault: true
2250            });
2251
2252            smoother.effects(".fx-scroll-slower", {
2253              speed: 0.8
2254            });
2255
2256            // MEMBERS CARDS
2257            const cards = gsap.utils.toArray(".c-card");
2258            const lastCardIndex = cards.length - 1;
2259
2260            // Create the ScrollTrigger for the first and last card
2261            const firstCardST = ScrollTrigger.create({
2262              trigger: cards[1],
2263              start: "center center"
2264            });
2265
2266            const lastCardST = ScrollTrigger.create({
2267              trigger: cards[cards.length - 1],
2268              start: "center center"
2269            });
2270
2271            // Iterate over each card
2272            cards.forEach((card, index) => {
2273              const scale = index === lastCardIndex ? 1 : 1;
2274              const scaleDown = gsap.to(card, {
2275                scale: scale,
2276              });
2277
2278              ScrollTrigger.create({
2279                trigger: card,
2280                start: "center center",
2281                end: () => lastCardST.start,
2282                pin: true,
2283                pinSpacing: false,
2284                scrub: 0.5,
2285                ease: "none",
2286                animation: scaleDown,
2287                toggleActions: "restart none none reverse",
2288                onRefresh: self => {
2289                  if (index === lastCardIndex) {
2290                    self.start = () => lastCardST.start;
2291                    self.end = () => lastCardST.start + card.offsetHeight;
2292                  }
2293                }
2294              });
2295
2296              // Add resize listener to recalculate sizes
2297              window.addEventListener('resize', () => {
2298                ScrollTrigger.refresh();
2299              });
2300            });
2301
2302
2303            // jQuery('.append_ajax_data').show();
2304            /* jQuery('.portfolio-old-data').hide(); */
2305          }, 100);
2306        }
2307        else {
2308          jQuery('.portfolio-loader').css('display', 'none');
2309          var apt_data = '<div class="row d-flex justify-content-center align-items-center"><div class="col-md-4"><div class="card"><div class="card-body data-not-found"><p> No data found</p></div></div></div></div>';
2310          jQuery('.append_ajax_portfolio_data').html(apt_data);
2311        }
2312      },
2313    });
2314  }
2315
2316  //  portfolio all filter ajax function
2317  jQuery('.portfolio-filter .portfolio_all_list').click(function () {
2318    jQuery('.portfolio-loader').css('display', 'block');
2319    jQuery(".portfolio_techno li").removeClass("filter-active");
2320    $.ajax({
2321      url: my_ajax_object.ajax_url,
2322      type: "POST",
2323      data: {
2324        action: "portfolio_ajax",
2325      },
2326      cache: false,
2327      success: function (response) {
2328        console.log('response', response);
2329        console.log(response.success);
2330
2331        if (response.data.status == true) {
2332          jQuery('.portfolio-loader').css('display', 'none');
2333          var apt_data = response.data.html;
2334          jQuery('.append_ajax_portfolio_data').html(apt_data);
2335          setTimeout(function () {
2336            document.addEventListener("DOMContentLoaded", (event) => {
2337              gsap.registerPlugin(ScrollTrigger)
2338            });
2339
2340            // Adjust the smoother to account for the top padding
2341            const smoother = ScrollSmoother.create({
2342              wrapper: "#js-gsap",
2343              content: "#js-gsap__content",
2344              smooth: 1,
2345              normalizeScroll: true,
2346              ignoreMobileResize: true,
2347              effects: true,
2348              preventDefault: true
2349            });
2350
2351            smoother.effects(".fx-scroll-slower", {
2352              speed: 0.8
2353            });
2354
2355            // MEMBERS CARDS
2356            const cards = gsap.utils.toArray(".c-card");
2357            const lastCardIndex = cards.length - 1;
2358
2359            // Create the ScrollTrigger for the first and last card
2360            const firstCardST = ScrollTrigger.create({
2361              trigger: cards[1],
2362              start: "center center"
2363            });
2364
2365            const lastCardST = ScrollTrigger.create({
2366              trigger: cards[cards.length - 1],
2367              start: "center center"
2368            });
2369
2370            // Iterate over each card
2371            cards.forEach((card, index) => {
2372              const scale = index === lastCardIndex ? 1 : 1;
2373              const scaleDown = gsap.to(card, {
2374                scale: scale,
2375              });
2376
2377              ScrollTrigger.create({
2378                trigger: card,
2379                start: "center center",
2380                end: () => lastCardST.start,
2381                pin: true,
2382                pinSpacing: false,
2383                scrub: 0.5,
2384                ease: "none",
2385                animation: scaleDown,
2386                toggleActions: "restart none none reverse",
2387                onRefresh: self => {
2388                  if (index === lastCardIndex) {
2389                    self.start = () => lastCardST.start;
2390                    self.end = () => lastCardST.start + card.offsetHeight;
2391                  }
2392                }
2393              });
2394
2395              // Add resize listener to recalculate sizes
2396              window.addEventListener('resize', () => {
2397                ScrollTrigger.refresh();
2398              });
2399            });
2400
2401
2402            // jQuery('.append_ajax_data').show();
2403            /* jQuery('.portfolio-old-data').hide(); */
2404          }, 100);
2405        } else {
2406          jQuery('.portfolio-loader').css('display', 'none');
2407          var apt_data = '<div class="row d-flex justify-content-center align-items-center"><div class="col-
2407md-4"><div class="card"><div class="card-body data-not-found"><p> No data found</p></div></div></div></div>';
2408          jQuery('.append_ajax_portfolio_data').html(apt_data);
2409        }
2410      },
2411    });
2412  })
2413
2414  //  product category ajax function
2415  jQuery(".sub_cat_list li").on("click", function () {
2416    var get_cat_id = jQuery(this).data('id');
2417    console.log(get_cat_id);
2418
2419    if (get_cat_id != '') {
2420      $.ajax({
2421        url: my_ajax_object.ajax_url,
2422        type: "POST",
2423        data: {
2424          action: "prod_category_ajax",
2425          get_cat_id: get_cat_id
2426        },
2427        cache: false,
2428        success: function (response) {
2429          console.log('response', response);
2430          console.log(response.success);
2431
2432          if (response.success == true) {
2433            var apt_data = response.data.html;
2434            jQuery('.append_ajax_data').html(apt_data);
2435            // jQuery('.append_ajax_data').show();
2436            jQuery('.old_data').hide();
2437          }
2438        },
2439      });
2440    }
2441  });
2442
2443  jQuery(".sub_tag_list li").on("click", function () {
2444    var get_tag_id = jQuery(this).data("id");
2445    console.log("data-id:", get_tag_id);
2446
2447    if (get_tag_id != '') {
2448      $.ajax({
2449        url: my_ajax_object.ajax_url,
2450        type: "POST",
2451        data: {
2452          action: "prod_tags_ajax",
2453          get_tag_id: get_tag_id
2454        },
2455        cache: false,
2456        success: function (response) {
2457          console.log('response', response);
2458          console.log(response.success);
2459
2460          if (response.success == true) {
2461            var tg_data = response.data.html;
2462            console.log(tg_data);
2463            jQuery('.append_ajax_data').html(tg_data);
2464            jQuery('.old_data').hide();
2465          }
2466        },
2467      });
2468    }
2469  });
2470
2471  jQuery(".all_list").on('click', function () {
2472    $.ajax({
2473      url: my_ajax_object.ajax_url,
2474      type: "POST",
2475      data: {
2476        action: "prod_all_ajax",
2477      },
2478      cache: false,
2479      success: function (response) {
2480        console.log('response', response);
2481        console.log(response.success);
2482
2483        if (response.success == true) {
2484          var all_data = response.data.html;
2485          console.log(all_data);
2486          jQuery('.append_ajax_data').html(all_data);
2487          jQuery('.old_data').hide();
2488        }
2489      },
2490    });
2491  });
2492
2493  // Add active class to "All" by default
2494  jQuery('.filter_btn.all_list').addClass('active');
2495
2496  // Handle click event for list items
2497  jQuery('.filter_btn').click(function () {
2498    // Remove active class from all list items
2499    jQuery('.filter_btn').removeClass('active');
2500
2501    // Add active class to the clicked list item
2502    jQuery(this).addClass('active');
2503
2504    // Add active class to the parent list item if it has one
2505    jQuery(this).parents('.filter_btn').addClass('active');
2506  });
2507
2508  jQuery('.btn-close').on('click', function () {
2509    var closestForm = jQuery(this).closest('.modal-content').find('form');
2510    if(closestForm.length > 0){
2511      closestForm.trigger('reset');
2512      closestForm.validate().resetForm();
2513      closestForm.find('.error').text('');
2514    }
2515  });
2516
2517  jQuery('.email_small_logo').on('click', function () {
2518    jQuery('.sidebar-contact').addClass('active');
2519    jQuery('.inquiry-slidebar').addClass('active');
2520
2521    // setTimeout(function () {
2522    //   jQuery(".shake_form input:first").focus();
2523    // }, 200);
2524
2525  });
2526  jQuery('.close-btn').on('click', function () {
2527    jQuery('.shake_form input').removeClass('error');
2528    jQuery('.shake_form textarea').removeClass('error');
2529    jQuery('.error-message').html('');
2530    jQuery('.error').html('');
2531
2532    // Close the popup
2533    jQuery('.sidebar-contact').removeClass('active');
2534    jQuery('.inquiry-slidebar').removeClass('active');
2535    jQuery('form').trigger('reset');
2536  });
2537
2538  // jQuery('#shake_name-error').html('');
2539
2540  jQuery('input[type="text"]').on('keydown', function (e) {
2541    if (e.which === 32 && this.selectionStart === 0) {
2542      e.preventDefault();
2543    }
2544  });
2545
2546});
2547
2548
2549
2550// ------
2551jQuery('.portfolio_all_list').on('click', function () {
2552  jQuery(".portfolio_techno li").removeClass("filter-active");
2553  jQuery(".portfolio_cat li").removeClass("filter-active");
2554
2555});
2556
2557function rediectThankyouPage() {
2558  window.location.href = 'https://briskstar.com/thank-you/';
2559}
2560
2561// Thank you pag dynamic case study, blog, portfolio data
2562jQuery(document).ready(function () {
2563  jQuery('.thank_you_tab').on('click', function () {
2564    var postType = jQuery(this).attr('data-value');
2565    // var currentPostId = '';
2566
2567    jQuery.ajax({
2568      url: my_ajax_object.ajax_url,
2569      type: 'POST',
2570      data: {
2571        action: 'load_posts_by_tab',
2572        post_type: postType,
2573        // current_post_id: currentPostId
2574      },
2575      success: function (response) {
2576        jQuery('#myTabContent .tab-pane.active .row').html(response);
2577      }
2578    });
2579  });
2580});
2581
2582// Clear error message on typing (bind once)
2583  jQuery('#ebook_email').on('keyup', function () {
2584    jQuery(this).closest('.form-group').find('.error-message').html('');
2585  });
2586
2587  // Initialize validation ONLY ONCE
2588  jQuery("#ebooks_details_inquiry").validate({
2589    ignore: ":hidden:not(.hide_cpt_ebook)",
2590    rules: {
2591      ebook_email: {
2592        required: true,
2593        email: true,
2594        emailRegex: true,
2595        minlength: 10,
2596        maxlength: 50,
2597      },
2598      phone: {
2599        minlength: 7,
2600        maxlength: 13,
2601        number: true,
2602      },
2603      ebook_company_name: {
2604        minlength: 3,
2605        maxlength: 50,
2606        required: true,
2607      },
2608      ebook_hiddenRecaptcha: {
2609        required: true,
2610      }
2611    },
2612
2613    messages: {
2614      ebook_email: {
2615        required: "Business Email is required",
2616        email: "Please enter a valid email address",
2617        emailRegex: "Please enter a valid email address",
2618        minlength: "Email must be at least 10 characters",
2619        maxlength: "Email should not be greater than 50 characters",
2620      },
2621      phone: {
2622        minlength: "Phone number must be at least 7 digits",
2623        maxlength: "Phone number should not be greater than 13 digits",
2624        number: "Please enter a valid phone number",
2625      },
2626      ebook_company_name: {
2627        required: "Company name is required",
2628        minlength: "Company name must be at least 3 characters",
2629        maxlength: "Company name should not be greater than 50 characters",
2630      },
2631      ebook_hiddenRecaptcha: {
2632        required: "reCAPTCHA is required",
2633      }
2634    },
2635
2636    submitHandler: function (form, e) {
2637      e.preventDefault();
2638
2639        var hp_recaptchaResponse = grecaptcha.getResponse(eBook_form);
2640        if (hp_recaptchaResponse === "") {
2641          jQuery('.capt_error_ebook').html("reCAPTCHA expired or not solved");
2642          return false;
2643        } else {
2644          jQuery('.capt_error_ebook').html("");
2645        }
2646
2647      var eb_id = jQuery(".ebooks-inquiry-btn").closest("form").attr("id");
2648      var post_id = jQuery(".ebooks-details-inquiry").attr("data-post-id");
2649      var formData = jQuery(form).serialize();
2650
2651      jQuery.ajax({
2652        url: my_ajax_object.ajax_url,
2653        type: "POST",
2654        data: {
2655          action: "save_ebook_form",
2656          formData: formData,
2657          eb_id:eb_id,
2658          post_id:post_id
2659        },
2660
2661        beforeSend: function () {
2662          jQuery(".loader").show();
2663        },
2664
2665        success: function (response) {
2666          console.log(response);
2667
2668          if (response.success) {
2669
2670            // Show success message from backend
2671            jQuery(".status_msg_ebook")
2672              .html(response.data.message + " Redirecting...")
2673              .fadeIn();
2674
2675            // Reset form
2676            form.reset();
2677
2678            // Reset validation
2679            jQuery("#ebooks_details_inquiry").validate().resetForm();
2680
2681            // Clear hidden recaptcha
2682            jQuery("#ebook_hiddenRecaptcha").val("");
2683
2684            // Reset reCAPTCHA
2685            if (typeof grecaptcha !== "undefined") {
2686              grecaptcha.reset(eBook_form);
2687            }
2688
2689            // Hide loader
2690            jQuery(".loader").hide();
2691
2692            // Redirect after 3 seconds
2693            setTimeout(function () {
2694              window.location.href = "/ebooks"; // update URL if needed
2695            }, 3000);
2696
2697          } else {
2698
2699            var errors = response.data;
2700
2701            for (var field in errors) {
2702              jQuery("#" + field)
2703                .closest(".form-group")
2704                .find(".error-message")
2705                .html(errors[field]);
2706            }
2707          }
2708        },
2709        error: function (xhr) {
2710          console.log("AJAX Error:", xhr.responseText);
2711        },
2712
2713        complete: function () {
2714          jQuery(".loader").hide();
2715        }
2716      });
2717    }
2718  });

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.