PageSourceSearch

https://codeseccon.com/en/registration-form

html codeseccon.com collected 2026-10-04 13:57:12 UTC 1,098,469 bytes, 21,073 lines download raw bytes

1  <style>
2      #footer, .header-content {
3          display: block      }
4  </style>  
5  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" itemscope itemtype="http://schema.org/Blog">
7  <head>
8  
8<script type="text/javascript">
9// Centralized countdown labels - available globally
10    document.addEventListener('DOMContentLoaded', () => {
11        window.countdownLabels = {"days":"Days","hours":"Hours","minutes":"Minutes","seconds":"Seconds","startingIn":"Starting in"};
12    });
13</script>
13
14  
14<script>
15    </script>
15
16  
16<script src="https://cmp.osano.com/AzqNEeSTuihQR1mLH/8ba39fbb-0fe2-42c4-b005-b76d4e447986/osano.js"></script>
16<style>.osano-cm-widget{display: none;}</style>   
17          <meta name="viewport" content="width=device-width, initial-scale=1.0" />
18    
19<!-- CMS page Meta-data Start -->
20<!-- Social Meta tags start -->
21<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
22
23<!-- General Meta -->
24<meta name="description" content="CodeSecCon is the premier virtual event bringing together developers and cybersecurity professionals to revolutionize the way applications are built, secured, and maintained." />
25<meta name="keywords" content="" />
26<link rel="canonical" href="https://www.codeseccon.com/" />
27
28<!-- Open Graph / Facebook / LinkedIn -->
29<meta property="og:site_name" content="Registration Form" />
30<meta property="og:title" content="Registration Form" />
31<meta property="og:description" content="CodeSecCon is the premier virtual event bringing together developers and cybersecurity professionals to revolutionize the way applications are built, secured, and maintained." />
32<meta property="og:image" content="" />
33<meta property="og:url" content="https://codeseccon.com/" />
34<meta property="og:type" content="website" />
35
36<!-- Twitter Cards -->
37<meta name="twitter:card" content="summary_large_image" />
38<meta name="twitter:title" content="Registration Form" />
39<meta name="twitter:description" content="CodeSecCon is the premier virtual event bringing together developers and cybersecurity professionals to revolutionize the way applications are built, secured, and maintained." />
40<meta name="twitter:image" content="" />
41<meta name="twitter:url" content="https://codeseccon.com/" />
42
43<!-- Schema.org for Google -->
44<meta itemprop="name" content="Registration Form" />
45<meta itemprop="description" content="CodeSecCon is the premier virtual event bringing together developers and cybersecurity professionals to revolutionize the way applications are built, secured, and maintained." />
46<meta itemprop="image" content="" />
47
48<!-- Fallback / other platforms -->
49<link rel="image_src" type="image/jpeg" href="" />
50
51    <!-- WebSite structured data (controls the site name Google shows in search results) -->
52    
52<script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"WebSite","name":"CodeSecCon 2026","url":"https:\/\/codeseccon.com\/"}</script>
52
53<!-- Social Meta tags end -->
54<!-- CMS page Meta-data End -->
55              <link rel="icon" type="image/png" sizes="32x32" href="https://vepimg.b8cdn.com//uploads/vjfnew/20550/content/images/1754417909logo-dark-300ppi-1-png1754417909.png">
56                <title>CodeSecCon 2026</title>
57        <!-- using older bootstrap css -->
58<link href="https://vepcss.b8cdn.com/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
59      <link href="https://vepcss.b8cdn.com/css/style.css?v=12" rel="stylesheet" type="text/css" />
60      <link href="https://vepcss.b8cdn.com/css/eliqaat/datepicker3.css?v=1" rel="stylesheet" type="text/css" />
61    
62          <!-- new global analytics -->
63              
63<script defer data-domain="www.codeseccon.com,vfairscombined.com" src="https://plausible.vfairs.com/js/script.js"></script>
63
64   
65    
66  
67      <!--[if lt IE 9]>
68      <link href="https://vepcss.b8cdn.com/css/ie8.css?v=1" rel="stylesheet" type="text/css" />
69    <![endif]--> 
70    
70<script type="text/javascript">
71    IsLogedin = false;
72    IsEventLive = true;
73    </script>
73
74    <style type="text/css">
75      .page-heading {border-bottom:1px solid #eaeaea; background: #f7f7f7}
76      .page-heading h4,.page-heading h1 {font-size: 24px; font-weight: bold; padding: 20px 0; margin: 0}
77      .page-heading h4.form-heading,.page-heading h1.form-heading {text-align: left}
78
79      .control-label {text-align: left; padding-top: 5px; font-size:13px;}
80      .curr-lang-ar .control-label {text-align: right !important; padding-top: 5px; font-size:13px;}
81	  #ResponseMsg{
82		text-align: right;
83		padding-right: 40px;
84	  }
85	  .row-content{
86		padding: 10px 10px 100px 0px;
87	  }
88	  #LoadingBar{
89		display:none;
90	  }
91	  .logo-left-en{
92	  	text-align:right;
93	  }
94    </style>
95    <!-- vFair Css -->
96                 <link href="https://vepcss.b8cdn.com/css/vjf_20550.css?v=90887825" rel="stylesheet" type="text/css" />
97        
98          
99
100        
101    
102                
103      </head>
104  <body dir="ltr" class="curr-lang-en  lp-front-page">
105  
106  
107  
108  
109    
110
111    
112
113                
114    
115        <!-- Video Player Box Start -->
116    <div class="modal fade" id="VideoPlayerModal" tabindex="-1" role="dialog" aria-labelledby="EventModalTitle" aria-hidden="true">
117        <div class="modal-dialog">
118            <div class="modal-content">
119                <div class="modal-header">
120                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-label="Close" aria-hidden="false">&times;</span></button>
121                    <h4 class="modal-title" id="EventModalTitle">CodeSecCon 2026</h4>
122                </div>
123                <div class="modal-body" style="height: 350px;" id="VideoPlayerModal-Content">
124                </div>
125            </div>
126        </div>
127    </div>
128    <!-- Video Player Box End -->
129
130
131    <!-- VFC-18157 - Confirm / Alert popup to be used when attendee asks to cancel his registration   -->
132    <style>
133        #confirm_alert_modal-d {
134            font-family: 'Avenir';
135            font-style: normal;
136            font-weight: 400;
137            font-size: 14px;
138            line-height: 22px;
139            margin: 8px 0;
140            opacity: 1;
141        }
142
143
144        #confirm_alert_modal-d .modal-content {
145            background: #f3f4f6;
146            max-width: 350px;
147            padding: 20px 20px 10px;
148            width: 100%;
149            margin: 0 auto;
150        }
151        #confirm_alert_modal-d .modal-body {
152            padding: 0px 12px;
153        }
154        #confirm_alert_modal-d h3 {
155            font-family: var(--secondaryFont), sans-serif;
156            font-size: 22px;
157            font-weight: 600;
158            color: var(--primaryThemeColor) !important;
159            margin-bottom: 0px;
160        }
161        #LoginModal .modal-body p,
162        #confirm_alert_modal-d .modal-body p {
163            font-size: 18px;
164            margin-top: 8px !important;
165        }
166
167        .confirm_alert_modal_actions_container-d button {
168            border-radius: 5px !important;
169            box-shadow: none;
170            font-family: var(--secondaryFont), sans-serif;
171            margin: 4px 0px !important;
172            outline: none;
173            padding: 12px;
174            text-transform: uppercase;
175            width: 100%;
176        }
177        /*.confirm_alert_modal_actions_container-d button.btn_confirm_action-d {*/
178        /*    background: var(--primaryThemeColor) !important;*/
179        /*    color: #fff !important;*/
180        /*}*/
181    </style>
182
183
184    <!-- Login Modal -->
185    <div class="modal fade" id="LoginModal" tabindex="-1" role="dialog" aria-labelledby="LoginModalTitle">
186        <div class="modal-dialog">
187            <div class="modal-content">
188                <div class="modal-header">
189                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-label="Close" aria-hidden="false">&times;</span></button>
190                    <h4 class="modal-title" id="LoginModalTitle">Login</h4>
191                </div>
192                <form action="https://codeseccon.com/en/login" method="post" accept-charset="utf-8" id="Main-Login-Frm" autocomplete="off" enctype="multipart/form-data"><div style="display:none">
193<input type="hidden" name="login-red" value="" />
194<input type="hidden" name="Login-frm" value="Login-frm" />
195<input type="hidden" name="ci_csrf_token" value="" />
196</div>                <div class="modal-body">
197                    <div class="form-group group-email" >
198                        <label for="LoginEmail" class="control-label" aria-label="email" tabindex="0">Email:</label>
199                                              <input type="text" id="LoginEmail" name="LoginEmail" class="form-control" placeholder="Enter email" value="" tabindex="0"/>
200                    </div>
201                                      <div class="form-group">
202                        <!--label for="message-text" class="control-label">&nbsp</label-->
203                        <div id="ResponseBox" class="ResponseBox" style="font-size:14px;"></div>
204                    </div>
205                                  </div>
206                <div class="modal-footer" id="login-footer">
207                    <div class="row">
208                        <div class="col-sm-4">
209                            <button type="button" class="btn btn-default" data-dismiss="modal" tabindex="0" aria-label="Cancel">Cancel</button>
210                            <button type="submit" class="btn btn-darkgrey" tabindex="0" aria-label="Login<">Login</button>
211                        </div>
212                        <div class="col-sm-8" >
213                                                    <a href="/en/registration" class="btn-modal-registration btn btn-darkgrey flt-left" style='border-radius:0' tabindex="0" aria-label="New user? Register now">New user? Register now</a>
214                                                  </div>
215                    </div>
216                </div>
217              </form>            </div>
218        </div>
219    </div>
220    <!-- Login popup end-->
221
222    <!-- VFC-18157 - Confirm / Alert popup to be used when attendee asks to cancel his registration   -->
223
224    <!-- VFC-18157 - Confirm / Alert popup to be used when attendee asks to cancel his registration   -->
225    <div id="confirm_alert_modal-d" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="confirmAlertModalTitle" >
226        <div class="modal-dialog">
227            <div class="modal-content">
228                <div class="modal-body">
229                    <div class="row">
230                        <div class="col-sm-12 my-3 mx-2 ">
231                            <h3 class="confirm_alert_modal_title-d">
232                                Are you sure you want to cancel your registration?
233                            </h3>
234                        </div>
235                    </div>
236                    <div class="row">
237                        <div class="col-sm-12">
238                            <p class="confirm_alert_modal_description-d my-3 mx-2">
239                                Cancelling your registration will remove your access to the event. If you proceed, you will no longer be able to participate or access event-related materials.
240                            </p>
241                        </div>
242                    </div>
243                    <div class="row">
244                        <div class="col-sm-12 mt-2 mb-4 text-right confirm_alert_modal_actions_container-d">
245                            <button type="button" class="btn btn-default btn_cancel_action-d" data-dismiss="modal" tabindex="0" data-dismiss_btn_text="Keep My Registration">Keep My Registration</button>
246                            <button type="submit" class="btn btn-default btn_confirm_action-d" tabindex="0" data-confirm_action_type="cancel_registration" data-confirm_action_btn_text="Cancel Registration">Cancel Registration</button>
247                        </div>
248                    </div>
249                </div>
250            </div>
251        </div>
252    </div>
253
254    <!-- VFC-18157 - Confirm / Alert popup to be used when attendee asks to cancel his registration   -->
255    <div id="delete_alert_modal-d" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="confirmAlertModalTitle" >
256        <div class="modal-dialog">
257            <div class="modal-content">
258                <div class="modal-body">
259                    <div class="row">
260                        <div class="col-sm-12 my-3 mx-2 ">
261                            <h3 class="confirm_alert_modal_title-d">
262                                Are you sure you want to delete account?
263                            </h3>
264                        </div>
265                    </div>
266                    <div class="row">
267                        <div class="col-sm-12">
268                            <p class="confirm_alert_modal_description-d my-3 mx-2">
269                                Deleting your account will remove your access to the event.
270                            </p>
271                        </div>
272                    </div>
273                    <div class="row">
274                        <div class="col-sm-12 mt-2 mb-4 text-right confirm_alert_modal_actions_container-d">
275                            <button type="button" class="btn btn-default btn_cancel_action-d" data-dismiss="modal" tabindex="0" data-dismiss_btn_text="Keep My Registration">Keep My Registration</button>
276                            <button type="submit" class="btn btn-darkgrey btn_confirm_action-d" tabindex="0" data-confirm_action_type="delete_registration" data-confirm_action_btn_text="Delete Registration">Delete Registration</button>
277                        </div>
278                    </div>
279                </div>
280            </div>
281        </div>
282    </div>
283
284
285    <!-- Forgot Password Update Popup Start -->
286    <div class="modal fade" id="set-new-pwd-modal" tabindex="-1" role="dialog" aria-labelledby="setPasswordModalTitle" aria-hidden="true">
287        <div class="modal-dialog">
288            <div class="modal-content">
289                <div class="modal-header">
290                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-label="Close" aria-hidden="false">&times;</span></button>
291                    <h4 class="modal-title" id="setPasswordModalTitle">Reset Password</h4>
292                </div>
293                <form id="reset-update-pwd-frm" method="post">
294                    <input type="hidden" id="pwd-reset-update-token" name="token" value="
2940">
295                    <div class="modal-body">
296                        <div class="form-group hide" style="display:none;">
297                            <label for="updatepwdemail" class="control-label">Email / Username:</label>
298                            <input type="text" name="updatepwdemail" id="updatepwdemail" class="form-control" placeholder="Enter Your Email Address">
299                        </div>
300                        <div class="form-group">
301                            <label for="updatepwdnewpwd" class="control-label">New password:</label>
302                            <input type="password" name="updatepwdnewpwd" id="updatepwdnewpwd" class="form-control" placeholder="New password" autocomplete="off"/>
303                        </div>
304                        <div class="form-group">
305                            <label for="updatepwdconfirm" class="control-label">Confirm password:</label>
306                            <input type="password" name="updatepwdconfirm" id="updatepwdconfirm" class="form-control" placeholder="Confirm password" autocomplete="off"/>
307                        </div>
308                        <div class="form-group">
309                            <div id="reset-pwd-responseBox"></div>
310                        </div>
311                    </div>
312                    <div class="modal-footer">
313                        <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
314                        <button type="submit" class="btn btn-darkgrey">Update</button>
315                    </div>
316                </form>
317            </div>
318        </div>
319    </div>
320    <!-- Forgot Password Update Popup End -->
321    <!-- Forgot Password Popup Start -->
322    <div class="modal fade" id="forgot-pwd-modal" tabindex="-1" role="dialog" aria-labelledby="ResetPasswordModalTitle" aria-hidden="true">
323        <div class="modal-dialog">
324            <div class="modal-content">
325                <div class="modal-header">
326                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-label="Close" aria-hidden="false">&times;</span></button>
327                    <h4 class="modal-title" id="ResetPasswordModalTitle">Reset Password</h4>
328                </div>
329                <form id="reset-pwd-frm" method="post">
330                    <div class="modal-body">
331                        <div class="form-group group-email">
332                            <label for="resetemail" class="control-label">Email / Username:</label>
333                            <input type="text" name="resetemail" id="resetemail" class="form-control" placeholder="Enter Your Email Address">
334                        </div>
335                        <div class="form-group">
336                            <div id="forgot-pwd-responseBox"></div>
337                        </div>
338                    </div>
339                    <div class="modal-footer">
340                        <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
341                        <button type="submit" class="btn btn-darkgrey">Reset</button>
342                    </div>
343                </form>
344            </div>
345        </div>
346    </div>
347    <!-- Forgot Password Popup End -->
348    <!-- Message for fair not live and invalid login -->
349    <div id="MessageResponseWindow" class="modal fade bs-example-modal-md" aria-labelledby="EventNotLiveModalTitle" tabindex="-1" role="dialog">
350        <div class="modal-dialog modal-md">
351            <div class="modal-content" >
352                <div class="modal-header">
353                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-label="Close" aria-hidden="false">&times;</span></button>
354                    <h4 class="modal-title" id="EventNotLiveModalTitle">CodeSecCon 2026</h4>
355                </div>
356                <div class="ResponseBoxTxt" id="ResponseBoxTxt">
357
358                </div>
359            </div>
360        </div>
361    </div>
362
363
364
365<!-- primery branch popup -->
366<div class='container-parent  header-content'><div class='container'><div class="header-content sticky fullWidthNav" role="Header">
367<div class="slim-bar">
368<div class="container-fluid">
369<div class="row">
370<div class="col-sm-12">
371<ul>
372<li>Need Technical Assistance?&nbsp;
373<div id="bar-sep"></div>
374<a href="mailto:[email protected]"><span class="glyphicon glyphicon-envelope"></span> &nbsp;[email protected]</a></li>
375</ul>
376</div>
377</div>
378</div>
379</div>
380<div class="container">
381<div class="row">
382<div class="col-sm-3 event-logo"><a href="/en/"><img src="https://vepimg.b8cdn.com/uploads/vjfnew/20550/content/files/1
382754572902logo-light-300ppi-cropped-png1754572902.png" alt="company logo" /></a></div>
383<div class="col-sm-9"><nav class="navbar navbar-default" role="navigation">
384<div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#main-nav"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button></div>
385<div class="collapse navbar-collapse" id="main-nav">
386<div class="navClose">x</div>
387<ul class="nav navbar-nav">
388<li><a href="/">Home</a></li>
389<li><a href="/en/#home-agenda">Agenda</a></li>
390<li><a href="/en/#exploreSponsor">Sponsors</a></li>
391<li><a href="#LoginModal" data-toggle="modal">Login</a></li>
392<li><a href="/en/registration-form" id="RegisterBtn" class="coloredShadow rounded btnColored" target="_blank" rel="noopener noreferrer"><i class="fa fa-user"></i>Register</a></li>
393</ul>
394</div>
395</nav></div>
396</div>
397</div>
398</div></div></div>    <style>
399        /* thank you page */
400        .thanksWrapper iframe {
401            height: auto !important;
402        }
403
404        .thanksWrapper .two-btns a {
405            border-radius: 5px !important;
406            box-shadow: none;
407            font-family: var(--secondaryFont), sans-serif;
408            margin: 4px 0px !important;
409            outline: none;
410            padding: 12px;
411            text-transform: uppercase;
412            width: 100%;
413            background: #F36531 !important;
414            color: #fff !important;
415        }
416        .thanksWrapper .two-btns a:hover {
417            background: #fff !important;
418            color: #F36531 !important;
419        }
420    </style>
421  <div class="section registration-form">
422    <div class="page-heading">
423      <div class="container">
424        <h4 class="form-heading">Registration Form</h4>
425      </div>
426    </div>
427    <div class="container full-page-container">
428      <div class="row row-content">
429        <div class="col-lg-12"><div class="formbuilder-form-wrap"><p><!doctype html>
430<html lang="en">
431  <head>
432    <meta charset="utf-8">
433    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
434    <meta name="description" content="">
435
436    <!-- Bootstrap core CSS -->
437    <link rel="stylesheet" href="https://vepimg.b8cdn.com/uploads/vjfnew/9258/content/files/1684341076bootstrap-min-css1684341076.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
438    <link rel="stylesheet" href="https://vepimg.b8cdn.com/uploads/vjfnew/9258/content/files/1684341203jquery-ui-css1684341203.css">
439    <link rel="stylesheet" href="https://vepimg.b8cdn.com/uploads/vjfnew/9258/content/files/1684341127bootstrap-datepicker-min-css1684341127.css"/>
440    
440<script src="https://vepimg.b8cdn.com/uploads/vjfnew/9258/content/files/1684341173jquery-1-12-4-js1684341173.js"></script>
440
441    
441<script src="https://vepimg.b8cdn.com/uploads/vjfnew/9258/content/files/1684341220jquery-ui-js1684341220.js"></script>
441
442    <link href="//vepcss.b8cdn.com/css/font-awesome.min.css" rel="stylesheet" type="text/css">
443      
444    <!-- Datepicker -->
445    
446    <style>
447      .bd-placeholder-img {
448        font-size: 1.125rem;
449        text-anchor: middle;
450        -webkit-user-select: none;
451        -moz-user-select: none;
452        -ms-user-select: none;
453        user-select: none;
454      }
455
456      .themed-grid-col {
457          padding-top: 15px;
458          padding-bottom: 15px;
459          background-color: rgba(86, 61, 124, .15);
460          border: 1px solid rgba(86, 61, 124, .2);
461      }
462
463      .themed-container {
464          padding: 15px;
465          margin-bottom: 30px;
466          background-color: rgba(0, 123, 255, .15);
467          border: 1px solid rgba(0, 123, 255, .2);
468      }
469
470      @media (min-width: 768px) {
471        .bd-placeholder-img-lg {
472          font-size: 3.5rem;
473        }
474      }
475      .primary_account_number_btn{
476        background-color: #F1F5F8;
477      }
478      .selectionDataFields .control-label{
479        display: inline-block;
480        color: #4F5B67;
481        font-weight: 500;
482      }
483
484      .selectedAreaManagerDetailsBlock{
485        min-height: 100px;
486      }
487      .selectedAreaManagerBlock{
488        width: 100%;
489        padding: 16px;
490        background: #F0F2F6;
491        border-radius: 8px;
492        border: 1px solid #E5E4EA;
493        position: relative;
494      }
495    </style>
496  </head>
497  <body class="py-4">
498  <div class="container-fluid">
499<!-- Global CSS --> <style></style><!--include top bs file-->
500
501
502<link rel="stylesheet" href="https://vepimg.b8cdn.com/uploads/vjfnew/5681/content/files/1698227853flatpickr-min-css1698227853.css">
503<script src="https://vepimg.b8cdn.com/uploads/vjfnew/5681/content/files/1698227840flatpickr-js1698227840.js"></script>
503
504<style>
505    #LoginModal.pending_payment_model .modal-dialog,
506    #floorPlanReservationModal .modal-dialog {
507        margin: 30px auto;
508        width: 100%;
509        max-width: 500px;
510    }
511    #LoginModal.pending_payment_model .modal-dialog .modal-content,
512    #floorPlanReservationModal .modal-dialog .modal-content {
513        max-width: 800px !important;
514    }
515    #LoginModal.pending_payment_model #login-footer .col-sm-4,
516    #floorPlanReservationModal #floor-plan-footer .col-sm-4 {
517        display: flex;
518        align-items: center;
519        gap: 12px;
520        width: 100%;
521        float: none;
522        padding: 0;
523    }
524    #floorPlanReservationModal {
525        text-align: center;
526    }
527    #floorPlanReservationModal:before {
528        content: '';
529        display: inline-block;
530        height: 100%;
531        vertical-align: middle;
532    }
533    #floorPlanReservationModal .modal-dialog {
534        display: inline-block;
535        text-align: left;
536        vertical-align: middle;
537        margin: 30px auto;
538        width: 100%;
539        max-width: 500px;
540    }
541    #floorPlanReservationModal .modal-header {
542        background: #fff !important;
543        border-bottom: none;
544        padding: 20px 20px 0;
545    }
546    #floorPlanReservationModal .modal-header .close {
547        color: #999;
548        opacity: 1;
549        font-weight: 300;
550        font-size: 28px;
551    }
552    #floorPlanReservationModal .modal-title {
553        font-weight: 700;
554        font-size: 18px;
555        line-height: 1.3;
556        margin: 0;
557    }
558    #floorPlanReservationModal .modal-body {
559        padding: 20px;
560        font-size: 14px;
561    }
562    #floorPlanReservationModal .modal-body p {
563        font-size: 14px;
564        line-height: 1.5;
565        margin: 0 0 16px;
566        color: #5F6269;
567        font-weight: 400;
568    }
569    #floorPlanReservationModal .modal-body .control-label {
570        font-size: 14px;
571        font-weight: 600;
572        margin-bottom: 6px;
573    }
574    #floorPlanReservationModal .modal-body .form-control {
575        font-size: 14px;
576        height: auto;
577        padding: 8px 12px;
578    }
579    #floorPlanReservationModal .modal-footer {
580        border-top: none;
581        padding: 0 20px 20px;
582        text-align: left;
583    }
584    #floorPlanReservationModal #floor-plan-footer .row {
585        margin: 0;
586    }
587    #floorPlanReservationModal #floor-plan-footer .col-sm-4 {
588        width: 100%;
589        max-width: 100%;
590    }
591    #floorPlanReservationModal #reserveBoothBtn {
592        display: block;
593        width: 100%;
594        text-align: center;
595        text-transform: uppercase;
596        margin-bottom: 0 !important;
597        border-radius: 4px;
598        padding: 10px 16px;
599        border: none;
600        color: #fff;
601        text-decoration: none;
602        font-size: 14px;
603        font-weight: 600;
604        line-height: 1.4;
605        box-sizing: border-box;
606    }
607    @media screen and (max-width: 767px) {
608        #LoginModal.pending_payment_model #login-footer .col-sm-4,
609        #floorPlanReservationModal #floor-plan-footer .col-sm-4 {
610            flex-direction: column;
611        }
612        #floorPlanReservationModal .modal-dialog {
613            width: 90%;
614            max-width: 90%;
615        }
616    }
617
618    .fa-question-circle-o:before {
619        content: "\f29c" !Important;
620    }
621    .tooltip * {
622        color: #fff !important;
623        line-height: 1.3;
624    }
625</style>
626<script type="text/javascript">
627    // VFE-40877 -> https://marvellsgevent.vfairs.com/
628    let maxUserCountLimitExceeded = 0;
629    $(function(event){
630        $('.reg-form-data').on('click', 'input[type="submit"]', function(e){
631            // Validate .jfif files before any other processing
632            if (!validateAllFileInputs($(this).closest('form')[0])) {
633                e.preventDefault();
634                e.stopPropagation();
635                alert('Form cannot be submitted. Please remove all .jfif files and use JPG, PNG, or PDF format instead.');
636                
637                // Scroll to the first file input with error
638                var firstErrorInput = $(this).closest('form').find('input[type="file"]').filter(function() {
639                    return hasBlockedFileExtensions(this);
640                }).first();
641                
642                if (firstErrorInput.length > 0) {
643                    firstErrorInput[0].scrollIntoView({ behavior: 'smooth', block: 'center' });
644                    firstErrorInput.focus();
645                }
646                
647                return false;
648            }
649
650                        
651            if(maxUserCountLimitExceeded){
652                alert('The event has reached its maximum capacity');
653                e.stopPropagation();
654                e.preventDefault();
655                return false;
656            }
657        })
658    });
659
660    // Extract grouped fields (e.g. branchDetails[name][], branchDetails[value][]) into an object
661    function extractGroupedFields(formDataArray, prefix) {
662        const grouped = {};
663
664        formDataArray.forEach(({ name, value }) => {
665            const match = name.match(new RegExp(`^${prefix}\\[([^\\]]+)\\]\\[\\]$`));
666            if (match) {
667                const key = match[1]; // e.g. "name", "value", etc.
668                if (!grouped[key]) grouped[key] = [];
669                grouped[key].push(value);
670            }
671        });
672
673        return grouped;
674    }
675
676    // Update user_list[] inputs with selected branch/area manager fields
677    function updateUserListWithSelectedFields() {
678        const form = $('.reg-form-data');
679        const formDataArray = form.serializeArray();
680
681        // Common fields for both branch and area manager
682        const commonFields = [
683            "tradeshow-customer-type",
684            "customer_prospect_type", 
685            "ts_business_name",
686            "ts_business_address", 
687            "ts_district_sales_manager",
688            "ts_sales_person_area_manager",
689            "ts_city_state_zip",
690            "ts_am_email",
691            "ts_dsm_email",
692            "ts_am_phone"
693        ];
694
695        // Fields specific to branch registration
696        const branchFields = [
697            ...commonFields,
698            "tradeshow-branch[]",
699            "branch_registration_field_id", 
700            "primeryAccountNumber",
701            "branchDetails"
702        ];
703
704        // Fields specific to area manager registration
705        const areaManagerFields = [
706            ...commonFields,
707            "tradeshow-area-managers",
708            "area_manager_registration_field_id",
709            "areaManagerDetails"
710        ];
711
712        // Determine if area manager based on selection
713        const isAreaManager = $('#customer_prospect_type').val() === 'area-manager';
714        const selectedFields = isAreaManager ? areaManagerFields : branchFields;
715
716        // Build object with selected field data
717        const selectedFieldData = {};
718
719        formDataArray.forEach(({ name, value }) => {
720            if (selectedFields.includes(name)) {
721                if (name.endsWith('[]')) {
722                    // Handle array fields like tradeshow-branch[]
723                    const key = name.slice(0, -2);
724                    if (!selectedFieldData[key]) selectedFieldData[key] = [];
725                    selectedFieldData[key].push(value);
726                }  else {
727                    // Handle regular fields
728                    selectedFieldData[name] = value;
729                }
730            }
731        });
732
733        // Extract grouped fields data
734        if (isAreaManager) {
735            const grouped = extractGroupedFields(formDataArray, 'areaManagerDetails');
736            if (Object.keys(grouped).length) {
737                selectedFieldData['areaManagerDetails'] = grouped;
738            }
739        } else {
740            const grouped = extractGroupedFields(formDataArray, 'branchDetails');
741            if (Object.keys(grouped).length) {
742                selectedFieldData['branchDetails'] = grouped;
743            }
744        }
745
746        // Update each user_list[] input
747        const userListInputs = form.find('input[name="user_list[]"]');
748        userListInputs.each(function () {
749            const $input = $(this);
750            const value = $input.val();
751
752            if (!value?.trim()) return;
753
754            try {
755                const userObj = JSON.parse(value);
756                // Remove fields that will be updated
757                selectedFields.forEach(field => delete userObj[field]);
758
759                // Remove nested details
760                if (isAreaManager) delete userObj['areaManagerDetails'];
761                else delete userObj['branchDetails'];
762
763                // Merge with selected data
764                const updatedUserObj = { ...userObj, ...selectedFieldData };
765                console.log(updatedUserObj)
766
767                $input.val(JSON.stringify(updatedUserObj));
768            } catch (err) {
769                console.warn("Invalid JSON in user_list[] input", err);
770            }
771        });
772    }
773  
774</script>
774
775<style>
776    .limit-error{
777        color: red;
778        width: 80%;
779        float: left;
780    }
781    .row.st-payment-row {
782        justify-content: space-between;
783        max-width: 920px;
784        -webkit-box-orient: horizontal;
785        -webkit-box-direction: normal;
786        -webkit-box-pack: justify;
787        -ms-flex-pack: justify;
788        -webkit-flex-direction: row;
789        -ms-flex-direction: row;
790        flex-direction: row;
791        -webkit-justify-content: space-between;
792        justify-content: space-between;
793        max-width: 920px;
794        margin: 0 auto;
795        border: 2px solid #ddd;
796        border-radius: 12px;
797        padding: 3rem;
798    }
799    .st-payment {
800        box-shadow: 3px 0 30px 0 rgba(0,0,0,.18);
801        padding: 15px;
802        border-radius: 12px;
803    }
804    span.st-back img:hover {transform: scale(1.2);}
805    span.st-back {
806        cursor: pointer;
807        display: block;
808        padding-bottom: 35px;
809    }
810    .st-payment h2 {
811        font-size: 22px;
812    }
813    span.st-payment-icons {
814        position: absolute;
815        right: 3%;
816        top: 34%;
817    }
818    span.st-payment-icons img {
819        margin: 0px 2px;
820    }
821    .st-payment-date {
822        display: flex;
823    }
824    .st-payment-cards {
825        position: relative;
826    }
827    .st-payment-date input {
828        border-top: none;
829    }
830    
831    .nw-frm-bldr.reg-form-wrap {
832        /*padding-top: 100px;  done against this ticket VFC-19235 */
833        padding-top: 20px;
834    }	
835
836
837    @media only screen and (max-width: 768px) {
838        .row.st-payment-row {
839            padding: 1rem 0rem;
840        }
841        .ticket-dec {
842            padding-bottom: 20px;
843        }
844
845    }
846
847    /* Fix applied for IOS Safari VFE-52740 */
848        .dropdown.open .dropdown-menu {
849            display: block !important;
850        }
851    /* Fix applied for IOS Safari VFE-52740 */
852
853</style>
854    
855<style>
856    .payment-methods-div img{
857        display: block;
858        object-fit: scale-down;
859        margin-left: 3px;
860        height: 40px;
861        width: 80px;
862    }
863    .payment-methods-div .payment-method-label {
864        display: block;
865        font-size: 14px;
866        font-weight: 500;
867        line-height: 40px;
868        min-width: 80px;
869        text-align: center;
870        margin-left: 3px;
871    }
872    #card-element {
873        width: 100%;
874        padding: 15px;
875    }
876    .form-row > label{
877        padding: 15px;
878    }
879    
880    
881    .datepicker.datepicker-dropdown.dropdown-menu {
882        max-width: 228px;
883    }
884
885    .modal.fade.in {
886        opacity: 1;
887        background: #00000026;
888    }
889
890    .modal .modal-dialog {
891        width: 600px;
892        margin: 83px auto;
893    }
894
895    .modal .modal-header {
896        display: -ms-flexbox;
897        display: initial;
898        -ms-flex-align: start;
899        align-items: inherit;
900        -ms-flex-pack: justify;
901        justify-content: inherit;
902        padding: 1rem 1rem;
903        border-bottom: 1px solid #dee2e6;
904        border-top-left-radius: calc(.3rem - 1px);
905        border-top-right-radius: calc(.3rem - 1px);
906    }
907
908    .modal .btn {
909        display: inline-block;
910        padding: 6px 12px;
911        margin-bottom: 0;
912        font-size: 14px;
913        font-weight: 400;
914        line-height: 1.42857143;
915        text-align: center;
916        white-space: nowrap;
917        vertical-align: middle;
918        cursor: pointer;
919        -webkit-user-select: none;
920        -moz-user-select: none;
921        -ms-user-select: none;
922        user-select: none;
923        background-image: none;
924        border: 1px solid transparent;
925        border-radius: 4px;
926    }
927
928    .modal .form-control {
929        display: block;
930        width: 100%;
931        height: 34px;
932        padding: 6px 12px;
933        font-size: 14px;
934        line-height: 1.42857143;
935        color: #555;
936        background-color: #fff;
937        background-image: none;
938        border: 1px solid #ccc;
939        border-radius: 4px;
940        -webkit-box-shadow: inset 0 1px 1px rgb(0 0 0 / 8%);
941        box-shadow: inset 0 1px 1px rgb(0 0 0 / 8%);
942        -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
943        -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
944        transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
945    }
946
947    .modal .modal-footer {
948        display: -ms-flexbox;
949        display: inherit;
950        -ms-flex-wrap: wrap;
951        flex-wrap: inherit;
952        -ms-flex-align: center;
953        align-items: inherit;
954        -ms-flex-pack: end;
955        /* justify-content: flex-end; */
956        padding: .75rem;
957        border-top: 1px solid #dee2e6;
958        border-bottom-right-radius: calc(.3rem - 1px);
959        border-bottom-left-radius: calc(.3rem - 1px);
960    }
961
962    .modal.in .modal-dialog {
963        -webkit-transform: translate3d(0, 0, 0);
964        -o-transform: translate3d(0, 0, 0);
965        transform: translate3d(0, 0, 0);
966    }
967
968    .modal .col-sm-4 {
969        -ms-flex: 0 0 33.333333%;
970        flex: none;
971        max-width: none;
972    }
973
974    .modal h4.modal-title {
975        font-size: 18px;
976    }
977
978    .order-change span {
979        margin-left: 20px !IMPORTANT;
980    }
981
982    span.has-error, span.has-error > p {
983        color: red;
984        display: block;
985        width: 80%;
986        float: right;
987        font-weight: bold;
988        font-size: 11px !important;
989        color: red !important;
990    }
991
992    .custom-col-1 label.error, #packages-error {
993        color: red;
994        display: block;
995        width: 80%;
996        float: left;
997    }
998
999
1000    .custom-col-1 .col-12 span {
1001        margin-left: 0px;
1002        margin-bottom: 20px;
1003    }
1004
1005    .custom-col-1 .form-control {
1006        display: inline-block;
1007        width: 100%;
1008        float: left;
1009        margin-bottom: 12px;
1010    }
1011
1012    .custom-col-1 .control-label {
1013        /*display: inline-block;*/
1014        /*width: 32%;*/
1015        /*float: left;*/
1016        text-overflow: clip;
1017        overflow: hidden;
1018        white-space: pre-wrap;
1019        vertical-align: middle;
1020    }
1021
1022    /*.order-change {*/
1023    /*    display: flex;*/
1024    /*    flex-wrap: wrap;*/
1025    /*    padding: 0px;*/
1026    /*}
1026*/
1027    .order-change {
1028        display: flex;
1029        flex-wrap: nowrap;
1030        align-items: flex-start;
1031    }
1032
1033    .order-change input {
1034        order: 2;
1035    }
1036
1037    .order-change label.error {
1038        width: 100%;
1039        order: 1;
1040    }
1041
1042    .order-change span {
1043        order: 3;
1044    }
1045
1046    label.error,span.error {
1047        color: red;
1048        display: block
1049    }
1050            .custom-col-1 .iti--allow-dropdown {
1051            width: 80%;
1052            float: left;
1053        }
1054    
1055    .coupn-code-sec {
1056        width: 80%;
1057        float: left;
1058    }
1059
1060    .custom-col-1 .iti--allow-dropdown .form-control {
1061        width: 100%;
1062    }
1063
1064    .custom-col-1 .iti--allow-dropdown {
1065        padding: 0 0 15px;
1066    }
1067
1068    .reg-form-data .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
1069
1070        margin-bottom: 0px;
1071        font-size: 14px;
1072    }
1073
1074    .reg-form-data .select2-selection.select2-selection--single, .reg-form-data .select2-selection__arrow {
1075        margin-top: 15px;
1076    }
1077
1078    .reg-form-data .select2-container span {
1079        margin-bottom: 0px !important;
1080    }
1081
1082    .required.control-label:after {
1083        content: "*";
1084        color: red;
1085    }
1086
1087    .field-hidden {
1088        display: none;
1089    }
1090
1091    .iti__selected-flag {
1092        height: auto !important;
1093        min-height: 22px;
1094    }
1095
1096    .checkbox-label {
1097        /*margin-top: 0 !important;*/
1098        padding-top: 0 !important;
1099    }
1100
1101    .select2-container--default .select2-results__option[aria-selected=true] {
1102        background-color: #ddd;
1103    }
1104
1105    .form-control-file {
1106        width: 202px;
1107    }
1108
1109    h1, h2, h3, h4, h5, h6 {
1110        text-align: left;
1111    }
1112
1113    p {
1114        font-size: 1.5rem;
1115    }
1116
1117    select[multiple], select[size] {
1118        height: auto;
1119        width: 100%;
1120        border: 1px solid #dcdbff;
1121        border-radius: 4px;
1122        font-size: 14px;
1123        cursor: auto;
1124        padding: 5px 5px;
1125    }
1126
1127    .select2-container--default .select2-selection--multiple {
1128        background-color: white;
1129        border: 1px solid #dcdbff;
1130        border-radius: 7px;
1131        cursor: pointer;
1132        font-size: 14px;
1133        min-height: calc(2.75em + .25rem + 2px);
1134        height: auto;
1135
1136    }
1137
1138    .select2-container--default .select2-selection--multiple .select2-selection__rendered {
1139        overflow: visible;
1140    }
1141
1142    .select2-search--inline {
1143        width: 100%;
1144    }
1145
1146    .select2-search--inline .select2-search__field {
1147        width: 100% !important;
1148    }
1149
1150    .select2-search--inline .select2-search__field:placeholder-shown {
1151        width: 100% !important;
1152    }
1153
1154    .select2-container--default.select2-container--focus .select2-selection--multiple {
1155        border: solid #80bdff 1px !important;
1156        outline: 0
1157    }
1158
1159    .custom-col-1 .col-12 span {
1160        margin-bottom: 0px !important;
1161    }
1162
1163    .select2-container--default .select2-search--inline .select2-search__field {
1164        margin-top: 9px !important;
1165        padding-left: 5px !important;
1166    }
1167
1168    .helper-tooltip {
1169        float: right;
1170    }
1171    .form-rtl .helper-tooltip{
1172        float: left !important;
1173    }
1174
1175    .form-rtl input[type='checkbox']+label,
1176    .form-rtl input[type='radio']+label {
1177        right: 8px;
1178        left: 0 !important;
1179        bottom: 2px !important;
1180    }
1181
1182    .tooltip.in{
1183        opacity: 100% !important;
1184    }
1185    .tooltip p {
1186        margin-bottom: 0 !important;
1187        font-size: 10px !important;
1188    }
1189    .ctooltip {
1190        position: relative;
1191        display: inline-block;
1192    }
1193
1194    .ctooltip .ctooltiptext {
1195        visibility: hidden;
1196        background-color: black;
1197        color: #fff;
1198        text-align: center;
1199        border-radius: 6px;
1200        padding: 1px 8px;
1201        display: table;
1202        max-width: 100%;
1203        min-width: 110px;
1204        margin-top: -17PX;
1205        margin-left: 12px !important;
1206    }
1207
1208    .ctooltip:hover .ctooltiptext {
1209        visibility: visible;
1210    }
1211    .form-rtl {
1212        direction: rtl;
1213    }
1214
1215    .form-rtl label {
1216        text-align: right;
1217    }
1218
1219    .form-rtl label.error,
1220    .form-rtl .helping-field {
1221        float: right;
1222        text-align: right;
1223    }
1224
1225    .form-rtl .order-change span {
1226        margin-right: 20px;
1227    }
1228
1229    .form-rtl p,
1230    .form-rtl h1,
1231    .form-rtl h2,
1232    .form-rtl h3,
1233    .form-rtl h4,
1234    .form-rtl h5,
1235    .form-rtl h6 {
1236        text-align: right;
1237    }
1238
1239    .form-rtl select[multiple="multiple"]+p {
1240        clear: none !important;
1241        margin-right: 10px !important;
1242    }
1243
1244    .form-rtl .starrr-container {
1245        text-align: right;
1246    }
1247
1248    .form-rtl .starrr {
1249        display: inline-block;
1250    }
1251
1252    input[type="file"] {
1253        margin-bottom: 10px;
1254    }
1255    input[type="file"]::file-selector-button {
1256        margin-right: 10px;
1257    }
1258    input[type="file"]::-webkit-file-upload-button {
1259        margin-right: 10px;
1260    }
1261    /* Fix for speaker registration form - show complete filename */
1262    
1263    a.fa-star:focus,
1264    a.fa-star:active,
1265    a.fa-star:hover {
1266        color: #FFD119;
1267        text-decoration: none;
1268    }
1269    .fa-star {
1270        font-size: 30px;
1271        padding: 0 1px;
1272        cursor: pointer;
1273        color: #FFD119;
1274        text-decoration: none;
1275    }
1276    .fa.fa-star.fa-star-emp {
1277        color: #cacaca;
1278    }
1279
1280    .star-input {
1281        height: 0px;
1282        width: 0px;
1283        padding: 0;
1284        visibility: hidden;
1285        display: block;
1286    }
1287    #loadingMessage,#loadingMessage1 {
1288        width: 100%;
1289        height: 100%;
1290        z-index: 1000;
1291        background: #ccc;
1292        top: 0px;
1293        left: 0px;
1294        position: absolute;
1295    }
1296    .desc_para {
1297        height: 75px;
1298        margin-bottom: 8px;
1299        transition: 5s ease;
1300        display: -webkit-box;
1301        -webkit-line-clamp: 3;
1302        -webkit-box-orient: vertical;
1303        overflow: hidden;
1304    }
1305    .desc_para.show {
1306        height: auto;
1307    }
1308    /*.collapse:not(.show) {*/
1309    /*    display: block !important;*/
1310    /*}
1310*/
1311    .event__form select{
1312        -webkit-appearance: auto !important;
1313    }
1314
1315    .col-12.order-change div {
1316        display: flex;
1317        align-items: baseline;
1318    }
1319
1320    .col-12.order-change div label {
1321        order: 2;
1322        padding-left:10px;
1323        display: inline;
1324    }
1325    .custom-tooltip .tooltip-inner {
1326      font-size: 10px; /* Adjust the font size as needed */
1327    }
1328    /*--*/
1329.formbuilder-form-wrap h3 {
1330    font-size: 28px;
1331    font-weight: bold;
1332    margin: 20px auto;
1333    max-width: 850px;
1334    color: #696969;
1335}
1336.reg-form-data {
1337    box-shadow: 0px 2px 20px 0 rgba(0, 0, 0, 0.1);
1338    border-radius: 20px;
1339    border: 1px solid #dedede;
1340    margin-bottom: 30px;
1341    max-width: 850px;
1342    padding-top: 15px;
1343    padding-bottom: 15px;
1344    margin: auto;
1345    background-color: #FFF;
1346}
1347.reg-form-data .form_field_grp {
1348    font-size: 14px !important;
1349    color: #696969;
1350    margin-bottom: 0px !important;
1351    margin-left: 0px;
1352    height: auto !important;
1353}
1354/* Restore bullet/number styling for editor rich text in form fields */
1355.reg-form-data .form_field_grp ul,
1356.section .form_field_grp ul {
1357    list-style-type: disc;
1358    padding-left: 0.55em;
1359    margin: 0.5em 0;
1360}
1361.reg-form-data .form_field_grp ul li,
1362.section .form_field_grp ul li {
1363    list-style: inherit;
1364    display: list-item;
1365}
1366.reg-form-data .form_field_grp ol,
1367.section .form_field_grp ol {
1368    list-style-type: decimal;
1369    padding-left: 1.5em;
1370    margin: 0.5em 0;
1371}
1372.reg-form-data .form_field_grp ol li,
1373.section .form_field_grp ol li {
1374    list-style: inherit;
1375    display: list-item;
1376}
1377/* Ensure dropdown/menu lists never show bullets (Assign dropdown, etc.) - must override above */
1378.reg-form-data .dropdown-menu,
1379.reg-form-data .dropdown-menu ul,
1380.section .dropdown-menu,
1381.section .dropdown-menu ul,
1382.packageContainer .dropdown-menu,
1383.packageContainer__head .dropdown-menu {
1384    list-style: none !important;
1385}
1386.packageContainer__head .dropdown-menu.dropdown-menu-main {
1387    padding: 8px !important;
1388}
1389.reg-form-data .dropdown-menu li,
1390.reg-form-data .dropdown-menu ul li,
1391.section .dropdown-menu li,
1392.section .dropdown-menu ul li,
1393.packageContainer .dropdown-menu li,
1394.packageContainer__head .dropdown-menu li {
1395    list-style: none !important;
1396    display: block;
1397}
1398.reg-form-data input[type=submit] {
1399    background: #f96634;
1400    border-color: #f96634;
1401    border-radius: 50px !important;
1402}
1403.reg-form-data .user-links > div {
1404    padding: 0px 0px;
1405    margin-right: 8px;
1406}
1407.reg-form-data .user-links .btn-primary {
1408    background: #f96634;
1409    border-color: #f96634;
1410}
1411.reg-form-data .coupn-code-sec {
1412    display: flex;
1413    align-items: center;
1414    gap: 8px;
1415    margin-left: 8px;
1416}
1417.reg-form-data .coupn-code-sec input {
1418    margin: 0px 0px;
1419}
1420.reg-form-data .coupn-code-sec .btn-primary {
1421    background: #f96634;
1422    border-color: #f96634;
1423}
1424.ev__ticket__wrapper {
1425    width: 100% !important;
1426}
1427.ticket-form {
1428    border: none;
1429    padding: 0px 15px !important;
1430    box-shadow: none;
1431}
1432.ticket-form h3 {
1433    font-size: 22px;
1434}
1435.packageContainer h3 {
1436    font-size: 16px;
1437    margin: 0px 0px;
1438    padding: 0px 0px;
1439}
1440
1441    .packageContainer h3 {
1442        font-size: 16px;
1443        margin: 0px 0px;
1444        padding: 0px 0px;
1445    }
1446</style>
1447<style>
1448/* Ticket: VFC-21254 */
1449
1450.ticketadd__desc__text{
1451    width: 60%;
1452}
1453
1454.ticketadd__desc__text .ticketadd__description{
1455    font-family: var(--primary-font);      
1456    font-style: normal;
1457    font-weight: 400;
1458    font-size: 14px;
1459    line-height: 22px;
1460    margin: 8px 0;
1461    color: #5F6269;
1462}
1463
1464.ticketadd__desc__text .ticketadd__description .morecontent{
1465    display: none;
1466}
1467
1468.ticketadd__desc__text .ticketadd__title{
1469    font-weight: 600;
1470}
1471/*--*/
1472
1473.both-block {
1474   padding: 15px 0;
1475}
1476
1477.ev__ticket .row {
1478    margin-left: 0;
1479    margin-right: 0;
1480}
1481    .formbuilder-form-wrap h3 {
1482        font-size: 28px;
1483        font-weight: bold;
1484        margin: 20px auto;
1485        max-width: 850px;
1486        color: #696969;
1487    }
1488    .reg-form-data {
1489        box-shadow: 0px 2px 20px 0 rgba(0, 0, 0, 0.1);
1490        border-radius: 20px;
1491        border: 1px solid #dedede;
1492        margin-bottom: 30px;
1493        max-width: 850px;
1494        padding-top: 15px;
1495        padding-bottom: 15px;
1496        margin: auto;
1497        background-color: #FFF;
1498    }
1499    .reg-form-data .form_field_grp {
1500        font-size: 14px !important;
1501        color: #696969;
1502        margin-bottom: 0px !important;
1503        margin-left: 0px;
1504        height: auto !important;
1505    }
1506    .reg-form-data input[type=submit] {
1507        background: #f96634;
1508        border-color: #f96634;
1509        border-radius: 50px !important;
1510    }
1511    .reg-form-data .user-links > div {
1512        padding: 0px 0px;
1513        margin-right: 8px;
1514    }
1515    .reg-form-data .user-links .btn-primary {
1516        background: #f96634;
1517        border-color: #f96634;
1518    }
1519    .reg-form-data .coupn-code-sec {
1520        display: flex;
1521        align-items: center;
1522        gap: 8px;
1523        margin-left: 8px;
1524    }
1525    .reg-form-data .coupn-code-sec input {
1526        margin: 0px 0px;
1527    }
1528    .reg-form-data .coupn-code-sec .btn-primary {
1529        background: #f96634;
1530        border-color: #f96634;
1531    }
1532
1533    .ev__ticket__wrapper {
1534        width: 100% !important;
1535    }
1536
1537    .ticket-form {
1538        border: none;
1539        padding: 0px 0px;
1540        box-shadow: none;
1541    }
1542    .ticket-form h3 {
1543        font-size: 22px;
1544    }
1545    .packageContainer h3 {
1546        font-size: 16px;
1547        margin: 0px 0px;
1548        padding: 0px 0px;
1549    }
1550    .formbuilder-form-wrap {
1551        width: 100%;
1552        max-width: 850px;
1553        margin: 0 auto;
1554    }
1555
1556    /* VFC-20036 ---> VFC-22346 */
1557    input#optionsRadios1[type="radio"] {
1558        width: 16px;
1559        height: 16px;
1560        appearance: none;
1561        border: 2px solid #ccc;
1562        border-radius: 50%;
1563        outline: none;
1564        cursor: pointer;
1565        transition: all 0.3s ease;
1566        background-color: #fff;
1567        top: 50%;
1568        transform: translateY(-50%);
1569        margin-top: 0px;
1570    } 
1571    input#optionsRadios1[type="radio"]:checked, input#optionsRadios1[type="radio"]:checked:focus {
1572        width: 16px;
1573        height: 16px;
1574        appearance: none;
1575        border: 3px solid #fff;
1576        border-radius: 50%;
1577        outline: 1px solid #f36531;
1578        cursor: pointer;
1579        transition: all 0.3s ease;
1580        background-color: #f36531; 
1581    }
1582
1583    .order__summary .radio {
1584        width: 145px;
1585    }
1586
1587    .order__summary .radio {
1588        background: #FFFFFF;
1589        border: 1px solid #DFE2E8;
1590        border-radius: 4px;
1591        padding: 13px;
1592        height: 56px;
1593        margin: 0px;
1594        display: flex;
1595        justify-content: center;
1596        align-items: center;
1597    }
1598
1599    .order__summary .payment__method {
1600        display: flex;
1601        align-items: center;
1602        gap: 16px;
1603        flex-wrap: wrap;
1604        justify-content: center;
1605    }
1606
1607    .order__summary .payment__method img {
1608        margin-left: 0px;
1609    }
1610
1611    .radio.payment-methods-div {
1612        label{
1613            padding-left:10px 
1614        }
1615    }
1616    .select2-container--default.select2-container--focus .select2-selection--multiple,.select2-selection--multiple {
1617   height: max-content !important;
1618}
1619    
1620
1621</style>
1622<style>.{0:;1:0;2:1;}</style><div class=''>
1623    <div class='  m-1'>
1624        <div class="" style="margin: auto">
1625                <form class="page_break_form em4r5    form-lang-en  custom-col-1 container-fluid reg-form-data"
1626        id='form_84537'
1627        action='/en/form/registerUser' method="post" enctype="multipart/form-data">
1628
1629        <input type='hidden' name='current_url' value='https://codeseccon.com/en/registration-form?'>        <input type='hidden' id="abstractRedirectBack" name='abstractRedirectBack' value=''/>
1630        <input type='hidden' id="appId" name='appID' value='20550' autocomplete="off" aria-hidden="true" data-1p-ignore="true" data-lpignore="true" data-bw-ignore="true" data-bwignore="true"/>
1631        <input type='hidden' id="formId" name='formID' value='84537' autocomplete="off" aria-hidden="true" data-1p-ignore="true" data-lpignore="true" data-bw-ignore="true" data-bwignore="true"/>
1632        <input type='hidden' id="webinar_id" name='webinar_id' value='' autocomplete="off" aria-hidden="true" data-1p-ignore="true" data-lpignore="true" data-bw-ignore="true" data-bwignore="true"/>
1633        <input type='hidden' name='off_fields' id="off_fields" value=''/>
1634        <input type='hidden' name='customer_id' id="customer_id" value=''/>
1635        
1636        
1637            
1638        <input type='hidden' name='utm_source' value=''/>
1639        <input type='hidden' name='utm_source' value=''/>
1640        <input type='hidden' name='utm_medium' value=''/>
1641        <input type='hidden' name='utm_content' value=''/>
1642        <input type='hidden' name='utm_campaign' value=''/>
1643        <input type='hidden' name='utm_term' value=''/>
1644        <input type='hidden' name='partner_tag' value=''/>
1645        <input type='hidden' name='mktg_promoter_tag' value=''/>
1646        <input type='hidden' name='is_fields_decrypted' value=''/>
1647        <input type='hidden' name='access_id' value='' autocomplete="off" aria-hidden="true" data-1p-ignore="true" data-lpignore="true" data-bw-ignore="true" data-bwignore="true"/>
1648        <input type="hidden" name="payment_method_count" id="payment_method_count" value="
16480" />
1649                    <input type='hidden' name='uuid' id='uuid' value='' autocomplete="off" aria-hidden="true" data-1p-ignore="true" data-lpignore="true" data-bw-ignore="true" data-bwignore="true"/>
1650            <input type='hidden' name='uuiid' id='uuiid' value='2055052741124231912' autocomplete="off" aria-hidden="true" data-1p-ignore="true" data-lpignore="true" data-bw-ignore="true" data-bwignore="true"/>
1651                
1652                
1653        <!-- CSRF TOKEN ADD TO FORM-->
1654        
1655                                <input type='hidden' name='user_id' value=''/>
1656    
1657                
1658                
1659        
1660                        <div class="row m-1">
1661                        
1662            <div class="col-12 " role="group"   aria-label="First Name"  ><span id="grp_fld_1506998" class="form_field_grp "><label class='control-label required' for='fld_1506998'>First Name</label><input type=text  class='form-control form-control' name='first_name' id='fld_1506998'  required  value=''  placeholder='Enter First Name' /><span class='text-danger'></span></div><div class="col-12 " role="group"   aria-label="Last Name"  ><span id="grp_fld_1506999" class="form_field_grp "><label class='control-label required' for='fld_1506999'>Last Name</label><input type=text  class='form-control form-control' name='last_name' id='fld_1506999'  required  value=''  placeholder='Enter Last Name' /><span class='text-danger'></span></div><div class="col-12 " role="group"   aria-label="Business Email"  ><span id="grp_fld_1507000" class="form_field_grp "><label class='control-label required' for='fld_1507000'>Business Email</label><input type=email  class='form-control form-control' name='email' id='fld_1507000'  required  value=''  placeholder='Enter Email' /><span class='text-danger'></span></div><div class="col-12 " role="group"   aria-label="Company Name"  ><span id="grp_fld_1516606" class="form_field_grp "><label class='control-label required' for='fld_1516606'>Company Name</label><input type=text  class='form-control form-control' name='fld_1516606' id='fld_1516606'  required  value=''  placeholder='Enter Company Name' /><span class='text-danger'></span></div><div class="col-12 " role="group"   aria-label="Job Title"  ><span id="grp_fld_1516608" class="form_field_grp "><label class='control-label required' for='fld_1516608'>Job Title</label><input type=text  class='form-control form-control' name='fld_1516608' id='fld_1516608'  required  value=''  placeholder='Enter Job Title' /><span class='text-danger'></span></div><div class="col-12 " role="group"   aria-label="Phone Number"  ><span id="grp_fld_1516609" class="form_field_grp "><label class='control-label required' for='fld_1516609'>Phone Number</label><input type=text  pattern='^\+?[0-9]*'  class='form-control form-control tel-number' name='phone_number' id='fld_1516609'  required  value=''  placeholder='Enter Phone Number' /><span class='text-danger'></span></div><div class="col-12 " role="group"   aria-label="Company Size"  ><span id="grp_fld_1516610" class="form_field_grp "><label class='control-label required' for='fld_1516610'>Company Size</label><select class='form-control' name='fld_1516610' id='fld_1516610' required  data-part='chkall'  data-other-option='group_fld_1516610_other' ><option value=''>Please select</option><option value='1-10' >1-10</option><option value='11-100' >11-100</option><option value='101-500' >101-500</option><option value='501-1000' >501-1000</option><option value='1001-5000' >1001-5000</option><option value='5000+' >5000+</option></select><span class='text-danger'></span></div><div class="col-12 " role="group"   aria-label="Countries"  ><span id="grp_fld_1516611" class="form_field_grp "><label class='control-label required' for='fld_1516611'>Countries</label><select class='country_list form-control 1516611_1745582638307' name='fld_1516611' id='fld_1516611' required ><option value=''> Select Countries</option>1516611<option  value='Afghanistan' data-id='1' >Afghanistan</option><option  value='Aland Islands' data-id='2' >Aland Islands</option><option  value='Albania' data-id='3' >Albania</option><option  value='Algeria' data-id='4' >Algeria</option><option  value='American Samoa' data-id='5' >American Samoa</option><option  value='Andorra' data-id='6' >Andorra</option><option  value='Angola' data-id='7' >Angola</option><option  value='Anguilla' data-id='8' >Anguilla</option><option  value='Antarctica' data-id='9' >Antarctica</option><option  value='Antigua And Barbuda' data-id='10' >Antigua And Barbuda</option><option  value='Argentina' data-id='11' >Argentina</option><option  value='Armenia' data-id='12' >Armenia</option><option  value='Aruba' data-id='13' >Aruba</option><option  value='Australia' data-id='14' >Australia</option><option  value='Austria' data-id='15' >Austria</option><option  value='Azerbaijan' data-id='16' >Azerbaijan</option><option  value='Bahamas The' data-id='17' >Bahamas The</option><option  value='Bahrain' data-id='18' >Bahrain</option><option  value='Bangladesh' data-id='19' >Bangladesh</option><option  value='Barbados' data-id='20' >Barbados</option><option  value='Belarus' data-id='21' >Belarus</option><option  value='Belgium' data-id='22' >Belgium</option><option  value='Belize' data-id='23' >Belize</option><option  value='Benin' data-id='24' >Benin</option><option  value='Bermuda' data-id='25' >Bermuda</option><option  value='Bhutan' data-id='26' >Bhutan</option><option  value='Bolivia' data-id='27' >Bolivia</option><option  value='Bosnia and Herzegovina' data-id='28' >Bosnia and Herzegovina</option><option  value='Botswana' data-id='29' >Botswana</option><option  value='Bouvet Island' data-id='30' >Bouvet Island</option><option  value='Brazil' data-id='31' >Brazil</option><option  value='British Indian Ocean Territory' data-id='32' >British Indian Ocean Territory</option><option  value='Brunei' data-id='33' >Brunei</option><option  value='Bulgaria' data-id='34' >Bulgaria</option><option  value='Burkina Faso' data-id='35' >Burkina Faso</option><option  value='Burundi' data-id='36' >Burundi</option><option  value='Cabo Verde' data-id='40' >Cabo Verde</option><option  value='Cambodia' data-id='37' >Cambodia</option><option  value='Cameroon' data-id='38' >Cameroon</option><option  value='Canada' data-id='39' >Canada</option><option  value='Cayman Islands' data-id='41' >Cayman Islands</option><option  value='Central African Republic' data-id='42' >Central African Republic</option><option  value='Chad' data-id='43' >Chad</option><option  value='Chile' data-id='44' >Chile</option><option  value='China' data-id='45' >China</option><option  value='Christmas Island' data-id='46' >Christmas Island</option>
1662<option  value='Cocos (Keeling) Islands' data-id='47' >Cocos (Keeling) Islands</option><option  value='Colombia' data-id='48' >Colombia</option><option  value='Comoros' data-id='49' >Comoros</option><option  value='Congo' data-id='50' >Congo</option><option  value='Congo The Democratic Republic Of The' data-id='51' >Congo The Democratic Republic Of The</option><option  value='Cook Islands' data-id='52' >Cook Islands</option><option  value='Costa Rica' data-id='53' >Costa Rica</option><option  value='Cote D'Ivoire (Ivory Coast)' data-id='54' >Cote D'Ivoire (Ivory Coast)</option><option  value='Croatia (Hrvatska)' data-id='55' >Croatia (Hrvatska)</option><option  value='Cuba' data-id='56' >Cuba</option><option  value='Cyprus' data-id='57' >Cyprus</option><option  value='Czech Republic' data-id='58' >Czech Republic</option><option  value='Denmark' data-id='59' >Denmark</option><option  value='Djibouti' data-id='60' >Djibouti</option><option  value='Dominica' data-id='61' >Dominica</option><option  value='Dominican Republic' data-id='62' >Dominican Republic</option><option  value='East Timor' data-id='63' >East Timor</option><option  value='Ecuador' data-id='64' >Ecuador</option><option  value='Egypt' data-id='65' >Egypt</option><option  value='El Salvador' data-id='66' >El Salvador</option><option  value='Equatorial Guinea' data-id='67' >Equatorial Guinea</option><option  value='Eritrea' data-id='68' >Eritrea</option><option  value='Estonia' data-id='69' >Estonia</option><option  value='Eswatini' data-id='212' >Eswatini</option><option  value='Ethiopia' data-id='70' >Ethiopia</option><option  value='Falkland Islands' data-id='71' >Falkland Islands</option><option  value='Faroe Islands' data-id='72' >Faroe Islands</option><option  value='Fiji Islands' data-id='73' >Fiji Islands</option><option  value='Finland' data-id='74' >Finland</option><option  value='France' data-id='75' >France</option><option  value='French Guiana' data-id='76' >French Guiana</option><option  value='French Polynesia' data-id='77' >French Polynesia</option><option  value='French Southern Territories' data-id='78' >French Southern Territories</option><option  value='Gabon' data-id='79' >Gabon</option><option  value='Gambia The' data-id='80' >Gambia The</option><option  value='Georgia' data-id='81' >Georgia</option><option  value='Germany' data-id='82' >Germany</option><option  value='Ghana' data-id='83' >Ghana</option><option  value='Gibraltar' data-id='84' >Gibraltar</option><option  value='Greece' data-id='85' >Greece</option><option  value='Greenland' data-id='86' >Greenland</option><option  value='Grenada' data-id='87' >Grenada</option><option  value='Guadeloupe' data-id='88' >Guadeloupe</option><option  value='Guam' data-id='89' >Guam</option><option  value='Guatemala' data-id='90' >Guatemala</option><option  value='Guernsey and Alderney' data-id='91' >Guernsey and Alderney</option><option  value='Guinea' data-id='92' >Guinea</option><option  value='Guinea-Bissau' data-id='93' >Guinea-Bissau</option><option  value='Guyana' data-id='94' >Guyana</option><option  value='Haiti' data-id='95' >Haiti</option><option  value='Heard and McDonald Islands' data-id='96' >Heard and McDonald Islands</option><option  value='Honduras' data-id='97' >Honduras</option><option  value='Hong Kong S.A.R.' data-id='98' >Hong Kong S.A.R.</option><option  value='Hungary' data-id='99' >Hungary</option><option  value='Iceland' data-id='100' >Iceland</option><option  value='India' data-id='101' >India</option><option  value='Indonesia' data-id='102' >Indonesia</option><option  value='Iran' data-id='103' >Iran</option><option  value='Iraq' data-id='104' >Iraq</option><option  value='Ireland' data-id='105' >Ireland</option><option  value='Israel' data-id='106' >Israel</option><option  value='Italy' data-id='107' >Italy</option><option  value='Jamaica' data-id='108' >Jamaica</option><option  value='Japan' data-id='109' >Japan</option><option  value='Jersey' data-id='110' >Jersey</option><option  value='Jordan' data-id='111' >Jordan</option><option  value='Kazakhstan' data-id='112' >Kazakhstan</option><option  value='Kenya' data-id='113' >Kenya</option><option  value='Kiribati' data-id='114' >Kiribati</option><option  value='Korea North
1663' data-id='115' >Korea North
1664</option><option  value='Korea South' data-id='116' >
1664Korea South</option><option  value='Kosovo' data-id='248' >Kosovo</option><option  value='Kuwait' data-id='117' >Kuwait</option><option  value='Kyrgyzstan' data-id='118' >Kyrgyzstan</option><option  value='Laos' data-id='119' >Laos</option><option  value='Latvia' data-id='120' >Latvia</option><option  value='Lebanon' data-id='121' >Lebanon</option><option  value='Lesotho' data-id='122' >Lesotho</option><option  value='Liberia' data-id='123' >Liberia</option><option  value='Libya' data-id='124' >Libya</option><option  value='Liechtenstein' data-id='125' >Liechtenstein</option><option  value='Lithuania' data-id='126' >Lithuania</option><option  value='Luxembourg' data-id='127' >Luxembourg</option><option  value='Macau S.A.R.' data-id='128' >Macau S.A.R.</option><option  value='Macedonia' data-id='129' >Macedonia</option><option  value='Madagascar' data-id='130' >Madagascar</option><option  value='Malawi' data-id='131' >Malawi</option><option  value='Malaysia' data-id='132' >Malaysia</option><option  value='Maldives' data-id='133' >Maldives</option><option  value='Mali' data-id='134' >Mali</option><option  value='Malta' data-id='135' >Malta</option><option  value='Man (Isle of)' data-id='136' >Man (Isle of)</option><option  value='Marshall Islands' data-id='137' >Marshall Islands</option><option  value='Martinique' data-id='138' >Martinique</option><option  value='Mauritania' data-id='139' >Mauritania</option><option  value='Mauritius' data-id='140' >Mauritius</option><option  value='Mayotte' data-id='141' >Mayotte</option><option  value='Mexico' data-id='142' >Mexico</option><option  value='Micronesia' data-id='143' >Micronesia</option><option  value='Moldova' data-id='144' >Moldova</option><option  value='Monaco' data-id='145' >Monaco</option><option  value='Mongolia' data-id='146' >Mongolia</option><option  value='Montenegro' data-id='147' >Montenegro</option><option  value='Montserrat' data-id='148' >Montserrat</option><option  value='Morocco' data-id='149' >Morocco</option><option  value='Mozambique' data-id='150' >Mozambique</option><option  value='Myanmar' data-id='151' >Myanmar</option><option  value='Namibia' data-id='152' >Namibia</option><option  value='Nauru' data-id='153' >Nauru</option><option  value='Nepal' data-id='154' >Nepal</option><option  value='Netherlands Antilles' data-id='155' >Netherlands Antilles</option><option  value='Netherlands The' data-id='156' >Netherlands The</option><option  value='New Caledonia' data-id='157' >New Caledonia</option><option  value='New Zealand' data-id='158' >New Zealand</option><option  value='Nicaragua' data-id='159' >Nicaragua</option><option  value='Niger' data-id='160' >Niger</option><option  value='Nigeria' data-id='161' >Nigeria</option><option  value='Niue' data-id='162' >Niue</option><option  value='Norfolk Island' data-id='163' >Norfolk Island</option><option  value='Northern Mariana Islands' data-id='164' >Northern Mariana Islands</option><option  value='Norway' data-id='165' >Norway</option><option  value='Oman' data-id='166' >Oman</option><option  value='Pakistan' data-id='167' >Pakistan</option><option  value='Palau' data-id='168' >Palau</option><option  value='Palestinian Territory Occupied' data-id='169' >Palestinian Territory Occupied</option><option  value='Panama' data-id='170' >Panama</option><option  value='Papua new Guinea' data-id='171' >Papua new Guinea</option><option  value='Paraguay' data-id='172' >Paraguay</option><option  value='Peru' data-id='173' >Peru</option><option  value='Philippines' data-id='174' >Philippines</option><option  value='Pitcairn Island' data-id='175' >Pitcairn Island</option><option  value='Poland' data-id='176' >Poland</option><option  value='Portugal' data-id='177' >Portugal</option><option  value='Puerto Rico' data-id='178' >Puerto Rico</option><option  value='Qatar' data-id='179' >Qatar</option><option  value='Reunion' data-id='180' >Reunion</option><option  value='Romania' data-id='181' >Romania</option><option  value='Russia' data-id='182' >Russia</option><option  value='Rwanda' data-id='183' >Rwanda</option><option  value='Saint Helena' data-id='184' >Saint Helena</option><option  value='Saint Kitts And Nevis' data-id='185' >Saint Kitts And Nevis</option><option  value='Saint Lucia' data-id='186' >Saint Lucia</option><option  value='Saint Pierre and Miquelon' data-id='187' >Saint Pierre and Miquelon</option><option  value='Saint Vincent And The Grenadines' data-id='188' >Saint Vincent And The Grenadines</option><option  value='Saint-Barthelemy' data-id='189' >Saint-Barthelemy</option><option  value='Saint-Martin (French part)' data-id='190' >Saint-Martin (French part)</option><option  value='Samoa' data-id='191' >Samoa</option><option  value='San Marino' data-id='192' >San Marino</option><option  value='Sao Tome and Principe' data-id='193' >Sao Tome and Principe</option><option  value='Saudi Arabia' data-id='194' >Saudi Arabia</option><option  value='Senegal' data-id='195' >Senegal</option><option  value='Serbia' data-id='196' >Serbia</option><option  value='Seychelles' data-id='197' >Seychelles</option><option  value='Sierra Leone' data-id='198' >Sierra Leone</option><option  value='Singapore' data-id='199' >Singapore</option><option  value='Slovakia' data-id='200' >Slovakia</option><option  value='Slovenia' data-id='201' >Slovenia</option><option  value='Solomon Islands' data-id='202' >Solomon Islands</option><option  value='Somalia' data-id='203' >Somalia</option><option  value='South Africa' data-id='204' >South Africa</option><option  value='South Georgia' data-id='205' >South Georgia</option><option  value='South Sudan' data-id='206' >South Sudan</option><option  value='Spain' data-id='207' >Spain</option><option  value='Sri Lanka' data-id='208' >Sri Lanka</option><option  value='Sudan' data-id='209' >Sudan</option><option  value='Suriname' data-id='210' >Suriname</option><option  value='Svalbard And Jan Mayen Islands' data-id='211' >Svalbard And Jan Mayen Islands</option><option  value='Sweden' data-id='213' >Sweden</option><option  value='Switzerland' data-id='214' >Switzerland</option><option  value='Syria' data-id='215' >Syria</option><option  value='Taiwan' data-id='216' >Taiwan</option><option  value='Tajikistan' data-id='217' >Tajikistan</option><option  value='Tanzania' data-id='218' >Tanzania</option><option  value='Thailand' data-id='219' >Thailand</option><option  value='Togo' data-id='220' >Togo</option><option  value='Tokelau' data-id='221' >Tokelau</option><option  value='Tonga' data-id='222' >Tonga</option><option  value='Trinidad And Tobago' data-id='223' >Trinidad And Tobago</option><option  value='Tunisia' data-id='224' >Tunisia</option><option  value='Türkiye' data-id='225' >Türkiye</option><option  value='Turkmenistan' data-id='226' >Turkmenistan</option><option  value='Turks And Caicos Islands' data-id='227' >Turks And Caicos Islands</option><option  value='Tuvalu' data-id='228' >Tuvalu</option><option  value='Uganda' data-id='229' >Uganda</option><option  value='Ukraine' data-id='230' >Ukraine</option><option  value='United Arab Emirates' data-id='231' >United Arab Emirates</option><option  value='United Kingdom' data-id='232' >United Kingdom</option><option  value='United States' data-id='233' >United States</option><option  value='United States Minor Outlying Islands' data-id='234' >United States Minor Outlying Islands</option><option  value='Uruguay' data-id='235' >Uruguay</option><option  value='Uzbekistan' data-id='236' >Uzbekistan</option><option  value='Vanuatu' data-id='237' >Vanuatu</option><option  value='Vatican City State (Holy See)' data-id='238' >Vatican City State (Holy See)</option><option  value='Venezuela' data-id='239' >Venezuela</option><option  value='Vietnam' data-id='240' >Vietnam</option><option  value='Virgin Islands (British)' data-id='241' >Virgin Islands (British)</option><option  value='Virgin Islands (US)' data-id='242' >Virgin Islands (US)</option><option  value='Wallis And Futuna Islands' data-id='243' >Wallis And Futuna Islands</option><option  value='Western Sahara' data-id='244' >Western Sahara</option><option  value='Yemen' data-id='245' >Yemen</option><option  value='Zambia' data-id='246' >Zambia</option><option  value='Zimbabwe' data-id='247' >Zimbabwe</option></select><span class='text-danger'></span></div><div class="col-12 " role="group"   aria-label="State"  ><span id="grp_fld_1516612" class="form_field_grp "><label class='control-label required' for='fld_1516612'>State</label><input type=text  class='form-control form-control' name='fld_1516612' id='fld_1516612'  required  value='' /><span class='text-danger'></span></div><div class="col-12 " role="group"   aria-label="(empty)"  ><span id="grp_fld_725983" class="form_field_grp "><input class='btn btn-primary pull-right btn-lg mt-3' name='fld_725983' id='fld_725983'type='submit'value='Register'/><span class='text-danger'></span></div>        </div>
1665
1666    </form>
1667</div>
1668</div>
1669<div id="LoadingBar" style="display:none; position: absolute; top: 50%; left: 50%;"  role="progressbar" aria-label="Your data is being saved, please wait." aria-busy="true">
1670    <img alt="Loading spinner" src="https://vepimg.b8cdn.com/images/new_loading_spiner.gif" >
1671</div>
1672</div>    <div class="modal fade" id="videoModal" tabindex="-1" role="dialog" aria-labelledby="videoModalLabel" aria-hidden="true">
1673        <div class="modal-dialog" role="document" style="max-width: 75% !important;
1674    width: 75% !important;">
1675            <div class="modal-content">
1676                <div class="modal-header">
1677                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
1678                        <span aria-hidden="true">×</span>
1679                    </button>
1680                </div>
1681                <div class="modal-body">
1682                    <iframe id="iframe-id" width="100%" height="600" data-src="{url}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>
1683                    <div id="loadingMessage" style="display: none;">Loading...</div>
1684                </div>
1685            </div>
1686        </div>
1687    </div>
1688
1689        <div id="deleteModal" class="modal fade" role='dialog'>
1690            <div class="modal-dialog">
1691                <div class="modal-content">
1692                    <div class="modal-header" style="background: #F36531;">
1693                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
1694                        <h4 class="modal-title">Ticket </h4>
1695                    </div>
1696                    <div class="modal-body">
1697                        <p>Are you sure you want to change your ticket selection ?</p>
1698
1699                    </div>
1700                    <div class="modal-footer">
1701                        <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
1702                        <span id= 'deleteButton'></span>
1703                    </div>
1704
1705                </div>
1706            </div>
1707        </div>
1708        <!--Modal ends here--->
1709
1710        
1711                  
1712                
1713         
1713<script type="text/javascript" src="https://vepjs.b8cdn.com/js/v2/registration/payment-summary.js?v=2.8"></script>
1713
1714
1715    
1716<script type="text/javascript" src="https://vepjs.b8cdn.com/js/v2/registration/enhancedTicketAvailability.js?v=2.33"></script>
vendor: 1 bytes, line 1716
1716
1717<script>
1718    var isTicket= '';
1719    var organizationId= '323';
1720        var isTicketTop= '';
1721    var formType= 'REGISTRATION_FORM';
1722    var isCardOnHold= '';
1723    var isStripeElement= '';
1724    var isStripeConnectElement= '';
1725    var isStripeConnectAccountId= '';
1726    var isGroupRegistrationField = '';
1727    var isGroupMultipleSelect = '';
1728    var simplifiedTicketAssignment = '';
1729    var autoAddonsToBuyer = false;
1730    var hasAdminOrEventOwnerLimitBypass = false;
1731    var groupRegistrationFieldMax = '1';
1732    var paymentMethodCount = '0';
1733    var paymentMethodShuttleId = 19;
1734    var hasVfairsOfflinePayments = false;
1735    var enableVfairsPaymentFlag = false;
1736    if ($('#payment_method_count').length) {
1737        $('#payment_method_count').val(paymentMethodCount);
1738    }
1739    if (organizationId == 180) {
1740        var org180CustomerDetailsLabel = document.querySelector('.showOrHideCustomerDetails');
1741        if (org180CustomerDetailsLabel) {
1742            org180CustomerDetailsLabel.textContent = 'Attendee details';
1743        }
1744    }
1745    
1746    /**
1747     * True only for Shuttle-only vFairs checkout (payment UI hidden, no Cheque/PO).
1748     * Must not run for Stripe/PayPal/etc. or when user must choose Cheque/PO.
1749     */
1750    function isShuttleOnlyVfairsCheckout() {
1751        if (!enableVfairsPaymentFlag || hasVfairsOfflinePayments || !$('.pmnt_fld').length) {
1752            return false;
1753        }
1754        var $shuttleOpt = $('.pmnt_fld option[data-id="' + paymentMethodShuttleId + '"]');
1755        if (!$shuttleOpt.length) {
1756            return false;
1757        }
1758        var $radios = $('input[name="optionsRadios"]');
1759        var $shuttleRadios = $('input[name="optionsRadios"][data-method="' + paymentMethodShuttleId + '"]');
1760        // No radios at all (legacy shuttle-only) OR only Shuttle radio(s) exist
1761        return $radios.length === 0 || ($shuttleRadios.length > 0 && $radios.length === $shuttleRadios.length);
1762    }
1763    function autoSelectShuttlePaymentMethod() {
1764        if (!isShuttleOnlyVfairsCheckout()) {
1765            return false;
1766        }
1767        var $shuttleOpt = $('.pmnt_fld option[data-id="' + paymentMethodShuttleId + '"]');
1768        if (!$shuttleOpt.length) {
1769            return false;
1770        }
1771        $('.pmnt_fld').val($shuttleOpt.val());
1772        $('input[name="optionsRadios"][data-method="' + paymentMethodShuttleId + '"]').prop('checked', true);
1773        return !!$('.pmnt_fld').val();
1774    }
1775    /**
1776     * Free ($0) tickets hide the payment UI, so pmnt_fld stays empty and submit
1777     * fails required validation. Prefer Shuttle when present; else first real option.
1778     */
1779    function isZeroTotalTicketCheckout() {
1780        var stored = parseFloat(sessionStorage.getItem('total_price'));
1781        if (!isNaN(stored) && stored === 0) {
1782            return true;
1783        }
1784        var attrTotal = parseFloat($('.order__summary .price__item > div.total__price > span').attr('data-original_total_price'));
1785        if (!isNaN(attrTotal) && attrTotal === 0) {
1786            return true;
1787        }
1788        return $('.paynbtn.zerob, .paynbtn.zerobb').length > 0;
1789    }
1790    function autoSelectPaymentMethodForFreeTicket() {
1791        if (!isZeroTotalTicketCheckout() || !$('.pmnt_fld').length) {
1792            return false;
1793        }
1794        var $opt = $('.pmnt_fld option[data-id="' + paymentMethodShuttleId + '"]');
1795        if (!$opt.length) {
1796            $opt = $('.pmnt_fld option').filter(function () {
1797                return $(this).val() !== '';
1798            }).first();
1799        }
1800        if (!$opt.length || !$opt.val()) {
1801            return false;
1802        }
1803        $('.pmnt_fld').val($opt.val());
1804        var methodId = $opt.attr('data-id');
1805        if (methodId) {
1806            $('input[name="optionsRadios"][data-method="' + methodId + '"]').prop('checked', true);
1807        }
1808        return !!$('.pmnt_fld').val();
1809    }
1810    var isGroupBypassMember = '';
1811    var showBookingRelatedData = 1;
1812    var enableV5ApiDiscount = 1;
1813    var enableV5EnhanceAvailabilityApi = 0;
1814    var isStripeValidation=false;
1815    var isStripeValidation=false;
1816    var appId= "20550";
1817    var enableExpiredOwnedEditProfile10003110 = false;
1818    function getRegistrationFieldValueFromScope($scope, fieldName) {
1819        if (!$scope || !$scope.fn) {
1820            return '';
1821        }
1822        var $inputs = $scope('input[name="' + fieldName + '"]');
1823        if (!$inputs.length) {
1824            return '';
1825        }
1826        var $primaryInput = $inputs.filter(function () {
1827            var id = $scope(this).attr('id');
1828            return id && id.indexOf('fld_') !== -1;
1829        }).first();
1830        if (!$primaryInput.length) {
1831            $primaryInput = $inputs.first();
1832        }
1833        return ($primaryInput.val() || '').trim();
1834    }
1835    function getMainRegistrationInputValue(fieldName) {
1836        var value = getRegistrationFieldValueFromScope($, fieldName);
1837        if (value) {
1838            return value;
1839        }
1840        if (window.parent && window.parent !== window) {
1841            try {
1842                value = getRegistrationFieldValueFromScope(window.parent.$, fieldName);
1843            } catch (e) {}
1844            if (value) {
1845                return value;
1846            }
1847        }
1848        if (window.opener && window.opener !== window) {
1849            try {
1850                value = getRegistrationFieldValueFromScope(window.opener.$, fieldName);
1851            } catch (e) {}
1852        }
1853        return value || '';
1854    }
1855        var assignDropdownFixAppIds = [19899];
1856        let TicketPackages={};
1857    let v5TicketPackagesData={};
1858        var seatPlanUrl= '';
1859    var seatPlanPackageIds= [];
1860    var pageBreakSummaryCount = "0";
1861
1862    if(enableV5ApiDiscount){
1863    var paymentSummaryObject = new PaymentSummary("https://www.codeseccon.com/rest/v5/registration/paymentSummary/byPostData");
1864    // var paymentSummaryObject = new PaymentSummary("https://pre-prod.vfairsdev.com/rest/v5/registration/paymentSummary/byPostData");
1865    }
1866
1867    if (enableV5EnhanceAvailabilityApi) {
1868        var enhancedTicketAvailabilityObject = new EnhancedTicketAvailability("https://www.codeseccon.com/rest/v5");
1869    }
1870
1871       if (formType === 'SPEAKER_REGISTRATION_FORM'  && (appId == 11368 || appId == 15715)) {
1872           // Custom logic for SPEAKER_REGISTRATION_FORM
1873           document.addEventListener('DOMContentLoaded', function() {
1874                // Get license key from config
1875                FroalaEditor.DEFAULTS.key = 'Ne2C1sA4A3H4A14A7D9A6kOPVi1b1b2Le2e1G1AWMSGSAFDTGHWsE7D7D6C4A1H4E3C3C6B5==';
1876                
1877                new FroalaEditor('.froala-editor', {
1878                    height: 300,
1879                    toolbarButtons: ['bold', 'italic', 'underline', 'strikeThrough', '|', 
1880                                    'paragraphFormat', 'align', 'formatOL', 'formatUL', '|',
1881                                    'insertLink', 'insertImage', 'insertTable', '|', 
1882                                    'html']
1883                });
1884            });
1885           // You can add more functionality here as needed
1886       }
1887
1888    
1889    
1890
1891
1892    $(function () {
1893
1894        if(appId == 22243){
1895            console.log('appId == 22243');
1896            $(document).on('change', '#bypass', function() {
1897                // debugger;
1898                console.log('bypass changed, checked:', $(this).is(':checked'));
1899                if($(this).is(':checked')) {
1900                    $(this).val('1');
1901                    console.log('bypass value set to 1');
1902                    // Create bypass_auto element if it doesn't exist
1903                    if($("#bypass_auto").length == 0) {
1904                        $('body').append('<input type="hidden" name="bypass_auto" id="bypass_auto" value="1" style="float: left">');
1905                        console.log('bypass_auto element created');
1906                    }
1907                } else {
1908                    $(this).val('0');
1909                    console.log('bypass value set to 0');
1910                    // Remove bypass_auto element
1911                    $("#bypass_auto").remove();
1912                    console.log('bypass_auto element removed, length:', $("#bypass_auto").length);
1913                }
1914            });
1915
1916
1917            // Initialize on page load
1918            if($('#bypass').length > 0) {
1919                // debugger;
1920                if($('#bypass').is(':checked')) {
1921                    $('#bypass').val('1');
1922                    console.log('bypass value set to 1 on page load');
1923                    // Create bypass_auto element if it doesn't exist
1924                    // if($("#bypass_auto").length == 0) {
1925                    //     $('body').append('<input type="hidden" name="bypass_auto" id="bypass_auto" value="1" style="float: left">');
1926                    //     console.log('bypass_auto element created on page load');
1927                    // }
1928                } else {
1929                    $('#bypass').val('0');
1930                    console.log('bypass value set to 0 on page load');
1931                    // Remove bypass_auto element
1932                    // $("#bypass_auto").remove();
1933                    // console.log('bypass_auto element removed on page load, length:', $("#bypass_auto").length);
1934                }
1935            }
1936        }
1937        let shouldRunStripeSubmit = true; 
1938         if(!isTicket){
1939            $('.pmnt_fld').val($('.pmnt_fld option:nth-child(2)').val()).change();
1940        }
1941        $('.attendeGr__btn').click(function () {
1942            var target = $(this).data('offcanvas');
1943            $('.attendeOffcanvas').removeClass('show');
1944            $('.attendbackdrop').addClass('show');
1945            $('#' + target).addClass('show');
1946
1947        });
1948        $('.attendeOffcanvas__header button, .attendbackdrop').click(function () {
1949            $('.attendeOffcanvas').removeClass('show');
1950            $('.attendbackdrop').removeClass('show');
1951            if (typeof refreshSessionLimitedFieldAvailability === 'function') {
1952                refreshSessionLimitedFieldAvailability(null);
1953            }
1954        });
1955
1956        client_secret = '';
1957        intent_id = '';
1958    });
1959    $(document).click(function(e) {
1960        var target = e.target;
1961        if (assignDropdownFixAppIds.includes(Number(appId))) {
1962            if (!$(target).closest('.assign-buttn').length) {
1963                $('.packageContainer__head .dropdown-menu').hide();
1964            }
1965        } else {
1966            if (!$(target).is('#assign-buttn') && !$(target).parents().is('#assign-buttn')) {
1967                $('#assign-buttn .dropdown-menu').hide();
1968            }
1969        }
1970    });
1971    $(document).ready(function() {
1972        let clickedOnce = false;
1973        $('#field_addons').select2({
1974            language: {
1975                noResults: function() {
1976                    return "No addons available";
1977                }
1978            }
1979        });
1980        var isEventBound = false;
1981        function getMainRegistrationInputValue(fieldName) {
1982            var $inputs = $('input[name="' + fieldName + '"]');
1983            if (!$inputs.length) {
1984                return '';
1985            }
1986            var $primaryInput = $inputs.filter(function () {
1987                var id = $(this).attr('id');
1988                return id && id.indexOf('fld_') !== -1;
1989            }).first();
1990            if (!$primaryInput.length) {
1991                $primaryInput = $inputs.first();
1992            }
1993            return ($primaryInput.val() || '').trim();
1994        }
1995        var orderNowProcessing = false;
1996        window.orderNowProcessing = false;
1997        var orderNowProcessingRef = window;
1998        
1999        $('.order-now-button, .order-now-button1').click(function (e) {
2000            if (orderNowProcessingRef.orderNowProcessing) {
2001                e.preventDefault();
2002                return false;
2003            }
2004            orderNowProcessingRef.orderNowProcessing = true;
2005            $('.order-now-button, .order-now-button1').prop('disabled', true);
2006
2007            
2008            if(![15625, 15223, 1000000241].includes(Number(appId))) {
2009                // Keep coupon when a promo was applied (including 100% off / $0 total).
2010                // Old checks treated hidden/$0.00 discount UI as "no discount" and cleared a valid code.
2011                var discountedAmt = parseFloat($('.pricing.discount span').attr('data-discounted_amount'));
2012                var isPromoApplied = ($('#text_help').hasClass('alert-success') && $('#text_help').is(':visible'))
2013                    || ($('#price_details').is(':visible') && $.trim($('#price_details').text()) !== '')
2014                    || (discountedAmt > 0)
2015                    || Number($('.order__summary .price__item > div.total__price > span').attr('data-is_discount_applied')) === 1;
2016                if (!isPromoApplied && ($('.pricing.discount span').text() === '$0.00' || $('.pricing.discount').css('display') === 'none' || String($('.pricing.discount span').attr('data-discounted_amount') || '0') === '0')) {
2017                    $('.coupn-code-sec.coupncode.copenfull input').val('');
2018                }
2019            }else{
2020                
2021            }
2022           
2023            if (enableV5EnhanceAvailabilityApi) {
2024                
2025                let postData = {
2026                    appId: "20550",
2027                    packages: []
2028                }
2029                
2030                let packageQuantities = {};
2031                let addonQuantities = {};
2032
2033                if (isUpgradeDowngradeProfile) {
2034                    console.log(globalPackagesAndAddonsData);
2035                    let packageAndAddonData = enhancedTicketAvailabilityObject.getPackageAndAddonArrayFromUpgradeDowngradePaymentData(globalPackagesAndAddonsData);
2036
2037                    if (packageAndAddonData && packageAndAddonData.packageQuantities) {
2038                        packageQuantities = packageAndAddonData.packageQuantities;
2039                    }
2040
2041                    if (packageAndAddonData && packageAndAddonData.addonQuantities) {
2042                        addonQuantities = packageAndAddonData.addonQuantities;
2043                    }
2044                }
2045
2046                $(".ticket__item").each(function() {
2047                    
2048                    if ($(this).find(".pricebtn-btn").css('display') === 'none') {
2049                        let packageData = {};
2050                        let pkgId = $(this).find(".qty-plus").attr("data-id");
2051                        if (pkgId) {
2052                            let pkgQty = $(this).find(".qty_package").val();
2053                            if (pkgQty && parseInt(pkgQty) > 0) {
2054                                
2055                                if (isUpgradeDowngradeProfile) {
2056                                    if (packageQuantities[pkgId]) {
2057                                        pkgQty -= parseInt(packageQuantities[pkgId]);
2058
2059                                        if (parseInt(pkgQty) <= 0) {
2060                                            pkgQty = 0;
2061                                        }
2062                                    }
2063                                }
2064                                
2065                                packageData = {
2066                                    id: pkgId,
2067                                    qty: parseInt(pkgQty),
2068                                    addons: []
2069                                };
2070                                
2071                                $(".ticket__addon.addon-package-"+pkgId+" .qty").each(function() {
2072                                    let addonQty = $(this).val();
2073                                    let addonId = $(this).siblings(".qty-plus").attr("data-addons");
2074                                    if (addonId && addonQty && parseInt(addonQty) > 0) {
2075                                        
2076                                        if (isUpgradeDowngradeProfile) {
2077                                            if (addonQuantities[pkgId] && addonQuantities[pkgId][addonId]) {
2078                                                addonQty -= parseInt(addonQuantities[pkgId][addonId]);
2079
2080                                                if (parseInt(addonQty) <= 0) {
2081                                                    addonQty = 0;
2082                                                }
2083                                            }
2084                                        }
2085                                        
2086                                        packageData.addons.push({
2087                                            id: addonId,
2088                                            qty: parseInt(addonQty)
2089                                        });
2090                                    }
2091                                });
2092                            }
2093                            postData.packages.push(packageData);
2094                        }
2095                    }
2096                });
2097
2098                enhancedTicketAvailabilityObject.checkAddonAndPackageAvailability(postData, orderNowClickAction, e);
2099            } else {
2100                orderNowClickAction(e);
2101            }
2102        });
2103
2104        function upgradeDowngradeSlotHasAuthoritativeAddonSelection(source, packageId, email) {
2105            if (!source) {
2106                return false;
2107            }
2108            var ud = source.userDetails || source;
2109            email = (email || source.email || (ud && ud.email) || '').trim();
2110            if (!ud || !ud.selected_data || !email) {
2111                return false;
2112            }
2113            try {
2114                var sd = typeof ud.selected_data === 'string' ? JSON.parse(ud.selected_data) : ud.selected_data;
2115                return !!(sd && sd[email] && sd[email][packageId] && $.isArray(sd[email][packageId].field_addons));
2116            } catch (e) {
2117                return false;
2118            }
2119        }
2120
2121        function getUpgradeDowngradePaymentAddonIds(email, packageId) {
2122            email = (email || '').trim();
2123            packageId = String(packageId || '');
2124            if (!email || !packageId) {
2125                return [];
2126            }
2127            var packagesSource = null;
2128            if (typeof multipleTicketPackageListOnly === 'object' && multipleTicketPackageListOnly) {
2129                packagesSource = multipleTicketPackageListOnly;
2130            } else if (globalPackagesAndAddonsData && globalPackagesAndAddonsData.packages) {
2131                packagesSource = globalPackagesAndAddonsData.packages;
2132            }
2133            if (!packagesSource || !packagesSource[email] || !packagesSource[email][packageId]) {
2134                return [];
2135            }
2136            var paymentPackage = packagesSource[email][packageId];
2137            if ($.isArray(paymentPackage.field_addons)) {
2138                return paymentPackage.field_addons.slice();
2139            }
2140            return [];
2141        }
2142
2143        function getUpgradeDowngradeUserAddonIds(source, packageId, options) {
2144            options = options || {};
2145            if (!source) {
2146                return [];
2147            }
2148            var ud = source.userDetails || source;
2149            var email = (source.email || (ud && ud.email) || '').trim();
2150            var isFromUserSlot = !!options.isFromUserSlot;
2151
2152            // Child iframe edits store authoritative addon picks in selected_data.
2153            if (ud && ud.selected_data) {
2154                try {
2155                    var sd = typeof ud.selected_data === 'string' ? JSON.parse(ud.selected_data) : ud.selected_data;
2156                    if (sd && email && sd[email] && sd[email][packageId] && $.isArray(sd[email][packageId].field_addons)) {
2157                        return sd[email][packageId].field_addons.slice();
2158                    }
2159                } catch (e) {}
2160            }
2161
2162            if (isFromUserSlot && isUpgradeDowngradeProfile) {
2163                return [];
2164            }
2165
2166            if (isUpgradeDowngradeProfile) {
2167                return getUpgradeDowngradePaymentAddonIds(email, packageId);
2168            }
2169
2170            if (ud && typeof ud === 'object') {
2171                var pmntAddonIds = [];
2172                $.each(ud, function (key, val) {
2173                    if (key.indexOf('pmnt_addons_') === 0 && val) {
2174                        if ($.isArray(val)) {
2175                            pmntAddonIds = pmntAddonIds.concat(val);
2176                        } else {
2177                            pmntAddonIds.push(val);
2178                        }
2179                    }
2180                });
2181                if (pmntAddonIds.length > 0) {
2182                    return pmntAddonIds;
2183                }
2184            }
2185
2186            if (ud && $.isArray(ud.field_addons)) {
2187                return ud.field_addons.slice();
2188            }
2189
2190            if ($.isArray(source.field_addons)) {
2191                return source.field_addons.slice();
2192            }
2193
2194            return [];
2195        }
2196
2197        function resolveUpgradeDowngradeUserListSlot(countSelector) {
2198            var existingSlotVal = $('#user' + countSelector).val();
2199            if (!existingSlotVal || String(existingSlotVal).trim() === '') {
2200                return null;
2201            }
2202            try {
2203                return JSON.parse(String(existingSlotVal).replace(/&quot;/g, '"'));
2204            } catch (e) {
2205                return null;
2206            }
2207        }
2208
2209        function sanitizeUpgradeDowngradeUserListPayload(userData, packageId, addonIds) {
2210            if (!userData || typeof userData !== 'object') {
2211                return userData;
2212            }
2213            var payload = $.extend(true, {}, userData);
2214            var keepAddonKeys = {};
2215            var addonList = addonIds || [];
2216            $.each(addonList, function (_, addonId) {
2217                keepAddonKeys[String(addonId)] = true;
2218            });
2219            $.each(payload, function (key) {
2220                if (key.indexOf('qty_') !== 0) {
2221                    return;
2222                }
2223                var match = key.match(/^qty_(.+)_([^_]+)$/);
2224                if (!match || String(match[2]) !== String(packageId)) {
2225                    return;
2226                }
2227                if (!keepAddonKeys[match[1]]) {
2228                    delete payload[key];
2229                }
2230            });
2231            if (addonList.length > 0) {
2232                payload.field_addons = addonList.slice();
2233            } else {
2234                delete payload.field_addons;
2235            }
2236            return payload;
2237        }
2238
2239        function buildUpgradeDowngradeUserAddonDisplay(packageDetails, packageId, addonIds) {
2240            var allAddonsName = '';
2241            var allAddonsNameBox = '';
2242            var jsonfield_addons = '';
2243            var AddonsArray = [];
2244
2245            $.each(addonIds, function (idx, addonId) {
2246                addonId = String(addonId);
2247                var addonName = '';
2248                if (packageDetails.field_addons && packageDetails.field_addons[addonId]) {
2249                    addonName = packageDetails.field_addons[addonId];
2250                } else if (TicketPackages[packageId] && TicketPackages[packageId][addonId]) {
2251                    var meta = TicketPackages[packageId][addonId];
2252                    addonName = meta.name || meta.addons_name || '';
2253                }
2254                if (!addonName) {
2255                    addonName = 'Addon ' + addonId;
2256                }
2257                if (allAddonsName !== '') {
2258                    allAddonsName += ', ';
2259                    jsonfield_addons += ',';
2260                }
2261                jsonfield_addons += addonId;
2262                allAddonsName += addonName;
2263                allAddonsNameBox += '<span>' + addonName + '</span>';
2264                AddonsArray.push(addonId);
2265            });
2266
2267            return {
2268                allAddonsName: allAddonsName,
2269                allAddonsNameBox: allAddonsNameBox,
2270                jsonfield_addons: jsonfield_addons,
2271                AddonsArray: AddonsArray
2272            };
2273        }
2274    
2275        var orderNowClickAction = (e) => {
2276            
2277        var totalElement = document.querySelector('.totalcountT p[data-total]');
2278        if (totalElement) {
2279            var totalText = totalElement.textContent;
2280            var totalNumber = parseFloat(totalText.replace(/[^0-9.]/g, ''));
2281
2282        }
2283        const hasNonDonationPackage = Object.entries(TicketPackages).some(([id, details]) => 
2284            id !== 'paymentMethodId' && details?.isDonation === 0
2285        );
2286
2287        if (!hasNonDonationPackage) {
2288            $('#error_message_addons').remove();
2289            const errorDiv = `
2290                <div class="col-md-12 form-control my-3 alert alert-danger" 
2291                     role="alert" 
2292                     id="error_message_addons" 
2293                     style="width: 100% !important;" 
2294                     tabindex="0">
2295                    Please select at least one package other than the donation package.
2296                </div>`;
2297            $('.ticket__totalBox.small-discout-box').after(errorDiv);
2298            orderNowProcessingRef.orderNowProcessing = false;
2299            $('.order-now-button, .order-now-button1').prop('disabled', false);
2300            return false;
2301        }
2302                        
2303          // Check if we have existing ticket details to validate against
2304        if(userDetailsEditTicket){
2305            // Only validate quantities if V5 API discounts and quantity restrictions are enabled
2306            if(enableV5ApiDiscount){
2307                $("#LoadingBar").show();
2308             
2309                // Initialize upgrade/downgrade handler
2310                const upgradeDowngradeObject = new UpgradeDowngradeClass(
2311                    "https://www.codeseccon.com/rest/v5/registration/paymentSummary/upgradeDowngrade/getAmountPaid"
2312                );
2313
2314                // Compare quantities between original and new selections
2315                // Returns false if quantities don't match to prevent invalid upgrades
2316                if(typeof enableTicketUpgradeRestrictQty !== 'undefined' && enableTicketUpgradeRestrictQty !='0'){
2317                    if(!upgradeDowngradeObject.ticketUpgradeRestrictQtyCheck(multipleTicketPackageListOnly, TicketPackages)) {
2318                        $('#error_message_addons').remove();
2319                        var errorDiv = '<div class="col-md-12 form-control my-3 alert alert-danger" role="alert" id="error_message_addons" style="width: 100% !important;" tabindex="0">Changing the quantity of packages is restricted. Please contact support for assistance.</div>';
2320                        $('.ticket__totalBox.small-discout-box').after(errorDiv);
2321                        // Hide error message after 5 seconds
2322                        setTimeout(function() {
2323                            $('.ticket__totalBox.small-discout-box').next('.alert-danger').remove();
2324                        }, 5000);
2325                        $("#LoadingBar").hide();
2326                        orderNowProcessingRef.orderNowProcessing = false;
2327                        $('.order-now-button, .order-now-button1').prop('disabled', false);
2328                        return false;
2329                    }
2330                }
2331                if(typeof enableTicketUpgradeRestrictAddonsQtyNumber !== 'undefined' && enableTicketUpgradeRestrictAddonsQtyNumber !='0'){
2332                    if(!upgradeDowngradeObject.ticketUpgradeRestrictAddonsQtyNumber(multipleTicketPackageListOnly, TicketPackages)) {
2333                        $('#error_message_addons').remove();
2334                        var errorDiv = '<div class="col-md-12 form-control my-3 alert alert-danger" role="alert" id="error_message_addons"  style="width: 100% !important;" tabindex="0">Changing the quantity of add-ons is restricted. Please contact support for assistance.</div>';
2335                        $('.ticket__totalBox.small-discout-box').after(errorDiv);
2336                        setTimeout(function() {
2337                            $('.ticket__totalBox.small-discout-box').next('.alert-danger').remove();
2338                        }, 5000);
2339                        $("#LoadingBar").hide();
2340                        orderNowProcessingRef.orderNowProcessing = false;
2341                        $('.order-now-button, .order-now-button1').prop('disabled', false);
2342                        return false;
2343                    }
2344                }
2345
2346           
2347                $("#LoadingBar").hide();
2348            }
2349        }
2350        if (parseInt(isTicket)) {
2351            if(fromBackBtn && tcktModifiedFromBackBtn){
2352                if (formType === 'REGISTRATION_FORM' && parseInt(pageBreakSummaryCount, 10) > 0) {
2353                    if (typeof pruneStepFormTicketPackagesFromDomSelection === 'function') {
2354                        pruneStepFormTicketPackagesFromDomSelection();
2355                    }
2356                    $('input[name="user_list[]"]').val('');
2357                    $('.packageContainer').remove();
2358                    clickedOnce = false;
2359                }
2360                $('.packageBlock').html('');
2361                $('.user-links input').each(function(){
2362                    $(this).val('');
2363                });
2364
2365                if (pageBreakSummaryCount > 0) {
2366                    $('.packageContainer > .aPackage').remove();
2367                }
2368            }
2369            if (isTicket && (isGroupBypassMember && isGroupRegistrationField) && ! multipleTicketEdit) {
2370                $('.packageBlock').css("visibility", "hidden");
2371                $('.group_registration_label').css("display", "none");
2372                $('.group-reg-block').css("height", "0px");
2373                $('.packageBlock').css({
2374                    height: '0px',  // set to your desired height
2375                    width: '0px'    // set to your desired width
2376                });
2377                /* VFE-60354 - Group Reg - Hide it when package is one */
2378                            } else {
2379                    $('.packageBlock').css("visibility", "visible");
2380                    $('.group_registration_label').css("display", "block");
2381                    $('.group-reg-block').css("height", "auto");
2382                    $(this).css({
2383                        height: '',
2384                        width: ''
2385                    });
2386                    /* VFE-60354 - Group Reg - Hide it when package is one */
2387                                }
2388                if ($(".ticketSelbtn")[0]) {
2389                    flag = 0;
2390                    $(".ticketSelbtn").each(function () {
2391                        if ($(this).css("display") == "none") {
2392                            flag = flag + 1;
2393                        }
2394                    });
2395                    if (flag == 0) {
2396                        $('#packages-error').remove();
2397                        $('.ticket__content h3').after('<p id="packages-error" class="error" style="font-weight: bold" >Please Select Package.</p>');
2398                        $('#packages-error').fadeOut(20000);
2399                        orderNowProcessingRef.orderNowProcessing = false;
2400                        $('.order-now-button, .order-now-button1').prop('disabled', false);
2401                        return false;
2402                    } else {
2403                        $('#packages-error').remove();
2404                        if (isTicket && !parseInt(isTicketTop)) {
2405                            if(paymentMethodCount != 1) {
2406                                $('.order__summary.ordsum').show();
2407                            }else{
2408                                $('.paynbtn.single-pay').show();
2409                            }
2410                            $('.order-now-button1').hide();
2411                        }
2412                    }
2413                }
2414
2415                $(this).prop('disabled', true);
2416
2417            total_sum = 0;
2418            count_start = 0;
2419            // simplifiedTicketAssignment=1;
2420            // console.log($('.qty_package').length);
2421            var count = 1;
2422                // Start Generation Here
2423            
2424            $(document).find('.qty_package').each(function () {
2425                if (($(this).val() != '' && $(this).val() != 0) && ((fromBackBtn && tcktModifiedFromBackBtn) || (!fromBackBtn && !tcktModifiedFromBackBtn))) {
2426
2427                    total_sum = parseInt(total_sum) + parseInt($(this).val());
2428                    var packageHTML = '';
2429                    if(simplifiedTicketAssignment){
2430                    var packageId = $(this).prev().data('id');
2431                    var upgradePackageQty = 0;
2432                    if(userDetailsEditTicket && userDetailsEditTicket[packageId]){
2433                        if (isGroupBypassMember) {
2434                            $.each(userDetailsEditTicket[packageId], function (index, packageDetails) {
2435                                upgradePackageQty += parseInt(packageDetails.package_qty, 10) || 0;
2436                            });
2437                        } else {
2438                            var packageQty = userDetailsEditTicket[packageId][0].package_qty;
2439                            upgradePackageQty = packageQty;
2440                        }
2441                    }
2442                    var buyer = 0;
2443                    var first_name = 'Not Set';
2444                    var last_name = '';
2445                    var email = 'Not Set';
2446                    var addons = 'Not Set';
2447
2448                    if (isGroupBypassMember) {
2449                        var selectedPackageQty = parseInt($(this).val(), 10);
2450                        var total_sum_faker = (count - 1) + selectedPackageQty;
2451                        if (upgradePackageQty > 0) {
2452                            total_sum_faker = total_sum_faker - upgradePackageQty;
2453                        }
2454                        if (total_sum_faker < (count - 1)) {
2455                            total_sum_faker = count - 1;
2456                        }
2457                        var savedPackage = packageId;
2458                        var packLoopStart = count;
2459                        var packLoopEnd = total_sum_faker;
2460                        if (userDetailsEditTicket && userDetailsEditTicket[packageId] && upgradePackageQty > 0) {
2461                            packLoopStart = upgradePackageQty + 1;
2462                            packLoopEnd = selectedPackageQty;
2463                        }
2464
2465                        while (packLoopStart <= packLoopEnd) {
2466                            var packNum = packLoopStart;
2467                            var selector = '.user-num' + packNum;
2468
2469                            packageHTML += '<div class="fakePackage fakePackage' + packNum + '" data-pack="' + packNum + '" data-buyer="' + buyer + '" data-addonsname="" data-addons="" data-package="' + savedPackage + '">' +
2470                                '<div class="aPackage__detail">' +
2471                                '<div class="aPackage__detail__cell aPackage__detail__width" style="width: 80px !important"><span></span><p>Ticket ' + packNum + '</p></div>' +
2472                                '<div class="aPackage__detail__cell aPackage__detail__width"><span>Name</span><p>' + first_name + ' ' + last_name + '</p></div>' +
2473                                '<div class="aPackage__detail__cell aPackage__detail__width"><span>Email</span><p>' + email + '</p></div>' +
2474                                '<div class="aPackage__detail__cell"><span>Addons</span><div class="addons"><p>' + addons + '</p></div></div>' +
2475                                '</div>' +
2476                                '<div class="aPackage__actions">';
2477                            packageHTML += '<a href="javascript:void(0)"  class="btn action-btn assign-user-to-package" data-row="' + packNum + '"><i class="fa fa-pencil-alt"></i> Add User Details</a>';
2478                            packageHTML += '' +
2479                                '</div>' +
2480                                '</div>';
2481
2482                            packLoopStart++;
2483                        }
2484                        count = packLoopEnd + 1;
2485                    } else {
2486                        var total_sum_faker = (count - 1) + parseInt($(this).val());  // Example total sum
2487                        if (upgradePackageQty > 0) {
2488                            total_sum_faker = total_sum_faker - upgradePackageQty;
2489                        }
2490                        var savedPackage = 1;
2491
2492                        while (count <= total_sum_faker) {
2493                            var selector = '.user-num' + count;
2494
2495                            packageHTML += '<div class="fakePackage fakePackage' + count + '" data-pack="' + count + '" data-buyer="' + buyer + '" data-addonsname="" data-addons="" data-package="' + savedPackage + '">' +
2496                                '<div class="aPackage__detail">' +
2497                                '<div class="aPackage__detail__cell aPackage__detail__width" style="width: 80px !important"><span></span><p>Ticket ' + count + '</p></div>' +
2498                                '<div class="aPackage__detail__cell aPackage__detail__width"><span>Name</span><p>' + first_name + ' ' + last_name + '</p></div>' +
2499                                '<div class="aPackage__detail__cell aPackage__detail__width"><span>Email</span><p>' + email + '</p></div>' +
2500                                '<div class="aPackage__detail__cell"><span>Addons</span><div class="addons"><p>' + addons + '</p></div></div>' +
2501                                '</div>' +
2502                                '<div class="aPackage__actions">';
2503                            packageHTML += '<a href="javascript:void(0)"  class="btn action-btn assign-user-to-package" data-row="' + count + '"><i class="fa fa-pencil-alt"></i> Add User Details</a>';
2504                            packageHTML += '' +
2505                                '</div>' +
2506                                '</div>';
2507
2508                            count++;
2509                        }
2510                    }
2511                    }
2512
2513
2514
2515                    let assignLink = '';
2516                    let countItem = '';
2517                    let ticketAssigned = '';
2518
2519                    if (!simplifiedTicketAssignment) {
2520                        if (assignDropdownFixAppIds.includes(Number(appId))) {
2521                            assignLink =  '<a href="javascript:void(0)" class="btn theme-light-btn dropdown-btn" data-toggle="dropdown"><i class="fa fa-plus"></i> Assign</a>' +
2522                                '<ul class="dropdown-menu dropdown-menu-main dropdown-menu-right" role="menu"> ' +
2523                                '<li><a href="javascript:void(0);" class="btn theme-light-btn assign-user-to-package"><i class="fa fa-plus"></i> Add a New User</a></li>' +
2524                                '<li><span class="dropdown-header">Assign to Existing User:</span></li>' +
2525                                '</ul>';
2526                        } else {
2527                            assignLink =  '<a href="javascript:void(0)" class="btn theme-light-btn " id="dropdown-btn" data-toggle="dropdown"><i class="fa fa-plus"></i> Assign</a>' +
2528                                '<ul class="dropdown-menu dropdown-menu-main dropdown-menu-right" role="menu"> ' +
2529                                '<li><a href="javascript:void(0);" class="btn theme-light-btn assign-user-to-package"><i class="fa fa-plus"></i> Add a New User</a></li>' +
2530                                '<li><span class="dropdown-header">Assign to Existing User:</span></li>' +
2531                                '</ul>';
2532                        }
2533                        countItem='<h3>' + $(this).closest('.ticket__item').find('.ticket__desc__text h5').text() + ' (0/' + $(this).val() + ')</h3>';
2534
2535                    }else{
2536                        assignLink = '<a href="javascript:void(0)" class="btn theme-light-btn user-info-prev buyer" data-buyer="1" data-user="buyer"><i class="fa fa-plus"></i> Assign to Self</a></li>';
2537
2538                        countItem='<h3>' + $(this).closest('.ticket__item').find('.ticket__desc__text h5').text() + ' </h3>';
2539                        ticketAssigned='<span class="assigned-tickets"> 0/' + $(this).val() + ' tickets assigned </span>';
2540                    }
2541                        // Start of Selection
2542                        var packageId = $(this).prev().data('id');
2543                        var oriTotal = $(this).val();
2544                        var assignDropdownHtml = assignDropdownFixAppIds.includes(Number(appId))
2545                            ? '<div class="dropdown assign-buttn" id="assign-buttn-' + packageId + '">' + assignLink + '</div>'
2546                            : '<div class="dropdown" id="assign-buttn">' + assignLink + '</div>';
2547
2548                        $('.packageBlock').append('<div class="packageContainer" id="packageContainerBlock' + packageId + '" data-package="' + packageId + '">' +
2549                                    '<div class="packageContainer__head" data-ori-total="' + oriTotal + '" data-total="' + total_sum + '" data-count="' + count_start + '">' +
2550                                    countItem +
2551                                    assignDropdownHtml +
2552                                    '</div>' +
2553                                    ticketAssigned +
2554                                    packageHTML +
2555                                    '</div>');
2556
2557
2558                        if(TicketPackages[packageId]){
2559                                var packagedetails= TicketPackages[packageId];
2560                                if(packagedetails && packagedetails['isDonation'] ==1){
2561                                    $('#packageContainerBlock'+packageId).hide();
2562                                }
2563                        }
2564                        count_start = total_sum;
2565                    }
2566                });
2567
2568                if (formType === 'REGISTRATION_FORM' && parseInt(pageBreakSummaryCount, 10) > 0 && fromBackBtn && tcktModifiedFromBackBtn) {
2569                    clickedOnce = false;
2570                    if (typeof ensureBuyerAssignLinkInPackage === 'function') {
2571                        $('.packageContainer').each(function () {
2572                            ensureBuyerAssignLinkInPackage($(this));
2573                        });
2574                    }
2575                }
2576
2577                
2578            // plce new data here nomi
2579                    if(userDetailsEditTicket){
2580                        if(byPassGroupMember){
2581                            $('#bypass').closest('div').hide();
2582                        }
2583
2584
2585                       // Was count_start+1 (e.g. 21 after qty 20) so hydrate wrote #user21+
2586                       // while #user1–20 stayed empty. Submit counts filled slots vs ticket qty.
2587                       var  countSelector=1;
2588                        $('input[name="email"]').attr('readonly', true); 
2589                       // start
2590                        var ticketAddonsQtyArr = {};
2591                        $.each(userDetailsEditTicket, function(packageId, packageArray) {
2592                            if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
2593                            if (TicketPackages.hasOwnProperty(packageId) && TicketPackages[packageId].hasOwnProperty('pkg_qty')) {
2594                                var packageQtyEdit = TicketPackages[packageId]['pkg_qty'];
2595                                var packageCount = 0;
2596                                var countCheck = 1;
2597                                $.each(packageArray, function (index, packageDetails) {
2598                                    if (parseInt(packageQtyEdit) < parseInt(countCheck)) {
2599                                        return false; // Break the loop after two iterations
2600                                    }
2601                                    countCheck++;
2602                                    var packageArrayCount = packageDetails['package_qty'];
2603                                    for (var i = 0; i < packageQtyEdit; i++) {
2604                                        if (i < packageArrayCount) {
2605                                            if (packageDetails.field_addons) {
2606                                                $.each(packageDetails.field_addons, function (index, addon) {
2607                                                    // Ensure packageId is initialized as an object within ticketAddonsQtyArr
2608                                                    if (!ticketAddonsQtyArr[packageId]) {
2609                                                        ticketAddonsQtyArr[packageId] = {};
2610                                                    }
2611                                                    if (packageDetails.field_addons_qty[index] && packageDetails.field_addons_qty[index] > 0) {
2612                                                        if (TicketPackages[packageId] && TicketPackages[packageId][index] && TicketPackages[packageId][index]['addons_qty']) {
2613                                                            ticketAddonsQtyArr[packageId][index] = TicketPackages[packageId][index]['addons_qty'];
2614                                                        }
2615                                                    }
2616                                                });
2617                                            }
2618                                        }
2619                                    }
2620                                });
2621                            }
2622                            }
2623                        });
2624                        //end
2625                        $.each(userDetailsEditTicket, function(packageId, packageArray) { // Data from DB
2626                            if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
2627                                if (TicketPackages.hasOwnProperty(packageId) && TicketPackages[packageId].hasOwnProperty('pkg_qty')) {  // current selection
2628                                    if(TicketPackages[packageId].hasOwnProperty('isDonation') &&  TicketPackages[packageId].isDonation != 1){
2629                                    var packageQtyEdit = TicketPackages[packageId]['pkg_qty'];
2630                                    var packageCount = 0;
2631                                    var countCheck = 1;
2632                                    $.each(packageArray, function (index, packageDetails) {
2633                                        if (parseInt(packageQtyEdit) < parseInt(countCheck)) {
2634                                            return false; // Break the loop after two iterations
2635                                        }
2636                                        var packageArrayCount = packageDetails['package_qty'];
2637
2638                                        for (var i = 0; i < packageQtyEdit; i++) {
2639                                            if (i < packageArrayCount) {
2640                                                if (parseInt(packageQtyEdit) < parseInt(countCheck)) {
2641                                                    return false; // Break the loop after two iterations
2642                                                }
2643
2644                                                var userId = packageDetails.user_id;
2645                                                var firstName = packageDetails.first_name;
2646                                                var lastName = packageDetails.last_name;
2647                                                var email = packageDetails.email;
2648                                                var allAddonsName = ''; // Initialize as an empty string
2649                                                var allAddonsNameBox = ''; // Initialize as an empty string
2650                                                var jsonfield_addons = ''; // Initialize as an empty string
2651                                                let AddonsArray = [];
2652                                                
2653                                                // Special handling for single package selection to include newly selected addons
2654                                                if (parseInt(packageQtyEdit) === 1 && TicketPackages[packageId]) {
2655                                                    $.each(TicketPackages[packageId], function (key, item) {
2656                                                        if (key !== 'pkg_price' && key !== 'total_price' && key !== 'tax' && 
2656key !== 'pkg_qty' && key !== 'symbol' && key !== 'isDonation') {
2657                                                            if (item.id && item.addons_qty && parseInt(item.addons_qty) > 0) {
2658                                                                var addonId = item.id;
2659                                                                var addonName = item.name;
2660                                                                var addonQty = parseInt(item.addons_qty);
2661                                                                
2662                                                                for (var j = 0; j < addonQty; j++) {
2663                                                                    if (allAddonsName !== '') {
2664                                                                        allAddonsName += ', ';
2665                                                                        jsonfield_addons += ',';
2666                                                                    }
2667                                                                    jsonfield_addons += addonId;
2668                                                                    allAddonsName += addonName;
2669                                                                    allAddonsNameBox += '<span>' + addonName + '</span>';
2670                                                                    AddonsArray.push(addonId);
2671                                                                }
2672                                                            }
2673                                                        }
2674                                                    });
2675                                                } else if (isUpgradeDowngradeProfile && parseInt(packageQtyEdit, 10) > 1) {
2676                                                    var upgradeUserSlot = resolveUpgradeDowngradeUserListSlot(countSelector);
2677                                                    var userAddonIds = [];
2678                                                    if (upgradeUserSlot && upgradeDowngradeSlotHasAuthoritativeAddonSelection(upgradeUserSlot, packageId, email)) {
2679                                                        userAddonIds = getUpgradeDowngradeUserAddonIds(upgradeUserSlot, packageId, { isFromUserSlot: true });
2680                                                    } else {
2681                                                        userAddonIds = getUpgradeDowngradeUserAddonIds(packageDetails, packageId, { isFromUserSlot: false });
2682                                                    }
2683                                                    var addonDisplay = buildUpgradeDowngradeUserAddonDisplay(packageDetails, packageId, userAddonIds);
2684                                                    allAddonsName = addonDisplay.allAddonsName;
2685                                                    allAddonsNameBox = addonDisplay.allAddonsNameBox;
2686                                                    jsonfield_addons = addonDisplay.jsonfield_addons;
2687                                                    AddonsArray = addonDisplay.AddonsArray;
2688                                                    if (upgradeUserSlot && upgradeDowngradeSlotHasAuthoritativeAddonSelection(upgradeUserSlot, packageId, email) && typeof upgradeUserSlot === 'object' && !upgradeUserSlot.userDetails) {
2689                                                        if (!packageDetails.userDetails || typeof packageDetails.userDetails !== 'object') {
2690                                                            packageDetails.userDetails = upgradeUserSlot;
2691                                                        } else {
2692                                                            $.extend(packageDetails.userDetails, upgradeUserSlot);
2693                                                        }
2694                                                    }
2695                                                } else if (packageDetails.field_addons) {
2696                                                    $.each(packageDetails.field_addons, function (index, addon) {
2697                                                        if(ticketAddonsQtyArr[packageId]) {
2698                                                            if (ticketAddonsQtyArr[packageId][index] > 0) {
2699                                                                if (parseInt(ticketAddonsQtyArr[packageId][index]) > 0) {
2700                                                                    if (packageDetails.field_addons_qty[index]) {
2701                                                                            if (ticketAddonsQtyArr[packageId][index] > 0) {
2702                                                                                if (packageDetails.field_addons_qty[index] && packageDetails.field_addons_qty[index] > 1) {
2703                                                                                    var quantity = packageDetails.field_addons_qty[index];
2704                                                                                    var ticketAddonsQty = ticketAddonsQtyArr[packageId][index];
2705                                                                                    var addonsCount = ticketAddonsQty;
2706                                                                                    for (var i = 0; i < parseInt(ticketAddonsQty); i++) {
2707
2708
2709                                                                                        if (allAddonsName !== '') {
2710                                                                                            allAddonsName += ', ';
2711                                                                                            jsonfield_addons += ',';
2712                                                                                        }
2713                                                                                        jsonfield_addons += index;
2714                                                                                        allAddonsName += addon;
2715                                                                                        allAddonsNameBox += '<span>' + addon + '</span>';
2716                                                                                        ticketAddonsQtyArr[packageId][index] = ticketAddonsQtyArr[packageId][index] - 1;
2717                                                                                        AddonsArray.push(index);
2718                                                                                    }
2719                                                                                } else {
2720
2721                                                                                    if (allAddonsName !== '') {
2722                                                                                        allAddonsName += ', ';
2723                                                                                        jsonfield_addons += ',';
2724                                                                                    }
2725                                                                                    jsonfield_addons += index;
2726                                                                                    allAddonsName += addon;
2727                                                                                    allAddonsNameBox += '<span>' + addon + '</span>';
2728                                                                                    ticketAddonsQtyArr[packageId][index] = ticketAddonsQtyArr[packageId][index] - 1;
2729                                                                                    AddonsArray.push(index);
2730                                                                                    }
2731                                                                            }
2732                                                                        
2733
2734                                                                    }
2735                                                                }else{
2736                                                                    console.log('no addons');
2737                                                                }
2738                                                            }
2739                                                        }
2740
2741                                                    });
2742                                                }
2743                                                
2744                                                if (packageDetails && packageDetails.userDetails && typeof packageDetails.userDetails === 'object') {
2745                                                    // if (parseInt(ticketAddonsQtyArr[packageId][index]) > 0) {
2746                                                    let newAddonsArr = [...AddonsArray];
2747                                                        if (Array.isArray(AddonsArray) && AddonsArray.length > 0) {
2748                                                            // Copying AddonsArray to newAddonsArr
2749                                                            packageDetails.userDetails.field_addons = newAddonsArr;
2750                                                        }else{
2751                                                            packageDetails.userDetails.field_addons = newAddonsArr;
2752                                                            packageDetails.field_addons = {};
2753                                                            packageDetails.field_addons_qty = {};
2754                                                        }
2755                                                    // }
2756
2757                                                } else if (enableExpiredOwnedEditProfile10003110) {
2758                                                    packageDetails.userDetails = {
2759                                                        first_name: firstName,
2760                                                        last_name: lastName,
2761                                                        email: email,
2762                                                        user_id: userId,
2763                                                        package: packageId,
2764                                                        field_addons: AddonsArray
2765                                                    };
2766                                                }
2767                                                
2768
2769                                                var buyer = 0;
2770                                                if (buyer == 0) {
2771                                                    var emailInput = $('input[name="email"]');
2772                                                    if (emailInput.length > 0) {
2773                                                        if (email == emailInput.val().trim()) {
2774                                                            buyer = 1;
2775                                                        }
2776                                                    }
2777                                                }
2778                                                var packageContainerSelector = '#packageContainerBlock' + packageId;
2779                                                var packageContainer = $(packageContainerSelector, window.parent.document);
2780                                                var ori_total = packageContainer.find('.packageContainer__head').data("ori-total");
2781                                                var total = packageContainer.find('.packageContainer__head').data("total");
2782                                                var savedPackage = packageContainer.data('package');
2783                                                var count = parseInt(packageContainer.find('.packageContainer__head').attr("data-count")) + 1;
2784                                                packageContainer.find('.packageContainer__head').attr("data-count", count);
2785                                                if (total === count) {
2786                                                    packageContainer.find('.packageContainer__head .dropdown').hide();
2787                                                }
2788                                                var size = packageContainer.find('> .aPackage').length + 1;
2789
2790                                                if (simplifiedTicketAssignment) {
2791                                                    var package_name = packageContainer.find('> span.assigned-tickets').text().replace(/\d+\/\d+ tickets assigned/, '') + ' ' + size + '/' + ori_total + ' tickets assigned';
2792                                                    // var package_name = packageContainer.find('.packageContainer__head > h3').text().replace(/\d+\/\d+ tickets assigned/, '') + ' ' + size + '/' + ori_total + ' tickets assigned';
2793                                                    packageContainer.find('> span.assigned-tickets').text(package_name);
2794                                                    var package_name = packageContainer.find('> span.assigned-tickets').text().replace(/\d+\/\d+ tickets assigned/, '') + ' ' + size + '/' + ori_total + ' tickets assigned';
2795                                                    packageContainer.find('> span.assigned-tickets').text(package_name);
2796                                                } else {
2797                                                    var package_name = packageContainer.find('.packageContainer__head > h3').text().replace(/\s*\(\d+\/\d+\)/, '') + ' (' + size + '/' + ori_total + ')';
2798                                                    packageContainer.find('.packageContainer__head > h3').text(package_name);
2799                                                    var package_name = packageContainer.find('.packageContainer__head > h3').text().replace(/\s*\(\d+\/\d+\)/, '') + ' (' + size + '/' + ori_total + ')';
2800                                                    packageContainer.find('.packageContainer__head > h3').text(package_name);
2801                                                }
2802
2803
2804
2805                                            var selector = '.user-num' + countSelector;
2806
2807                                            
2808                                            packageContainer.append('<div class="aPackage aPackage' + countSelector + '" data-pack="' + countSelector + '" data-buyer="' + buyer + '" data-addonsname="' + allAddonsName + '" data-package="' + packageId + '" data-addons="' + jsonfield_addons + '"><div class="aPackage__detail"><div class="aPackage__detail__cell aPackage__detail__width">' +
2809                                                '<span>Name</span> <p>' + firstName + ' ' + lastName + '</p> </div>  <div class="aPackage__detail__cell aPackage__detail__width">   <span>Email</span>  <p> ' + email + '</p> </div>' +
2810                                                '<div class="aPackage__detail__cell"><span>Addons</span><div class="addons">' + allAddonsNameBox + '</div></div></div>' +
2811                                                '<div class="aPackage__actions">' +
2812                                                '<div class="dropdown"><a href="#" class="btn action-btn" data-toggle="dropdown"><i class="fa fa-pencil"></i> Edit</a>' +
2813                                                '<ul class="dropdown-menu dropdown-menu-edit dropdown-menu-right" role="menu"> ' +
2814                                                '<li><a href="javascript:void(0)" data-selector="' + selector + '" class="btn action-btn update-user-to-package"><i class="fa fa-pencil-alt"></i> Edit</a></li>' +
2815                                                '<li><a href="javascript:void(0)" class="btn action-btn remove-block"><i class="fa fa-pencil-alt"></i> Remove</a></li>' +
2816                                                '</ul></div>' +
2817                                                '</div></div>');
2818
2819
2820                                                if (packageDetails.userDetails && packageDetails.userDetails.current_url) {
2821                                                    var url = packageDetails.userDetails.current_url;
2822                                                    var decodedUrl = decodeURIComponent(url.replace(/&amp;/g, '&'));
2823                                                    var urlObject = new URL(decodedUrl);
2824
2825                                                    var newGr
2825oupValue = 'user' + countSelector;  // Example new value
2826                                                    urlObject.searchParams.set('group', newGroupValue);
2827                                                    var updatedUrl = urlObject.toString();
2828                                                    var encodedUrl = updatedUrl.replace(/&/g, '&amp;');
2829                                                    packageDetails.userDetails.current_url = encodedUrl;
2830                                                }
2831
2832                                                if (enableExpiredOwnedEditProfile10003110 && packageDetails.userDetails) {
2833                                                    if (typeof packageDetails.userDetails === 'object') {
2834                                                        packageDetails.userDetails.first_name = firstName;
2835                                                        packageDetails.userDetails.last_name = lastName;
2836                                                        packageDetails.userDetails.email = email;
2837                                                    }
2838                                                }
2839
2840                                                if (packageDetails.userDetails && typeof packageDetails.userDetails === 'object' && packageDetails.user_id && !packageDetails.userDetails.user_id) {
2841                                                    packageDetails.userDetails.user_id = packageDetails.user_id;
2842                                                }
2843
2844                                                var encodedJsonData = JSON.stringify(packageDetails.userDetails);
2845                                                if (isUpgradeDowngradeProfile) {
2846                                                    var preservedSlot = resolveUpgradeDowngradeUserListSlot(countSelector);
2847                                                    if (preservedSlot && typeof preservedSlot === 'object' && upgradeDowngradeSlotHasAuthoritativeAddonSelection(preservedSlot, packageId, email)) {
2848                                                        encodedJsonData = JSON.stringify(sanitizeUpgradeDowngradeUserListPayload(preservedSlot, packageId, AddonsArray));
2849                                                    } else if (packageDetails.userDetails && typeof packageDetails.userDetails === 'object') {
2850                                                        encodedJsonData = JSON.stringify(sanitizeUpgradeDowngradeUserListPayload(packageDetails.userDetails, packageId, AddonsArray));
2851                                                    }
2852                                                }
2853                                                $('#user' + countSelector).val(encodedJsonData);
2854                                                countSelector++;
2855                                                countCheck++;
2856                                            }
2857                                        }
2858                                    });
2859                                }
2860                                }
2861                            }
2862
2863                        });
2864                        
2865                        // Handle newly selected packages that don't exist in userDetailsEditTicket
2866                        // Legacy org 1733, or application 3850 only (other apps are unchanged). Extra user_list fields for 3850 only, see inner if (appId === 3850).
2867                        if (String(organizationId) === '1733' || parseInt(appId, 10) === 3850) {
2868                            $.each(TicketPackages, function(packageId, packageData) {
2869                                if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
2870                                    // Check if this package exists in the database records
2871                                    if (!userDetailsEditTicket || !userDetailsEditTicket[packageId]) {
2872                                        // This is a new package - assign it to the buyer
2873                                        if (packageData.hasOwnProperty('pkg_qty') && packageData.pkg_qty > 0) {
2874                                            if(packageData.hasOwnProperty('isDonation') && packageData.isDonation != 1){
2875                                                var packageQty = packageData['pkg_qty'];
2876                                                
2877                                                // Get buyer information from the form
2878                                                var firstName = getMainRegistrationInputValue('first_name');
2879                                                var lastName = getMainRegistrationInputValue('last_name');
2880                                                var email = getMainRegistrationInputValue('email');
2881                                                
2882                                                // Process each ticket in the new package
2883                                                for (var i = 0; i < packageQty; i++) {
2884                                                    var allAddonsName = ''; 
2885                                                    var allAddonsNameBox = ''; 
2886                                                    var jsonfield_addons = ''; 
2887                                                    let AddonsArray = [];
2888                                                    
2889                                                    // Get addons for this package
2890                                                    $.each(packageData, function (key, item) {
2891                                                        if (key !== 'pkg_price' && key !== 'total_price' && key !== 'tax' && 
2891key !== 'pkg_qty' && key !== 'symbol' && key !== 'isDonation') {
2892                                                            if (item.id && item.addons_qty && parseInt(item.addons_qty) > 0) {
2893                                                                var addonId = item.id;
2894                                                                var addonName = item.name;
2895                                                                var addonQty = parseInt(item.addons_qty);
2896                                                                
2897                                                                for (var j = 0; j < addonQty; j++) {
2898                                                                    if (allAddonsName !== '') {
2899                                                                        allAddonsName += ', ';
2900                                                                        jsonfield_addons += ',';
2901                                                                    }
2902                                                                    jsonfield_addons += addonId;
2903                                                                    allAddonsName += addonName;
2904                                                                    allAddonsNameBox += '<span>' + addonName + '</span>';
2905                                                                    AddonsArray.push(addonId);
2906                                                                }
2907                                                            }
2908                                                        }
2909                                                    });
2910                                                    
2911                                                    var buyer = 1; // This is the buyer
2912                                                    var packageContainerSelector = '#packageContainerBlock' + packageId;
2913                                                    var packageContainer = $(packageContainerSelector, window.parent.document);
2914                                                    var ori_total = packageContainer.find('.packageContainer__head').data("ori-total");
2915                                                    var total = packageContainer.find('.packageContainer__head').data("total");
2916                                                    var savedPackage = packageContainer.data('package');
2917                                                    var count = parseInt(packageContainer.find('.packageContainer__head').attr("data-count")) + 1;
2918                                                    packageContainer.find('.packageContainer__head').attr("data-count", count);
2919                                                    if (total === count) {
2920                                                        packageContainer.find('.packageContainer__head .dropdown').hide();
2921                                                    }
2922                                                    var size = packageContainer.find('> .aPackage').length + 1;
2923
2924                                                    if (simplifiedTicketAssignment) {
2925                                                        var package_name = packageContainer.find('> span.assigned-tickets').text().replace(/\d+\/\d+ tickets assigned/, '') + ' ' + size + '/' + ori_total + ' tickets assigned';
2926                                                        packageContainer.find('> span.assigned-tickets').text(package_name);
2927                                                    } else {
2928                                                        var package_name = packageContainer.find('.packageContainer__head > h3').text().replace(/\s*\(\d+\/\d+\)/, '') + ' (' + size + '/' + ori_total + ')';
2929                                                        packageContainer.find('.packageContainer__head > h3').text(package_name);
2930                                                    }
2931
2932                                                    var selector = '.user-num' + countSelector;
2933
2934                                                    
2935                                                    packageContainer.append('<div class="aPackage aPackage' + countSelector + '" data-pack="' + countSelector + '" data-buyer="' + buyer + '" data-addonsname="' + allAddonsName + '" data-package="' + packageId + '" data-addons="' + jsonfield_addons + '"><div class="aPackage__detail"><div class="aPackage__detail__cell aPackage__detail__width">' +
2936                                                        '<span>Name</span> <p>' + firstName + ' ' + lastName + '</p> </div>  <div class="aPackage__detail__cell aPackage__detail__width">   <span>Email</span>  <p> ' + email + '</p> </div>' +
2937                                                        '<div class="aPackage__detail__cell"><span>Addons</span><div class="addons">' + allAddonsNameBox + '</div></div></div>' +
2938                                                        '<div class="aPackage__actions">' +
2939                                                        '<div class="dropdown"><a href="#" class="btn action-btn" data-toggle="dropdown"><i class="fa fa-pencil"></i> Edit</a>' +
2940                                                        '<ul class="dropdown-menu dropdown-menu-edit dropdown-menu-right" role="menu"> ' +
2941                                                        '<li><a href="javascript:void(0)" data-selector="' + selector + '" class="btn action-btn update-user-to-package"><i class="fa fa-pencil-alt"></i> Edit</a></li>' +
2942                                                        '<li><a href="javascript:void(0)" class="btn action-btn remove-block"><i class="fa fa-pencil-alt"></i> Remove</a></li>' +
2943                                                        '</ul></div>' +
2944                                                        '</div></div>');
2945
2946                                                    // Create user data object for the hidden input
2947                                                    var userDataObject = {
2948                                                        "current_url": window.location.href.replace(/&/g, '&amp;') + "&group=user" + countSelector,
2949                                                        "field_addons": AddonsArray,
2950                                                        "package": packageId
2951                                                    };
2952                                                    if (parseInt(appId, 10) === 3850) {
2953                                                        var bypass3850 = ($("#bypass_auto").length > 0 || ($("#bypass").length > 0 && $("#bypass").is(":checked"))) ? "1" : "0";
2954                                                        var formId3850 = ($('input[name="formID"]').val() || $('#formId').val() || '');
2955                                                        userDataObject.first_name = firstName;
2956                                                        userDataObject.last_name = lastName;
2957                                                        userDataObject.email = email;
2958                                                        userDataObject.appID = String($('#a
2958ppId').val() || appId);
2959                                                        userDataObject.formID = formId3850;
2960                                                        userDataObject.bypass = bypass3850;
2961                                                        userDataObject.group_registration = "false";
2962                                                        userDataObject.post_submit = "true";
2963                                                        userDataObject['qty_' + packageId] = "1";
2964                                                        var sd3850 = {};
2965                                                        sd3850[email] = {};
2966                                                        sd3850[email][packageId] = { package_qty: 1 };
2967                                                        userDataObject.selected_data = JSON.stringify(sd3850);
2968                                                    }
2969
2970                                                    var encodedJsonData = JSON.stringify(userDataObject);
2971                                                    $('#user' + countSelector).val(encodedJsonData);
2972
2973                                                    countSelector++;
2974                                                }
2975                                            }
2976                                        }
2977                                    }
2978                                }
2979                            });
2980                        }
2981                        
2982                        // Remaining addons fixed
2983                        var total_data={};
2984                        $.each(TicketPackages, function (packageId, package) {
2985                            if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
2986                                total_data[packageId] = {};
2987                                // Iterate through each item/package addon
2988                                $.each(package, function (key, item) {
2989                                    if (key !== 'pkg_price' && key !== 'total_price' && key !== 'tax' && key !== 'pkg_qty' && key !== 'symbol') {
2990                                        if (item.id && item.addons_qty) {
2991                                            total_data[packageId][item.id] = item.addons_qty;
2992                                        }
2993                                    }
2994                                });
2995                            }
2996                        });
2997                        const used_data = Object.assign({}, total_data);
2998                        $('.packageContainer .aPackage', window.parent.document).each(function () {
2999                            var $package = $(this);
3000                            var packageId = $package.attr("data-package");
3001                            var addonsArray = $package.attr("data-addons");
3002                            // if(package_id == savedPackage){
3003                            addonsArray = addonsArray.split(',');
3004
3005                            $.each(addonsArray, function (key, value){
3006                                value=parseInt(value);
3007                                used_data[packageId][value]=parseInt(used_data[packageId][value]) - 1;
3008                            });
3009                            // }
3010                        });
3011                        var remainingAddons="";
3012                        var remainingIds="";
3013                        $.each(used_data, function (packageId, package) {
3014                             if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
3015                            $.each(package, function (key, item) {
3016                                for(i=0;i<parseInt(item);i++){
3017                                    if(remainingAddons == ''){
3018                                        remainingAddons=TicketPackages[packageId][key]['addons_name'];
3019                                        remainingIds=TicketPackages[packageId][key]['id'];
3020                                    }else{
3021                                        remainingAddons+=', '+TicketPackages[packageId][key]['addons_name'];
3022                                        remainingIds+=', '+TicketPackages[packageId][key]['id'];
3023                                    }
3024                                }
3025
3026                            });
3027                            }
3028                        });
3029
3030                        $('.packageBlock', window.parent.document).attr('data-remaining-addons',remainingAddons);
3031                        $('.packageBlock', window.parent.document).attr('data-remaining-addons-ids',remainingIds);
3032                        //end remain addons fixed
3033                        if(EditProfilePaymentMethodId){
3034                            var pmnt_fld_name = $('.pmnt_fld').attr('name');
3035                            $('select[name="'+pmnt_fld_name+'"]').val(EditProfilePaymentMethodId).change();
3036                            $('input[type="radio"][value="'+EditProfilePaymentMethodId+'"]').prop('checked', true);
3037                            var dataMethod = $('input[name="optionsRadios"][value="'+EditProfilePaymentMethodId+'"]').attr('data-method');
3038                            if(dataMethod ==13 && stripeConnectElement){
3039                                setTimeout(function () {
3040                                    $('#payment-element').show();
3041                                },2000);
3042
3043                            }
3044                        }
3045                        // const radioInputs = document.querySelectorAll('input[type="radio"][data-method="9"]');
3046                        // radioInputs.forEach(input => {
3047                        //     // Find the parent div with class "radio" and hide it
3048                        //     const parentDiv = input.closest('.radio');
3049                        //     if (parentDiv) {
3050                        //         parentDiv.style.display = 'none';
3051                        //     }
3052                        // });
3053                        setTimeout(function () {
3054                            if (assignDropdownFixAppIds.includes(Number(appId))) {
3055                                $('.packageContainer__head .dropdown .dropdown-btn').first().click();
3056                            } else {
3057                                $(document).find('#dropdown-btn').click();
3058                            }
3059                            $('.dropdown-menu.dropdown-menu-main.dropdown-menu-right').css('display', 'none');
3060                        },1000);
3061                        var serializedObject = JSON.stringify(TicketPackages);
3062                        localStorage.setItem("TicketPackages", serializedObject);
3063
3064                        // new code //
3065                        var totalElement = document.querySelector('.totalcountT p[data-total]');
3066                        if (totalElement) {
3067                            var totalText = totalElement.textContent;
3068                            var totalNumber = parseFloat(totalText.replace(/[^0-9.]/g, ''));
3069                            if(totalNumber > 0){
3070                                $('.zerobb').css('display', 'none');
3071                            }
3072                        }
3073                            if (EditProfilePaymentMethodId) {
3074                                var pmnt_fld_name = $('.pmnt_fld').attr('name');
3075                                $('select[name="' + pmnt_fld_name + '"]').val(EditProfilePaymentMethodId).change();
3076                                $('input[type="radio"][value="' + EditProfilePaymentMethodId + '"]').prop('checked', true);
3077                                var dataMethod = $('input[name="optionsRadios"][value="' + EditProfilePaymentMethodId + '"]').attr('data-method');
3078                                if (dataMethod == 13 && stripeConnectElement) {
3079                                    setTimeout(function () {
3080                                        $('#payment-element').show();
3081                                    }, 2000);
3082
3083                                }
3084                            }
3085
3086                        // donation package Auto assign to parent
3087                        setTimeout(function () {
3088                            $('input[name="first_name"], input[name="last_name"], input[name="email"]').change();
3089                        }, 2000);
3090                        //
3091
3092                    }else{
3093
3094                        // donation package Auto assign to parent
3095                        setTimeout(function () {
3096                            $('input[name="first_name"], input[name="last_name"], input[name="email"]').change();
3097                        }, 2000);
3098                        const totalPkgQty = Object.keys(TicketPackages)
3099                            .filter(key => typeof TicketPackages[key] === 'object' && TicketPackages[key].hasOwnProperty('pkg_qty'))
3100                            .reduce((sum, key) => sum + parseInt(TicketPackages[key].pkg_qty, 10), 0);
3101
3102                        if (totalPkgQty > 1) {
3103                            $('#bypass').closest('div').show();
3104                        }
3105                    }
3106            
3107                if (count_start == 1) {
3108
3109                    if (!isRegistrationForm || pageBreakSummaryCount == 0) {
3110                        $('input[name=partner_tag]').val(count_start);
3111                    }
3112
3113                    $('.packageBlock').css("visibility", "hidden");
3114                    $('.group_registration_label').css("display", "none");
3115                    $('.group-reg-block').css("height", "0px");
3116                                    } else {
3117                    if (!isGroupBypassMember) {
3118                        $('.packageBlock').css("visibility", "visible");
3119                        $('.group_registration_label').css("display", "block");
3120                        $('.group-reg-block').css("height", "auto");
3121                                            }
3122
3123                }
3124                
3125                // TICKET: VFC-21255,VFC-21456 - hide package block incase of single ticket and multiple page breaks
3126                let packageCount = 0;
3127
3128                $.each(TicketPackages, function (packageId, package) {
3129                    if (!isNaN(packageId)) {
3130                        if (package['pkg_qty'] != '' && package['pkg_qty'] != undefined && !isNaN(package['pkg_qty'])) {
3131                            packageCount += parseInt(package['pkg_qty']);
3132                        }
3133                    }
3134                   
3135                });
3136                if (isRegistrationForm) {
3137                    if (pageBreakSummaryCount > 0 && packageCount == 1) {
3138                        $('.packageBlock').css("visibility", "hidden");
3139                        $('.group_registration_label').css("display", "none");
3140                        $('.group-reg-block').css("height", "0px");
3141                    }
3142                }
3143
3144                var checkTicketCount= validateTicketPackages();
3145
3146                if(checkTicketCount==false){
3147                    $('.packageBlock').css("visibility", "hidden");
3148                    $('.group_registration_label').css("display", "none");
3149                    $('.group-reg-block').css("height", "0px");
3150                }
3151
3152                
3153                if (typeof updateTicketGroupMaxAssignUi === 'function') {
3154                    updateTicketGroupMaxAssignUi();
3155                }
3156
3157                if (formType === 'REGISTRATION_FORM' && parseInt(pageBreakSummaryCount, 10) > 0) {
3158                    orderNowProcessingRef.orderNowProcessing = false;
3159                    if (fromBackBtn && tcktModifiedFromBackBtn) {
3160                        tcktModifiedFromBackBtn = false;
3161                    }
3162                }
3163
3164                $(document).on('change', 'input[name="first_name"], input[name="last_name"], input[name="email"]', function () {
3165                    var first_name = getMainRegistrationInputValue('first_name');
3166                    var last_name = getMainRegistrationInputValue('last_name');
3167                    var email = getMainRegistrationInputValue('email');
3168                    $packageContainer = $('.packageContainer');
3169
3170                    var data = {};
3171
3172                    if(first_name !='' && last_name !='' && email !='') {
3173                        if ($packageContainer.find('> .aPackage').length > 0) {
3174                            $packageContainer.find('> .aPackage').each(function () {
3175                                var $package = $(this);
3176                                var block_id = $package.attr("data-pack");
3177                                if(block_id !== undefined && block_id !== ''){
3178                                    var buyer = $package.attr("data-buyer");
3179                                    if (buyer == 1) {
3180
3181                                        // simplifiedTicketAssignment =1
3182                                        if (simplifiedTicketAssignment) {
3183                                            var name = $package.find('.aPackage__detail__cell:nth-of-type(2) p').text();
3184                                            var block_email = $package.find('.aPackage__detail__cell:nth-of-type(3) p').text().replace(/\s/g, "");
3185                                            $package.find('.aPackage__detail__cell:nth-of-type(2) p').text(first_name + ' ' + last_name);
3186                                            $package.find('.aPackage__detail__cell:nth-of-type(3) p').text(email);
3187                                        } else {
3188                                            var name = $package.find('.aPackage__detail__cell:nth-of-type(1) p').text();
3189                                            var block_email = $package.find('.aPackage__detail__cell:nth-of-type(2) p').text().replace(/\s/g, "");
3190                                            $package.find('.aPackage__detail__cell:nth-of-type(1) p').text(first_name + ' ' + last_name);
3191                                            $package.find('.aPackage__detail__cell:nth-of-type(2) p').text(email);
3192                                        }
3193
3194
3195                                        var value = $("#user" + block_id).val();
3196
3197                                        // $('#' + user_id).val();
3198
3199                                        // Parse JSON value and update corresponding user input
3200                                        if (value != undefined && value != "") {
3201                                            var jsonObject = JSON.parse(value);
3202                                            // Unset property
3203                                            jsonObject.first_name = first_name;
3204                                            jsonObject.last_name = last_name;
3205                                            jsonObject.email = email;
3206
3207                                            value = JSON.stringify(jsonObject);
3208                                            $("#user" + block_id).val(value);
3209                                        }
3210                                    }
3211                                }
3212
3213
3214                            });
3215                        }
3216                        $packageContainer.each(function () {
3217                            $(this).find('.dropdown-menu > li a').each(function () {
3218                                var buyer = $(this).attr("data-buyer");
3219                                var user = $(this).attr("data-user");
3220                                if (buyer == 1) {
3221                                    $(this).find('p').text(first_name + ' ' + last_name + ' (Buyer)')
3222                                    $(this).find('span').text(email)
3223                                    return false;
3224                                }
3225                            });
3226                        });
3227                    }
3228                    var singleTicketAutoAssign = '';
3229                        if(singleTicketAutoAssign){
3230                            if(first_name !='' && last_name !='' && email !=''){
3231                                if($('.aPackage1').length > 0){
3232                                    var name=first_name + '  ' +last_name;
3233                                    if(simplifiedTicketAssignment){
3234                                        $('.aPackage1 .aPackage__detail__cell p').eq(1).text(name);
3235                                        $('.aPackage1 .aPackage__detail__cell p').eq(2).text(email);
3236                                    }else{
3237                                        $('.aPackage1 .aPackage__detail__cell p').first().text(name);
3238                                        $('.aPackage1 .aPackage__detail__cell p').eq(1).text(email);
3239                                    }
3240
3241                                }else{
3242                                    $('.packageContainer__head .dropdown .dropdown-btn').first().click();
3243                                    $('.user-info-prev.buyer').click();
3244                                }
3245
3246                            }
3247                        }
3248                       //donation auto assign to parent user
3249                        if(first_name !='' && last_name !='' && email !=''){
3250                          $.each(TicketPackages, function (packageId, package) {
3251                            if(package && package['isDonation'] && typeof package['isDonation'] !== 'undefined' && package['isDonation'] !== null && package['isDonation'] == 1){
3252                                 var countPackage=0;
3253                                    $('input[name="user_list[]"]').each(function() {
3254                                        const inputField = $(this);
3255                                        if ($.trim(inputField.val()) !== "") { // Check if the input value is not empty
3256                                            try {
3257                                                const jsonData = JSON.parse(inputField.val().replace(/&quot;/g, '"')); // Parse JSON
3258                                                if (jsonData && parseInt(jsonData.package) === parseInt(packageId)) { // Validate if `package` exists and matches
3259                                                     countPackage++;
3260                                                }
3261                                            } catch (error) {
3262                                                console.error("Invalid JSON in input field:", inputField.val()); // Log error for debugging
3263                                            }
3264                                        }
3265                                    });
3266                                    if(countPackage ==0){
3267                                             for (let i = 0; i < parseInt(package['pkg_qty']); i++) {
3268                                      if (assignDropdownFixAppIds.includes(Number(appId))) {
3269                                        $('#packageContainerBlock' + packageId + ' .dropdown-btn').click();
3270                                    } else {
3271                                        $('#packageContainerBlock' + packageId + ' #dropdown-btn').click();
3272                                    }
3273                                      $('#packageContainerBlock' + packageId + ' .user-info-prev').click();
3274                                }
3275                                    }
3276
3277                            }
3278
3279                        });
3280                     }
3281
3282                });
3283            if (!isEventBound) {
3284
3285                /* JIRA Ticket - VFC-19349 */
3286                                    let isUniqueEmailValidationEnabled = false;
3287                
3288                
3289
3290                $(document).on('click', '.assign-buttn .btn, #assign-buttn .btn', function () {
3291                    // Toggle dropdown menu
3292
3293
3294                    var first_name = getMainRegistrationInputValue('first_name');
3295                    var last_name = getMainRegistrationInputValue('last_name');
3296                    var email = getMainRegistrationInputValue('email');
3297                    var $dropdownMenu = $(this).next('.dropdown-menu');
3298                    // Check if the dropdown menu is currently hidden
3299                    var isDropdownHidden = $dropdownMenu.css('display') === 'none';
3300                    $(".packageContainer__head").find('.dropdown-menu').hide();
3301
3302                    
3303                    if (first_name !== '' && last_name !== '' && email !== '') {
3304
3305                        var is_back=false
3306                        // Check if the local cookie "backButtonClicked" exists; if so, do not proceed
3307                        function getCookie(name) {
3308                            let match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
3309                            if (match) return match[2];
3310                            return null;
3311                        }
3312                        if (getCookie('backButtonClicked') === 'true') {
3313                            // Delete the "backButtonClicked" cookie by setting its expiration date to the past
3314                            document.cookie = "backButtonClicked=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
3315                            // Prevent further action if the cookie exists
3316                            is_back=true;
3317
3318                        }
3319                        /* If unique email validation is enabled, the parent user should be shown in assignee list only one time and not added again */
3320                        if (!clickedOnce || is_back) {
3321
3322                            /* JIRA Ticket - VFC-19349 */
3323                                                            $packageContainer = $(this).closest('.packageContainer');
3324                                if ($packageContainer.find('.packageContainer__head .dropdown-menu-main .buyer').length == 0 && $packageContainer.find('.packageContainer__head .dropdown-menu-main .user-info-prev').length == 0) {
3325                                    $packageContainer.find('.packageContainer__head .dropdown-menu-main').each(function () {
3326                                        $(this).append('<li><a href="javascript:void(0)" class="user-info-prev buyer" data-buyer="1" data-user="buyer"><p>' + first_name + ' ' + last_name + ' (Buyer)</p><span>' + email + '</span></a></li>');
3327                                    });
3328                                }
3329                                if ($packageContainer.find('.packageContainer__head .dropdown-menu-main .buyer').length == 0
3330                                    && !assignDropdownAlreadyHasEmail($packageContainer.find('.packageContainer__head .dropdown-menu-main'), email)) {
3331                                    var dropdownMenuNew = $packageContainer.find('.packageContainer__head .dropdown-menu-main');
3332
3333                                    // Create the new <li> element
3334                                    var newUserData = `
3335                                            <li>
3336                                                <a href="javascript:void(0)" class="user-info-prev buyer" data-buyer="1" data-user="buyer">
3337                                                    <p>${first_name} ${last_name} (Buyer)</p>
3338                                                    <span>${email}</span>
3339                                                </a>
3340                                            </li>`;
3341
3342                                    // Check if there are at least 2 existing <li> elements
3343                                    if (dropdownMenuNew.find('li').length >= 2) {
3344                                        // Insert the new user data as the 3rd <li> (index 2, 0-based)
3345                                        dropdownMenuNew.find('li').eq(1).after(newUserData);
3346                                    } else {
3347                                        // If there are fewer than 2 <li>, append it at the end
3348                                        dropdownMenuNew.append(newUserData);
3349                                    }
3350                                }
3351                            
3352                            // If the dropdown was already visible, hide it. Otherwise, show it.
3353                            if (!isDropdownHidden) {
3354                                $dropdownMenu.hide();
3355                            } else {
3356                                $dropdownMenu.show();
3357                            }
3358                        //This code is creating issue on live site
3359                        // setTimeout(function(){
3360                        //     if($('div[data-buyer="1"]').length == 0){
3361                        //         let buyer_one_anchor = $('a[data-buyer="1"]');
3362                        //         buyer_one_anchor.click();
3363                        //         buyer_one_anchor.prop('disabled',true);
3364                        //         buyer_one_anchor.css('cursor','not-allowed');
3365                        //         $('.aPackage1 .action-btn').first().hide();
3366                        //     }
3367                        // },500);
3368                            if (isUniqueEmailValidationEnabled) {
3369                                clickedOnce = true;
3370                            }
3371                        }
3372                    } else {
3373                        alert("Please fill in all fields: First Name, Last Name, and Email.");
3374                        $dropdownMenu.hide();
3375                    }
3376                });
3377                $(document).on('click', '.assign-user-to-package', function () {
3378
3379                    /* JIRA Ticket - VFC-19349 */
3380                    
3381                    // Ticket group max: block adding a new other attendee when limit is reached
3382                    if (typeof canAddNewOtherAttendeeUnderTicketGroupMax === 'function' && !canAddNewOtherAttendeeUnderTicketGroupMax()) {
3383                        return false;
3384                    }
3385
3386                    if (!simplifiedTicketAssignment) {
3387                        $(this).parent().parent().hide();
3388                        var $assignPkgHead = $(this).closest('.packageContainer__head');
3389                        var rawDataCount = $assignPkgHead.attr('data-count');
3390                        count = parseInt(rawDataCount, 10);
3391                        var isMultipleTicketUpgrade = typeof multipleTicketEdit !== 'undefined' && parseInt(multipleTicketEdit, 10) === 1;
3392                        if (isNaN(count) || count < 0 || (isMultipleTicketUpgrade && (rawDataCount === undefined || rawDataCount === ''))) {
3393                            $assignPkgHead.attr('data-count', '0');
3394                            count = 0;
3395                        }
3396                    } else {
3397                        count = $(this).closest('.packageContainer').find('.packageContainer__head').attr('data-count');
3398                    }
3399                    
3400                    if (typeof multipleTicketEdit !== 'undefined' && multipleTicketEdit) {
3401                        count = getlastRecordID();
3402
3403                        if (isNaN(count) || count < 0 ) {
3404                            count = 0;
3405                        }
3406                    }
3407
3408
3409                    package_id = $(this).closest('.packageContainer').data('package');
3410                    count = parseInt(count) + 1;
3411                    if(simplifiedTicketAssignment){
3412                        count = $(this).attr('data-row');
3413                    } else {
3414                        // iframe writes group=userN. data-count+1 / getlastRecordID+1 can
3415                        // overwrite a filled seat after a middle remove; use first empty #userN.
3416                        var emptySlot = findFirstEmptyField();
3417                        if (emptySlot > 0) {
3418                            count = emptySlot;
3419                        }
3420                    }
3421                    var buyer = $(this).closest('.aPackage').data('buyer') || 0;
3422                    localStorage.setItem("buyer", buyer);
3423                    localStorage.setItem("savedPackage", package_id);
3424                    if (typeof syncTicketPackagesToStorage === 'function') {
3425                        syncTicketPackagesToStorage();
3426                    } else {
3427                        localStorage.setItem("TicketPackages", JSON.stringify(TicketPackages));
3428                    }
3429                    $('.user-num' + count).click();
3430
3431
3432                });
3433
3434                $(document).on('click', '.update-user-to-package', function () {
3435                    console.log('EDIT');
3436                    selector = $(this).attr('data-selector');
3437                    if (enableExpiredOwnedEditProfile10003110) {
3438                        var packId = $(this).closest('.aPackage').attr('data-pack');
3439                        if (packId) {
3440                            syncGroupUserHiddenFieldFromDisplay('user' + packId);
3441                            selector = '.user-num' + packId;
3442                        }
3443                    }
3444                    package_id = $(this).closest('.packageContainer').data('package');
3445                    buyer = $(this).closest('.aPackage').data('buyer');
3446                    localStorage.setItem("buyer", buyer);
3447                    localStorage.setItem("savedPackage", package_id);
3448                    if (typeof syncTicketPackagesToStorage === 'function') {
3449                        syncTicketPackagesToStorage();
3450                    } else {
3451                        localStorage.setItem("TicketPackages", JSON.stringify(TicketPackages));
3452                    }
3453                    $(selector).click();
3454
3455                });
3456
3457                
3458                // $(".user-info-prev", window.parent.document).click(function () {
3459                $(document).on('click', '.user-info-prev', function () {
3460                    var first_name = getMainRegistrationInputValue('first_name');
3461                    var last_name = getMainRegistrationInputValue('last_name');
3462                    var email = getMainRegistrationInputValue('email');
3463                    var appId = $('#appId').val();
3464
3465                    // Ticket group max: block assigning a new unique other email when limit is reached
3466                    var assignEmailCandidate = ($(this).find('span').text() || '').trim();
3467                    var assignDataBuyer = $(this).data('buyer');
3468                    var assignDataUser = $(this).data('user');
3469                    if (assignDataUser == 'buyer' || assignDataBuyer == 1) {
3470                        assignEmailCandidate = email;
3471                    }
3472                    if (typeof canAssignEmailUnderTicketGroupMax === 'function' && !canAssignEmailUnderTicketGroupMax(assignEmailCandidate)) {
3473                        return false;
3474                    }
3475
3476                    // Check if email already exists in any .aPackage within this .packageContainer
3477                    if(appId == 21070 ){
3478
3479                        var $clicked = $(this);
3480                        var emailClicked = $clicked.find('span').text()?.trim() || '';
3481                        var $packageContainer = $(this).closest('.packageContainer');
3482                        var emailExists = false;
3483                        var isEdit = false;
3484                        var currentEditIndex = -1;
3485
3486                        // Determine if this is an edit action by checking for aPackage being edited
3487                        // Try to find the current editing .aPackage (if any)
3488                        var $editingPackage = $(this).closest('.packageContainer').find('.aPackage.editing');
3489                        if ($editingPackage.length > 0) {
3490                            isEdit = true;
3491                            currentEditIndex = $editingPackage.index();
3492                        }
3493
3494                        // Check for duplicate email in both scenarios: Add and Edit
3495                        $packageContainer.find('.aPackage').each(function(idx) {
3496                            // If editing, skip the current editing row
3497                            if (isEdit && idx === currentEditIndex) {
3498                                return true; // continue
3499                            }
3500                            // Try to find the email in the "Email" cell
3501                            var $emailCell = $(this).find('.aPackage__detail__cell:contains("Email")');
3502                            var existingEmail = '';
3503                            if ($emailCell.length > 0) {
3504                                existingEmail = $emailCell.find('p').text().trim().toLowerCase();
3505                            } else {
3506                                // Fallback: try to find the first <p> under .aPackage__detail__cell with a <span> containing "Email"
3507                                $(this).find('.aPackage__detail__cell').each(function() {
3508                                    var $span = $(this).find('span');
3509                                    if ($span.length && $span.text().trim().toLowerCase() === 'email') {
3510                                        existingEmail = $(this).find('p').text().trim().toLowerCase();
3511                                        return false; // break inner loop
3512                                    }
3513                                });
3514                            }
3515                            if (existingEmail === emailClicked.toLowerCase()) {
3516                                emailExists = true;
3517                                return false; // break outer loop
3518                            }
3519                        });
3520
3521                        if (emailExists) {
3522                            // Show validation error (you can customize this as needed)
3523                            if ($('.email-duplicate-error').length === 0) {
3524                                // Find the specific label
3525                                var $label = $('label.control-label.group_registration_label[for="fld_1518407"]');
3526                                if ($label.length) {
3527                                    // Insert error message after the label
3528                                    $('<div class="email-duplicate-error" style="color:red;margin-bottom:10px;">This email has already been assigned to a ticket.</div>').insertAfter($label);
3529                                } else {
3530                                    // Fallback: insert before email input as before
3531                                    $('<div class="email-duplicate-error" style="color:red;margin-bottom:10px;">This email has already been assigned to a ticket.</div>').insertBefore($('input[name="email"]').closest('.form-group, .form-row, .form-field').length ? $('input[name="email"]').closest('.form-group, .form-row, .form-field') : $('input[name="email"]'));
3532                                }
3533                            }
3534                            return false;
3535                        } else {
3536                            $('.email-duplicate-error').remove();
3537                        }
3538                    }
3539
3540
3541                    if (first_name !== '' && last_name !== '' && email !== '') {
3542
3543                        // Retrieve relevant data attributes
3544                        var $packageContainer = $(this).closest('.packageContainer');
3545                        var user_id = $(this).data("user");
3546                        var data_buyer = $(this).data("buyer");
3547                        var ori_total = $packageContainer.find('.packageContainer__head').data("ori-total");
3548                        var total = $packageContainer.find('.packageContainer__head').data("total");
3549                        var savedPackage = $packageContainer.data('package');
3550
3551                        // Auto-assign addons for app_id 1000001457 when assigning user to ticket
3552                        // OR when auto_addons_to_buyer is on and assigning to the buyer/parent
3553                        // For auto_addons_to_buyer: only remaining addons (exclude units already on other tickets)
3554                        var addonIdsArray = [];
3555                        var allAddonsName = '';
3556                        var allAddonsNameBox = '';
3557                        var jsonfield_addons = '';
3558                        var isBuyerAssign = (user_id == 'buyer' || data_buyer == 1);
3559                        if ((String(appId) === '1000001457' || (autoAddonsToBuyer && isBuyerAssign)) && TicketPackages && TicketPackages[savedPackage]) {
3560                            var pkg = TicketPackages[savedPackage];
3561                            var usedAddonCounts = {};
3562
3563                            if (autoAddonsToBuyer && isBuyerAssign) {
3564                                $packageContainer.find('> .aPackage').each(function () {
3565                                    var addonsAttr = ($(this).attr('data-addons') || '').trim();
3566                                    var countedFromDom = false;
3567                                    if (addonsAttr) {
3568                                        $.each(addonsAttr.split(','), function (i, value) {
3569                                            value = parseInt($.trim(value), 10);
3570                                            if (!isNaN(value) && value) {
3571                                                usedAddonCounts[value] = (usedAddonCounts[value] || 0) + 1;
3572                                                countedFromDom = true;
3573                                            }
3574                                        });
3575                                    }
3576                                    // Fallback if data-addons is empty but user_list already has field_addons
3577                                    if (!countedFromDom) {
3578                                        var packId = $(this).attr('data-pack');
3579                                        var userVal = $('#user' + packId).val();
3580                                        if (userVal) {
3581                                            try {
3582                                                var userObj = JSON.parse(userVal);
3583                                                if (userObj.field_addons && Array.isArray(userObj.field_addons)) {
3584                                                    $.each(userObj.field_addons, function (i, addonId) {
3585                                                        addonId = parseInt(addonId, 10);
3586                                                        if (!isNaN(addonId) && addonId) {
3587                                                            usedAddonCounts[addonId] = (usedAddonCounts[addonId] || 0) + 1;
3588                                                        }
3589                                                    });
3590                                                }
3591                                            } catch (e) {}
3592                                        }
3593                                    }
3594                                });
3595                            }
3596
3597                            $.each(pkg, function (key, item) {
3598                                if (key !== 'pkg_price' && key !== 'total_price' && key !== 'tax' && key !== 'pkg_qty' && key !== 'symbol' && key !== 'isDonation' && item && item.id && item.addons_qty && parseInt(item.addons_qty) > 0) {
3599                                    var addonId = item.id;
3600                                    var addonName = (item.addons_name != null && item.addons_name !== '') ? item.addons_name : (item.name || '');
3601                                    var addonQty = parseInt(item.addons_qty, 10);
3602
3603                                    // Parent gets only what's left after other tickets
3604                                    if (autoAddonsToBuyer && isBuyerAssign) {
3605                                        var usedQty = usedAddonCounts[addonId] || usedAddonCounts[String(addonId)] || 0;
3606                                        addonQty = Math.max(0, addonQty - usedQty);
3607                                    }
3608
3609                                    for (var j = 0; j < addonQty; j++) {
3610                                        addonIdsArray.push(addonId);
3611                                        if (allAddonsName !== '') {
3612                                            allAddonsName += ', ';
3613                                            jsonfield_addons += ',';
3614                                        }
3615                                        allAddonsName += addonName;
3616                                        allAddonsNameBox += '<span>' + addonName + '</span>';
3617                                        jsonfield_addons += addonId;
3618                                    }
3619                                }
3620                            });
3621                        }
3622
3623                        // Increment count and hide dropdown if necessary
3624                        var count = parseInt($packageContainer.find('.packageContainer__head').attr("data-count")) + 1;
3625                        
3626                        $packageContainer.find('.packageContainer__head').attr("data-count", count);
3627                        var Useremail = $(this).find('span').text();
3628
3629                        if (total === count) {
3630                            $packageContainer.find('.packageContainer__head .dropdown').hide();
3631                        }
3632
3633                        var size = $packageContainer.find('> .aPackage').length + 1;
3634                        if(simplifiedTicketAssignment){
3635                            var package_name = $packageContainer.find('> span.assigned-tickets').text().replace(/\d+\/\d+ tickets assigned/, '') + ' ' + size + '/' + ori_total + ' tickets assigned';
3636                            $packageContainer.find('> span.assigned-tickets').text(package_name);
3637                        }else{
3638                            var package_name = $packageContainer.find('.packageContainer__head > h3').text().replace(/\s*\(\d+\/\d+\)/, '') + ' (' + size + '/' + ori_total + ')';
3639                            $packageContainer.find('.packageContainer__head > h3').text(package_name);
3640                        }
3641
3642
3643                        if(simplifiedTicketAssignment){
3644                            count = $packageContainer.find('.fakePackage').first().data('pack');
3645                        } else {
3646                            // data-count is this package's assigned qty, not the global #userN index.
3647                            // After remove, data-count+1 can point at a filled seat; write the first empty slot.
3648                            var emptySlot = findFirstEmptyField();
3649                            if (emptySlot > 0) {
3650                                count = emptySlot;
3651                            }
3652                        }
3653                        var buyer = 0;
3654                        if (user_id == 'buyer' || data_buyer == 1) {
3655                            data = {};
3656                            var formDataArray = $('.reg-form-data').serializeArray();
3657                            formDataArray.forEach(function (field) {
3658                                if (field.name != "user_list[]") {
3659                                    // Check if field name contains "[]"
3660                                    if (field.name.indexOf("[]") !== -1) {
3661                                        // Remove "[]" from the field name
3662                                        var fieldName = field.name.replace("[]", "");
3663                                        // Initialize an array if the key doesn't exist
3664                                        if (!data[fieldName]) {
3665                                            data[fieldName] = [];
3666                                        }
3667                                        // Push the value to the array
3668                                        data[fieldName].push(field.value);
3669                                    } else {
3670                                        // Add the value directly if the key doesn't exist
3671                                        data[field.name] = field.value;
3672                                    }
3673                                }
3674                            });
3675                            buyer = 1;
3676
3677                            var first_name = data['first_name'];
3678                            var last_name = data['last_name'];
3679                            var email = data['email'];
3680                            data["package"] = savedPackage;
3681                            if (addonIdsArray.length > 0 && (String(appId) === '1000001457' || (autoAddonsToBuyer && isBuyerAssign))) {
3682                                data["field_addons"] = addonIdsArray;
3683                            }
3684                               var clickSource = $(this).attr('data-click-source') || '';
3685                               if(clickSource === 'partner_tag_section') {
3686                                   let addonPaymentValues = [];
3687                                   
3688                                   // Check if TicketPackages has single object and pkg_qty is 1
3689                                   let packageKeys = Object.keys(TicketPackages).filter(key => !isNaN(key));
3690                                   if (packageKeys.length === 1) {
3691                                       let package = TicketPackages[savedPackage];
3692                                       if (package.pkg_qty === 1) {
3693                                           // Get addon IDs from numeric keys
3694                                           for (let key in package) {
3695                                               if (!isNaN(key) && package[key].id) {
3696                                                   addonPaymentValues.push(package[key].id);
3697                                               }
3698                                           }
3699                                       }
3700                                   }
3701
3702                                   if (addonPaymentValues.length > 0) {
3703                                       data["field_addons"] = addonPaymentValues;
3704                                   }
3705
3706                                   // Remove the attribute after handling
3707                                  // $(this).removeAttr('data-click-source');
3708                               }
3709                          
3710                      
3711                            data = JSON.stringify(data);
3712                            $('#user' + count).val(data);
3713                            window.changeIcon(count);
3714                        } else {
3715                            var value = $('#' + user_id).val();
3716                              if(value ==""){
3717                                  var newValue=null;
3718                                  var userListInputs = document.querySelectorAll('input[name="user_list[]"]');
3719                                  userListInputs.forEach(function(input) {
3720                                      var value2 = input.value;
3721                                      if (value2 !="") {
3722                                          // Parse JSON value and update corresponding user input
3723                                          var jsonObject = JSON.parse(value2);
3724                                          if(jsonObject.email.trim().toLowerCase() ==Useremail.trim().toLowerCase()){
3725                                              newValue=value2;
3726                                          }
3727                                      }
3728
3729                                  });
3730                                  if(newValue !=null){
3731                                      value=newValue;
3732                                  }
3733                              }
3734                            // Parse JSON value and update corresponding user input
3735                            var jsonObject = JSON.parse(value);
3736                            // Update the package_id value inside the jsonObject, if present or add it
3737                            
3738                            // if ($('#appId').val() == '22760' || $('#appId').val() =='22759') {
3739                                jsonObject.package_id = savedPackage;
3740                                jsonObject.package = String(savedPackage);
3741                            // }
3742                            if (String(appId) === '1000001457' && addonIdsArray.length > 0) {
3743                                jsonObject.field_addons = addonIdsArray;
3744                            } else {
3745                                delete jsonObject.field_addons;
3746                            }
3747
3748                            value = JSON.stringify(jsonObject);
3749                            $('#user' + count).val(value);
3750                            window.changeIcon(count);
3751
3752                            var first_name = jsonObject.first_name;
3753                            var last_name = jsonObject.last_name;
3754                            var email = jsonObject.email;
3755                        }
3756
3757                        if (buyer == 0) {
3758                            if (email == $('input[name="email"]').val().trim()) {
3759                                buyer = 1;
3760                            }
3761                        }
3762
3763
3764                        // Append new package block
3765                        var selector = '.user-num' + count;
3766                        var IsAddonsExists=false;
3767                        if (TicketPackages && Object.keys(TicketPackages).length > 0) {
3768                            for (var packageId in TicketPackages) {
3769                                if (Object.prototype.hasOwnProperty.call(TicketPackages, packageId)) {
3770                                    var package = TicketPackages[packageId];
3771                                    if (package && typeof package === 'object') {
3772                                        for (var addonId in package) {
3773                                            if (Object.prototype.hasOwnProperty.call(package, addonId) && package[addonId] && package[addonId].hasOwnProperty('addons_price')) {
3774                                                IsAddonsExists=true;
3775                                                break;
3776                                            }
3777                                        }
3778                                    }
3779                                }
3780                            }
3781                        }
3782                        if(simplifiedTicketAssignment){
3783                            var fakePackageCount = '.fakePackage' + count;
3784                            var ticketBlock='<div class="aPackage__detail__cell aPackage__detail__width" style="width: 80px !important"><span></span><p>Ticket ' + count + '</p></div>';
3785                            var ticketButtons='';
3786                            if(buyer == 0){
3787                                ticketButtons+='<a href="javascript:void(0)" data-selector="'+selector+'" class="btn action-btn update-user-to-package">Edit</a>';
3788                            }else if(buyer == 1 && IsAddonsExists == true){
3789                                ticketButtons+='<a href="javascript:void(0)" data-selector="'+selector+'" class="btn action-btn update-user-to-package">Edit</a>';
3790                            }
3791
3792                            ticketButtons += '<a href="javascript:void(0)" class="btn action-btn remove-block">Remove</a>';
3793                         
3794                        }else{
3795                            ticketBlock='';
3796                            var ticketButtons = '<div class="dropdown">';
3797                            ticketButtons += '<a href="#" class="btn action-btn" data-toggle="dropdown"><i class="fa fa-pencil"></i> Edit</a>';
3798                            ticketButtons += '<ul class="dropdown-menu dropdown-menu-edit dropdown-menu-right" role="menu">';
3799                            if(buyer == 0){
3800                                if (enableExpiredOwnedEditProfile10003110) {
3801                                    ticketButtons+='<li><a href="javascript:void(0)" data-selector="'+selector+'" class="btn action-btn update-user-to-package"><i class="fa fa-pencil-alt"></i> Edit</a></li>';
3802                                } else {
3803                                    ticketButtons+='<a href="javascript:void(0)" data-selector="'+selector+'" class="btn action-btn update-user-to-package">Edit</a>';
3804                                }
3805                            }else if(buyer == 1 && IsAddonsExists == true){
3806                                if (enableExpiredOwnedEditProfile10003110) {
3807                                    ticketButtons+='<li><a href="javascript:void(0)" data-selector="'+selector+'" class="btn action-btn update-user-to-package"><i class="fa fa-pencil-alt"></i> Edit</a></li>';
3808                                } else {
3809                                    ticketButtons+='<a href="javascript:void(0)" data-selector="'+selector+'" class="btn action-btn update-user-to-package">Edit</a>';
3810                                }
3811                            }
3812                            ticketButtons += '<li><a href="javascript:void(0)" class="btn action-btn remove-block"><i class="fa fa-pencil-alt"></i> Remove</a></li>';
3813                            ticketButtons += '</ul></div>';
3814                        }
3815
3816                        var shouldDisplayAutoAddons = (String(appId) === '1000001457') || (autoAddonsToBuyer && buyer == 1 && addonIdsArray.length > 0);
3817                        var displayAddonsName = shouldDisplayAutoAddons ? (allAddonsName || '') : '';
3818                        var displayAddonsIds = shouldDisplayAutoAddons ? (jsonfield_addons || '') : '';
3819                        var displayAddonsBox = shouldDisplayAutoAddons ? (allAddonsNameBox || '') : '';
3820                        var packageHTML = '<div class="aPackage aPackage' + count + '" data-pack="' + count + '" data-buyer="' + buyer + '" data-addonsname="' + displayAddonsName + '" data-addons="' + displayAddonsIds + '" data-package="' + s
3820avedPackage + '">' +
3821                            '<div class="aPackage__detail">' +
3822                            ticketBlock+
3823                            '<div class="aPackage__detail__cell aPackage__detail__width"><span>Name</span><p>' + first_name + ' ' + last_name + '</p></div>' +
3824                            '<div class="aPackage__detail__cell aPackage__detail__width"><span>Email</span><p>' + email + '</p></div>' +
3825                            '<div class="aPackage__detail__cell"><span>Addons</span><div class="addons">' + displayAddonsBox + '</div>' +
3826                            '</div> </div>' +
3827                            '<div class="aPackage__actions">' +
3828                            ticketButtons +
3829                            '</div>' +
3830                            '</div>';
3831
3832                        if(simplifiedTicketAssignment){
3833                            $('#packageContainerBlock' + savedPackage +' '+fakePackageCount).after(packageHTML);
3834                            $('#packageContainerBlock' + savedPackage +' '+fakePackageCount).remove();
3835                        
3836                            if(TicketPackages[savedPackage]['isDonation'] !=1){
3837                                $('.user-info-prev').hide();
3838                            }
3839                        
3840                        }else{
3841                            $('#packageContainerBlock' + savedPackage).append(packageHTML);
3842                        }
3843
3844
3845
3846
3847                        // Update data object
3848                        var data = {};
3849                        $packageContainer.find('> .aPackage').each(function () {
3850                            var $package = $(this);
3851                            var pack_id = $package.attr("data-pack");
3852                            var name = $package.find('.aPackage__detail__cell:nth-of-type(1) p').text();
3853                            var email = $package.find('.aPackage__detail__cell:nth-of-type(2) p').text().replace(/\s/g, "");
3854
3855                            var parent_email = $('input[name="email"]').val().trim();
3856                            if (email == parent_email) {
3857                                name = name + ' (Buyer)';
3858                            }
3859                            if (!data[email]) {
3860                                data[email] = name + ',' + pack_id;
3861                            }
3862                        });
3863
3864                        // Update dropdown menu
3865                        var $dropdownMenu = $packageContainer.find('.packageContainer__head .dropdown-menu-main');
3866                        // $dropdownMenu.find("li").slice(3).remove();
3867
3868                        var flag = 0;
3869                        $packageContainer.find('.dropdown-menu > li a').each(function () {
3870                            var buyer = $(this).attr("data-buyer");
3871                            var user = $(this).attr("data-user");
3872                            if (buyer == 1) {
3873                                flag = 1;
3874                            }
3875                        });
3876
3877                        /* JIRA Ticket - VFC-19349 */
3878                                                    // 1
3879                            Object.entries(data).forEach(function ([key, value]) {
3880                                value = value.split(",");
3881                                buyer = 0;
3882                                if (key == $('input[name="email"]').val().trim()) {
3883                                    buyer = 1;
3884                                    value[0] = value[0] + ' (Buyer)';
3885                                }
3886                                if ($dropdownMenu && $dropdownMenu.length > 0) {
3887                                    if ((buyer == 1 && flag == 1) || assignDropdownAlreadyHasEmail($dropdownMenu, key)) {
3888                                        return;
3889                                    }
3890                                    $dropdownMenu.append('<li><a href="javascript:void(0)" class="user-info-prev" data-buyer="' + buyer + '" data-user="user' + value[1] + '"><p>' + value[0] + '</p><span>' + key + '</span></a></li>');
3891                                }
3892
3893                                // $dropdownMenu.append('<li><a href="javascript:void(0)" class="user-info-prev" data-buyer="'+buyer+'" data-user="user' + value[1] + '"><p>' + value[0] + '</p><span>' + key + '</span></a></li>');
3894                            });
3895                        
3896                        //Check remaining Data
3897                        var total_data = {};
3898                        $.each(TicketPackages, function (packageId, package) {
3899                            if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
3900                                total_data[packageId] = {};
3901                                // Iterate through each item/package addon
3902                                $.each(package, function (key, item) {
3903                                    if (key !== 'pkg_price' && key !== 'total_price' && key !== 'tax' && 
3903key !== 'pkg_qty' && key !== 'symbol') {
3904                                        if (item.id && item.addons_qty) {
3905                                            total_data[packageId][item.id] = item.addons_qty;
3906                                        }
3907                                    }
3908                                });
3909                            }
3910                        });
3911
3912                        // console.log('Total addons');
3913                        // console.log(total_data);
3914
3915
3916                        const used_data = Object.assign({}, total_data);
3917                        let excluded_app_ids_embed = [18834,18423, 17033, 14853, 15625, 15741, 16644,16279,16782,16783,18414,20463, 1000000441,1000001478, 10003234, 10003307, 1000008001];
3918                        let excluded_org_id_embed = ["78"];
3919                        if(!excluded_app_ids_embed.includes(app_id) && !excluded_org_id_embed.includes(organizationId)){
3920                            $('.packageContainer .aPackage', window.parent.document).each(function () {
3921                                var $package = $(this);
3922                                var package_id = $package.attr("data-package");
3923                                var addonsArray = $package.attr("data-addons");
3924                                // if(package_id == savedPackage){
3925                                addonsArray = addonsArray.split(',');
3926                                // console.log(addonsArray);
3927
3928                                $.each(addonsArray, function (key, value) {
3929                                    value = parseInt(value);
3930                                    used_data[package_id][value] = parseInt(used_data[package_id][value]) - 1;
3931
3932                                });
3933                                // }
3934
3935
3936                            });
3937                        }else{
3938                            $('.packageContainer .aPackage', window.document).each(function () {
3939                                var $package = $(this);
3940                                var package_id = $package.attr("data-package");
3941                                var addonsArray = $package.attr("data-addons");
3942                                // if(package_id == savedPackage){
3943                                addonsArray = addonsArray.split(',');
3944                                // console.log(addonsArray);
3945
3946                                $.each(addonsArray, function (key, value) {
3947                                    value = parseInt(value);
3948                                    used_data[package_id][value] = parseInt(used_data[package_id][value]) - 1;
3949
3950                                });
3951                                // }
3952
3953
3954                            });
3955                        }
3956
3957                        // console.log('used_data addons');
3958                        // console.log(used_data);
3959                        var remaining_addons = "";
3960                        var remaining_ids = "";
3961                        $.each(used_data, function (packageId, package) {
3962                             if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
3963                            // console.log(package);
3964                            $.each(package, function (key, item) {
3965                                for (i = 0; i < parseInt(item); i++) {
3966                                    if (remaining_addons == '') {
3967                                        remaining_addons = TicketPackages[packageId][key]['addons_name'];
3968                                        remaining_ids = TicketPackages[packageId][key]['id'];
3969                                    } else {
3970                                        remaining_ids += ', ' + TicketPackages[packageId][key]['id'];
3971                                    }
3972                                }
3973
3974                            });
3975                            }
3976                        });
3977                        let excluded_app_ids_embeded = [18834,18423, 17033, 14853, 15625,15741,16644,16279,16782,16783,18414,20463, 1000000441,1000001478, 10003234, 10003307, 1000008001];
3978                        let excluded_org_id_embeded = ["78"];
3979                        if(!excluded_app_ids_embeded.includes(app_id) && !excluded_org_id_embeded.includes(organizationId)){
3980                            $('.packageBlock', window.parent.document).attr('data-remaining-addons', remaining_addons);
3981                            $('.packageBlock', window.parent.document).attr('data-remaining-addons-ids', remaining_ids);
3982                        }else{
3983                            $('.packageBlock', window.document).attr('data-remaining-addons', remaining_addons);
3984                            $('.packageBlock', window.document).attr('data-remaining-addons-ids', remaining_ids);
3985                        }
3986
3987                        if ($('input[name=partner_tag]').val() == '1') {
3988                            addons_ids = $('.packageBlock').attr('data-remaining-addons-ids');
3989                            addons_ids = addons_ids.split(",");
3990                            $.each(addons_ids, function (index, value) {
3991                                addons_ids[index] = $.trim(value);
3992                            });
3993                            var value = $('#user' + count).val();
3994                            if (value) {
3995                                // Parse JSON value and update corresponding user input
3996                                var jsonObject = JSON.parse(value);
3997                                // Unset property
3998                                jsonObject.field_addons = addons_ids;
3999
4000                                var clickSource = $(this).attr('data-click-source') || '';
4001
4002                               if(clickSource === 'partner_tag_section') {
4003                                   let addonPaymentValues = [];
4004                                   
4005                                   // Check if TicketPackages has single object and pkg_qty is 1
4006                                   let packageKeys = Object.keys(TicketPackages).filter(key => !isNaN(key));
4007                                   if (packageKeys.length === 1) {
4008                                       let package = TicketPackages[savedPackage];
4009                                       if (package.pkg_qty === 1) {
4010                                           // Get addon IDs from numeric keys
4011                                           for (let key in package) {
4012                                               if (!isNaN(key) && package[key].id) {
4013                                                   addonPaymentValues.push(package[key].id);
4014                                               }
4015                                           }
4016                                       }
4017                                   }
4018
4019                                   if (addonPaymentValues.length > 0) {
4020                                       jsonObject.field_addons = addonPaymentValues;
4021                                   }
4022
4023                                   // Remove the attribute after handling
4024                                   $(this).removeAttr('data-click-source');
4025                               }
4026
4027                                value = JSON.stringify(jsonObject);
4028                                $('#user' + count).val(value);
4029                            }
4030
4031                        }
4032
4033                    /* VFC-19349 */
4034                    
4035                    
4036                    // Ticket group max: update assign UI after each single-ticket assignment
4037                    if (typeof afterTicketAssignmentApplyGroupMaxRules === 'function') {
4038                        afterTicketAssignmentApplyGroupMaxRules(email);
4039                    }
4040
4041                    if (typeof openBuyerTicketDependencyPopup === 'function') {
4042                        // openBuyerTicketDependencyPopup(isBuyerAssign, savedPackage, count);
4043                    }
4044
4045                    refreshSessionLimitedFieldAvailability('user' + count);
4046                    }
4047                });
4048
4049                $(document).on('click', '.remove-block', function () {
4050
4051
4052                    var $packageContainer = $(this).closest('.packageContainer');
4053                    var savedPackage = $packageContainer.data('package');
4054                    var ori_total = $packageContainer.find('.packageContainer__head').data("ori-total");
4055                    var total = $packageContainer.find('.packageContainer__head').data("total");
4056                    var $removingPackage = $(this).closest('.aPackage');
4057                                        var count = parseInt($packageContainer.find('.packageContainer__head').attr("data-count")) - 1;
4058
4059                    $packageContainer.find('.packageContainer__head').attr("data-count", count);
4060                    $packageContainer.find('.packageContainer__head .dropdown').show();
4061                    var $dropdownMenu = $packageContainer.find('.packageContainer__head .dropdown-menu-main');
4062                    var user_id = $(this).closest('.aPackage').attr("data-pack");
4063                    var userBuyer = $(this).closest('.aPackage').attr("data-buyer");
4064                    var Useremail = $(this).closest('.aPackage').find('.aPackage__detail__cell')
4065                        .filter(function() {
4066                            return $(this).find('span').text() === 'Email';
4067                        })
4068                        .find('p')
4069                        .text();
4070
4071                                        var userDetails=null;
4072                    $dropdownMenu.find('.user-info-prev').each(function() {
4073                        var currentEmail = $(this).find('span').text().trim();
4074                        if (currentEmail === Useremail) {
4075                            userDetails = $(this).attr("data-user");
4076                        }
4077                    });
4078
4079                    // simplifiedTicketAssignment=1;
4080                    if(simplifiedTicketAssignment){
4081                        count=user_id;
4082                        var savedPackage = 1;
4083                        var buyer = 0;
4084                        var first_name = 'Not Set';
4085                        var last_name = '';
4086                        var email = 'Not Set';
4087                        var addons = 'Not Set';
4088                        var selector = '.user-num' + count;
4089                        packageHTML='';
4090                        packageHTML += '<div class="fakePackage fakePackage' + count + '" data-pack="' + count + '" data-buyer="' + buyer + '" data-addonsname="" data-addons="" data-package="' + savedPackage + '">' +
4091                            '<div class="aPackage__detail">' +
4092                            '<div class="aPackage__detail__cell aPackage__detail__width" style="width: 80px !important"><span></span><p>Ticket ' + count + '</p></div>' +
4093                            '<div class="aPackage__detail__cell aPackage__detail__width"><span>Name</span><p>' + first_name + ' ' + last_name + '</p></div>' +
4094                            '<div class="aPackage__detail__cell aPackage__detail__width"><span>Email</span><p>' + email + '</p></div>' +
4095                            '<div class="aPackage__detail__cell"><span>Addons</span><div class="addons"><p>' + addons + '</p></div></div>' +
4096                            '</div>' +
4097                            '<div class="aPackage__actions">';
4098                        // '<div class="dropdown"><a href="#" class="btn action-btn" data-toggle="dropdown"><i class="fa fa-pencil"></i> Edit</a>' +
4099                        // '<ul class="dropdown-menu dropdown-menu-edit dropdown-menu-right" role="menu">';
4100
4101                        // packageHTML += '<li><a href="javascript:void(0)" data-selector="' + selector + '" class="btn action-btn update-user-to-package"><i class="fa fa-pencil-alt"></i> Edit</a></li>';
4102                        packageHTML += '<a href="javascript:void(0)"  class="btn action-btn assign-user-to-package" data-row="' + count + '"><i class="fa fa-pencil-alt"></i> Add User Details</a>';
4103
4104                        packageHTML += '' +
4105                            // '<a href="javascript:void(0)" class="btn action-btn remove-block"><i class="fa fa-pencil-alt"></i> Remove</a>' +
4106                            // '</ul>' +
4107                            // '</div>' +
4108                            '</div>' +
4109                            '</div>';
4110
4111                        $(this).closest('.aPackage').after(packageHTML);
4112                        if(userBuyer == 1){
4113                            $('.user-info-prev').show();
4114                        }
4115                    }
4116
4117                    /* JIRA ticket: VFC-19907 */
4118                    
4119                    $(this).closest('.aPackage').remove();
4120
4121                    var size = $packageContainer.find('> .aPackage').length;
4122                    // Update package name
4123                    if(simplifiedTicketAssignment){
4124                        var package_name = $packageContainer.find('> span.assigned-tickets').text().replace(/\d+\/\d+ tickets assigned/, '') + ' ' + size + '/' + ori_total + ' tickets assigned';
4125                        $packageContainer.find('> span.assigned-tickets').text(package_name);
4126                    }else{
4127                        var package_name = $packageContainer.find('.packageContainer__head > h3').text().replace(/\s*\(\d+\/\d+\)/, '') + ' (' + size + '/' + ori_total + ')';
4128                        $packageContainer.find('.packageContainer__head > h3').text(package_name);
4129                    }
4130
4131
4132
4133                    if(simplifiedTicketAssignment){
4134
4135                    }else{
4136                        // Do not reindex remaining data-pack / #userN. The old shift copied JSON
4137                        // down, mutated user_id, then cleared the wrong slot and left orphan values
4138                        // in high #userN (submit filled-count != ticket qty).
4139
4140                        // Update data object
4141                        var data = {};
4142                        $packageContainer.find('> .aPackage').each(function () {
4143                            var $package = $(this);
4144                            var pack_id = $package.attr("data-pack");
4145                            var name = $package.find('.aPackage__detail__cell:nth-of-type(1) p').text();
4146                            var email = $package.find('.aPackage__detail__cell:nth-of-type(2) p').text().replace(/\s/g, "");
4147                            if (!data[email]) {
4148                                data[email] = name + ',' + pack_id;
4149                            }
4150                        });
4151                        // Update dropdown menu
4152                        // if(count != ori_total) {
4153
4154                        // }
4155                        var flag = 0;
4156                        $packageContainer.find('.dropdown-menu > li a').each(function () {
4157                            var buyer = $(this).attr("data-buyer");
4158                            var user = $(this).attr("data-user");
4159                            if (buyer == 1) {
4160                                flag = 1;
4161                            }
4162                        });
4163
4164                        /* JIRA Ticket - VFC-19349 */
4165                                                    Object.entries(data).forEach(function ([key, value]) {
4166                                value = value.split(",");
4167                                buyer = 0;
4168                                if (key == $('input[name="email"]').val().trim()) {
4169                                    buyer = 1;
4170                                    value[0] = value[0] + ' (Buyer)';
4171                                }
4172                                if ((buyer == 1 && flag == 1) || assignDropdownAlreadyHasEmail($dropdownMenu, key)) {
4173                                    return;
4174                                }
4175                                $dropdownMenu.append('<li><a href="javascript:void(0)" class="user-info-prev" data-buyer="' + buyer + '" data-user="user' + value[1] + '"><p>' + value[0] + '</p><span>' + key + '</span></a></li>');
4176                            });
4177                        
4178                        var TicketPackages = localStorage.getItem("TicketPackages");
4179                        var TicketPackages = JSON.parse(TicketPackages);
4180                        var emailArray = [];
4181                        for (var key in TicketPackages) {
4182                            if (TicketPackages.hasOwnProperty(key)) {
4183                                  var  counter = parseInt(user_id);
4184                                    var packageContainer2 = $('#packageContainerBlock'+key);
4185                                    var $dropdownMenu2 = packageContainer2.find('.packageContainer__head .dropdown-menu-main');
4186                                        $('#packageContainerBlock'+key+' span:contains("Email")').each(function() {
4187                                            var email = $(this).next('p').text();
4188                                            if (email.includes('@')) {
4189                                                emailArray.push(email);
4190                                            }
4191                                        });
4192                            }
4193
4194                        }
4195                        // debugger;
4196                        for (var key in TicketPackages) {
4197                            if (TicketPackages.hasOwnProperty(key)) {
4198                                var  counter = parseInt(user_id);
4199                                var packageContainer2 = $('#packageContainerBlock'+key);
4200                                var $dropdownMenu2 = packageContainer2.find('.packageContainer__head .dropdown-menu-main');
4201                                var emailExists = emailArray.map(email => email.trim().toLowerCase()).includes(Useremail.trim().toLowerCase());
4202                                let emailCount = emailArray.filter(email => email.trim().toLowerCase() === Useremail.trim().toLowerCase()).length;
4203
4204                                console.log(emailExists);
4205                                console.log(Useremail);
4206                                console.log(emailCount);
4207                                // if (!emailExists || emailArray.length ==0 || emailCount ==1) {
4208                                if (!emailExists || emailArray.length ==0) {
4209                                    // var Useremail = packageContainer2.find('a[data-user="user'+user_id+'"] span').text();
4210                                    $dropdownMenu2.find('.user-info-prev').each(function() {
4211                                        var currentEmail = $(this).find('span').text().trim();
4212                                        if (currentEmail.trim().toLowerCase() === Useremail.trim().toLowerCase()) {
4213                                            var dataUserValue = $(this).attr('data-user');
4214                                            var userValue = dataUserValue.replace('user', '');
4215                                            if(dataUserValue !='buyer'){
4216                                                $dropdownMenu2.find('li a[data-user="user'+userValue+'"]').closest('li').remove();
4217                                            }
4218                                        }
4219                                    });
4220                                }
4221                            }
4222                        }
4223                        // data-pack is the #userN index. Old code did user_id.replace('user','')
4224                        // then fell through to userDetails.replace when the slot was already empty
4225                        // (userDetails can be null after the removed reindex).
4226                        $('#user' + user_id).val('');
4227
4228                    }
4229
4230                    refreshSessionLimitedFieldAvailability(null);
4231
4232                    // Ticket group max: re-enable Add New User when under the limit again
4233                    if (typeof updateTicketGroupMaxAssignUi === 'function') {
4234                        clearTicketGroupMaxError();
4235                        updateTicketGroupMaxAssignUi();
4236                    }
4237
4238
4239
4240
4241                });
4242                isEventBound = true;
4243            }
4244        }
4245        if(parseInt(isTicket) && (parseInt(isStripeElement) || parseInt(isStripeConnectElement)) && parseInt(isTicketTop)) {
4246
4247           
4248             appId= "20550";
4249            //  if(appId == 14853){
4250            var price = sessionStorage.getItem('total_price');
4251            if(price == null || price == undefined || price == ''){
4252                price = $('.order__summary .price__item > div.total__price > span').text();
4253            }
4254            //  }else{
4255            //     price = $('.order__summary .price__item > div.total__price > span').text();
4256            //  }
4257            jQuery.ajax({
4258                url: "https://www.codeseccon.com/en/form/createPaymentIntent",
4259                data: {
4260                    price: price,
4261                    appID: appId,
4262                    ticketPackages: JSON.stringify(TicketPackages),
4263                },
4264                type: "POST",
4265                success: function (response) {
4266                    if (response) {
4267                        var response = eval('(' + response + ')');
4268                        if (response.status) {
4269                            client_secret = response.client_secret;
4270                            intent_id = response.intent_id;
4271                            customer_id = response.customer_id;
4272                            $('#customer_id').val(customer_id)
4273                            if ($(".refund_amount_multiple_edit").length === 1) {
4274                                $('#payment-element').css('display', 'none');
4275                            }
4276                            stripe = '';
4277                            if (parseInt(isStripeConnectElement)) {
4278                                stripe = Stripe('', {stripeAccount: isStripeConnectAccountId});
4279                            } else {
4280                                stripe = Stripe('');
4281                            }
4282
4283                            elements = stripe.elements({
4284                                clientSecret: client_secret
4285                            });
4286                            // Create and mount the Payment Element
4287                            const paymentElement = elements.create('payment');
4288                            paymentElement.mount('#payment-element');
4289                            var id = $('.reg-form-data').attr('id');
4290                          
4291                            const formSubmit = document.getElementById(id);
4292                            
4293                            
4294                            console.log("form=1");
4295                            console.log(formSubmit);
4296                            flag_lis = 0;
4297                     
4298                            // $(document).off('submit', '#' + id).on('submit', '#' + id, async function (event) {
4299                            formSubmit.addEventListener('submit', async (event) => {
4300                                console.log("form=3");
4301                                console.log("flag_lis: " + flag_lis);
4302                                if (flag_lis == 0) {
4303                                    console.log("flag_lis == 0 =1");
4304                                    event.preventDefault();
4305
4306                                    let mainEmail = $('input[name="email"]').val().trim();
4307                                    if (typeof shouldRunStripeSubmit !== 'undefined' && !shouldRunStripeSubmit) {
4308                                    return; // Do nothing if flag is false
4309                                    }
4310                                    const {error} = await stripe.confirmPayment({
4311                                        //`Elements` instance that was used to create the Payment Element
4312                                        elements,
4313                                        confirmParams: {
4314                                            return_url: 'https://vfairs.com',
4315                                            receipt_email: ('' != mainEmail)? mainEmail : ''
4316                                        },
4317                                        redirect: 'if_required'
4318                                    }).then((result) => {
4319                                        console.log("result: " + result);
4320                                        const messageContainer = document.querySelector('#error-message');
4321                                        if ((result.error && $('input[name="optionsRadios"]').closest('.order__payment').css('display') === 'none') || (result.error && $('input[name="optionsRadios"]:checked').data('name') === 'Stripe')) {
4322                                        // if (result.error && $('input[name="optionsRadios"]:checked').data('name') === 'Stripe') {
4323                                            if ($(".refund_amount_multiple_edit").length === 1) {
4324                                                console.log("refund_amount_multiple_edit");
4325                                                isStripeValidation = true;
4326                                                flag_lis = 1;
4327                                                $('#' + id).submit();
4328                                            }else{
4329                                            //   console.log("result.error =1: " + result.error);
4330                                              messageContainer.textContent = result.error.message;  
4331                                            }
4332                                            // messageContainer.textContent = result.error.message;
4333                                        } else {
4334                                            console.log("isStripeValidation =1" );
4335                                            messageContainer.textContent = '';
4336                                            isStripeValidation = true;
4337                                            flag_lis = 1;
4338                                            if ($('input[name="optionsRadios"]:checked').data('name') != 'Check') {
4339                                                console.log("submit");
4340                                                console.log(id, $('#' + id));
4341                                                console.log($('#' + id).length); // Should be 1 if the form exists
4342                                                $('#' + id).submit();
4343                                            }
4344                                        }
4345                                    }).catch((err) => {
4346                                    });
4347
4348                                    if (error) {
4349                                        // This point will only be reached if there is an immediate error when
4350                                        // confirming the payment. Show error to your customer (for example, payment
4351                                        // details incomplete)
4352                                        const messageContainer = document.querySelector('#error-message');
4353                                        messageContainer.textContent = error.message;
4354                                        console.log("error: " + error);
4355                                    } else {
4356                                    }
4357                                }
4358
4359                            });
4360                            if((isUpgradeDowngradeProfile !== null && isUpgradeDowngradeProfile !== '' && (isUpgradeDowngradeProfile == 1 || isUpgradeDowngradeProfile == "1"))){
4361                   
4362                                paymentName=$('input[name="optionsRadios"]:checked').data('name');
4363                                
4364                                if(paymentName =='Stripe'){
4365                                    $('#payment-element').show();
4366                                }else{
4367                                    setTimeout(function() {
4368                                        $('#payment-element').hide();
4369                                    }, 3000);
4370                                }
4371                            }
4372                        }else{
4373                            console.log("false status");
4374                            var id = $('.reg-form-data').attr('id');
4375                          
4376                            const formSubmit = document.getElementById(id);
4377                            formSubmit.addEventListener('submit', async (event) => {
4378                            if ($(".refund_amount_multiple_edit").length === 1 && price == 0) {
4379                                    isStripeValidation = true;
4380                                    flag_lis = 1;
4381                                    $('#' + id).submit();
4382                                }
4383
4384                            });
4385                        }
4386
4387                        // VFC-17411 - add receiptEmail in payment intent for stripe Element
4388                        let stripeElementContainer = $('body').find('.StripeElement');
4389                        if($(stripeElementContainer).length > 0){
4390                            $('body').find('.StripeElement').attr('data-stripe_payment_intent_id', intent_id);
4391                        }
4392
4393
4394                        $('.ev__ticket__wrapper').hide();
4395                        if(seatPlanUrl !== '' && seatPlanPackageIds.includes($('.package_list').val())) {
4396                            $('.seat-plan-iframe-div').show();
4397                            $('#floorPlanIframe').attr('src', seatPlanUrl + $('.package_list').val());
4398                        } else {
4399                            $('.seat-plan-iframe-div').hide();
4400                        }
4401                        console.log("gStepNumber: " + gStepNumber);
4402                        if(gStepNumber >= 1){
4403                            $('.both-block').show();
4404                        }
4405                        numItems = $('.payment__method > .radio').length;
4406                        if (numItems == 1 && !hasVfairsOfflinePayments) {
4407                            $('.order__payment').hide();
4408                        }
4409                        if (![1000002477, 1000004898, 1000004216, 1000003850, 1000004592, 1000003851, 1000003095, 1000004011, 1000003096, 1000003852, 1000003094].includes(Number(appId))) {
4410                            $("html, body").animate({ scrollTop: 0 }, "slow");
4411                        }
4412                        // return false;
4413                    }
4414
4415                }
4416            });
4417        }else{
4418            if(!parseInt(isTicketTop)){
4419
4420            }else{
4421                $('.ev__ticket__wrapper').hide();
4422                if(seatPlanUrl !== '' && seatPlanPackageIds.includes($('.package_list').val())) {
4423                    $('.seat-plan-iframe-div').show();
4424                    $('#floorPlanIframe').attr('src', seatPlanUrl + $('.package_list').val());
4425                } else {
4426                    $('.seat-plan-iframe-div').hide();
4427                }
4428                console.log("gStepNumber: " + gStepNumber);
4429                if(gStepNumber >= 1){
4430                    $('.both-block').show();
4431                }
4432                numItems = $('.payment__method > .radio').length;
4433                if(numItems == 1 && !hasVfairsOfflinePayments){
4434                    $('.order__payment').hide();
4435                    if (appId == '1000001259') {
4436                        var price = sessionStorage.getItem('total_price');
4437                        if (price == null || price == undefined || price === '') {
4438                            price = $('.order__summary .price__item > div.total__price > span').text();
4439                        }
4440                        price = parseFloat(String(price).replace(/[^0-9.-]/g, '')) || 0;
4441                        if (price > 0) {
4442                            $('.single-pay').show();
4443                        }
4444                    }
4445                }
4446                if (![1000002477, 1000004898, 1000004216, 1000003850, 1000004592, 1000003851, 1000003095, 1000004011, 1000003096, 1000003852, 1000003094].includes(Number(appId))) {
4447                    $("html, body").animate({ scrollTop: 0 }, "slow");
4448                }
4449                return false;
4450            }
4451
4452        }
4453    }
4454    });
4455</script>
4455
4456    
4456<script>
4457
4458    var stripe='';
4459    var elements;
4460        if(isTicket && isStripeElement && !isTicketTop) {
4461          console.log('ELEMENTS INSIDE FIRST');
4462             
4463        if(parseInt(isStripeConnectElement)){
4464             stripe = Stripe('',{stripeAccount: isStripeConnectAccountId});
4465        }  else{
4466             stripe = Stripe('');
4467        }
4468
4469
4470        elements = stripe.elements({
4471            clientSecret: '',
4472        });
4473
4474        // Create and mount the Payment Element
4475        const paymentElement = elements.create('payment');
4476        paymentElement.mount('#payment-element');
4477
4478        var id = $('.reg-form-data').attr('id');
4479        const form = document.getElementById(id);
4480        flag_lis=0;
4481
4482        
4483
4484        let appId = 20550;
4485        let excluded_app_ids = [18414];
4486        if(excluded_app_ids.includes(appId)){
4487            // console.log("paid submit button");
4488            $(document).on("click", "#paid-submit-button", function(){
4489                console.log("before stripe call",stripe);
4490                stripeElementCall(elements,stripe);
4491            });
4492        }else{
4493            // console.log("paid submit button else");
4494            form.addEventListener('submit', async (event) => {
4495                if (flag_lis == 0) {
4496                    console.log("flag_lis == 0");
4497                    var payment_gateway_name=$('input[name="optionsRadios"]:checked').data('name');
4498                    // event.preventDefault();
4499
4500                    let mainEmail = $('input[name="email"]').val().trim();
4501                    const {error} = await stripe.confirmPayment({
4502                        //`Elements` instance that was used to create the Payment Element
4503                        elements,
4504                        confirmParams: {
4505                            return_url: 'https://vfairs.com',
4506                            receipt_email: ('' != mainEmail)? mainEmail : ''
4507                        },
4508                        redirect: 'if_required'
4509                    }).then((result) => {
4510                        const messageContainer = document.querySelector('#error-message');
4511                        if (result.error) {
4512                            if ($(".refund_amount_multiple_edit").length === 1) {
4513                                isStripeValidation = true;
4514                                flag_lis = 1;
4515                                $('#' + id).submit();
4516                            }else{
4517                                console.log("result.error: " + result.error);
4518                                if(payment_gateway_name == 'Stripe'){
4519                                    messageContainer.textContent = result.error.message;
4520                                }
4521                            }
4522                            // if(payment_gateway_name == 'Stripe'){
4523                            //     messageContainer.textContent = result.error.message;
4524                            // }
4525                        } else {
4526                            // console.log("isStripeValidation ");
4527                            messageContainer.textContent = '';
4528                            isStripeValidation = true;
4529                            flag_lis = 1;
4530                            $('#' + id).submit();
4531                        }
4532                    }).catch((err) => {
4533                    });
4534
4535                    if (error) {
4536                        // This point will only be reached if there is an immediate error when
4537                        // confirming the payment. Show error to your customer (for example, payment
4538                        // details incomplete)
4539                        if(payment_gateway_name == 'Stripe'){
4540                        const messageContainer = document.querySelector('#error-message');
4541                        messageContainer.textContent = error.message;
4542                        }
4543                    } else {
4544
4545                    }
4546                }
4547            });
4548        }
4549       
4550
4551
4552
4553        }
4554        if (!isTicket && isCardOnHold) {
4555        //   console.log('ELEMENTS INSIDE SECOND');
4556            // Set your publishable key: remember to change this to your live publishable key in production
4557            // See your keys here: https://dashboard.stripe.com/apikeys
4558            const stripe = Stripe('');
4559            elements = stripe.elements();
4560            // Custom styling can be passed to options when creating an Element.
4561            const style = {
4562                base: {
4563                    // Add your base input styles here. For example:
4564                    fontSize: '16px',
4565                    color: '#32325d',
4566                },
4567            };
4568
4569            // Create an instance of the card Element.
4570            const card = elements.create('card', {style});
4571
4572            // Add an instance of the card Element into the `card-element` <div>.
4573            card.mount('#card-element');
4574
4575            // Create a token or display an error when the form is submitted.
4576            const form = document.getElementById('payment-form');
4577            form.addEventListener('submit', async (event) => {
4578                event.preventDefault();
4579
4580                const {token, error}
4580 = await stripe.createToken(card);
4581
4582                if (error) {
4583                    const errorElement = document.getElementById('card-errors');
4584                    errorElement.textContent = error.message;
4585                } else {
4586                    // Send the token to your server.
4587                    stripeTokenHandler(token);
4588                }
4589            });
4590            const stripeTokenHandler = (token) => {
4591                // Insert the token ID into the form so it gets submitted to the server
4592                const form = document.getElementById('payment-form');
4593                const hiddenInput = document.createElement('input');
4594                hiddenInput.setAttribute('type', 'hidden');
4595                hiddenInput.setAttribute('name', 'stripeToken');
4596                hiddenInput.setAttribute('value', token.id);
4597                form.appendChild(hiddenInput);
4598
4599                // Submit the form
4600                form.submit();
4601            }
4602        }
4603
4604
4605</script>
4605
4606
4607<script>
4608    function buildGroupRegistrationEmailsList() {
4609        var emails = [];
4610        var seen = {};
4611        $("input[name='user_list[]']").each(function () {
4612            if (!$(this).val()) {
4613                return;
4614            }
4615            try {
4616                var obj = jQuery.parseJSON($(this).val());
4617                if (obj && obj.email) {
4618                    var normalized = String(obj.email).trim().toLowerCase();
4619                    if (normalized && !seen[normalized]) {
4620                        seen[normalized] = true;
4621                        emails.push(obj.email);
4622                    }
4623                }
4624            } catch (e) {}
4625        });
4626        var mainEmail = ($("input[type='email']").val() || '').trim();
4627        if (mainEmail) {
4628            var mainNormalized = mainEmail.toLowerCase();
4629            if (!seen[mainNormalized]) {
4630                emails.unshift(mainEmail);
4631            }
4632        }
4633        return emails.join(',');
4634    }
4635
4636    function resolveEditProfileRegistrationFormUrl() {
4637        var currentURL = window.location.href.split('#')[0];
4638        if (/editprofile/i.test(currentURL)) {
4639            if (currentURL.indexOf('/form/') !== -1) {
4640                return currentURL.split('/form/')[0] + '/registration-form';
4641            }
4642            return currentURL.replace(/\/editprofile.*/i, '/registration-form');
4643        }
4644        return currentURL;
4645    }
4646
4647    function hideGroupRegistrationLoadingIndicators() {
4648        $('#loadingMessage1').css('display', 'none');
4649        $('#loadingMessage').css('display', 'none');
4650    }
4651
4652    function resolveGroupUserHiddenValue(userFieldId) {
4653        if (!userFieldId) {
4654            return '';
4655        }
4656        var $field = $('#' + userFieldId);
4657        if ($field.length && $field.val()) {
4658            return $field.val();
4659        }
4660        if (enableExpiredOwnedEditProfile10003110 && window.parent && window.parent !== window) {
4661            try {
4662                $field = $(window.parent.document).find('#' + userFieldId);
4663                if ($field.length && $field.val()) {
4664                    return $field.val();
4665                }
4666            } catch (e) {}
4667        }
4668        return '';
4669    }
4670
4671    function syncGroupUserHiddenFieldFromDisplay(userFieldId) {
4672        if (!enableExpiredOwnedEditProfile10003110 || !userFieldId) {
4673            return false;
4674        }
4675        var packNum = String(userFieldId).replace(/^user/, '');
4676        if (!packNum) {
4677            return false;
4678        }
4679        var $package = $('.aPackage[data-pack="' + packNum + '"]');
4680        if (!$package.length && window.parent && window.parent !== window) {
4681            try {
4682                $package = $(window.parent.document).find('.aPackage[data-pack="' + packNum + '"]');
4683            } catch (e) {}
4684        }
4685        if (!$package.length) {
4686            return false;
4687        }
4688        var displayName = '';
4689        var displayEmail = '';
4690        $package.find('.aPackage__detail__cell').each(function () {
4691            var label = $(this).find('span').first().text().trim().toLowerCase();
4692            var value = $(this).find('p').first().text().trim();
4693            if (label === 'name' && value) {
4694                displayName = value.replace(/\s*\(Buyer\)\s*$/, '').trim();
4695            } else if (label === 'email' && value) {
4696                displayEmail = value.trim();
4697            }
4698        });
4699        if (!displayName && !displayEmail) {
4700            return false;
4701        }
4702        var rawValue = resolveGroupUserHiddenValue(userFieldId);
4703        var userData;
4704        if (rawValue) {
4705            try {
4706                userData = jQuery.parseJSON(rawValue);
4707            } catch (e) {
4708                userData = null;
4709            }
4710        }
4711        if (!userData || typeof userData !== 'object') {
4712            userData = {
4713                package: $package.attr('data-package') || localStorage.getItem('savedPackage') || ''
4714            };
4715        }
4716        if (displayName) {
4717            var nameParts = displayName.split(/\s+/);
4718            userData.first_name = nameParts.shift() || '';
4719            userData.last_name = nameParts.join(' ');
4720        }
4721        if (displayEmail) {
4722            userData.email = displayEmail;
4723        }
4724        var syncedValue = JSON.stringify(userData);
4725        var $field = $('#' + userFieldId);
4726        if (!$field.length && window.parent && window.parent !== window) {
4727            try {
4728                $field = $(window.parent.document).find('#' + userFieldId);
4729            } catch (e) {}
4730        }
4731        if ($field.length) {
4732            $field.val(syncedValue);
4733        }
4734        return true;
4735    }
4736
4737    function getCountryStateLinkKey($select) {
4738        var classes = ($select.attr('class') || '').split(/\s+/);
4739        for (var i = 0; i < classes.length; i++) {
4740            var match = classes[i].match(/^(\d+)_(.+)$/);
4741            if (match) {
4742                return match[2];
4743            }
4744        }
4745        return null;
4746    }
4747
4748    function buildCountryStatePairs($container, userData) {
4749        var pairs = [];
4750        var $countries = $container.find('select.country_list');
4751        var $states = $container.find('select.state_list');
4752
4753        $countries.each(function () {
4754            var $country = $(this);
4755            var linkKey = getCountryStateLinkKey($country);
4756            var countryName = $country.attr('name');
4757            var countryVal = userData[countryName];
4758            if (!countryVal) {
4759                return;
4760            }
4761
4762            $states.each(function () {
4763                var $state = $(this);
4764                var stateName = $state.attr('name');
4765                var stateVal = userData[stateName];
4766                if (!stateVal) {
4767                    return;
4768                }
4769                var stateLinkKey = getCountryStateLinkKey($state);
4770                if (linkKey) {
4771                    if (stateLinkKey !== linkKey) {
4772                        return;
4773                    }
4774                } else if (stateLinkKey) {
4775                    return;
4776                }
4777                pairs.push({
4778                    $country: $country,
4779                    $state: $state,
4780                    countryVal: countryVal,
4781                    stateVal: stateVal
4782                });
4783            });
4784        });
4785
4786        if (!pairs.length && $countries.length === 1 && $states.length === 1) {
4787            var loneCountryName = $countries.attr('name');
4788            var loneStateName = $states.attr('name');
4789            if (userData[loneCountryName] && userData[loneStateName]) {
4790                pairs.push({
4791                    $country: $countries,
4792                    $state: $states,
4793                    countryVal: userData[loneCountryName],
4794                    stateVal: userData[loneStateName]
4795                });
4796            }
4797        }
4798
4799        return pairs;
4800    }
4801
4802    function showSavedStateImmediately($state, stateVal) {
4803        if (!$state || !$state.length || !stateVal) {
4804            return;
4805        }
4806        if ($state.val() === stateVal) {
4807            return;
4808        }
4809
4810        var placeholderText = $state.find('option[value=""]').first().text() || 'Select';
4811        if (!$state.find('option').filter(function () { return $(this).val() === stateVal; }).length) {
4812            $state.html("<option value=''>" + placeholderText + "</option>");
4813            $state.append($('<option>', { value: stateVal, text: stateVal, selected: true }));
4814        } else {
4815            $state.val(stateVal);
4816        }
4817    }
4818
4819    function resolveGroupUserDataForRestore(userFieldId) {
4820        if (enableExpiredOwnedEditProfile10003110) {
4821            syncGroupUserHiddenFieldFromDisplay(userFieldId);
4822        }
4823        var user_value = enableExpiredOwnedEditProfile10003110
4824            ? resolveGroupUserHiddenValue(userFieldId)
4825            : $('#' + userFieldId).val();
4826        if (!user_value) {
4827            return null;
4828        }
4829        try {
4830            return jQuery.parseJSON(user_value);
4831        } catch (e) {
4832            return null;
4833        }
4834    }
4835
4836    function restoreCountryDependentStates($container, userData) {
4837        if (!$container || !userData || !$container.length) {
4838            return;
4839        }
4840
4841        buildCountryStatePairs($container, userData).forEach(function (pair) {
4842            pair.$country.val(pair.countryVal);
4843            showSavedStateImmediately(pair.$state, pair.stateVal);
4844
4845            var countryId = pair.$country.find(':selected').data('id');
4846            if (!countryId) {
4847                return;
4848            }
4849
4850            var placeholder = pair.$state.find('option:first').text() || 'Select';
4851            jQuery.ajax({
4852                url: '/form/getStatesByCountryId/' + countryId,
4853                type: 'GET',
4854                success: function (response) {
4855                    var states;
4856                    try {
4857                        states = typeof response === 'string' ? JSON.parse(response) : response;
4858                    } catch (e) {
4859                        states = eval('(' + response + ')');
4860                    }
4861
4862                    pair.$state.html("<option value=''>" + placeholder + "</option>");
4863                    jQuery.each(states, function (key, item) {
4864                        var selected = item.name === pair.stateVal ? ' selected' : '';
4865                        pair.$state.append("<option value='" + item.name + "' data-id='" + item.id + "'" + selected + ">" + item.name + "</option>");
4866                    });
4867                    pair.$state.val(pair.stateVal).trigger('change');
4868                }
4869            });
4870        });
4871    }
4872
4873    function attemptEarlyGroupUserStateRestore(userFieldId, attempt) {
4874        attempt = attempt || 0;
4875        var userData = resolveGroupUserDataForRestore(userFieldId);
4876        if (!userData) {
4877            return;
4878        }
4879
4880        var $iframeContents = $('#iframe-id-new').contents();
4881        if (!$iframeContents.length) {
4882            if (attempt < 50) {
4883                setTimeout(function () {
4884                    attemptEarlyGroupUserStateRestore(userFieldId, attempt + 1);
4885                }, 100);
4886            }
4887            return;
4888        }
4889
4890        var $states = $iframeContents.find('select.state_list');
4891        if ($states.length) {
4892            buildCountryStatePairs($iframeContents, userData).forEach(function (pair) {
4893                if (pair.countryVal) {
4894                    pair.$country.val(pair.countryVal);
4895                }
4896                showSavedStateImmediately(pair.$state, pair.stateVal);
4897            });
4898            $states.each(function () {
4899                var stateName = $(this).attr('name');
4900                if (userData[stateName]) {
4901                    showSavedStateImmediately($(this), userData[stateName]);
4902                }
4903            });
4904        }
4905
4906        if (
4907            !$iframeContents.find('select.country_list option[value!=""]').length
4908            || !$states.length
4909        ) {
4910            if (attempt < 50) {
4911                setTimeout(function () {
4912                    attemptEarlyGroupUserStateRestore(userFieldId, attempt + 1);
4913                }, 100);
4914            }
4915            return;
4916        }
4917
4918        restoreCountryDependentStates($iframeContents, userData);
4919    }
4920
4921    function bindGroupUserStateRestoreOnIframeLoad(userFieldId) {
4922        jQuery('#iframe-id-new').off('load.groupUserStateRestore').on('load.groupUserStateRestore', function () {
4923            attemptEarlyGroupUserStateRestore(userFieldId, 0);
4924        });
4925        if (resolveGroupUserDataForRestore(userFieldId)) {
4926            attemptEarlyGroupUserStateRestore(userFieldId, 0);
4927        }
4928    }
4929
4930    function collectGroupUserFieldNames($container, inputType) {
4931        var names = [];
4932        $container.find('input[type=' + inputType + ']').each(function () {
4933            var name = $(this).attr('name');
4934            if (name && names.indexOf(name) === -1) {
4935                names.push(name);
4936            }
4937        });
4938        return names;
4939    }
4940
4941    function checkGroupUserInputsByValue($inputs, targetValue) {
4942        $inputs.filter(function () {
4943            return String($(this).val()) === String(targetValue);
4944        }).each(function () {
4945            var $input = $(this);
4946            $input.prop('checked', true);
4947            if ($input.is(':checkbox')) {
4948                $input.prop('disabled', false);
4949                $input.closest('.radio-block-all').show();
4950                $input.closest('.form_field_grp').show();
4951            }
4952        });
4953    }
4954
4955    function getIntlTelInputInstance(input) {
4956        if (!input) {
4957            return null;
4958        }
4959        var $input = $(input);
4960        if ($input.data('intlTelInput')) {
4961            return $input.data('intlTelInput');
4962        }
4963
4964        var inputWindow = input.ownerDocument ? input.ownerDocument.defaultView : null;
4965        try {
4966            if (inputWindow && inputWindow.intlTelInput && typeof inputWindow.intlTelInput.getInstance === 'function') {
4967                return inputWindow.intlTelInput.getInstance(input);
4968            }
4969            if (inputWindow && inputWindow.intlTelInputGlobals && typeof inputWindow.intlTelInputGlobals.getInstance === 'function') {
4970                return inputWindow.intlTelInputGlobals.getInstance(input);
4971            }
4972        } catch (intlErr) {}
4973        return null;
4974    }
4975
4976    function syncPhoneNumberForSubmit() {
4977        var telInput = document.querySelector('.tel-number, input[name="phone_number"]');
4978        if (!telInput) {
4979            return '';
4980        }
4981
4982        var iti = getIntlTelInputInstance(telInput);
4983        var phoneValue = '';
4984        if (iti && typeof iti.getNumber === 'function') {
4985            phoneValue = (iti.getNumber() || '').trim();
4986        }
4987
4988        if (!phoneValue) {
4989            phoneValue = (telInput.value || '').trim();
4990        }
4991
4992        if (!phoneValue) {
4993            return '';
4994        }
4995
4996        if (phoneValue.indexOf('+') !== 0 && iti && typeof iti.getSelectedCountryData === 'function') {
4997            var dialCode = iti.getSelectedCountryData().dialCode;
4998            var digitsOnly = phoneValue.replace(/\D/g, '');
4999            if (dialCode && digitsOnly) {
5000                phoneValue = '+' + dialCode + digitsOnly;
5001            }
5002        }
5003
5004        $('.tel-number, input[name="phone_number"]').val(phoneValue);
5005        return phoneValue;
5006    }
5007
5008    function getGroupUserDataFromParent(groupId) {
5009        try {
5010            var raw = null;
5011            if (window.parent && window.parent !== window) {
5012                if (window.parent.$ && window.parent.$('#' + groupId).length) {
5013                    raw = window.parent.$('#' + groupId).val();
5014                }
5015                if (!raw && window.parent.document.getElementById(groupId)) {
5016                    raw = window.parent.document.getElementById(groupId).value;
5017                }
5018            }
5019            if (!raw) {
5020                return null;
5021            }
5022            return JSON.parse(raw);
5023        } catch (e) {
5024            return null;
5025        }
5026    }
5027
5028    function restoreGroupUserPhoneFromParentOnIframeLoad() {
5029                return;
5030            }
5031
5032    function whenIntlTelInputReady(input, callback, attempt, allowWithoutUtils) {
5033        attempt = attempt || 0;
5034        var inputWindow = input.ownerDocument ? input.ownerDocument.defaultView : null;
5035        var iti = getIntlTelInputInstance(input);
5036        var utilsReady = inputWindow && inputWindow.intlTelInputUtils;
5037
5038        if (iti && typeof iti.setNumber === 'function' && (utilsReady || allowWithoutUtils)) {
5039            callback(iti, inputWindow);
5040            return;
5041        }
5042
5043        if (attempt < 40) {
5044            setTimeout(function () {
5045                whenIntlTelInputReady(input, callback, attempt + 1, allowWithoutUtils);
5046            }, attempt < 12 ? 40 : 100);
5047            return;
5048        }
5049
5050        if (iti && typeof iti.setNumber === 'function') {
5051            callback(iti, inputWindow);
5052        }
5053    }
5054
5055    function resolveGroupUserPhoneCountryIso($iframeContents, userData) {
5056        if (userData && userData.phone_country_iso) {
5057            return String(userData.phone_country_iso).toLowerCase();
5058        }
5059
5060        var inputWindow = $iframeContents[0] && $iframeContents[0].defaultView ? $iframeContents[0].defaultView : null;
5061        var countryName = null;
5062
5063        $iframeContents.find('select.country_list').each(function () {
5064            var fieldName = $(this).attr('name');
5065            if (userData && userData[fieldName]) {
5066                countryName = userData[fieldName];
5067                return false;
5068            }
5069            if ($(this).val()) {
5070                countryName = $(this).val();
5071                return false;
5072            }
5073        });
5074
5075        if (!countryName && userData && userData.country) {
5076            countryName = userData.country;
5077        }
5078
5079        if (!countryName || !inputWindow || !inputWindow.intlTelInputGlobals) {
5080            return null;
5081        }
5082
5083        var normalizedTarget = String(countryName).trim().toLowerCase();
5084        var countries = inputWindow.intlTelInputGlobals.getCountryData() || [];
5085        for (var i = 0; i < countries.length; i++) {
5086            if (String(countries[i].name).toLowerCase() === normalizedTarget) {
5087                return countries[i].iso2;
5088            }
5089        }
5090        for (var j = 0; j < countries.length; j++) {
5091            var countryLabel = String(countries[j].name).toLowerCase();
5092            if (countryLabel.indexOf(normalizedTarget) !== -1 || normalizedTarget.indexOf(countryLabel) !== -1) {
5093                return countries[j].iso2;
5094            }
5095        }
5096
5097        return null;
5098    }
5099
5100    function setGroupUserPhoneField($iframeContents, phoneValue, userData) {
5101        if (phoneValue == null || phoneValue === '') {
5102            return;
5103        }
5104
5105        var formattedPhone = String(phoneValue).trim();
5106        if (!formattedPhone) {
5107            return;
5108        }
5109
5110        var $phoneInput = $iframeContents.find('input.tel-number, input[name="phone_number"]').first();
5111        if (!$phoneInput.length) {
5112            return;
5113        }
5114
5115        var input = $phoneInput[0];
5116        userData = userData || {};
5117        var countryIso = resolveGroupUserPhoneCountryIso($iframeContents, userData);
5118        var hasE164 = formattedPhone.indexOf('+') === 0;
5119        var canApplyEarly = !!(countryIso || hasE164);
5120
5121        // Show the saved digits immediately while intl-tel-input initializes.
5122        $phoneInput.val(formattedPhone);
5123
5124        function applyPhoneWithIti(iti) {
5125            if (countryIso && typeof iti.setCountry === 'function' && !hasE164) {
5126                iti.setCountry(countryIso);
5127            }
5128            iti.setNumber(formattedPhone);
5129        }
5130
5131        function pollIti(attempt) {
5132            attempt = attempt || 0;
5133            var iti = getIntlTelInputInstance(input);
5134            var inputWindow = input.ownerDocument ? input.ownerDocument.defaultView : null;
5135            var utilsReady = !!(inputWindow && inputWindow.intlTelInputUtils);
5136
5137            if (iti && typeof iti.setNumber === 'function') {
5138                if (canApplyEarly || utilsReady) {
5139                    applyPhoneWithIti(iti);
5140                    if (utilsReady) {
5141                        return;
5142                    }
5143                }
5144            }
5145
5146            if (attempt < 30) {
5147                setTimeout(function () {
5148                    pollIti(attempt + 1);
5149                }, attempt < 12 ? 40 : 100);
5150            }
5151        }
5152
5153        pollIti(0);
5154
5155        if (canApplyEarly) {
5156            whenIntlTelInputReady(input, function (iti) {
5157                applyPhoneWithIti(iti);
5158            }, 0, false);
5159        }
5160    }
5161
5162    function setGroupUserSelectValue($select, value) {
5163        if (!$select.length) {
5164            return;
5165        }
5166        if (!$select.prop('multiple')) {
5167            var values = Array.isArray(value) ? value : [value];
5168            values.forEach(function (optionValue) {
5169                if (optionValue == null || optionValue === '') {
5170                    return;
5171                }
5172                if (!$select.find('option').filter(function () { return $(this).val() === optionValue; }).length) {
5173                    $select.append($('<option></option>').attr('value', optionValue).text(optionValue));
5174                }
5175            });
5176        }
5177        $select.val(value).trigger('change');
5178        if ($select.hasClass('select2-hidden-accessible') || $select.hasClass('searchable-select') || $select.hasClass('cstm-select')) {
5179            try {
5180                $select.trigger('change.select2');
5181            } catch (select2Err) {}
5182        }
5183    }
5184
5185    function applyGroupUserDataToIframe($iframeContents, userData) {
5186        if (!$iframeContents || !$iframeContents.length || !userData) {
5187            return;
5188        }
5189
5190        var uniqueRadios = collectGroupUserFieldNames($iframeContents, 'radio');
5191        var uniqueCheckbox = collectGroupUserFieldNames($iframeContents, 'checkbox');
5192
5193        $.each(userData, function (index, value) {
5194            if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
5195                return;
5196            }
5197
5198            
5199            if (Array.isArray(value)) {
5200                var fieldNameWithBrackets = index + '[]';
5201                var cleanedValues = value.filter(function (item) {
5202                    return item != null && item !== '';
5203                });
5204
5205                if ($.inArray(fieldNameWithBrackets, uniqueRadios) !== -1) {
5206                    $.each(cleanedValues, function (_, new_value) {
5207                        checkGroupUserInputsByValue(
5208                            $iframeContents.find('input[type="radio"][name="' + fieldNameWithBrackets + '"]'),
5209                            new_value
5210                        );
5211                    });
5212                } else if ($.inArray(fieldNameWithBrackets, uniqueCheckbox) !== -1) {
5213                    $.each(cleanedValues, function (_, new_value) {
5214                        checkGroupUserInputsByValue(
5215                            $iframeContents.find('input[type="checkbox"][name="' + fieldNameWithBrackets + '"]'),
5216                            new_value
5217                        );
5218                    });
5219                } else {
5220                    var $select = $iframeContents.find('#' + index);
5221                    if (!$select.length) {
5222                        $select = $iframeContents.find("[name='" + index + "']");
5223                    }
5224                    if (!$select.length) {
5225                        $select = $iframeContents.find("[name='" + fieldNameWithBrackets + "']");
5226                    }
5227                    if ($select.length && $select.is('select')) {
5228                        if ($select.prop('multiple')) {
5229                            setGroupUserSelectValue($select, cleanedValues.length ? cleanedValues : value);
5230                        } else if (cleanedValues.length) {
5231                            setGroupUserSelectValue($select, cleanedValues[0]);
5232                        }
5233                    } else if (cleanedValues.length) {
5234                        setGroupUserSelectValue($iframeContents.find('#' + index), cleanedValues.length === 1 ? cleanedValues[0] : cleanedValues);
5235                    }
5236                }
5237            } else {
5238                var $fields = $iframeContents.find("[name='" + index + "']");
5239                if (!$fields.length) {
5240                    $fields = $iframeContents.find("[name='" + index + "[]']");
5241                }
5242
5243                if ($fields.is(':checkbox')) {
5244                    if (value == 1 || value === '1' || value === true) {
5245                        $fields.prop('checked', true);
5246                    } else if (value != null && value !== '' && value !== 0 && value !== '0') {
5247                        checkGroupUserInputsByValue($fields, value);
5248                    }
5249                } else if ($fields.is(':radio')) {
5250                    checkGroupUserInputsByValue($fields, value);
5251                } else if ($fields.is('select')) {
5252                    setGroupUserSelectValue($fields, value);
5253                } else if (index === 'phone_number' || $fields.first().hasClass('tel-number')) {
5254                    return;
5255                } else {
5256                    $fields.val(value);
5257                }
5258            }
5259        });
5260
5261        if (userData.phone_number) {
5262            setGroupUserPhoneField($iframeContents, userData.phone_number, userData);
5263        }
5264    }
5265
5266    function populateGroupUserIframeFields(userFieldId, iframeSelector) {
5267        if (enableExpiredOwnedEditProfile10003110) {
5268            syncGroupUserHiddenFieldFromDisplay(userFieldId);
5269        }
5270
5271        var user_value = enableExpiredOwnedEditProfile10003110
5272            ? resolveGroupUserHiddenValue(userFieldId)
5273            : $('#' + userFieldId).val();
5274        if (!user_value && window.parent && window.parent !== window) {
5275            try {
5276                user_value = $(window.parent.document).find('#' + userFieldId).val();
5277            } catch (e) {}
5278        }
5279        if (!user_value) {
5280            return false;
5281        }
5282
5283        var targetIframeSelector = getActiveGroupRegistrationIframeSelector(iframeSelector);
5284        var $iframeContents = $(targetIframeSelector).contents();
5285        if (!$iframeContents.length) {
5286            return false;
5287        }
5288
5289        var userData;
5290        try {
5291            userData = jQuery.parseJSON(user_value);
5292        } catch (e) {
5293            return false;
5294        }
5295
5296        applyGroupUserDataToIframe($iframeContents, userData);
5297        restoreCountryDependentStates($iframeContents, userData);
5298
5299        return $iframeContents.find("[name='email']").val() !== '';
5300    }
5301
5302
5303
5304    jQuery(document).ready(function () {
5305        $(".cstm-select").select2();
5306        var $isGroupRegistration = 0;
5307        if($isGroupRegistration){
5308                        setTimeout(function () {
5309                $(".searchable-select").trigger('change');
5310            }, 1000);
5311                    }
5312        if (!$isGroupRegistration) {
5313            setTimeout(function () {
5314                if ($('select.user_list').length) {
5315                    $('.coupn-code-sec').parent('div').find('label').text('Group Discount');
5316                }
5317            }, 500);
5318        }
5319
5320        setTimeout(function () {
5321            $('#loadingMessage').css('display', 'none');
5322            $('#loadingMessage1').css('display', 'none');
5323        }, 500);
5324
5325        if (!isEditProfileLimitOptionPage() && window.location.search.indexOf('group=') === -1 && $('.form_field_grp[data-is-limit-field="1"]').length) {
5326            setTimeout(initParentLimitedFieldSync, 1200);
5327        } else if (window.location.search.indexOf('group=') !== -1 && $('.form_field_grp[data-is-limit-field="1"]').length) {
5328            setTimeout(initGroupChildLimitedFieldSync, 800);
5329        }
5330
5331        $('.user_list').change(function () {
5332            
5333            if ($("#bypass_auto").length != 0) {
5334                $('.user-links').css("display", "none");
5335            } else {
5336                $('.user-links').css("display", "block");
5337            }
5338            if (isTicket) {
5339                $('.user-links').hide();
5340            }
5341
5342            var isGroupRegistrationField = '';
5343            val = $(this).val();
5344            $(".user-number").each(function (index) {
5345                if ((index + 1) > val) {
5346                    $(this).removeClass('btn-success');
5347                    $(this).find('.fa-check').addClass('fa-plus').removeClass('fa-check');
5348                    data_id = $(this).attr('data-id');
5349                    $('#' + data_id).val('');
5350                }
5351                $(this).css("display", "none");
5352            });
5353            if (isTicket) {
5354                val = 0;
5355                $('.qty_package').each(function () {
5356                    if ($(this).val() != '') {
5357                        val = parseInt(val) + parseInt($(this).val());
5358                    }
5359                });
5360            }
5361
5362            for (i = 1; i <= val; i++) {
5363                $('.user-num' + i).css("display", "block");
5364            }
5365        });
5366
5367        $(document).on('click', '.user-number', function() {
5368        // $('.user-number').click(function () {
5369        var dataBuyer=0;
5370       if(localStorage.getItem("buyer")){
5371        dataBuyer=localStorage.getItem("buyer");
5372       }
5373
5374            // Initialize an empty array to hold the IDs
5375            var dropdownIds = [];
5376
5377            // Select all 'select' elements that have options with data-limit-option
5378            $('select').each(function() {
5379                // Push the id attribute of each select element into the array
5380                var id = $(this).attr('id');
5381                
5382                
5383                if(id) {
5384                    $(this).find('option').each(function() {
5385                        var option = $(this);
5386                        if (option.data('limit-option')) {
5387                            dropdownIds.push(id);
5388                            return false;
5389                        }
5390                    });
5391                  
5392                }
5393            });
5394
5395            console.log("All select IDs:", dropdownIds);
5396            // // Array to hold the IDs of the selects
5397            // var selectedIds = {};
5398            //
5399            // // Counter for the selects with the specified option selected
5400            // var count = 0;
5401            //
5402            // // Iterate over each select element
5403            // $('select').each(function() {
5404            //     var selectId = $(this).attr('id');
5405            //
5406            //     // Iterate over each option in the select
5407            //     $(this).find('option').each(function() {
5408            //         var option = $(this);
5409            //
5410            //         // Check if the option has data-limit-option="1" and is selected
5411            //         if (option.data('limit-option') >= 1 && option.is(':selected')) {
5412            //             selectedIds[selectId] = option.val();
5413            //             count++;
5414            //         }
5415            //     });
5416            // });
5417            //
5418            // // Output the results
5419            // console.log("IDs of selects with the specified option selected:", selectedIds);
5420            // console.log("Count of selects with the specified option selected:", count);
5421
5422            var isGroupRegistrationField = '';
5423            var isTicket = '';
5424            var id = $(this).attr('data-id');
5425            if (enableExpiredOwnedEditProfile10003110) {
5426                syncGroupUserHiddenFieldFromDisplay(id);
5427            }
5428            var user_value = enableExpiredOwnedEditProfile10003110 ? resolveGroupUserHiddenValue(id) : $("#" + id).val();
5429
5430
5431            if (isGroupRegistrationField && isTicket) {
5432                jQuery('#addattendee2 iframe').attr('src', '');
5433                $('#loadingMessage1').css('display', 'block');
5434
5435            } else {
5436                jQuery('#videoModal iframe').attr('src', '');
5437                $('#loadingMessage').css('display', 'block');
5438
5439            }
5440
5441
5442            var group_emails;
5443            if (enableExpiredOwnedEditProfile10003110) {
5444                group_emails = buildGroupRegistrationEmailsList();
5445            } else {
5446                group_emails = $("input[name='user_list[]']").map(function () {
5447                    if ($(this).val()) {
5448                        var obj = jQuery.parseJSON($(this).val());
5449                        if (obj.email) {
5450                            return obj.email;
5451                        } else {
5452                            return;
5453                        }
5454                    }
5455                }).get();
5456                if ($("input[type ='email']").val()) {
5457                    group_emails.push($("input[type ='email']").val());
5458                }
5459                group_emails = group_emails.join(",");
5460            }
5461
5462            if (isGroupRegistrationField && isTicket && typeof syncTicketPackagesToStorage === 'function') {
5463                syncTicketPackagesToStorage();
5464            }
5465
5466            var timestamp = new Date().getTime();
5467            var assignedPackageId = localStorage.getItem('savedPackage') || '';
5468            var assignedPackageQuery = '&ticket_package=' + encodeURIComponent(assignedPackageId);
5469                        if (isGroupRegistrationField && isTicket) {
5470                var currentURL = window.location.href;
5471                var groupEmailsQuery = group_emails;
5472                if (enableExpiredOwnedEditProfile10003110) {
5473                    currentURL = resolveEditProfileRegistrationFormUrl();
5474                    groupEmailsQuery = encodeURIComponent(group_emails);
5475                } else if (currentURL.includes("editProfileV2")) {
5476                    var baseURL = currentURL.split('/form/')[0];
5477                    currentURL = baseURL + '/registration-form';
5478                }
5479                jQuery('#addattendee2 iframe').attr('src', appendParentLimitContextToGroupUrl(currentURL + '?no-cache=true&group=' + id + '&group_emails=' + groupEmailsQuery + '&timestamp=' + timestamp + '&buyer=' + dataBuyer + assignedPackageQuery, id));
5480                scheduleDynamicLimitUpdates(dropdownIds, '#iframe-id-new', id);
5481                bindGroupUserStateRestoreOnIframeLoad(id);
5482                if (enableExpiredOwnedEditProfile10003110) {
5483                    jQuery('#iframe-id-new').off('load.groupUserPopulate').on('load.groupUserPopulate', function () {
5484                        hideGroupRegistrationLoadingIndicators();
5485                        populateGroupUserIframeFields(id, '#iframe-id-new');
5486                    });
5487                }
5488            } else {
5489                jQuery('#videoModal iframe').attr('src', appendParentLimitContextToGroupUrl(window.location.href + '?no-cache=true&group=' + id + '&group_emails=' + group_emails + '&timestamp=' + timestamp + '&buyer=' + dataBuyer, id));
5490                                scheduleDynamicLimitUpdates(dropdownIds, '#iframe-id', id);
5491            }
5492                        // $("#card-element iframe").on("load", function(e){
5493            //     $(this).contents().find(".CardNumberField-input-wrapper input").css("width", "100%");
5494            // });
5495            if (isGroupRegistrationField && isTicket) {
5496                setTimeout(function () {
5497                    try {
5498                    if (enableExpiredOwnedEditProfile10003110) {
5499                        populateGroupUserIframeFields(id, '#iframe-id-new');
5500                    } else if (user_value != '') {
5501                        var parsedUserData = jQuery.parseJSON(user_value);
5502                        var $iframeContentsForRestore = $("#iframe-id-new").contents();
5503                        applyGroupUserDataToIframe($iframeContentsForRestore, parsedUserData);
5504                        restoreCountryDependentStates($iframeContentsForRestore, parsedUserData);
5505                    }
5506                    var email_content=$("#iframe-id-new").contents().find("[name='email']").val();
5507                    if(email_content != ''){
5508                        if (isTicket) {
5509                            var ud_profile = $('input[name="ud_profile"]').val();
5510                            var iframeContents = $("#iframe-id-new").contents();
5511                            
5512                            var newHiddenInput = $("<input>", {
5513                                type: "hidden",
5514                                id: "IsEditProfileTicket",
5515                                name: "is_edit_profile_ticket",
5516                                value: "true"
5517                            });
5518                            iframeContents.find('#off_fields').after(newHiddenInput);
5519                            
5520                            
5521                            $("#iframe-id-new").contents().find("[name='email']").append('<div class="edit-block-open"></div>')
5522                            var buyer = localStorage.getItem("buyer");
5523                            if(parseInt(buyer) && (ud_profile == 1 || ud_profile == 2)){
5524                                $("#iframe-id-new").contents().find("[name='email']").prop('readonly', true);
5525                                $("#iframe-id-new").contents().find("input, select, radio, checkbox").prop('readonly', true);
5526                            }
5527                        }
5528
5529                    }
5530                    if (isTicket) {
5531                        var savedPackage = localStorage.getItem("savedPackage");
5532                        // console.log('savedPackage');
5533                        // console.log(savedPackage);
5534
5535                        var $packageContainer;         
5536                        
5537
5538                        let appId = 20550;
5539                        let excluded_app_ids = [18414];
5540                        if(excluded_app_ids.includes(appId) || enableExpiredOwnedEditProfile10003110){
5541                            $packageContainer = $('#packageContainerBlock' + savedPackage);
5542                        }else{
5543                            try {
5544                            // Attempt to access the parent document
5545                            $packageContainer = $('#packageContainerBlock' + savedPackage, window.parent.document);
5546                            } catch (e) {
5547                                if (e instanceof DOMException) {
5548                                    // If a cross-origin error occurs, fallback to the current document
5549                                    console.error('Cross-origin access error:', e);
5550                                    $packageContainer = $('#packageContainerBlock' + savedPackage);
5551                                } else {
5552                                    // If some other error occurs, rethrow it
5553                                    throw e;
5554                                }
5555                            }
5556                        }
5557
5558                        
5559                        var data = {};
5560                        $count_addons = {};
5561                        var selected_addons = {};
5562                        $packageContainer.find('> .aPackage').each(function () {
5563                            var $package = $(this);
5564                            var blockId = $package.attr("data-pack");
5565
5566                            var packageId = $package.attr("data-package");
5567                            var addonsArray = $package.attr("data-addons");
5568                            if (enableExpiredOwnedEditProfile10003110) {
5569                                addonsArray = (addonsArray || '').split(',').filter(function (value) {
5570                                    return value !== '';
5571                                });
5572                            } else {
5573                                addonsArray = addonsArray.split(',');
5574                            }
5575
5576                            $.each(addonsArray, function (key, value) {
5577
5578                                console.log("email_content"+email_content);
5579                                if(email_content){
5580
5581                                    if('user'+blockId ==  id){
5582                                        if (selected_addons[value]) {
5583                                            selected_addons[value] = selected_addons[value] + 1;
5584                                        } else {
5585                                            selected_addons[value] = 1;
5586                                        }
5587                                    }
5588
5589                                }
5590
5591                                if(value && value !=""){
5592                                    if ($count_addons[value]) {
5593                                        $count_addons[value] = $count_addons[value] + 1;
5594
5595                                    } else {
5596                                        $count_addons[value] = 1;
5597                                    }
5598                                }
5599                            });
5600
5601                        });
5602                        //Total used till now
5603                        data[savedPackage] = $count_addons;
5604                        // Used in edit page only
5605
5606
5607                        // addons=TicketPackages[savedPackage];
5608                        addons_html = '';
5609
5610                        // For app 1000001457: pre-select all addons when "Add a New User" (no existing selection)
5611                        var preSelectAllAddonsForNewUser = (String(appId) === '1000001457' && jQuery.isEmptyObject(selected_addons));
5612
5613                        $.each(TicketPackages, function (packageId, package) {
5614
5615                            if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
5616
5617                                if (packageId == savedPackage) {
5618
5619                                    // Iterate through each item/package addon
5620                                    $.each(package, function (key, item) {
5621                                        if (key !== 'pkg_price' && key !== 'total_price' && key !== 'tax' && 
5621key !== 'pkg_qty' && key !== 'symbol') {
5622
5623
5624                                            if (data[savedPackage][item.id]) {
5625                                                used_quantities = data[savedPackage][item.id];
5626                                                // if(selected_addons[item.id] && email_content){
5627                                                //     used_quantities=parseInt(used_quantities) -parseInt(selected_addons[item.id]);
5628                                                // }
5629                                                total_quantities = item.addons_qty;
5630                                                remaining_total_quantities = total_quantities - used_quantities;
5631                                            } else {
5632                                                remaining_total_quantities = item.addons_qty;
5633                                            }
5634
5635                                            if (item.id) {
5636                                                var count = 0
5637                                                if (remaining_total_quantities > 0) {
5638                                                    while (count < parseInt(remaining_total_quantities)) {
5639
5640                                                        // }
5641                                                        // for (i = 0; i < parseInt(remaining_total_quantities); i++) {
5642                                                        if (!jQuery.isEmptyObject(selected_addons)) {
5643
5644                                                            if (selected_addons[item.id] && selected_addons[item.id] > 0 && email_content) {
5645                                                                addons_html += '<option value="' + item.id + '" selected>' + item.addons_name + '</option>';
5646                                                                selected_addons[item.id] = selected_addons[item.id] - 1;
5647
5648                                                                console.log("selected_addons MINUS");
5649                                                                console.log(selected_addons);
5650                                                            } else {
5651                                                                addons_html += '<option value="' + item.id + '"' + (String(appId) === '1000001457' && preSelectAllAddonsForNewUser ? ' selected' : '') + '>' + item.addons_name + '</option>';
5652                                                                console.log("MINUS 2");
5653                                                                count = count + 1;
5654                                                            }
5655                                                        } else {
5656                                                            addons_html += '<option value="' + item.id + '"' + (String(appId) === '1000001457' && preSelectAllAddonsForNewUser ? ' selected' : '') + '>' + item.addons_name + '</option>';
5657                                                            console.log(" MINUS 3");
5658                                                            count = count + 1;
5659                                                        }
5660
5661                                                    }
5662                                                } else {
5663                                                    var size = Object.keys(selected_addons).length;
5664                                                    if (!jQuery.isEmptyObject(selected_addons)) {
5665                                                        while (selected_addons[item.id] > 0) {
5666
5667
5668                                                            if (selected_addons[item.id] && selected_addons[item.id] > 0 && email_content) {
5669                                                                addons_html += '<option value="' + item.id + '" selected>' + item.addons_name + '</option>';
5670                                                                selected_addons[item.id] = selected_addons[item.id] - 1;
5671
5672                                                            }
5673                                                        }
5674                                                    }
5675
5676                                                }
5677
5678                                            }
5679
5680                                        }
5681                                    });
5682                                }
5683                            }
5684                        });
5685
5686                        let addonInitInterval = setInterval(function () {
5687
5688                            if ($("#iframe-id-new").contents().find('#field_addons').length) {
5689
5690                                $("#iframe-id-new").contents().find('#field_addons').append(addons_html);
5691                                $("#iframe-id-new").contents().find('#field_addons').trigger('change.select2');
5692
5693                                /* Show addons dropdown only if it has any option */
5694                                if (addons_html != "") {
5695                                    $("#iframe-id-new").contents().find('#field_addons').parent().show();
5696                                } else {
5697                                    $("#iframe-id-new").contents().find('#field_addons').parent().hide();
5698                                }
5699
5700                                clearInterval(addonInitInterval);
5701                            }
5702
5703                        }, 500);
5704
5705                        /* Hide addons dropdown by default */
5706                        $("#iframe-id-new").contents().find('#field_addons').parent().hide();
5707
5708
5709
5710                        if($('.edit-block-open').length == 1){
5711
5712                        }
5713
5714
5715
5716                    }
5717
5718
5719                    $("#iframe-id-new").contents().find(".header-content").css("display", "none");
5720                    $("#iframe-id-new").contents().find(".page-heading").css("display", "none");
5721                    $("#iframe-id-new").contents().find(".osano-cm-window__widget").css("display", "none");
5722                    setTimeout(function () {
5723                        $("#iframe-id-new").contents().find(".osano-cm-window__widget").css("display", "none");
5724                        $("#iframe-id-new").contents().find("#launcher").css("display", "none");
5725                    }, 3000);
5726
5727
5728                    $('#launcher').css('display', 'none');
5729                    $('#loadingMessage1').css('display', 'none');
5730                    $('#loadingMessage').css('display', 'none');
5731                    $('.page-heading').css('display', 'none');
5732                    // Check iframe-id-new URL for buyer parameter and hide fields accordingly
5733                    var iframeNewSrc = jQuery('#iframe-id-new').attr('src');
5734                    if (iframeNewSrc && iframeNewSrc.includes('buyer=1')) {
5735                        console.log('Found buyer=1 in iframe-id-new, setting up field readonly:', iframeNewSrc);
5736                        hideFieldsInIframe();
5737                      }
5738
5739                    try {
5740                        var groupIframe = document.getElementById('iframe-id-new');
5741                        if (typeof postTicketPackagesToGroupIframe === 'function') {
5742                            postTicketPackagesToGroupIframe(groupIframe);
5743                        }
5744                    } catch (postMessageErr) {
5745                        console.error('Unable to post TicketPackages to group iframe:', postMessageErr);
5746                    }
5747
5748                    // App 10003110: ticketDependency() in the iframe can clear fields after TicketPackages postMessage
5749                    if (enableExpiredOwnedEditProfile10003110) {
5750                        setTimeout(function () {
5751                            populateGroupUserIframeFields(id, '#iframe-id-new');
5752                            email_content = $("#iframe-id-new").contents().find("[name='email']").val();
5753                            if (email_content != '' && isTicket && !$("#iframe-id-new").contents().find('#IsEditProfileTicket').length) {
5754                                var iframeContents = $("#iframe-id-new").contents();
5755                                iframeContents.find('#off_fields').after($("<input>", {
5756                                    type: "hidden",
5757                                    id: "IsEditProfileTicket",
5758                                    name: "is_edit_profile_ticket",
5759                                    value: "true"
5760                                }));
5761                            }
5762                        }, 150);
5763                    }
5764
5765                    /**
5766                     * Ticket group registration (#iframe-id-new / assign-user-to-package):
5767                     * Recalculate is_limitOption remaining counts for the child iframe.
5768                     * Child users are only in browser state (user_list[]) until final submit,
5769                     * so PHP DB counts stay stale — this JS decrements from parent + siblings.
5770                     * applyDelay=500 because the ticket iframe is already loaded by this point.
5771                     */
5772
5773                    } catch (groupIframeErr) {
5774                        if (enableExpiredOwnedEditProfile10003110) {
5775                            console.error('Unable to initialize group registration iframe:', groupIframeErr);
5776                        } else {
5777                            throw groupIframeErr;
5778                        }
5779                    } finally {
5780                        if (enableExpiredOwnedEditProfile10003110) {
5781                            hideGroupRegistrationLoadingIndicators();
5782                        }
5783                    }
5784
5785                }, enableExpiredOwnedEditProfile10003110 ? 8000 : 6000);
5786                // $("#iframe-id-new").remove();
5787            } else {
5788
5789                setTimeout(function () {
5790                    $("#iframe-id").contents().find(".header-content").css("display", "none");
5791                    $('#loadingMessage').css('display', 'none');
5792                    $('#loadingMessage1').css('display', 'none');
5793                    $('.page-heading').css('display', 'none');
5794
5795                    var $iframeContents = $("#iframe-id").contents();
5796                    // console.log(selectedIds);
5797
5798                    /**
5799                     * Non-ticket group registration (#iframe-id):
5800                     * Limit recalculation is handled by scheduleDynamicLimitUpdates on iframe load.
5801                     */
5802
5803
5804
5805                }, 3000);
5806
5807            }
5808        });
5809
5810    });
5811    /**
5812     * Resolve which group-registration child iframe is active.
5813     * - Ticket forms: #iframe-id-new (addattendee2 offcanvas)
5814     * - Non-ticket forms: #iframe-id (videoModal)
5815     * @param {string|null} preferredSelector Explicit iframe selector when known
5816     * @returns {string} jQuery selector for the active iframe
5817     */
5818    function getActiveGroupRegistrationIframeSelector(preferredSelector) {
5819        if (preferredSelector && $(preferredSelector).length && $(preferredSelector).attr('src')) {
5820            return preferredSelector;
5821        }
5822        // Prefer ticket iframe when it has a loaded src; otherwise fall back to non-ticket
5823        if ($('#iframe-id-new').length && $('#iframe-id-new').attr('src')) {
5824            return '#iframe-id-new';
5825        }
5826        return '#iframe-id';
5827    }
5828    /**
5829     * Snapshot parent/main-form limited field selections for child group-registration URLs.
5830     * @returns {Object}
5831     */
5832    function collectParentLimitConsumptionSnapshot() {
5833        var snapshot = {};
5834        var $scope = $(document);
5835
5836        collectLimitedCheckboxGroupIds($scope).forEach(function (groupId) {
5837            var selected = [];
5838            $scope.find('input[type="checkbox"][name="' + groupId + '[]"]:checked').each(function () {
5839                var val = $(this).val();
5840                if (val) {
5841                    selected.push(val);
5842                }
5843            });
5844            if (selected.length) {
5845                snapshot[groupId] = selected;
5846            }
5847        });
5848
5849        collectLimitedDropdownIds($scope).forEach(function (selectId) {
5850            var $select = $scope.find('#' + selectId);
5851            if (!$select.length) {
5852                return;
5853            }
5854            var val = $select.val();
5855            if (!val || val === '') {
5856                return;
5857            }
5858            snapshot[selectId] = $.isArray(val) ? val : [val];
5859        });
5860
5861        return snapshot;
5862    }
5863
5864    function resolveEditProfileGroupChildUserId(editingUserId) {
5865        if (!editingUserId) {
5866            return null;
5867        }
5868
5869        var childUserValue = resolveGroupUserHiddenValue(editingUserId);
5870        if (childUserValue) {
5871            try {
5872                var childUserObj = JSON.parse(childUserValue.replace(/&quot;/g, '"'));
5873                if (childUserObj && childUserObj.user_id) {
5874                    return childUserObj.user_id;
5875                }
5876            } catch (e) {}
5877        }
5878
5879        if (typeof userDetailsEditTicket !== 'object' || !userDetailsEditTicket) {
5880            return null;
5881        }
5882
5883        var slot = parseInt(String(editingUserId).replace(/^user/i, ''), 10);
5884        if (isNaN(slot) || slot < 1) {
5885            return null;
5886        }
5887
5888        var matchIndex = 0;
5889        var foundUserId = null;
5890
5891        $.each(userDetailsEditTicket, function (packageId, packageArray) {
5892            if (foundUserId || !$.isArray(packageArray)) {
5893                return;
5894            }
5895            $.each(packageArray, function (index, packageDetails) {
5896                if (foundUserId) {
5897                    return false;
5898                }
5899                matchIndex++;
5900                if (matchIndex === slot && packageDetails && packageDetails.user_id) {
5901                    foundUserId = packageDetails.user_id;
5902                    return false;
5903                }
5904            });
5905        });
5906
5907        return foundUserId;
5908    }
5909
5910    /**
5911     * Snapshot limited-field selections saved on the child user_list[] slot being edited.
5912     * @param {string|null} editingUserId
5913     * @returns {Object}
5914     */
5915    function collectGroupEditingUserLimitSnapshot(editingUserId) {
5916        var snapshot = {};
5917        if (!editingUserId) {
5918            return snapshot;
5919        }
5920
5921        var userValue = resolveGroupUserHiddenValue(editingUserId);
5922        if (!userValue && typeof isEditProfileLimitOptionPage === 'function' && isEditProfileLimitOptionPage()) {
5923            userValue = $('#' + editingUserId).val();
5924        }
5925        if (!userValue) {
5926            return snapshot;
5927        }
5928
5929        try {
5930            var userObj = JSON.parse(userValue.replace(/&quot;/g, '"'));
5931            var $scope = $(document);
5932
5933            collectLimitedCheckboxGroupIds($scope).forEach(function (groupId) {
5934                var val = normalizeUserListFieldValue(getUserListFieldValue(userObj, groupId));
5935                if (!val) {
5936                    return;
5937                }
5938                if (!Array.isArray(val)) {
5939                    val = [val];
5940                }
5941                val = val.filter(Boolean);
5942                if (val.length) {
5943                    snapshot[groupId] = val;
5944                }
5945            });
5946
5947            collectLimitedDropdownIds($scope).forEach(function (selectId) {
5948                var val = normalizeUserListFieldValue(getUserListFieldValue(userObj, selectId));
5949                if (!val) {
5950                    return;
5951                }
5952                if (Array.isArray(val)) {
5953                    val = val.filter(Boolean);
5954                    if (val.length) {
5955                        snapshot[selectId] = val;
5956                    }
5957                } else {
5958                    snapshot[selectId] = [val];
5959                }
5960            });
5961        } catch (e) {}
5962
5963        return snapshot;
5964    }
5965
5966    /**
5967     * Append encoded parent/editing-user limit context for child iframe PHP rendering.
5968     * @param {string} url
5969     * @param {string|null} editingUserId
5970     * @returns {string}
5971     */
5972    function appendParentLimitContextToGroupUrl(url, editingUserId) {
5973        try {
5974            var separator = url.indexOf('?') === -1 ? '?' : '&';
5975            var snapshot = collectParentLimitConsumptionSnapshot();
5976            if (snapshot && Object.keys(snapshot).length) {
5977                var encoded = btoa(unescape(encodeURIComponent(JSON.stringify(snapshot))));
5978                url += separator + 'parent_limit_ctx=' + encodeURIComponent(encoded);
5979                separator = '&';
5980            }
5981
5982            var editSnapshot = collectGroupEditingUserLimitSnapshot(editingUserId);
5983            if (editSnapshot && Object.keys(editSnapshot).length) {
5984                var editEncoded = btoa(unescape(encodeURIComponent(JSON.stringify(editSnapshot))));
5985                url += separator + 'group_edit_ctx=' + encodeURIComponent(editEncoded);
5986                separator = '&';
5987            }
5988
5989            if (typeof isEditProfileLimitOptionPage === 'function' && isEditProfileLimitOptionPage()) {
5990                url += separator + 'edit_profile_group=1';
5991                separator = '&';
5992
5993                var parentPageParams = new URLSearchParams(window.location.search);
5994                var parentAdminAccess = parentPageParams.get('admin_access');
5995                if (parentAdminAccess) {
5996                    url += separator + 'admin_access=' + encodeURIComponent(parentAdminAccess);
5997                    separator = '&';
5998                }
5999                var parentAccesId = parentPageParams.get('acces_id') || parentPageParams.get('access_id');
6000                if (parentAccesId) {
6001                    url += separator + 'acces_id=' + encodeURIComponent(parentAccesId);
6002                    separator = '&';
6003                }
6004
6005                var parentUserId = $('input[name="user_id"]').val();
6006                if (parentUserId) {
6007                    url += separator + 'parent_edit_user_id=' + encodeURIComponent(parentUserId);
6008                    separator = '&';
6009                }
6010
6011                var parentFormId = $('input[name="form_id"]').val() || $('#form_id').val();
6012                if (parentFormId) {
6013                    url += separator + 'parent_form_id=' + encodeURIComponent(parentFormId);
6014                    separator = '&';
6015                }
6016
6017                var childUserValue = resolveGroupUserHiddenValue(editingUserId);
6018                if (childUserValue) {
6019                    try {
6020                        var childUserObj = JSON.parse(childUserValue.replace(/&quot;/g, '"'));
6021                        if (childUserObj && childUserObj.user_id) {
6022                            url += separator + 'edit_profile_child_user_id=' + encodeURIComponent(childUserObj.user_id
6022);
6023                            separator = '&';
6024                        }
6025                    } catch (childUserParseErr) {}
6026                }
6027
6028                if (url.indexOf('edit_profile_child_user_id=') === -1) {
6029                    var resolvedChildUserId = resolveEditProfileGroupChildUserId(editingUserId);
6030                    if (resolvedChildUserId) {
6031                        url += separator + 'edit_profile_child_user_id=' + encodeURIComponent(resolvedChildUserId);
6032                        separator = '&';
6033                    }
6034                }
6035            }
6036
6037            return url;
6038        } catch (e) {
6039            return url;
6040        }
6041    }
6042
6043    /**
6044     * Apply dynamic limit updates as soon as the child iframe is ready (with a short fallback).
6045     * @param {string[]} dropdownIds Limited select field ids on the parent form
6046     * @param {string} iframeSelector Child iframe selector (#iframe-id or #iframe-id-new)
6047     */
6048    function scheduleDynamicLimitUpdates(dropdownIds, iframeSelector, editingUserId) {
6049        var $iframe = $(iframeSelector);
6050        if (!$iframe.length) {
6051            return;
6052        }
6053
6054        var populateScheduled = false;
6055
6056        function populateEditingUserFields() {
6057            if (!editingUserId || populateScheduled) {
6058                return;
6059            }
6060            var userValue = $('#' + editingUserId).val();
6061            if (!userValue) {
6062                return;
6063            }
6064            populateScheduled = true;
6065            populateGroupUserIframeFields(editingUserId, iframeSelector);
6066        }
6067
6068        function applyLimits() {
6069            if (isParentEditProfileLimitOptionPage()) {
6070                if (editingUserId) {
6071                    setTimeout(populateEditingUserFields, 100);
6072                    setTimeout(populateEditingUserFields, 800);
6073                }
6074                return;
6075            }
6076            dynamicLimitDropdown(dropdownIds, 0, iframeSelector, 0, editingUserId);
6077            if (editingUserId) {
6078                setTimeout(populateEditingUserFields, 3200);
6079            }
6080        }
6081
6082        $iframe.off('load.dynamicLimits').on('load.dynamicLimits', function () {
6083            setTimeout(applyLimits, 100);
6084        });
6085
6086        // Fallback for cached iframe loads; do not block later load-triggered updates
6087        setTimeout(applyLimits, 1500);
6088    }
6089    /**
6090     * Parent form document used for limit calculations.
6091     * @param {number} mainForm
6092     * @returns {jQuery}
6093     */
6094    function getLimitCalculationContext(mainForm) {
6095        if (mainForm && window.parent && window.parent !== window) {
6096            return $(window.parent.document);
6097        }
6098        return $(document);
6099    }
6100    /**
6101     * Resolve a saved group-user field value from user_list JSON.
6102     * @param {Object} userObj
6103     * @param {string} fieldId
6104     * @returns {*}
6105     */
6106    function getUserListFieldValue(userObj, fieldId) {
6107        if (!userObj) {
6108            return undefined;
6109        }
6110        if (Object.prototype.hasOwnProperty.call(userObj, fieldId)) {
6111            return userObj[fieldId];
6112        }
6113        if (fieldId.indexOf('fld_') === 0) {
6114            var numericId = fieldId.substring(4);
6115            if (Object.prototype.hasOwnProperty.call(userObj, numericId)) {
6116                return userObj[numericId];
6117            }
6118        }
6119        return undefined;
6120    }
6121    /**
6122     * Normalize checkbox/multi-select values stored in user_list JSON.
6123     * @param {*} value
6124     * @returns {Array|string|null}
6125     */
6126    function normalizeUserListFieldValue(value) {
6127        if (Array.isArray(value)) {
6128            return value;
6129        }
6130        if (typeof value === 'string') {
6131            var trimmedValue = value.trim();
6132            if (trimmedValue.charAt(0) === '[') {
6133                try {
6134                    return JSON.parse(trimmedValue);
6135                } catch (e) {}
6136            }
6137            if (trimmedValue !== '') {
6138                return trimmedValue;
6139            }
6140        }
6141        return value;
6142    }
6143    /**
6144     * Collect checkbox-group field ids (fld_*) that have data-limit-option on their inputs.
6145     * @param {jQuery} $context
6146     * @returns {string[]}
6147     */
6148    function collectLimitedCheckboxGroupIds($context) {
6149        var checkboxGroupIds = [];
6150        var $scope = $context || $(document);
6151
6152        $scope.find('input[type="checkbox"]').each(function () {
6153            var limitOption = $(this).attr('data-limit-option');
6154            if (limitOption === undefined || limitOption === null || limitOption === '') {
6155                return;
6156            }
6157
6158            var name = $(this).attr('name');
6159            if (!name) {
6160                return;
6161            }
6162
6163            var groupId = name.replace(/\[\]$/, '');
6164            if (checkboxGroupIds.indexOf(groupId) === -1) {
6165                checkboxGroupIds.push(groupId);
6166            }
6167        });
6168
6169        return checkboxGroupIds;
6170    }
6171    /**
6172     * Collect select field ids that contain data-limit-option options.
6173     * @param {jQuery|null} $context
6174     * @returns {string[]}
6175     */
6176    function collectLimitedDropdownIds($context) {
6177        var dropdownIds = [];
6178        var $scope = $context || $(document);
6179
6180        $scope.find('select').each(function () {
6181            var id = $(this).attr('id');
6182            if (!id) {
6183                return;
6184            }
6185
6186            $(this).find('option').each(function () {
6187                if ($(this).attr('data-limit-option')) {
6188                    dropdownIds.push(id);
6189                    return false;
6190                }
6191            });
6192        });
6193
6194        return dropdownIds;
6195    }
6196    /**
6197     * Track a sold-out limited field in off_fields so required validation is skipped.
6198     * @param {string|null} fieldId
6199     * @param {jQuery|Document|null} scopeRoot Document/root that owns the submitting form
6200     */
6201    function addFieldIdToOffFields(fieldId, scopeRoot) {
6202        if (!fieldId) {
6203            return;
6204        }
6205
6206        var $scope = scopeRoot && scopeRoot.jquery ? scopeRoot : $(scopeRoot || document);
6207        var $offFields = $scope.find('#off_fields').first();
6208        if (!$offFields.length) {
6209            $offFields = $('#off_fields').first();
6210        }
6211        if (!$offFields.length) {
6212            return;
6213        }
6214
6215        var current = [];
6216        var rawValue = $offFields.val();
6217        if (rawValue) {
6218            try {
6219                current = JSON.parse(rawValue);
6220            } catch (e) {
6221                current = String(rawValue).split(',').map(function (item) {
6222                    return item.trim();
6223                }).filter(Boolean);
6224            }
6225        }
6226
6227        if (current.indexOf(fieldId) === -1) {
6228            current.push(fieldId);
6229            $offFields.val(current);
6230        }
6231    }
6232
6233    /**
6234     * True on the top-level main registration form (not group/child iframe/page).
6235     */
6236    function isMainParentRegistrationForm() {
6237        return window.location.search.indexOf('group=') === -1 && window.self === window.top;
6238    }
6239
6240    /**
6241     * Hide a limited field group and its column wrapper when every option is sold out.
6242     * @param {jQuery} $fieldGroup
6243     * @param {string|null} fieldId
6244     */
6245    function markSoldOutLimitedField($fieldGroup, fieldId) {
6246        if (!$fieldGroup || !$fieldGroup.length) {
6247            return;
6248        }
6249
6250        $fieldGroup.addClass('d-none').hide();
6251        $fieldGroup.closest('div[class*="col-"]').addClass('d-none').hide();
6252        $fieldGroup.find('select, input, textarea').prop('required', false).removeAttr('required');
6253        $fieldGroup.find('select, input, textarea').prop('disabled', true);
6254
6255        if (fieldId) {
6256            var ownerDocument = $fieldGroup[0] && $fieldGroup[0].ownerDocument ? $fieldGroup[0].ownerDocument : document;
6257            addFieldIdToOffFields(fieldId, $(ownerDocument));
6258        }
6259    }
6260
6261    /**
6262     * Restore a limited field group when at least one option is available again.
6263     * @param {jQuery} $fieldGroup
6264     */
6265    function showAvailableLimitedField($fieldGroup) {
6266        if (!$fieldGroup || !$fieldGroup.length) {
6267            return;
6268        }
6269
6270        $fieldGroup.removeClass('d-none').show();
6271        $fieldGroup.closest('div[class*="col-"]').removeClass('d-none').show();
6272        $fieldGroup.find('select, input, textarea').prop('disabled', false);
6273        $fieldGroup.find('.radio-block-all').show();
6274    }
6275
6276    /**
6277     * Whether a limited checkbox group still has at least one selectable option.
6278     * @param {jQuery} $fieldGroup
6279     * @returns {boolean}
6280     */
6281    function limitedCheckboxGroupHasSelectableOption($fieldGroup) {
6282        return $fieldGroup.find('.radio_and_checkbox_element input[type="checkbox"]').length > 0;
6283    }
6284
6285    /**
6286     * Hide limited fields when every option is sold out (label-only or placeholder-only).
6287     * @param {jQuery|null} $root
6288     */
6289    /**
6290     * True on Edit Profile / Upgrade pages where limits are computed server-side per user.
6291     */
6292    function isEditProfileLimitOptionPage() {
6293        return window.location.href.indexOf('editProfileV2') !== -1;
6294    }
6295
6296    /**
6297     * True when this page or its parent is Edit Profile / Upgrade (child group iframe).
6298     */
6299    function isParentEditProfileLimitOptionPage() {
6300        if (isEditProfileLimitOptionPage()) {
6301            return true;
6302        }
6303        try {
6304            if (window.parent && window.parent !== window && window.parent.location.href.indexOf('editProfileV2') !== -1) {
6305                return true;
6306            }
6307        } catch (parentAccessErr) {}
6308        return false;
6309    }
6310
6311    function isEditProfileLimitAdminBypass() {
6312        if (!hasAdminOrEventOwnerLimitBypass) {
6313            return false;
6314        }
6315        if (isEditProfileLimitOptionPage() || isParentEditProfileLimitOptionPage()) {
6316            return true;
6317        }
6318        return window.location.search.indexOf('edit_profile_group=1') !== -1;
6319    }
6320
6321    /**
6322     * Hidden user_list[] id for the child user being edited inside a group iframe.
6323     * @returns {string|null}
6324     */
6325    function getGroupRegistrationEditingUserId() {
6326        var match = window.location.search.match(/[?&]group=([^&]+)/);
6327        return match ? decodeURIComponent(match[1]) : null;
6328    }
6329
6330    /**
6331     * Whether saved child user_list[] data includes any value for a limited field.
6332     * @param {Object} editingSelections
6333     * @param {string} fieldId
6334     * @returns {boolean}
6335     */
6336    function groupEditingUserHasLimitedFieldSelection(editingSelections, fieldId) {
6337        if (!editingSelections || !fieldId) {
6338            return false;
6339        }
6340
6341        if (editingSelections[fieldId]) {
6342            return true;
6343        }
6344
6345        var numericId = fieldId.replace(/^fld_/, '');
6346        if (numericId !== fieldId && editingSelections[numericId]) {
6347            return true;
6348        }
6349
6350        return false;
6351    }
6352
6353    function hideExhaustedLimitedFields($root) {
6354        if (isEditProfileLimitOptionPage() || isParentEditProfileLimitOptionPage() || isEditProfileLimitAdminBypass()) {
6355            return;
6356        }
6357        if (!$root || !$root.length) {
6358            return;
6359        }
6360
6361        var editingUserId = getGroupRegistrationEditingUserId();
6362        var editingSelections = getEditingUserFieldSelections(editingUserId);
6363
6364        $root.find('.form_field_grp[data-is-limit-field="1"]').each(function () {
6365            var $grp = $(this);
6366            if ($grp.find('.radio_and_checkbox_element').length) {
6367                if (limitedCheckboxGroupHasSelectableOption($grp)) {
6368                    showAvailableLimitedField($grp);
6369                } else {
6370                    var checkboxName = $grp.find('input[type="checkbox"]').first().attr('name') || '';
6371                    var groupId = checkboxName.replace(/\[\]$/, '');
6372                    if (groupId && groupEditingUserHasLimitedFieldSelection(editingSelections, groupId)) {
6373                        showAvailableLimitedField($grp);
6374                    } else {
6375                        markSoldOutLimitedField($grp, groupId);
6376                    }
6377                }
6378                return;
6379            }
6380
6381            var $select = $grp.find('select').first();
6382            if (!$select.length) {
6383                return;
6384            }
6385
6386            var hasValueOption = false;
6387            $select.find('option').each(function () {
6388                if ($(this).val()) {
6389                    hasValueOption = true;
6390                    return false;
6391                }
6392            });
6393
6394            if (!hasValueOption) {
6395                var selectId = $select.attr('id');
6396                if (selectId && groupEditingUserHasLimitedFieldSelection(editingSelections, selectId)) {
6397                    showAvailableLimitedField($grp);
6398                } else {
6399                    markSoldOutLimitedField($grp, selectId);
6400                }
6401            } else {
6402                showAvailableLimitedField($grp);
6403            }
6404        });
6405    }
6406
6407    /**
6408     * Hide parent limited fields when every option is sold out (label-only or placeholder-only).
6409     * @param {jQuery|null} $root
6410     */
6411    function hideExhaustedLimitedFieldsOnParent($root) {
6412        if (!$root || !$root.length) {
6413            $root = $(window.parent && window.parent !== window ? window.parent.document : document);
6414        }
6415
6416        hideExhaustedLimitedFields($root);
6417    }
6418    /**
6419     * Whether the parent/buyer email is already stored in an assigned user_list[] slot.
6420     * When true, parent DOM selections duplicate that slot and must not be counted again.
6421     * @param {jQuery|null} $context
6422     * @returns {boolean}
6423     */
6424    function isBuyerAssignedInUserList($context) {
6425        return !!getBuyerUserListObject($context);
6426    }
6427
6428    /**
6429     * Return the user_list[] JSON object for the parent/buyer email, if assigned.
6430     * @param {jQuery|null} $context
6431     * @returns {Object|null}
6432     */
6433    function getBuyerUserListObject($context) {
6434        var $scope = $context || $(document);
6435        var parentEmail = getParentRegistrationEmail();
6436        if (!parentEmail) {
6437            return null;
6438        }
6439
6440        var buyerObj = null;
6441        $scope.find("input[name='user_list[]']").each(function () {
6442            var userData = $(this).val();
6443            if (!userData) {
6444                return;
6445            }
6446            try {
6447                userData = userData.replace(/&quot;/g, '"');
6448                var userObj = JSON.parse(userData);
6449                var userEmail = (userObj.email || '').trim().toLowerCase();
6450                if (userEmail && userEmail === parentEmail) {
6451                    buyerObj = userObj;
6452                    return false;
6453                }
6454            } catch (e) {}
6455        });
6456
6457        return buyerObj;
6458    }
6459
6460    /**
6461     * Limited-field values stored on the buyer user_list[] entry keyed by fld_* field id.
6462     * @param {jQuery|null} $context
6463     * @param {string[]} limitedFieldIds
6464     * @returns {Object}
6465     */
6466    function getBuyerLimitedFieldSelections($context, limitedFieldIds) {
6467        var buyerObj = getBuyerUserListObject($context);
6468        var selections = {};
6469        if (!buyerObj || !limitedFieldIds || !limitedFieldIds.length) {
6470            return selections;
6471        }
6472
6473        limitedFieldIds.forEach(function (fieldId) {
6474            var fieldValue = normalizeUserListFieldValue(getUserListFieldValue(buyerObj, fieldId));
6475            if (!fieldValue) {
6476                return;
6477            }
6478            if (Array.isArray(fieldValue)) {
6479                fieldValue = fieldValue.filter(Boolean);
6480                if (fieldValue.length) {
6481                    selections[fieldId] = fieldValue;
6482                }
6483            } else {
6484                selections[fieldId] = fieldValue;
6485            }
6486        });
6487
6488        return selections;
6489    }
6490
6491    /**
6492     * Whether a parent DOM option duplicates a value already stored on buyer user_list[].
6493     * @param {Object} buyerSelections
6494     * @param {string} fieldId
6495     * @param {string} optionValue
6496     * @returns {boolean}
6497     */
6498    function isBuyerUserListDuplicateSelection(buyerSelections, fieldId, optionValue) {
6499        if (!buyerSelections || !fieldId || !optionValue || !buyerSelections[fieldId]) {
6500            return false;
6501        }
6502
6503        var buyerValue = buyerSelections[fieldId];
6504        if (Array.isArray(buyerValue)) {
6505            return buyerValue.indexOf(optionValue) !== -1;
6506        }
6507
6508        return buyerValue === optionValue;
6509    }
6510
6511    /**
6512     * Read the page-load remaining baseline for a limited option/checkbox.
6513     * Baseline must not change during client-side recalculation.
6514     * @param {jQuery} $element
6515     * @returns {number}
6516     */
6517    function getLimitBaselineFromElement($element) {
6518        if (!$element || !$element.length) {
6519            return 0;
6520        }
6521
6522        var baseline = parseInt($element.attr('data-limit-baseline'), 10);
6523        if (!isNaN(baseline)) {
6524            return baseline;
6525        }
6526
6527        baseline = parseInt($element.attr('data-limit-option'), 10);
6528        if (isNaN(baseline)) {
6529            return 0;
6530        }
6531
6532        $element.attr('data-limit-baseline', baseline);
6533        return baseline;
6534    }
6535
6536    /**
6537     * Ensure every limited option/checkbox has a frozen data-limit-baseline attribute.
6538     * @param {jQuery|null} $context
6539     */
6540    function ensureLimitBaselines($context) {
6541        var $scope = $context || $(document);
6542
6543        $scope.find('select option[data-limit-option]').each(function () {
6544            getLimitBaselineFromElement($(this));
6545        });
6546
6547        $scope.find('input[type="checkbox"][data-limit-option]').each(function () {
6548            getLimitBaselineFromElement($(this));
6549        });
6550    }
6551
6552    /**
6553     * Recalculate is_limitOption availability on the main form after ticket assign/remove.
6554     * @param {string|null} editingUserId
6555     */
6556    function refreshSessionLimitedFieldAvailability(editingUserId) {
6557        if (isEditProfileLimitOptionPage() || window.location.search.indexOf('group=') !== -1) {
6558            return;
6559        }
6560
6561        var $scope = $(document);
6562        var dropdownIds = collectLimitedDropdownIds($scope);
6563        var checkboxGroupIds = collectLimitedCheckboxGroupIds($scope);
6564        if (!dropdownIds.length && !checkboxGroupIds.length) {
6565            return;
6566        }
6567
6568        dynamicLimitDropdown(dropdownIds, 0, null, 0, editingUserId || null);
6569    }
6570    /**
6571     * Recalculate and hide sold-out limited fields on the main registration form at page load.
6572     */
6573    function initParentLimitedFieldSync() {
6574        if (isEditProfileLimitOptionPage() || window.location.search.indexOf('group=') !== -1) {
6575            return;
6576        }
6577
6578        var dropdownIds = collectLimitedDropdownIds();
6579        var checkboxGroupIds = collectLimitedCheckboxGroupIds($(document));
6580        if (dropdownIds.length || checkboxGroupIds.length) {
6581            dynamicLimitDropdown(dropdownIds, 0, null, 0, null);
6582        }
6583
6584        hideExhaustedLimitedFieldsOnParent($(document));
6585    }
6586    /**
6587     * Hide sold-out limited fields on the child group-registration form (iframe or ?group= page).
6588     */
6589    function initGroupChildLimitedFieldSync() {
6590        if (window.location.search.indexOf('group=') === -1) {
6591            return;
6592        }
6593
6594        if (window.location.search.indexOf('edit_profile_group=1') !== -1) {
6595            return;
6596        }
6597
6598        function syncLimitsFromParent(attempt) {
6599            attempt = attempt || 0;
6600            if (window.parent && window.parent !== window && typeof window.parent.isParentEditProfileLimitOptionPage === 'function' && window.parent.isParentEditProfileLimitOptionPage()) {
6601                return;
6602            }
6603            if (window.parent && window.parent !== window && typeof window.parent.dynamicLimitDropdown === 'function') {
6604                var $parentDoc = window.parent.$(window.parent.document);
6605                var dropdownIds = window.parent.collectLimitedDropdownIds($parentDoc);
6606                var iframeSelector = null;
6607                if (window.frameElement && window.frameElement.id) {
6608                    iframeSelector = '#' + window.frameElement.id;
6609                }
6610                var groupMatch = window.location.search.match(/[?&]group=([^&]+)/);
6611                var editingUserId = groupMatch ? decodeURIComponent(groupMatch[1]) : null;
6612                window.parent.dynamicLimitDropdown(dropdownIds, 0, iframeSelector, 0, editingUserId);
6613                return;
6614            }
6615            if (attempt < 15) {
6616                setTimeout(function () {
6617                    syncLimitsFromParent(attempt + 1);
6618                }, 200);
6619                return;
6620            }
6621            hideExhaustedLimitedFields($(document));
6622        }
6623
6624        syncLimitsFromParent(0);
6625    }
6626    /**
6627     * Read saved field selections for the group user currently being edited.
6628     * @param {string|null} editingUserId
6629     * @returns {Object}
6630     */
6631    function getEditingUserFieldSelections(editingUserId) {
6632        var selections = {};
6633        if (!editingUserId) {
6634            return selections;
6635        }
6636
6637        var userValue = $('#' + editingUserId).val();
6638        if (!userValue && window.parent && window.parent !== window) {
6639            try {
6640                userValue = window.parent.$('#' + editingUserId).val();
6641            } catch (parentReadErr) {}
6642        }
6643        if (!userValue) {
6644            return selections;
6645        }
6646
6647        try {
6648            var userObj = JSON.parse(userValue.replace(/&quot;/g, '"'));
6649            Object.keys(userObj).forEach(function (fieldId) {
6650                var val = normalizeUserListFieldValue(userObj[fieldId]);
6651                if (Array.isArray(val)) {
6652                    selections[fieldId] = val.filter(function (item) {
6653                        return item;
6654                    });
6655                } else if (val) {
6656                    selections[fieldId] = val;
6657                }
6658            });
6659        } catch (e) {}
6660
6661        return selections;
6662    }
6663    /**
6664     * Check whether a limited option belongs to the child user currently being edited.
6665     * @param {Object} editingSelections
6666     * @param {string} fieldId
6667     * @param {string} optionValue
6668     * @returns {boolean}
6669     */
6670    function isEditingUserFieldValue(editingSelections, fieldId, optionValue) {
6671        if (!editingSelections || !fieldId || !optionValue) {
6672            return false;
6673        }
6674
6675        var savedValue = editingSelections[fieldId];
6676        if (Array.isArray(savedValue)) {
6677            return savedValue.indexOf(optionValue) !== -1;
6678        }
6679
6680        return savedValue === optionValue;
6681    }
6682    /**
6683     * Ensure sold-out options saved on the editing user remain in the limit map.
6684     * @param {Object} valueCounts
6685     * @param {string|null} editingUserId
6686     */
6687    function augmentValueCountsForEditingUser(valueCounts, editingUserId) {
6688        if (!editingUserId) {
6689            return;
6690        }
6691
6692        var editingSelections = getEditingUserFieldSelections(editingUserId);
6693        Object.keys(editingSelections).forEach(function (fieldId) {
6694            if (!valueCounts[fieldId]) {
6695                valueCounts[fieldId] = {};
6696            }
6697
6698            var savedValues = editingSelections[fieldId];
6699            if (!Array.isArray(savedValues)) {
6700                savedValues = [savedValues];
6701            }
6702
6703            savedValues.forEach(function (savedValue) {
6704                if (savedValue && !valueCounts[fieldId][savedValue]) {
6705                    valueCounts[fieldId][savedValue] = {
6706                        selectedCount: 0,
6707                        limit: 0
6708                    };
6709                }
6710            });
6711        });
6712    }
6713    /**
6714     * Update parent form limited fields: keep parent selections, remove/hide sold-out unselected options.
6715     * @param {Object} valueCounts
6716     * @param {string[]} dropdownIds
6717     * @param {string[]} checkboxGroupIds
6718     */
6719    function syncParentLimitedFieldOptions(valueCounts, dropdownIds, checkboxGroupIds) {
6720        if (isEditProfileLimitOptionPage() || isEditProfileLimitAdminBypass()) {
6721            return;
6722        }
6723
6724        var $parentRoot = $(window.parent && window.parent !== window ? window.parent.document : document);
6725
6726        $parentRoot.find('select').each(function () {
6727            var selectId = $(this).attr('id');
6728            var $parentSelect = $(this);
6729            var isMultiple = $parentSelect.attr('multiple') !== undefined;
6730            var selectedValues = isMultiple ? ($parentSelect.val() || []) : ($parentSelect.val() ? [$parentSelect.val()] : []);
6731
6732            if (!selectId || dropdownIds.indexOf(selectId) === -1) {
6733                return;
6734            }
6735
6736            $parentSelect.find('option').each(function () {
6737                var option = $(this);
6738                var optionValue = option.val();
6739                var limitOption = parseInt(option.attr('data-limit-option'), 10);
6740
6741                if (!optionValue || isNaN(limitOption) || limitOption < 1) {
6742                    return;
6743                }
6744
6745                if (!valueCounts || !valueCounts[selectId] || !valueCounts[selectId][optionValue]) {
6746                    return;
6747                }
6748
6749                var remainingLimit = Math.max(0, valueCounts[selectId][optionValue].limit - valueCounts[selectId][optionValue].selectedCount);
6750                var isSelectedOnParent = selectedValues.indexOf(optionValue) !== -1;
6751                var $parentOption = $parentRoot.find('#' + selectId + ' option[value="' + optionValue.replace(/"/g, '\\"') + '"]');
6752
6753                if (remainingLimit <= 0 && !isSelectedOnParent) {
6754                    $parentOption.remove();
6755                    return;
6756                }
6757
6758                $parentOption.text(optionValue + ' (' + remainingLimit + ')');
6759                $parentOption.attr('data-limit-option', remainingLimit);
6760            });
6761
6762            if ($parentSelect.hasClass('select2-hidden-accessible') || $parentSelect.hasClass('searchable-select') || $parentSelect.hasClass('cstm-select')) {
6763                try {
6764                    $parentSelect.trigger('change.select2');
6765                } catch (select2Err) {}
6766            }
6767
6768            var hasValueOption = false;
6769            $parentSelect.find('option').each(function () {
6770                if ($(this).val()) {
6771                    hasValueOption = true;
6772                    return false;
6773                }
6774            });
6775
6776            var $selectFieldGroup = $parentSelect.closest('.form_field_grp');
6777            if ($selectFieldGroup.length) {
6778                if (hasValueOption) {
6779                    showAvailableLimitedField($selectFieldGroup);
6780                } else {
6781                    markSoldOutLimitedField($selectFieldGroup, dropdownId);
6782                }
6783            }
6784        });
6785
6786        checkboxGroupIds.forEach(function (groupId) {
6787            var hasVisibleOption = false;
6788            var $fieldGroup = null;
6789
6790            $parentRoot.find('input[type="checkbox"][name="' + groupId + '[]"]').each(function () {
6791                var $checkbox = $(this);
6792                var optionValue = $checkbox.val();
6793
6794                if (!optionValue || !valueCounts || !valueCounts[groupId] || !valueCounts[groupId][optionValue]) {
6795                    return;
6796                }
6797
6798                if (!$fieldGroup) {
6799                    $fieldGroup = $checkbox.closest('.form_field_grp');
6800                }
6801
6802                var remainingLimit = Math.max(0, valueCounts[groupId][optionValue].limit - valueCounts[groupId][optionValue].selectedCount);
6803                var isCheckedOnParent = $checkbox.is(':checked');
6804
6805                if (remainingLimit <= 0 && !isCheckedOnParent) {
6806                    $checkbox.prop('checked', false).prop('disabled', true);
6807                    $checkbox.closest('.radio-block-all').hide();
6808                    return;
6809                }
6810
6811                hasVisibleOption = true;
6812                $parentRoot.find('label[for="' + $checkbox.attr('id') + '"]').text(optionValue + ' (' + remainingLimit + ')');
6813                $checkbox.attr('data-limit-option', remainingLimit);
6814                $checkbox.prop('disabled', false);
6815                $checkbox.closest('.radio-block-all').show();
6816            });
6817
6818            if ($fieldGroup && $fieldGroup.length) {
6819                if (hasVisibleOption || limitedCheckboxGroupHasSelectableOption($fieldGroup)) {
6820                    showAvailableLimitedField($fieldGroup);
6821                } else {
6822                    markSoldOutLimitedField($fieldGroup, groupId);
6823                }
6824            }
6825        });
6826
6827        hideExhaustedLimitedFieldsOnParent($parentRoot);
6828    }
6829    /**
6830     * Recalculate is_limitOption remaining capacity for limited select dropdowns and checkbox groups.
6831     * Counts: DB remaining (data-limit-option on parent) minus parent selection minus child user_list[] picks.
6832     * Then updates the child iframe options (or parent form when mainForm=1 after child submit).
6833     *
6834     * @param {string[]} dropdownIds Select element IDs that have data-limit-option options
6835     * @param {number} mainForm 0 = update child iframe; 1 = update parent form (called from child submit)
6836     * @param {string|null} iframeSelector Target child iframe (#iframe-id or #iframe-id-new)
6837     * @param {number} applyDelay Ms to wait before applying updates to the child iframe (default 0)
6838     * @param {string|null} editingUserId Hidden user_list input id being edited (e.g. user1)
6839     */
6840    function dynamicLimitDropdown(dropdownIds, mainForm = 0, iframeSelector = null, applyDelay = 0, editingUserId = null) {
6841        var valueCounts = {};
6842        var $limitContext = getLimitCalculationContext(mainForm);
6843        ensureLimitBaselines($limitContext);
6844        var checkboxGroupIds = collectLimitedCheckboxGroupIds($limitContext);
6845        var targetIframeSelector = getActiveGroupRegistrationIframeSelector(iframeSelector);
6846
6847        if (targetIframeSelector) {
6848            try {
6849                collectLimitedCheckboxGroupIds($(targetIframeSelector).contents()).forEach(function (groupId) {
6850                    if (checkboxGroupIds.indexOf(groupId) === -1) {
6851                        checkboxGroupIds.push(groupId);
6852                    }
6853                });
6854            } catch (iframeGroupErr) {}
6855        }
6856
6857        var limitedFieldIds = dropdownIds.concat(checkboxGroupIds.filter(function (groupId) {
6858            return dropdownIds.indexOf(groupId) === -1;
6859        }));
6860        // Seed each limited option with page-load remaining baseline (never the live display count).
6861        dropdownIds.forEach(function (dropdownId) {
6862            valueCounts[dropdownId] = {};
6863
6864            // Loop through each option in the select dropdown and initialize the counts
6865            $limitContext.find("#" + dropdownId + " option").each(function () {
6866                var optionValue = $(this).val();
6867                var limitCount = getLimitBaselineFromElement($(this));
6868
6869                if (optionValue) {
6870                    valueCounts[dropdownId][optionValue] = {
6871                        selectedCount: 0,    // How many times this value is already taken in this registration session
6872                        limit: limitCount    // Remaining slots at page load (DB baseline for this session)
6873                    };
6874                }
6875            });
6876            
6877
6878        });
6879
6880        checkboxGroupIds.forEach(function (groupId) {
6881            valueCounts[groupId] = valueCounts[groupId] || {};
6882
6883            $limitContext.find('input[type="checkbox"][name="' + groupId + '[]"]').each(function () {
6884                var optionValue = $(this).val();
6885                var limitCount = getLimitBaselineFromElement($(this));
6886
6887                if (!optionValue || isNaN(limitCount)) {
6888                    return;
6889                }
6890
6891                valueCounts[groupId][optionValue] = {
6892                    selectedCount: 0,
6893                    limit: limitCount
6894                };
6895            });
6896        });
6897
6898        if (targetIframeSelector) {
6899            try {
6900                var $iframeSeedScope = $(targetIframeSelector).contents();
6901
6902                dropdownIds.forEach(function (dropdownId) {
6903                    valueCounts[dropdownId] = valueCounts[dropdownId] || {};
6904                    $iframeSeedScope.find("#" + dropdownId + " option").each(function () {
6905                        var optionValue = $(this).val();
6906                        var limitCount = getLimitBaselineFromElement($(this));
6907
6908                        if (optionValue && !valueCounts[dropdownId][optionValue]) {
6909                            valueCounts[dropdownId][optionValue] = {
6910                                selectedCount: 0,
6911                                limit: limitCount
6912                            };
6913                        }
6914                    });
6915                });
6916
6917                checkboxGroupIds.forEach(function (groupId) {
6918                    valueCounts[groupId] = valueCounts[groupId] || {};
6919                    $iframeSeedScope.find('input[type="checkbox"][name="' + groupId + '[]"]').each(function () {
6920                        var optionValue = $(this).val();
6921                        var limitCount = getLimitBaselineFromElement($(this));
6922
6923                        if (!optionValue || isNaN(limitCount) || valueCounts[groupId][optionValue]) {
6924                            return;
6925                        }
6926
6927                        valueCounts[groupId][optionValue] = {
6928                            selectedCount: 0,
6929                            limit: limitCount
6930                        };
6931                    });
6932                });
6933            } catch (iframeSeedErr) {}
6934        }
6935
6936        var buyerLimitedSelections = getBuyerLimitedFieldSelections($limitContext, limitedFieldIds);
6937
6938        // Count parent-form selections toward the session usage.
6939        // Skip a parent value only when the same value is already stored on buyer user_list[].
6940        $limitContext.find('select').each(function () {
6941            var selectId = $(this).attr('id');
6942            var isMultiple = $(this).attr('multiple') !== undefined;
6943            
6944            if (isMultiple) {
6945                
6946                var selectedValues = $(this).val() || [];
6947                
6948                
6949                selectedValues.forEach(function(selectedValue) {
6950                    if (isBuyerUserListDuplicateSelection(buyerLimitedSelections, selectId, selectedValue)) {
6951                        return;
6952                    }
6953                    if (valueCounts[selectId] && valueCounts[selectId][selectedValue]) {
6954                        valueCounts[selectId][selectedValue].selectedCount++;
6955                    }
6956                });
6957            } else {
6958                // Handle single-select dropdowns (existing logic)
6959                $(this).find('option').each(function () {
6960                    var option = $(this);
6961                    var optionValue = option.val();
6962                    if (!option.is(':selected') || !optionValue || !valueCounts[selectId] || !valueCounts[selectId][optionValue]) {
6963                        return;
6964                    }
6965                    if (isBuyerUserListDuplicateSelection(buyerLimitedSelections, selectId, optionValue)) {
6966                        return;
6967                    }
6968                    valueCounts[selectId][optionValue].selectedCount++;
6969                });
6970            }
6971        });
6972
6973        checkboxGroupIds.forEach(function (groupId) {
6974            $limitContext.find('input[type="checkbox"][name="' + groupId + '[]"]:checked').each(function () {
6975                var optionValue = $(this).val();
6976                if (!optionValue || !valueCounts[groupId] || !valueCounts[groupId][optionValue]) {
6977                    return;
6978                }
6979                if (isBuyerUserListDuplicateSelection(buyerLimitedSelections, groupId, optionValue)) {
6980                    return;
6981                }
6982                valueCounts[groupId][optionValue].selectedCount++;
6983            });
6984        });
6985
6986        // Count already-assigned child users (stored in hidden user_list[] JSON, not yet in DB).
6987        // Include the user being edited so labels reflect true global consumption (e.g. 0 not 1).
6988        // Sold-out options for that user are still kept via isEditingUserFieldValue in remove* handlers.
6989        $limitContext.find("input[name='user_list[]']").each(function () {
6990            var userData = $(this).val();
6991
6992            // Parse the JSON string (after replacing the HTML entities)
6993            if (userData) {
6994                try {
6995                userData = userData.replace(/&quot;/g, '"');  // Convert HTML entities to plain JSON string
6996                var userObj = JSON.parse(userData);
6997                //console.log("dropdownIds",dropdownIds);
6998                // Loop through limited field ids to fetch their values
6999                limitedFieldIds.forEach(function (fieldId) {
7000                    var value = normalizeUserListFieldValue(getUserListFieldValue(userObj, fieldId));
7001
7002                    // Handle both single values and arrays (for multi-select dropdowns / checkbox groups)
7003                    if (value) {
7004                        if (Array.isArray(value)) {
7005                            value.forEach(function(singleValue) {
7006                                if (singleValue && valueCounts[fieldId] && valueCounts[fieldId][singleValue]) {
7007                                    valueCounts[fieldId][singleValue].selectedCount++;
7008                                }
7009                            });
7010                        } else {
7011                            if (valueCounts[fieldId] && valueCounts[fieldId][value]) {
7012                                valueCounts[fieldId][value].selectedCount++;
7013                            }
7014                        }
7015                    }
7016                });
7017                } catch (parseErr) {}
7018            }
7019        });
7020
7021        augmentValueCountsForEditingUser(valueCounts, editingUserId);
7022
7023        // Log the result
7024        //console.log("valueCounts",valueCounts);
7025        if (!isEditProfileLimitOptionPage() && window.location.search.indexOf('group=') === -1) {
7026            syncParentLimitedFieldOptions(valueCounts, dropdownIds, checkboxGroupIds);
7027        }
7028
7029        if (!mainForm) {
7030            // Apply updated remaining counts / remove sold-out options inside the child iframe
7031                            setTimeout(() => {
7032            for (const [key, value] of Object.entries(valueCounts)) {
7033                    if (dropdownIds.indexOf(key) !== -1) {
7034                        removeOptionsIfLimitReached(key, value, targetIframeSelector, editingUserId);
7035                    } else if (checkboxGroupIds.indexOf(key) !== -1) {
7036                        removeCheckboxOptionsIfLimitReached(key, value, targetIframeSelector, editingUserId);
7037                    }
7038            }
7039            setTimeout(function () {
7040                try {
7041                    hideExhaustedLimitedFields($(targetIframeSelector).contents());
7042                } catch (hideErr) {}
7043            }, 200);
7044        }, applyDelay);
7045                    }
7046
7047    }
7048    /**
7049     * Apply session limit counts to a limited select inside the child group-registration iframe.
7050     * Removes sold-out options and rewrites labels as "value (remaining)".
7051     * Works for both #iframe-id (non-ticket) and #iframe-id-new (ticket).
7052     *
7053     * @param {string} dropdownId Select element id inside the iframe
7054     * @param {Object} data Map of optionValue -> { selectedCount, limit }
7055     * @param {string|null} iframeSelector Target iframe selector
7056     * @param {string|null} editingUserId Hidden user_list input id being edited
7057     */
7058    function removeOptionsIfLimitReached(dropdownId, data, iframeSelector, editingUserId) {
7059        if (isEditProfileLimitAdminBypass()) {
7060            return;
7061        }
7062        var targetIframeSelector = getActiveGroupRegistrationIframeSelector(iframeSelector);
7063        var editingSelections = getEditingUserFieldSelections(editingUserId);
7064        // Retry until iframe DOM / dropdown options are ready (child form loads async)
7065        function waitAndProcess(attempt = 1, maxAttempts = 15) {
7066            try {
7067                // Read options from the active group-registration iframe (#iframe-id or #iframe-id-new)
7068                var $iframeContents = $(targetIframeSelector).contents();
7069                
7070                // Check if iframe content is accessible
7071                if ($iframeContents.length === 0) {
7072                    throw new Error("Iframe content not accessible");
7073                }
7074
7075                // Get the dropdown element by ID within the iframe context
7076                const dropdown = $iframeContents.find(`#${dropdownId}`);
7077                
7078                // Check if dropdown exists and has options
7079                if (dropdown.length > 0 && dropdown.find('option').length > 0) {
7080                    var currentValue = dropdown.val();
7081
7082                    // Drop iframe options that are not in the calculated limit map (keep placeholder options)
7083                    $iframeContents.find(`#${dropdownId} option`).each(function() {
7084                        let optionValue = $(this).val();
7085
7086                        if (!optionValue) {
7087                            return;
7088                        }
7089
7090                        // If the option value is not present in the objects, remove it
7091                        if (data && !data.hasOwnProperty(optionValue) && !isEditingUserFieldValue(editingSelections, dropdownId, optionValue)) {
7092                            $(this).remove();
7093                        }
7094                    });
7095
7096                    // Update remaining label, or remove when selectedCount has reached the limit
7097                    for (const [key, value] of Object.entries(data)) {
7098                        var remainingLimit = value.limit - value.selectedCount;
7099                        var isEditingUserValue = isEditingUserFieldValue(editingSelections, dropdownId, key);
7100
7101                        if (remainingLimit <= 0 && !isEditingUserValue) {
7102                            // Sold out for this session — remove from child dropdown
7103                            dropdown.find(`option[value="${key}"]`).remove();
7104                        } else {
7105                            var displayLimit = Math.max(0, remainingLimit);
7106                            dropdown.find(`option[value="${key}"]`).attr('data-limit-option', displayLimit);
7107                            dropdown.find(`option[value="${key}
7107"]`).text(key + ' (' + displayLimit + ')');
7108                        }
7109                    }
7110
7111                    // Only update labels — do not auto-select an option for the child form
7112                    if (currentValue === null || currentValue === undefined || currentValue === '') {
7113                        dropdown.val('');
7114                    } else if (dropdown.find('option[value="' + String(currentValue).replace(/"/g, '\\"') + '"]').length) {
7115                        dropdown.val(currentValue);
7116                    } else {
7117                        dropdown.val('');
7118                    }
7119
7120                    var editingValue = editingSelections[dropdownId];
7121                    if (editingValue && !Array.isArray(editingValue)) {
7122                        if (!dropdown.find('option[value="' + String(editingValue).replace(/"/g, '\\"') + '"]').length) {
7123                            dropdown.append($('<option></option>').attr('value', editingValue).text(editingValue));
7124                        }
7125                        dropdown.val(editingValue);
7126                    }
7127
7128                    // Refresh select2 in the child iframe when present so updated labels show
7129                    if (dropdown.hasClass('select2-hidden-accessible') || dropdown.hasClass('searchable-select') || dropdown.hasClass('cstm-select')) {
7130                        try {
7131                            dropdown.trigger('change.select2');
7132                        } catch (select2Err) {}
7133                    }
7134
7135                    var hasValueOption = false;
7136                    dropdown.find('option').each(function () {
7137                        if ($(this).val()) {
7138                            hasValueOption = true;
7139                            return false;
7140                        }
7141                    });
7142
7143                    var $fieldGroup = dropdown.closest('.form_field_grp');
7144                    if ($fieldGroup.length) {
7145                        if (hasValueOption) {
7146                            showAvailableLimitedField($fieldGroup);
7147                        } else {
7148                            markSoldOutLimitedField($fieldGroup, dropdownId);
7149                        }
7150                    }
7151                    
7152                } else if (attempt < maxAttempts) {
7153                    // Dropdown not ready yet, wait and retry
7154                    setTimeout(function() {
7155                        waitAndProcess(attempt + 1, maxAttempts);
7156                    }, 200); // Wait 200ms between attempts
7157                } 
7158                
7159            } catch (e) {
7160                // Error accessing iframe, retry if attempts remaining
7161                if (attempt < maxAttempts) {
7162                    setTimeout(function() {
7163                        waitAndProcess(attempt + 1, maxAttempts);
7164                    }, 200);
7165                } 
7166            }
7167        }
7168        
7169        // Start the waiting and processing
7170        waitAndProcess();
7171    }
7172    /**
7173     * Apply session limit counts to a limited checkbox group inside the child group-registration iframe.
7174     * Hides sold-out options and rewrites labels as "value (remaining)".
7175     *
7176     * @param {string} groupId Checkbox group name prefix (e.g. fld_12345)
7177     * @param {Object} data Map of optionValue -> { selectedCount, limit }
7178     * @param {string|null} iframeSelector Target iframe selector
7179     * @param {string|null} editingUserId Hidden user_list input id being edited
7180     */
7181    function removeCheckboxOptionsIfLimitReached(groupId, data, iframeSelector, editingUserId) {
7182        if (isEditProfileLimitAdminBypass()) {
7183            return;
7184        }
7185        var targetIframeSelector = getActiveGroupRegistrationIframeSelector(iframeSelector);
7186        var editingSelections = getEditingUserFieldSelections(editingUserId);
7187
7188        function waitAndProcess(attempt = 1, maxAttempts = 15) {
7189            try {
7190                var $iframeContents = $(targetIframeSelector).contents();
7191
7192                if ($iframeContents.length === 0) {
7193                    throw new Error("Iframe content not accessible");
7194                }
7195
7196                var $checkboxes = $iframeContents.find('input[type="checkbox"][name="' + groupId + '[]"]');
7197
7198                if ($checkboxes.length > 0) {
7199                    var $fieldGroup = null;
7200                    var hasVisibleOption = false;
7201
7202                    $checkboxes.each(function () {
7203                        var optionValue = $(this).val();
7204
7205                        if (data && optionValue && !data.hasOwnProperty(optionValue) && !isEditingUserFieldValue(editingSelections, groupId, optionValue)) {
7206                            $(this).closest('.radio-block-all').remove();
7207                        }
7208                    });
7209
7210                    for (const [key, value] of Object.entries(data)) {
7211                        var $checkbox = $checkboxes.filter(function () {
7212                            return $(this).val() === key;
7213                        });
7214
7215                        if (!$checkbox.length) {
7216                            continue;
7217                        }
7218
7219                        if (!$fieldGroup) {
7220                            $fieldGroup = $checkbox.closest('.form_field_grp');
7221                        }
7222
7223                        var remainingLimit = value.limit - value.selectedCount;
7224                        var isEditingUserValue = isEditingUserFieldValue(editingSelections, groupId, key);
7225
7226                        if (remainingLimit <= 0 && !isEditingUserValue) {
7227                            $checkbox.prop('checked', false);
7228                            $checkbox.closest('.radio-block-all').remove();
7229                        } else {
7230                            hasVisibleOption = true;
7231                            var displayLimit = Math.max(0, remainingLimit);
7232                            $checkbox.attr('data-limit-option', displayLimit);
7233                            $iframeContents.find('label[for="' + $checkbox.attr('id') + '"]').text(key + ' (' + displayLimit + ')');
7234                            $checkbox.prop('disabled', false);
7235                            $checkbox.closest('.radio-block-all').show();
7236                            $checkbox.closest('.form_field_grp').show();
7237                        }
7238                    }
7239
7240                    if ($fieldGroup) {
7241                        if (limitedCheckboxGroupHasSelectableOption($fieldGroup)) {
7242                            showAvailableLimitedField($fieldGroup);
7243                        } else {
7244                            markSoldOutLimitedField($fieldGroup, groupId);
7245                        }
7246                    }
7247                } else if (attempt < maxAttempts) {
7248                    setTimeout(function () {
7249                        waitAndProcess(attempt + 1, maxAttempts);
7250                    }, 200);
7251                }
7252            } catch (e) {
7253                if (attempt < maxAttempts) {
7254                    setTimeout(function () {
7255                        waitAndProcess(attempt + 1, maxAttempts);
7256                    }, 200);
7257                }
7258            }
7259        }
7260
7261        waitAndProcess();
7262    }
7263    $(document).ready(function () {
7264        var isEditProfileV2 = window.location.href.indexOf('editProfileV2') !== -1;
7265        var isTicketTop = '';
7266        if (!isEditProfileV2) {
7267        if (isTicketTop) {
7268            setTimeout(function () {
7269                if ($('.form_field_grp .ticket__content .ticket__item').length == 1) {
7270                    $('.form_field_grp .ticket__content .ticket__item .ticketSelbtn').click();
7271                }
7272            }, 1500);
7273        } else {
7274            setTimeout(function () {
7275                if ($('.ticket__content .ticket__item').length == 1) {
7276                    $('.ticket__content .ticket__item .ticketSelbtn').click();
7277                }
7278            }, 1500);
7279        }
7280    }
7281        var checkMappingPackage = '0';
7282        var isGroupRegistration = '0';
7283        var form_type = 'REGISTRATION_FORM';
7284        var app_id = '20550';
7285        if (checkMappingPackage != 0) {
7286            $('input[name="email"]').focusout(function () {
7287                var email = $('input[name="email"]').val();
7288                $("#LoadingBar").show();
7289                jQuery.ajax({
7290                    url: "https://www.codeseccon.com/en/form/emailDomainPackage",
7291                    //url: "http://vjf.local.me/en/form/emailDomainPackage",
7292                    data: {
7293                        email: email,
7294                        isGroupRegistration: isGroupRegistration,
7295                        form_type: form_type,
7296                        app_id: app_id,
7297                        checkMappingPackage: checkMappingPackage,
7298                    },
7299                    type: "POST",
7300                    success: function (response) {
7301                        $('.addonweb').css('display', 'none');
7302                        var response = eval('(' + response + ')');
7303                        if (response.status == true) {
7304                            $('.package_list').find('option:not(:first)').remove();
7305                            var list = response.list;
7306                            for (var i = 0; i < list.length; i++) {
7307                                var limit_count = parseInt(list[i]['limitation']) - parseInt(list[i]['avail_limit']);
7308                                console.log(list[i]);
7309                                if (parseInt(list[i]['limitation']) == 0) {
7310                                    console.log('ZERO Unlimited: ' + list[i]['name']);
7311                                    $('.package_list').append(
7312                                        '<option value="' + list[i]['id']
7313                                        + '" data-cost="' + list[i]['price']
7314                                        + '" data-price="' + list[i]['name']
7315                                        + '-' + list[i]['price'] + '">'
7316                                        + list[i]['name'] + ' - ' + list[i]['price']
7317                                        + '</option>');
7318                                } else if (list[i]['limitation'] == null) {
7319                                    console.log('NULL Unlimited: ' + list[i]['name']);
7320                                    $('.package_list').append(
7321                                        '<option value="' + list[i]['id']
7322                                        + '" data-cost="' + list[i]['price']
7323                                        + '" data-price="' + list[i]['name']
7324                                        + '-' + list[i]['price'] + '">'
7325                                        + list[i]['name'] + ' - ' + list[i]['price']
7326                                        + '</option>');
7327                                } else if (parseInt(list[i]['limitation']) > parseInt(list[i]['avail_limit'])) {
7328                                    console.log('Limit Available: ' + list[i]['name']);
7329                                    $('.package_list').append(
7330                                        '<option value="' + list[i]['id']
7331                                        + '" data-cost="' + list[i]['price']
7332                                        + '" data-price="' + list[i]['name']
7333                                        + '-' + list[i]['price'] + '">'
7334                                        + list[i]['name'] + ' - ' + list[i]['price'] + ' (' + limit_count + ')'
7335                                        + '</option>');
7336                                }
7337                            }
7338                        } else {
7339                            $('.package_list').find('option:not(:first)').remove();
7340                        }
7341
7342                     }
7343            });
7344            $("#LoadingBar").hide();
7345
7346            });
7347        }
7348    });
7349    $(document).ready(function () {
7350        // ADD RED ASTRISK ON REQUIERD FIELD's LABEL
7351        // $('input,select,file').each(function(){
7352        //     if($(this).prop('required')){
7353        //         if($(this).parent().find('.text-danger').length ==0)
7354        //             $(this).parent().find('.control-label').append('<i class="text-danger">*</i>');
7355        //     }
7356        // });
7357        setTimeout(function () {
7358            $('.payment__method > .radio:nth-of-type(1) img').click();
7359            window.scrollTo(0, 0);
7360        }, 1000);
7361
7362        $('.addonweb').css("display", "none");
7363        $('.addnopkg').css("display", "none");
7364
7365        if ($('.addonp').val() != '') {
7366            $('.addonweb').css("display", "block");
7367            $('.addonp').trigger("change");
7368        }
7369
7370        $('.pmnt_fld').on('change', function (e) {
7371              if (!isTicket && enableV5ApiDiscount){
7372                  getOldformTicketData();
7373             }
7374            // var symbol= $('.pmnt_fld option:selected').data('symbol');
7375            // var price= $('.total-addons-price').data('price');
7376            // if(price != ''){
7377            //     $('.total-addons-price').html('<strong> Amount</strong>'+ symbol +''+ price +'');
7378            // }
7379        });
7380
7381        $('.addonp').on('change', function (e) {
7382            var value = $(this).val();
7383            $('.addonweb').css("display", "none");
7384            $('.addnopkg').css("display", "none");
7385            $('.selected-addons-package').remove();
7386            $('.total-addons-price').remove();
7387            $('.total-addons-tax').remove();
7388            $cost = $(this).find(':selected').data('cost');
7389            if ($cost >= 1000) {
7390                $('#grp_fld_1379629').parent().removeClass("field-hidden");
7391                $('#grp_fld_1379629').removeClass("field-hidden");
7392            } else {
7393                $('#grp_fld_1379629').parent().addClass("field-hidden");
7394                $('#grp_fld_1379629').addClass("field-hidden");
7395            }
7396            if (value != '') {
7397                $('.addonsvp input[type=checkbox]').each(function () {
7398                    $(this).prop("checked", false);
7399                });
7400                $('.addon-package' + value).css("display", "block");
7401                $('.addnopkg').css("display", "block");
7402            }
7403        });
7404
7405        //$('.addonsvp input[type=checkbox], select[name="group_registration"]').on('change', function (e) {
7406        //    payment_section = $('.addonp').val();
7407        //
7408        //    if (payment_section == '') {
7409        //        $('.addonweb').css("display", "none");
7410        //        $('.addnopkg').css("display", "none");
7411        //    } else {
7412        //        $('.selected-addons-package').remove();
7413        //        $('.total-addons-price').remove();
7414        //        $('.total-addons-tax').remove();
7415        //                //        var selected = '<div class="selected-addons-package" style=" margin: 20px 0px; font-size: 17px;"> <strong> Packages Included: </strong> ';
7416        //        var price = 0;
7417        //        var flag = 0;
7418        //
7419        //        var symbol = $('.pmnt_fld option:selected').data('symbol');
7420        //        if (typeof symbol == "undefined") {
7421        //            symbol = '';
7422        //        }
7423        //        selected += $('.addonp option:selected').text();
7424        //                //        price = parseFloat($('.addonp option:selected').data('price')) + parseFloat(price);
7425        //                //        price = parseFloat($('.addonp option:selected').data('cost')) + parseFloat(price);
7426        //                <!--        -->        //        var selectedValueGroupRegistration = $('select[name="group_registration"]').val();
7427        //        if(selectedValueGroupRegistration != ''){
7428        //            var totalGroupRegistration = parseFloat(price)  * parseFloat(selectedValueGroupRegistration);
7429        //            price = parseFloat(totalGroupRegistration) + parseFloat(price);
7430        //        }
7431        //                //        $('.addonsvp input[type=checkbox]:checked').each(function () {
7432        //            selected += ", " + $(this).data('name');
7433        //            price = parseFloat($(this).data('price')) + parseFloat(price);
7434        //            flag = 1;
7435        //        });
7436        //
7437        //        selected += ' </div>';
7438        //        if (flag == 1) {
7439        //            $('.package_addon_price').text(price);
7440        //            $('.pmnt_fld').parent('div').parent('div').before(selected);
7441        //            // $(this).parent('div').parent('span').append(selected);
7442        //                    //            var tax_obligation = $('.tax_obligation_price').html();
7443        //            var total_tax = price / 100 * parseFloat(tax_obligation);
7444        //            var total_price = parseFloat(total_tax) + parseFloat(price);
7445        //                    //            var total_price = parseFloat(price);
7446        //                    //
7447        //
7448        //
7449        //            $('.pmnt_fld').parent('div').parent('div').before('<div  class="total-addons-price"  data-price="' + price + '" style="margin: 20px 0px; font-size: 17px;"><strong> Amount: </strong>' + symbol + '' + price + '</div>');
7450        //                    //            $('.pmnt_fld').parent('div').parent('div').before('<div  class="total-addons-tax"  style="margin: 20px 0px; font-size: 17px;"><strong> State Tax: </strong>' + symbol + '' + total_tax + '</div>');
7451        //                    //            $('.pmnt_fld').parent('div').parent('div').before('<div  class="total-addons-price"  data-price="' + price + '" style="margin: 20px 0px; font-size: 17px;"><strong> Total : </strong>' + symbol + '' + total_price + '</div>');
7452        //            // $(this).parent('div').parent('span').append('<div  class="total-addons-price"  data-price="'+ price +'" style="margin: 20px 0px; font-size: 17px;"><strong> Total Price: </strong>'+ symbol +''+ price + '</div>');
7453        //        }
7454        //                //    }
7455        //
7456        //
7457        //});
7458
7459        $('.addonsvp input[type=checkbox], select[name="group_registration"]').on('change', function () {
7460            const paymentSection = $('.addonp').val();
7461            const $addonWeb = $('.addonweb');
7462            const $addnoPkg = $('.addnopkg');
7463
7464            // Reset the display for empty payment section
7465            if (!paymentSection) {
7466                $addonWeb.hide();
7467                $addnoPkg.hide();
7468                return;
7469            }
7470
7471             // console.log('TicketPackages after submit child :',TicketPackages)
7472             if (!isTicket && enableV5ApiDiscount){
7473                  getOldformTicketData();
7474             }
7475
7476            // Clear previous addon details
7477            $('.selected-addons-package, .total-addons-price, .total-addons-tax').remove();
7478
7479                        const symbol = $('.pmnt_fld option:selected').data('symbol') || '';
7480            let price = 0;
7481            let hasAddons = false;
7482
7483            // Add package details
7484            let selectedText = `<div class="selected-addons-package" style="margin: 20px 0; font-size: 17px;">
7485            <strong>Packages Included:</strong> ${$('.addonp option:selected').text()}`;
7486
7487            // Calculate price based on conditions
7488            price += parseFloat($('.addonp option:selected').data('cost') || 0);
7489
7490            // Group registration calculations
7491                        // Process selected addons
7492            $('.addonsvp input[type=checkbox]:checked').each(function () {
7493                selectedText += `, ${$(this).data('name')}`;
7494                price += parseFloat($(this).data('price') || 0);
7495                hasAddons = true;
7496            });
7497
7498            selectedText += '</div>';
7499
7500            if (hasAddons) {
7501                const $pmntFld = $('.pmnt_fld').closest('div').parent();
7502                const taxEnabled = false;
7503                const taxRate = parseFloat($('.tax_obligation_price').html() || 0);
7504                const totalTax = taxEnabled ? (price * taxRate) / 100 : 0;
7505                const totalPrice = price + totalTax;
7506                if(!isTicket){
7507                // Append details to DOM
7508                $pmntFld.before(selectedText);
7509                $pmntFld.before(`<div class="total-addons-price total-addons-price-subtotal" data-price="${price}" style="margin: 20px 0; font-size: 17px;">
7510            <strong>Amount:</strong> ${symbol}${price}</div>`);
7511                if (taxEnabled) {
7512                    $pmntFld.before(`<div class="total-addons-tax" style="margin: 20px 0; font-size: 17px;">
7513                <strong>State Tax:</strong> ${symbol}${totalTax}</div>`);
7514                }
7515                $pmntFld.before(`<div class="total-addons-price total-addons-price-total" data-price="${totalPrice}" style="margin: 20px 0; font-size: 17px;">
7516            <strong>Total:</strong> ${symbol}${totalPrice}</div>`);
7517                }
7518
7519                if(enableV5ApiDiscount){
7520                    // console.log('checkbox click');
7521                    // console.log(TicketPackages);
7522                    if(!isTicket){
7523                        paymentSummaryObject.getOldFormPaymentSummaryDetails(TicketPackages);
7524                    }
7525                }
7526            }
7527                    });
7528
7529        $(function () {
7530            $('[data-toggle="tooltip"]').tooltip(
7531                {template: '<div class="tooltip" style="font-size:10px" role="tooltip"><div class="arrow"></div><div class="tooltip-inner custom-tooltip"></div></div>'}
7532            );
7533             if(enableV5ApiDiscount && !isTicket){
7534              var selectedValue = $(".package_list").val();
7535              if (selectedValue !== "") {
7536                 getOldformTicketData();
7537                }
7538             }
7539        })
7540
7541        
7542           $(document).on("change",".package_list",function(e) {
7543               if(enableV5ApiDiscount){
7544               getOldformTicketData();
7545               }
7546
7547         });
7548        $(document).on("click",".cacl-disc",function(e) {
7549        // $('.cacl-disc').on('click', function (e) {
7550        //     console.log('I am in');
7551
7552            e.preventDefault();
7553            $('.order-now-button, .order-now-button1').prop('disabled', true);
7554            var addons = '';
7555            $.each($(".addonsvp input:checked"), function(){
7556                addons+=$(this).val()+',';
7557            });
7558
7559            if (isRegistrationForm && pageBreakSummaryCount > 0) {
7560                $('#text_help').remove();
7561                $('<div>', {
7562                    class: 'col-md-12 form-control my-3 alert alert-danger',
7563                    id: 'text_help',
7564                    role: 'alert', 
7565                    style: 'width: 100% !important; display: block;',
7566                    tabindex: '0',
7567                    text: 'Invalid discount code.'
7568                }).insertAfter('.ticket__totalBox.small-discout-box');
7569            }
7570
7571
7572            var fld = $(this).data('fld').toString();
7573            $("#text_help").hide().removeClass("alert-success alert-danger");
7574            $("#text_help").html("");
7575            $("#price_details").hide("");
7576            let btn = $(this);
7577            let promo = $('#cpn_fld_' + fld).val();
7578            let form_id = $('#formId').val();
7579            var $isGroupRegistration = 0;
7580            data=[];
7581            var isGroupRegistrationField= '';
7582            var isTicket= '';
7583            // if(!isTicket){
7584            //     if (typeof TicketPackages === 'undefined') {
7585            //         window.TicketPackages = null; // or an empty object {}
7586            //     }
7587            // }
7588            if(isGroupRegistrationField && isTicket){
7589
7590            }else{
7591                if ($(".user_list")[0]){
7592                    selected=$('.user_list').val();
7593                    count_value = 0;
7594
7595                    var data = $("input[name='user_list[]']").map(function(){
7596                        if($(this).val()){
7597                            count_value++;
7598                            return $(this).val();
7599                        }
7600                    }).get();
7601                    $("#group-error").remove();
7602                    if(selected != null){
7603                        if(selected != count_value && selected !== undefined){
7604                            console.log('$("#bypass_auto").length');
7605                            console.log($("#bypass_auto").length);
7606                            var app_id = 20550;
7607                            if($("#bypass_auto").length == 0) {
7608                                if (isTicket) {
7609                                    if (isTicketTop) {
7610                                        $('.user_list').after('<label id="group-error" class="error" for="group" style="display: block; color: red;">Please assign below tickets to users</label>');
7611                                    }else{
7612                                        $('.packageBlock').before('<label id="group-error" class="error" for="group" style="display: block; color: red;">Please assign below tickets to users</label>');
7613                                    }
7614
7615                                } else {
7616                                    if (app_id == 9185) {
7617                                        $('.user_list').after('<label id="group-error" class="error" for="group" style="display: block; color: red;">Please add your spouse/partner details by clicking the button below - It is mandatory, if you wish to bring your spouse/partner to any of the events.</label>');
7618                                    } else {
7619                                        $('.user_list').after('<label id="group-error" class="error" for="group" style="display: block; color: red;">Secondary users are required, please add all Secondary user</label>');
7620                                    }
7621                                }
7622
7623                                return false;
7624                            }
7625
7626
7627                        }
7628                    }
7629                }
7630            }
7631
7632
7633             group_package=null;
7634            if (promo != "") {
7635
7636                var ticket= '';
7637                if(ticket) {
7638                    group_package=TicketPackages;
7639                    qty= $('.package-block-'+$('#fld_' + fld).val()+' > .ticket__price .qty').val();
7640                    package_qty=qty;
7641                    addon_qty=[];
7642                    $('.addon-package-'+$('#fld_' + fld).val()).find("a.addonBtn").each(function () {
7643                        addons_key =$(this).data('addons');
7644                        addons_qty =$(this).next().find('.qty').val();
7645
7646
7647                        if(addons_key && addons_key !== "" && addons_qty !==""){
7648                            addon_qty[addons_key]=addons_qty
7649                        }
7650                    });
7651
7652
7653                }else{
7654                    package_qty=1;
7655                    addon_qty=1;
7656                }
7657                btn.attr("disabled", true);
7658          
7659            
7660                let discountVerifyUserId = 0;
7661                let discount_data = {
7662                    user_id: discountVerifyUserId || '',
7663                    package_id: $('#fld_' + fld).val(),
7664                    package_qty:package_qty,
7665                    ticket:ticket,
7666                    discount_code: promo,
7667                    addons: addons,
7668                    data: data,
7669                    group_package: group_package,
7670                    is_group_registration: $isGroupRegistration,
7671                    form_id: form_id,
7672                    app_id:20550,
7673                    addon_qty:addon_qty,
7674                    is_group_multiple_select:isGroupMultipleSelect,
7675                };
7676                var app_id = 20550;
7677                if (app_id == 15570 ) {
7678                    if(multipleTicketEdit) {
7679                             discount_data = {
7680                                    user_id: discountVerifyUserId || '',
7681                                    package_id: $('#fld_' + fld).val(),
7682                                    apply_discount:1,
7683                                    package_qty:package_qty,
7684                                    ticket:ticket,  
7685                                    discount_code: promo,
7686                                    addons: addons,
7687                                    data: data,
7688                                    group_package: group_package,
7689                                    is_group_registration: $isGroupRegistration,
7690                                    form_id: form_id,
7691                                    app_id:20550,
7692                                    addon_qty:addon_qty,
7693                                    is_group_multiple_select:isGroupMultipleSelect,
7694                            };
7695                    }
7696                }
7697
7698            
7699                if(enableV5ApiDiscount){
7700                     if(!isTicket){
7701                          getOldformTicketData();
7702                     }
7703
7704                    TicketPackages['appId'] = '20550';
7705                    if(promo == undefined){
7706                        promo="";
7707                    }
7708                    TicketPackages['discountCode'] = promo;
7709                    TicketPackages['discountCodeStatusSuccessText'] = "Promo code is applied";
7710                    TicketPackages['discountCodeStatusErrorText'] = "Invalid Discount Code Entered";
7711                    TicketPackages['discountPriceText'] = 'Your Discounted price is ';
7712                    TicketPackages['isUpgradeDowngradeProfile'] = (isUpgradeDowngradeProfile !== null && isUpgradeDowngradeProfile !== '' && (isUpgradeDowngradeProfile == 1 || isUpgradeDowngradeProfile == "1")) ? "1" : "0";
7713                    // console.log('getPaymentSummaryDetails');
7714
7715                    // Add error checks for localStorage and JSON parsing
7716                    try {
7717                        var storedData = localStorage.getItem('paymentData');
7718                        if (storedData !== null && storedData !== '') {
7719                            paymentData = JSON.parse(storedData);
7720                        } else {
7721                            paymentData = null;
7722                        }
7723                    } catch (e) {
7724                        console.error('Error parsing paymentData from localStorage:', e);
7725                        paymentData = null;
7726                    }
7727                    
7728                    if (paymentData && paymentData.disc_code == "" && (TicketPackages['isUpgradeDowngradeProfile'] == 1 || TicketPackages['isUpgradeDowngradeProfile'] == "1")) {
7729                        TicketPackages['isUpgradeDowngradeProfile']="0";
7730                    }
7731                    if(!isTicket){
7732                        paymentSummaryObject.getOldFormPaymentSummaryDetails(TicketPackages);
7733                    }else{
7734                        if(upgradeDowngradePaymentMethodDetailId !=null){
7735                            TicketPackages['paymentMethodId'] = upgradeDowngradePaymentMethodDetailId;
7736                        }
7737                        paymentSummaryObject.getPaymentSummaryDetails(TicketPackages);
7738                    }
7739                    $('.order-now-button, .order-now-button1').prop('disabled', false);
7740                }else{
7741                    $.post("https://www.codeseccon.com/en/verify_discount_code", discount_data, function (response) {
7742                        $.post(window.location.origin + "/en/verify_discount_code", discount_data, function (response) {
7743                            //   $.post("http://vjf.local.me/en/verify_discount_code", discount_data, function (response) {
7744                            let re = /\s\s+/g;
7745                            let resp = response.replace(re, ' ');
7746                            resp = resp.replace(/^\uFEFF/, '');
7747                            let json = JSON.parse(resp);
7748                            let enableVfairsPayment ='0';
7749                            let package_id = (typeof json.package != "undefined" ? json.package.id : 0);
7750                            $('.order-now-button, .order-now-button1').prop('disabled', false);
7751                            if (json.status) {
7752                                $("#text_help").html("Promo code is applied");
7753                                $("#text_help").removeClass("alert-danger").addClass("alert-success").show();
7754                                var selectedcurrencysymbol =    $('.pmnt_fld').find(":selected").data('symbol');
7755                                if(selectedcurrencysymbol ==undefined){
7756                                    $('.pmnt_fld option:nth-child(2)').attr('selected', 'selected');
7757                                    selectedcurrencysymbol =    $('.pmnt_fld').find(":selected").data('symbol');
7758                                }
7759                        
7760                              
7761                                var discount_amount_percentage=0;
7762                                if(json.discount.discount_percent !=null){
7763                                    discount_amount_percentage=json.discount.discount_percent +" %";
7764                                }else if(json.discount.discount_amount !=null){
7765                                    discount_amount_percentage=json.discount.discount_amount;
7766                                }else{
7767                                    discount_amount_percentage=json.discount.fixed_price;
7768                                }
7769
7770                                $(".order__summary .price__item > div.booking_fee").attr('data-calculated_amount_arr', JSON.stringify(json.calculatedAmountArr));
7771                                userDetailsEditDiscountAmount=parseFloat(json.discounted_amount).toFixed(2);
7772                                if (typeof json.discount.name != "undefined") {
7773
7774                                    var symbol = $('.pmnt_fld option:selected').data('symbol');
7775                                    if(symbol){
7776                                        $('.order__summary > div.price__item >
7776 div:nth-of-type(2) > span').text(symbol+''+formatTotal(json.discounted_amount));
7777                                    }else{
7778                                        $('.order__summary > div.price__item >div:nth-of-type(2) > span').text(formatTotal(json.discounted_amount));
7779                                    }
7780                                    $('.order__summary > div.price__item >div:nth-of-type(2) > span').attr('data-discounted_amount', json.discounted_amount);
7781                                    sub_total=$('.order__summary .price__item > div:nth-of-type(1) span').attr('data-subtotal');
7782
7783                                    // total_price=parseFloat(sub_total,2) - parseFloat(json.discounted_amount,2).toFixed(2);
7784                                    total_price=parseFloat(json.price,2);
7785                                    if(total_price == 0){
7786
7787                                        data_sub=$('.single-pay').attr('data-sub');
7788
7789                                        if (!data_sub) {
7790                                            data_sub = $('.payn').attr('data-sub');
7791                                        }
7792                                        $('.zerobb').remove();
7793
7794                                        if($('#payment_method_count').val() > 1){
7795                                            $('.paynbtn.zerob').remove();
7796                                            $('.order__payment.order__summary.topp').after('<input class="paynbtn zerobb page_break_step page-break-step-0" type="submit" style="margin-top: 25px" value="'+data_sub+'" tabindex="0">');
7797                                            $('.order__payment.order__summary.topp').hide();
7798
7799                                        }else{
7800                                            $('.paynbtn.zerob').remove();
7801                                            $('.single-pay').before(' <input class="paynbtn zerobb page_break_step page-break-step-0" type="submit" style="margin-top: 25px" value="'+data_sub+'" tabindex="0">');
7802                                            $('.payment_summary_bottom').hide();
7803                                        }
7804                                        $('.single-pay').hide();
7805
7806                                    }else{
7807                                        $('.zerobb').remove();
7808                                const isPagebreak = $('.order__payment.order__summary.topp.page_break_step')
7809    .is((_, el) => el.className.match(/page-break-step-\d+$/) !== null);
7810                                    if(!isPagebreak){
7811                                        $('.order__payment.order__summary.topp > input').show();
7812                                        $('.order__payment.order__summary.topp').show();
7813                                    }
7814
7815
7816                                        if($('#payment_method_count').val() > 1){
7817                                            $('.single-pay').hide();
7818                                        }else{
7819                                            $('.single-pay').show();
7820                                        }
7821                                        if(enableVfairsPayment && !hasVfairsOfflinePayments){
7822                                            $('.single-pay').show();
7823                                        }
7824                                    }
7825
7826                            // VFC-14947 - add booking fee
7827                            let totalPriceAfterTaxProcessing = (parseInt(json.is_tax_inclusive) == 0)? parseFloat(json.TotalAmountWithoutTax) : total_price;
7828                            total_text=$('.totalcountT > p').attr('data-total');
7829                            $('.ticket__pkgprice').text(totalPriceAfterTaxProcessing); // VFC-14947 - add booking fee
7830                            if(symbol){
7831                                $('.order__summary .price__item > div:nth-of-type(1) span').text(symbol+''+formatTotal(sub_total));
7832                                $('.order__summary .price__item > div.total__price > span').text(symbol+''+formatTotal(totalPriceAfterTaxProcessing));
7833                                $('.ticketItems .totalcountT p').text(total_text+': '+symbol+''+formatTotal(totalPriceAfterTaxProcessing));
7834                            }else{
7835                                $('.order__summary .price__item >
7835 div:nth-of-type(1) span').text(formatTotal(sub_total));
7836                                $('.order__summary .price__item > div.total__price > span').text(formatTotal(totalPriceAfterTaxProcessing));
7837                                $('.ticketItems .totalcountT p').text(total_text+': '+formatTotal(totalPriceAfterTaxProcessing));
7838                            }
7839
7840                                    // VFC-14947 - add booking fee
7841                                    // add additional attributes in total span of summary
7842                                    $('.order__summary .price__item > div.total__price > span').attr('data-original_total_price', total_price);
7843                                    sessionStorage.setItem('total_price', total_price);
7844                                    $('.order__summary .price__item > div.total__price > span').attr('data-is_discount_applied', 1);
7845                                    $('.order__summary .price__item > div.total__price > span').attr('data-amount_after_discount', json.price);
7846                                    $('.order__summary .price__item > div.total__price > span').attr('data-is_package_tax_inclusive', json.is_tax_inclusive);
7847                                    let amountWithoutTax = (parseInt(json.is_tax_inclusive) == 0)? parseFloat(json.TotalAmountWithoutTax) : total_price;
7848                                    $('.order__summary .price__item > div.total__price > span').attr('data-original_total_price_without_tax', amountWithoutTax-PackageDonationAmountNotIncludeBookingFee);
7849
7850                                    // $('.total-addons-price').remove();
7851                                    // $('.total-addons-tax').remove();
7852                                    var package_addon_price = $('.package_addon_price').html();
7853                                    total_price_addon=parseFloat(package_addon_price,2) - parseFloat(json.discounted_amount,2).toFixed(2);
7854
7855                                    $('.package_addon_price').text(total_price_addon);
7856
7857                                    var tax_obligation = $('.tax_obligation_price').html();
7858                                    var total_tax= 0.0;
7859                                    if(typeof tax_obligation !== "undefined") {
7860                                        total_tax = total_price_addon / 100 * parseFloat(tax_obligation);
7861                                    }
7862                                    var total_price1 = parseInt(total_tax) + parseInt(total_price_addon);
7863
7864                                    $('.order__summary .price__item > div.total__price > span').text((symbol ? symbol : '') +formatTotal(total_price));
7865                                    $('.ticketItems .totalcountT p').text(total_text+': '+ (symbol ? symbol : '') +formatTotal(total_price));
7866                                    $('.order__summary .price__item > div.total__tax > span').text((symbol ? symbol : '') +formatTotal(total_price));
7867
7868                                    var afterDonationAmountRemove=json.onlyAmount.toFixed(2)-PackageDonationAmount;
7869                                    $('.order__summary .price__item > div:nth-of-type(1) span').attr('data-subtotal', afterDonationAmountRemove.toFixed(2));
7870                                    $('.order__summary .price__item > div:nth-of-type(1) span').text((symbol ? symbol : '') +formatTotal(afterDonationAmountRemove));
7871                                    if(json.hasOwnProperty("totalTax") && parseFloat(json.totalTax) > 0) {
7872                                        var show_tax = 0;
7873                                        $('.order__summary .price__item > div.total-tax').show();
7874                                        if((parseFloat(json.totalTax) !=null)) {
7875                                            show_tax = parseFloat(json.totalTax); // * parseFloat(json.tax) / 100;
7876                                        }
7877                                        $('.order__summary .price__item > div.total-tax > span').text( (symbol ? symbol : '') +formatTotal(show_tax));
7878                                        $('.order__summary .price__item > div.total-tax > span').attr("data-total_tax", show_tax);
7879                                        $('.order__summary .price__item > div.total-tax > span').attr("data-total_tax_no_booking_fee", show_tax);
7880                                    } else {
7881                                        $('.order__summary .price__item > div.total-tax').hide();
7882                                    }
7883
7884                                    setTotalIncludingBookingFee(TicketPackages); // VFC-14947 - add booking fee
7885
7886                                    if(parseInt(isTicket) &&  (parseInt(isStripeElement) || parseInt(isStripeConnectElement)) && !parseInt(isTicketTop)) {
7887
7888                                    let emailElm = ("input[type='email']");
7889                                    let receiptEmail = $(emailElm).val();
7890
7891                                        intent_id= '';
7892                                        jQuery.ajax({
7893                                            url: "https://www.codeseccon.com/en/form/updatePaymentIntent",
7894                                            data: {
7895                                                intent_id: intent_id,
7896                                                amount: total_price.toFixed(2),
7897                                                appID: 20550,
7898                                                receiptEmail: receiptEmail
7899                                            },
7900                                            type: "POST",
7901                                            success: function (response) {
7902
7903                                            }
7904                                        });
7905                                    }
7906
7907                                    // FOR ND2022-11
7908                                    if(app_id == 7798){
7909                                        $("#price_details").html(json.discount.name + " - Registration Total " + json.price).show();
7910                                    }else{
7911                                        if(!ticket){
7912                                            if(json.discount.fixed_price !=null){
7913                                                $("#price_details").html(json.discount.name + "<br/>   " +json.price+ " Discounted price <br/>" + selectedcurrencysymbol + discount_amount_percentage).show();
7914                                            }else{
7915                                                $("#price_details").html(json.discount.name + "<br/>   " + discount_amount_percentage + " Discounted price <br/>" + selectedcurrencysymbol + json.price).show();
7916                                            }
7917                                      }
7918                                    }
7919                                }
7920
7921                            } else {
7922                                $(".coupn-code-sec input").val('');
7923                                $("#text_help").html("Invalid Discount Code Entered");
7924                                $("#text_help").removeClass("alert-success").addClass("alert-danger").show();
7925                            }
7926
7927                            if(typeof discount_verified_callback !== 'undefined'){
7928                                discount_verified_callback(json);
7929                            }
7930
7931                            btn.attr("disabled", false);
7932                        });
7933                    });
7934                }
7935
7936
7937
7938            } else {
7939                $("#text_help").html("Please enter a Promo Code");
7940                $("#text_help").addClass("alert-danger").show();
7941            }
7942            btn.attr("disabled",false);
7943        });
7944
7945       
7946        $('.verify_registration_code').on('click', function (e) {
7947            e.preventDefault();
7948            var code= $("input[name=registration_code]").val();
7949            if (code != "") {
7950                $("#registration_code_message").html('');
7951                jQuery.ajax({
7952                    url: "https://www.codeseccon.com/en/form/registrationCodeVerification",
7953                    data: {
7954                        registration_code: code,
7955                        ajax_call: 1,
7956                        appID: 20550,
7957                    },
7958                    type: "POST",
7959                    success: function (response) {
7960                        if(response.indexOf('verified') != -1){
7961
7962                            $("#registration_code_message").html('<span style="color:green;">'+response.toString().replace(/"/g, "")+'</span>');
7963                        }else{
7964                            $("#registration_code_message").html(response.toString().replace(/"/g, "")  );
7965                        }
7966
7967                    }});
7968
7969            } else {
7970                $("#registration_code_message").html("Please Enter Registration Code");
7971
7972            }
7973        });
7974    });
7975
7976    var slice = [].slice;
7977    (function ($, window) {
7978        var Starrr;
7979        window.Starrr = Starrr = (function () {
7980            Starrr.prototype.defaults = {
7981                rating: void 0,
7982                max: 5,
7983                readOnly: false,
7984                emptyClass: 'fa fa-star fa-star-emp',
7985                fullClass: 'fa fa-star',
7986                change: function (e, value) {
7987                }
7988            };
7989
7990            function Starrr($el, options) {
7991                this.options = $.extend({}, this.defaults, options);
7992                this.$el = $el;
7993                this.createStars();
7994                this.syncRating();
7995                if (this.options.readOnly) {
7996                    return;
7997                }
7998                this.$el.on('mouseover.starrr', 'a', (function (_this) {
7999                    return function (e) {
8000                        return _this.syncRating(_this.getStars().index(e.currentTarget) + 1);
8001                    };
8002                })(this));
8003                this.$el.on('mouseout.starrr', (function (_this) {
8004                    return function () {
8005                        return _this.syncRating();
8006                    };
8007                })(this));
8008                this.$el.on('click.starrr', 'a', (function (_this) {
8009                    return function (e) {
8010                        return _this.setRating(_this.getStars().index(e.currentTarget) + 1);
8011                    };
8012                })(this));
8013                this.$el.on('starrr:change', this.options.change);
8014            }
8015
8016            Starrr.prototype.getStars = function () {
8017                return this.$el.find('a');
8018            };
8019
8020            Starrr.prototype.createStars = function () {
8021                var j, ref, results;
8022                results = [];
8023                var maxStars = this.options.max;
8024                if(this.options.maxStars) {
8025                    maxStars = this.options.maxStars;
8026                }
8027                for (j = 1, ref = maxStars; 1 <= ref ? j <= ref : j >= ref; 1 <= ref ? j++ : j--) {
8028                    results.push(this.$el.append("<a href='javascript:;' />"));
8029                }
8030                return results;
8031            };
8032
8033            Starrr.prototype.setRating = function (rating) {
8034                if (this.options.rating === rating) {
8035                    rating = void 0;
8036                }
8037                this.options.rating = rating;
8038                this.syncRating();
8039                return this.$el.trigger('starrr:change', rating);
8040            };
8041
8042            Starrr.prototype.getRating = function () {
8043                return this.options.rating;
8044            };
8045
8046            Starrr.prototype.syncRating = function (rating) {
8047                var $stars, i, j, ref, results;
8048                rating || (rating = this.options.rating);
8049                $stars = this.getStars();
8050                results = [];
8051                var maxStars = this.options.max;
8052                if(this.options.maxStars) {
8053                    maxStars = this.options.maxStars;
8054                }
8055                for (i = j = 1, ref = maxStars; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {
8056                    results.push($stars.eq(i - 1).removeClass(rating >= i ? this.options.emptyClass : this.options.fullClass).addClass(rating >= i ? this.options.fullClass : this.options.emptyClass));
8057                }
8058                return results;
8059            };
8060
8061            return Starrr;
8062
8063        })();
8064
8065        $.fn.extend({
8066            starrr: function () {
8067                var args, option;
8068                option = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
8069                return this.each(function () {
8070                    var data;
8071                    data = $(this).data('starrr');
8072                    if (!data) {
8073                        $(this).data('starrr', (data = new Starrr($(this), option)));
8074                    }
8075                    if (typeof option === 'string') {
8076                        return data[option].apply(data, args);
8077                    }
8078                });
8079            }
8080        });
8081
8082        function starRatingInit() {
8083            $(".starrr").each(function (index) {
8084                var maxStars = $(this).attr('data-stars');
8085                $(this).starrr(
8086                    {
8087                        maxStars: maxStars,
8088                        change: function (e, value) {}
8089                    });
8090            });
8091
8092            $('.starrr').on('starrr:change', function (e, value) {
8093                var id = $(this).attr('data-input');
8094                id = '#'.concat(id);
8095                var $input = $(id);
8096
8097                // Deselect must clear the value (not "0") so required validation still fails.
8098                if (value) {
8099                    $input.val(value);
8100                } else {
8101                    $input.val('');
8102                }
8103
8104                if ($input.length && typeof $input.valid === 'function') {
8105                    $input.valid();
8106                }
8107            });
8108        }
8109
8110        starRatingInit();
8111    })($, window);
8112
8113</script>
vendor: 1 bytes, line 8113
8113
8114<script>
8115    //V5 API function for old form
8116    function getOldformTicketData() {
8117        TicketPackages = {};
8118        if(!isTicket && enableV5ApiDiscount){
8119            var fld = $(".cacl-disc").data('fld').toString();
8120
8121            let flag = 0;
8122
8123            if (TicketPackages && Object.keys(TicketPackages).length > 0) {
8124                flag = 1;
8125            }
8126
8127
8128            if (!flag) {
8129               var selectedOption = $('#fld_' + fld+ ' option:selected');
8130
8131                // Get the data-cost attribute of the selected option
8132                const dataCost =selectedOption.attr("data-cost");
8133                const dataTax = selectedOption.attr("data-tax");
8134                const dataTaxValue = selectedOption.attr("data-tax-value");
8135                const paymentMethodId = $('.pmnt_fld option:selected').attr('data-id') || 1;
8136
8137
8138                // Gather selected addons
8139                const addons = [];
8140                $('.addonsvp input[type=checkbox]:checked').each(function () {
8141                    const checkbox = $(this);
8142                    console.log("id:", parseInt(checkbox.val(), 10));
8143                    console.log("price:",  parseFloat(checkbox.attr('data-price')));
8144                    console.log("name:",  checkbox.attr('data-name'));
8145                    addons.push({
8146                        id: parseInt(checkbox.val(), 10), // Parse value as integer
8147                        price: parseFloat(checkbox.attr('data-price')), // Parse price as float
8148                        name: checkbox.attr('data-name'), // Add-on name
8149                        qty: 1, // Default quantity
8150                        apply_discount: checkbox.attr('data-apply-discount') || 0 // Apply discount flag
8151                    });
8152                });
8153
8154                // console.log("addons:", addons);
8155
8156                // Build TicketPackages object
8157                TicketPackages = {
8158                    packages: [
8159                        {
8160                            id: $('#fld_' + fld).val(),
8161                            price: dataCost,
8162                            tax: dataTaxValue,
8163                            qty: 1,
8164                            isTaxInclusive: dataTax,
8165                            addons: addons
8166                        }
8167                    ],
8168                    discountCode: "",
8169                    formId: $('#formId').val(),
8170                    appId:  20550,
8171                    isGroupRegistration: 0,
8172                    isGroupMultipleSelect: 0,
8173                    enablePaymentForOnePackage: 0,
8174                    paymentMethodId: paymentMethodId
8175                };
8176
8177            }
8178
8179            var addonsDetails = {};
8180             var count=0;
8181
8182            $('.addonsvp input[type=checkbox]:checked').each(function () {
8183                 if(!isTicket && enableV5ApiDiscount){
8184                    var addonId = $(this).val();
8185                    var addonPrice = parseFloat($(this).data('price')) || 0;
8186                    var addonName = $(this).data('name');
8187                    var addonApplyDiscount = $(this).attr('data-apply-discount') || 0;
8188                      addonsDetails[count] = {
8189                            id: addonId,
8190                            price: addonPrice,
8191                            name: addonName,
8192                            qty: 1,
8193                            apply_discount: addonApplyDiscount
8194                        };
8195                        count++;
8196                    }
8197            });
8198             if(!isTicket && enableV5ApiDiscount){
8199                 var packageId = $('.package_list').val(); // Assuming package ID is retrieved correctly
8200
8201                // Find the correct package in the JSON structure
8202                TicketPackages.packages.forEach(function (pkg) {
8203                    if (pkg.id === packageId) {
8204                        pkg.addons = Object.values(addonsDetails); // Add the addons to the package's "addons" array
8205                    }
8206                });
8207             }
8208
8209
8210            const userListElements = document.getElementsByName("user_list[]");
8211            const userListValues = Array.from(userListElements).map(el => el.value);
8212
8213            updateCartFromUserList(userListValues);
8214            paymentSummaryObject.getOldFormPaymentSummaryDetails(TicketPackages);
8215
8216
8217
8218
8219        }
8220    }
8221    function updateCartFromUserList(userList) {
8222        userList.forEach((userData) => {
8223            if (!userData) {
8224                // Skip if userData is empty or null
8225                return;
8226            }
8227
8228            const userObj = JSON.parse(userData);
8229            const packageDetails = userObj.payment_details;
8230
8231            if (packageDetails && packageDetails.package_id) {
8232                const packageId = packageDetails.package_id;
8233                const packageQty = parseInt(packageDetails.package_qty) || 1;
8234
8235                // Check if the package already exists in the cart
8236                const existingPackage = TicketPackages.packages.find(pkg => pkg.id === packageId);
8237
8238                if (existingPackage) {
8239                    // Update quantity
8240                    existingPackage.qty += packageQty;
8241                } else {
8242                    // Add new package
8243                    TicketPackages.packages.push({
8244                        id: packageId,
8245                        price: packageDetails.package_amount,
8246                        tax: packageDetails.tax,
8247                        qty: packageQty,
8248                        isTaxInclusive: packageDetails.is_tax,
8249                        addons: [] // Addons can be handled separately if needed
8250                    });
8251                }
8252                // debugger;
8253                var fld = $('.cacl-disc').data('fld').toString();
8254                  if (userObj[`pmnt_addons_${packageDetails.fieldID}`]) {
8255                    const addonIds = userObj[`pmnt_addons_${packageDetails.fieldID}`];
8256
8257                    addonIds.forEach((addonId) => {
8258                        let addonPrice = $(`.addon-package${packageDetails.package_id} input`)
8259                                .filter(function() {
8260                                    return $(this).val() == addonId; // Compare the value
8261                                })
8262                                .data('price') || 0;
8263
8264
8265                         let addonName = $(`.addon-package${packageDetails.package_id} input`)
8266                                .filter(function() {
8267                                    return $(this).val() == addonId; // Compare the value
8268                                })
8269                                .data('name') || 0;
8270
8271                          let addonApplyDiscount = $(`.addon-package${packageDetails.package_id} input`)
8272                                .filter(function() {
8273                                    return $(this).val() == addonId; // Compare the value
8274                                })
8275                                .attr('data-apply-discount') || 0;
8276
8277
8278                        let existingAddon = existingPackage.addons.find(addon =>
8278 addon.id === addonId);
8279
8280                        if (existingAddon) {
8281                            // Increment addon quantity
8282                            existingAddon.qty += 1;
8283                        } else {
8284                            // Add new addon
8285                            existingPackage.addons.push({
8286                                id: addonId,
8287                                price: addonPrice,
8288                                name: addonName,
8289                                qty: 1,
8290                                apply_discount: addonApplyDiscount
8291                            });
8292                        }
8293                    });
8294                }
8295            }
8296        });
8297    }
8298
8299    function formValidationMessagePlace(error, element) {
8300        var elementType = element.attr("type");
8301        if (elementType == 'radio' || elementType == 'checkbox') {
8302            var elementName = element.attr("name");
8303            var q = $("input[name='" + elementName + "']:last");
8304            error.insertAfter(q);
8305        } else {
8306            error.insertAfter(element);
8307        }
8308    }
8309
8310
8311    function encodeSpecialCharaters (str) {
8312        if (str instanceof Array) {
8313            str = str.toString(); //convert array to string
8314            if(typeof str !== "undefined" && str !==null) {
8315                var strng =  str.replace(/&/g, "&amp;")
8316                    .replace(/"/g, "&quot;")
8317                    .replace(/'/g, "&apos;");
8318
8319                return strng.split(","); //convert string to array
8320            }
8321        }else {
8322
8323            if (typeof str !== "undefined" && str !== null) {
8324                return str.replace(/&/g, "&amp;")
8325                    .replace(/"/g, "&quot;")
8326                    .replace(/'/g, "&apos;");
8327            }
8328        }
8329    }
8330
8331
8332
8333
8334
8335
8336    $(document).ready(function () {
8337        var fields = '[]';
8338        var RegformID = "";
8339        var rules = {
8340            password: {
8341                policy_reset_arabic_num: false,
8342                policy_reset_roman_lower: false,
8343                policy_reset_roman_upper: false,
8344                policy_reset_special_characters: false,
8345                minlength: 0
8346            }
8347        };
8348
8349                    RegformID = "#form_84537";
8350        
8351                    $(RegformID).validate({
8352                rules: rules,
8353                errorPlacement: formValidationMessagePlace,
8354            });
8355                        // Make file inputs conditionally required based on hidden uploaded URL presence (only for app 19017)
8356            try {
8357                var $formB = $(RegformID);
8358                if ($formB.length && typeof $formB.validate === 'function') {
8359                    var vB = $formB.validate();
8360                    $formB.find('input[type="file"][data-ajax-upload="1"]').each(function(){
8361                        var $inp = $(this);
8362                        var msg = $inp.attr('data-msg-required') || 'This field is required.';
8363                        if (typeof $inp.rules === 'function') {
8364                            // Only apply conditional required rule if the field was originally required
8365                            var wasRequired = $inp.is('[required]') || String($inp.attr('data-rule-required')).toLowerCase() === 'true';
8366                            $inp.rules('remove', 'required');
8367                            $inp.removeAttr('required').removeAttr('data-rule-required');
8368                            if (wasRequired) {
8369                                $inp.rules('add', {
8370                                    required: {
8371                                        depends: function(el){
8372                                            var hidden = $(el).siblings('input[type="hidden"][data-uploaded-url="1"]');
8373                                            return !(hidden.length && hidden.val());
8374                                        }
8375                                    },
8376                                    messages: { required: msg }
8377                                });
8378                            }
8379                        }
8380                    });
8381                }
8382            } catch(e) {}
8383                    
8384        // Ensure required validation and error message for phone (tel) fields (intl-tel-input)
8385        $.validator.addMethod("requiredPhone", function(value, element) {
8386            value = (value || "").trim();
8387            if (value === "") return false;
8388            // Treat only country dial code as empty (e.g. +92, +1, +44)
8389            if (/^\+[0-9]{1,4}\s*$/.test(value)) return false;
8390            return true;
8391        }, "This field is required.");
8392        $(RegformID).find('input.tel-number[required], input[name="phone_number"][required]').each(function() {
8393            var $el = $(this);
8394            if (typeof $el.rules === 'function') {
8395                $el.rules('add', {
8396                    requiredPhone: true,
8397                    messages: { requiredPhone: 'This field is required.' }
8398                });
8399            }
8400        });
8401
8402        // override errors/messages translations
8403        
8404        var msg;
8405        $.each(JSON.parse(fields), function (index, value) {
8406            if (index == 'email') {
8407                // debugger;
8408                var nameArr = value.split(',{');
8409                var obj = nameArr[0];
8410                obj = obj.split('&quot;').join('"');
8411                obj = obj.split("&apos;").join("'");
8412        
8413                obj = eval("(" + (obj) + ")");
8414        
8415                $('input[name=' + index + ']').rules('add', obj);
8416                if (typeof nameArr[1] === 'undefined') {
8417                    return;
8418                }
8419                var msg = nameArr[1].substring(0, nameArr[1].length - 1);
8420
8421                jQuery.validator.addMethod("allowEmails", function (value, element, param) {
8422
8423                    var emails_split = msg.split(':');
8424
8425                    var check_inc = 0
8426                    $.each(emails_split, function (email_index, email_value) {
8427                        var replace = "regex";
8428                        var re = new RegExp(replace, "g");
8429
8430                        if (value.includes(email_value)) {
8431                            check_inc = 1;
8432                        }
8433                    });
8434                    if (check_inc == 1) {
8435                        return true;
8436                    } else {
8437                        return false;
8438                    }
8439                }, "Registration using this domain is not allowed.");
8440                jQuery.validator.addMethod("blockEmails", function (value, element, param) {
8441
8442                    var emails_split = msg.split(':');
8443
8444                    var elementId = $(element).attr('id');
8445
8446                    var check_inc = 0
8447                    $.each(emails_split, function (email_index, email_value) {
8448                        var replace = "regex";
8449                        var re = new RegExp(replace, "g");
8450                        if (value.includes(email_value)) {
8451                            check_inc = 1;
8452                        }
8453                    });
8454                    if (check_inc == 1) {
8455                        
8456                        $('span#'+elementId+'-error').remove();
8457                        return false;
8458                    } else {
8459                        return true;
8460                    }
8461                }, "Registration using this domain is not allowed.");
8462        
8463            } else {
8464                var obj = value.toString();
8465                obj = obj.split('&quot;').join('"');
8466                obj = obj.split("&apos;").join("'");
8467                obj = {regex: obj};
8468                $('input[name=' + index + ']').rules("add", obj);
8469            }
8470        });
8471
8472        $.validator.addMethod(
8473            "regex",
8474            function(value, element, regexp) {
8475                var re = new RegExp(regexp);
8476                return this.optional(element) || re.test(value);
8477            },
8478            "Please enter valid data."
8479        );
8480    });
8481</script>
8481
8482<link rel="stylesheet"
8483      href="https://vepimg.b8cdn.com/uploads/vjfnew/1157/content/files/1611130253intltelinput-css1611130253.css">
8484<script src="https://vepimg.b8cdn.com/uploads/vjfnew/1157/content/files/1611128901intltelinput-min-js1611128901.js"></script>
8484
8485
8486            
8487
8488<script>
8489
8490        window.closeModal = function(){
8491        $('#videoModal').modal('hide');
8492        $('.attendeOffcanvas').removeClass('show');
8493        $('.attendbackdrop').removeClass('show');
8494        if (typeof refreshSessionLimitedFieldAvailability === 'function') {
8495            refreshSessionLimitedFieldAvailability(null);
8496        }
8497    };
8498    window.changeIcon = function(last){
8499        //console.log(last)
8500        $('a.user-num'+last+' i').removeClass('fa-plus');
8501        $('a.user-num'+last+' i').addClass('fa-check');
8502        $('a.user-num'+last+' i').attr("aria-label","already added");
8503        $('a.user-num'+last+' i').attr("aria-polite","live");
8504        $('a.user-num'+last+' i').removeAttr("aria-hidden");
8505        $('a.user-num'+last+' i').parent().addClass('btn-success');
8506    };
8507    var fields_others = '[]';
8508    var file_name = '[]';
8509    var multiSelectPlaceholderMap = [] || {};
8510
8511    window.initFormSelect2 = function ($select, forceReinit) {
8512        if (!$select || !$select.length) {
8513            return;
8514        }
8515
8516        if ($select.hasClass('select2-hidden-accessible')) {
8517            if (!forceReinit) {
8518                return;
8519            }
8520            $select.select2('destroy');
8521        }
8522
8523        if (!forceReinit && $select.closest(':hidden').length) {
8524            return;
8525        }
8526
8527        var name = $select.attr('name');
8528        if (!name) {
8529            return;
8530        }
8531
8532        var fieldId = $select.attr('id') || '';
8533        var fieldName = name.replace(/^fld_/, '').replace(/\[\]$/, '');
8534        var $placeholder = $('#multi_placeholder_' + fieldName);
8535        var mappedPlaceholder = multiSelectPlaceholderMap[fieldId]
8536            || multiSelectPlaceholderMap['fld_' + fieldName]
8537            || '';
8538        var placeholder = mappedPlaceholder
8539            || (($placeholder.length && $placeholder.val()) ? $placeholder.val() : '')
8540            || "Please select all that apply";
8541        var isMultiple = $select.prop('multiple');
8542        var $dropdownParent = (fieldId ? $('#grp_fld_' + fieldId.replace(/^fld_/, '')) : $());
8543        if (!$dropdownParent.length) {
8544            $dropdownParent = $select.closest('.form_field_grp');
8545        }
8546        if (!$dropdownParent.length) {
8547            $dropdownParent = $select.closest('.event__form, .reg-form-data, form');
8548        }
8549        if (!$dropdownParent.length) {
8550            $dropdownParent = $(document.body);
8551        }
8552
8553        $select.select2({
8554            width: '100%',
8555            placeholder: placeholder,
8556            closeOnSelect: !isMultiple,
8557            dropdownParent: $dropdownParent
8558        });
8559
8560        $select.trigger('change.select2');
8561    };
8562
8563    $(document).ready(function () {
8564
8565        if(appId == 20576){
8566            $("<style>").prop("type", "text/css").html(`#form_88802 strong, #form_88802 p strong {font-weight: bold !important;}`).appendTo("head");
8567        }
8568
8569            $('#bypass').change(function() {
8570                if(this.checked) {
8571                    // $('.user-links').css("display", "none");
8572                    $('.packageBlock').css("visibility", "hidden");
8573                    $('.group_registration_label').css("display", "none");
8574                    $('.group-reg-block').css("height", "0px");
8575                    $('.packageBlock').css({
8576                        height: '0px',  // set to your desired height
8577                        width: '0px'    // set to your desired width
8578                    });
8579                    /* VFE-60354 - Group Reg - Hide it when package is one */
8580                                    }else{
8581                    // $('.user-links').css("display", "block");
8582                    $('.packageBlock').css("visibility", "visible");
8583                    $('.group_registration_label').css("display", "block");
8584                    $('.group-reg-block').css("height", "auto");
8585                    $('.packageBlock').css({
8586                        height: '',
8587                        width: ''
8588                    });
8589                                    }
8590                if (isTicket) {
8591                    // $('.user-links').hide();
8592                }
8593            })
8594
8595            $.loadScript = function (url, callback) {
8596                $.ajax({
8597                    url: url,
8598                    dataType: 'script',
8599                    success: callback,
8600                    async: true
8601                });
8602            }
8603            $.each(multiSelectPlaceholderMap, function (index, value) {
8604                if (index && value) {
8605                    window.initFormSelect2($('#' + index));
8606                }
8607            });
8608
8609            if ($('.searchable-select').length) {
8610                $('.searchable-select').each(function () {
8611                    if (!this || !$(this).length) {
8612                        return;
8613                    }
8614                    window.initFormSelect2($(this));
8615                });
8616            }
8617
8618            $(".chkall").click(function () {
8619                var selectID = $(this).data('id');
8620                if ($(this).is(':checked')) {
8621                    $('#' + selectID + " option").prop('selected', 'selected');
8622                } else {
8623                    $('#' + selectID + " option").removeAttr("selected");
8624                }
8625
8626                $('#' + selectID + " option").trigger("change");
8627                testOtherOption($('#' + selectID), $("#" + $(this).data('other-option')));
8628            });
8629
8630            $(".searchable-select").on("select2:select select2:unselect", function (e) {
8631                testOtherOption($(this));
8632            })
8633
8634            $('select').change(function () {
8635                testOtherOption($(this));
8636            });
8637
8638
8639                function testOtherOption(element, otherOptionElement = null) {
8640            var vals = element.val();
8641            if (!otherOptionElement) {
8642                otherOptionElement = $("#" + element.data('other-option'));
8643            }
8644
8645            if (otherOptionElement.length > 0) {
8646                if (vals && vals.indexOf("other") >= 0) {
8647                    otherOptionElement.css("display", "block");
8648                    if (element.is(':required')) {
8649                        otherOptionElement.find("input").prop('required', true);
8650                        otherOptionElement.find("input").addClass("req-chk");
8651                    }
8652                } else {
8653                    otherOptionElement.css("display", "none");
8654                    if (element.is(':required')) {
8655                        otherOptionElement.find("input").prop('required', false);
8656                        otherOptionElement.find("input").removeClass("req-chk");
8657                    }
8658                }
8659            }
8660        }
8661
8662
8663        if ("" == 'viewProfile') {
8664            $(".searchable-select").select2("enable", false);
8665        }
8666        let app_id = 20550;
8667        var intlElement = '';
8668        var input = document.querySelector(".tel-number");
8669        if(app_id == 18712){
8670            excludeCountries = ["il"];
8671            initialCountry = "kw";
8672        }else{
8673            excludeCountries = [];
8674            initialCountry = "auto";
8675        }
8676        if (input != null) {
8677            intlElement = window.intlTelInput(input, {
8678                initialCountry: initialCountry,
8679                geoIpLookup: function (callback) {
8680                    $.get('https://ipinfo.io', function () {
8681                    }, "jsonp").always(function (resp) {
8682                        var countryCode = (resp && resp.country) ? resp.country : "";
8683                        
8684                        callback(countryCode);
8685                    });
8686                },
8687                excludeCountries: excludeCountries,
8688                utilsScript: "https://vepimg.b8cdn.com/uploads/vjfnew/1157/content/files/1611129849utils-js1611129849.js?1585994360633" // just for formatting/placeholders etc
8689            });
8690
8691                        
8692                        setTimeout(function () {
8693                if(!input.value.includes("+"+intlElement.getSelectedCountryData().dialCode)){
8694                    // console.log("Phone Number: ", "+" + intlElement.getSelectedCountryData().dialCode + input.value);
8695                    let dialCode = intlElement.getSelectedCountryData().dialCode;
8696                    if(typeof input.value !== 'undefined' && typeof dialCode !== 'undefined' ){
8697                        input.value = "+" + dialCode + input.value;
8698                    }else{
8699                        input.value = "+";
8700                    }
8701                }
8702            }, 1500);
8703            
8704            // $(".iti.iti--allow-dropdown").addClass('col-8');
8705        }
8706
8707
8708                    $(".reg-form-data").submit(function (e) {
8709                
8710                // Trim leading/trailing spaces from text-like inputs before any processing
8711                $(this).find('input[type="text"], input[type="email"], input[type="url"], input[type="search"], input[type="number"], textarea').each(function () {
8712                    if (typeof this.value === 'string') {
8713                        this.value = this.value.trim();
8714                    }
8715                });
8716                // Validate .jfif files before any other processing
8717                if (!validateAllFileInputs(this)) {
8718                    e.preventDefault();
8719                    e.stopPropagation();
8720                    alert('Form cannot be submitted. Please remove all .jfif files and use JPG, PNG, or PDF format instead.');
8721                    
8722                    // Scroll to the first file input with error
8723                    var firstErrorInput = $(this).find('input[type="file"]').filter(function() {
8724                        return hasBlockedFileExtensions(this);
8725                    }).first();
8726                    
8727                    if (firstErrorInput.length > 0) {
8728                        firstErrorInput[0].scrollIntoView({ behavior: 'smooth', block: 'center' });
8729                        firstErrorInput.focus();
8730                    }
8731                    
8732                    return false;
8733                }
8734                
8735                                $(".addonp").attr('disabled', false);
8736
8737                $('.addonsvp input[type=checkbox]').each(function () {
8738
8739                    $(this).attr("disabled", false);
8740
8741                });
8742                var $isGroupRegistration = 0;
8743                var isGroupRegistration = 0;
8744        
8745                var $app_id = 20550;
8746                console.log("organizationId:",organizationId);
8747                if($isGroupRegistration && ($app_id == 16692 || $app_id == 17704 || organizationId== 107 ) && !parseInt(isTicket)){
8748                    let email = $('input[name="email"]').val().trim();
8749                    if(email == '') {
8750                        let randomEmail = 'user_' + Math.random().toString(36).substring(2, 8) + '@gmail.com';
8751                        $('input[name="email"]').val(randomEmail);
8752                        $('input[name="email"]').hide();
8753                        $('label[for="fld_1457939"]').hide();
8754                        $('label[for="fld_1470621"]').hide();
8755                    }
8756                }
8757                var post_url = $(this).attr('action');
8758
8759                // Check if bypass_auto element exists
8760                var checkUpgradeOrNo=true;
8761                if(userDetailsEditTicket){
8762                    checkUpgradeOrNo=false;
8763                }
8764
8765                // Check if user_list does not exist in post request or if it exists but is empty
8766                var userListInputs = $('input[name="user_list[]"]');
8767                var hasUserListData = false;
8768                
8769                if (userListInputs.length > 0) {
8770                    userListInputs.each(function() {
8771                        if ($(this).val() && $(this).val().trim() !== '') {
8772                            hasUserListData = true;
8773                            return false; // break the loop
8774                        }
8775                    });
8776                }
8777                
8778                // Check and update selected_data if email has changed
8779                var currentEmail = $('input[name="email"]').val();
8780                if (currentEmail && currentEmail.trim() !== '') {
8781                    currentEmail = currentEmail.trim();
8782                    
8783                    // Check if selected_data already exists in the form
8784                    var existingSelectedDataInput = $('input[name="selected_data"]');
8785                    if (existingSelectedDataInput.length > 0 && existingSelectedDataInput.val()) {
8786                        try {
8787                            var existingSelectedData = JSON.parse(existingSelectedDataInput.val());
8788                            var oldEmail = Object.keys(existingSelectedData)[0];
8789                            
8790                            // If the email in selected_data doesn't match the current email, update it
8791                            if (oldEmail && oldEmail !== currentEmail) {
8792                                console.log('Email changed from ' + oldEmail + ' to ' + currentEmail + '. Updating selected_data...');
8793                                
8794                                // Create new selected_data with the updated email
8795                                var updatedSelectedData = {};
8796                                updatedSelectedData[currentEmail] = existingSelectedData[oldEmail];
8797                                
8798                                // Remove old selected_data input
8799                                existingSelectedDataInput.remove();
8800                                
8801                                // Add new hidden input with updated selected_data
8802                                $('.reg-form-data').append('<input type="hidden" name="selected_data" value=\'' + JSON.stringify(updatedSelectedData) + '\'>');
8803                                
8804                                console.log('Updated Selected Data:', updatedSelectedData);
8805                            }
8806                        } catch (e) {
8807                            console.error('Error parsing existing selected_data:', e);
8808                        }
8809                    }
8810                }
8811                
8812                // If user_list doesn't exist or is empty, create selected_data from TicketPackages
8813                                if (!hasUserListData && typeof TicketPackages !== 'undefined' && Object.keys(TicketPackages).length > 0) {
8814                                    var selected_data = {};
8815                    
8816                    // Get the email from the form
8817                    var userEmail = $('input[name="email"]').val();
8818                    if (userEmail && userEmail.trim() !== '') {
8819                        selected_data[userEmail] = {};
8820                        
8821                        // Process TicketPackages to create the format
8822                        $.each(TicketPackages, function (packageId, packageData) {
8823                            if (!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
8824                                selected_data[userEmail][packageId] = {};
8825                                
8826                                // Get package quantity
8827                                if (packageData.pkg_qty) {
8828                                    selected_data[userEmail][packageId]['package_qty'] = parseInt(packageData.pkg_qty);
8829                                }
8830                                
8831                                // Get field addons
8832                                var fieldAddons = [];
8833                                $.each(packageData, function (key, item) {
8834                                    if (key !== 'pkg_price' && key !== 'total_price' && key !== 'tax' && 
8834key !== 'pkg_qty' && key !== 'symbol' && key !== 'isDonation') {
8835                                        if (item && item.id && item.addons_qty) {
8836                                            var addonsQty = parseInt(item.addons_qty);
8837                                            for (var i = 0; i < addonsQty; i++) {
8838                                                fieldAddons.push(parseInt(item.id));
8839                                            }
8840                                        }
8841                                    }
8842                                });
8843                                
8844                                if (fieldAddons.length > 0) {
8845                                    selected_data[userEmail][packageId]['field_addons'] = fieldAddons;
8846                                }
8847                            }
8848                        });
8849                        
8850                        // Add selected_data to the form by creating a hidden input
8851                        if (Object.keys(selected_data[userEmail]).length > 0) {
8852                            // Remove existing selected_data input if it exists
8853                            $('input[name="selected_data"]').remove();
8854                            
8855                            // Add new hidden input with selected_data
8856                            $('.reg-form-data').append('<input type="hidden" name="selected_data" value=\'' + JSON.stringify(selected_data) + '\'>');
8857                            
8858                            console.log('Selected Data:', selected_data);
8859                        }
8860                    }
8861                }
8862                
8863                if (($("#bypass_auto").length > 0 || ($("#bypass").length > 0 && $("#bypass").is(":checked")) ) && checkUpgradeOrNo && (!multipleTicketEdit)) {
8864                    // Initialize data object
8865                    var data = {};
8866
8867                    // Serialize form data
8868                    var formDataArray = $('.reg-form-data').serializeArray();
8869
8870                    // Process form data
8871                    formDataArray.forEach(function (field) {
8872                        if (field.name !== "user_list[]") {
8873                            if (field.name.indexOf("[]") !== -1) {
8874                                var fieldName = field.name.replace("[]", "");
8875                                if (!data[fieldName]) {
8876                                    data[fieldName] = [];
8877                                }
8878                                data[fieldName].push(field.value);
8879                            } else {
8880                                data[field.name] = field.value;
8881                            }
8882                        }
8883                    });
8884
8885                    var userData = [];
8886                    var userDataAddons = [];
8887
8888                    // Process TicketPackages data
8889                                        $.each(TicketPackages, function (packageId, package) {
8890                        if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
8891                            userDataAddons[packageId] = [];
8892                            $.each(package, function (key, item) {
8893                                if (key === 'pkg_qty') {
8894                                    userData[packageId] = parseInt(item);
8895                                }
8896                                if (key !== 'pkg_price' && key !== 'total_price' && key !== 'tax' && key !== 'pkg_qty' && key !== 'symbol') {
8897                                    if (item.id && item.addons_qty) {
8898                                        var addonsQty = parseInt(item.addons_qty);
8899                                        for (var i = 1; i < addonsQty + 1; i++) {
8900                                            userDataAddons[packageId].push(item.id);
8901                                        }
8902                                    }
8903                                }
8904                            });
8905                        }
8906                    });
8907                                        var counter = 1;
8908                    // Populate user data
8909                    $.each(userData, function (packageId, qty) {
8910                        if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
8911                            data.package = packageId;
8912                            var firstTimeCounter = 0;
8913                            for (var i = 1; i < qty + 1; i++) {
8914                                if (userDataAddons && userDataAddons[packageId] && firstTimeCounter === 0) {
8915                                    data.field_addons = userDataAddons[packageId];
8916                                    firstTimeCounter++;
8917                                } else {
8918                                    delete data.field_addons;
8919                                }
8920                                var value = JSON.stringify(data);
8921                                $("#user" + counter).val(value);
8922                                counter++;
8923                            }
8924                        }
8925                    });
8926                }
8927                appId = $('#appId').val();
8928                var totalTicketCount = 0;
8929                                    $.each(TicketPackages, function (packageId, package) {
8930                        if (!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
8931                            if (package['pkg_qty'] != '' && package['pkg_qty'] != undefined && !isNaN(package['pkg_qty'])) {
8932                                totalTicketCount += parseInt(package['pkg_qty'], 10);
8933                            }
8934                        }
8935                    });
8936                                    if (totalTicketCount > 1) {
8937                        $('input[name=partner_tag]').val('0');
8938                    }
8939                if (appId != 13170) {
8940                 
8941                    if ($('input[name=partner_tag]').val() == '1') {
8942                        if ($(document).find('.user-info-prev').length) {
8943                            $('.packageBlock .aPackage').remove();
8944                            if (assignDropdownFixAppIds.includes(Number(appId))) {
8945                                $('.packageContainer__head .dropdown .dropdown-btn').first().click();
8946                            } else {
8947                                $(document).find('#dropdown-btn').click();
8948                            }
8949
8950                            var isGroupRegistration = 0;
8951                            var isMultiTicket = 0;
8952                            var packageCount = $('.packageBlock').length;
8953
8954                            if (parseInt(isGroupRegistration) === 1 && !parseInt(isMultiTicket) && packageCount === 1) {
8955                                // Skip clicking user-info-prev
8956                                $('input[name="user_list[]"]').each(function() {
8957                                    $(this).val('');
8958                                });
8959                                var $packageContainer = $('.user-info-prev').closest('.packageContainer');
8960                                var count = $packageContainer.find('.packageContainer__head').attr("data-count",0);
8961                            } 
8962
8963                            // Add custom data attribute to identify source
8964                            $(document).find('.user-info-prev')
8965                              .attr('data-click-source', 'partner_tag_section')
8966                              .click();
8967                            remaining_addons = $('.packageBlock').attr('data-remaining-addons');
8968                            remaining_addons_ids = $('.packageBlock').attr('data-remaining-addons-ids');
8969                            $('.packageBlock .aPackage').attr('data-addonsname', remaining_addons);
8970                            $('.packageBlock .aPackage').attr('data-addons', remaining_addons_ids);
8971                            $('.packageBlock').attr('data-remaining-addons', '');
8972                            $('.packageBlock').attr('data-remaining-addons-ids', '');
8973                        }
8974                    }
8975                }
8976                // var data = $(this).serialize();
8977                // debugger;
8978                    
8979                // Empty remaining addons when both toggles are enabled and only one package is selected
8980                var autoTicketToBuyer = 0;
8981                var requireUniqueEmailsForParentAndChildUsers = 0;
8982                var totalPackagesOnPage = $('.packageBlock').length;
8983                if (parseInt(autoTicketToBuyer) === 1 && parseInt(requireUniqueEmailsForParentAndChildUsers) === 1 && totalPackagesOnPage === 1) {
8984                    $('.packageBlock').attr('data-remaining-addons', '');
8985                }
8986
8987
8988                if (appId == 10693) {
8989                    if($('#fld_1385834').val() != ''){
8990                        console.log($('#fld_1385834').val());
8991                        console.log('Guest Tickets');
8992                        console.log($('#fld_1392784').val());
8993                        guestUser=$('#fld_1392784').val()
8994                        console.log('ceremonyList');
8995                        console.log(ceremonyList);
8996                        var index = ceremonyList.indexOf($('#fld_1385834').val());
8997                        index=index+1;
8998                        console.log(index);
8999                        ceremonyIndex='ceremony'+index;
9000                        console.log('ceremonyIndex: '+ceremonyIndex);
9001                        console.log('ceremoniesComparison : ');
9002                        console.log(ceremoniesComparison);
9003                        // Get the remaining spots for ceremony1
9004                        let remaining = ceremoniesComparison[ceremonyIndex]['remaining'];
9005                        if(currentUserChild && currentUserChild >0){
9006                            parentChild=  currentUserChild + 1;
9007                            remaining=  remaining + parentChild;
9008                        }
9009                        console.log('remaining : '+remaining );
9010                        // Append options based on the number of remaining spots
9011                        if (remaining == 1) {
9012                            // No append when remaining == 1
9013                            //alert("Only 1 guest ticket available, no extra options will be added.");
9014                            $('#fld_1392784 option:gt(0)').remove();
9015
9016                            if ($('#fld_1392784 option[value="' + guestUser + '"]').length > 0) {
9017
9018                            } else {
9019                                alert('You cannot select Guest ticket, as have less capacity. You can proceed without it');
9020                                shouldRunStripeSubmit = false; 
9021                                return false;
9022                            }
9023                        } else if (remaining == 2) {
9024                            // Append only one option when remaining == 2
9025                            $('#fld_1392784 option:gt(1)').remove();
9026                            if ($('#fld_1392784 option[value="' + guestUser + '"]').length > 0) {
9027
9028                            } else {
9029                                alert('Please select Guest ticket, as previous selected is removed due to less capacity');
9030                                shouldRunStripeSubmit = false; 
9031                                return false;
9032                            }
9033
9034                        } else if (remaining == 3) {
9035                            // remainingOption=remaining-1;
9036                                $('#fld_1392784 option:gt(2)').remove();
9037                            if ($('#fld_1392784 option[value="' + guestUser + '"]').length > 0) {
9038
9039                            } else {
9040                                alert('Please select Guest ticket, as previous selected is removed due to less capacity');
9041                                shouldRunStripeSubmit = false; 
9042                                return false;
9043                            }
9044                        } else if (remaining > 3) {
9045                            remainingOption=remaining-1;
9046                            $('#fld_1392784 option:gt('+remainingOption+')').remove();
9047                            if ($('#fld_1392784 option[value="' + guestUser + '"]').length > 0) {
9048
9049                            } else {
9050                                alert('Please select Guest ticket, as previous selected is removed due to less capacity');
9051                                shouldRunStripeSubmit = false; 
9052                                return false;
9053                            }
9054                        }else{
9055                            alert('We are at capacity');
9056                            $('#fld_182262').prop('disabled', true);
9057                            shouldRunStripeSubmit = false; 
9058                            return false;
9059                        }
9060                    }
9061                }
9062
9063                
9064                var trackedSoldOutOffFields = [];
9065                (function captureTrackedSoldOutOffFields() {
9066                    var raw = $('#off_fields').val();
9067                    if (!raw) {
9068                        return;
9069                    }
9070                    if (Array.isArray(raw)) {
9071                        trackedSoldOutOffFields = raw.slice();
9072                        return;
9073                    }
9074                    try {
9075                        var parsed = JSON.parse(raw);
9076                        if (Array.isArray(parsed)) {
9077                            trackedSoldOutOffFields = parsed;
9078                            return;
9079                        }
9080                    } catch (captureErr) {}
9081                    trackedSoldOutOffFields = String(raw).split(',').map(function (item) {
9082                        return item.trim();
9083                    }).filter(Boolean);
9084                })();
9085
9086                var off_fields = new Array();
9087                                                // Other apps: original off_fields logic (no formHasSteps)
9088                $("form .form_field_grp").each(function (index) {
9089                    id = $(this).attr('id');
9090                    if ($('span#' + id).css('display') == "none" || $(this).find(".page-break-fields").css("display") === "none") {
9091                        if ($('span#' + id + ' input').attr('id')) {
9092                            off_fields.push($('span#' + id + ' input').attr('id'));
9093                        }
9094                        if ($('span#' + id + ' textarea').attr('id')) {
9095                            off_fields.push($('span#' + id + ' textarea').attr('id'));
9096                        }
9097                        if ($('span#' + id + ' select').attr('id')) {
9098                            off_fields.push($('span#' + id + ' select').attr('id'));
9099                        }
9100                        if ($('span#' + id + ' input[type="checkbox"]').attr('name')) {
9101                            let name = $('span#' + id + ' input[type="checkbox"]').attr('name');
9102                            off_fields.push(name.replace('[]', ''));
9103                        }
9104                        if ($('span#' + id + ' input[type="radio"]').attr('name')) {
9105                            let name = $('span#' + id + ' input[type="radio"]').attr('name');
9106                            off_fields.push(name.replace('[]', ''));
9107                        }
9108                    }
9109                });
9110                
9111
9112                                                                $('.form_field_grp[data-is-limit-field="1"]').each(function () {
9113                    var $grp = $(this);
9114                    var $column = $grp.closest('div[class*="col-"]');
9115                    if ($grp.is(':visible') && (!$column.length || $column.is(':visible'))) {
9116                        return;
9117                    }
9118                    var $select = $grp.find('select[id]').first();
9119                    if ($select.length) {
9120                        off_fields.push($select.attr('id'));
9121                        return;
9122                    }
9123                    var checkboxName = $grp.find('input[type="checkbox"][name]').first().attr('name');
9124                    if (checkboxName) {
9125                        off_fields.push(checkboxName.replace(/\[\]$/, ''));
9126                    }
9127                });
9128                if (trackedSoldOutOffFields.length) {
9129                    off_fields = off_fields.concat(trackedSoldOutOffFields);
9130                }
9131                off_fields = [...new Set(off_fields.filter(Boolean))];
9132                $('#off_fields').val(off_fields);
9133
9134                $(".others_check").each(function (index) {
9135                    if($(this).find('.col-12 > label:nth-of-type(2)').length){
9136                        error_label= $(this).find('.col-12 > label:nth-of-type(2)').clone();
9137                        $(this).find('.col-12 > label:nth-of-type(2)').remove();
9138                        $(this).after(error_label);
9139                    }
9140                });
9141
9142
9143                                e.preventDefault();
9144                
9145                // VFC-17411 - add receiptEmail in payment intent for stripe Element
9146                if(parseInt(isTicket) && (parseInt(isStripeElement)) ) {
9147                    // updateStripePaymentIntentInfoBeforeSubmit(total_price);
9148                }
9149
9150                var flag =0;
9151                $.each(JSON.parse(fields_others), function (index, value) {
9152                    if ($("#group_" + value).css('display') == 'block') {
9153                        if ($("#" + value).val() == '') {
9154                            $("#" + value + "-error").remove();
9155                            $("#" + value).after('<label id="' + value + '-error"  for="' + value + '" style="display: block; color: red;">This field is required.</label>');
9156                            flag = 1;
9157                        }
9158                        $("#" + value).on('keyup', function (e) {
9159                            if ($("#" + value).val() == '') {
9160                                $("#" + value + "-error").remove();
9161                                $("#" + value).after('<label id="' + value + '-error"  for="' + value + '" style="display: block; color: red;">This field is required.</label>');
9162                                shouldRunStripeSubmit = false; 
9163                                return false;
9164                            } else {
9165                                $("#" + value + "-error").remove();
9166                            }
9167                        });
9168                    }
9169
9170                });
9171
9172                                if(flag){
9173                    shouldRunStripeSubmit = false; 
9174                    return false;
9175                }
9176                
9177                if (!$(this).valid()) {
9178                    $("input[type=checkbox], input[type=radio]").each(function () {
9179                        if ($(this).siblings('.error').length != 0) {
9180                            var errorClone = $(this).siblings('label.error').clone();
9181                            $(this).siblings('label.error').remove();
9182                            $(this).parent('div').parent('div').after(errorClone);
9183                            errorClone.css('margin-left', '15px');
9184                        }
9185                    });
9186                                        $(".select2.select2-container").each(function () {
9187                        if ($(this).siblings('.error').length != 0) {
9188                            var errorClone = $(this).siblings('label.error').clone();
9189                            $(this).siblings('label.error').remove();
9190                            $(this).append(errorClone);
9191                        }
9192                    });
9193                                        shouldRunStripeSubmit = false;
9194                    return false;
9195                }
9196
9197
9198                $file_flag=0;
9199                $(JSON.parse(file_name)).each(function (key, val) {
9200                    const fi = document.getElementById(val);
9201                    // Check if any file is selected.
9202                    let app_id = 20550;
9203                    let originalSize = 5096;
9204                    if (app_id == 12279 || app_id == 13625 || app_id == 15344) {
9205                        originalSize = 150000;
9206                                            }
9207                    if (app_id == 10486) {
9208                        originalSize = 48830;
9209                                            }
9210                    if (app_id == 16205 || app_id == 15223) {
9211                        originalSize = 51200;
9212                                            }
9213                    if (app_id == 16656) {
9214                        originalSize = 256000;
9215                                          }
9216                    if (app_id == 15535) {
9217                        originalSize = 10240;
9218                                        }
9219                    if (app_id == 1000007457) {
9220                        originalSize = 10240;
9221                                            }
9222                    if (app_id == 1000002175) {
9223                        originalSize = 1048576;
9224                                            }
9225                    if (app_id == 1000003444) {
9226                        originalSize = 2097152;
9227                                            }
9228                    if (app_id == 18921 || app_id == 16729 || app_id == 21402 || app_id == 1000002791) {
9229                        originalSize = 48830;
9230                                        }
9231                    if (originalSize == 5096){
9232                                            }
9233                    if (fi.files.length > 0) {
9234                        for (i = 0; i <= fi.files.length - 1; i++) {
9235                            const fsize = fi.files.item(i).size;
9236                            const file = Math.round((fsize / 1024));
9237                            // The size of the file.
9238                            // console.log(file);
9239                            if (file >= originalSize) {
9240                                $file_flag = 1;
9241                                $("#" + val + "-error").remove();
9242                                $("#" + val).after('<label id="' + val + '-error" 
9242class="error" for="' + val + '" style="display: block; color: red;">File Size Too Large. Please upload a file up to 5 MB.</label>');
9243                            } else {
9244                                $("#" + val + "-error").remove();
9245                            }
9246                        }
9247                    }
9248                });
9249                                if($file_flag == 1){
9250                    shouldRunStripeSubmit = false; 
9251                    return false;
9252                }
9253                
9254
9255                if ($(".vfarisCaptcha").length) {
9256                    if (grecaptcha.getResponse() === "") {
9257                        alert('Error: \n Please validate the Captcha test');
9258                        return;
9259                    }
9260                }
9261
9262
9263                var syncedPhoneNumber = '';
9264                var telInput = document.querySelector(".tel-number");
9265                if (telInput != null) {
9266                    syncedPhoneNumber = syncPhoneNumberForSubmit();
9267                }
9268                var formData = new FormData(this);
9269                if (syncedPhoneNumber) {
9270                    formData.set('phone_number', syncedPhoneNumber);
9271                }
9272                                var qtyCount = 0;
9273                var $isGroupRegistration = 0;
9274                if ($isGroupRegistration != null && $isGroupRegistration == true) {
9275                    var groupEmails = "";
9276                    groupEmails = groupEmails.replace(/ /g, "+");
9277                    var groupEmailsArray = groupEmails.split(',');
9278                    formData.append("group_registration_value", $('.user_list').val());
9279                    formData.append("group_registration", true);
9280                    formData.append("post_submit", false);
9281                    formData.forEach(function(value, key) {
9282                        if (key.includes("qty") && value != '') {
9283                            qtyCount=parseInt(qtyCount) + parseInt(value);
9284                        }
9285                    });
9286                    $(".pmnt_fld option[value!='']").first().attr('selected');
9287
9288                    if (isTicket) {
9289                        if($('.edit-block-open').length == 0){
9290                            var savedPackage = localStorage.getItem("savedPackage");
9291                            var $packageContainer = $('#packageContainerBlock' + savedPackage, window.parent.document);
9292                            // Update data object
9293                            var data = {};
9294                            if (typeof $packageContainer !== 'undefined') {
9295                                if ($packageContainer.find('> .aPackage').length > 0) {
9296                                    $packageContainer.find('> .aPackage').each(function () {
9297                                        var $package = $(this);
9298                                        var pack_id = $package.attr("data-pack");
9299                                        var name = $package.find('.aPackage__detail__cell:nth-of-type(1) p').text();
9300                                        var email = $package.find('.aPackage__detail__cell:nth-of-type(2) p').text().replace(/\s/g, "");
9301                                        if (!data[email]) {
9302                                            data[email] = name + ',' + pack_id;
9303                                        }
9304                                    });
9305                                    current_email = $('input[name=email]').val();
9306                                    if (data[current_email] && isUniqueEmail==true) {
9307                                        $('.email-error').remove();
9308                                        $('input[name=email]').after('<label id="email-error" class="email-error" for="group" style="display: block; color: red;">Email already in use</label>');
9309                                        shouldRunStripeSubmit = false; 
9310                                        return false;
9311                                    }
9312                                }
9313                            }
9314                        }
9315
9316                    }
9317
9318
9319
9320
9321                } else {
9322                                        formData.append("group_registration_value", $('.user_list').val());
9323                    formData.append("group_registration", false);
9324                    formData.append("post_submit", true);
9325
9326                    formData.forEach(function(value, key) {
9327                        if (key.includes("qty") && value != '') {
9328                            qtyCount=parseInt(qtyCount) + parseInt(value);
9329                        }
9330                    });
9331
9332                    selected = $('.user_list').val();
9333
9334                    if(isTicket){
9335                        sumTotal=0;
9336                        let app_id = 20550;
9337                        let excluded_app_ids = [18834,18423, 17033,15625,14838,10401, 10397, 10710, 11778, 11759, 11755, 11772, 11866, 1000200,11866, 14376, 14377, 14525,14172,14838,14853,11561,15461,15741,16644,16279,16782,16783,18414,20463, 1000000441,22682,1000001317,1000001478, 10003234, 10003307, 1000008001];
9338                        let excluded_org_ids = ["78"];
9339                        if(!excluded_app_ids.includes(app_id) && !excluded_org_ids.includes(organizationId)){
9340                            if ($('.packageContainer .packageContainer__head', window.parent.document).length) {
9341                               $('.packageContainer .packageContainer__head', window.parent.document).each(function () {
9342                                var $package = $(this);
9343                                var oriTotal = $package.attr("data-ori-total");
9344                                sumTotal=parseInt(oriTotal)+sumTotal;
9345                            });
9346                            selected=sumTotal;
9347                            }
9348                        }else{
9349                            if ($('.packageContainer .packageContainer__head', window.document).length) {
9350                               $('.packageContainer .packageContainer__head', window.document).each(function () {
9351                                var $package = $(this);
9352                                var oriTotal = $package.attr("data-ori-total");
9353                                sumTotal=parseInt(oriTotal)+sumTotal;
9354                            });
9355                            selected=sumTotal;
9356                            }
9357                        }
9358
9359                    }
9360
9361                    count_value = 0;
9362
9363                    var groupEmailsArray = $("input[name='user_list[]']").map(function () {
9364                        if ($(this).val()) {
9365                            count_value++;
9366                            var obj = jQuery.parseJSON($(this).val());
9367                            if (obj.email) {
9368                                return obj.email;
9369                            } else {
9370                                return;
9371                            }
9372
9373                        }
9374                    }).get();
9375                    groupEmails = groupEmailsArray.join(",");
9376                    checkUpgradeOrNo=false;
9377                    if(userDetailsEditTicket && isTicket){
9378                        checkUpgradeOrNo=true;
9379                    }
9380
9381                    var appId = 20550;
9382                    // if(appId == 19899 && selected == 50 && count_value == 49 && $("#user100").val() != ""){
9383                    //     count_value=50;
9384                    // }
9385                    $("#group-error").remove();
9386
9387                    // Ticket group max: auto-assign remaining to parent before completeness check
9388                    if (typeof validateAndEnforceTicketGroupMaxOnSubmit === 'function' && !validateAndEnforceTicketGroupMaxOnSubmit()) {
9389                        shouldRunStripeSubmit = false;
9390                        return false;
9391                    }
9392
9393                    // Recalculate assignment count after possible auto-assign
9394                    count_value = 0;
9395                    groupEmailsArray = $("input[name='user_list[]']").map(function () {
9396                        if ($(this).val()) {
9397                            count_value++;
9398                            var obj = jQuery.parseJSON($(this).val());
9399                            if (obj.email) {
9400                                return obj.email;
9401                            } else {
9402                                return;
9403                            }
9404                        }
9405                    }).get();
9406                    groupEmails = groupEmailsArray.join(",");
9407
9408                    if (!$('.user-links').length == 0) {
9409                        if (selected != null && (isTicket ? selected > 1 : selected >= 1)) {
9410                            if (selected != count_value && selected !== undefined) {
9411                                var app_id = 20550;
9412                                // console.log('$("#bypass_auto").length');
9413                                // console.log($("#bypass_auto").length);
9414                                // App 3850 upgrade: bypass (checkbox or bypass_auto) skips ticket-vs-user count check when auto-assign does not fill every package row
9415                                var bypassSkipsGroupTicketCountCheck3850 = (parseInt(app_id, 10) === 3850 && ($("#bypass_auto").length > 0 || ($("#bypass").length > 0 && $("#bypass").is(":checked"))));
9416                                if((($("#bypass_auto").length == 0 && $("#bypass").length == 0) || checkUpgradeOrNo || (app_id == 22243 && $("#bypass").val() == 0)) && !bypassSkipsGroupTicketCountCheck3850){ //
9417                                    if(isTicket){
9418                                        if(isTicketTop){
9419                                            $('.user_list').after('<label id="group-error" class="error" for="group" style="display: block; color: red;">Please assign below tickets to user</label>');
9420                                        }else{
9421                                            $('.packageBlock').after('<label id="group-error" class="error" for="group" style="display: block; color: red;">Please assign below tickets to user</label>');
9422                                        }
9423
9424                                    }else{
9425                                        if (app_id == 9185) {
9426                                            $('.user_list').after('<label id="group-error" class="error" for="group" style="display: block; color: red;">Please add your spouse/partner details by clicking the button below - It is mandatory, if you wish to bring your spouse/partner to any of the events.</label>');
9427                                        } else {
9428                                            $('.user_list').after('<label id="group-error" class="error" for="group" style="display: block; color: red;">Secondary users are required, please add all Secondary user</label>');
9429                                        }
9430                                    }
9431
9432
9433                                    shouldRunStripeSubmit = false;        
9434                                return false;
9435                                }
9436                            }
9437                        }
9438                    }
9439                    $("#group-error").remove();
9440                    $('#edit-profile-extra-addon-error').remove();
9441                    var isGroupRegistrationField= '';
9442                    if(isTicket && isGroupRegistrationField){
9443                        var $packageBlock = $('.packageBlock');
9444                        remainingAddons = ($packageBlock.length && $packageBlock.attr("data-remaining-addons")) || undefined;
9445                        if (typeof remainingAddons !== "undefined" && remainingAddons != "") {
9446                            // Check if single package with single quantity is selected
9447                            // var isSinglePackage = $('.packageContainer').length === 1;
9448                            // var packageQty = isSinglePackage ? parseInt($('.packageContainer .packageContainer__head').attr("data-ori-total")) : 0;
9449                            
9450                            // if (isSinglePackage && packageQty === 1) {
9451                            //     // Single package with single quantity - empty the data-remaining-addons attribute
9452                            //     $('.packageBlock').attr("data-remaining-addons", "");
9453                            // } else {
9454                                // Multiple packages or single package with multiple quantity - show error
9455                                if(isTicketTop){
9456                                    $('.user_list').after('<label id="group-error" class="error" for="group" style="display: block; color: red;">Please assign the remaining addons: ' + remainingAddons + '</label>');
9457                                }else{
9458                                    $('.packageBlock').after('<label id="group-error" class="error" for="group" style="display: block; color: red;">Please assign the remaining addons: ' + remainingAddons + '</label>');
9459                                }
9460                                shouldRunStripeSubmit = false;
9461                                return false;
9462                            // }
9463                        }
9464                                            }
9465
9466                }
9467                var isGroupRegistration = 0;
9468                var isGroupRegistrationField = '';
9469                var simplifiedTicketAssignment = '';
9470                // simplifiedTicketAssignment=1;
9471                if (!(parseInt(isGroupRegistrationField) && parseInt(isGroupRegistration))) {
9472                payment_name=  $('input[name="optionsRadios"]:checked').data('name');
9473                price=$('.order__summary .price__item > div.total__price > span').text();
9474                var priceCheck = price.replace(/[^0-9.]/g, '');
9475                if (priceCheck != '0.00' && priceCheck != '0') {
9476
9477
9478                  
9479
9480                    if (parseInt(isTicket) && parseInt(isStripeElement) && payment_name == 'Stripe') {
9481
9482                        if (!isStripeValidation) {
9483                            shouldRunStripeSubmit = true; 
9484                            return false;
9485                        }
9486                    }
9487
9488
9489                    if (parseInt(isTicket) && parseInt(isStripeConnectElement) && payment_name == 'Stripe connect') {
9490
9491                        if (!isStripeValidation) {
9492                            shouldRunStripeSubmit = true; 
9493                            return false;
9494                        }
9495                    }
9496                }
9497
9498                }
9499                $(".addonp").attr('disabled', false);
9500                id=$('input[type="email"]').attr('id');
9501                $('#'+id+'-error').remove();
9502                if(groupEmailsArray.indexOf($('input[type="email"]').val()) !== -1){
9503                    // $('input[type="email"]').after('<label id="'+id+'-error" class="error" for="'+id+'" style="display: block; color: red;">Email must not contain these emails: '+groupEmails+'</label>');
9504                    // return false;
9505                }
9506
9507
9508
9509                payment_name=  $('input[name="optionsRadios"]:checked').data('name');
9510                if (parseInt(isTicket) && parseInt(isStripeElement) && payment_name =='Stripe' ) {
9511                    if(client_secret == ''){
9512                        formData.append("stripeToken", '');
9513                    }else{
9514                        formData.append("stripeToken", intent_id);
9515                    }
9516
9517                }
9518
9519
9520                if (parseInt(isTicket) && parseInt(isStripeConnectElement) && payment_name == 'Stripe connect') {
9521                    if (client_secret == '') {
9522                        formData.append("stripeToken", '');
9523                    } else {
9524                        formData.append("stripeToken", intent_id);
9525                    }
9526
9527                }
9528
9529                
9530                $("#LoadingBar").show();
9531                $("#LoadingBar")[0].scrollIntoView({ behavior: 'smooth', block: 'center' });
9532                
9533                
9534
9535       
9536                var appID = 20550;
9537                var isNewFormDataEmpty = false;
9538                if (parseInt(isTicket)) {
9539                    if (qtyCount == 1) {
9540                        var newFormData = new FormData();
9541                        formData.forEach(function (value, key) {
9542                            if (key === "user_list[]") {
9543                                // Skip adding 'user_list[]' to new FormData if 'qty' is found
9544                            } else {
9545                                newFormData.append(key, value);
9546                            }
9547                        });
9548                        isNewFormDataEmpty = true;
9549                                            }
9550                }
9551
9552
9553                $("input[type=submit]").attr('disabled', true);
9554                var dataToSend = isNewFormDataEmpty ? newFormData : formData;
9555                                // Convert FormData to JSON
9556                // OpenReplay disabled
9557                // if (typeof window.OpenReplay !== 'undefined') {
9558                //     var jsonOBJ = Object.fromEntries(dataToSend.entries());
9559                //     window.OpenReplay.event(
9560                //         'registrationData',
9561                //         jsonOBJ
9562                //     );
9563                // }
9564                if('0'  == '0'){
9565                    var filteredUsers = dataToSend.getAll('user_list[]').filter(function(item) { return item && item.length > 0; });
9566                    if (filteredUsers.length !== dataToSend.getAll('user_list[]').length) {
9567                        dataToSend.delete('user_list[]');
9568                        filteredUsers.forEach(function(item) { dataToSend.append('user_list[]', item); });
9569                    }
9570                }
9571                
9572                
9573                jQuery.ajax({
9574                    url: post_url,
9575                    data: dataToSend,
9576                    type: "POST",
9577                                        cache: false,
9578                    contentType: false,
9579                    processData: false,
9580                    success: function (response) {
9581
9582                        var app_id = 20550;
9583                        
9584                        // OpenReplay disabled
9585                        // if (typeof window.OpenReplay !== 'undefined') {
9586                        //     window.OpenReplay.event(
9587                        //         'registrationPOSTResponse_Success',
9588                        //         response
9589                        //     );
9590                        // }
9591                        if($('#custom_registration_form_url').length == 1){
9592                            if (typeof customRegistrationFormCallBack !== 'undefined') {
9593                                customRegistrationFormCallBack(response);
9594                                return false;
9595                            }
9596                        }
9597                        if($('#custom_registration_booth_form_url').length == 1){
9598                            if (typeof customRegistrationBoothFormCallBack !== 'undefined') {
9599                                customRegistrationBoothFormCallBack(response);
9600                                return false;
9601                            }
9602                        }
9603                        var response = eval('(' + response + ')');
9604                        var newUserData=null;
9605
9606
9607                        if (response.status === true) {
9608
9609                            if (enableV5EnhanceAvailabilityApi && !enhancedTicketAvailabilityObject.validatePackageAndAddonQtyAfterFormSubmit(enableV5EnhanceAvailabilityApi, isGroupBypassMember, response)) {
9610                                return false;
9611                            }
9612
9613                            if (response.holdCard) {
9614                                $('#cardModal .st-payment-title').text(response.name)
9615                                $('#cardModal .st-payment-des').text(response.description)
9616                                $('#cardModal .ticket-dec h3').text(response.symbol+''+response.amount)
9617                                $('#cardModal #card_success_page').val(response.success_page)
9618                                $('#cardModal #card_faliur_page').val(response.faliur_page)
9619                                $('#cardModal #card_url').val(response.url)
9620                                $('#cardModal #card_name').val(response.name)
9621                                $('#cardModal #card_user_type').val(response.user_type)
9622                                $('#cardModal #card_payment_method_id').val(response.payment_method_id)
9623                                $('#cardModal #card_user_id').val(response.user_id)
9624                                $('#cardModal #card_currency').val(response.currency)
9625                                $('#cardModal #card_amount').val(response.amount)
9626                                $('#cardModal #card_description').val(response.description)
9627                                $('#cardModal .card-title').text('Stripe Payment of '+response.amount)
9628                                $('#cardModal').modal('show');
9629                                // window.location.replace(response.submitURL);
9630                                return false;
9631                            }
9632                            if (response.stripeInForm) {
9633                                window.location.replace(response.submitURL);
9634                                return false;
9635                            }
9636                            if ($isGroupRegistration) {
9637                                var group = "";
9638                                var user_id = group.substring(4);
9639
9640                                if (response.post_data) {
9641                                    var syncedPhone = syncPhoneNumberForSubmit();
9642                                    if (syncedPhone) {
9643                                        response.post_data.phone_number = syncedPhone;
9644                                    }
9645                                    var phoneTelInput = document.querySelector('.tel-number, input[name="phone_number"]');
9646                                    var phoneIti = phoneTelInput ? getIntlTelInputInstance(phoneTelInput) : null;
9647                                    if (phoneIti && typeof phoneIti.getSelectedCountryData === 'function') {
9648                                        var phoneCountryData = phoneIti.getSelectedCountryData();
9649                                        if (phoneCountryData && phoneCountryData.iso2) {
9650                                            response.post_data.phone_country_iso = phoneCountryData.iso2;
9651                                        }
9652                                    }
9653                                }
9654
9655                                if (isTicket) {
9656                                    var savedPackage = localStorage.getItem("savedPackage");
9657                                    var TicketPackages = localStorage.getItem("TicketPackages");
9658                                    var TicketPackages = JSON.parse(TicketPackages);
9659                                    var all_addons_name="";
9660                                    var all_addons_name_box="";
9661                                    response.post_data.package = savedPackage;
9662                                    if(response.post_data.field_addons){
9663                                        var jsonfield_addons = response.post_data.field_addons;
9664                                        $.each(jsonfield_addons,function (packageId, package) {
9665                                             if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
9666                                                if(TicketPackages[savedPackage][package]['addons_name']){
9667                                                    if(all_addons_name == ''){
9668                                                        all_addons_name=TicketPackages[savedPackage][package]['addons_name'];
9669                                                        all_addons_name_box+='<span>'+TicketPackages[savedPackage][package]['addons_name']+'</span>';
9670                                                    }else{
9671                                                        all_addons_name+=', '+TicketPackages[savedPackage][package]['addons_name'];
9672                                                        all_addons_name_box+='<span>'+TicketPackages[savedPackage][package]['addons_name']+'</span>';
9673                                                    }
9674                                                }
9675                                            }
9676
9677
9678                                        });
9679
9680
9681                                    }else{
9682                                        var jsonfield_addons = '';
9683                                    }
9684
9685                                }
9686
9687                                // Save this child to user_list[] BEFORE recalculating limits so the current selection is included
9688                                window.parent.document.getElementById(group).value = JSON.stringify(response.post_data);
9689
9690                                if (window.parent && typeof window.parent.refreshSessionLimitedFieldAvailability === 'function') {
9691                                    window.parent.refreshSessionLimitedFieldAvailability(null);
9692                                } else if (window.parent && typeof window.parent.dynamicLimitDropdown === 'function') {
9693                                    var parentDropdownIds = window.parent.collectLimitedDropdownIds(window.parent.$(window.parent.document));
9694                                    window.parent.dynamicLimitDropdown(parentDropdownIds, 1);
9695                                }
9696
9697                                window.parent.closeModal();
9698                                var ret = group.replace('user', '');
9699                                const last = ret;
9700                                window.parent.changeIcon(last);
9701
9702                                /* JIRA Ticket - VFC-19349 */
9703                                
9704
9705                                var appID = 20550;
9706                                if (appID == 10084) {
9707                                    var post_of_secondary_user = response.post_data;
9708                                    var addonPrices = 0;
9709                                    var packageAmount = parseFloat(post_of_secondary_user.payment_details?.package_amount) || 0;
9710
9711                                    for (var prop in post_of_secondary_user) {
9712                                        if (prop.startsWith('pmnt_addons_')) {
9713                                            var addonID = prop.replace('pmnt_addons_', '');
9714                                            var fieldName = "pmnt_addons_" + addonID + "[]";
9715                                            var fieldValues = post_of_secondary_user[prop] || [];
9716                                            fieldValues.forEach(function (item) {
9717                                                var addonPrice = parseFloat(document.querySelector('input[type="checkbox"][name="' + fieldName + '"][value="' + item + '"]')?.getAttribute('data-price')) || 0;
9718                                                addonPrices += addonPrice;
9719                                            });
9720                                        }
9721                                    }
9722
9723                                    var totalAmount = packageAmount + addonPrices;
9724                                    var parentWindow = window.parent;
9725                                    if (parentWindow && parentWindow.document) {
9726                                        var childDocument = parentWindow.document;
9727                                        var elements = childDocument.getElementsByClassName('show_payment_response');
9728                                        var pmnt_fld_name = $('.pmnt_fld').attr('name');
9729                                        var symbol = $("select[name=" + pmnt_fld_name + "]").find(':selected').attr('data-symbol');
9730                                        if (elements.length > 0) {
9731                                            var user_number = parseFloat(ret) + parseFloat(1);
9732                                            elements[0].innerHTML += "<p><strong>Price for User " + user_number + ":</strong> " + totalAmount + " " + symbol + "</p>";
9733                                        }
9734                                    }
9735
9736                                }
9737                                 if (!isTicket && enableV5ApiDiscount){
9738                                 window.parent.getOldformTicketData();
9739                                 }
9740                                // window.parent.getOldformTicketData();
9741                                if (isTicket) {
9742                                    var selector = '.user-num' + user_id;
9743                                    var packageContainer = $('#packageContainerBlock' + savedPackage, window.parent.document);
9744                                    var packageExists = $('.aPackage' + user_id, packageContainer).length > 0;
9745                                    // EDIT SECTION
9746                                    if (packageExists) {
9747                                        if(simplifiedTicketAssignment){
9748                                            packageContainer.find('.aPackage' + user_id + ' .aPackage__detail .aPackage__detail__cell:nth-of-type(2) p').text(response.post_data.first_name + ' ' + response.post_data.last_name);
9749                                            packageContainer.find('.aPackage' + user_id + ' .aPackage__detail .aPackage__detail__cell:nth-of-type(3) p').text(response.post_data.email);
9750                                        }else{
9751                                            packageContainer.find('.aPackage' + user_id + ' .aPackage__detail .aPackage__detail__cell:nth-of-type(1) p').text(response.post_data.first_name + ' ' + response.post_data.last_name);
9752                                            packageContainer.find('.aPackage' + user_id + ' .aPackage__detail .aPackage__detail__cell:nth-of-type(2) p').text(response.post_data.email);
9753                                        }
9754
9755                                        if($('.edit-block-open').length > 0) {
9756                                            $('.packageContainer .aPackage', window.parent.document).each(function () {
9757                                                var $package = $(this);
9758                                                var block_id = $(this).attr("data-pack");
9759                                                var package_id = $(this).attr("data-package");
9760                                                if(simplifiedTicketAssignment){
9761                                                    var name = $package.find('.aPackage__detail__cell:nth-of-type(2) p').text();
9762                                                    var email = $package.find('.aPackage__detail__cell:nth-of-type(3) p').text().replace(/\s/g, "");
9763                                                }else{
9764                                                    var name = $package.find('.aPackage__detail__cell:nth-of-type(1) p').text();
9765                                                    var email = $package.find('.aPackage__detail__cell:nth-of-type(2) p').text().replace(/\s/g, "");
9766                                                }
9767
9768                                                if (response.post_data.email == email) {
9769                                                    if(block_id == user_id){
9770                                                        $(this).attr("data-addons",jsonfield_addons);
9771                                                        $(this).attr("data-addonsname",all_addons_name);
9772                                                        $(this).find(".addons").html(all_addons_name_box);
9773                                                    }
9774                                                    current_user_data = $('#user' + user_id, window.parent.document).val();
9775                                                    if (current_user_data) {
9776                                                        var jsonObject = JSON.parse(current_user_data);
9777                                                        jsonObject.package = package_id;
9778                                                        first_name = jsonObject.first_name;
9779                                                        last_name = jsonObject.last_name;
9780                                                        email = jsonObject.email;
9781
9782
9783                                                        replacing_block=$('#user' + block_id, window.parent.document).val();
9784                                                        var replacingJsonObject = JSON.parse(replacing_block);
9785                                                        if(block_id != user_id) {
9786                                                            jsonObject.field_addons=replacingJsonObject.field_addons;
9787                                                        }
9788
9789                                                        jsonObject = JSON.stringify(jsonObject);
9790                                                        $('#user' + block_id, window.parent.document).val(jsonObject);
9791                                                        if(simplifiedTicketAssignment){
9792                                                            $package.find('.aPackage__detail__cell:nth-of-type(2) p').text(first_name + ' ' + last_name);
9793                                                            $package.find('.aPackage__detail__cell:nth-of-type(3) p').text(email);
9794                                                        }else{
9795                                                            $package.find('.aPackage__detail__cell:nth-of-type(1) p').text(first_name + ' ' + last_name);
9796                                                            $package.find('.aPackage__detail__cell:nth-of-type(2) p').text(email);
9797                                                        }
9798
9799                                                    }
9800                                                }
9801                                            });
9802
9803                                            // Update data object
9804                                            var data = {};
9805                                            packageContainer.find('> .aPackage').each(function () {
9806                                                var $package = $(this);
9807                                                var pack_id = $package.attr("data-pack");
9808                                                if(simplifiedTicketAssignment){
9809                                                    var name = $package.find('.aPackage__detail__cell:nth-of-type(2) p').text();
9810                                                    var email = $package.find('.aPackage__detail__cell:nth-of-type(3) p').text().replace(/\s/g, "");
9811                                                }else{
9812                                                    var name = $package.find('.aPackage__detail__cell:nth-of-type(1) p').text();
9813                                                    var email = $package.find('.aPackage__detail__cell:nth-of-type(2) p').text().replace(/\s/g, "");
9814                                                }
9815
9816                                                if (!data[email]) {
9817                                                    data[email] = name + ',' + pack_id;
9818                                                }
9819                                            });
9820
9821                                            // Update dropdown menu
9822                                            var $dropdownMenu = packageContainer.find('.packageContainer__head .dropdown-menu-main');
9823                                            $dropdownMenu.find("li").slice(3).remove();
9824
9825                                            var flag=0;
9826                                            packageContainer.find('.dropdown-menu > li a').each(function () {
9827                                                var buyer= $(this).attr("data-buyer");
9828                                                var user= $(this).attr("data-user");
9829                                                if(buyer == 1){
9830                                                    flag=1;
9831                                                }
9832                                            });
9833                                            /* JIRA Ticket - VFC-19349 */
9834                                                                                            // 3
9835                                                Object.entries(data).forEac
9835h(function ([key, value]) {
9836                                                    value = value.split(",");
9837                                                    buyer=0;
9838                                                    if(key == $('input[name="email"]').val().trim()){
9839                                                        buyer=1;
9840                                                        value[0]=value[0]+' (Buyer)';
9841                                                    }
9842                                                    if ((buyer == 1 && flag == 1) || assignDropdownAlreadyHasEmail($dropdownMenu, key)) {
9843                                                        return;
9844                                                    }
9845                                                    $dropdownMenu.append('<li><a href="javascript:void(0)" class="user-info-prev" data-buyer="'+buyer+'" data-user="user' + value[1] + '"><p>' + value[0] + '</p><span>' + key + '</span></a></li>');
9846                                                    // $dropdownMenu.append('<li><a href="javascript:void(0)" class="user-info-prev" data-user="user' + value[1] + '"><p>' + value[0] + '</p><span>' + key + '</span></a></li>');
9847                                                });
9848                                                                                    }
9849                                    } else {
9850                                        var ori_total = packageContainer.find('.packageContainer__head').data("ori-total");
9851                                        var total = packageContainer.find('.packageContainer__head').data("total");
9852                                        var count = parseInt(packageContainer.find('.packageContainer__head').data("count")) + 1;
9853
9854                                        if (total == count) {
9855                                            packageContainer.find('.packageContainer__head .dropdown').hide();
9856                                        }
9857
9858                                        packageContainer.find('.packageContainer__head').attr("data-count", count);
9859
9860                                        // var package_name = packageContainer.find('.packageContainer__head > h3').text();
9861                                        // var package_name = package_name.substring(0, package_name.length - 5);
9862                                        var size = packageContainer.find('> .aPackage').length + 1;
9863                                        // package_name = package_name + ' (' + lenght + '/' + ori_total + ')';
9864                                        if (simplifiedTicketAssignment) {
9865                                            var package_name = packageContainer.find('> span.assigned-tickets').text().replace(/\d+\/\d+ tickets assigned/, '') + ' ' + size + '/' + ori_total + ' tickets assigned';
9866                                            packageContainer.find('> span.assigned-tickets').text(package_name);
9867                                        }else{
9868                                            var package_name = packageContainer.find('.packageContainer__head > h3').text().replace(/\s*\(\d+\/\d+\)/, '') + ' (' + size + '/' + ori_total + ')';
9869                                            packageContainer.find('.packageContainer__head > h3').text(package_name);
9870                                        }
9871
9872
9873
9874                                        ticketName='';
9875                                        ticketButtons='';
9876
9877                                        if (simplifiedTicketAssignment) {
9878                                            ticketName='<div class="aPackage__detail__cell aPackage__detail__width" style="width: 80px !important"><span></span><p>Ticket ' + user_id + '</p></div>';
9879                                            ticketButtons='<a href="javascript:void(0)" data-selector="'+selector+'" class="btn action-btn update-user-to-package"><i class="fa fa-pencil"></i>Edit</a>' +
9880                                                '<a href="javascript:void(0)" class="btn action-btn remove-block"><i class="fa fa-times"></i>Remove</a>';
9881                                        }else{
9882                                            ticketButtons = '<div class="dropdown"><a href="#" class="btn action-btn" data-toggle="dropdown"><i class="fa fa-pencil"></i> Edit</a>' +
9883                                                '<ul class="dropdown-menu dropdown-menu-edit dropdown-menu-right" role="menu"> ' +
9884                                                '<li><a href="javascript:void(0)" data-selector="'+selector+'" class="btn action-btn update-user-to-package"><i class="fa fa-pencil-alt"></i> Edit</a></li>' +
9885                                                '<li><a href="javascript:void(0)" class="btn action-btn remove-block"><i class="fa fa-pencil-alt"></i> Remove</a></li>' +
9886                                                '</ul></div>';
9887                                        }
9888
9889                                        var newPackage='<div class="aPackage aPackage' + user_id + '" data-pack="' + user_id + '" data-buyer="0" data-addonsname="'+all_addons_name+'" data-package="' + s
9889avedPackage + '" data-addons="' + jsonfield_addons + '">' +
9890                                            '<div class="aPackage__detail">' +
9891                                            ticketName +
9892                                            '<div class="aPackage__detail__cell aPackage__detail__width"><span>Name</span> <p>' + response.post_data.first_name + ' ' + response.post_data.last_name + '</p> </div> ' +
9893                                            '<div class="aPackage__detail__cell aPackage__detail__width">   <span>Email</span>  <p> ' + response.post_data.email + '</p> </div>' +
9894                                            '<div class="aPackage__detail__cell"><span>Addons</span><div class="addons">'+all_addons_name_box+'</div></div></div>' +
9895                                            '<div class="aPackage__actions">' +
9896                                            ticketButtons +
9897                                            '</div></div>';
9898
9899                                        /* JIRA Ticket - VFC-19349 */
9900                                        
9901                                        if (simplifiedTicketAssignment) {
9902                                            var fakePackage=".fakePackage"+user_id;
9903                                            packageContainer.find(fakePackage).after(newPackage);
9904                                            packageContainer.find(fakePackage).remove();
9905                                        }else{
9906                                            packageContainer.append(newPackage);
9907
9908                                        /* JIRA Ticket - VFC-19349 */
9909                                        /* Only add new user to assign list if duplicate email validation is off as user is already assigned to package after creation */
9910                                                                                    packageContainer.find('.dropdown-menu-main').append('<li><a href="javascript:void(0)" class="user-info-prev" data-user="user' + user_id + '"> <p>' + response.post_data.first_name + ' ' + response.post_data.last_name + '</p> <span>' + response.post_data.email + '</span></a></li>');
9911                                        
9912                                        newUserData = '<li><a href="javascript:void(0)" class="user-info-prev" data-user="user' + user_id + '">' +
9913                                                '<p>' + response.post_data.first_name + ' ' + response.post_data.last_name + '</p>' +
9914                                                '<span>' + response.post_data.email + '</span></a></li>';
9915
9916                                        }
9917
9918                                    }
9919
9920                                    //Check remaining Data
9921                                    var total_data={};
9922                                    $.each(TicketPackages, function (packageId, package) {
9923                                        if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
9924                                            total_data[packageId] = {};
9925                                            // Iterate through each item/package addon
9926                                            $.each(package, function (key, item) {
9927                                                if (key !== 'pkg_price' && key !== 'total_price' && key !== 'tax' && key !== 'pkg_qty' && key !== 'symbol') {
9928                                                    if (item.id && item.addons_qty) {
9929                                                        total_data[packageId][item.id] = item.addons_qty;
9930                                                    }
9931                                                }
9932                                            });
9933                                        }
9934                                    });
9935
9936
9937
9938                                    const used_data = Object.assign({}, total_data);
9939                                    $('.packageContainer .aPackage', window.parent.document).each(function () {
9940                                        var $package = $(this);
9941                                        var package_id = $package.attr("data-package");
9942                                        var addonsArray = $package.attr("data-addons");
9943                                        if (appID == 10004234 && !addonsArray) return true;
9944                                        // if(package_id == savedPackage){
9945                                        addonsArray = addonsArray.split(',');
9946
9947                                        $.each(addonsArray, function (key, value){
9948                                            value=parseInt(value);
9949                                            used_data[package_id][value]=parseInt(used_data[package_id][value]) - 1;
9950
9951                                        });
9952                                        // }
9953
9954
9955                                    });
9956                                    var remaining_addons="";
9957                                    var remaining_ids="";
9958                                    $.each(used_data, function (packageId, package) {
9959                                        if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
9960                                            $.each(package, function (key, item) {
9961                                                for (i = 0; i < parseInt(item); i++) {
9962                                                    if (remaining_addons == '') {
9963                                                        remaining_addons = TicketPackages[packageId][key]['addons_name'];
9964                                                        remaining_ids = TicketPackages[packageId][key]['id'];
9965                                                    } else {
9966                                                        remaining_addons += ', ' + TicketPackages[packageId][key]['addons_name'];
9967                                                        remaining_ids += ', ' + TicketPackages[packageId][key]['id'];
9968                                                    }
9969                                                }
9970
9971                                            });
9972                                        }
9973                                    });
9974
9975                                    $('.packageBlock', window.parent.document).attr('data-remaining-addons',remaining_addons);
9976                                    $('.packageBlock', window.parent.document).attr('data-remaining-addons-ids',remaining_ids);
9977
9978                                    /* JIRA Ticket - VFC-19349 */
9979                                    /* Only add new user to assign list if duplicate email validation is off as user is already assigned to package after creation */
9980                                                                            setAssignUserData(newUserData ,savedPackage);
9981                                    
9982                                    // Ticket group max: update assign UI after new other attendee is created/assigned (1 ticket only)
9983                                    if (typeof afterTicketAssignmentApplyGroupMaxRules === 'function' && response.post_data && response.post_data.email) {
9984                                        afterTicketAssignmentApplyGroupMaxRules(response.post_data.email);
9985                                    }
9986                                }
9987
9988                                return false;
9989                            }
9990                            if (response.processPayment) {
9991                                var message = "Payment Required, You will Be Redirected Shortly";
9992                                paymentRedirectionMessage(message);
9993
9994                                if (response.paymentResultForPayPal) {
9995                                    processPaypal(response.paymentResultForPayPal);
9996                                } else if (response.paymentResultForAuthorizenet) {
9997                                    //    {{-- This code is use for authorize.net payment method using checkout page mode --}}
9998                                    //response.paymentResultForAuthorizenet.stripe_element it contain the value checkout or card
9999                                    // if(20550 == 15208 || (response.paymentResultForAuthorizenet.hasOwnProperty('stripe_element') && response.paymentResultForAuthorizenet.stripe_element == '1')) {
10000                                        processAuthorizenetCheckout(response.paymentResultForAuthorizenet)
10001                                    // } else {
10002                                    //     processAuthorizenet(response.paymentResultForAuthorizenet)
10003                                    // }
10004                                } else if (response.paymentResultForPayMaya) {
10005                                    processPaymaya(response.paymentResultForPayMaya);
10006                                } else if (response.paymentResultForFatora) {
10007                                    processFatora(response.paymentResultForFatora);
10008                                } else if (response.paymentResultForFlutterwave) {
10009                                    processFlutterwave(response.paymentResultForFlutterwave);
10010                                } else if (response.paymentResultForMoyasar) {
10011                                    processMoyasar(response.paymentResultForMoyasar);
10012                                } else if (response.paymentResultForPayGate) {
10013                                    processPayGate(response.paymentResultForPayGate);
10014                                } else if (response.paymentResultForTouchnet) {
10015                                    processTouchnet(response.paymentResultForTouchnet);
10016                                } else if (response.paymentResultForTransact) {
10017                                    processTransact(response.paymentResultForTransact);
10018                                } else if (response.paymentResultForBlueSnap) {
10019                                    processBlueSnap(response.paymentResultForBlueSnap);
10020                                }  else if (response.paymentResultForSensePass) {
10021                                    processSensePass(response.paymentResultForSensePass);
10022                                }  else if (response.paymentResultForNelNet) {
10023                                    processNelNet(response.paymentResultForNelNet);
10024                                }else if (response.paymentResultForAffiniPay) {
10025                                   var lang= '/en/';
10026                                    processAffiniPay(response.paymentResultForAffiniPay,lang);
10027                                }else if (response.paymentResultForBraintree) {
10028                                    processBraintree(response.paymentResultForBraintree);
10029                                }else if (response.paymentResultForShuttle) {
10030                                    processShuttle(response.paymentResultForShuttle);
10031                                }else if (response.paymentResultForTapPayment) {
10032                                    processTapPayment(response.paymentResultForTapPayment);
10033                                }else if (response.paymentResultForStripeConnect) {
10034                                    location.replace(response.sessRet.url);
10035                                }else if(response.paymentResultForSnapPayPayment){
10036                                    processSnapPayment(response.paymentResultForSnapPayPayment);
10037
10038                                } else if (typeof someObject == 'undefined') $.loadScript('https://js.stripe.com/v3/', function () {
10039                                    try {
10040                                        var stripe = Stripe(response.pub_key);
10041                                        stripe.redirectToCheckout({
10042                                            sessionId: response.sessRet.sessionId,
10043                                        }).then(handleResult);
10044
10045                                    } catch (e) {
10046                                        message = 'Some thing went wrong while redirecting you to payment please try again.';
10047                                        paymentRedirectionMessage(message);
10048                                    }
10049                                })
10050                            }else if(response.processCheckout){
10051                                $('.row-content').html(response.html);
10052                            }else if(response.refundPayment){
10053                                location.replace(response.refundUrl);
10054                            } else {
10055                                message = '<div class="alert alert-success" role="alert"  style="  width: 100%;    font-size: 15px;"> Form is Successfully Submitted </div>';
10056                                $('form.reg-form-data').before(message);
10057                                $("html, body").animate({scrollTop: 0}, "slow");
10058                                var origin = window.location.origin;
10059
10060                                let appID = 20550;
10061                                let isEditProfile = false;
10062                                let isPasskeyAppEnabled = false;
10063
10064                                if (response.url) {
10065                                    if (response.url == 'home-page' || response.url == 'home') {
10066                                        location.replace(origin + '/en/');
10067                                    } else if(isPasskeyAppEnabled && !isEditProfile){
10068                                        location.replace(response.url);
10069                                    }else if( response.redirctType && response.redirctType == 'abstract'){
10070                                        parent.location.href = response.url;
10071                                        return true;
10072                                    } else {
10073                                        var currentUrl = window.location.href;
10074                                        if (currentUrl.includes("editProfileV2")) {
10075                                            var urlParams = new URLSearchParams(window.location.search); 
10076                                            var adminAccess = urlParams.get('admin_access'); 
10077                                            if (adminAccess === null || adminAccess === "") {
10078                                                var uniqueToken = $('#unique_token').val();
10079                                                if (uniqueToken && uniqueToken !== '') {
10080                                                    const path = '/al/';
10081                                                    const langPath = '/en';
10082                                                    const fullPath = origin + langPath + path + uniqueToken;
10083                                                    if (new URLSearchParams(window.parent.location.search).has('isMainManageAccount')) {
10084                                                        window.location.reload();
10085                                                    } else {
10086                                                        window.parent.location.href = fullPath;
10087                                                    }
10088                                                }
10089                                            }
10090                                        }
10091
10092                                        // if(response.show_survey_in_popup == false){
10093                                        //     window.parent.$('#vjfModal').modal('hide'); // Close the parent modal
10094                                        //     window.parent.$("#vjfWebinarModal").modal("hide");
10095                                        // }else{
10096                                            var loc = origin + '/en/' + response.url;
10097                                                                                        location.replace(loc);
10098                                        // }
10099                                    }
10100                                } else {
10101                                    
10102                                    var loc = origin + '/en/';
10103                                                                        location.replace(loc);
10104                                }
10105
10106                                setTimeout(function () {
10107                                    $('.fancybox-overlay').css("display", 'none');
10108                                }, 3000);
10109                            }
10110                        } else {
10111                            if (response.token_csrf_hash !== undefined) {
10112                                $('input[name="ci_csrf_token"]').val(response.token_csrf_hash);
10113                            }
10114                            if (response.errors !== undefined) {
10115                                if(response.errors.csrf_validation !== undefined){
10116                                    message = '<div class="alert alert-danger" role="alert"  style="  width: 100%;    font-size: 15px;">'+response.errors.csrf_validation+'</div>';
10117                                }else{
10118                                    if(response.sold !== undefined){
10119
10120                                        var userResponse = confirm("Package Sold Out. Unfortunately, the selected package(s) are no longer available for purchase. Please return to the previous page and select another package.");
10121                                        if (userResponse) {
10122                                            location.reload();
10123                                        } else {
10124
10125                                        }
10126                                    } else if(response.limit !== undefined) {
10127                                        // Get first message from limit response object
10128                                        var limitMessage = Object.values(response.errors)[0][0];
10129                                        var userResponse = confirm(limitMessage);
10130                                        if (userResponse) {
10131                                            location.reload();
10132                                        } else {
10133
10134                                        }    
10135                                    }else{
10136                                        message = '<div class="alert alert-danger" role="alert"  style="  width: 100%;    font-size: 15px;"> Please check validation errors </div>';
10137
10138                                        if (response && response.errors && app_id === 1000001481) {
10139                                            const errorKeys = Object.keys(response.errors);
10140
10141                                            // Existing SSO hidden/locked field errors
10142                                            const ssoErrorKeys = new Set([
10143                                                'fld_1618685',
10144                                                'fld_1618686',
10145                                                'email',
10146                                                'fld_1607356',
10147                                                'fld_1621761',
10148                                                'fld_1627759'
10149                                            ]);
10150
10151                                            // Hidden fields whose errors should also be shown globally
10152                                            const hiddenGlobalErrorKeys = new Set([
10153                                                'fld_1618615', // ticket validation
10154                                                'fld_1635355'  // discount code validation
10155                                            ]);
10156
10157                                            const hasSsoError = errorKeys.some(k => ssoErrorKeys.has(k));
10158                                            const hasHiddenValidationError = errorKeys.some(k => hiddenGlobalErrorKeys.has(k));
10159
10160                                            if (hasSsoError && !document.getElementById('sso_generic_error')) {
10161                                                message += '<div id="sso_generic_error" class="alert alert-danger" role="alert" style="width:100%;font-size:15px;">SSO Validation Failed, Please Refresh</div>';
10162                                            }
10163
10164                                            if (hasHiddenValidationError && !document.getElementById('registration_hidden_validation_error')) {
10165                                                let hiddenErrorMessage = '';
10166
10167                                                if (response.errors['fld_1618615']) {
10168                                                    hiddenErrorMessage = response.errors['fld_1618615'];
10169                                                } else if (response.errors['fld_1635355']) {
10170                                                    hiddenErrorMessage = response.errors['fld_1635355'];
10171                                                }
10172
10173                                                if (hiddenErrorMessage) {
10174                                                    message += '<div id="registration_hidden_validation_error" class="alert alert-danger" role="alert" style="width:100%;font-size:15px;">' + hiddenErrorMessage + '</div>';
10175                                                }
10176                                            }
10177                                        }
10178                                    }
10179                                }
10180                                if(response.errors.registration_code !== undefined){
10181                                    message = '<div class="alert alert-danger" role="alert"  style="  width: 100%;    font-size: 15px;">'+response.errors.registration_code+'</div>';
10182                                }
10183                                if(response.errors.rc_anchor_alert !== undefined){
10184                                    message = '<div class="alert alert-danger" role="alert"  style="  width: 100%;    font-size: 15px;">'+response.errors.rc_anchor_alert+'</div>';
10185                                }
10186
10187                                $(".alert-danger").remove();
10188                                $('form.reg-form-data').before(message);
10189
10190                                $.each(response.errors, function (key, val) {
10191                                    if(key == 'email' || key == 'card_month') {
10192                                        $error_name = $('input[name="' + key + '"]').attr("id") + "-error";
10193                                        var strippedString = val.replace(/<p>/g, '').replace(/<\/p>/g, '');
10194                                        var newText = $("<span id='" + $error_name + "' class='error' for='email'>").text(strippedString);
10195                                        $('input[name="' + key + '"]').parent().find(".error").remove();
10196                                        $('input[name="' + key + '"]').parent().find(".error").attr("id", "'" + $('input[name="' + key + '"]').attr("id") + "-error'");
10197                                        $('#' + $('input[name="' + key + '"]').attr("id")).attr("aria-describedby", "" + $('input[name="' + key + '"]').attr("id") + "-error");
10198
10199                                        $('input[name="' + key + '"]').parent().append(newText);
10200                                        $('input[name="' + key + '"]').addClass('has-error');
10201                                        $('input[name="' + key + '"]').addClass('error').removeClass("val
10201id");
10202                                        $('input[name="' + key + '"]').focus();
10203                                    } else if (key == 'profile_picture') {
10204                                        $('input[name="profile_picture"]').nextAll().eq(1).html(val).addClass('has-error');
10205                                    }else{
10206                                        //removeing HTML Tags
10207                                        val = val.replace(/(<([^>]+)>)/gi, "");
10208                                        $('input[name="' + key + '"]').addClass('has-error');
10209                                        $('input[name="' + key + '"]').removeClass("valid");
10210                                        $('input[name="' + key + '"]').next("span.text-danger").text(val).addClass('has-error');
10211                                        $('input[name="' + key + '"]').focus();
10212                                        $('select[name="' + key + '"]').addClass('has-error');
10213                                        $('select[name="' + key + '"]').removeClass("valid");
10214                                        $('select[name="' + key + '"]').next("span.text-danger").text(val).addClass('has-error');
10215                                        $('input[name="' + key + '"]').focus();
10216                                    }
10217                                });
10218                            } else {
10219                                message = '<div class="alert alert-danger" role="alert"  style="  width: 100%;    font-size: 15px;">' + response.error + '</div>';
10220                                $(".alert-danger").remove();
10221                                $('form.reg-form-data').before(message);
10222                            }
10223                            $("html, body").animate({scrollTop: 0}, "slow");
10224                        }
10225                        //$('.alert').fadeOut(4000);
10226                    },
10227                    error: function (response, status, error) {
10228                        // OpenReplay disabled
10229                        // if (typeof window.OpenReplay !== 'undefined') {
10230                        //     window.OpenReplay.event(
10231                        //         'registrationPOSTResponse_error',
10232                        //         {
10233                        //             "response":response,
10234                        //             "status":status,
10235                        //             "error":error,
10236                        //         }
10237                        //     );
10238                        // }
10239                        message = '<div class="alert alert-danger" role="alert" style="  width: 100%;    font-size: 15px;"> ' + response.message + '</div>';
10240                        $(".alert-danger").remove();
10241                        $('form.reg-form-data').before(message);
10242                        //$('.alert').fadeOut(4000);
10243                        if($('.pagebreak-steps-main').length >0 ) {
10244                            showPageBreakError();
10245                        }
10246                    },
10247                    complete: function () {
10248                        $("#LoadingBar").hide();
10249                        $("input[type=submit]").attr('disabled', false);
10250                        if($('.pagebreak-steps-main').length >0 ) {
10251                            showPageBreakError();
10252                        }
10253                    }
10254                });
10255                // }
10256                return false
10257            });
10258                        setTimeout(function () {
10259                var pmnt_fld_name = $('.pmnt_fld').attr('name');
10260                if (pmnt_fld_name) {
10261                    var symbol = $("select[name=" + pmnt_fld_name + "]").find(':selected').attr('data-symbol');
10262                    if (symbol) {
10263                        // console.log(symbol);
10264                        var id = pmnt_fld_name.substr(pmnt_fld_name.length - 5);
10265                        id = id.replace('_', '');
10266                        id = id.replace('d', '');
10267                        id = id.replace('l', '');
10268                        // console.log(id);
10269                        $("#fld_" + id + " > option").each(function () {
10270
10271                            var dataprice = $(this).attr('data-price');
10272                            if (dataprice) {
10273                                $(this).text(dataprice + '' + symbol);
10274                            }
10275                        });
10276                    }
10277                }
10278
10279            }, 1000);
10280
10281
10282            $("input[type=radio], select").on('change', function () {
10283                // debugger;
10284                var elementName = $(this).attr('name');
10285                var elementValue = $(this).val();
10286                var id = elementName.substr(elementName.length - 5);
10287
10288                if (elementName.indexOf("pmnt_fld") >= 0) {
10289                    id = id.replace('_', '');
10290                    id = id.replace('d', '');
10291                    id = id.replace('l', '');
10292                    // console.log(ild);
10293                    // console.log('yes');
10294                    if (elementValue != '') {
10295                        var symbol = $(this).find(':selected').attr('data-symbol');
10296
10297                        $("#fld_" + id + " > option").each(function () {
10298
10299                            var dataprice = $(this).attr('data-price');
10300                            if (dataprice) {
10301                                $(this).text(dataprice + '' + symbol);
10302                            }
10303                            // console.log(this.text + ' ' + this.value+ ' '+ dataprice);
10304
10305                        });
10306
10307                    } else {
10308                        $("#fld_" + id + " > option").each(function () {
10309                            var dataprice = $(this).attr('data-price');
10310                            $(this).text(dataprice)
10311                        });
10312                    }
10313                } else {
10314                    // console.log('no');
10315                }
10316
10317                var otherElementName = elementName.replace('[]', '_other');
10318
10319
10320                // console.log(elementValue);
10321
10322                // if ($("#" + otherElementName).length == 0) {
10323                //     return true;
10324                // }
10325                if ($.isArray(elementValue)) {
10326                    // Handle multi-select dropdowns
10327                    if (elementValue && elementValue.length > 0) {
10328                        // Check if 'other' is in the selected values
10329                        var hasOther = elementValue.some(function(value) {
10330                            return value && value.toLowerCase() === 'other';
10331                        });
10332                        
10333                        if (hasOther) {
10334                            $("#group_" + otherElementName).show();
10335                        } else {
10336                            $("#group_" + otherElementName).hide();
10337                            // $("#"+otherElementName).val('');
10338                        }
10339                    } else {
10340                        // No values selected, hide other field
10341                        $("#group_" + otherElementName).hide();
10342                        // $("#"+otherElementName).val('');
10343                    }
10344                } else {
10345                    // Handle single-select dropdowns
10346                    if (elementValue && elementValue.toLowerCase() == 'other') {
10347                        $("#group_" + otherElementName).show();
10348                    } else {
10349                        $("#group_" + otherElementName).hide();
10350                        // $("#"+otherElementName).val('');
10351                    }
10352                }
10353
10354            });
10355
10356        if (window.location.href.indexOf("saregistration.sport/en/form/editProfileV2") < 0) {
10357            $("input[type=checkbox]").on('change', function () {
10358                var elementName = $(this).attr('name');
10359                var otherElementName = elementName.replace('[]', '_other');
10360                var elementValue = $(this).val();
10361
10362                if (elementValue && elementValue.toLowerCase() == 'other') {
10363                    if ($(this).is(':checked')) {
10364                        $("#group_" + otherElementName).show();
10365                    } else {
10366                        $("#group_" + otherElementName).hide();
10367                        $("#" + otherElementName).val('');
10368                    }
10369                }
10370            });
10371        } else {
10372            ///////////////////////////////////////////////
10373
10374            //FOR DURING-EVENT
10375            // Get references to the checkboxes
10376            var $duringevent1 = $('#duringevent1');
10377            var $duringevent2 = $('#duringevent2');
10378            var $duringevent3 = $('#duringevent3');
10379
10380            // Add a click event handler to duringevent1 checkbox
10381            // $duringevent1.click(function() {
10382            $(document).on('click', '#duringevent1', function () {
10383                if ($duringevent1.is(':checked')) {
10384
10385
10386                    //$(".addnopkg input[type='checkbox']").prop("checked", false);
10387                    //$(".addnopkg input[type='checkbox']:eq(3)").prop("checked", false);
10388                    //$(".addnopkg input[type='checkbox']:eq(4)").prop("checked", false);
10389                    //$(".addnopkg input[type='checkbox']:eq(5)").prop("checked", false);
10390
10391                    var textToCheck = "Cultural activities – F1 Arcade";
10392                    $("input[type='checkbox']").filter(function () {
10393                        return $(this).attr("data-name") === textToCheck;
10394                    }).prop("checked", true).trigger("change");
10395
10396                    //$duringevent2.prop('disabled', true);
10397                    // $duringevent3.prop('disabled', true);
10398                } else {
10399
10400
10401                    //$duringevent2.prop('disabled', false);
10402                    //$duringevent3.prop('disabled', false);
10403
10404                    var textToCheck = "Cultural activities – F1 Arcade";
10405                    $("input[type='checkbox']").filter(function () {
10406                        return $(this).attr("data-name") === textToCheck;
10407                    }).prop("checked", false).trigger("change");
10408                }
10409            });
10410
10411            // Add a click event handler to duringevent2 checkbox
10412            $duringevent2.click(function () {
10413                // $(document).on('click', '#duringevent2', function(){
10414                if ($duringevent2.is(':checked')) {
10415
10416
10417                    //$(".addnopkg input[type='checkbox']").prop("checked", false);
10418                    // $(".addnopkg input[type='checkbox']:eq(3)").prop("checked", false);
10419                    // $(".addnopkg input[type='checkbox']:eq(4)").prop("checked", false);
10420                    // $(".addnopkg input[type='checkbox']:eq(5)").prop("checked", false);
10421
10422                    var textToCheck = "Cultural activities – Guided Tour of Villa Park";
10423                    $("input[type='checkbox']").filter(function () {
10424                        return $(this).attr("data-name") === textToCheck;
10425                    }).prop("checked", true).trigger("change");
10426
10427                    //$duringevent1.prop('disabled', true);
10428                    //$duringevent3.prop('disabled', true);
10429                } else {
10430
10431                    var textToCheck = "Cultural activities – Guided Tour of Villa Park";
10432                    $("input[type='checkbox']").filter(function () {
10433                        return $(this).attr("data-name") === textToCheck;
10434                    }).prop("checked", false).trigger("change");
10435
10436                    //$duringevent1.prop('disabled', false);
10437                    //$duringevent3.prop('disabled', false);
10438                }
10439            });
10440
10441            // Add a click event handler to duringevent3 checkbox
10442            $duringevent3.click(function () {
10443                if ($duringevent3.is(':checked')) {
10444
10445
10446                    //$(".addnopkg input[type='checkbox']").prop("checked", false);
10447                    // $(".addnopkg input[type='checkbox']:eq(3)").prop("checked", false);
10448                    // $(".addnopkg input[type='checkbox']:eq(4)").prop("checked", false);
10449                    // $(".addnopkg input[type='checkbox']:eq(5)").prop("checked", false);
10450
10451                    var textToCheck = "Cultural activities – Jewellery Quarter Sports Heritage Tour1";
10452                    $("input[type='checkbox']").filter(function () {
10453                        return $(this).attr("data-name") === textToCheck;
10454                    }).prop("checked", true).trigger("change");
10455
10456                    // $duringevent1.prop('disabled', true);
10457                    // $duringevent2.prop('disabled', true);
10458                } else {
10459
10460                    var textToCheck = "Cultural activities – Jewellery Quarter Sports Heritage Tour1";
10461                    $("input[type='checkbox']").filter(function () {
10462                        return $(this).attr("data-name") === textToCheck;
10463                    }).prop("checked", false).trigger("change");
10464                    $duringevent1.prop('disabled', false);
10465                    $duringevent2.prop('disabled', false);
10466                }
10467            });
10468
10469            $("#fld_1304371, #fld_1304372").on("change", function () {
10470
10471                var checkInDate = new Date($("#fld_1304371").val());
10472                var checkOutDate = new Date($("#fld_1304372").val());
10473//console.log(checkInDate);
10474//$("#grp_fld_1304372 .text-danger").text('');
10475                $(".error-message-dateDif").remove();
10476                /*  if (checkInDate >= checkOutDate) {
10477
10478              console.log("if");
10479                       $("#fld_1304372").val('');
10480
10481              if ($(".error-message-dateDif").length === 0 && checkInDate >= checkOutDate) {
10482              console.log("if2");
10483                  //var errorMessage = $('<span>').attr('class', 'error-message-dateDif').text('Checkout date must be greater than check-in date').css('color', 'red');
10484                  var errorMessage = '<span class="error-message-dateDif">Checkout date must be greater than check-in date</span>';
10485                 //$(".error-message-dateDif").show();
10486                 console.log(errorMessage);
10487                  $("#grp_fld_1304372 .text-danger").text('Checkout date must be greater than check-in date');
10488                  return false;
10489              }
10490                      return false;
10491                  }
10492
10493              else if (checkInDate < checkOutDate) {
10494              console.log("else");
10495                  var errorMessage = $('<span>').attr('class', 'error-message-dateDif').text('').css('color', 'red');
10496                  $("#fld_1304372").after(errorMessage);
10497              $("#grp_fld_1304372 .text-danger").text('');
10498              }
10499                       */
10500                // console.log("inside the days diff")
10501
10502                var checkInDate = $("#fld_1304371").val();
10503                var checkOutDate = $("#fld_1304372").val();
10504
10505                if (checkInDate && checkOutDate) {
10506                    /*var startDate = new Date(checkInDate);
10507                    var endDate = new Date(checkOutDate);
10508
10509                    var timeDifference = Math.abs(endDate.getTime() - startDate.getTime());
10510                    var daysDifference = Math.ceil(timeDifference / (1000 * 3600 * 24));*/
10511// Split the date string into day, month, and year
10512                    var checkInParts = checkInDate.split('/');
10513                    var checkOutParts = checkOutDate.split('/');
10514
10515// Create a new Date object using the correct format (MM/DD/YYYY)
10516                    var startDate = new Date(checkInParts[2], checkInParts[1] - 1, checkInParts[0]);
10517                    var endDate = new Date(checkOutParts[2], checkOutParts[1] - 1, checkOutParts[0]);
10518
10519// Calculate the time difference
10520                    var timeDifference = Math.abs(endDate.getTime() - startDate.getTime());
10521
10522// Convert time difference to days
10523                    var daysDifference = Math.ceil(timeDifference / (1000 * 3600 * 24));
10524
10525                    var tDifference = endDate.getTime() - startDate.getTime();
10526                    console.log(tDifference);
10527                    $("#grp_fld_1304372 .text-danger").text('');
10528                    if (tDifference < 0) {
10529                        $("#fld_1304372").val('');
10530                        $("#grp_fld_1304372 .text-danger").text('Checkout date must be greater than check-in date');
10531                        return false;
10532                    }
10533                    if ($("#dayDifference").length === 0) {
10534                        // Create the new div and add it below "Check Out"
10535                        $('#nightslabel').remove();
10536                        $("<p id='nightslabel'> <b> No. of nights to be reserved:</b> </p><div id='dayDifference' style='color: red;'>").insertAfter("#grp_fld_1304372");
10537                    }
10538
10539//////////////////////////////////////////////////////////4,5,13,14 days checks//////////////////////////////////////////////////////
10540
10541
10542                    if (shoulderdatesNew.includes(parseInt($('#fld_1304368').val()))) {
10543
10544                        var allDates = [];
10545
10546                        if ($('#shoulderapril4').is(':checked')) {
10547                            $('#shoulderapril4').trigger('click');
10548                        }
10549                        if ($('#shoulderapril5').is(':checked')) {
10550                            $('#shoulderapril5').trigger('click');
10551                        }
10552                        if ($('#shoulderapril13').is(':checked')) {
10553                            $('#shoulderapril13').trigger('click');
10554                        }
10555                        if ($('#shoulderapril14').is(':checked')) {
10556                            $('#shoulderapril14').trigger('click');
10557                        }
10558
10559
10560                        //for (var i = 1; i <= daysDifference + 1; i++) {
10561                        for (var i = 1; i <= daysDifference; i++) {
10562                            var currentDate = new Date(startDate);
10563                            currentDate.setDate(startDate.getDate() + i);
10564                            allDates.push(currentDate.toISOString().split('T')[0]); // Store the date in 'YYYY-MM-DD' format
10565                            var dayOfMonth = currentDate.getDate();
10566                            // console.log("Day of Month", dayOfMonth)
10567                        }
10568                        // console.log("All Dates:", allDates);
10569
10570                        $.each(allDates, function (index, date) {
10571                            var dayOfMonth = new Date(date).getDate();
10572                            switch (dayOfMonth) {
10573                                case 4:
10574// $("#shoulderapril4").prop("checked", true);
10575//$("#shoulderapril4").click();
10576
10577                                    $("#shoulderapril4").trigger("click");
10578
10579                                    break;
10580                                case 5:
10581//           $("#shoulderapril5").prop("checked", true);
10582//$("#shoulderapril5").click();
10583                                    $("#shoulderapril5").trigger("click");
10584                                    break;
10585                                case 12:
10586                                    //$("#shoulderapril13").prop("checked", true);
10587//$("#shoulderapril13").click();
10588                                    $("#shoulderapril13").trigger("click");
10589                                    break;
10590                                case 13:
10591                                    //$("#shoulderapril14").prop("checked", true);
10592//$("#shoulderapril14").click();
10593                                    $("#shoulderapril14").trigger("click");
10594                                    break;
10595                            }
10596                        });
10597
10598                    }
10599////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
10600                    $("#dateDifference").text(daysDifference);
10601                    $("#dayDifference").text(daysDifference);
10602
10603
10604                } else {
10605                    // Remove the "Day Difference" div if dates are not filled
10606                    $("#dayDifference").remove();
10607                    $('#fld_1304410').on('change', function () {
10608                        if ($(this).val() === 'No') {
10609                            $("#dayDifference").remove();
10610                            $("#nightslabel").remove();
10611
10612                        }
10613
10614
10615                    });
10616
10617                }
10618            });
10619
10620
10621            //FOR DAY 1
10622            $("#day1s").click(function () {
10623                var checkedValues = [];
10624                $("input[type='checkbox'][id^='day1s']").each(function () {
10625                    if ($(this).is(":checked")) {
10626                        checkedValues.push($(this).val());
10627                    }
10628                });
10629                $("#grp_fld_17303 input").val(checkedValues.join(','));
10630                console.log($("#grp_fld_17303 input").val())
10631            });
10632//FOR DAY 2
10633            $("#day2s").click(function () {
10634                var checkedValues = [];
10635                $("input[type='checkbox'][id^='day2']").each(function () {
10636                    if ($(this).is(":checked")) {
10637                        checkedValues.push($(this).val());
10638                    }
10639                });
10640                $("#grp_fld_17304 input").val(checkedValues.join(','));
10641                console.log($("#grp_fld_17304 input").val())
10642            });
10643//FOR DAY 3
10644            $("#day3s").click(function () {
10645                var checkedValues = [];
10646                $("input[type='checkbox'][id^='day3']").each(function () {
10647                    if ($(this).is(":checked")) {
10648                        checkedValues.push($(this).val());
10649                    }
10650                });
10651                $("#grp_fld_17305 input").val(checkedValues.join(','));
10652                console.log($("#grp_fld_17305 input").val())
10653            });
10654//FOR DAY 4
10655            $("#day4s").click(function () {
10656                var checkedValues = [];
10657                $("input[type='checkbox'][id^='day4']").each(function () {
10658                    if ($(this).is(":checked")) {
10659                        checkedValues.push($(this).val());
10660                    }
10661                });
10662                $("#grp_fld_17306 input").val(checkedValues.join(','));
10663                console.log($("#grp_fld_17306 input").val())
10664            });
10665//FOR DAY 5
10666            $("#day5s").click(function () {
10667                var checkedValues = [];
10668                $("input[type='checkbox'][id^='day5']").each(function () {
10669                    if ($(this).is(":checked")) {
10670                        checkedValues.push($(this).val());
10671                    }
10672                });
10673                $("#grp_fld_17307 input").val(checkedValues.join(','));
10674                console.log($("#grp_fld_17307 input").val())
10675            });
10676
10677///////////////////////////////////////////////
10678
10679//FOR PRE-EVENT
10680            // Get references to the checkboxes
10681            var $preevent1 = $('#preevent1');
10682            var $preevent2 = $('#preevent2');
10683            var $preevent3 = $('#preevent3');
10684
10685            // Add a click event handler to preevent1 checkbox
10686            $preevent1.click(function () {
10687                if ($preevent1.is(':checked')) {
10688
10689                    var textToCheck = "Cultural activities – Travel back in time to the industrial revolution1";
10690                    $("input[type='checkbox']").filter(function () {
10691                        return $(this).attr("data-name") === textToCheck;
10692                    }).prop("checked", true).trigger("change");
10693
10694                } else {
10695                    var textToCheck = "Cultural activities – Travel back in time to the industrial revolution1";
10696                    $("input[type='checkbox']").filter(function () {
10697                        return $(this).attr("data-name") === textToCheck;
10698                    }).prop("checked", false).trigger("change");
10699
10700                }
10701            });
10702
10703            // Add a click event handler to preevent2 checkbox
10704            $preevent2.click(function () {
10705                if ($preevent2.is(':checked')) {
10706
10707                    var textToCheck = "Cultural activities – Discover Shakespeare England1";
10708                    $("input[type='checkbox']").filter(function () {
10709                        return $(this).attr("data-name") === textToCheck;
10710                    }).prop("checked", true).trigger("change");
10711
10712
10713                } else {
10714                    var textToCheck = "Cultural activities – Discover Shakespeare England1";
10715                    $("input[type='checkbox']").filter(function () {
10716                        return $(this).attr("data-name") === textToCheck;
10717                    }).prop("checked", false).trigger("change");
10718
10719                }
10720            });
10721
10722            // Add a click event handler to preevent3 checkbox
10723            $preevent3.click(function () {
10724                if ($preevent3.is(':checked')) {
10725
10726                    var textToCheck = "Cultural activities – History of Sport1";
10727                    $("input[type='checkbox']").filter(function () {
10728                        return $(this).attr("data-name") === textToCheck;
10729                    }).prop("checked", true).trigger("change");
10730
10731
10732                } else {
10733                    var textToCheck = "Cultural activities – History of Sport1";
10734                    $("input[type='checkbox']").filter(function () {
10735                        return $(this).attr("data-name") === textToCheck;
10736                    }).prop("checked", false).trigger("change");
10737
10738                }
10739            });
10740///////////////////////////////////////////////
10741
10742///////////////////////////////////////////////
10743
10744//FOR DURING-EVENT
10745            // Get references to the checkboxes
10746            var $duringevent1 = $('#duringevent1');
10747            var $duringevent2 = $('#duringevent2');
10748            var $duringevent3 = $('#duringevent3');
10749
10750            // Add a click event handler to duringevent1 checkbox
10751            // $duringevent1.click(function() {
10752            $(document).on('click', '#duringevent1', function () {
10753                if ($duringevent1.is(':checked')) {
10754
10755
10756                    //$(".addnopkg input[type='checkbox']").prop("checked", false);
10757                    //$(".addnopkg input[type='checkbox']:eq(3)").prop("checked", false);
10758                    //$(".addnopkg input[type='checkbox']:eq(4)").prop("checked", false);
10759                    //$(".addnopkg input[type='checkbox']:eq(5)").prop("checked", false);
10760
10761                    var textToCheck = "Cultural activities – F1 Arcade";
10762                    $("input[type='checkbox']").filter(function () {
10763                        return $(this).attr("data-name") === textToCheck;
10764                    }).prop("checked", true).trigger("change");
10765
10766                    //$duringevent2.prop('disabled', true);
10767                    // $duringevent3.prop('disabled', true);
10768                } else {
10769
10770
10771                    //$duringevent2.prop('disabled', false);
10772                    //$duringevent3.prop('disabled', false);
10773
10774                    var textToCheck = "Cultural activities – F1 Arcade";
10775                    $("input[type='checkbox']").filter(function () {
10776                        return $(this).attr("data-name") === textToCheck;
10777                    }).prop("checked", false).trigger("change");
10778                }
10779            });
10780
10781            // Add a click event handler to duringevent2 checkbox
10782            $duringevent2.click(function () {
10783// $(document).on('click', '#duringevent2', function(){
10784                if ($duringevent2.is(':checked')) {
10785
10786
10787                    //$(".addnopkg input[type='checkbox']").prop("checked", false);
10788                    // $(".addnopkg input[type='checkbox']:eq(3)").prop("checked", false);
10789                    // $(".addnopkg input[type='checkbox']:eq(4)").prop("checked", false);
10790                    // $(".addnopkg input[type='checkbox']:eq(5)").prop("checked", false);
10791
10792                    var textToCheck = "Cultural activities – Guided Tour of Villa Park";
10793                    $("input[type='checkbox']").filter(function () {
10794                        return $(this).attr("data-name") === textToCheck;
10795                    }).prop("checked", true).trigger("change");
10796
10797                    //$duringevent1.prop('disabled', true);
10798                    //$duringevent3.prop('disabled', true);
10799                } else {
10800
10801                    var textToCheck = "Cultural activities – Guided Tour of Villa Park";
10802                    $("input[type='checkbox']").filter(function () {
10803                        return $(this).attr("data-name") === textToCheck;
10804                    }).prop("checked", false).trigger("change");
10805
10806                    //$duringevent1.prop('disabled', false);
10807                    //$duringevent3.prop('disabled', false);
10808                }
10809            });
10810
10811            // Add a click event handler to duringevent3 checkbox
10812            $duringevent3.click(function () {
10813                if ($duringevent3.is(':checked')) {
10814
10815
10816                    //$(".addnopkg input[type='checkbox']").prop("checked", false);
10817                    // $(".addnopkg input[type='checkbox']:eq(3)").prop("checked", false);
10818                    // $(".addnopkg input[type='checkbox']:eq(4)").prop("checked", false);
10819                    // $(".addnopkg input[type='checkbox']:eq(5)").prop("checked", false);
10820
10821                    var textToCheck = "Cultural activities – Jewellery Quarter Sports Heritage Tour1";
10822                    $("input[type='checkbox']").filter(function () {
10823                        return $(this).attr("data-name") === textToCheck;
10824                    }).prop("checked", true).trigger("change");
10825
10826                    // $duringevent1.prop('disabled', true);
10827                    // $duringevent2.prop('disabled', true);
10828                } else {
10829
10830                    var textToCheck = "Cultural activities – Jewellery Quarter Sports Heritage Tour1";
10831                    $("input[type='checkbox']").filter(function () {
10832                        return $(this).attr("data-name") === textToCheck;
10833                    }).prop("checked", false).trigger("change");
10834                    $duringevent1.prop('disabled', false);
10835                    $duringevent2.prop('disabled', false);
10836                }
10837            });
10838///////////////////////////////////////////////
10839
10840
10841///////////////////////////////////////////////
10842
10843//FOR POST-EVENT
10844            // Get references to the checkboxes
10845            var $postevent1 = $('#postevent1');
10846
10847            // Add a click event handler to postevent1 checkbox
10848            $postevent1.click(function () {
10849                if ($postevent1.is(':checked')) {
10850
10851
10852                    var textToCheck = "Cultural activities – City of a thous
10852and trades1";
10853                    $("input[type='checkbox']").filter(function () {
10854                        return $(this).attr("data-name") === textToCheck;
10855                    }).prop("checked", true).trigger("change");
10856
10857                } else {
10858                    var textToCheck = "Cultural activities – City of a thousand trades1";
10859                    $("input[type='checkbox']").filter(function () {
10860                        return $(this).attr("data-name") === textToCheck;
10861                    }).prop("checked", false).trigger("change");
10862
10863                }
10864            });
10865
10866///////////////For Day Passes/////////////////
10867
10868            // Get references to the checkboxes April 7
10869            var $april7 = $('#april7');
10870
10871            // Add a click event handler to postevent1 checkbox
10872            $april7.click(function () {
10873                $("#fld_16687-error").remove();
10874                if ($april7.is(':checked')) {
10875
10876                    var textToCheck = "Day pass – 7 April 2024";
10877                    $("input[type='checkbox']").filter(function () {
10878                        return $(this).attr("data-name") === textToCheck;
10879                    }).prop("checked", true).trigger("change");
10880
10881                } else {
10882
10883                    var textToCheck = "Day pass – 7 April 2024";
10884                    $("input[type='checkbox']").filter(function () {
10885                        return $(this).attr("data-name") === textToCheck;
10886                    }).prop("checked", false).trigger("change");
10887                }
10888            });
10889
10890            // Get references to the checkboxes April 8
10891            var $april8 = $('#april8');
10892
10893            // Add a click event handler to postevent1 checkbox
10894            $april8.click(function () {
10895                $("#fld_16687-error").remove();
10896                if ($april8.is(':checked')) {
10897
10898
10899                    var textToCheck = "Day pass – 8 April 2024";
10900                    $("input[type='checkbox']").filter(function () {
10901                        return $(this).attr("data-name") === textToCheck;
10902                    }).prop("checked", true).trigger("change");
10903
10904                } else {
10905
10906                    var textToCheck = "Day pass – 8 April 2024";
10907                    $("input[type='checkbox']").filter(function () {
10908                        return $(this).attr("data-name") === textToCheck;
10909                    }).prop("checked", false).trigger("change");
10910
10911                }
10912            });
10913
10914// Get references to the checkboxes April 9
10915            var $april9 = $('#april9');
10916
10917            // Add a click event handler to postevent1 checkbox
10918            $april9.click(function () {
10919
10920                $("#fld_16687-error").remove();
10921                if ($april9.is(':checked')) {
10922                    var textToCheck = "Day pass – 9 April 2024";
10923                    $("input[type='checkbox']").filter(function () {
10924                        return $(this).attr("data-name") === textToCheck;
10925                    }).prop("checked", true).trigger("change");
10926
10927                } else {
10928                    var textToCheck = "Day pass – 9 April 2024";
10929                    $("input[type='checkbox']").filter(function () {
10930                        return $(this).attr("data-name") === textToCheck;
10931                    }).prop("checked", false).trigger("change");
10932
10933                }
10934            });
10935
10936// Get references to the checkboxes April 10
10937            var $april10 = $('#april10');
10938
10939            // Add a click event handler to postevent1 checkbox
10940            $april10.click(function () {
10941                $("#fld_16687-error").remove();
10942                if ($april10.is(':checked')) {
10943                    var textToCheck = "Day pass – 10 April 2024";
10944                    $("input[type='checkbox']").filter(function () {
10945                        return $(this).attr("data-name") === textToCheck;
10946                    }).prop("checked", true).trigger("change");
10947
10948                } else {
10949
10950                    var textToCheck = "Day pass – 10 April 2024";
10951                    $("input[type='checkbox']").filter(function () {
10952                        return $(this).attr("data-name") === textToCheck;
10953                    }).prop("checked", false).trigger("change");
10954                }
10955            });
10956
10957// Get references to the checkboxes April 11
10958            var $april11 = $('#april11');
10959
10960            // Add a click event handler to postevent1 checkbox
10961            $april11.click(function () {
10962                $("#fld_16687-error").remove();
10963                if ($april11.is(':checked')) {
10964
10965
10966                    var textToCheck = "Day pass – 11 April 2024";
10967                    $("input[type='checkbox']").filter(function () {
10968                        return $(this).attr("data-name") === textToCheck;
10969                    }).prop("checked", true).trigger("change");
10970
10971                } else {
10972
10973                    var textToCheck = "Day pass – 11 April 2024";
10974                    $("input[type='checkbox']").filter(function () {
10975                        return $(this).attr("data-name") === textToCheck;
10976                    }).prop("checked", false).trigger("change");
10977                }
10978            });
10979
10980///////////////////////////////////////////////
10981
10982///////////////For Day Passes/////////////////
10983
10984            // Get references to the checkboxes April 4
10985            var $shoulderapril4 = $('#shoulderapril4');
10986
10987            // Add a click event handler to postevent1 checkbox
10988            $shoulderapril4.click(function () {
10989                if ($shoulderapril4.is(':checked')) {
10990
10991                    var textToCheck = "Additional night - April 4";
10992                    $("input[type='checkbox']").filter(function () {
10993                        return $(this).attr("data-name") === textToCheck;
10994                    }).prop("checked", true).trigger("change");
10995
10996                } else {
10997
10998                    var textToCheck = "Additional night - April 4";
10999                    $("input[type='checkbox']").filter(function () {
11000                        return $(this).attr("data-name") === textToCheck;
11001                    }).prop("checked", false).trigger("change");
11002                }
11003            });
11004
11005            // Get references to the checkboxes April 5
11006            var $shoulderapril5 = $('#shoulderapril5');
11007
11008            // Add a click event handler to postevent1 checkbox
11009            $shoulderapril5.click(function () {
11010                if ($shoulderapril5.is(':checked')) {
11011
11012                    var textToCheck = "Additional night - April 5";
11013                    $("input[type='checkbox']").filter(function () {
11014                        return $(this).attr("data-name") === textToCheck;
11015                    }).prop("checked", true).trigger("change");
11016
11017                } else {
11018
11019                    var textToCheck = "Additional night - April 5";
11020                    $("input[type='checkbox']").filter(function () {
11021                        return $(this).attr("data-name") === textToCheck;
11022                    }).prop("checked", false).trigger("change");
11023
11024                }
11025            });
11026
11027// Get references to the checkboxes April 13
11028            var $shoulderapril13 = $('#shoulderapril13');
11029
11030            // Add a click event handler to postevent1 checkbox
11031            $shoulderapril13.click(function () {
11032                if ($shoulderapril13.is(':checked')) {
11033
11034                    var textToCheck = "Additional night - April 13";
11035                    $("input[type='checkbox']").filter(function () {
11036                        return $(this).attr("data-name") === textToCheck;
11037                    }).prop("checked", true).trigger("change");
11038
11039                } else {
11040                    var textToCheck = "Additional night - April 13";
11041                    $("input[type='checkbox']").filter(function () {
11042                        return $(this).attr("data-name") === textToCheck;
11043                    }).prop("checked", false).trigger("change");
11044
11045                }
11046            });
11047
11048// Get references to the checkboxes April 14
11049            var $shoulderapril14 = $('#shoulderapril14');
11050
11051            // Add a click event handler to postevent1 checkbox
11052            $shoulderapril14.click(function () {
11053                if ($shoulderapril14.is(':checked')) {
11054
11055                    var textToCheck = "Additional night - April 14";
11056                    $("input[type='checkbox']").filter(function () {
11057                        return $(this).attr("data-name") === textToCheck;
11058                    }).prop("checked", true).trigger("change");
11059
11060                } else {
11061
11062                    var textToCheck = "Additional night - April 14";
11063                    $("input[type='checkbox']").filter(function () {
11064                        return $(this).attr("data-name") === textToCheck;
11065                    }).prop("checked", false).trigger("change");
11066                }
11067            });
11068
11069
11070            $('#grp_fld_1304376 input[name="fld_1304376[]"]').click(function () {
11071                $('input[data-name="April 7, 2024"]').each(function () {
11072                    $(this).click();
11073                    // $(this).prop("checked",true);
11074                });
11075            });
11076
11077            $('#grp_fld_1304377 input[name="fld_1304377[]"]').click(function () {
11078                $('input[data-name="April 8, 2024"]').each(function () {
11079                    $(this).click();
11080                    // $(this).prop("checked",true);
11081                });
11082            });
11083
11084            $('#grp_fld_1304378 input[name="fld_1304378[]"]').click(function () {
11085                $('input[data-name="April 9, 2024"]').each(function () {
11086                    $(this).click();
11087                    // $(this).prop("checked",true);
11088                });
11089            });
11090
11091            $('#grp_fld_1304379 input[name="fld_1304379[]"]').click(function () {
11092                $('input[data-name="April 10, 2024"]').each(function () {
11093                    $(this).click();
11094                    // $(this).prop("checked",true);
11095                });
11096            });
11097
11098
11099            $('#grp_fld_1304380 input[name="fld_1304380[]"]').click(function () {
11100                $('input[data-name="April 11, 2024"]').each(function () {
11101                    $(this).click();
11102                    // $(this).prop("checked",true);
11103                });
11104            });
11105
11106
11107////////////////////New Checkin and Checkout///////////////////////
11108
11109
11110            $(document).on('change', '#fld_1304052', function () {
11111
11112                var partner_min_date = "04/04/2024";
11113                var partner_max_date = "12/04/2024";
11114
11115                var partnerout_min_date = "04/04/2024";
11116                var partnerout_max_date = "12/04/2024";
11117
11118
11119                $('#fld_1304371').datepicker('remove');
11120                $('#fld_1304371').datepicker({
11121                    format: $('#fld_1304371').data('date-format'),
11122                    todayHighlight: true,
11123                    language: 'EN',
11124                    autoclose: true,
11125                    startDate: partner_min_date,
11126                    endDate: partner_max_date,
11127                });
11128
11129                $('#fld_1304372').datepicker('remove');
11130                $('#fld_1304372').datepicker({
11131                    //format: $('#fld_1304372').data('date-format'),
11132                    format: "dd/mm/yyyy",
11133                    todayHighlight: true,
11134                    language: 'EN',
11135                    autoclose: true,
11136                    startDate: partnerout_min_date,
11137                    endDate: partnerout_max_date,
11138                });
11139
11140
11141            });
11142
11143            $(document).on('change', '#fld_1304052', function () {
11144
11145                var partner_min_date = "06/04/2024";
11146                var partner_max_date = "12/04/2024";
11147
11148                var partnerout_min_date = "06/04/2024";
11149                var partnerout_max_date = "12/04/2024";
11150
11151
11152                $('#fld_1304371').datepicker('remove');
11153                $('#fld_1304371').datepicker({
11154                    format: $('#fld_1304371').data('date-format'),
11155                    todayHighlight: true,
11156                    language: 'EN',
11157                    autoclose: true,
11158                    startDate: partner_min_date,
11159                    endDate: partner_max_date,
11160                });
11161
11162                $('#fld_1304372').datepicker('remove');
11163                $('#fld_1304372').datepicker({
11164                    //format: $('#fld_1304372').data('date-format'),
11165                    format: "dd/mm/yyyy",
11166                    todayHighlight: true,
11167                    language: 'EN',
11168                    autoclose: true,
11169                    startDate: partnerout_min_date,
11170                    endDate: partnerout_max_date,
11171                });
11172
11173
11174            });
11175
11176            var selectEBDate = [918, 921, 768];
11177
11178            $('#fld_1304571, #fld_1304367').on('change', function () {
11179                if ($('#fld_1304052').val() == 'Silver partner') {
11180                    return false;
11181                }
11182
11183                var checkinEB_min_date = "14/04/2024";
11184                var checkinEB_max_date = "14/04/2024";
11185
11186                var checkoutEB_min_date = "14/04/2024";
11187                var checkoutEB_max_date = "14/04/2024";
11188
11189                if ($('#fld_1304373').val() == 'IOC EB and Staff' && selectEBDate.includes(parseInt($('#fld_1304367').val()))) {
11190
11191
11192                    checkinEB_min_date = "06/04/2024";
11193                    checkinEB_max_date = "12/04/2024";
11194
11195                    checkoutEB_min_date = "06/04/2024";
11196                    checkoutEB_max_date = "12/04/2024";
11197                } else {
11198
11199                    checkinEB_min_date = "04/04/2024";
11200                    checkinEB_max_date = "14/04/2024";
11201
11202                    checkoutEB_min_date = "04/04/2024";
11203                    checkoutEB_max_date = "14/04/2024";
11204                }
11205
11206                $('#fld_1304371').datepicker('remove');
11207                $('#fld_1304371').datepicker({
11208                    format: $('#fld_1304371').data('date-format'),
11209                    todayHighlight: true,
11210                    language: 'EN',
11211                    autoclose: true,
11212                    startDate: checkinEB_min_date,
11213                    endDate: checkinEB_max_date,
11214                });
11215
11216                $('#fld_1304372').datepicker('remove');
11217                $('#fld_1304372').datepicker({
11218                    //format: $('#fld_1304372').data('date-format'),
11219                    format: "dd/mm/yyyy",
11220                    todayHighlight: true,
11221                    language: 'EN',
11222                    autoclose: true,
11223                    startDate: checkoutEB_min_date,
11224                    endDate: checkoutEB_max_date,
11225                });
11226
11227            });
11228
11229            $(document).on('change', '#fld_1304059', function () {
11230                var _selectedCategoryVal = $(this).val();
11231
11232                var checkin_min_date = "03/01/2023";
11233                var checkin_max_date = "04/01/2023";
11234
11235                var checkout_min_date = "03/01/2023";
11236                var checkout_max_date = "04/01/2023";
11237
11238                if (_selectedCategoryVal == "Conference Delegate") {
11239                    checkin_min_date = "04/04/2024";
11240                    checkin_max_date = "14/04/2024";
11241
11242                    checkout_min_date = "04/04/2024";
11243                    checkout_max_date = "14/04/2024";
11244
11245                } else if (_selectedCategoryVal == "International Olympic Committee - IOC Member") {
11246                    checkin_min_date = "04/04/2024";
11247                    checkin_max_date = "14/04/2024";
11248
11249                    checkout_min_date = "04/04/2024";
11250                    checkout_max_date = "14/04/2024";
11251                } else if (_selectedCategoryVal == "National Olympic Committee (NOC) Delegate") {
11252                    checkin_min_date = "04/04/2024";
11253                    checkin_max_date = "14/04/2024";
11254
11255                    checkout_min_date = "04/04/2024";
11256                    checkout_max_date = "14/04/2024";
11257                } else if (_selectedCategoryVal == "Media Accreditation") {
11258                    checkin_min_date = "04/04/2024";
11259                    checkin_max_date = "14/04/2024";
11260
11261                    checkout_min_date = "04/04/2024";
11262                    checkout_max_date = "14/04/2024";
11263                }
11264
11265                $('#fld_1304371').datepicker('remove');
11266                $('#fld_1304371').datepicker({
11267                    //format: $('#fld_1304371').data('date-format'),
11268                    format: "dd/mm/yyyy",
11269                    todayHighlight: true,
11270                    language: 'EN',
11271                    autoclose: true,
11272                    startDate: checkin_min_date,
11273                    endDate: checkin_max_date,
11274                });
11275
11276                $('#fld_1304372').datepicker('remove');
11277                $('#fld_1304372').datepicker({
11278                    //format: $('#fld_1304372').data('date-format'),
11279                    format: "dd/mm/yyyy",
11280                    todayHighlight: true,
11281                    language: 'EN',
11282                    autoclose: true,
11283                    startDate: checkout_min_date,
11284                    endDate: checkout_max_date,
11285                });
11286
11287            });
11288
11289/////////////////Passport Min Max date////////////////
11290
11291            $(document).on('change', '#fld_1304023', function () {
11292
11293                var passport_min_date = "05/10/2024";
11294                var passport_max_date = "";
11295
11296                $('#fld_1304030').datepicker('remove');
11297                $('#fld_1304030').datepicker({
11298                    format: $('#fld_1304030').data('date-format'),
11299                    todayHighlight: true,
11300                    language: 'EN',
11301                    autoclose: true,
11302                    startDate: passport_min_date,
11303                    endDate: passport_max_date,
11304
11305                });
11306
11307            });
11308
11309///////////////////IFs on Hotel Change/////////////////////
11310
11311
11312            $(document).on('change', '#fld_1304368', function () {
11313                var _selectedCategoryVal = $(this).val();
11314                if ($('#fld_1304052').val() == 'Silver partner') {
11315                    return false;
11316                }
11317                var checkin_min_date = "04/04/2024";
11318                var checkin_max_date = "14/04/2024";
11319
11320                var checkout_min_date = "04/04/2024";
11321                var checkout_max_date = "14/04/2024";
11322
11323                if (roomSelectGrandGuest.includes(parseInt(_selectedCategoryVal))) {
11324                    checkin_min_date = "04/04/2024";
11325                    checkin_max_date = "14/04/2024";
11326
11327                    checkout_min_date = "04/04/2024";
11328                    checkout_max_date = "14/04/2024";
11329
11330                }
11331
11332                $('#fld_1304371').datepicker('remove');
11333                $('#fld_1304371').datepicker({
11334                    format: $('#fld_1304371').data('date-format'),
11335                    todayHighlight: true,
11336                    language: 'EN',
11337                    autoclose: true,
11338                    startDate: checkin_min_date,
11339                    endDate: checkin_max_date,
11340                });
11341
11342                $('#fld_1304372').datepicker('remove');
11343                $('#fld_1304372').datepicker({
11344                    //format: $('#fld_1304372').data('date-format'),
11345                    format: "dd/mm/yyyy",
11346                    todayHighlight: true,
11347                    language: 'EN',
11348                    autoclose: true,
11349                    startDate: checkout_min_date,
11350                    endDate: checkout_max_date,
11351                });
11352
11353            });
11354
11355
11356
11357
11358/////////////////////////////////////////////////////////////////////////////////////////////////
11359
11360
11361            $('#fld_1304371, #fld_1304372, #fld_1304368, #fld_1304373').on('change', function () {
11362
11363
11364                console.log($('#dayDifference').text());
11365                console.log($('#fld_1304367').val()); //Hotel name
11366                console.log($('#fld_1304368').val()); //Room type
11367                console.log($('#fld_1304373').val()); //Room Sharing
11368
11369
11370////////////////////////////Sharing is Yes///////////////////////////////
11371
11372                $(".addnopkg input[data-name='Grand Hotel Birmingham – Grand Guest Room, 1 Night']").parent("div.addnopkg").nextAll().find("input").prop("checked", false);
11373
11374                if ($('#dayDifference').text() == 1 && roomSelectGrandGuest.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11375                    checkAddonBasedOnHotels("Grand Hotel Birmingham – Grand Guest Room, 1 Night", "Grand Hotel Birmingham – Sharing person charge, 1 Night");
11376                } else if ([2, 3, 4, 5, 6, 7, 8, 9, 10].includes(parseInt($('#dayDifference').text())) && roomSelectGrandGuest.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11377                    checkAddonBasedOnHotels("Grand Hotel Birmingham – Grand Guest Room, " + $('#dayDifference').text() + " Nights", "Grand Hotel Birmingham – Sharing person charge, " + $('#dayDifference').text() + " Nights");
11378                }
11379
11380///////////////////Hyaatt Standard Guest Room///////////////////////
11381
11382                else if ($('#dayDifference').text() == 1 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11383
11384                    $("input[type='checkbox']").filter(function () {
11385                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 1 Night";
11386                    }).prop("checked", true).trigger('change');
11387
11388                    $("input[type='checkbox']").filter(function () {
11389                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 1 Night";
11390                    }).prop("checked", true).trigger('change');
11391                } else if ($('#dayDifference').text() == 2 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11392
11393
11394                    $("input[type='checkbox']").filter(function () {
11395                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 2 Nights";
11396                    }).prop("checked", true).trigger('change');
11397
11398                    $("input[type='checkbox']").filter(function () {
11399                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 2 Nights";
11400                    }).prop("checked", true).trigger('change');
11401                } else if ($('#dayDifference').text() == 3 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11402
11403
11404                    $("input[type='checkbox']").filter(function () {
11405                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 3 Nights";
11406                    }).prop("checked", true).trigger('change');
11407
11408                    $("input[type='checkbox']").filter(function () {
11409                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 3 Nights";
11410                    }).prop("checked", true).trigger('change');
11411                } else if ($('#dayDifference').text() == 4 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11412
11413
11414                    $("input[type='checkbox']").filter(function () {
11415                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 4 Nights";
11416                    }).prop("checked", true).trigger('change');
11417
11418                    $("input[type='checkbox']").filter(function () {
11419                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 4 Nights";
11420                    }).prop("checked", true).trigger('change');
11421                } else if ($('#dayDifference').text() == 5 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11422
11423
11424                    $("input[type='checkbox']").filter(function () {
11425                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 5 Nights";
11426                    }).prop("checked", true).trigger('change');
11427
11428                    $("input[type='checkbox']").filter(function () {
11429                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 5 Nights";
11430                    }).prop("checked", true).trigger('change');
11431                } else if ($('#dayDifference').text() == 6 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11432
11433
11434                    $("input[type='checkbox']").filter(function () {
11435                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 6 Nights";
11436                    }).prop("checked", true).trigger('change');
11437
11438                    $("input[type='checkbox']").filter(function () {
11439                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 6 Nights";
11440                    }).prop("checked", true).trigger('change');
11441                } else if ($('#dayDifference').text() == 7 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11442
11443
11444                    $("input[type='checkbox']").filter(function () {
11445                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 7 Nights";
11446                    }).prop("checked", true).trigger('change');
11447
11448                    $("input[type='checkbox']").filter(function () {
11449                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 7 Nights";
11450                    }).prop("checked", true).trigger('change');
11451                } else if ($('#dayDifference').text() == 8 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11452
11453
11454                    $("input[type='checkbox']").filter(function () {
11455                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 8 Nights";
11456                    }).prop("checked", true).trigger('change');
11457
11458                    $("input[type='checkbox']").filter(function () {
11459                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 8 Nights";
11460                    }).prop("checked", true).trigger('change');
11461                } else if ($('#dayDifference').text() == 9 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11462
11463
11464                    $("input[type='checkbox']").filter(function () {
11465                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 9 Nights";
11466                    }).prop("checked", true).trigger('change');
11467
11468                    $("input[type='checkbox']").filter(function () {
11469                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 9 Nights";
11470                    }).prop("checked", true).trigger('change');
11471                } else if ($('#dayDifference').text() == 10 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11472
11473
11474                    $("input[type='checkbox']").filter(function () {
11475                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 10 Nights";
11476                    }).prop("checked", true).trigger('change');
11477
11478                    $("input[type='checkbox']").filter(function () {
11479                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 10 Nights";
11480                    }).prop("checked", true).trigger('change');
11481                }
11482
11483/////////////////////ViewRoomComp/////////////////////
11484                else if ($('#dayDifference').text() == 1 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11485
11486
11487                    $("input[type='checkbox']").filter(function () {
11488                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 1 Night";
11489                    }).prop("checked", true).trigger('change');
11490                } else if ($('#dayDifference').text() == 2 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11491
11492
11493                    $("input[type='checkbox']").filter(function () {
11494                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 2 Nights";
11495                    }).prop("checked", true).trigger('change');
11496                } else if ($('#dayDifference').text() == 3 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11497
11498
11499                    $("input[type='checkbox']").filter(function () {
11500                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 3 Nights";
11501                    }).prop("checked", true).trigger('change');
11502                } else if ($('#dayDifference').text() == 4 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11503
11504
11505                    $("input[type='checkbox']").filter(function () {
11506                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 4 Nights";
11507                    }).prop("checked", true).trigger('change');
11508                } else if ($('#dayDifference').text() == 5 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11509
11510
11511                    $("input[type='checkbox']").filter(function () {
11512                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 5 Nights";
11513                    }).prop("checked", true).trigger('change');
11514                } else if ($('#dayDifference').text() == 6 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11515
11516
11517                    $("input[type='checkbox']").filter(function () {
11518                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 6 Nights";
11519                    }).prop("checked", true).trigger('change');
11520                } else if ($('#dayDifference').text() == 7 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11521
11522
11523                    $("input[type='checkbox']").filter(function () {
11524                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 7 Nights";
11525                    }).prop("checked", true).trigger('change');
11526                } else if ($('#dayDifference').text() == 8 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11527
11528
11529                    $("input[type='checkbox']").filter(function () {
11530                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 8 Nights";
11531                    }).prop("checked", true).trigger('change');
11532                } else if ($('#dayDifference').text() == 9 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11533
11534
11535                    $("input[type='checkbox']").filter(function () {
11536                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 9 Nights";
11537                    }).prop("checked", true).trigger('change');
11538                } else if ($('#dayDifference').text() == 10 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11539
11540
11541                    $("input[type='checkbox']").filter(function () {
11542                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 10 Nights";
11543                    }).prop("checked", true).trigger('change');
11544                } else if ($('#dayDifference').text() == 1 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
11545
11546
11547                    $("input[type='checkbox']").filter(function () {
11548                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 1 Night";
11549                    }).prop("checked", false).trigger('change');
11550                } else if ($('#dayDifference').text() == 2 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
11551
11552
11553                    $("input[type='checkbox']").filter(function () {
11554                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 2 Nights";
11555                    }).prop("checked", false).trigger('change');
11556                } else if ($('#dayDifference').text() == 3 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
11557
11558
11559                    $("input[type='checkbox']").filter(function () {
11560                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 3 Nights";
11561                    }).prop("checked", false).trigger('change');
11562                } else if ($('#dayDifference').text() == 4 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
11563
11564
11565                    $("input[type='checkbox']").filter(function () {
11566                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 4 Nights";
11567                    }).prop("checked", false).trigger('change');
11568                } else if ($('#dayDifference').text() == 5 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
11569
11570
11571                    $("input[type='checkbox']").filter(function () {
11572                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 5 Nights";
11573                    }).prop("checked", false).trigger('change');
11574                } else if ($('#dayDifference').text() == 6 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
11575
11576
11577                    $("input[type='checkbox']").filter(function () {
11578                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 6 Nights";
11579                    }).prop("checked", false).trigger('change');
11580                } else if ($('#dayDifference').text() == 7 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
11581
11582
11583                    $("input[type='checkbox']").filter(function () {
11584                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 7 Nights";
11585                    }).prop("checked", false).trigger('change');
11586                } else if ($('#dayDifference').text() == 8 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
11587
11588
11589                    $("input[type='checkbox']").filter(function () {
11590                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 8 Nights";
11591                    }).prop("checked", false).trigger('change');
11592                } else if ($('#dayDifference').text() == 9 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
11593
11594
11595                    $("input[type='checkbox']").filter(function () {
11596                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 9 Nights";
11597                    }).prop("checked", false).trigger('change');
11598                } else if ($('#dayDifference').text() == 10 && selectStandardGuestRoomComp.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
11599
11600
11601                    $("input[type='checkbox']").filter(function () {
11602                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 10 Nights";
11603                    }).prop("checked", false).trigger('change');
11604                }
11605
11606///////////////////Hyaatt View Standard Room///////////////////////
11607
11608                else if ($('#dayDifference').text() == 1 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11609
11610
11611                    $("input[type='checkbox']").filter(function () {
11612                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 1 Night";
11613                    }).prop("checked", true).trigger('change');
11614
11615                    $("input[type='checkbox']").filter(function () {
11616                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 1 Night";
11617                    }).prop("checked", true).trigger('change');
11618                } else if ($('#dayDifference').text() == 2 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11619
11620
11621                    $("input[type='checkbox']").filter(function () {
11622                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 2 Nights";
11623                    }).prop("checked", true).trigger('change');
11624
11625                    $("input[type='checkbox']").filter(function () {
11626                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 2 Nights";
11627                    }).prop("checked", true).trigger('change');
11628                } else if ($('#dayDifference').text() == 3 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11629
11630
11631                    $("input[type='checkbox']").filter(function () {
11632                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 3 Nights";
11633                    }).prop("checked", true).trigger('change');
11634
11635                    $("input[type='checkbox']").filter(function () {
11636                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 3 Nights";
11637                    }).prop("checked", true).trigger('change');
11638                } else if ($('#dayDifference').text() == 4 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11639
11640
11641                    $("input[type='checkbox']").filter(function () {
11642                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 4 Nights";
11643                    }).prop("checked", true).trigger('change');
11644
11645                    $("input[type='checkbox']").filter(function () {
11646                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 4 Nights";
11647                    }).prop("checked", true).trigger('change');
11648                } else if ($('#dayDifference').text() == 5 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11649
11650
11651                    $("input[type='checkbox']").filter(function () {
11652                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 5 Nights";
11653                    }).prop("checked", true).trigger('change');
11654
11655                    $("input[type='checkbox']").filter(function () {
11656                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 5 Nights";
11657                    }).prop("checked", true).trigger('change');
11658                } else if ($('#dayDifference').text() == 6 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11659
11660
11661                    $("input[type='checkbox']").filter(function () {
11662                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 6 Nights";
11663                    }).prop("checked", true).trigger('change');
11664
11665                    $("input[type='checkbox']").filter(function () {
11666                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 6 Nights";
11667                    }).prop("checked", true).trigger('change');
11668                } else if ($('#dayDifference').text() == 7 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11669
11670
11671                    $("input[type='checkbox']").filter(function () {
11672                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 7 Nights";
11673                    }).prop("checked", true).trigger('change');
11674
11675                    $("input[type='checkbox']").filter(function () {
11676                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 7 Nights";
11677                    }).prop("checked", true).trigger('change');
11678                } else if ($('#dayDifference').text() == 8 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11679
11680
11681                    $("input[type='checkbox']").filter(function () {
11682                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 8 Nights";
11683                    }).prop("checked", true).trigger('change');
11684
11685                    $("input[type='checkbox']").filter(function () {
11686                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 8 Nights";
11687                    }).prop("checked", true).trigger('change');
11688                } else if ($('#dayDifference').text() == 9 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11689
11690
11691                    $("input[type='checkbox']").filter(function () {
11692                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 9 Nights";
11693                    }).prop("checked", true).trigger('change');
11694
11695                    $("input[type='checkbox']").filter(function () {
11696                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 9 Nights";
11697                    }).prop("checked", true).trigger('change');
11698                } else if ($('#dayDifference').text() == 10 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11699
11700
11701                    $("input[type='checkbox']").filter(function () {
11702                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 10 Nights";
11703                    }).prop("checked", true).trigger('change');
11704
11705                    $("input[type='checkbox']").filter(function () {
11706                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 10 Nights";
11707                    }).prop("checked", true).trigger('change');
11708                }
11709
11710///////////////////Hilton Standard King Room///////////////////////
11711
11712                else if ($('#dayDifference').text() == 1 && selectStandardKing.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11713
11714
11715                    $("input[type='checkbox']").filter(function () {
11716                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 1 Night";
11717                    }).prop("checked", true).trigger('change');
11718
11719                    $("input[type='checkbox']").filter(function () {
11720                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 1 Night";
11721                    }).prop("checked", true).trigger('change');
11722                } else if ($('#dayDifference').text() == 2 && selectStandardKing.includes(parseInt($('#fld_1304368'
11722).val())) && $('#fld_1304373').val() == 'Yes') {
11723                    //
11724                    uncheckCheckboxesByText(".addnopkg.addonsvp.addon-package", textsToUncheck);
11725
11726                    $("input[type='checkbox']").filter(function () {
11727                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 2 Nights";
11728                    }).prop("checked", true).trigger('change');
11729
11730                    $("input[type='checkbox']").filter(function () {
11731                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 2 Nights";
11732                    }).prop("checked", true).trigger('change');
11733                } else if ($('#dayDifference').text() == 3 && selectStandardKing.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11734
11735
11736                    $("input[type='checkbox']").filter(function () {
11737                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 3 Nights";
11738                    }).prop("checked", true).trigger('change');
11739
11740                    $("input[type='checkbox']").filter(function () {
11741                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 3 Nights";
11742                    }).prop("checked", true).trigger('change');
11743                } else if ($('#dayDifference').text() == 4 && selectStandardKing.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11744
11745
11746                    $("input[type='checkbox']").filter(function () {
11747                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 4 Nights";
11748                    }).prop("checked", true).trigger('change');
11749
11750                    $("input[type='checkbox']").filter(function () {
11751                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 4 Nights";
11752                    }).prop("checked", true).trigger('change');
11753                } else if ($('#dayDifference').text() == 5 && selectStandardKing.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11754
11755
11756                    $("input[type='checkbox']").filter(function () {
11757                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 5 Nights";
11758                    }).prop("checked", true).trigger('change');
11759
11760                    $("input[type='checkbox']").filter(function () {
11761                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 5 Nights";
11762                    }).prop("checked", true).trigger('change');
11763                } else if ($('#dayDifference').text() == 6 && selectStandardKing.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11764
11765
11766                    $("input[type='checkbox']").filter(function () {
11767                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 6 Nights";
11768                    }).prop("checked", true).trigger('change');
11769
11770                    $("input[type='checkbox']").filter(function () {
11771                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 6 Nights";
11772                    }).prop("checked", true).trigger('change');
11773                } else if ($('#dayDifference').text() == 7 && selectStandardKing.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11774
11775
11776                    $("input[type='checkbox']").filter(function () {
11777                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 7 Nights";
11778                    }).prop("checked", true).trigger('change');
11779
11780                    $("input[type='checkbox']").filter(function () {
11781                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 7 Nights";
11782                    }).prop("checked", true).trigger('change');
11783                } else if ($('#dayDifference').text() == 8 && selectStandardKing.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11784
11785
11786                    $("input[type='checkbox']").filter(function () {
11787                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 8 Nights";
11788                    }).prop("checked", true).trigger('change');
11789
11790                    $("input[type='checkbox']").filter(function () {
11791                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 8 Nights";
11792                    }).prop("checked", true).trigger('change');
11793                } else if ($('#dayDifference').text() == 9 && selectStandardKing.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11794
11795
11796                    $("input[type='checkbox']").filter(function () {
11797                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 9 Nights";
11798                    }).prop("checked", true).trigger('change');
11799
11800                    $("input[type='checkbox']").filter(function () {
11801                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 9 Nights";
11802                    }).prop("checked", true).trigger('change');
11803                } else if ($('#dayDifference').text() == 10 && selectStandardKing.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11804
11805
11806                    $("input[type='checkbox']").filter(function () {
11807                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 10 Nights";
11808                    }).prop("checked", true).trigger('change');
11809
11810                    $("input[type='checkbox']").filter(function () {
11811                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 10 Nights";
11812                    }).prop("checked", true).trigger('change');
11813                }
11814
11815///////////////////Hilton Standard Twin Room///////////////////////
11816
11817                else if ($('#dayDifference').text() == 1 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11818
11819
11820                    $("input[type='checkbox']").filter(function () {
11821                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 1 
11821Night";
11822                    }).prop("checked", true).trigger('change');
11823
11824                    $("input[type='checkbox']").filter(function () {
11825                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 1 Night";
11826                    }).prop("checked", true).trigger('change');
11827                } else if ($('#dayDifference').text() == 2 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11828
11829
11830                    $("input[type='checkbox']").filter(function () {
11831                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 2 Nights";
11832                    }).prop("checked", true).trigger('change');
11833
11834                    $("input[type='checkbox']").filter(function () {
11835                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 2 Nights";
11836                    }).prop("checked", true).trigger('change');
11837                } else if ($('#dayDifference').text() == 3 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11838
11839
11840                    $("input[type='checkbox']").filter(function () {
11841                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 3 Nights";
11842                    }).prop("checked", true).trigger('change');
11843
11844                    $("input[type='checkbox']").filter(function () {
11845                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 3 Nights";
11846                    }).prop("checked", true).trigger('change');
11847                } else if ($('#dayDifference').text() == 4 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11848
11849
11850                    $("input[type='checkbox']").filter(function () {
11851                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 4 Nights";
11852                    }).prop("checked", true).trigger('change');
11853
11854                    $("input[type='checkbox']").filter(function () {
11855                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 4 Nights";
11856                    }).prop("checked", true).trigger('change');
11857                } else if ($('#dayDifference').text() == 5 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11858
11859
11860                    $("input[type='checkbox']").filter(function () {
11861                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 5 Nights";
11862                    }).prop("checked", true).trigger('change');
11863
11864                    $("input[type='checkbox']").filter(function () {
11865                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 5 Nights";
11866                    }).prop("checked", true).trigger('change');
11867                } else if ($('#dayDifference').text() == 6 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11868
11869
11870                    $("input[type='checkbox']").filter(function () {
11871                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 6 Nights";
11872                    }).prop("checked", true).trigger('change');
11873
11874                    $("input[type='checkbox']").filter(function () {
11875                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 6 Nights";
11876                    }).prop("checked", true).trigger('change');
11877                } else if ($('#dayDifference').text() == 7 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11878
11879
11880                    $("input[type='checkbox']").filter(function () {
11881                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 7 Nights";
11882                    }).prop("checked", true).trigger('change');
11883
11884                    $("input[type='checkbox']").filter(function () {
11885                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 7 Nights";
11886                    }).prop("checked", true).trigger('change');
11887                } else if ($('#dayDifference').text() == 8 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11888
11889
11890                    $("input[type='checkbox']").filter(function () {
11891                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 8 Nights";
11892                    }).prop("checked", true).trigger('change');
11893
11894                    $("input[type='checkbox']").filter(function () {
11895                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 8 Nights";
11896                    }).prop("checked", true).trigger('change');
11897                } else if ($('#dayDifference').text() == 9 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11898
11899
11900                    $("input[type='checkbox']").filter(function () {
11901                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 9 Nights";
11902                    }).prop("checked", true).trigger('change');
11903
11904                    $("input[type='checkbox']").filter(function () {
11905                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 9 Nights";
11906                    }).prop("checked", true).trigger('change');
11907                } else if ($('#dayDifference').text() == 10 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11908
11909
11910                    $("input[type='checkbox']").filter(function () {
11911                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 10 Nights";
11912                    }).prop("checked", true).trigger('change');
11913
11914                    $("input[type='checkbox']").filter(function () {
11915                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 10 Nights";
11916                    }).prop("checked", true).trigger('change');
11917                }
11918
11919///////////////////Hilton Standard Queen Room///////////////////////
11920
11921                else if ($('#dayDifference').text() == 1 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11922
11923
11924                    $("input[type='checkbox']").filter(function () {
11925                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 1 Nights";
11926                    }).prop("checked", true).trigger('change');
11927
11928                    $("input[type='checkbox']").filter(function () {
11929                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 1 Night";
11930                    }).prop("checked", true).trigger('change');
11931                } else if ($('#dayDifference').text() == 2 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11932
11933
11934                    $("input[type='checkbox']").filter(function () {
11935                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 2 Nights";
11936                    }).prop("checked", true).trigger('change');
11937
11938                    $("input[type='checkbox']").filter(function () {
11939                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 2 Nights";
11940                    }).prop("checked", true).trigger('change');
11941                } else if ($('#dayDifference').text() == 3 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11942
11943
11944                    $("input[type='checkbox']").filter(function () {
11945                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 3 Nights";
11946                    }).prop("checked", true).trigger('change');
11947
11948                    $("input[type='checkbox']").filter(function () {
11949                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 3 Nights";
11950                    }).prop("checked", true).trigger('change');
11951                } else if ($('#dayDifference').text() == 4 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11952
11953
11954                    $("input[type='checkbox']").filter(function () {
11955                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 4 Nights";
11956                    }).prop("checked", true).trigger('change');
11957
11958                    $("input[type='checkbox']").filter(function () {
11959                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 4 Nights";
11960                    }).prop("checked", true).trigger('change');
11961                } else if ($('#dayDifference').text() == 5 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11962
11963
11964                    $("input[type='checkbox']").filter(function () {
11965                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 5 Nights";
11966                    }).prop("checked", true).trigger('change');
11967
11968                    $("input[type='checkbox']").filter(function () {
11969                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 5 Nights";
11970                    }).prop("checked", true).trigger('change');
11971                } else if ($('#dayDifference').text() == 6 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11972
11973
11974                    $("input[type='checkbox']").filter(function () {
11975                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 6 Nights";
11976                    }).prop("checked", true).trigger('change');
11977
11978                    $("input[type='checkbox']").filter(function () {
11979                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 6 Nights";
11980                    }).prop("checked", true).trigger('change');
11981                } else if ($('#dayDifference').text() == 7 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11982
11983
11984                    $("input[type='checkbox']").filter(function () {
11985                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 7 Nights";
11986                    }).prop("checked", true).trigger('change');
11987
11988                    $("input[type='checkbox']").filter(function () {
11989                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 7 Nights";
11990                    }).prop("checked", true).trigger('change');
11991                } else if ($('#dayDifference').text() == 8 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
11992
11993
11994                    $("input[type='checkbox']").filter(function () {
11995                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 8 Nights";
11996                    }).prop("checked", true).trigger('change');
11997
11998                    $("input[type='checkbox']").filter(function () {
11999                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 8 Nights";
12000                    }).prop("checked", true).trigger('change');
12001                } else if ($('#dayDifference').text() == 9 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
12002
12003
12004                    $("input[type='checkbox']").filter(function () {
12005                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 9 Nights";
12006                    }).prop("checked", true).trigger('change');
12007
12008                    $("input[type='checkbox']").filter(function () {
12009                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 9 Nights";
12010                    }).prop("checked", true).trigger('change');
12011                } else if ($('#dayDifference').text() == 10 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'Yes') {
12012
12013
12014                    $("input[type='checkbox']").filter(function () {
12015                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 10 Nights";
12016                    }).prop("checked", true).trigger('change');
12017
12018                    $("input[type='checkbox']").filter(function () {
12019                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 10 Nights";
12020                    }).prop("checked", true).trigger('change');
12021                }
12022
12023////////////////////No Sharing////////////////////////
12024
12025                else if ($('#dayDifference').text() == 1 && roomSelectGrandGuest.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12026                    checkAddonBasedOnHotelsNoSharing("Grand Hotel Birmingham – Grand Guest Room, " + $('#dayDifference').text() + " Night", "Grand Hotel Birmingham – Sharing person charge, " + $('#dayDifference').text() + " Night");
12027                } else if ([2, 3, 4, 5, 6, 7, 8, 9, 10].includes(parseInt($('#dayDifference').text())) && roomSelectGrandGuest.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12028                    checkAddonBasedOnHotelsNoSharing("Grand Hotel Birmingham – Grand Guest Room, " + $('#dayDifference').text() + " Nights", "Grand Hotel Birmingham – Sharing person charge, " + $('#dayDifference').text() + " Nights");
12029                }
12030
12031
12032
12033///////////////////Hyaatt Standard Guest Room///////////////////////
12034
12035                else if ($('#dayDifference').text() == 1 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12036
12037
12038                    $("input[type='checkbox']").filter(function () {
12039                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 1 Night";
12040                    }).prop("checked", true).trigger('change');
12041
12042                    $("input[type='checkbox']").filter(function () {
12043                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 1 Night";
12044                    }).prop("checked", false).trigger('change');
12045                } else if ($('#dayDifference').text() == 2 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12046
12047
12048                    $("input[type='checkbox']").filter(function () {
12049                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 2 Nights";
12050                    }).prop("checked", true).trigger('change');
12051
12052                    $("input[type='checkbox']").filter(function () {
12053                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 2 Nights";
12054                    }).prop("checked", false).trigger('change');
12055                } else if ($('#dayDifference').text() == 3 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12056
12057
12058                    $("input[type='checkbox']").filter(function () {
12059                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 3 Nights";
12060                    }).prop("checked", true).trigger('change');
12061
12062                    $("input[type='checkbox']").filter(function () {
12063                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 3 Nights";
12064                    }).prop("checked", false).trigger('change');
12065                } else if ($('#dayDifference').text() == 4 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12066
12067
12068                    $("input[type='checkbox']").filter(function () {
12069                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 4 Nights";
12070                    }).prop("checked", true).trigger('change');
12071
12072                    $("input[type='checkbox']").filter(function () {
12073                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 4 Nights";
12074                    }).prop("checked", false).trigger('change');
12075                } else if ($('#dayDifference').text() == 5 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12076
12077
12078                    $("input[type='checkbox']").filter(function () {
12079                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 5 Nights";
12080                    }).prop("checked", true).trigger('change');
12081
12082                    $("input[type='checkbox']").filter(function () {
12083                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 5 Nights";
12084                    }).prop("checked", false).trigger('change');
12085                } else if ($('#dayDifference').text() == 6 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12086
12087
12088                    $("input[type='checkbox']").filter(function () {
12089                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 6 Nights";
12090                    }).prop("checked", true).trigger('change');
12091
12092                    $("input[type='checkbox']").filter(function () {
12093                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 6 Nights";
12094                    }).prop("checked", false).trigger('change');
12095                } else if ($('#dayDifference').text() == 7 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12096
12097
12098                    $("input[type='checkbox']").filter(function () {
12099                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 7 Nights";
12100                    }).prop("checked", true).trigger('change');
12101
12102                    $("input[type='checkbox']").filter(function () {
12103                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 7 Nights";
12104                    }).prop("checked", false).trigger('change');
12105                } else if ($('#dayDifference').text() == 8 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12106
12107
12108                    $("input[type='checkbox']").filter(function () {
12109                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 8 Nights";
12110                    }).prop("checked", true).trigger('change');
12111
12112                    $("input[type='checkbox']").filter(function () {
12113                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 8 Nights";
12114                    }).prop("checked", false).trigger('change');
12115                } else if ($('#dayDifference').text() == 9 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12116
12117
12118                    $("input[type='checkbox']").filter(function () {
12119                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 9 Nights";
12120                    }).prop("checked", true).trigger('change');
12121
12122                    $("input[type='checkbox']").filter(function () {
12123                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 9 Nights";
12124                    }).prop("checked", false).trigger('change');
12125                } else if ($('#dayDifference').text() == 10 && roomSelectStandardGuestRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12126
12127
12128                    $("input[type='checkbox']").filter(function () {
12129                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Standard Guest Room, 10 Nights";
12130                    }).prop("checked", true).trigger('change');
12131
12132                    $("input[type='checkbox']").filter(function () {
12133                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 10 Nights";
12134                    }).prop("checked", false).trigger('change');
12135                }
12136///////////////////Hyaatt View Standard Room///////////////////////
12137
12138                else if ($('#dayDifference').text() == 1 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12139
12140
12141                    $("input[type='checkbox']").filter(function () {
12142                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 1 Night";
12143                    }).prop("checked", true).trigger('change');
12144
12145                    $("input[type='checkbox']").filter(function () {
12146                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 1 Night";
12147                    }).prop("checked", false).trigger('change');
12148                } else if ($('#dayDifference').text() == 2 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12149
12150
12151                    $("input[type='checkbox']").filter(function () {
12152                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 2 Nights";
12153                    }).prop("checked", true).trigger('change');
12154
12155                    $("input[type='checkbox']").filter(function () {
12156                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 2 Nights";
12157                    }).prop("checked", false).trigger('change');
12158                } else if ($('#dayDifference').text() == 3 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12159
12160
12161                    $("input[type='checkbox']").filter(function () {
12162                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 3 Nights";
12163                    }).prop("checked", true).trigger('change');
12164
12165                    $("input[type='checkbox']").filter(function () {
12166                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 3 Nights";
12167                    }).prop("checked", false).trigger('change');
12168                } else if ($('#dayDifference').text() == 4 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12169
12170
12171                    $("input[type='checkbox']").filter(function () {
12172                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 4 Nights";
12173                    }).prop("checked", true).trigger('change');
12174
12175                    $("input[type='checkbox']").filter(function () {
12176                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 4 Nights";
12177                    }).prop("checked", false).trigger('change');
12178                } else if ($('#dayDifference').text() == 5 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12179
12180
12181                    $("input[type='checkbox']").filter(function () {
12182                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 5 Nights";
12183                    }).prop("checked", true).trigger('change');
12184
12185                    $("input[type='checkbox']").filter(function () {
12186                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 5 Nights";
12187                    }).prop("checked", false).trigger('change');
12188                } else if ($('#dayDifference').text() == 6 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12189
12190
12191                    $("input[type='checkbox']").filter(function () {
12192                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 6 Nights";
12193                    }).prop("checked", true).trigger('change');
12194
12195                    $("input[type='checkbox']").filter(function () {
12196                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 6 Nights";
12197                    }).prop("checked", false).trigger('change');
12198                } else if ($('#dayDifference').text() == 7 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12199
12200
12201                    $("input[type='checkbox']").filter(function () {
12202                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 7 Nights";
12203                    }).prop("checked", true).trigger('change');
12204
12205                    $("input[type='checkbox']").filter(function () {
12206                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 7 Nights";
12207                    }).prop("checked", false).trigger('change');
12208                } else if ($('#dayDifference').text() == 8 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12209
12210
12211                    $("input[type='checkbox']").filter(function () {
12212                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 8 Nights";
12213                    }).prop("checked", true).trigger('change');
12214
12215                    $("input[type='checkbox']").filter(function () {
12216                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 8 Nights";
12217                    }).prop("checked", false).trigger('change');
12218                } else if ($('#dayDifference').text() == 9 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12219
12220
12221                    $("input[type='checkbox']").filter(function () {
12222                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 9 Nights";
12223                    }).prop("checked", true).trigger('change');
12224
12225                    $("input[type='checkbox']").filter(function () {
12226                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 9 Nights";
12227                    }).prop("checked", false).trigger('change');
12228                } else if ($('#dayDifference').text() == 10 && selectViewRoom.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12229
12230
12231                    $("input[type='checkbox']").filter(function () {
12232                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – View Room, 10 Nights";
12233                    }).prop("checked", true).trigger('change');
12234
12235                    $("input[type='checkbox']").filter(function () {
12236                        return $(this).attr("data-name") === "Hyatt Regency Birmingham – Sharing person charge, 10 Nights";
12237                    }).prop("checked", false).trigger('change');
12238                }
12239
12240
12241///////////////////Hilton Standard King Room///////////////////////
12242
12243                else if ($('#dayDifference').text() == 1 && selectStandardKing.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12244
12245
12246                    $("input[type='checkbox']").filter(function () {
12247                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 1 Night";
12248                    }).prop("checked", true).trigger('change');
12249
12250                    $("input[type='checkbox']").filter(function () {
12251                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 1 Night";
12252                    }).prop("checked", false).trigger('change');
12253                } else if ($('#dayDifference').text() == 2 && selectStandardKing.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12254                    //
12255                    uncheckCheckboxesByText(".addnopkg.addonsvp.addon-package", textsToUncheck);
12256
12257                    $("input[type='checkbox']").filter(function () {
12258                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 2 Nights";
12259                    }).prop("checked", true).trigger('change');
12260
12261                    $("input[type='checkbox']").filter(function () {
12262                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 2 Nights";
12263                    }).prop("checked", false).trigger('change');
12264                } else if ($('#dayDifference').text() == 3 && selectStandardKing.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12265
12266
12267                    $("input[type='checkbox']").filter(function () {
12268                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 3 Nights";
12269                    }).prop("checked", true).trigger('change');
12270
12271                    $("input[type='checkbox']").filter(function () {
12272                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 3 Nights";
12273                    }).prop("checked", false).trigger('change');
12274                } else if ($('#dayDifference').text() == 4 && selectStandardKing.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12275
12276
12277                    $("input[type='checkbox']").filter(function () {
12278                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 4 Nights";
12279                    }).prop("checked", true).trigger('change');
12280
12281                    $("input[type='checkbox']").filter(function () {
12282                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 4 Nights";
12283                    }).prop("checked", false).trigger('change');
12284                } else if ($('#dayDifference').text() == 5 && selectStandardKing.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12285
12286
12287                    $("input[type='checkbox']").filter(function () {
12288                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 5 Nights";
12289                    }).prop("checked", true).trigger('change');
12290
12291                    $("input[type='checkbox']").filter(function () {
12292                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 5 Nights";
12293                    }).prop("checked", false).trigger('change');
12294                } else if ($('#dayDifference').text() == 6 && selectStandardKing.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12295
12296
12297                    $("input[type='checkbox']").filter(function () {
12298                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 6 Nights";
12299                    }).prop("checked", true).trigger('change');
12300
12301                    $("input[type='checkbox']").filter(function () {
12302                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 6 Nights";
12303                    }).prop("checked", false).trigger('change');
12304                } else if ($('#dayDifference').text() == 7 && selectStandardKing.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12305
12306
12307                    $("input[type='checkbox']").filter(function () {
12308                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 7 Nights";
12309                    }).prop("checked", true).trigger('change');
12310
12311                    $("input[type='checkbox']").filter(function () {
12312                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 7 Nights";
12313                    }).prop("checked", false).trigger('change');
12314                } else if ($('#dayDifference').text() == 8 && selectStandardKing.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12315
12316
12317                    $("input[type='checkbox']").filter(function () {
12318                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 8 Nights";
12319                    }).prop("checked", true).trigger('change');
12320
12321                    $("input[type='checkbox']").filter(function () {
12322                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 8 Nights";
12323                    }).prop("checked", false).trigger('change');
12324                } else if ($('#dayDifference').text() == 9 && selectStandardKing.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12325
12326
12327                    $("input[type='checkbox']").filter(function () {
12328                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 9 Nights";
12329                    }).prop("checked", true).trigger('change');
12330
12331                    $("input[type='checkbox']").filter(function () {
12332                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 9 Nights";
12333                    }).prop("checked", false).trigger('change');
12334                } else if ($('#dayDifference').text() == 10 && selectStandardKing.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12335
12336
12337                    $("input[type='checkbox']").filter(function () {
12338                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard King, 10 Nights";
12339                    }).prop("checked", true).trigger('change');
12340
12341                    $("input[type='checkbox']").filter(function () {
12342                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 10 Nights";
12343                    }).prop("checked", false).trigger('change');
12344                }
12345
12346///////////////////Hilton Standard Twin Room///////////////////////
12347
12348                else if ($('#dayDifference').text() == 1 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12349
12350
12351                    $("input[type='checkbox']").filter(function () {
12352                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 1 
12352Night";
12353                    }).prop("checked", true).trigger('change');
12354
12355                    $("input[type='checkbox']").filter(function () {
12356                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 1 Night";
12357                    }).prop("checked", false).trigger('change');
12358                } else if ($('#dayDifference').text() == 2 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12359
12360
12361                    $("input[type='checkbox']").filter(function () {
12362                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 2 Nights";
12363                    }).prop("checked", true).trigger('change');
12364
12365                    $("input[type='checkbox']").filter(function () {
12366                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 2 Nights";
12367                    }).prop("checked", false).trigger('change');
12368                } else if ($('#dayDifference').text() == 3 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12369
12370
12371                    $("input[type='checkbox']").filter(function () {
12372                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 3 Nights";
12373                    }).prop("checked", true).trigger('change');
12374
12375                    $("input[type='checkbox']").filter(function () {
12376                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 3 Nights";
12377                    }).prop("checked", false).trigger('change');
12378                } else if ($('#dayDifference').text() == 4 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12379
12380
12381                    $("input[type='checkbox']").filter(function () {
12382                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 4 Nights";
12383                    }).prop("checked", true).trigger('change');
12384
12385                    $("input[type='checkbox']").filter(function () {
12386                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 4 Nights";
12387                    }).prop("checked", false).trigger('change');
12388                } else if ($('#dayDifference').text() == 5 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12389
12390
12391                    $("input[type='checkbox']").filter(function () {
12392                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 5 Nights";
12393                    }).prop("checked", true).trigger('change');
12394
12395                    $("input[type='checkbox']").filter(function () {
12396                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 5 Nights";
12397                    }).prop("checked", false).trigger('change');
12398                } else if ($('#dayDifference').text() == 6 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12399
12400
12401                    $("input[type='checkbox']").filter(function () {
12402                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 6 Nights";
12403                    }).prop("checked", true).trigger('change');
12404
12405                    $("input[type='checkbox']").filter(function () {
12406                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 6 Nights";
12407                    }).prop("checked", false).trigger('change');
12408                } else if ($('#dayDifference').text() == 7 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12409
12410
12411                    $("input[type='checkbox']").filter(function () {
12412                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 7 Nights";
12413                    }).prop("checked", true).trigger('change');
12414
12415                    $("input[type='checkbox']").filter(function () {
12416                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 7 Nights";
12417                    }).prop("checked", false).trigger('change');
12418                } else if ($('#dayDifference').text() == 8 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12419
12420
12421                    $("input[type='checkbox']").filter(function () {
12422                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 8 Nights";
12423                    }).prop("checked", true).trigger('change');
12424
12425                    $("input[type='checkbox']").filter(function () {
12426                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 8 Nights";
12427                    }).prop("checked", false).trigger('change');
12428                } else if ($('#dayDifference').text() == 9 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12429
12430
12431                    $("input[type='checkbox']").filter(function () {
12432                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 9 Nights";
12433                    }).prop("checked", true).trigger('change');
12434
12435                    $("input[type='checkbox']").filter(function () {
12436                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 9 Nights";
12437                    }).prop("checked", false).trigger('change');
12438                } else if ($('#dayDifference').text() == 10 && selectStandardTwin.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12439
12440
12441                    $("input[type='checkbox']").filter(function () {
12442                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Twin, 10 Nights";
12443                    }).prop("checked", true).trigger('change');
12444
12445                    $("input[type='checkbox']").filter(function () {
12446                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 10 Nights";
12447                    }).prop("checked", false).trigger('change');
12448                }
12449
12450///////////////////Hilton Standard Queen Room///////////////////////
12451
12452                else if ($('#dayDifference').text() == 1 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12453
12454
12455                    $("input[type='checkbox']").filter(function () {
12456                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 1 Nights";
12457                    }).prop("checked", true).trigger('change');
12458
12459                    $("input[type='checkbox']").filter(function () {
12460                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 1 Night";
12461                    }).prop("checked", false).trigger('change');
12462                } else if ($('#dayDifference').text() == 2 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12463
12464
12465                    $("input[type='checkbox']").filter(function () {
12466                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 2 Nights";
12467                    }).prop("checked", true).trigger('change');
12468
12469                    $("input[type='checkbox']").filter(function () {
12470                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 2 Nights";
12471                    }).prop("checked", false).trigger('change');
12472                } else if ($('#dayDifference').text() == 3 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12473
12474
12475                    $("input[type='checkbox']").filter(function () {
12476                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 3 Nights";
12477                    }).prop("checked", true).trigger('change');
12478
12479                    $("input[type='checkbox']").filter(function () {
12480                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 3 Nights";
12481                    }).prop("checked", false).trigger('change');
12482                } else if ($('#dayDifference').text() == 4 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12483
12484
12485                    $("input[type='checkbox']").filter(function () {
12486                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 4 Nights";
12487                    }).prop("checked", true).trigger('change');
12488
12489                    $("input[type='checkbox']").filter(function () {
12490                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 4 Nights";
12491                    }).prop("checked", false).trigger('change');
12492                } else if ($('#dayDifference').text() == 5 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12493
12494
12495                    $("input[type='checkbox']").filter(function () {
12496                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 5 Nights";
12497                    }).prop("checked", true).trigger('change');
12498
12499                    $("input[type='checkbox']").filter(function () {
12500                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 5 Nights";
12501                    }).prop("checked", false).trigger('change');
12502                } else if ($('#dayDifference').text() == 6 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12503
12504
12505                    $("input[type='checkbox']").filter(function () {
12506                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 6 Nights";
12507                    }).prop("checked", true).trigger('change');
12508
12509                    $("input[type='checkbox']").filter(function () {
12510                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 6 Nights";
12511                    }).prop("checked", false).trigger('change');
12512                } else if ($('#dayDifference').text() == 7 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12513
12514
12515                    $("input[type='checkbox']").filter(function () {
12516                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 7 Nights";
12517                    }).prop("checked", true).trigger('change');
12518
12519                    $("input[type='checkbox']").filter(function () {
12520                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 7 Nights";
12521                    }).prop("checked", false).trigger('change');
12522                } else if ($('#dayDifference').text() == 8 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12523
12524
12525                    $("input[type='checkbox']").filter(function () {
12526                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 8 Nights";
12527                    }).prop("checked", true).trigger('change');
12528
12529                    $("input[type='checkbox']").filter(function () {
12530                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 8 Nights";
12531                    }).prop("checked", false).trigger('change');
12532                } else if ($('#dayDifference').text() == 9 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12533
12534                    $("input[type='checkbox']").filter(function () {
12535                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 9 Nights";
12536                    }).prop("checked", true).trigger('change');
12537
12538                    $("input[type='checkbox']").filter(function () {
12539                        return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 9 Nights";
12540                    }).prop("checked", false).trigger('change');
12541                } else if ($('#dayDifference').text() == 10 && selectStandardQueen.includes(parseInt($('#fld_1304368').val())) && $('#fld_1304373').val() == 'No') {
12542
12543                        $("input[type='checkbox']").filter(function () {
12544                            return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Standard Queen, 10 Nights";
12545                        }).prop("checked", true).trigger('change');
12546
12547                        $("input[type='checkbox']").filter(function () {
12548                            return $(this).attr("data-name") === "Hilton Garden Inn Birmingham Brindley Place – Sharing person charge, 10 Nights";
12549                        }).prop("checked", false).trigger('change');
12550                    } else {
12551
12552
12553                    }
12554
12555
12556            });
12557
12558            $('.addonsvp input[type=checkbox]').on('change', function (e) {
12559                payment_section = $('.addonp').val();
12560                if (payment_section == '') {
12561                    $('.addonweb').css("display", "none");
12562                    $('.addnopkg').css("display", "none");
12563                } else {
12564                    $('.selected-addons-package').remove();
12565                    $('.total-addons-price').remove();
12566                                        var selected =
12567                        '<div class="selected-addons-package" style=" margin: 20px 0px; font-size: 17px;"> <strong> Packages Included: </strong><br>';
12568                    var price = 0;
12569                    var flag = 0;
12570
12571                    var symbol = $('.pmnt_fld option:selected').data('symbol');
12572                    if (typeof symbol == "undefined") {
12573                        symbol = '';
12574                    }
12575                    selected += "<li class='addonpackagebullets'>" + $('.addonp option:selected').text() + " - CHF " + parseInt($('.addonp option:selected').data('price')) + "</li>";
12576                    //console.log("Selected: " + $('.addonp option:selected').text());
12577                    //console.log("Selected Price: " + parseInt($('.addonp option:selected').data('cost')));
12578                    price = parseFloat($('.addonp option:selected').data('cost')) + parseFloat(price);
12579                    var individualPrice = parseFloat($('.addonp option:selected').data('price'));
12580                    $('.addonsvp input[type=checkbox]:checked').each(function () {
12581                        selected += "<li class='addonpackagebullets'>" + $(this).data('name');
12582                        //console.log("Price: "+parseInt($(this).data('price')));
12583                        //console.log("Variable Price: "+parseInt(price));
12584                        price = parseFloat($(this).data('price')) + parseFloat(price);
12585                        individualPrice = parseFloat($(this).data('price'));
12586                        selected += " - CHF " + individualPrice + "</li>";
12587                        flag = 1;
12588                    });
12589                    selected += ' </div>';
12590                    if (flag == 1) {
12591                        $('.pmnt_fld').parent('div').parent('div').before(selected);
12592                        // $(this).parent('div').parent('span').append(selected);
12593                        // $('.pmnt_fld').parent('div').parent('div').before(
12594                        //     '<div  class="total-addons-price"  data-price="' + price +
12595                        //     '" style="margin: 20px 0px; font-size: 17px;"><strong> Total Price: </strong>' +
12596                        //     symbol + '' + price + '</div>');
12597                        $('.pmnt_fld').parent('div').parent('div').before(
12598                            '<div  class="total-addons-price"  data-price="' + price +
12599                            '" style="margin: 20px 0px; font-size: 17px;"><strong> Total Price: </strong>CHF ' + price + '</div>');
12600                    }
12601                                    }
12602            });
12603
12604        }
12605
12606
12607    })
12608
12609
12610    var handleResult = function (result) {
12611        if (result.error) {
12612            alert(result.error.message);
12613        }
12614    };
12615
12616    function paymentRedirectionMessage(message)
12617    {
12618        var messageDiv = '<div class="alert alert-success success-message" role="alert"  style="  width: 100%;    font-size: 15px;">' + message + '</div>';
12619        $('form.reg-form-data').before(messageDiv);
12620        $("html, body").animate({scrollTop: 0}, "slow");
12621    }
12622
12623    function paymentRedirectionErrorMessage()
12624    {
12625        $(".success-message").hide();
12626        const message = 'Some thing went wrong while redirecting you to payment please contact event admin.';
12627        var messageDiv = '<div class="alert alert-danger" role="alert"  style="  width: 100%;    font-size: 15px;">' + message + '</div>';
12628        $('form.reg-form-data').before(messageDiv);
12629        $("html, body").animate({scrollTop: 0}, "slow");
12630    }
12631
12632    </script>
12632
12633
12634
12635
12636
12637<script>
12638    function processPaymaya(paymentResultForPayMaya) {
12639        var sessionData = paymentResultForPayMaya.sessRet;
12640        if (typeof sessionData.redirectUrl !== 'undefined' && sessionData.redirectUrl) {
12641            window.location.href = sessionData.redirectUrl;
12642        } else {
12643            paymentRedirectionErrorMessage();
12644        }
12645    }
12646
12647    //custom limit value
12648    function getFieldLimit(field_type,field_id,submitted_value,registration_field_id) {
12649        var post_url = '/en/form/getAvailableLimitOfFormFied/';
12650        $.post(post_url,
12651        {
12652            field_type: field_type,
12653            field_id: field_id,
12654            submitted_value: submitted_value,
12655            registration_field_id: registration_field_id
12656        },
12657        function(data){
12658            // console.log(data);
12659            //ENTER THE DIV WHERE YOU WANT TO SHOW THE LIMIT
12660            $('#grp_fld_1279120').html(data);
12661        });
12662        $.post('/en/form/getEventAttendees/',
12663        function(data){
12664            //ENTER THE DIV WHERE YOU WANT TO SHOW THE TOTAL ATTENDEES
12665            $('#grp_fld_1279121').html(data);
12666        });
12667    }
12668    function processFatora(paymentResultForFatora) {
12669        var sessionData = paymentResultForFatora.sessRet;
12670        if (typeof sessionData.redirectUrl !== 'undefined' && sessionData.redirectUrl) {
12671            window.location.href = sessionData.redirectUrl;
12672        } else {
12673            paymentRedirectionErrorMessage();
12674        }
12675    }
12676
12677    function processFlutterwave(paymentResultForFlutterwave) {
12678        var success_url = 'https://codeseccon.com/en/form/processFlutterwaveSuccess';
12679        var fail_url = 'https://codeseccon.com/en/form/processFlutterwaveFailure';
12680        FlutterwaveCheckout({
12681        public_key: paymentResultForFlutterwave.public_key,
12682        tx_ref: paymentResultForFlutterwave.session_id + '_' + paymentResultForFlutterwave.userId,
12683        amount: paymentResultForFlutterwave.amount,
12684        currency: paymentResultForFlutterwave.currency,
12685        payment_options: "card, banktransfer, ussd, mpesa",
12686        redirect_url: success_url + '/' + btoa(paymentResultForFlutterwave.userId) + '/att',
12687        customer: {
12688            email: paymentResultForFlutterwave.email,
12689            name: paymentResultForFlutterwave.first_name,
12690        },
12691        onclose: function (incomplete) {
12692            if (incomplete === true) {
12693                location.replace(fail_url + '/' + btoa(paymentResultForFlutterwave.userId));
12694            }
12695        }
12696        });
12697
12698    }
12699    
12700    function processSensePass(paymentResultForSensePass) {
12701
12702        console.log(paymentResultForSensePass);
12703        var CheckOutPageURL = paymentResultForSensePass.CheckOutPageURL;
12704        if (typeof CheckOutPageURL!== 'undefined' && CheckOutPageURL) {
12705            window.location.href = CheckOutPageURL;
12706        } else {
12707            paymentRedirectionErrorMessage();
12708        }
12709    }
12710    function processNelNet(paymentResultForNelNet) {
12711
12712        console.log(paymentResultForNelNet);
12713        var CheckOutPageURL = paymentResultForNelNet.CheckOutPageURL;
12714        if (typeof CheckOutPageURL!== 'undefined' && CheckOutPageURL) {
12715            window.location.href = CheckOutPageURL;
12716        } else {
12717            paymentRedirectionErrorMessage();
12718        }
12719    }
12720    function processAffiniPay(paymentResultForNelNet,language) {
12721        var lang= '/en/';
12722        if (lang.length === 0) {
12723            lang=language;
12724        }
12725        var script = document.createElement('script');
12726        script.src = 'https://cdn.affinipay.com/hostedfields/1.4.0/fieldGen_1.4.0.js';
12727        script.onload = function () {
12728            openPaymentModal(paymentResultForNelNet,lang);
12729        };
12730        document.head.appendChild(script);
12731    }
12732    function checkDateTime( current_datetime, slot_id )
12733    {
12734        let all_dates_start_time = [];
12735        let all_dates_end_time = [];
12736        let all_chat_slot_intervals = [];
12737
12738        if( $('#chatslot_start_date').val() === undefined || $('#chatslot_end_date').val() === undefined || $('#chatslot_interval').val() === undefined ) return false;
12739
12740        for(let i = 0; i < $('#chatslot_start_time').val().split(',').length; i++) {
12741            // creating datetime timestamps for all available time slots
12742            all_dates_start_time.push( moment($('#chatslot_start_date').val().split(',')[i] + ' ' + $('#chatslot_start_time').val().split(',')[i], 'YYYY-MM-DD HH:mm').format('YYYY-MM-DD HH:mm') ); 
12743            all_dates_end_time.push( moment($('#chatslot_end_date').val().split(',')[i] + ' ' + $('#chatslot_end_time').val().split(',')[i], 'YYYY-MM-DD HH:mm').format('YYYY-MM-DD HH:mm') ); 
12744            all_chat_slot_intervals.push( moment($('#chatslot_interval').val().split(',')[i] + ' ' + $('#chatslot_interval').val().split(',')[i], 'HH:mm').format('HH:mm') ); 
12745        }
12746        let is_found = false;
12747    
12748        $.each( all_dates_start_time ,function( index, value ){
12749            // checking if provided chat slot is amongs any available time slot
12750            if
12751            ( 
12752                ( moment(current_datetime['start']).isBetween( moment( all_dates_start_time[index] ).subtract(1,'seconds'), moment( all_dates_end_time[index] ).add(1,'seconds') ) )
12753                && ( moment(current_datetime['end']).isBetween( moment( all_dates_start_time[index] ).subtract(1, 'seconds'), moment( all_dates_end_time[index] ).add(1,'seconds') ) )
12754                && current_datetime['start'] < current_datetime['end']
12755            ) 
12756            {
12757                $(`#chat_slot_interval_0_${slot_id}`).val( all_chat_slot_intervals[ index ] );
12758                is_found = true;
12759            }
12760        }) 
12761        return is_found;
12762
12763    }
12764    function validateDateTime(slot_id, element)
12765    {
12766
12767      if( $('#chatslot_start_date').val() === '' ) return true;
12768
12769      let start_date_element_id = `#start_date_0_${slot_id}`;
12770      let end_date_element_id = `#end_date_0_${slot_id}`;
12771      let start_time_element_id = `#start_time_0_${slot_id}`;
12772      let end_time_element_id = `#end_time_0_${slot_id}`;
12773      
12774      if($(`#start_date_0_${slot_id}`).val() === undefined){
12775
12776        start_date_element_id = `#start_date_${slot_id}`;
12777        end_date_element_id = `#end_date_${slot_id}`;
12778        start_time_element_id = `#start_time_${slot_id}`;
12779        end_time_element_id = `#end_time_${slot_id}`;
12780
12781      }
12782      
12783      const start_date = $(start_date_element_id).val()
12784      const end_date = $(end_date_element_id).val()
12785      const start_time = $(start_time_element_id).val() !== '' ? moment($(start_time_element_id).val(), 'HHmm').format('HH:mm:ss') : '';
12786      const end_time = $(end_time_element_id).val() !== '' ? moment($(end_time_element_id).val(),'HHmm').format('HH:mm:ss') : '';
12787
12788      if( start_date !== '' && end_date !== '' && start_time !== '' && end_time != '' )
12789      {
12790          let current_datetime = [];
12791          current_datetime['start'] =  moment(start_date + ' ' + start_time, 'YYYY-MM-DD HH:mm').format('YYYY-MM-DD HH:mm')
12792          current_datetime['end'] =  moment(end_date + ' ' + end_time, 'YYYY-MM-DD HH:mm').format('YYYY-MM-DD HH:mm')
12793          if(!checkDateTime( current_datetime, slot_id ))
12794          {
12795            $(`#${element}`).val('');
12796            Swal.fire({
12797              title: 'Please add your timings as per the available meeting times provided above.',
12798              icon: 'error',
12799              position: 'top'
12800            });
12801          }
12802      }
12803    }
12804    
12805    //Chat Slot Validations
12806    $(function(){
12807
12808
12809        $(document).on('change', '#chat-slot-cont .dates', function () {
12810            const slot_id = $(this).attr('id').split('_').pop();
12811            const element = $(this).attr('id');
12812            validateDateTime(slot_id, element)
12813        })
12814
12815
12816        $(document).on('change', '#chat-slot-cont .app-time', function () {
12817            const slot_id = $(this).attr('id').split('_').pop();
12818            const element = $(this).attr('id');
12819            validateDateTime(slot_id, element)
12820        })
12821
12822
12823
12824
12825        //Start Date
12826        /*$(document).on('change', '.slt_start_date', function () {
12827        const slot_id = $(this).attr('id').split('_').pop();
12828        var current_val = new Date($(this).val());
12829
12830        let all_dates_start = [];
12831        let all_dates_end = [];
12832        let all_chat_slot_intervals = [];
12833
12834        if( $('#chatslot_start_date').val() === undefined || $('#chatslot_end_date').val() === undefined || $('#chatslot_interval').val() === undefined ) return false;
12835
12836        for(let i = 0; i < $('#chatslot_start_time').val().split(',').length; i++) {
12837            // creating datetime timestamps for all available time slots
12838            all_dates_start.push( new Date($('#chatslot_start_date').val().split(',')[i])); 
12839            all_dates_end.push( new Date($('#chatslot_end_date').val().split(',')[i])); 
12840            all_chat_slot_intervals.push($('#chatslot_interval').val().split(',')[i]); 
12841        }
12842        let is_found = false;
12843        $.each(all_dates_start, function(index, value) {
12844            if (current_val >= all_dates_start[index] && current_val <= all_dates_end[index]) {
12845                is_found = true;
12846                $(`#duration_${slot_id}`).val(all_chat_slot_intervals[index]); 
12847                return false; // exit the loop if a date is found that is greater than the single date
12848            }
12849        });
12850        if(is_found==true){  
12851            $(`#start_date_${slot_id}`).val($(this).val()); 
12852            $(".chot_slot_errors").html(''); 
12853            $(`#end_date_${slot_id}`).val($(this).val()); 
12854            $("input[type=submit]").attr('disabled', false);
12855        } else {
12856            $(this).val('');
12857            $(`#end_date_${slot_id}`).val(''); 
12858            $("input[type=submit]").attr('disabled', true);    
12859            $(".chot_slot_errors").html('<span class="alert alert-danger">Please add your timings as per the available meeting times provided above and Start Date/Time should be less than End Date/Time</span>'); 
12860            return false;       
12861            }    
12862        });
12863        //Start Time
12864        $(document).on('change', '.slt_start_time', function () {
12865        const slot_id = $(this).attr('id').split('_').pop();
12866        var current_val = $(this).val();
12867        var start_date_time = new Date($(`#start_date_${slot_id}`).val()+' '+current_val); 
12868
12869        let all_times_start = [];
12870        let all_times_end = [];
12871        let all_chat_slot_intervals = [];
12872
12873        if( $('#chatslot_start_time').val() === undefined || $('#chatslot_end_time').val() === undefined) return false;
12874
12875        for(let i = 0; i < $('#chatslot_start_time').val().split(',').length; i++) {
12876            // creating datetime timestamps for all available time slots
12877            // all_times_start.push($('#chatslot_start_time').val().split(',')[i]); 
12878            all_times_start.push(new Date($('#chatslot_start_date').val().split(',')[i] + ' ' + $('#chatslot_start_time').val().split(',')[i])); 
12879            all_times_end.push(new Date($('#chatslot_end_date').val().split(',')[i] + ' ' + $('#chatslot_end_time').val().split(',')[i])); 
12880            all_chat_slot_intervals.push($('#chatslot_interval').val().split(',')[i]); 
12881        }
12882        let is_found = false;
12883        $.each(all_times_start, function(index, value) {
12884            if (start_date_time >= all_times_start[index] && start_date_time <= all_times_end[index] && (current_val.split(':')[1]) % 5 == 0 ) {
12885                $(`#duration_${slot_id}`).val(all_chat_slot_intervals[index]); 
12886                is_found = true;
12887                return false; // exit the loop if a date is found that is greater than the single date
12888            }
12889        });
12890        if(is_found==true){  
12891            $(`#start_time_${slot_id}`).val($(this).val()); 
12892            $(".chot_slot_errors").html(''); 
12893            
12894            var time = current_val;
12895            var date = new Date('2000-01-01T' + time);
12896            date.setMinutes(date.getMinutes() + 5);
12897            var newTime = date.toTimeString().split(' ')[0];
12898            
12899            $(`#end_time_${slot_id}`).val(newTime); 
12900            $("input[type=submit]").attr('disabled', false);
12901        } else {
12902            $(this).val('');
12903            $(`#end_time_${slot_id}`).val(''); 
12904            $("input[type=submit]").attr('disabled', true);    
12905            $(".chot_slot_errors").html('<span class="alert alert-danger">Please add your timings as per the available meeting times provided above and Start Date/Time should be less than End Date/Time</span>'); 
12906            return false;       
12907            }    
12908        });
12909        //End Date
12910        $(document).on('change', '.slt_end_date', function () {
12911        const slot_id = $(this).attr('id').split('_').pop();
12912        var current_val = new Date($(this).val());
12913        var start_date = new Date($(`#start_date_${slot_id}`).val());
12914
12915        let all_dates_start = [];
12916        let all_dates_end = [];
12917        let all_chat_slot_intervals = [];
12918
12919        if( $('#chatslot_start_date').val() === undefined || $('#chatslot_end_date').val() === undefined || $('#chatslot_interval').val() === undefined ) return false;
12920
12921        for(let i = 0; i < $('#chatslot_start_time').val().split(',').length; i++) {
12922            // creating datetime timestamps for all available time slots
12923            all_dates_start.push( new Date($('#chatslot_start_date').val().split(',')[i])); 
12924            all_dates_end.push( new Date($('#chatslot_end_date').val().split(',')[i])); 
12925        }
12926        let is_found = false;
12927        $.each(all_dates_start, function(index, value) {
12928            if (current_val >= all_dates_start[index] && current_val <= all_dates_end[index] && current_val >=start_date ) {
12929                is_found = true;
12930                return false; // exit the loop if a date is found that is greater than the single date
12931            }
12932        });
12933        if(is_found==true){  
12934            $(`#end_date_${slot_id}`).val($(this).val()); 
12935            $(".chot_slot_errors").html(''); 
12936            $("input[type=submit]").attr('disabled', false);
12937        } else {
12938            $(this).val('');
12939            $("input[type=submit]").attr('disabled', true);    
12940            $(".chot_slot_errors").html('<span class="alert alert-danger">Please add your timings as per the available meeting times provided above and Start Date/Time should be less than End Date/Time</span>'); 
12941            return false;       
12942            }    
12943        });
12944        //End Time
12945        $(document).on('change', '.slt_end_time', function () {
12946        const slot_id = $(this).attr('id').split('_').pop();
12947        var current_val_time = $(this).val();
12948        var current_val = new Date($(`#end_date_${slot_id}`).val() + ' ' + $(this).val());
12949        var start_date_time = new Date($(`#start_date_${slot_id}`).val()+' '+$(`#start_time_${slot_id}`).val()); 
12950
12951        let all_times_start = [];
12952        let all_times_end = [];
12953
12954        if( $('#chatslot_start_time').val() === undefined || $('#chatslot_end_time').val() === undefined) return false;
12955
12956        for(let i = 0; i < $('#chatslot_end_time').val().split(',').length; i++) {
12957            // creating datetime timestamps for all available time slots
12958            // all_times_start.push(new Date($('#chatslot_start_date').val().split(',')[i] + ' ' + $('#chatslot_end_time').val().split(',')[i])); 
12959            all_times_end.push(new Date($('#chatslot_end_date').val().split(',')[i] + ' ' + $('#chatslot_end_time').val().split(',')[i])); 
12960            all_times_start.push($('#chatslot_start_time').val().split(',')[i]); 
12961            // all_times_end.push($('#chatslot_end_time').val().split(',')[i]); 
12962        }
12963        let is_found = false;
12964        let current_val_full = new Date($(`#end_date_${slot_id}`).val()+' '+$(this).val());
12965
12966        $.each(all_times_start, function(index, value) {
12967            if (
12968                // current_val >= all_times_start[index] 
12969                // && 
12970                current_val <= all_times_end[index]
12971                && (current_val_time.split(':')[1]) % 5 == 0 
12972                && current_val_full>start_date_time
12973                ) {
12974                is_found = true;
12975                return false; // exit the loop if a date is found that is greater than the single date
12976            }
12977        });
12978        if(is_found==true){  
12979            $(".chot_slot_errors").html('');  
12980            $("input[type=submit]").attr('disabled', false);
12981        } else {
12982            $(this).val(''); 
12983            $("input[type=submit]").attr('disabled', true);    
12984            $(".chot_slot_errors").html('<span class="alert alert-danger">Please add your timings as per the available meeting times provided above and Start Date/Time should be less than End Date/Time</span>'); 
12985            return false;       
12986            }    
12987        });
12988        */
12989
12990        // $(document).on('change', '.slt_end_date', function () {
12991        // $('input[name="slt_end_date[]"]').each(function(index, obj) {    
12992        // var current_val = new Date($('input[name="slt_end_date[]"]').eq(index).val());
12993        // var current_start_val = new Date($('input[name="slt_start_date[]"]').eq(index).val());
12994        // var start_date_invitation = new Date($('#start_date_chat_slot').val());
12995        //     if(current_val>=start_date_invitation && current_val>=current_start_val){  
12996        //         // $('input[name="slt_end_date[]"]').eq(index).val($('input[name="slt_start_date[]"]').eq(index).val());
12997        //         $(".chot_slot_errors").html("");
12998        //         $('input[name="slt_end_date[]"]').eq(index).css("border", "1px solid #DCDBFF");
12999        //         $("input[type=submit]").attr('disabled', false);
13000        //     } else {
13001        //         $('input[name="slt_end_date[]"]').eq(index).css("border", "3px solid red");
13002        //         $(".chot_slot_errors").html('Please enter starting date between ' +$('#start_date_chat_slot').val()+ ' & ' +$('#end_date_chat_slot').val());
13003        //         $("input[type=submit]").attr('disabled', true);
13004        //     }
13005        //     });       
13006        // });
13007        //Start Time
13008        // $(document).on('change', '.slt_start_time', function () {
13009        // $('input[name="slt_start_time[]"]').each(function(index, obj) {    
13010        // var current_val = $('input[name="slt_start_time[]"]').eq(index).val().split(':');
13011        // var start_time_invitation = ($('#start_time_chat_slot').val()).split(':');
13012        // var end_time_invitation = ($('#end_time_chat_slot').val()).split(':');
13013        // var end_time = $('input[name="slt_end_time[]"]').eq(index).val();
13014        // var selected_end_time = new Date("November 13, 2013 " + end_time);
13015        // current_end_time = selected_end_time.getTime();
13016
13017        // var selected_time = new Date("November 13, 2013 " + $('input[name="slt_start_time[]"]').eq(index).val());
13018        // current_time = selected_time.getTime();
13019        // var stt = new Date("November 13, 2013 " + $('#start_time_chat_slot').val());
13020        // stt = stt.getTime();
13021        // var endt = new Date("November 13, 2013 " + $('#end_time_chat_slot').val());
13022        // endt = endt.getTime();        
13023        // if(
13024        //     parseInt(current_val[1])%5==0 
13025        //     && current_time >= stt
13026        //     && current_time <= endt
13027        //     && (current_time <= current_end_time || end_time == '')
13028        //     ){
13029        //         $(".chot_slot_errors").html("");
13030        //         $('input[name="slt_start_time[]"]').eq(index).css("border", "1px solid #DCDBFF");
13031        //         $("input[type=submit]").attr('disabled', false);
13032        //     } else {
13033        //         $('input[name="slt_start_time[]"]').eq(index).css("border", "3px solid red");
13034        //         $(".chot_slot_errors").html('Please enter time only in mulitple of 5 and between above available time slots');
13035        //         $("input[type=submit]").attr('disabled', true);
13036        //     }
13037        //     });       
13038        // });
13039        //End Time
13040        // $(document).on('change', '.slt_end_time', function () {
13041        // $('input[name="slt_end_time[]"]').each(function(index, obj) {    
13042        // var current_val = $('input[name="slt_end_time[]"]').eq(index).val().split(':');
13043        // var current_start_val = $('input[name="slt_start_time[]"]').eq(index).val().split(':');
13044        // var start_time_invitation = ($('#start_time_chat_slot').val()).split(':');
13045        // var end_time_invitation = ($('#end_time_chat_slot').val()).split(':');
13046        // var selected_time = new Date("November 13, 2013 " + $('input[name="slt_end_time[]"]').eq(index).val());
13047        // current_time = selected_time.getTime();
13048        // var start_time = new Date("November 13, 2013 " + $('input[name="slt_start_time[]"]').eq(index).val());
13049        // started_time = start_time.getTime();
13050        // var stt = new Date("November 13, 2013 " + $('#start_time_chat_slot').val());
13051        // stt = stt.getTime();
13052        // var endt = new Date("November 13, 2013 " + $('#end_time_chat_slot').val());
13053        // endt = endt.getTime();
13054
13055        // if(
13056        //     parseInt(current_val[1])%5==0 
13057        //     && current_time > stt
13058        //     && current_time <= endt
13059        //     && current_time > started_time
13060        //     ){
13061        //         $(".chot_slot_errors").html("");
13062        //         $('input[name="slt_end_time[]"]').eq(index).css("border", "1px solid #DCDBFF");
13063        //         $("input[type=submit]").attr('disabled', false);
13064        //     } else {
13065        //         $('input[name="slt_end_time[]"]').eq(index).css("border", "3px solid red");
13066        //         $(".chot_slot_errors").html('Please enter time only in mulitple of 5 and between above available time slots');
13067        //         $("input[type=submit]").attr('disabled', true);
13068        //     }
13069        //     });       
13070        // });
13071
13072        //Count Check
13073        //getFieldLimit('checkbox-group','2034','Delux','1279135');
13074
13075        $('select[name="webinar"] option').filter(function(){
13076            return ($(this).val().trim()=="" && $(this).text().trim()=="");
13077        }).remove();
13078    });
13079
13080    var attendee_chat_slot_selection = $('#attendee_chat_slot').val();
13081    if(attendee_chat_slot_selection>0){
13082        var chat_field_name = 'fld_'+attendee_chat_slot_selection+'[]';
13083        $(document).on('change', $("input[name='"+chat_field_name+"']"), function() {
13084            if ($("input[name='"+chat_field_name+"']").is(":checked")) { 
13085                $('#chat-slot-cont').show();
13086            } else {
13087                $('#chat-slot-cont').hide();
13088            }
13089        }); 
13090    }
13091    
13092    $(document).on('change', '.auto_cv_generator', function() {
13093        var checkbox_id = $(this).attr('id');
13094        var field_id = checkbox_id.split('auto_cv');
13095        if ($("input[type=checkbox]").is(
13096                ":checked")) {
13097            $('#fld_' + field_id[1]).prop('required', false);
13098            $('#fld_' + field_id[1]).data('rule-required', false);
13099        } else {
13100            $('#fld_' + field_id[1]).prop('required', true);
13101            $('#fld_' + field_id[1]).data('rule-required', true);
13102        }
13103
13104    }); 
13105</script>
13105
13106
13107
13108
13109        <!-- Form JQUERY -->
13110        
13110<script>
13111            var total_price=0;
13112            // var isPaused = false;
13113            function firstFunction(){
13114                $('#deleteModal').modal();
13115                $('#deleteButton').html('<a class="btn btn-danger" onclick="deleteData()">Yes</a>');
13116                // isPaused = false;
13117                // console.log(deleteData());
13118                // console.log(isPaused);
13119            };
13120            // async function confirmDeleteModal(id){
13121            //     $('#deleteModal').modal();
13122            //     $('#deleteButton').html('<a class="btn btn-danger" onclick="deleteData('+id+')">Delete</a>');
13123            // }
13124            function deleteData(){
13125                // do your stuffs with id
13126                // $("#successMessage").html("Record With id "+id+" Deleted successfully!");
13127                $('#deleteModal').modal('hide'); // now close modal
13128                // console.log('adas');
13129                // return true;
13130                // isPaused = true;
13131                // console.log(isPaused);
13132            }
13133            function TicketAmountCalculate(TicketPackages){
13134                total_price=0;
13135                let totalPriceWithoutTax = 0; // VFC-14947 - add booking fee
13136                let isPackageTaxInclusive = 0;
13137                var totalTaxApplied = 0;
13138                if(TicketPackages.constructor === Object && Object.keys(TicketPackages).length > 0){
13139
13140                        for (const [packageId, package] of Object.entries(TicketPackages)) {
13141                            if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
13142                            // $.each(TicketPackages, function(packageId, package) {
13143                            if (package) {
13144                                var tax = package && package['tax'] ? parseFloat(package['tax']) : 0;
13145                                var pkg_price = package['pkg_price'] ? parseFloat(package['pkg_price']) : 0;
13146                                var pkg_qty = parseFloat(package['pkg_qty']);
13147                                // var package_total=(tax+pkg_price)*pkg_qty;
13148                                var package_total = pkg_price * pkg_qty;
13149                                totalTaxApplied += (tax * pkg_qty);
13150                                isPackageTaxInclusive = parseInt(package['isTaxInclusive']);
13151                                let packageTotalWithoutTax = (isPackageTaxInclusive == 0) ? (pkg_price * pkg_qty) : ((tax + pkg_price) * pkg_qty); // VFC-14947 - add booking fee
13152                                // Iterate through each item/package addon
13153                                var addons_price = 0;
13154                                let addonTotalWihoutTax = 0; // VFC-14947 - add booking fee
13155                                for (const [key, item] of Object.entries(package)) {
13156                                    // $.each(package, function(key, item) {
13157                                    if (key !== 'pkg_price' && key !== 'total_price' && key !== 'tax' && key !== 'pkg_qty' && key !== 'symbol' && key != 'pkgTaxAmount' && key != 'isTaxInclusive' && key != 'inclusiveTaxValue' && key != 'inclusiveTaxPrice') {
13158                                        // if(item['addons_price'] && item['addons_tax'] && item['addons_qty']){
13159                                        var addons_p = parseFloat(item['addons_price']) || 0;
13160                                        var addons_tax = parseFloat(item['addons_tax']) || 0;
13161                                        var addons_qty = parseFloat(item['addons_qty']) || 0;
13162
13163                                        // var totalAddonsAmount=(addons_p+addons_tax)*addons_qty;
13164                                        var totalAddonsAmount = addons_p * addons_qty;
13165                                        totalTaxApplied += (addons_tax * addons_qty);
13166                                        addonTotalWihoutTax += (isPackageTaxInclusive == 0) ? (addons_p * addons_qty) : ((addons_p + addons_tax) * addons_qty); // VFC-14947 - add booking fee
13167                                        addons_price = addons_price + totalAddonsAmount;
13168                                        // }
13169                                    }
13170                                }
13171
13172                                total_price = total_price + package_total + addons_price;
13173                                totalPriceWithoutTax = totalPriceWithoutTax + packageTotalWithoutTax + addonTotalWihoutTax; // VFC-14947 - add booking fee
13174                            }
13175
13176                        }
13177
13178                    }
13179                }
13180                if(TicketPackages){
13181                    var serializedObject = JSON.stringify(TicketPackages);
13182                    localStorage.setItem("TicketPackages", serializedObject);
13183                    ticketDependency();
13184                }
13185                if(EditProfileDiscCode && EditProfileDiscountAmount){
13186                    $("#LoadingBar").show();
13187                        updateTotalAmount(EditProfileDiscCode,EditProfileDiscountAmount);
13188                }
13189                CalculateDonationPackageAmount();
13190                $('.order__summary .price__item > div.total__price > span').attr('data-original_total_price_without_tax', totalPriceWithoutTax-PackageDonationAmountNotIncludeBookingFee); // VFC-14947 - add booking fee
13191                $('.order__summary .price__item > div.total__price > span').attr('data-is_package_tax_inclusive', isPackageTaxInclusive); // VFC-14947 - add booking fee
13192                return {
13193                    total_price: total_price,
13194                    totalTaxApplied: totalTaxApplied
13195                };
13196            }
13197
13198            /**
13199             * Get Total Amount including Booking fee if ANY
13200             * // VFC-14947 - add booking fee
13201             *
13202             * @param totalAmount number
13203             *
13204             * @returns {number} total amount including Booking Fee
13205             */
13206
13207             
13208             function setTotalIncludingBookingFee(TicketPackages,isDonationV5Enable =false) {
13209                var isTicketTop = '';
13210                if (isTicketTop) {
13211                let totalAmount = $('.original_total_price_span-d').attr('data-original_total_price');
13212                totalAmount = isNaN(totalAmount) ? 0 : totalAmount;
13213                totalAmount = parseFloat(totalAmount);
13214                calculatedAmountArr = $('.order__summary .price__item > div.booking_fee').attr('data-calculated_amount_arr');
13215                calculatedAmountArr = calculatedAmountArr ? JSON.parse(calculatedAmountArr) : {};
13216                subTotalPrice = $('.order__summary > div.price__item >div:nth-of-type(1) > span').attr('data-subtotal');
13217                subTotalPrice = isNaN(subTotalPrice) ? 0 : subTotalPrice;
13218                subTotalPrice = parseFloat(subTotalPrice);
13219                discountedAmount = $('.order__summary > div.price__item >div:nth-of-type(2) > span').attr('data-discounted_amount');
13220                discountedAmount = isNaN(discountedAmount) ? 0 : discountedAmount;
13221                discountedAmount = parseFloat(discountedAmount);
13222
13223                var symbol = $('.pmnt_fld option:selected').data('symbol');
13224                if (typeof symbol === 'undefined') {
13225                    symbol='$';
13226                }
13227
13228                // if (parseInt(showBookingRelatedData) == 0) { // do this only when its single ticket selection enabled
13229                //     $('.order__summary .price__item > div.total__price > span').text(symbol + '' + totalAmount.toFixed(2));
13230                //     return false;
13231                // }
13232
13233                let isDiscountApplied = $('.original_total_price_span-d').attr('data-is_discount_applied');
13234                if (typeof isDiscountApplied !== 'undefined' && isDiscountApplied !== false) {
13235                    isDiscountApplied = isNaN(isDiscountApplied) ? 0 : isDiscountApplied;
13236                    isDiscountApplied = parseInt(isDiscountApplied);
13237                } else {
13238                    isDiscountApplied = 0;
13239                }
13240
13241                let totalAmountWithoutTax = $('.original_total_price_span-d').attr('data-original_total_price_without_tax');
13242                totalAmountWithoutTax = isNaN(totalAmountWithoutTax) ? 0 : totalAmountWithoutTax;
13243                totalAmountWithoutTax = parseFloat(totalAmountWithoutTax);
13244
13245                let isPackageTaxInclusive = $('.original_total_price_span-d').attr('data-is_package_tax_inclusive');
13246                isPackageTaxInclusive = parseInt(isPackageTaxInclusive);
13247
13248                // get tax to apply on booking fee on top of booking fee
13249                let packageTax = 0;
13250                let packageTaxes = {};
13251                addonsPriceForBookingFee = 0;
13252                if (TicketPackages.constructor === Object && Object.keys(TicketPackages).length > 0) {
13253                    $.each(TicketPackages, function (packageId, package) {
13254                        if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
13255                            if (package['isTaxInclusive'] == 0) {
13256                                isPackageTaxInclusive = 0;
13257                            }
13258                            packageTax = parseFloat(package['pkgTaxAmount']);
13259                            packageTaxes[packageId] = packageTax;
13260                            for (const [key, item] of Object.entries(package)) {
13261                                // $.each(package, function(key, item) {
13262                                if (key !== 'pkg_price' && key !== 'total_price' && key !== 'tax' && 
13262key !== 'pkg_qty' && key !== 'symbol' && key != 'pkgTaxAmount' && key != 'isTaxInclusive' && key != 'inclusiveTaxValue' && key != 'inclusiveTaxPrice' && key != 'isDonation' && key != 'applyBookingFeeToDonation') {
13263                                    var addonP = parseFloat(item['addons_price']) || 0;
13264                                    var addonQ = parseFloat(item['addons_qty']) || 0;
13265                                    addonsPriceForBookingFee += addonP * addonQ;
13266                                }
13267                            }
13268                        }
13269                        // return false; // break the loop since it is only first ticket type based tax
13270                    });
13271                }
13272                packageTax = parseFloat(packageTax);
13273
13274                let bookingFee = 0;
13275                if ($('input[name="optionsRadios"]:checked').length > 0) {
13276                    bookingFee = $('input[name="optionsRadios"]:checked').attr('data-booking-fee');
13277                    bookingFee = Number(bookingFee.replace(/[^0-9\.-]+/g, ""));
13278                    bookingFee = parseFloat(bookingFee);
13279
13280                    if (bookingFee == 0) { // case when booking fee is Zero
13281                        $('#booking_fee').text('0');
13282                        $('#booking_fee').attr('data-booking_amount', '0');
13283                    }
13284                }
13285
13286                let bookingFeeAmount = totalAmountWithoutTax * (bookingFee / 100); // booking fee is actually in %
13287                let bookingFeeAmountAfterTax = bookingFeeAmount;
13288                if (isPackageTaxInclusive == 0) { // applying tax upon top of booking fee only for exclusive tax
13289                    bookingFeeAmountAfterTax = 0;
13290                    // let bookingFeeAmountTax = bookingFeeAmount * packageTax / 100;
13291                    // bookingFeeAmountAfterTax = bookingFeeAmount + bookingFeeAmountTax;
13292                    for (const [packageId, packageTax] of Object.entries(packageTaxes)) {
13293                         if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
13294                        tBookingFeeAmount = (calculatedAmountArr[packageId] ? calculatedAmountArr[packageId] : (TicketPackages[packageId]['pkg_price'] * TicketPackages[packageId]['pkg_qty']) + addonsPriceForBookingFee) * (bookingFee / 100);
13295                        bookingFeeAmountAfterTax += calculatedAmountArr[packageId] ? (tBookingFeeAmount) : (tBookingFeeAmount + (tBookingFeeAmount * packageTax / 100));
13296                         }
13297                     }
13298                }
13299                let totalBookingFeeAmountAfterTax = bookingFeeAmountAfterTax;
13300                let totalTaxAmount = parseFloat($('.order__summary .price__item > div.total-tax > span').attr("data-total_tax_no_booking_fee"));
13301                let testTaxAmount = parseFloat($('.order__summary .price__item > div.total-tax > span').attr("data-total_tax_no_booking_fee"));
13302                if (isPackageTaxInclusive == 0) {
13303                    // For exclusive tax, subtract the tax amount from bookingFeeAmountAfterTax for visibility
13304                    let bookingFeeAmountBeforeTax = 0;
13305                    for (const [packageId, packageTax] of Object.entries(packageTaxes)) {
13306                         if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
13307                        let packageBookingFee = (calculatedAmountArr[packageId] ? calculatedAmountArr[packageId] : (TicketPackages[packageId]['pkg_price'] * TicketPackages[packageId]['pkg_qty']) + addonsPriceForBookingFee) * (bookingFee / 100);
13308                        let taxAmount = packageBookingFee * (packageTax / 100);
13309                        bookingFeeAmountAfterTax -= taxAmount;
13310                        totalTaxAmount += taxAmount;
13311                        }
13312                    }
13313
13314                    if(bookingFee != 0){
13315                        testTaxAmount = testTaxAmount + (testTaxAmount * (bookingFee / 100));
13316                        testTaxAmount=testTaxAmount-(parseFloat(taxAppliedUpgrade) || 0);
13317                        $('.order__summary .price__item > div.total-tax > span').attr("data-total_tax", testTaxAmount.toFixed(2));
13318                        if(symbol != ''){ 
13319                            $('.order__summary .price__item > div.total-tax > span').text(symbol + '' + formatTotal(testTaxAmount));
13320                        } else {
13321                            $('.order__summary .price__item > div.total-tax > span').text(formatTotal(testTaxAmount));
13322                        }
13323                        totalTaxAmount = testTaxAmount;
13324                    } else {
13325                        totalTaxAmount = parseFloat($('.order__summary .price__item > div.total-tax > span').attr("data-total_tax_no_booking_fee"));
13326                        totalTaxAmount= totalTaxAmount-(parseFloat(taxAppliedUpgrade) || 0);
13327                        if(symbol != ''){ 
13328                            $('.order__summary .price__item > div.total-tax > span').text(symbol + '' + formatTotal(totalTaxAmount));
13329                        } else {
13330                            $('.order__summary .price__item > div.total-tax > span').text(formatTotal(totalTaxAmount));
13331                        }
13332                    }
13333                }
13334                if ($('#booking_fee').length > 0) {
13335                    bookingFeeAmount = bookingFeeAmount - (upgradeProfileBookingFeeAmount + upgradeProfileBookingFeeTax);
13336                    if (typeof symbol === 'undefined') {
13337                        $('#booking_fee').text("$" +formatTotal(bookingFeeAmount)); //bookingFeeAmountAfterTax
13338                    }else{
13339                        $('#booking_fee').text(symbol + formatTotal(bookingFeeAmount)); // bookingFeeAmountAfterTax
13340                    }
13341                
13342                    $('#booking_fee').attr('data-booking_amount', bookingFeeAmount); // bookingFeeAmountAfterTax
13343                }
13344                let totalPriceIncludingBookingFee = totalAmount + totalBookingFeeAmountAfterTax;
13345                if ((subTotalPrice - discountedAmount) == 0) {
13346                    totalTaxAmount = 0;
13347                }
13348
13349
13350                // Include state tax (tax obligations) in total as well
13351                // Prefer the data attribute when present; otherwise parse the visible text
13352                let stateTaxAmount = 0;
13353                let stateTaxAmountAttr = $('.order__summary .price__item > div.total__tax > span').attr('data-state_tax');
13354                if (typeof stateTaxAmountAttr !== 'undefined' && stateTaxAmountAttr !== null && String(stateTaxAmountAttr).trim() !== '') {
13355                    var stateTaxParsed = parseFloat(stateTaxAmountAttr);
13356                    stateTaxAmount = Number.isFinite(stateTaxParsed) ? stateTaxParsed : 0;
13357                } else {
13358                    let stateTaxText = $('.order__summary .price__item > div.total__tax > span').text();
13359                    if (typeof stateTaxText !== 'undefined') {
13360                        stateTaxText = stateTaxText.toString();
13361                        stateTaxText = stateTaxText.replace(/[^0-9.\-]+/g, '');
13362                        var stateTaxFromText = parseFloat(stateTaxText);
13363                        stateTaxAmount = Number.isFinite(stateTaxFromText) ? stateTaxFromText : 0;
13364                    }
13365                }
13366
13367                if (!enableV5ApiDiscount) {
13368                    stateTaxAmount = 0;
13369                }
13370
13371                var donationAmount = PackageDonationAmount;
13372                if(isDonationV5Enable){
13373                    donationAmount = 0;
13374                }
13375                totalProcessedPrice = (subTotalPrice - discountedAmount) + (totalTaxAmount + stateTaxAmount) + bookingFeeAmount + donationAmount;
13376
13377                totalProcessedPrice = Math.ceil(totalProcessedPrice * 100) / 100;
13378
13379                // $('.order__summary .price__item > div.total__price > span').text(symbol + '' + totalPriceIncludingBookingFee.toFixed(2));
13380                $('.order__summary .price__item > div.total__price > span').text(symbol + '' + formatTotal(totalProcessedPrice));
13381                    if(! enableV5ApiDiscount) {
13382
13383                        if (bookingFeeAmount <= 0) {
13384                            $('.pricing.booking_fee').hide();
13385                        } else {
13386                            $('.pricing.booking_fee').show();
13387                        }
13388
13389                        if (discountedAmount <= 0) {
13390                            $('.pricing.discount').hide();
13391                        } else {
13392                            $('.pricing.discount').show();
13393                        }
13394
13395                        if (totalTaxAmount <= 0) {
13396                            $('.pricing.total-tax').hide();
13397                        } else {
13398                            $('.pricing.total-tax').show();
13399                        }
13400                    }
13401                    if (PackageDonationAmount <= 0) {
13402                        $('.pricing.Donation').hide();
13403                    } else {
13404                       var appID= '20550';
13405                        if(appID == 20576 ){
13406                        $('.order__summary .price__item .Donation span')
13407                            .text(`${symbol}${formatTotal(PackageDonationAmount)}`)
13408                            .attr('data-total_donation', PackageDonationAmount.toFixed(2));
13409                        }
13410
13411                        $('.pricing.Donation').show();
13412                    }
13413
13414
13415                }
13416            }
13417
13418
13419                $(function () {
13420                // Shuttle-only vFairs: payment UI hidden — set pmnt_fld + currency prefix.
13421                // Does not run when Cheque/PO are available or for non-vFairs gateways.
13422                if (parseInt(isTicket, 10) && autoSelectShuttlePaymentMethod()) {
13423                    var symbol = $('.pmnt_fld option:selected').data('symbol');
13424                    if (typeof symbol === 'undefined' || symbol === null || symbol === '') {
13425                        symbol = $('.pmnt_fld option:selected').attr('data-symbol');
13426                    }
13427                    if (symbol) {
13428                        $(".price__item .pricing, .price__item .total__price").each(function () {
13429                            only_price = $(this).find('span').text();
13430                            if ($.isNumeric(only_price)) {
13431                                only_price = formatTotal(only_price);
13432                                price = symbol + '' + only_price;
13433                            } else {
13434                                price = symbol + '' + only_price.substring(1, only_price.length);
13435                            }
13436                            $(this).find('span').text(price);
13437                        });
13438                    }
13439                }
13440
13441                $('input[name="optionsRadios"]').change(function () {
13442                    payment_name= $(this).data('name');
13443
13444                    if(parseInt(isStripeConnectElement)){
13445                        if(payment_name =='Stripe connect'){
13446                            $('#payment-element').show();
13447                        }else{
13448                            $('#payment-element').hide();
13449                        }
13450                    }else{
13451                        if(payment_name =='Stripe'){
13452                            $('#payment-element').show();
13453                        }else{
13454                            $('#payment-element').hide();
13455                        }
13456                    }
13457
13458                    $('.pmnt_fld').val($(this).val());
13459                    // console.log($(this).val());
13460                    var symbol = $('.pmnt_fld option:selected').data('symbol');
13461                    $(".price__item .pricing, .price__item .total__price").each(function () {
13462                        only_price = $(this).find('span').text();
13463                        // console.log("only_price");
13464                        
13465                        if ($.isNumeric(only_price)) {
13466                            only_price = formatTotal(only_price);
13467                            // console.log('yes');
13468                            price = symbol + '' + only_price;
13469                        } else {
13470                            price = symbol + '' + only_price.substring(1, only_price.length);
13471                        }
13472                        $(this).find('span').text(price);
13473                    });
13474                    if( $('.hike_drop_price').length >0){
13475                        $('.hike_drop_price').each(function() {
13476                            var text = $(this).text(); // Get the current text
13477                            var updatedText = '(Was '+symbol + text+')';
13478                            $(this).text(updatedText); // Set the modified text
13479                        });
13480                    }
13481                    if( $('.drop_hike_amount').length >0){
13482                        $('.drop_hike_amount').each(function() {
13483                            var amount = $(this).text();
13484                            var updatedAmount = symbol + amount;  // Prepend symbol to the current amount
13485                            $(this).text(updatedAmount);
13486                        });
13487                    }
13488                    $(".ticket__addon__item > p.ticketadd__price").each(function () {
13489                        only_price = $(this).text();
13490
13491                        if ($.isNumeric(only_price)) {
13492                            only_price = formatTotal(only_price);
13493                            price = symbol + '' + only_price;
13494                        } else {
13495                            price = symbol + '' + only_price.substring(1, only_price.length);
13496                        }
13497                        $(this).text(price)
13498
13499                        only_tax = $(this).next().next().data('addon-tax');
13500                        if ($.isNumeric(only_tax)) {
13501                            only_tax = formatTotal(only_tax);
13502                            // console.log(only_tax);
13503                            // tax = 'Tax: '+symbol + '' + parseFloat(only_tax).toFixed(2);
13504                            tax = symbol + '' + only_tax;
13505
13506                        } else {
13507                            // console.log((only_tax.substring(1, only_tax.length)));
13508                            tax = +symbol + '' + parseFloat((only_tax.substring(1, only_tax.length))).toFixed(2);
13509                            // tax = 'Tax: '+symbol + '' + parseFloat((only_tax.substring(1, only_tax.length))).toFixed(2);
13510                        }
13511
13512
13513                        tax_text=$(this).next().text().split(':');
13514
13515                        $(this).next().text(tax_text[0]+':'+tax);
13516                    });
13517
13518            // Recalculate Total to ensure State Tax remains included when payment method changes
13519            try {
13520                if (!(typeof enableV5ApiDiscount !== 'undefined' && enableV5ApiDiscount)) {
13521                    return; // Only recalc here when V5 API is on; otherwise skip
13522                }
13523                // Subtotal
13524                let subTotalPrice = 0;
13525                let subTotalAttr = $('.order__summary .price__item >
13525 div:nth-of-type(1) span').attr('data-subtotal');
13526                if (typeof subTotalAttr !== 'undefined' && subTotalAttr !== '') {
13527                    subTotalPrice = isNaN(subTotalAttr) ? 0 : parseFloat(subTotalAttr);
13528                } else {
13529                    let subTotalText = $('.order__summary .price__item > div:nth-of-type(1) span').text();
13530                    if (typeof subTotalText !== 'undefined') {
13531                        subTotalText = subTotalText.toString().replace(/[^0-9.\-]+/g, '');
13532                        subTotalPrice = isNaN(subTotalText) ? 0 : parseFloat(subTotalText);
13533                    }
13534                }
13535
13536                // Existing tax line (non-state tax)
13537                let totalTaxAmount = 0;
13538                let totalTaxAttr = $('.order__summary .price__item > div.total-tax > span').attr('data-tax');
13539                if (typeof totalTaxAttr !== 'undefined' && totalTaxAttr !== '') {
13540                    totalTaxAmount = isNaN(totalTaxAttr) ? 0 : parseFloat(totalTaxAttr);
13541                } else {
13542                    let totalTaxText = $('.order__summary .price__item > div.total-tax > span').text();
13543                    if (typeof totalTaxText !== 'undefined') {
13544                        totalTaxText = totalTaxText.toString().replace(/[^0-9.\-]+/g, '');
13545                        totalTaxAmount = isNaN(totalTaxText) ? 0 : parseFloat(totalTaxText);
13546                    }
13547                }
13548
13549                // State tax line
13550                let stateTaxAmount = 0;
13551                let stateTaxAmountAttr = $('.order__summary .price__item > div.total__tax > span').attr('data-state_tax');
13552                if (typeof stateTaxAmountAttr !== 'undefined' && stateTaxAmountAttr !== '') {
13553                    stateTaxAmount = isNaN(stateTaxAmountAttr) ? 0 : parseFloat(stateTaxAmountAttr);
13554                } else {
13555                    let stateTaxText = $('.order__summary .price__item > div.total__tax > span').text();
13556                    if (typeof stateTaxText !== 'undefined') {
13557                        stateTaxText = stateTaxText.toString().replace(/[^0-9.\-]+/g, '');
13558                        stateTaxAmount = isNaN(stateTaxText) ? 0 : parseFloat(stateTaxText);
13559                    }
13560                }
13561
13562                // Booking fee
13563                let bookingFeeAmount = 0;
13564                if ($('#booking_fee').length > 0) {
13565                    let bookingAttr = $('#booking_fee').attr('data-booking_amount');
13566                    if (typeof bookingAttr !== 'undefined' && bookingAttr !== '') {
13567                        bookingFeeAmount = isNaN(bookingAttr) ? 0 : parseFloat(bookingAttr);
13568                    } else {
13569                        let bookingText = $('#booking_fee').text();
13570                        if (typeof bookingText !== 'undefined') {
13571                            bookingText = bookingText.toString().replace(/[^0-9.\-]+/g, '');
13572                            bookingFeeAmount = isNaN(bookingText) ? 0 : parseFloat(bookingText);
13573                        }
13574                    }
13575                }
13576
13577                // Donation
13578                let PackageDonationAmount = 0;
13579                if ($('.order__summary .price__item .Donation span').length > 0) {
13580                    let donationText = $('.order__summary .price__item .Donation span').text();
13581                    if (typeof donationText !== 'undefined') {
13582                        donationText = donationText.toString().replace(/[^0-9.\-]+/g, '');
13583                        PackageDonationAmount = isNaN(donationText) ? 0 : parseFloat(donationText);
13584                    }
13585                }
13586
13587                // Compute and set total
13588                let totalProcessedPrice = (subTotalPrice) + (totalTaxAmount + stateTaxAmount) + bookingFeeAmount + PackageDonationAmount;
13589                totalProcessedPrice = Math.ceil(totalProcessedPrice * 100) / 100;
13590                $('.order__summary .price__item > div.total__price > span').text(symbol + '' + formatTotal(totalProcessedPrice));
13591            } catch (e) {
13592                // fail silently; do not block UX
13593            }
13594            
13595                });
13596
13597                // $('.ticketSelbtn').click(function () {
13598                //     $('.package_list').val($(this).data('package'));
13599                //
13600                // });
13601                // $('.addonBtn').click(function () {
13602                //     addons = $(this).data('addons')
13603                //     addon_price= $(this).data('addon-price')
13604                //     $("input[name='pmnt_addons_51[]']").each(function (index, obj) {
13605                //         if (addons == $(this).val()) {
13606                //             $(this).prop('checked', true);
13607                //         }
13608                //     });
13609                // });
13610
13611                var buttonPlus = $(".qty-plus");
13612                var buttonMinus = $(".qty-minus");
13613                // var incrementPlus = buttonPlus.click(function () {
13614                var incrementPlus =$(document).on('click', '.qty-plus', function() {
13615                    handlePackageQuantityPlus($(this));
13616                });
13617
13618                var incrementMinus = buttonMinus.click(function () {
13619                    handlePackageQtyMinus($(this));
13620                });
13621
13622                handlePackageQtyMinus = (element) => {
13623                    if(fromBackBtn){
13624                        tcktModifiedFromBackBtn = true;
13625                    }
13626                    if (isTicket && !parseInt(isTicketTop)) {
13627                        $('.order__summary.ordsum').hide();
13628                        $('.single-pay.aa').hide();
13629                        $('.order-now-button1').show();
13630                        $('.packageBlock').html('');
13631                        $('.order-now-button1').prop('disabled', false);
13632                    }
13633                    var $n = $(element).siblings(".qty");
13634                    $('.cacl-disc').prev().val('');
13635                    var amount = Number($n.val());
13636                    var name = $(element).data('name');
13637                    var limit = $(element).parent().data('limit');
13638                    var counVal = $(element).next().val();
13639                    addons = $(element).data('addons')
13640                    if ($('.cacl-disc').data('fld')) {
13641                        var fld = $('.cacl-disc').data('fld').toString();
13642                    } else {
13643                        var fld = $('.addonp').data('fld').toString();
13644                    }
13645                    id = $(element).data('id');
13646                    var addons_qty = 0;
13647                    $('.addon-package-' + id).find("a.addonBtn").each(function () {
13648                        if(parseInt(addons) == parseInt($(element).data("addons"))){
13649                            addons_qty = $(element).next().find('.qty').val();
13650                        }
13651                    });
13652                    var ticket = '';
13653                    $("input[name='pmnt_addons_" + fld + "[]']").each(function (index, obj) {
13654                        if (ticket) {
13655                            if (addons == $(element).val() && parseInt(addons_qty) == 1) {
13656                                $(element).prop('checked', false);
13657                            }
13658                        } else {
13659                            if (addons == $(element).val()) {
13660                                $(element).prop('checked', false);
13661                            }
13662                        }
13663
13664
13665                    });
13666                    $('.order__summary > div.price__item > div.pricing:nth-of-type(2) > span').text(0.00.toFixed(2));
13667                    if (amount > 0) {
13668                        $n.val(amount - 1);
13669                    }
13670                    if (amount == 1) {
13671                        $(element).parent().hide();
13672                        $(element).parent().next().fadeIn();
13673                        $(element).parents('.ticket__item').siblings('.addon-package-' + id).hide();
13674                        // $(this).parents('.ticket__item').siblings('.ticket__addon').hide();
13675                        $(element).parents('.ticket__item').removeClass('hasAddon');
13676                        $(element).parent().siblings('.addonBtn').fadeIn();
13677                    }
13678                    if (counVal < (limit + 2)) {
13679                        $(element).siblings(buttonPlus).show();
13680                    }
13681                    // console.log("counVal: " + counVal);
13682                    // console.log("limit: " + limit);
13683                    if (parseInt(counVal) >= 52) {
13684                        $(element).next().next().hide();
13685                    } else {
13686                        $(element).next().next().show();
13687                    }
13688
13689                    $('.qty_package').each(function() {
13690                        let selectedQty = $(this).val();
13691                        if (parseInt(selectedQty) > 0) {
13692                            let selectedId = $(this).siblings('.qty-plus').attr('data-id');
13693                            $('select.package_list').val(selectedId);
13694                        }
13695                    });
13696
13697                    changePrice($(element));
13698                    var amount = Number($n.val());
13699                    if (amount > 1) {
13700                        $('#bypass').parent('div').show();
13701                    } else {
13702                        $('#bypass').parent('div').hide();
13703                    }
13704                    // if(name == 'package') {
13705                    //     if (amount == 1) {
13706                    //         $(this).hide();
13707                    //     }
13708                    // }
13709
13710
13711                    if (multipleTicketEdit) {
13712                        if (multipleTicketEdit) {
13713                            if (enableUpgradeOnlyPackageAddons) {
13714                                CheckAddonsQtyPackageQtyUpgradeHigher(false);
13715                            }
13716                            if (UpgradePackageAndAddonsOnly) {
13717                                CheckAddonsQtyPackageQtyUpgradeHigher(true);
13718                            }
13719                        }
13720
13721                    }
13722
13723                    order_btn_flag = true;
13724                    $.each($('.qty_package'), function (index, element) {
13725                        if ($(element).val() > 0) {
13726                            order_btn_flag = false;
13727                        }
13728                    });
13729                    $('.order-now-button').prop('disabled', order_btn_flag);
13730                }
13731
13732                var handlePackageQuantityPlus = (element) => {
13733                    
13734                    if(fromBackBtn){
13735                        tcktModifiedFromBackBtn = true;
13736                    }
13737                    $('.order__summary > div.price__item > div.pricing:nth-of-type(2) > span').text(0.00.toFixed(2));
13738                    if (isTicket && !parseInt(isTicketTop)) {
13739                        $('.order__summary.ordsum').hide();
13740                        $('.single-pay.aa').hide();
13741                        $('.order-now-button1').show();
13742                        $('.packageBlock').html('');
13743                        $('.order-now-button1').prop('disabled', false);
13744                    }
13745                    $('.order-now-button').prop('disabled', false);
13746                    
13747
13748                    var $n = $(element).siblings(".qty");
13749                    var packageLimit = $(element).attr("data-package-limit");
13750                    var addonsLimit = $(element).attr("data-addons-limit");
13751                    var limit = 10000;
13752
13753                    if (packageLimit != '' && packageLimit > 0) {
13754                        limit = parseInt(packageLimit);
13755                    }
13756                    if (addonsLimit != '' && addonsLimit > 0) {
13757                        limit = parseInt(addonsLimit);
13758                    }
13759
13760                    var counVal = $(element).prev().val();
13761                    $n.val(Number($n.val()) + 1);
13762                    if (parseInt(counVal) > (limit - 2)) {
13763                        $(element).hide();
13764                    } else {
13765                        if (parseInt(counVal) >= 49) {
13766                            $(element).hide();
13767                        } else {
13768                            $(element).show();
13769                        }
13770                    }
13771                    $('.cacl-disc').prev().val('');
13772                    changePrice($(element));
13773                    var amount = $n.val();
13774                    if (amount > 1) {
13775                        $('#bypass').parent('div').show();
13776                        $(element).prev().prev().show();
13777                    } else {
13778                        $('#bypass').parent('div').hide();
13779                    }
13780                    if (addonsLimit) {
13781
13782                        if (parseInt(counVal) > (limit - 2)) {
13783                            $(element).hide();
13784                        }
13785                    }
13786
13787                        if (multipleTicketEdit) {
13788                            if (enableUpgradeOnlyPackageAddons) {
13789                                CheckAddonsQtyPackageQtyUpgradeHigher(false);
13790                            }
13791                            if (UpgradePackageAndAddonsOnly) {
13792                                CheckAddonsQtyPackageQtyUpgradeHigher(true);
13793                            }
13794                        }
13795
13796                    $('order-now-button').prop('disabled', false);
13797                }
13798
13799                function changePrice(current) {
13800                    // console.log('TicketPackages');
13801                    // console.log(TicketPackages);
13802                    // Calculating price
13803                    // price= current.data('price');
13804                    let packageDetails = {};
13805                    // console.log('change price');
13806                    // console.log(TicketPackages);
13807                    id = current.data('id');
13808                    price = $('.package-block-' + id + ' .total__price').data('price');
13809                    pkg_price = $('.package-block-' + id + ' .total__price').data('pkgprice');
13810                    tax = $('.package-block-' + id + ' .total__price').data('tax');
13811                    qty = $('.package-block-' + id + ' > .ticket__price .qty').val();
13812                    pkgTaxAmount = $('.package-block-'+id+' .total__price').data('pkg_tax_amount'); // VFC-14947 - add booking fee
13813
13814                    isTaxInclusive = $('.package-block-'+id+' .total__price').data('is_tax_inclusive'); // VFC-14947 - add booking fee
13815                    inclusiveTaxValue = $('.package-block-'+id+' .total__price').data('inclusive_tax'); // VFC-14947 - add booking fee
13816                    inclusiveTaxPrice = $('.package-block-'+id+' .total__price').data('inclusive_tax_price'); // VFC-14947 - add booking fee
13817                    isDonation = $('.package-block-'+id+' .total__price').data('is_donation'); // VFC-14947 - add booking fee
13818                    applyBookingFeeToDonation = $('.package-block-'+id+' .total__price').data('apply_booking_fee_to_donation'); // VFC-14947 - add booking fee
13819
13820                    qty= $('.package-block-'+id+' > .ticket__price .qty').val();
13821
13822                    if (qty > 0) {
13823                        if (parseInt(isTicket)) {
13824                            qtty = qty;
13825                        } else {
13826                            qtty = qty - 1;
13827                        }
13828                        $('.user_list').val(qtty).change();
13829                    }
13830                    if(TicketPackages[id]){
13831                        TicketPackages[id]['pkg_price']=pkg_price;
13832                        TicketPackages[id]['total_price']=total_price;
13833                        TicketPackages[id]['pkg_qty']=qty;
13834                        TicketPackages[id]['tax']=tax;
13835                        TicketPackages[id]['pkgTaxAmount'] = pkgTaxAmount; // VFC-14947 - add booking fee
13836
13837                        TicketPackages[id]['isTaxInclusive'] = isTaxInclusive; // VFC-14947 - add booking fee
13838                        TicketPackages[id]['inclusiveTaxValue'] = inclusiveTaxValue; // VFC-14947 - add booking fee
13839                        TicketPackages[id]['inclusiveTaxPrice'] = inclusiveTaxPrice; // VFC-14947 - add booking fee
13840                        TicketPackages[id]['isDonation'] = isDonation; // VFC-14947 - add booking fee
13841                        TicketPackages[id]['applyBookingFeeToDonation'] = applyBookingFeeToDonation; // VFC-14947 - add booking fee
13842
13843
13844                    }else{
13845                        packageDetails['pkg_price']= pkg_price;
13846                        packageDetails['total_price']= total_price;
13847                        packageDetails['pkg_qty']= qty;
13848                        packageDetails['tax']= tax;
13849                        TicketPackages['pkgTaxAmount'] = pkgTaxAmount; // VFC-14947 - add booking fee
13850
13851                        packageDetails['pkgTaxAmount'] = pkgTaxAmount; // VFC-14947 - add booking fee
13852                        packageDetails['isTaxInclusive'] = isTaxInclusive; // VFC-14947 - add booking fee
13853                        packageDetails['inclusiveTaxValue'] = inclusiveTaxValue; // VFC-14947 - add booking fee
13854                        packageDetails['inclusiveTaxPrice'] = inclusiveTaxPrice; // VFC-14947 - add booking fee
13855                        packageDetails['isDonation'] = isDonation; // VFC-14947 - add booking fee
13856                        packageDetails['applyBookingFeeToDonation'] = applyBookingFeeToDonation; // VFC-14947 - add booking fee
13857
13858
13859                        TicketPackages[id]=packageDetails;
13860                    }
13861
13862                    total_addon_price = 0;
13863                    $('.addon-package-' + id).find("a.addonBtn").each(function () {
13864                        addon_qty_limit = getAddonQtyLimit($(this), qty);
13865                        addons_qty = $(this).next().find('.qty').val();
13866                        addons_name = $(this).closest('.ticket__addon__item').find('.ticketadd__title').text();
13867
13868                        if (parseInt(addon_qty_limit) < parseInt(addons_qty)) {
13869                            $(this).next().find('.qty').val(addon_qty_limit);
13870                            addons_qty = addon_qty_limit;
13871                        }
13872                        addons = $(this).data('addons');
13873                        addons_price = $(this).data('addon-price');
13874                        addons_tax = $(this).data('addon-tax');
13875                        let AddonsDetails = {};
13876                        AddonsDetails['id'] = addons;
13877                        AddonsDetails['addons_price'] = addons_price;
13878                        AddonsDetails['addons_name'] = addons_name;
13879                        AddonsDetails['addons_tax'] = addons_tax;
13880                        AddonsDetails['addons_qty'] = addons_qty;
13881                        addonsApplyDiscount = $(this).attr('data-addon-apply-discount');
13882                        AddonsDetails['addons_apply_discount'] = addonsApplyDiscount;
13883                        if (!$(this).is(':visible')) {
13884                            if (addons_qty) {
13885                                total_addon_price = parseFloat(total_addon_price) + (parseFloat(addons_qty) * (parseFloat(addons_tax) + parseFloat(addons_price)));
13886                                AddonsDetails['total_addon_price'] = total_addon_price;
13887                            } else {
13888                                total_addon_price = parseFloat(total_addon_price) + parseFloat(addons_price) + parseFloat(addons_tax);
13889                                AddonsDetails['total_addon_price'] = total_addon_price;
13890                            }
13891                            TicketPackages[id][addons] = AddonsDetails;
13892                        }
13893                        if (TicketPackages[id][addons]) {
13894                            TicketPackages[id][addons] = AddonsDetails;
13895                        }
13896
13897                        $(this).next().attr('data-limit', 10000);
13898
13899                        if (parseInt(addons_qty) < parseInt(addon_qty_limit)) {
13900                            $(this).next().find('.qty-plus').show();
13901                        } else {
13902                            $(this).next().find('.qty-plus').hide();
13903                        }
13904                        // if(addons_qty == 1){
13905                        //     $(this).next().find('.qty-minus').show();
13906                        // }
13907
13908                    });
13909
13910                    // console.log('before TicketPackages increment and decrement');
13911                    // console.log(TicketPackages);
13912                    $.each(TicketPackages, function (packageId, package) {
13913                        // Check the package quantity
13914                        if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
13915                            if (Number(package['pkg_qty']) <= 0) {
13916                                $.each(package, function (key, item) {
13917                                    delete package[key];
13918                                });
13919                                delete TicketPackages[packageId];
13920                                return true; // Continue to next iteration in jQuery's each (similar to continue in a for loop)
13921                            }
13922
13923                            // Iterate through each item/package addon
13924                            // $.each(package, function(key, item) {
13925                            //     if (key !== 'pkg_price' && key !== 'total_price' && key !== 'tax' && 
13925key !== 'pkg_qty' && key !== 'symbol' && key != 'pkgTaxAmount' && key != 'isTaxInclusive' && key != 'inclusiveTaxValue' && key != 'inclusiveTaxPrice') {
13926                            //         if (Number(item['addons_qty']) <= 0) {
13927                            //             delete package[key]; // Delete the addon with addons_qty <= 0
13928                            //         }
13929                            //     }
13930                            // });
13931
13932                            if (!package || typeof package !== 'object') {
13933
13934                            }else{
13935                                $.each(package, function(key, item) {
13936                                    if (key !== 'pkg_price' && key !== 'total_price' && key !== 'tax' && key !== 'pkg_qty' && key !== 'symbol' && key != 'pkgTaxAmount' && key != 'isTaxInclusive' && key != 'inclusiveTaxValue' && key != 'inclusiveTaxPrice') {
13937                                        if (item && typeof item === 'object' && 'addons_qty' in item) {
13938                                            if (Number(item['addons_qty']) <= 0) {
13939                                                delete package[key]; // Delete the addon with addons_qty <= 0
13940                                            }
13941                                        }
13942                                    }
13943                                });
13944                            }
13945
13946                        }
13947
13948                    });
13949                    var {total_price, totalTaxApplied} = TicketAmountCalculate(TicketPackages);
13950                    total_price = total_price + totalTaxApplied;
13951                    var symbol = $('.pmnt_fld option:selected').data('symbol');
13952
13953
13954                    total_text = $('.totalcountT > p').attr('data-total');
13955                    $('.ticket__pkgprice').text(total_price);
13956                    CalculateDonationPackageAmount();
13957                    var subTotal=total_price-totalTaxApplied-PackageDonationAmount;
13958
13959                    if(symbol){
13960                        $('.order__summary .price__item > div:nth-of-type(1) span').text(symbol+''+formatTotal(subTotal));
13961                        $('.order__summary .price__item > div.total__price > span').text(symbol+''+formatTotal(total_price));
13962                        $('.ticketItems .totalcountT p').text(total_text+': '+symbol+''+formatTotal(total_price));
13963                        $('.order__summary .price__item .Donation span')
13964                            .text(`${symbol}${formatTotal(PackageDonationAmount)}`)
13965                            .attr('data-total_donation', PackageDonationAmount.toFixed(2));
13966
13967                    }else{
13968                        $('.order__summary .price__item > div:nth-of-type(1) span').text(formatTotal(subTotal));
13969                        $('.order__summary .price__item > div.total__price > span').text(formatTotal(total_price));
13970                        $('.ticketItems .totalcountT p').text(total_text + ': ' + formatTotal(total_price));
13971                        $('.order__summary .price__item .Donation span')
13972                            .text(`${formatTotal(PackageDonationAmount)}`)
13973                            .attr('data-total_donation', PackageDonationAmount.toFixed(2));
13974
13975                    }
13976                    $('.order__summary .price__item > div.total-tax > span').attr("data-total_tax_no_booking_fee", totalTaxApplied.toFixed(2));
13977                    $('.order__summary .price__item > div.total__price > span').attr('data-original_total_price', total_price);
13978                    $('.order__summary .price__item > div:nth-of-type(1) span').attr('data-subtotal', (subTotal).toFixed(2));
13979                    sessionStorage.setItem('total_price', total_price);
13980                    setTotalIncludingBookingFee(TicketPackages); // VFC-14947 - add booking fee
13981
13982
13983                    if ($('input[name="optionsRadios"]:checked').attr('data-method') !== undefined) {
13984                        TicketPackages['paymentMethodId']=$('input[name="optionsRadios"]:checked').attr('data-method');
13985                    } else {
13986                        TicketPackages['paymentMethodId']=$('input[name="optionsRadios"]').first().attr('data-method');
13987                    }
13988
13989
13990                    if(enableV5ApiDiscount){
13991                        TicketPackages['discountCode'] = '';
13992                        if(multipleTicketEdit){
13993                           TicketPackages['discountCode'] = (EditProfileDiscCode !== null && EditProfileDiscCode !== '') ? EditProfileDiscCode : '';
13994                        }
13995                        TicketPackages['isUpgradeDowngradeProfile'] = (isUpgradeDowngradeProfile !== null && isUpgradeDowngradeProfile !== '' && (isUpgradeDowngradeProfile == 1 || isUpgradeDowngradeProfile == "1")) ? "1" : "0";
13996                         
13997                        if(upgradeDowngradePaymentMethodDetailId !=null){
13998                             TicketPackages['paymentMethodId'] = upgradeDowngradePaymentMethodDetailId;
13999                        }
14000                        if(isUpgradeDowngradeForAPI ==false){
14001                            paymentSummaryObject.getPaymentSummaryDetails(TicketPackages);
14002                        }
14003
14004                    }
14005
14006                }
14007
14008                function getAddonQtyLimit(obj, ticket_qty) {
14009
14010                    if(ticket_qty == 0) {
14011                        return 0;
14012                    } 
14013
14014                    global_limit = obj.siblings('.selectCounter').children('.qty-plus').data('addons-limit');
14015                    var addon_purchase_limit_type = obj.data('purchase_limit_type');
14016                    var addon_max_addons_per_ticket = obj.data('max_addons_per_ticket');
14017                    var addon_max_addons_overall = obj.data('max_addons_overall');
14018                    // var qty = obj.find('.qty').val();
14019                    var limit = '';
14020                    if (addon_purchase_limit_type == 'match_ticket_quantity') {
14021                        limit = ticket_qty;
14022                    } else if (addon_purchase_limit_type == 'fixed_per_ticket') {
14023                        limit = addon_max_addons_per_ticket * ticket_qty;
14024                    } else if (addon_purchase_limit_type == 'total_addons_across_tickets') {
14025                        limit = addon_max_addons_overall;
14026                    }
14027                    if(global_limit != '' && global_limit < limit){
14028                        limit = global_limit;
14029                    }
14030                    return limit;
14031                }
14032
14033                function changeTicket(current){
14034                    // debugger;
14035                    let packageDetails={};
14036                    if($('.cacl-disc').data('fld')){
14037                        var fld = $('.cacl-disc').data('fld').toString();
14038                        $("input[name='pmnt_addons_"+fld+"[]']").each(function (index, obj) {
14039                            $(this).prop('checked', false);
14040                        });
14041                    }
14042                    var appId = 20550;
14043                    $('#bypass').parent('div').hide();
14044                    $('.user_list').val(0).change();
14045                    $('.package_list').val(current.data('package'));
14046                    let package_id=current.data('package');
14047                    qty= 1;
14048                    // $('.user_list').val(qty).change();
14049                    $('.cacl-disc').prop('disabled', false);
14050                    total_price =current.closest('div').find('.total__price').data('price');
14051                    pkg_price =current.closest('div').find('.total__price').data('pkgprice');
14052                    //check old package price
14053
14054                    if(multipleTicketEdit) {
14055                        if (UpgradePackageAndAddonsOnly && notAllowMultileTicketSelection) {
14056                        var checkPackagePrice = false;
14057                        var checkSamePackageSeleted = false;
14058                        if (multipleTicketPackageList) {
14059                            $.each(multipleTicketPackageList, function (key, value) {
14060                                if ($('button.qty-minus[data-id="' + key + '"]').length) {
14061                                    $('button.qty-minus[data-id="' + key + '"]').hide();
14062                                }
14063                                if (key != package_id) {
14064                                    // fetch old package Details
14065                                    const packageBlockOld = document.querySelector('.package-block-' + key);
14066                                    const totalPriceElementOld = packageBlockOld.querySelector('.total__price');
14067                                    const oldPackageprice = totalPriceElementOld.getAttribute('data-price');
14068                                    // new package details
14069                                    const packageBlockNew = document.querySelector('.package-block-' + package_id);
14070                                    const totalPriceElementNew = packageBlockNew.querySelector('.total__price');
14071                                    const NewPackageprice = totalPriceElementNew.getAttribute('data-price');
14072                                    if (NewPackageprice) {
14073                                        if (parseFloat(NewPackageprice) < parseFloat(oldPackageprice)) {
14074                                            checkPackagePrice = true;
14075                                        }
14076                                    }
14077                                } else {
14078                                    if (TicketPackages && Object.keys(TicketPackages).length > 0) {
14079                                        checkSamePackageSeleted = true;
14080                                    }
14081                                }
14082                            });
14083                        }
14084                        if (checkPackagePrice) {
14085                            alert("Upgrade Screen: You can only select a higher amount package.");
14086                            return;
14087                        }
14088                        if (checkSamePackageSeleted && UpgradePackageAndAddonsOnlyTimeout) {
14089                            window.location.reload();
14090                        }
14091                    }
14092                        if (enableUpgradeOnlyPackageAddons && appId != 1000004798) {
14093                            $('.ticket__item').hide();
14094
14095                            var checkPackagePrice = false;
14096                            var checkSamePackageSeleted = false;
14097
14098                            // Function to run the package logic
14099                            function runPackageLogic(iteration) {
14100                                if (multipleTicketPackageList) {
14101                                    $.each(multipleTicketPackageList, function (key, value) {
14102                                        $('.package-block-' + key).show();
14103
14104                                        if ($('button.qty-minus[data-id="' + key + '"]').length) {
14105                                            $('button.qty-minus[data-id="' + key + '"]').hide();
14106                                            $('.package_' + key).hide();
14107                                        }
14108                                    });
14109                                }
14110                                if (iteration < 20) {
14111                                        runPackageLogic(iteration + 1);
14112
14113                                }
14114                            }
14115                            runPackageLogic(0);
14116                        }
14117                    }
14118
14119                    //end
14120
14121                    tax =current.closest('div').find('.total__price').data('tax');
14122                    pkgTaxAmount =current.closest('div').find('.total__price').data('pkg_tax_amount'); // VFC-14947 - add booking fee
14123                    isTaxInclusive = current.closest('div').find('.total__price').data('is_tax_inclusive'); // VFC-14947 - add booking fee
14124                    inclusiveTaxValue = current.closest('div').find('.total__price').data('inclusive_tax'); // VFC-14947 - add booking fee
14125                    inclusiveTaxPrice = current.closest('div').find('.total__price').data('inclusive_tax_price'); // VFC-14947 - add booking fee
14126                    isDonation = current.closest('div').find('.total__price').data('is_donation'); // VFC-14947 - add booking fee
14127                    applyBookingFeeToDonation = current.closest('div').find('.total__price').data('apply_booking_fee_to_donation'); // VFC-14947 - add booking fee
14128                    var symbol = $('.pmnt_fld option:selected').data('symbol');
14129                    total_text=$('.totalcountT > p').attr('data-total');
14130                    packageDetails['pkg_price']= pkg_price;
14131                    packageDetails['total_price']= total_price;
14132                    packageDetails['tax']= tax;
14133                    packageDetails['pkgTaxAmount']= pkgTaxAmount; // VFC-14947 - add booking fee
14134
14135                    packageDetails['isTaxInclusive'] = isTaxInclusive; // VFC-14947 - add booking fee
14136                    packageDetails['inclusiveTaxValue'] = inclusiveTaxValue; // VFC-14947 - add booking fee
14137                    packageDetails['inclusiveTaxPrice'] = inclusiveTaxPrice; // VFC-14947 - add booking fee
14138                    packageDetails['isDonation'] = isDonation;
14139                    packageDetails['applyBookingFeeToDonation'] = applyBookingFeeToDonation;
14140
14141                    packageDetails['pkg_qty']= qty;
14142                    packageDetails['symbol']= symbol;
14143                    if((parseInt(isTicket) && !isGroupRegistrationField)  || (isGroupRegistrationField && !isGroupMultipleSelect)) {
14144                        TicketPackages= {};
14145                        TicketPackages[package_id]=packageDetails;
14146                    }else{
14147                        // TicketPackages[package_id]=packageDetails;
14148                        if (enableV5ApiDiscount){
14149                           
14150                            TicketPackages= {};
14151                            $(".ticket__item").each(function() {
14152                        
14153                                if ($(this).find(".pricebtn-btn").css('display') === 'none') {
14154                                    packageDetailsData={};
14155                                    let package_id = $(this).find(".qty-plus").attr("data-id");
14156                                    console.log('package_id', package_id);
14157                                    if (package_id) {
14158                                        
14159
14160                                        var packageBlock = $('.package-block-' + package_id);
14161                                        
14162                                        var packagePrice = packageBlock.find('.total__price').data('pkgprice');
14163                                        console.log('packagePrice', packagePrice);
14164                                        var packageTax = packageBlock.find('.total__price').data('tax');
14165                                        var packageTaxAmount = packageBlock.find('.total__price').data('pkg_tax_amount');
14166                                        var isTaxInclusive = packageBlock.find('.total__price').data('is_tax_inclusive');
14167                                        var inclusiveTaxValue = packageBlock.find('.total__price').data('inclusive_tax');
14168                                        var inclusiveTaxPrice = packageBlock.find('.total__price').data('inclusive_tax_price');
14169                                        var isDonation = packageBlock.find('.total__price').data('is_donation');
14170                                        var applyBookingFeeToDonation = packageBlock.find('.total__price').data('apply_booking_fee_to_donation');
14171                                        var total_price = packageBlock.find('.total__price').data('price'); // Added total_price
14172                                        var qtyPackage = packageBlock.find('.qty_package').val(); // Added total_price
14173
14174                                        // Adding additional variables to packageDetails
14175                                        packageDetailsData['pkg_price'] = packagePrice;
14176                                        packageDetailsData['tax'] = packageTax;
14177                                        packageDetailsData['pkgTaxAmount'] = packageTaxAmount;
14178                                        packageDetailsData['isTaxInclusive'] = isTaxInclusive;
14179                                        packageDetailsData['inclusiveTaxValue'] = inclusiveTaxValue;
14180                                        packageDetailsData['inclusiveTaxPrice'] = inclusiveTaxPrice;
14181                                        packageDetailsData['isDonation'] = isDonation;
14182                                        packageDetailsData['applyBookingFeeToDonation'] = applyBookingFeeToDonation;
14183                                        packageDetailsData['total_price'] = total_price; // Added total_price to packageDetails
14184                                        packageDetailsData['symbol'] = symbol; // Added total_price to packageDetails
14185                                        packageDetailsData['pkg_qty'] = parseInt(qtyPackage); // Convert qtyPackage to int
14186                                        console.log('packageDetailsData', packageDetailsData);
14187                                        TicketPackages[package_id]=packageDetailsData;
14188                                        console.log('TicketPackages INN', TicketPackages);
14189                                        $('.addon-package-' + package_id).find("a.addonBtn").each(function () {
14190                                            if (!isGroupRegistrationField) {
14191                                                $(this).next().find('.qty-plus').hide();
14192                                            }
14193                                            addon_qty_limit = getAddonQtyLimit($(this), qtyPackage);
14194                                            addons_qty = $(this).next().find('.qty').val();
14195                                            if (parseInt(addon_qty_limit) < parseInt(addons_qty)) {
14196                                                $(this).next().find('.qty').val(addon_qty_limit);
14197                                                addons_qty = addon_qty_limit;
14198                                            }
14199                                            if (!$(this).is(':visible')) {
14200                                                addons = $(this).data('addons');
14201                                                let AddonsDetails = {};
14202                                                AddonsDetails['id'] = addons;
14203                                                addons_price = $(this).data('addon-price');
14204                                                addons_tax = $(this).data('addon-tax');
14205                                                addons_name = $(this).closest('.ticket__addon__item').find('.ticketadd__title').text();
14206                                                AddonsDetails['addons_price'] = addons_price;
14207                                                AddonsDetails['addons_tax'] = addons_tax;
14208                                                AddonsDetails['addons_qty'] = addons_qty;
14209                                                AddonsDetails['addons_name'] = addons_name;
14210
14211                                                addonsApplyDiscount = $(this).attr('data-addon-apply-discount');
14212                                                AddonsDetails['addons_apply_discount'] = addonsApplyDiscount;
14213                                                if (addons_qty) {
14214                                                    total_addon_price = parseFloat(total_addon_price) + (parseFloat(addons_qty) * (parseFloat(addons_tax) + parseFloat(addons_price)));
14215                                                    AddonsDetails['total_addon_price'] = total_addon_price;
14216                                                } else {
14217                                                    total_addon_price = parseFloat(total_addon_price) + parseFloat(addons_price) + parseFloat(addons_tax);
14218                                                    AddonsDetails['total_addon_price'] = total_addon_price;
14219                                                }
14220                                                console.log('TicketPackages', TicketPackages);
14221                                                if (TicketPackages[package_id][addons]) {
14222                                                    if (TicketPackages[package_id][addons]['id'] == addons) {
14223                                                        TicketPackages[package_id][addons] = AddonsDetails;
14224                                                    } else {
14225                                                        TicketPackages[package_id][addons] = AddonsDetails;
14226                                                    }
14227                                                } else {
14228                                                    TicketPackages[package_id][addons] = AddonsDetails;
14229                                                }
14230                                            }
14231                                            // $(this).next().attr('data-limit',qty);
14232                                            // $(this).next().attr('data-limit', 10000);
14233                                            // if (parseInt(addons_qty) < parseInt(addon_qty_limit)) {
14234                                            //     $(this).next().find('.qty-plus').show();
14235                                            // } else {
14236                                            //     $(this).next().find('.qty-plus').hide();
14237                                            // }
14238
14239                                        }); 
14240                                    }
14241                        
14242                                }
14243                            });
14244                            // The clicked package is still marked unselected at this point,
14245                            // so the scan above never picks it up.
14246                            if(!TicketPackages[package_id]){
14247                                TicketPackages[package_id]=packageDetails;
14248                            }
14249                        }else{
14250                                TicketPackages[package_id]=packageDetails;
14251                        }
14252                    }
14253
14254                    var {total_price, totalTaxApplied} = TicketAmountCalculate(TicketPackages);
14255                    
14256                    if (appId != 15223){
14257                        total_price = total_price + totalTaxApplied;
14258                    }
14259                    // total_price = total_price + totalTaxApplied;
14260                    if (total_price == 0) {
14261                        data_subject = $('.single-pay').attr('data-sub');
14262                        if (!data_subject) {
14263                            data_subject = $('.payn').attr('data-sub');
14264                        }
14265                        if (assignDropdownFixAppIds.includes(Number(appId))) {
14266                            if ($('.order__payment.order__summary.topp').find('.paynbtn.zerob').length === 0) {
14267                                $('.order__payment.order__summary.topp').first().after(' <input class="paynbtn zerob" type="submit" style="margin-top: 25px" value="' + data_subject + '" tabindex="0">');
14268                            }
14269                            $('.ordsum').after(' <input class="paynbtn zerob" type="submit" style="margin-top: 25px" value="' + data_subject + '" tabindex="0">');
14270                            $('.order__payment.order__summary.topp').add('.payment__method.topp').hide();
14271                        } else {
14272                            if ($('.topp').find('.paynbtn.zerob').length === 0) {
14273                                $('.topp').after(' <input class="paynbtn zerob" type="submit" style="margin-top: 25px" value="' + data_subject + '" tabindex="0">');
14274                            }
14275                            $('.ordsum').after(' <input class="paynbtn zerob" type="submit" style="margin-top: 25px" value="' + data_subject + '" tabindex="0">');
14276                            $('.topp').hide();
14277                        }
14278                        $('.single-pay').hide();
14279                        if($('#payment_method_count').val() == 1){
14280                            $('.payment_summary_bottom')
14280.hide();
14281                        }
14282                    } else {
14283                        if(gStepNumber > 1) {
14284                            $('.zerob').remove();
14285                            if (assignDropdownFixAppIds.includes(Number(appId))) {
14286                                $('.order__payment.order__summary.topp').add('.payment__method.topp').show();
14287                            } else {
14288                                $('.topp').show();
14289                            }
14290                            $('.single-pay').show();
14291                        }
14292                        if (assignDropdownFixAppIds.includes(Number(appId))) {
14293                            $('.order__payment.order__summary.topp').add('.payment__method.topp').show();
14294                        } else {
14295                            $('.topp').show();
14296                        }
14297                        $('.paynbtn.zerob').remove();
14298                    }
14299
14300                    $('.ticket__pkgprice').text(total_price);
14301                    CalculateDonationPackageAmount();
14302                    var subTotal=total_price-totalTaxApplied-PackageDonationAmount;
14303
14304                    if(symbol){
14305                        $('.order__summary .price__item > div:nth-of-type(1) span').text(symbol+''+formatTotal(subTotal));
14306                        $('.order__summary .price__item > div.total__price > span').text(symbol+''+formatTotal(total_price));
14307                        $('.ticketItems .totalcountT p').text(total_text+': '+symbol+''+formatTotal(total_price));
14308                        $('.order__summary > div.price__item > div.pricing:nth-of-type(2) > span').text(symbol+''+0.00.toFixed(2));
14309                        $('.order__summary .price__item .Donation span')
14310                            .text(`${symbol}${formatTotal(PackageDonationAmount)}`)
14311                            .attr('data-total_donation', PackageDonationAmount.toFixed(2));
14312
14313                    }else{
14314                        $('.order__summary .price__item > div:nth-of-type(1) span').text(formatTotal(subTotal));
14315                        $('.order__summary .price__item > div.total__price > span').text(formatTotal(total_price));
14316                        $('.ticketItems .totalcountT p').text(total_text+': '+formatTotal(total_price));
14317                        $('.order__summary > div.price__item > div.pricing:nth-of-type(2) > span').text(0.00.toFixed(2));
14318                        $('.order__summary .price__item .Donation span')
14319                            .text(`${formatTotal(PackageDonationAmount)}`)
14320                            .attr('data-total_donation', PackageDonationAmount.toFixed(2));
14321
14322                    }
14323                    $('.order__summary .price__item > div.total-tax > span').attr("data-total_tax_no_booking_fee", totalTaxApplied.toFixed(2));
14324                    $('.order__summary .price__item > div.total__price > span').attr('data-original_total_price', total_price);
14325                    sessionStorage.setItem('total_price', total_price);
14326                    $('.order__summary .price__item > div:nth-of-type(1) span').attr('data-subtotal',(subTotal).toFixed(2));
14327                    setTotalIncludingBookingFee(TicketPackages); // VFC-14947 - add booking fee
14328
14329                    // $('.order__summary .price__item > div:nth-of-type(1) span').text(total_price);
14330                    // $('.order__summary .price__item > div.total__price > span').text(total_price);
14331                    // $('.ticketItems .totalcountT p').text('Total: '+total_price);
14332
14333                    added_ticket_trans = $('.ticketItems .totalcountT').attr('data-added');
14334                    $('.ticketItems .totalcountT span').text(added_ticket_trans);
14335                    var curPrev = current.prev('.selectCounter');
14336                    if((parseInt(isTicket) && !isGroupRegistrationField) || (isGroupRegistrationField && !isGroupMultipleSelect)) {
14337                        $('.ticketSelbtn').show();
14338                    }
14339                    current.hide();
14340                    if((parseInt(isTicket) && !isGroupRegistrationField)  || (isGroupRegistrationField && !isGroupMultipleSelect)) {
14341                        $('.selectCounter').hide();
14342                    }
14343                    curPrev.show();
14344                    if((parseInt(isTicket) && !isGroupRegistrationField)  || (isGroupRegistrationField && !isGroupMultipleSelect)) {
14345                        $('.selectCounter').find('.qty').val('');
14346                    }
14347                    curPrev.find('.qty').val(1);
14348                    var limit = curPrev.data('limit');
14349                    if (!$(".group-reg-block")[0]) {
14350                        if (limit == 1) {
14351                            // curPrev.find('.qty-plus').hide();
14352
14353                        }
14354                    }
14355                    curPrev.find('.qty-minus').show();
14356                    if((parseInt(isTicket) && !isGroupRegistrationField)  || (isGroupRegistrationField && !isGroupMultipleSelect)) {
14357                        $('.addonBtn').show();
14358                        $('.ticket__item').removeClass('hasAddon');
14359                        $('.ticket__addon').hide();
14360                    }
14361                    current.parents('.ticket__item').next('.ticket__addon').fadeIn();
14362                    current.parents('.ticket__item').addClass('hasAddon');
14363
14364                    if(parseInt(isTicket) && !isGroupRegistrationField){
14365                        curPrev.find('.qty-plus').hide();
14366                    }
14367
14368                    TicketPackages[package_id]=packageDetails;
14369
14370                    // TicketPackages['paymentMethodId']=$('input[name="optionsRadios"]:checked').attr('data-method');
14371
14372                    if ($('input[name="optionsRadios"]:checked').attr('data-method') !== undefined) {
14373                        TicketPackages['paymentMethodId']=$('input[name="optionsRadios"]:checked').attr('data-method');
14374                    } else {
14375                        TicketPackages['paymentMethodId']=$('input[name="optionsRadios"]').first().attr('data-method');
14376                    }
14377                      if(enableV5ApiDiscount){
14378                       console.log('Addons');
14379                        TicketPackages['discountCode'] = '';
14380                        if(multipleTicketEdit){
14381                           TicketPackages['discountCode'] = (EditProfileDiscCode !== null && EditProfileDiscCode !== '') ? EditProfileDiscCode : '';
14382                        }
14383                        TicketPackages['appId'] = 20550;
14384                        TicketPackages['formId'] = $('#formId').val();
14385                        TicketPackages['isGroupRegistration'] = 0;
14386                        TicketPackages['isGroupMultipleSelect'] = isGroupMultipleSelect;
14387                        TicketPackages['enablePaymentForOnePackage'] = 0;
14388                        TicketPackages['isUpgradeDowngradeProfile'] = (isUpgradeDowngradeProfile !== null && isUpgradeDowngradeProfile !== '' && (isUpgradeDowngradeProfile == 1 || isUpgradeDowngradeProfile == "1")) ? "1" : "0";
14389                       if(upgradeDowngradePaymentMethodDetailId !=null){
14390                             TicketPackages['paymentMethodId'] = upgradeDowngradePaymentMethodDetailId;
14391                        }
14392                      var appID= '20550';
14393                        if(appID == 20576 ){
14394                            CalculateDonationPackageAmount();
14395                            setTotalIncludingBookingFee(TicketPackages); 
14396                        }
14397
14398                         if(isUpgradeDowngradeForAPI ==false){
14399                            paymentSummaryObject.getPaymentSummaryDetails(TicketPackages);
14400                        }
14401                      
14402
14403                    }
14404
14405                    $('.user_list').val(0).change();
14406                    if(parseInt(isTicket) && (parseInt(isStripeElement) || parseInt(isStripeConnectElement)) && !parseInt(isTicketTop)) {
14407
14408                        let emailElm = ("input[type='email']");
14409                        let receiptEmail = $(emailElm).val();
14410
14411                        intent_id= '';
14412                        jQuery.ajax({
14413                            url: "https://www.codeseccon.com/en/form/updatePaymentIntent",
14414                            data: {
14415                                intent_id: intent_id,
14416                                amount: total_price.toFixed(2),
14417                                appID: 20550,
14418                                receiptEmail: receiptEmail
14419                            },
14420                            type: "POST",
14421                            success: function (response) {
14422
14423                            }
14424                        });
14425                    }
14426                }
14427
14428                $('.ticketSelbtn').click(function (e) {
14429                    e.preventDefault();
14430                    
14431
14432
14433                    $('.order-now-button').prop('disabled', false);
14434                    if(fromBackBtn){
14435                        tcktModifiedFromBackBtn = true;
14436                    }
14437                    // $('.qty-minus ').hide();
14438
14439                    var current = $(this);
14440
14441                    flag = 0;
14442                    $(".ticketSelbtn").each(function () {
14443                        if ($(this).css("display") == "none") {
14444                            flag = flag + 1;
14445                        }
14446                    });
14447                    if (flag == 0) {
14448                        changeTicket(current);
14449                    } else {
14450
14451                        changeTicket(current);
14452                    }
14453                    if (isTicket && !parseInt(isTicketTop)){
14454                       var numItems = $('.payment__method > .radio').length;
14455                       if(numItems > 1){
14456                           $('.order__summary.ordsum').show();
14457                           $('.single-pay.aa').hide();
14458                       }else{
14459                           $('.order__summary.ordsum').hide();
14460                           $('.single-pay.aa').show();
14461                       }
14462                        // $('.single-pay.aa').hide();
14463                        $('.order-now-button1').show();
14464                        $('.packageBlock').html('');
14465                        $('.order-now-button1').prop('disabled', false);
14466                    }
14467                    var limit = 10000;
14468                    var packageLimit=$(this).prev().find('.qty-plus').attr("data-package-limit");
14469                    if(packageLimit != '' && packageLimit > 0){
14470                        limit = parseInt(packageLimit);
14471                    }
14472                    var counVal = $(this).prev().find('.qty_package').val();
14473                    if (parseInt(counVal) >= limit) {
14474                        $(this).prev().find('.qty-plus').hide()
14475                    }
14476                });
14477                $('.addonBtn').click(function (e) {
14478                    e.preventDefault();
14479
14480                    if(fromBackBtn){
14481                        tcktModifiedFromBackBtn = true;
14482                    }
14483
14484                    if (isTicket && !parseInt(isTicketTop)){
14485                        $('.order__summary.ordsum').hide();
14486                        $('.single-pay.aa').hide();
14487                        $('.order-now-button1').show();
14488                        $('.packageBlock').html('');
14489                        $('.order-now-button1').prop('disabled', false);
14490                    }
14491                    // console.log('TicketPackages addons');
14492                    // console.log(TicketPackages);
14493
14494
14495
14496                    $('.order-now-button').prop('disabled', false);
14497                    var current = $(this);
14498                    addons = current.data('addons');
14499                    id = $(this).data('id');
14500                    $('.order__summary > div.price__item > div.pricing:nth-of-type(2) > span').text(0.00.toFixed(2));
14501
14502                    $('.order__summary .price__item >
14502 div:nth-of-type(1) span').text(window.total_price.toFixed(2));
14503
14504                    if ($('.cacl-disc').data('fld')) {
14505                        var fld = $('.cacl-disc').data('fld').toString();
14506                    } else {
14507                        var fld = $('.addonp').data('fld').toString();
14508                    }
14509
14510                    var ticket = '';
14511
14512                    $("input[name='pmnt_addons_" + fld + "[]']").each(function (index, obj) {
14513                        if (ticket) {
14514                            if (addons == $(this).val() && id == $(this).data('package')) {
14515                                $(this).prop('checked', true);
14516                            }
14517                        } else {
14518                            if (addons == $(this).val()) {
14519                                $(this).prop('checked', true);
14520                            }
14521                        }
14522
14523                    });
14524
14525                    var curNext = current.next('.selectCounter');
14526                    // var limit = curNext.data('limit');
14527                    var limit = 10000;
14528                    curNext.find('.qty').val(1);
14529                    if (limit == 1) {
14530                        curNext.find('.qty-plus').hide();
14531
14532                    }
14533                    curNext.find('.qty-minus').show();
14534                    current.hide();
14535                    curNext.show();
14536
14537
14538
14539                    // changePrice($(this));
14540                    // Calculating price
14541                    price = $(this).data('price');
14542
14543                    qty = $('.package-block-' + id + ' > .ticket__price .qty').val();
14544                    total_addon_price = 0;
14545
14546                    $('.addon-package-' + id).find("a.addonBtn").each(function () {
14547                        if (!isGroupRegistrationField) {
14548                            $(this).next().find('.qty-plus').hide();
14549                        }
14550                        addon_qty_limit = getAddonQtyLimit($(this), qty);
14551                        addons_qty = $(this).next().find('.qty').val();
14552                        if (parseInt(addon_qty_limit) < parseInt(addons_qty)) {
14553                            $(this).next().find('.qty').val(qty);
14554                            addons_qty = qty;
14555                        }
14556                        if (!$(this).is(':visible')) {
14557                                addons = $(this).data('addons');
14558                                let AddonsDetails = {};
14559                                AddonsDetails['id'] = addons;
14560                                addons_price = $(this).data('addon-price');
14561                                addons_tax = $(this).data('addon-tax');
14562                                addons_name = $(this).closest('.ticket__addon__item').find('.ticketadd__title').text();
14563                                AddonsDetails['addons_price'] = addons_price;
14564                                AddonsDetails['addons_tax'] = addons_tax;
14565                                AddonsDetails['addons_qty'] = addons_qty;
14566                                AddonsDetails['addons_name'] = addons_name;
14567
14568                                addonsApplyDiscount = $(this).attr('data-addon-apply-discount');
14569                                 AddonsDetails['addons_apply_discount'] = addonsApplyDiscount;
14570                                if (addons_qty) {
14571                                    total_addon_price = parseFloat(total_addon_price) + (parseFloat(addons_qty) * (parseFloat(addons_tax) + parseFloat(addons_price)));
14572                                    AddonsDetails['total_addon_price'] = total_addon_price;
14573                                } else {
14574                                    total_addon_price = parseFloat(total_addon_price) + parseFloat(addons_price) + parseFloat(addons_tax);
14575                                    AddonsDetails['total_addon_price'] = total_addon_price;
14576                                }
14577
14578                            if (TicketPackages[id][addons]) {
14579                                if (TicketPackages[id][addons]['id'] == addons) {
14580                                    TicketPackages[id][addons] = AddonsDetails;
14581                                } else {
14582                                    TicketPackages[id][addons] = AddonsDetails;
14583                                }
14584                            } else {
14585                                TicketPackages[id][addons] = AddonsDetails;
14586                            }
14587                        }
14588                        // $(this).next().attr('data-limit',qty);
14589                        $(this).next().attr('data-limit', 10000);
14590                        if (parseInt(addons_qty) < parseInt(addon_qty_limit)) {
14591                            $(this).next().find('.qty-plus').show();
14592                        } else {
14593                            $(this).next().find('.qty-plus').hide();
14594                        }
14595
14596                    });
14597
14598                    var {total_price, totalTaxApplied} = TicketAmountCalculate(TicketPackages);
14599                    total_price = total_price + totalTaxApplied;
14600                    if (total_price == 0) {
14601                        data_sub = $('.payn').attr('data-sub');
14602                        if (assignDropdownFixAppIds.includes(Number(appId))) {
14603                            $('.order__payment.order__summary.topp').first().after(' <input class="paynbtn zerob" type="submit" style="margin-top: 25px" value=""' + data_sub + '"" tabindex="0">');
14604                            $('.order__payment.order__summary.topp').add('.payment__method.topp').hide();
14605                        } else {
14606                            $('.topp').after(' <input class="paynbtn zerob" type="submit" style="margin-top: 25px" value=""' + data_sub + '"" tabindex="0">');
14607                            $('.topp').hide();
14608                        }
14609                        $('.single-pay').hide();
14610                    } else {
14611                        if(gStepNumber > 1) {
14612                            $('.zerob').remove();
14613                            if (assignDropdownFixAppIds.includes(Number(appId))) {
14614                                $('.order__payment.order__summary.topp').add('.payment__method.topp').show();
14615                            } else {
14616                                $('.topp').show();
14617                            }
14618                            $('.single-pay').show();
14619                        }
14620                    }
14621                    var symbol = $('.pmnt_fld option:selected').data('symbol');
14622                    total_text = $('.totalcountT > p').attr('data-total');
14623                    CalculateDonationPackageAmount();
14624                    var subTotal=total_price-totalTaxApplied-PackageDonationAmount;
14625
14626                    $('.ticket__pkgprice').text(total_price);
14627                    if (symbol) {
14628                        $('.order__summary .price__item >
14628 div:nth-of-type(1) span').text(symbol + '' + formatTotal(subTotal));
14629                        $('.order__summary .price__item > div.total__price > span').text(symbol + '' + formatTotal(total_price));
14630                        $('.order__summary .price__item > div.total__price > span').attr('data-original_total_price', total_price);
14631                        $('.ticketItems .totalcountT p').text(total_text + ': ' + symbol + '' + formatTotal(total_price));
14632                        $('.order__summary .price__item .Donation span')
14633                            .text(`${symbol}${formatTotal(PackageDonationAmount)}`)
14634                            .attr('data-total_donation', PackageDonationAmount.toFixed(2));
14635
14636                    } else {
14637                        $('.order__summary .price__item > div:nth-of-type(1) span').text(formatTotal(subTotal));
14638                        $('.order__summary .price__item > div.total__price > span').text(formatTotal(total_price));
14639                        $('.order__summary .price__item > div.total__price > span').attr('data-original_total_price', total_price);
14640                        $('.ticketItems .totalcountT p').text(total_text + ': ' + formatTotal(total_price));
14641                        $('.order__summary .price__item .Donation span')
14642                            .text(`${formatTotal(PackageDonationAmount)}`)
14643                            .attr('data-total_donation', PackageDonationAmount.toFixed(2))
14644
14645                    }
14646                    sessionStorage.setItem('total_price', total_price);
14647                    $('.order__summary .price__item > div.total-tax > span').attr("data-total_tax_no_booking_fee", totalTaxApplied.toFixed(2));
14648                    $('.order__summary .price__item > div:nth-of-type(1) span').attr('data-subtotal', (subTotal).toFixed(2));
14649
14650                    setTotalIncludingBookingFee(TicketPackages); // VFC-14947 - add booking fee
14651
14652
14653                    if (isTicket && isStripeElement && !isTicketTop) {
14654
14655                        let emailElm = ("input[type='email']");
14656                        let receiptEmail = $(emailElm).val();
14657
14658                        intent_id = '';
14659                        jQuery.ajax({
14660                            url: "https://www.codeseccon.com/en/form/updatePaymentIntent",
14661                            data: {
14662                                intent_id: intent_id,
14663                                amount: total_price.toFixed(2),
14664                                appID: 20550,
14665                                receiptEmail: receiptEmail
14666
14667                            },
14668                            type: "POST",
14669                            success: function (response) {
14670
14671                            }
14672                        });
14673                    }
14674
14675                    // TicketPackages['paymentMethodId']=$('input[name="optionsRadios"]:checked').attr('data-method');
14676
14677                    if ($('input[name="optionsRadios"]:checked').attr('data-method') !== undefined) {
14678                        TicketPackages['paymentMethodId']=$('input[name="optionsRadios"]:checked').attr('data-method');
14679                    } else {
14680                        TicketPackages['paymentMethodId']=$('input[name="optionsRadios"]').first().attr('data-method');
14681                    }
14682                    if(enableV5ApiDiscount){
14683                        TicketPackages['discountCode'] = '';
14684                        if(multipleTicketEdit){
14685                           TicketPackages['discountCode'] = (EditProfileDiscCode !== null && EditProfileDiscCode !== '') ? EditProfileDiscCode : '';
14686                        }
14687                        TicketPackages['isUpgradeDowngradeProfile'] = (isUpgradeDowngradeProfile !== null && isUpgradeDowngradeProfile !== '' && (isUpgradeDowngradeProfile == 1 || isUpgradeDowngradeProfile == "1")) ? "1" : "0";
14688
14689                         if(upgradeDowngradePaymentMethodDetailId !=null){
14690                             TicketPackages['paymentMethodId'] = upgradeDowngradePaymentMethodDetailId;
14691                        }
14692                        paymentSummaryObject.getPaymentSummaryDetails(TicketPackages);
14693                    }
14694
14695
14696                    appID= '20550';
14697                    if(appID == 16426 ){
14698                        // curNext.find('.qty-plus').each(function() {
14699                        //     this.style.setProperty("display", "block", "important");
14700                        // });
14701
14702
14703                        curNext.find('.qty-plus').get(0)?.style.setProperty("display", "block", "important");
14704
14705                        // curNext.find('.qty-plus.addons_item_2306_772142').each(function() {
14706                        //     this.style.setProperty("display", "block", "important");
14707                        // });
14708                         // curNext.find('.qty-plus').css("display", "block !important");
14709                         // $(".qty-plus").css("display", "block !important");
14710                    }
14711
14712                });
14713                var showChar = 148;
14714                var ellipsestext = "";
14715                var moretext = "Read more";
14716                var lesstext = "Read less";
14717
14718
14719                $('.ticket__desc__text p').each(function () {
14720                    var content = $(this).html();
14721
14722                    if (content.length > showChar) {
14723
14724                        var c = content.substr(0, showChar);
14725                        var h = content.substr(showChar, content.length - showChar);
14726
14727                        var html = c + '<span class="morecontent"><span>' + h + '</span>&nbsp;&nbsp;</span>';
14728
14729                        $(this).html(html);
14730                    }else {
14731                        $(this).next('.ticketmore__text').hide();
14732                    }
14733
14734                });
14735
14736                $(".ticketmore__text").click(function (e) {
14737                    e.preventDefault();
14738                    moretext=  $(this).attr('data-rmore');
14739                    lesstext=$(this).attr('data-rless');
14740                    if ($(this).hasClass("less")) {
14741                        $(this).removeClass("less");
14742                        if ($(this).prev().find('span')) {
14743                            // console.log('asdfasdfasdf');
14744                        }
14745                        $(this).html(moretext);
14746                    } else {
14747                        $(this).addClass("less");
14748                        $(this).html(lesstext);
14749                    }
14750                    $(this).prev().find('span').toggle();
14751                    return false;
14752                });
14753            });
14754
14755
14756
14757            $(document).ready(function () {
14758                var ticket= '';
14759                var ticket_top= '';
14760                if(ticket) {
14761                    $(".close").on('click', function(){
14762                        $('.attendbackdrop').click();
14763                    });
14764                    if (ticket_top) {
14765                        html_discout = $('.discount-box-block').html();
14766                        if(html_discout && html_discout != ''){
14767                            $('.small-discout-box > div.coupncode').html(html_discout);
14768                            // $('.discount-box-block').html('');
14769                            $('.discount-box-block').css("display", "none");
14770                        }else{
14771                            // $('.small-discout-box > div.coupncode').hide();
14772                        }
14773
14774                    } else {
14775                        setTimeout(function () {
14776                            $('.discount-box-block').css("display", "block");
14777                        }, 2000);
14778                    }
14779                }
14780                    });
14781            $(document).ready(function () {
14782                $('select[name="hotel_lodging"]').change(function(){
14783                        var id = $(this).val();
14784                        if(id == '') {
14785                            $('select[name="room_type_id"] option[value!=""]').remove();
14786                          return false;
14787                          }
14788                        var app_id = $('input[name="appID"]').val();
14789                        var url = '/form/getHotelRoomById/';
14790                       const errorMessage = $('<p id="error_message" style="color: red; font-size: 10px;">Please fill in both check-in and check-out dates.</p>');
14791                       $('#error_message').hide();
14792                        let checkValidate=true;
14793                        var checkInDate=null;
14794                        var checkOutDate=null;
14795                        if ($('input[name="check_in_date"]').length >0 && $('input[name="check_out_date"]').length > 0) {
14796                             checkInDate = $('input[name="check_in_date"]').val().trim();
14797                             checkOutDate = $('input[name="check_out_date"]').val().trim();
14798                            if (checkInDate === '' || checkOutDate === '') {
14799                                if ($('#error_message').length === 0) {
14800                                    $('select[name="hotel_lodging"]').before(errorMessage);
14801                                }
14802                                if (!$('#error_message').is(':visible')) {
14803                                    $('#error_message').show();
14804                                }
14805                                checkValidate=false;
14806                                $('select[name="hotel_lodging"]').val('');
14807                            } else {
14808                                $('#error_message').hide();
14809                                $('#error_message').remove();
14810                            }
14811                        }
14812                        if(checkValidate){
14813                            $("#LoadingBar").show();
14814                            jQuery.ajax({
14815                                url: url + id+'/'+app_id,
14816                                data: {
14817                                    check_in: checkInDate,
14818                                    check_out: checkOutDate
14819                                },
14820                                type: "GET",
14821                                success: function (response) {
14822                                    if ($('select[name="room_type_id"]').length > 0) {
14823                                        var room_types = eval('(' + response + ')');
14824                                        var room_type_id = "select[name='room_type_id']";
14825
14826                                      if (room_types.length === 0) {
14827                                            $(room_type_id).html("<option value=''>No rooms available</option>");
14828                                        } else {
14829                                          room_type_id.innerHTML = '';
14830                                          $(room_type_id).html("<option value=''>Please Select</option>");
14831                                            $.each(room_types, function (key, item) {
14832                                                var selectedAttr = '';
14833                                                $(room_type_id).append("<option " + selectedAttr + " value='" + item.id + "'>" + item.name + " - Capacity " + item.capacity_per_room + " - No of Rooms " + item.no_of_rooms + "</option>");
14834                                            });
14835                                        }
14836                                    }
14837
14838                                },
14839                                complete: function () {
14840                                    $("#LoadingBar").hide();
14841                                    if (typeof changeActionOnRoomTypesChangeCallBack === 'function') {
14842                                        changeActionOnRoomTypesChangeCallBack();
14843                                    }
14844                                }
14845                            });
14846                        }
14847            });
14848                $('input[name="check_in_date"]').on('change', function() {
14849                    $('select[name="hotel_lodging"]').val('');
14850                    $('select[name="room_type_id"] option:not(:first-child)').remove();
14851                });
14852                $('input[name="check_out_date"]').on('change', function() {
14853                    $('select[name="hotel_lodging"]').val('');
14854                    $('select[name="room_type_id"] option:not(:first-child)').remove();
14855                });
14856            });
14857
14858       </script>
14858
14859        
14859<script>
14860
14861            $(function(event){
14862                // VFC-14947 - add booking fee
14863                $('body').on('change', '.payment__method input:radio[type=radio]', function(e){
14864                    let bookingFeeSpan = $('#booking_fee');
14865                    if(bookingFeeSpan.length > 0) {
14866                        if ($('input[name="optionsRadios"]:checked').attr('data-method') !== undefined) {
14867                            TicketPackages['paymentMethodId']=$('input[name="optionsRadios"]:checked').attr('data-method');
14868                        } else {
14869                            TicketPackages['paymentMethodId']=$('input[name="optionsRadios"]').first().attr('data-method');
14870                        }
14871
14872                        // TicketPackages['paymentMethodId']=$('input[name="optionsRadios"]:checked').attr('data-method');
14873                        if(enableV5ApiDiscount){
14874                        TicketPackages['isUpgradeDowngradeProfile'] = (isUpgradeDowngradeProfile !== null && isUpgradeDowngradeProfile !== '' && (isUpgradeDowngradeProfile == 1 || isUpgradeDowngradeProfile == "1")) ? "1" : "0";
14875                             // TicketPackages['discountCode'] = '';
14876                            paymentSummaryObject.getPaymentSummaryDetails(TicketPackages);
14877
14878                        }else{
14879                            setTotalIncludingBookingFee(TicketPackages); // VFC-14947 - add booking fee
14880                        }
14881                    }
14882                });
14883            });
14884        </script>
14884
14885
14886                   
14886<script>
14887                var failurePageURLAffiniPAy='';
14888                function closeModalAffini() {
14889                    document.getElementById("myModalAffini").style.display = "none";
14890                    location.replace(failurePageURLAffiniPAy);
14891                }
14892                    // Function to open the modal
14893                    function openPaymentModal(data,lang) {
14894                         var baseUrl = window.location.origin;
14895                         failurePageURLAffiniPAy=baseUrl+lang+data.faliur_page;
14896                        var APIKey= data.publick_key;
14897                        var accountID= data.accountID;
14898                        var secretKey= data.secret_key;
14899                        var surchargeable= data.surchargeable;
14900                        var user_id=data.userId;
14901                        var userType=data.userType;
14902                        $('#affini_amount').val(data.amount+ ''+data.symbol);
14903                        var amount=data.amount*100;
14904                        // Ensure surchargeEnabled is always a boolean
14905                        var surchargeEnabled = false;
14906                        if(surchargeable === 'true' || surchargeable === true){
14907                            surchargeEnabled = true;
14908                        }
14909                        document.getElementById("myModalAffini").style.display = "block";
14910                        const hostedFieldsConfiguration = {
14911                            publicKey: APIKey,
14912                            surchargeEnabled: surchargeEnabled,
14913                            // styles: {
14914                            //     base: {
14915                            //         color: '#555555',
14916                            //         fontFamily: '"Helvetica Neue", Helvetica, Arial, sans-serif',
14917                            //         fontSmoothing: 'antialiased',
14918                            //         fontSize: '14px',
14919                            //         fontWeight: 'normal',
14920                            //         lineHeight: '22px',
14921                            //         padding: '5px 12px',
14922                            //         '::placeholder': {
14923                            //             color: '#999999'
14924                            //         }
14925                            //     },
14926                            //     invalid: {
14927                            //         color: '#a94442',
14928                            //         iconColor: '#a94442'
14929                            //     }
14930                            // },
14931                            fields: [
14932                                {
14933                                    selector: "#my_credit_card_field_id",
14934                                    input: {
14935                                        type: "credit_card_number"
14936                                    }
14937                                },
14938                                {
14939                                    selector: "#my_cvv_field_id",
14940                                    input: {
14941                                        type: "cvv"
14942                                    }
14943                                }
14944                            ]
14945                        };
14946                        const hostedFieldsCallBack = function(state) {
14947                        };
14948                        const hostedFields = window.AffiniPay.HostedFields.initializeFields(
14949                            hostedFieldsConfiguration,
14950                            hostedFieldsCallBack
14951                        );
14952                        hostedFields.focusIframeInput("#my_credit_card_field_id");
14953                        const form = document.getElementById('form');
14954                        form.onsubmit = function(event) {
14955                            event.preventDefault();
14956                            var fieldState=hostedFields.getState();
14957                            if(fieldState.isReady ==false){
14958                                $('#affiniModelValidate').show();
14959                            }else{
14960                                $('#affiniModelValidate').hide();
14961                            }
14962                            document.getElementById("myModalAffini").style.display = "none";
14963                            $("#LoadingBar").show();
14964                            const my_cvv_field_id = document.getElementById('my_cvv_field_id').value;
14965                            const postal_code = document.getElementById('postal_code').value;
14966                            const exp_year = document.getElementById('exp_year').value;
14967                            const exp_month = document.getElementById('exp_month').value;
14968                            const address1 = document.getElementById('address1').value; // Retrieve address value
14969                            const firstName = $('input[name="first_name"]').val();
14970                            const lastName = $('input[name="last_name"]').val();
14971                            const fullName = (firstName && lastName) ? `${firstName} ${lastName}
14971` : 'No Name';
14972                            if (!hostedFields.getState()) {
14973                                // Send error
14974                                return;
14975                            }
14976                            hostedFields.getPaymentToken({ "postal_code": postal_code, "exp_year": exp_year, "exp_month": exp_month, "address1": address1,"name":fullName })
14977                                .then(function(result){
14978                                    chargeAmount(result.id,APIKey,accountID,secretKey,user_id,userType,amount);
14979                                }).catch(function(err){
14980                                location.replace(failurePageURLAffiniPAy);
14981                            });
14982                        };
14983                    }
14984                function chargeAmount(paymentToken,APIKey,accountID,secretKey,user_id,userType,amount){
14985                    const postData = {
14986                        amount: amount,
14987                        method: paymentToken,
14988                        accountID:accountID
14989                    };
14990
14991                    fetch('https://api.affinipay.com/v1/charges', {
14992                        method: 'POST',
14993                        headers: {
14994                            'Content-Type': 'application/json',
14995                            'Authorization': 'Basic ' + btoa(secretKey + ':'), // Replace with your secret key
14996                        },
14997                        body: JSON.stringify(postData),
14998                    })
14999                        .then(response => response.json())
15000                        .then(data => {
15001                            const email = $('input[name="email"]').val();
15002                            if(data.status =='AUTHORIZED'){
15003                                handleAffiniSuccess(data,email,paymentToken,user_id,userType);
15004                            }else{
15005                                location.replace(failurePageURLAffiniPAy);
15006                            }
15007
15008                        })
15009                        .catch(error => {
15010                            location.replace(failurePageURLAffiniPAy);
15011                        });
15012                }
15013
15014             function handleAffiniSuccess(data,email,paymentToken,user_id,userType){
15015                 let form_id = $('#formId').val();
15016                 const app_id = '20550';
15017                 jQuery.ajax({
15018                     url: "https://www.codeseccon.com/en/form/processAffiniPayResponse",
15019                     data: {
15020                         email: email,
15021                         app_id: app_id,
15022                         user_id: user_id,
15023                         userType: userType,
15024                         token: paymentToken,
15025                         form_id: form_id,
15026                         data: JSON.stringify(data)
15027                     },
15028                     type: "POST",
15029                     success: function (response) {
15030                         response = eval('(' + response + ')');
15031                         if (response.url) {
15032                             window.location.href = response.url;
15033                         }
15034                     }
15035                 });
15036
15037             }
15038</script>
15038
15039            <!-- // VFC-18157 - moved it for simple registration form as well -->
15040            <!-- // VFC-17355 - place edit and cancel registration container at bottom of form -->
15041            <div class="col-12 mt-3">
15042                            </div>
15043         <!-- Add Attendee Backdrop -->
15044        <div class="attendbackdrop"></div>
15045
15046            <style type="text/css">
15047                .AffiniForm {
15048                    width: 80%; /* Adjust the width as needed */
15049                    margin: 0 auto;
15050                }
15051
15052                .AffiniForm label {
15053                    margin-bottom: 5px;
15054                }
15055
15056                .AffiniForm input,
15057                .AffiniForm select,
15058                .AffiniForm iframe {
15059                    width: 100%;
15060                    padding: 8px;
15061                    margin-bottom: 10px;
15062                    box-sizing: border-box;
15063                }
15064
15065                .AffiniForm iframe {
15066                    height: 34px; /* Match Bootstrap form-control height */
15067                }
15068
15069                /* Style for hosted field containers to match Bootstrap form-control */
15070                #my_credit_card_field_id,
15071                #my_cvv_field_id {
15072                    display: block;
15073                    width: 100%;
15074                    height: 34px;
15075                    padding: 6px 12px;
15076                    font-size: 14px;
15077                    line-height: 1.42857143;
15078                    color: #555;
15079                    background-color: #fff;
15080                    background-image: none;
15081                    border: 1px solid #ccc;
15082                    border-radius: 4px;
15083                    box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
15084                    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
15085                }
15086
15087                #my_credit_card_field_id:hover,
15088                #my_cvv_field_id:hover {
15089                    border-color: #66afe9;
15090                }
15091
15092                #my_credit_card_field_id iframe,
15093                #my_cvv_field_id iframe {
15094                    border: none;
15095                    padding: 0;
15096                    margin: 0;
15097                    width: 100%;
15098                    height: 100%;
15099                    display: block;
15100                    vertical-align: top;
15101                }
15102            </style>
15103            <div class="modal fade" id="myModalAffini" role="dialog" style="opacity: 1;">
15104                <div class="modal-dialog">
15105
15106                    <!-- Modal content -->
15107                    <div class="modal-content">
15108
15109                        <!-- Modal Header -->
15110                        <div class="modal-header">
15111                            <button type="button" class="close" data-dismiss="modal" onclick="closeModalAffini()">&times;</button>
15112                            <h4 class="modal-title">Affini Pay</h4>
15113                        </div>
15114
15115                        <!-- Modal Body with Form -->
15116                        <div class="modal-body">
15117
15118                            <!-- Your Form Goes Here -->
15119                            <form id="form" class="AffiniForm">
15120
15121                                <div class="form-group">
15122                                    <label for="my_credit_card_field_id">Credit Card</label>
15123                                    <div id="my_credit_card_field_id"></div>
15124                                </div>
15125
15126                                <div class="form-group">
15127                                    <label for="exp_month">Exp Month</label>
15128                                    <input id="exp_month" type="text" name="exp_month" class="form-control">
15129                                </div>
15130
15131                                <div class="form-group">
15132                                    <label for="exp_year">Exp Year</label>
15133                                    <input id="exp_year" type="text" name="exp_year" class="form-control">
15134                                </div>
15135
15136                                <div class="form-group">
15137                                    <label for="my_cvv_field_id">CVV</label>
15138                                    <div id="my_cvv_field_id"></div>
15139                                </div>
15140
15141                                <div class="form-group">
15142                                    <label for="postal_code">Zip Code</label>
15143                                    <input id="postal_code" type="text" name="postal_code" class="form-control">
15144                                </div>
15145
15146                                <div class="form-group">
15147                                    <label for="address1">Address</label>
15148                                    <input id="address1" type="text" name="address1" class="form-control">
15149                                </div>
15150
15151                                <div class="form-group">
15152                                    <label for="address1">Amount</label>
15153                                    <input id="affini_amount" disable readonly type="text" class="form-control">
15154                                </div>
15155
15156                                <div class="form-group">
15157                                    <p style=" color: red; text-align: center; font-size: 13px; display:none;" id="affiniModelValidate">
15157Please fill valid information </p>
15158                                    <input type="submit" value="Submit" class="btn btn-primary">
15159                                </div>
15160
15161                            </form>
15162                            <!-- End of Form -->
15163
15164                        </div>
15165
15166                        <!-- Modal Footer -->
15167                        <div class="modal-footer">
15168                            <button type="button" class="btn btn-default" data-dismiss="modal" onclick="closeModalAffini()">Close</button>
15169                        </div>
15170
15171                    </div>
15172
15173                </div>
15174            </div>
15175            
15175<script>
15176                var failurePageURLBraintreePAy='';
15177                function processBraintree(paymentResultForBraintree) {
15178                    var user_id=paymentResultForBraintree.userId;
15179                    var currency=paymentResultForBraintree.currency;
15180                    var amount=paymentResultForBraintree.amount;
15181                    var userType=paymentResultForBraintree.userType;
15182                    var session_id=paymentResultForBraintree.session_id;
15183                    var baseUrl = window.location.origin;
15184
15185                    failurePageURLBraintreePAy=baseUrl+'/en/'+paymentResultForBraintree.faliur_page;
15186                    var script = document.createElement('script');
15187                    script.src = 'https://js.braintreegateway.com/web/dropin/1.33.0/js/dropin.min.js';
15188                    script.onload = function () {
15189                        $("#LoadingBar").show();
15190                        var app_id = $('input[name="appID"]').val();  // Use jQuery.ajax to fetch the Braintree client token
15191                        var url = '/form/getBrainTreeToken/';
15192                        jQuery.ajax({
15193                            url: url+'/'+app_id+'/'+user_id,
15194                            type: "GET",
15195                            success: function(clientToken) {
15196                                // console.log('clientToken');
15197                                // console.log(clientToken);
15198                                // The server returns json_encode($token). Depending on the response
15199                                // content-type, jQuery may hand us either the raw JSON text ("\"<token>\"")
15200                                // or an already-parsed string. Only unwrap a JSON string literal; otherwise
15201                                // use the value as-is (the Braintree client token is not itself valid JSON).
15202                                if (typeof clientToken === 'string') {
15203                                    var rawToken = clientToken.trim();
15204                                    if (rawToken.length > 1 && rawToken.charAt(0) === '"' && rawToken.charAt(rawToken.length - 1) === '"') {
15205                                        try {
15206                                            clientToken = JSON.parse(rawToken);
15207                                        } catch (parseErr) {
15208                                            clientToken = rawToken.slice(1, -1);
15209                                        }
15210                                    } else {
15211                                        clientToken = rawToken;
15212                                    }
15213                                }
15214                                if (!clientToken) {
15215                                    $("#LoadingBar").hide();
15216                                    alert('Unable to initialize payment. Please try again or contact support.');
15217                                    if (failurePageURLBraintreePAy) {
15218                                        location.replace(failurePageURLBraintreePAy);
15219                                    }
15220                                    return;
15221                                }
15222                                var modalHTML = `
15223<div class="modal fade" id="braintreeModal" role="dialog" style="opacity: 1;">
15224                                                        <div class="modal-dialog" role="document">
15225                                                            <div class="modal-content">
15226                                                                <div class="modal-header">
15227                                                                    <h5 class="modal-title" id="modalLabel">Braintree Payment</h5>
15228                                                                    <button type="button" class="close" data-dismiss="modal" onclick="closeModalBraintree()" aria-label="Close" style="padding: 0rem 1rem; margin: -2rem -1rem -1rem auto;">
15229                                                                        <span aria-hidden="true">&times;</span>
15230                                                                    </button>
15231                                                                </div>
15232                                                                <div class="modal-body">
15233                                                                <div class="form-group" style="margin-bottom: -1rem;">
15234                                                                            <label for="amount" id="total_amount" style="font-size:15px;">Amount </label>
15235
15236                                                                        </div>
15237                                                                    <!-- Braintree Drop-in UI -->
15238                                                                    <div id="dropin-container"></div>
15239                                                                    <button id="submit-button" class="btn btn-primary">Pay</button>
15240                                                                </div>
15241                                                            </div>
15242                                                        </div>
15243                                                    </div> `;
15244                                document.body.insertAdjacentHTML('beforeend', modalHTML);
15245                                $("#LoadingBar").hide();
15246                                $('#braintreeModal').modal({
15247                                    backdrop: 'static',
15248                                    keyboard: false
15249                                });
15250                                $("#total_amount").html("Amount :- "+amount+' '+currency);
15251                             braintree.dropin.create({
15252                                    authorization: clientToken,
15253                                    selector: '#dropin-container',
15254                                }, function (err, instance) {
15255                                    if (err) {
15256                                        console.error(err);
15257                                        return;
15258                                    }
15259                                    document.querySelector('#submit-button').addEventListener('click', function () {
15260                                        instance.requestPaymentMethod(function (err, payload) {
15261                                            if (err) {
15262                                                console.error(err);
15263                                                return;
15264                                            }
15265                                            $('#braintreeModal').hide();
15266                                            $("#LoadingBar").show();
15267                                            jQuery.ajax({
15268                                                url: '/form/processBraintreePayResponse/',
15269                                                type: "POST",
15270                                                data: {
15271                                                    nonce: payload.nonce,
15272                                                    user_id: user_id,
15273                                                    currency: currency,
15274                                                    amount: amount,
15275                                                    userType: userType,
15276                                                    session_id: session_id
15277                                                },
15278                                                success: function(response) {
15279                                                    $("#LoadingBar").hide();
15280                                                    response = eval('(' + response + ')');
15281                                                    if (response.url) {
15282                                                        window.location.href = response.url;
15283                                                    }
15284                                                },
15285                                                error: function(xhr, status, error) {
15286                                                    console.error('Error processing payment:', error);
15287                                                }
15288                                            });
15289                                        });
15290                                    //end
15291                                    });
15292                                });
15293                                $('#braintreeModal').modal('show');
15294                            },
15295                            error: function(xhr, status, error) {
15296                                console.error('Error fetching client token:', error);
15297                                $("#LoadingBar").hide();
15298                                alert('Unable to initialize payment. Please try again or contact support.');
15299                                if (failurePageURLBraintreePAy) {
15300                                    location.replace(failurePageURLBraintreePAy);
15301                                }
15302                            }
15303                        });
15304                    };
15305                    document.head.appendChild(script);
15306                }
15307                function closeModalBraintree(){
15308                    location.replace(failurePageURLBraintreePAy);
15309                }
15310
15311            </script>
15311
15312                        
15312<script>
15313    $(document).ready(function(){
15314        $('.image_link a i').remove();
15315        $('.wordLimit').on('keyup change', function(){
15316            if(shouldSkipValidation(this)){
15317                return;
15318            }
15319            let fld = $(this).attr('id');
15320            let value = $(this).val().split(" ");
15321            // Count number of words
15322            number = value.filter(function (word) {
15323                return word.length > 0;
15324            }).length;
15325            allowedWords = $(this).siblings('.wordLimitCount').val();
15326
15327            if( number > allowedWords ){
15328                value = $(this).val();                
15329                let words = value.split(" ");
15330                let truncatedWords = words.slice(0, allowedWords);
15331                let truncatedString = truncatedWords.join(" ");                
15332                $(this).val(truncatedString);
15333                number = allowedWords;
15334            }
15335
15336            let errorMsg = number + " / " + allowedWords+" word(s)";
15337            if( $('#fld_'+fld+'-error-limit').length > 0 ){
15338                // console.log('error field found');
15339                $('#fld_'+fld+'-error-limit').show();
15340                $('#fld_'+fld+'-error-limit').html(errorMsg);
15341            }else{
15342                // console.log("error field not found");
15343                // console.log("insert after", '#grp_'+fld);
15344                $('#grp_'+fld).after('<label id="fld_'+fld+'-error-limit" class="limit-error" for="'+fld+'">'+errorMsg+'</label>');
15345            }
15346
15347        });
15348
15349        $('.charLimit').on('keyup change', function(){
15350
15351            if(shouldSkipValidation(this)){
15352                return;
15353            }
15354            
15355            let fld = $(this).attr('id');
15356            let value = $(this).val();
15357            // Count number of characters
15358            number = value.length;
15359            allowedChar = $(this).siblings('.charLimitCount').val();
15360
15361            if( number > allowedChar ){
15362                value = $(this).val();
15363                value = value.substring(0, allowedChar);
15364                $(this).val(value);
15365                number = allowedChar;
15366            }
15367
15368            let errorMsg = number + " / " + allowedChar+" char(s)";
15369            if( $('#fld_'+fld+'-error-limit').length > 0 ){
15370                $('#fld_'+fld+'-error-limit').show();
15371                $('#fld_'+fld+'-error-limit').html(errorMsg);
15372            }else{
15373                $('#grp_'+fld).after('<label id="fld_'+fld+'-error-limit" class="limit-error" for="'+fld+'">'+errorMsg+'</label>');
15374            }
15375
15376        });
15377
15378    });
15379</script>
vendor: 1 bytes, line 15379
15379
15380<script>
15381    gStepNumber = 1;
15382    fromBackBtn = false;
15383    tcktModifiedFromBackBtn = false;
15384
15385    function pruneStepFormTicketPackagesFromDomSelection() {
15386        if (formType !== 'REGISTRATION_FORM' || parseInt(pageBreakSummaryCount, 10) <= 0) {
15387            return;
15388        }
15389        var selectedPackageIds = {};
15390        $(document).find('.qty_package').each(function () {
15391            var qty = parseInt($(this).val(), 10);
15392            if (isNaN(qty) || qty <= 0) {
15393                return;
15394            }
15395            var packageId = $(this).siblings('.qty-plus').attr('data-id') || $(this).prev().data('id');
15396            if (packageId) {
15397                selectedPackageIds[String(packageId)] = true;
15398            }
15399        });
15400        $.each(Object.keys(TicketPackages), function (_, packageId) {
15401            if (!isNaN(parseFloat(packageId)) && isFinite(packageId) && !selectedPackageIds[String(packageId)]) {
15402                delete TicketPackages[packageId];
15403            }
15404        });
15405        if (typeof syncTicketPackagesToStorage === 'function') {
15406            syncTicketPackagesToStorage();
15407        } else {
15408            window.TicketPackages = TicketPackages;
15409            localStorage.setItem('TicketPackages', JSON.stringify(TicketPackages));
15410        }
15411    }
15412
15413    function showContent(stepNumber) {
15414       
15415
15416        $("#LoadingBar").show();
15417        if(gStepNumber > stepNumber){
15418            fromBackBtn = true;
15419        } else if(stepNumber > 2) {
15420            fromBackBtn = false;
15421        }
15422        gStepNumber = stepNumber;
15423        if (stepNumber == 1 && formType === 'REGISTRATION_FORM' && parseInt(pageBreakSummaryCount, 10) > 0) {
15424            window.orderNowProcessing = false;
15425        }
15426        if((gStepNumber == 1) && isTicketTop && isTicket){
15427            $('.order-now-button').prop('disabled', false);
15428        }
15429
15430        let appId = $('input[name="appID"]').val();
15431        console.log(appId);
15432        if(appId == '19369'){
15433            console.log('single-pay');
15434            setTimeout(function() {
15435                $('.single-pay').hide();
15436            }, 400);
15437        }
15438
15439        // Hide payment summary block when step is 4 and app_id is 22588
15440        if (stepNumber == 4 && appId == '22588') {
15441            
15442            setTimeout(function() {
15443                $('.order__payment.order__summary.page_break_step').hide();
15444            }, 1000);
15445        }
15446
15447        var stepsArray =[];
15448        let enableVfairsPayment = 'false';
15449        let hasVfairsOfflinePayments = false;
15450        // page break error handling
15451        var error_count=false;
15452        var currentPageValidate = null;
15453
15454        if (stepNumber > 1) {
15455            currentPageValidate = stepsArray[stepNumber - 1];
15456
15457            if (currentPageValidate && currentPageValidate!= undefined && hasVisibleAssignGroupsBlock(currentPageValidate)) {
15458
15459                if (!checkAssignedPackages() || !checkAllAddonsAssigned()) {
15460                    $("#LoadingBar").hide();
15461                    return false;
15462                }
15463            }
15464
15465            // Select all input fields within the page-break element
15466            document.querySelectorAll(`.page-break-element-${currentPageValidate} input, .page-break-element-${currentPageValidate} select`).forEach(inputField => {
15467            // Skip validation for hidden fields
15468            if (inputField.type === "hidden") {
15469                return; // Skip hidden fields completely
15470            }
15471            const parentField = inputField.closest('.page-break-fields');
15472            if (parentField && parentField.style.display === 'none') {
15473                return; // Skip this field if the parent container is hidden
15474            }
15475            if (inputField.id || inputField.name) { // Ensure the input field has an ID or a name
15476                const escapedFieldId = inputField.id ? escapeSelector(inputField.id) : null; // Escape special characters in ID
15477                const field = escapedFieldId ? $(`#${escapedFieldId}`) : null; // Select the field by the escaped ID
15478                const groupName = inputField.name; // Use name for grouped inputs like radio buttons or checkboxes
15479                const group = groupName ? $(`input[name='${escapeSelector(groupName)}']`).closest(".form_field_grp") : null;
15480                const errorLabelId = groupName ? `${groupName.replace(/\[|\]/g, "")}-error` : `${escapedFieldId}-error`;
15481                const errorLabel = $(`#${errorLabelId}`); // Select the error label using the ID
15482                // Check if the field is required and validate radio buttons as a group
15483                if (inputField.type === "radio" && groupName) {
15484                    // Check if any radio button in the group is checked
15485                    const isSelected = $(`input[name='${escapeSelector(groupName)}']:checked`).length > 0;
15486                    if (!isSelected) {
15487                        // Remove any existing error labels for this group
15488                        group.find('.error').remove();
15489                        // Append the new error label only if it doesn't already exist
15490                        if (!group.find(`#${errorLabelId}`).length) {
15491                            group.append(`<label id="${errorLabelId}" class="error" for="${escapeSelector(groupName)}">Please select an option.</label>`);
15492                        }
15493                        error_count = true;
15494                    } else {
15495                        // Remove the error label if the group is valid
15496                        if (errorLabel.length) {
15497                            errorLabel.remove();
15498                        }
15499                    }
15500                }
15501                // Handle checkbox validation (group of checkboxes)
15502                else if (inputField.type === "checkbox" && groupName) {
15503                    // Only validate checkboxes that are marked as 'required'
15504                    const isRequiredCheckbox = inputField.required;
15505                    if (isRequiredCheckbox) {
15506                        // Check if any checkbox in the group is checked (ignore hidden input field)
15507                        const isChecked = $(`input[name='${escapeSelector(groupName)}']:checked`).not('input[type="hidden"]').length > 0;
15508                        if (!isChecked) {
15509                            // Remove any existing error labels for this group
15510                            group.find('.error').remove();
15511                            // Append the new error label only if it doesn't already exist
15512                            if (!group.find(`#${errorLabelId}`).length) {
15513                                group.append(`<label id="${errorLabelId}" class="error" for="${escapeSelector(groupName)}" style="display:block; color: red;">This field is required.</label>`);
15514                            }
15515                            error_count = true;
15516                        } else {
15517                            // Remove the error label if the group is valid
15518                            if (errorLabel.length) {
15519                                errorLabel.remove();
15520                            }
15521                        }
15522                    }
15523                }
15524                else {
15525                    // Handle individual field validation (text, select, etc.)
15526                    const isInvalid = inputField.required && (
15527                        inputField.value.trim() === "" || // Empty text or select value
15528                        (inputField.type === "checkbox" && !inputField.checked) // Individual checkbox not checked
15529                    );
15530                    // Only append error label if the field is required and invalid
15531                    if (isInvalid) {
15532                        // Remove any existing error labels for this field
15533                        if (errorLabel.length) {
15534                            errorLabel.remove();
15535                        }
15536                        // Append the new error label only if it doesn't already exist
15537                        if ($(`#${escapedFieldId}-error`).length > 0) {
15538                            $(`#${escapedFieldId}-error`).remove();
15539                        }
15540                        if (!field.find(`#${errorLabelId}`).length ) {
15541                            field.after(`<label id="${errorLabelId}" class="error" for="${escapedFieldId}">This field is required.</label>`);
15542                        }
15543                        error_count = true;
15544                    } else {
15545                        // Remove the error label if valid
15546                        if (errorLabel.length) {
15547                            errorLabel.remove();
15548                        }
15549                    }
15550                }
15551            }
15552        });
15553        // Prevent form submission if there are validation errors
15554        if (error_count) {
15555            $("#LoadingBar").hide();
15556            return false; // Return false to prevent the form submission
15557        }
15558    }
15559
15560
15561        // page break error handling end
15562        document.querySelectorAll('.page_break_step').forEach(div => div.style.display = 'none');
15563        document.querySelectorAll('.page-break-step-' + stepNumber).forEach(function (element) {
15564            element.style.display = 'block';
15565        });
15566        if (stepNumber != 1 && pageBreakSummaryCount != stepNumber && stepsArray.hasOwnProperty(stepNumber)) {
15567            var parent_content_id = stepsArray[stepNumber];
15568            if(userDetailsEditTicket){
15569            $('.ticketFormCol.page_break_step_field .panel-group').show();
15570            }
15571            $('.page_break_step_field').show();
15572            $('.page-break-fields').hide();
15573            $('.page-break-fields').parent().hide();
15574            $('.page-break-element-' + parent_content_id).parent().show();
15575            $('.page-break-element-' + parent_content_id).show();
15576
15577            $('.page-break-element-' + parent_content_id).each(function () {
15578                var parentDiv = $(this).closest('.col-md-6');
15579                if (parentDiv.length) {
15580                    parentDiv.removeClass('col-md-6').addClass('col-md-12');
15581                }
15582            });
15583            $('.page-break-element-' + parent_content_id).find('.searchable-select').each(function () {
15584                window.initFormSelect2($(this), true);
15585            });
15586            var stepBack = stepNumber - 1;
15587            if (stepBack == 0) {
15588                var newContent = '<div id="uniqueContent" class="col-sm-12">' +
15589                    '<div class="pagebreak-btns">' +
15590                    '<button type="button" onclick="showContent(' + (stepNumber + 1) + ')" class="btn primary">Next</button>' +
15591                    '</div>' +
15592                    '</div>';
15593            } else {
15594                var newContent = '<div id="uniqueContent" class="col-sm-12">' +
15595                    '<div class="pagebreak-btns">' +
15596                    '<button type="button" onclick="showContent(' + (stepNumber - 1) + ')" class="btn">Back</button>' +
15597                    '<button type="button" onclick="showContent(' + (stepNumber + 1) + ')" class="btn primary">Next</button>' +
15598                    '</div>' +
15599                    '</div>';
15600            }
15601
15602
15603            if ($('#uniqueContent').length > 0) {
15604                $('#uniqueContent').replaceWith(newContent);
15605            } else {
15606                $('.ticketFormCol.page_break_step_field .panel-body').append(newContent);
15607            }
15608
15609        } else {
15610            if (stepNumber == 1) {
15611                if(userDetailsEditTicket){
15612                $('.ticketFormCol.page_break_step_field .panel-group').show();
15613                if (Object.keys(TicketPackages).length > 0) {
15614                    $.each(TicketPackages, function(packageId, packageDetails) {
15615                        $(`#packageContainerBlock${packageId} .aPackage`).remove();
15616                    });
15617                }
15618                window.location.reload();
15619                if ($('input[name="user_list[]"]').length > 0) {
15620                    $('input[name="user_list[]"]').val('');
15621                }
15622            }
15623            }
15624            if (stepNumber == pageBreakSummaryCount) {
15625                if(userDetailsEditTicket){
15626                    var parent_content_id = stepsArray[stepNumber-1];
15627                $('.page-break-element-' + parent_content_id).parent().hide();
15628                if(checkAllFieldsHidden()){
15629                    $('.ticketFormCol.page_break_step_field .panel-group').hide();
15630                }
15631                }
15632          
15633                var newContent = '<div id="backorderSummery" class="pagebreak-btns page_break_step page-break-step-' + stepNumber + '">' +
15634                    '<button type="button" onclick="showContent(' + (stepNumber - 1) + ')" class="btn" style="float: right;">Back</button>' +
15635                    '</div>';
15636                    if(enableVfairsPayment === 'true' && !hasVfairsOfflinePayments) {
15637                        $('.order__payment').hide();
15638                    }
15639                if ($('#backorderSummery').length == 0) {
15640                    if(enableVfairsPayment === 'true' && !hasVfairsOfflinePayments){
15641                        $('.order__payment').hide();
15642                        $('.paynbtn.single-pay.page_break_step.page-break-step-' + stepNumber).after(newContent);
15643                    }else{
15644                        $('.order__payment.order__summary.topp.page_break_step.page-break-step-' + stepNumber).append(newContent);
15645                    }
15646                    var $button = $('.paynbtn.zerobb');
15647                    if ($button.length > 0 && $button.is(':visible')) {
15648                        let priceText = $('.total__price span').text();
15649                        let priceValue = parseFloat(priceText.replace('$', ''));
15650                        if (priceValue > 0) {
15651                        }else{
15652                            if ($('#backorderSummery').length == 0) {
15653                                $('.paynbtn.zerobb').after(newContent);
15654                                $('.order__payment').hide();
15655                                $('.paynbtn.single-pay').hide();
15656                            }
15657                        }
15658                    }
15659                }
15660
15661            }
15662
15663            $('.page_break_step_field').hide();
15664        }
15665
15666
15667
15668        const data = {};
15669          // Loop through the stepsArray and collect input field values
15670        $.each(stepsArray, function (key, value) {
15671            // Select all input and select elements within the current page-break element
15672            document.querySelectorAll(`.page-break-element-${value} input, .page-break-element-${value} select`).forEach(field => {
15673                if (!field.name) return; // Skip fields without a name
15674                const fieldName = field.name;
15675                // Skip hidden fields
15676                if (field.type === "hidden") return;
15677                // Initialize the data[fieldName] as an array if it's a checkbox, otherwise as a single value
15678                if (!data[fieldName]) {
15679                    data[fieldName] = field.type === "checkbox" ? [] : null;
15680                }
15681                // Handle select2 multiple select
15682                if ($(field).hasClass('select2-hidden-accessible') && $(field).prop('multiple')) {
15683                    data[fieldName] = [];
15684                    const selectedOptions = $(field).select2('data');
15685                    selectedOptions.forEach(option => {
15686                        data[fieldName].push(option.text || option.id);
15687                    });
15688                }
15689                // Handle checkboxes
15690                else if (field.type === "checkbox") {
15691                    if (field.checked) {
15692                        data[fieldName].push(field.getAttribute('aria-label') || field.value || '');
15693                    }
15694                }
15695                // Handle radio buttons
15696                else if (field.type === "radio") {
15697                    if (field.checked) {
15698                        data[fieldName] = field.getAttribute('aria-label') || field.value || '';
15699                    }
15700                }
15701                // Handle regular select elements
15702                else if (field.tagName.toLowerCase() === "select") {
15703                    const selectedValue = field.value;
15704                    if (selectedValue) {
15705                        data[fieldName] = selectedValue;
15706                    }
15707                }
15708                // Handle other input types (text, number, etc.)
15709                else {
15710                    data[fieldName] = field.value;
15711                }
15712            });
15713        });
15714        if (Object.keys(data).length > 0) {
15715            Object.entries(data).forEach(([fieldName, fieldValues]) => {
15716                const escapedFieldName = escapeSelector(fieldName); // Escape square brackets and special characters
15717                const $fields = $(`[name='${escapedFieldName}']`); // Select all fields with the given name
15718                if ($fields.length) {
15719                    if ($fields.is(':radio, :checkbox')) {
15720                        // Handle checkboxes and radio buttons
15721                        $fields.each(function () {
15722                            const $field = $(this);
15723                            const isChecked = Array.isArray(fieldValues)
15724                                ? fieldValues.includes($field.attr('aria-label')) // Match against aria-label for multiple values
15725                                : $field.attr('aria-label') === fieldValues; // Match for single-value checkbox/radio
15726                            $field.prop('checked', isChecked);
15727                            // Trigger necessary events only for checked fields
15728                            if (isChecked) {
15729                                $field.trigger('change').trigger('mouseout');
15730                            }
15731                        });
15732                    } else if ($fields.is('select')) {
15733                        // Handle select elements
15734                        $fields.each(function () {
15735                            if(escapedFieldName != 'group_registration'){
15736                                const $field = $(this);
15737                                if ($field.is('input[id$="_other"]')) {
15738                                    var otherId = $field.attr('id');
15739                                    console.log($('#' + otherId).val());
15740                                    if($('#' + otherId).val() != ''){
15741                                        var baseId = otherId.replace('_other', '');
15742                                    // Select the "other" option in the corresponding select
15743                                    var $select = $('#' + baseId);
15744                                    $select.val('other').trigger('change');
15745                                    }
15746                                    
15747                                }
15748                                // if ($field.is('input#fld_1482895_other') || $field.find('input#fld_1482895_other').length > 0) {
15749                                //     console.log('other');
15750                                // }
15751                                $field.trigger('change'); // Trigger the change event
15752                            }
15753
15754                        });
15755                    } else {
15756                        // Handle single-value fields (text, hidden, etc.)
15757                        $fields.val(fieldValues);
15758                        $fields.trigger('change').trigger('mouseout');
15759                    }
15760                }
15761            });
15762        }
15763         $("#LoadingBar").hide();
15764
15765
15766        document.querySelectorAll('.pagebreak-steps li').forEach((li, index) => {
15767            if (index < stepNumber - 1) li.className = 'visited';
15768            else if (index === stepNumber - 1) li.className = 'active';
15769            else li.className = '';
15770        });
15771        if (appId == 15390) {
15772            setTimeout(function() {
15773                if ($('li.active[aria-label*="Order Now"]').length > 0) {
15774                  
15775                    $('.order__payment.order__summary.topp.page_break_step.page-break-step-6').after('<input class="paynbtn single-pay page_break_step page-break-step-6" data-sub="Submit" type="submit" style="margin-top: 25px; display: block;" value="Submit" tabindex="0">');
15776                } else {
15777                    $('.paynbtn').remove();
15778                }
15779            }, 1000);
15780        }
15781
15782
15783        if (!skipEmptyPage(stepsArray, stepNumber, fromBackBtn)) {
15784            return false;
15785        }
15786    }
15787       // Function to escape square brackets and other special characters in IDs
15788
15789function skipEmptyPage(stepsArray, stepNumber, fromBackBtn){
15790
15791    let pageId = stepsArray[stepNumber];
15792
15793    if (pageId == undefined || pageId == "") {
15794        return false;
15795    }
15796
15797    let hasAtleastOneField = checkPageHasAtleastOneField(pageId);
15798
15799    if (!hasAtleastOneField) {
15800
15801        if (!$(`.page-break-element-${pageId} .group-reg-block .packageBlock`).length || $(`.page-break-element-${pageId} .group-reg-block .packageBlock`)[0].style.visibility === 'hidden') {
15802
15803            if (fromBackBtn) {
15804                showContent(stepNumber-1);
15805            } else {
15806                showContent(stepNumber+1);
15807            }
15808            return false;
15809        }
15810    }
15811
15812    return true;
15813}
15814
15815function skipEmptyPageSimpleView(stepsArray, stepNumber, fromBackBtn){
15816
15817let pageId = stepsArray[stepNumber];
15818
15819if (pageId == undefined || pageId == "") {
15820    return false;
15821}
15822
15823let hasAtleastOneField = checkSimpleViewHasAtleastOneField(pageId);
15824
15825if (!hasAtleastOneField) {
15826    if (fromBackBtn) {
15827        ShowFormFieldPageBreak(stepNumber-1);
15828    } else {
15829        ShowFormFieldPageBreak(stepNumber+1);
15830    }
15831    return false;
15832}
15833
15834return true;
15835}
15836
15837function hasVisibleAssignGroupsBlock(pageId){
15838
15839    if ($(`.page-break-element-${pageId} .group-reg-block .packageBlock`).length) {
15840        if ($(`.page-break-element-${pageId} .group-reg-block .packageBlock`)[0].style.visibility === 'visible') {
15841            return true;
15842        }
15843
15844        return false;
15845    }
15846}
15847
15848function checkPageHasAtleastOneField($currentPage){
15849
15850    var hasAtleastOneField = false;
15851
15852    document.querySelectorAll(`.page-break-element-${$currentPage} input, .page-break-element-${$currentPage} select`).forEach(inputField => {
15853        // Skip validation for hidden fields
15854        if (inputField.type === "hidden" || inputField.style.display === 'none') {
15855            return; // Skip hidden fields completely
15856        }
15857        const parentField = inputField.closest('.page-break-fields');
15858        if (parentField && parentField.style.display === 'none') {
15859            return; // Skip this field if the parent container is hidden
15860        }
15861        if (inputField.id || inputField.name) { // Ensure the input field has an ID or a name
15862
15863            hasAtleastOneField = true;
15864        }
15865    });
15866
15867    return hasAtleastOneField;
15868}
15869
15870function requiresParentTicketAssignment() {
15871    return false;
15872}
15873
15874function getParentRegistrationEmail() {
15875    var parentEmail = ($('input[name="email"]').val() || '').trim();
15876    if (!parentEmail && typeof groupRegisterationHelper !== 'undefined' && groupRegisterationHelper.getParentEmail) {
15877        parentEmail = (groupRegisterationHelper.getParentEmail() || '').trim();
15878    }
15879    return parentEmail.toLowerCase();
15880}
15881
15882function getAssignedEmailFromPackageRow($aPackage) {
15883    var assignedEmail = '';
15884    $aPackage.find('.aPackage__detail__cell').each(function () {
15885        if ($(this).find('span').text().trim() === 'Email') {
15886            assignedEmail = $(this).find('p').text().trim().toLowerCase();
15887            return false;
15888        }
15889    });
15890    return assignedEmail;
15891}
15892
15893function countParentTicketAssignments(optExcludeApackage, includeUserListFallback) {
15894    var parentEmail = getParentRegistrationEmail();
15895    if (!parentEmail) {
15896        return 0;
15897    }
15898    var count = 0;
15899    $('.packageContainer > .aPackage').each(function () {
15900        if (optExcludeApackage && optExcludeApackage.length && this === optExcludeApackage[0]) {
15901            return;
15902        }
15903        if (getAssignedEmailFromPackageRow($(this)) === parentEmail) {
15904            count++;
15905        }
15906    });
15907    if (count === 0 && includeUserListFallback !== false) {
15908        $("input[name='user_list[]']").each(function () {
15909            if (!$(this).val()) {
15910                return;
15911            }
15912            try {
15913                var obj = jQuery.parseJSON($(this).val().replace(/&quot;/g, '"'));
15914                if (obj.email && obj.email.trim().toLowerCase() === parentEmail) {
15915                    count++;
15916                }
15917            } catch (e) {}
15918        });
15919    }
15920    return count;
15921}
15922
15923function isParentAssignedToAnyTicket() {
15924    return countParentTicketAssignments(null) > 0;
15925}
15926
15927function getTotalSelectedTicketQty() {
15928    var total = 0;
15929    if (typeof TicketPackages !== 'undefined' && TicketPackages) {
15930        $.each(TicketPackages, function (packageId, package) {
15931            if (!isNaN(parseFloat(packageId)) && isFinite(packageId) && package && package.pkg_qty) {
15932                total += parseInt(package.pkg_qty, 10) || 0;
15933            }
15934        });
15935    }
15936    if (total === 0) {
15937        $('.packageContainer__head').each(function () {
15938            var ori = parseInt($(this).attr('data-ori-total'), 10);
15939            if (!isNaN(ori)) {
15940                total += ori;
15941            }
15942        });
15943    }
15944    return total;
15945}
15946
15947function showParentTicketAssignmentError() {
15948    if (!shouldEnforceParentTicketAssignmentRules()) {
15949        return;
15950    }
15951    $('#parent-ticket-error').remove();
15952    var msg = 'At least one ticket must be assigned to the parent registrant.';
15953    var errorHtml = '<label id="parent-ticket-error" class="error" for="group" style="display: block; color: red;">' + msg + '</label>';
15954
15955    if (typeof isTicketTop !== 'undefined' && parseInt(isTicketTop) && $('.user_list').length) {
15956        $('.user_list').after(errorHtml);
15957    } else if ($('.packageBlock').length) {
15958        $('.packageBlock').first().after(errorHtml);
15959    } else if ($('.user_list').length) {
15960        $('.user_list').after(errorHtml);
15961    }
15962}
15963
15964function shouldEnforceParentTicketAssignmentRules() {
15965    if (!requiresParentTicketAssignment()) {
15966        return false;
15967    }
15968    if (!parseInt(isTicket)) {
15969        return false;
15970    }
15971    return getTotalSelectedTicketQty() > 1;
15972}
15973
15974function validateParentTicketAssignment() {
15975    if (!shouldEnforceParentTicketAssignmentRules()) {
15976        $('#parent-ticket-error').remove();
15977        return true;
15978    }
15979    if (!getParentRegistrationEmail()) {
15980        return true;
15981    }
15982    if (isParentAssignedToAnyTicket()) {
15983        $('#parent-ticket-error').remove();
15984        return true;
15985    }
15986    showParentTicketAssignmentError();
15987    return false;
15988}
15989
15990/* =============================================================================
15991 * Ticket Group Registration Max helpers (is_ticket = 1 only)
15992 * Counts unique OTHER attendee emails toward field_options->max.
15993 * Parent registrant email is excluded. No-ops when max is empty/0/unset,
15994 * or when simplified_ticket_assignment is enabled.
15995 * ============================================================================= */
15996var _ticketGroupMaxAutoAssigning = false;
15997
15998function getTicketGroupRegistrationMax() {
15999    var maxVal = (typeof groupRegistrationFieldMax !== 'undefined') ? groupRegistrationFieldMax : '';
16000    if (maxVal === '' || maxVal === null || typeof maxVal === 'undefined') {
16001        var $hiddenMax = $('#group_registration_field_max');
16002        if ($hiddenMax.length) {
16003            maxVal = $hiddenMax.val();
16004        }
16005    }
16006    var parsed = parseInt(maxVal, 10);
16007    return isNaN(parsed) ? 0 : parsed;
16008}
16009
16010function isTicketGroupMaxEnabled() {
16011    var isSimplified = (typeof simplifiedTicketAssignment !== 'undefined' && (
16012        simplifiedTicketAssignment === true ||
16013        simplifiedTicketAssignment === 1 ||
16014        simplifiedTicketAssignment === '1'
16015    ));
16016    return !!(
16017        parseInt(isTicket) &&
16018        typeof isGroupRegistrationField !== 'undefined' &&
16019        parseInt(isGroupRegistrationField) &&
16020        !isSimplified &&
16021        getTicketGroupRegistrationMax() > 0
16022    );
16023}
16024
16025function normalizeTicketGroupEmail(email) {
16026    return (email || '').toString().trim().toLowerCase();
16027}
16028
16029function isTicketGroupParentEmail(email) {
16030    var parentEmail = getParentRegistrationEmail();
16031    var normalized = normalizeTicketGroupEmail(email);
16032    return !!(parentEmail && normalized && normalized === parentEmail);
16033}
16034
16035function getUniqueOtherAssignedEmails() {
16036    var emails = {};
16037    $('.packageContainer > .aPackage').each(function () {
16038        var email = normalizeTicketGroupEmail(getAssignedEmailFromPackageRow($(this)));
16039        if (!email || email === 'not set' || isTicketGroupParentEmail(email)) {
16040            return;
16041        }
16042        emails[email] = true;
16043    });
16044    return Object.keys(emails);
16045}
16046
16047function getTicketGroupMaxOtherCount() {
16048    return getUniqueOtherAssignedEmails().length;
16049}
16050
16051function isTicketGroupMaxReached() {
16052    if (!isTicketGroupMaxEnabled()) {
16053        return false;
16054    }
16055    return getTicketGroupMaxOtherCount() >= getTicketGroupRegistrationMax();
16056}
16057
16058function wouldExceedTicketGroupMax(email) {
16059    if (!isTicketGroupMaxEnabled() || _ticketGroupMaxAutoAssigning) {
16060        return false;
16061    }
16062    var normalized = normalizeTicketGroupEmail(email);
16063    if (!normalized || isTicketGroupParentEmail(normalized)) {
16064        return false;
16065    }
16066    var others = getUniqueOtherAssignedEmails();
16067    if (others.indexOf(normalized) !== -1) {
16068        return false;
16069    }
16070    return others.length >= getTicketGroupRegistrationMax();
16071}
16072
16073function clearTicketGroupMaxError() {
16074    $('#ticket-group-max-error').remove();
16075}
16076
16077function showTicketGroupMaxError(message) {
16078    clearTicketGroupMaxError();
16079    var msg = message || ('Limit reached: Maximum ' + getTicketGroupRegistrationMax() + ' additional member(s) allowed.');
16080    var errorHtml = '<label id="ticket-group-max-error" class="error" for="group" style="display: block; color: red;">' + msg + '</label>';
16081    if (typeof isTicketTop !== 'undefined' && parseInt(isTicketTop) && $('.user_list').length) {
16082        $('.user_list').after(errorHtml);
16083    } else if ($('.packageBlock').length) {
16084        $('.packageBlock').first().after(errorHtml);
16085    } else if ($('.user_list').length) {
16086        $('.user_list').after(errorHtml);
16087    }
16088}
16089
16090function getUnassignedTicketPackageSlots() {
16091    var slots = [];
16092    $('.packageContainer').each(function () {
16093        var $container = $(this);
16094        if ($container.is(':hidden')) {
16095            return;
16096        }
16097        var oriTotal = parseInt($container.find('.packageContainer__head').attr('data-ori-total'), 10) || 0;
16098        var assigned = $container.find('> .aPackage').length;
16099        var remaining = oriTotal - assigned;
16100        for (var i = 0; i < remaining; i++) {
16101            slots.push($container);
16102        }
16103    });
16104    return slots;
16105}
16106
16107function ensureBuyerAssignLinkInPackage($packageContainer) {
16108    var $buyerLink = $packageContainer.find('.packageContainer__head .user-info-prev.buyer, .user-info-prev.buyer').first();
16109    if ($buyerLink.length) {
16110        return $buyerLink;
16111    }
16112    var first_name = (typeof getMainRegistrationInputValue === 'function') ? getMainRegistrationInputValue('first_name') : ($('input[name="first_name"]').val() || '');
16113    var last_name = (typeof getMainRegistrationInputValue === 'function') ? getMainRegistrationInputValue('last_name') : ($('input[name="last_name"]').val() || '');
16114    var email = (typeof getMainRegistrationInputValue === 'function') ? getMainRegistrationInputValue('email') : ($('input[name="email"]').val() || '');
16115    if (!first_name || !last_name || !email) {
16116        return $();
16117    }
16118    var $menu = $packageContainer.find('.packageContainer__head .dropdown-menu-main');
16119    if ($menu.length) {
16120        if (!assignDropdownAlreadyHasEmail($menu, email)) {
16121            $menu.append(
16122                '<li><a href="javascript:void(0)" class="user-info-prev buyer" data-buyer="1" data-user="buyer">' +
16123                '<p>' + first_name + ' ' + last_name + ' (Buyer)</p><span>' + email + '</span></a></li>'
16124            );
16125        }
16126        return $packageContainer.find('.packageContainer__head .user-info-prev.buyer').first();
16127    }
16128    var $head = $packageContainer.find('.packageContainer__head .dropdown, .packageContainer__head');
16129    if ($head.length) {
16130        $head.append(
16131            '<a href="javascript:void(0)" class="btn theme-light-btn user-info-prev buyer" data-buyer="1" data-user="buyer" style="display:none;">' +
16132            '<p>' + first_name + ' ' + last_name + ' (Buyer)</p><span>' + email + '</span></a>'
16133        );
16134        return $packageContainer.find('.user-info-prev.buyer').first();
16135    }
16136    return $();
16137}
16138
16139function autoAssignRemainingTicketsToParent() {
16140    if (!isTicketGroupMaxEnabled()) {
16141        return true;
16142    }
16143    var slots = getUnassignedTicketPackageSlots();
16144    if (!slots.length) {
16145        clearTicketGroupMaxError();
16146        return true;
16147    }
16148    if (!getParentRegistrationEmail()) {
16149        showTicketGroupMaxError('Group attendee limit reached. Please fill parent registrant details so remaining tickets can be auto-assigned to the parent.');
16150        return false;
16151    }
16152    _ticketGroupMaxAutoAssigning = true;
16153    try {
16154        var safety = 0;
16155        while (getUnassignedTicketPackageSlots().length > 0 && safety < 100) {
16156            safety++;
16157            var $container = getUnassignedTicketPackageSlots()[0];
16158            var $buyerLink = ensureBuyerAssignLinkInPackage($container);
16159            if (!$buyerLink.length) {
16160                showTicketGroupMaxError('Group attendee limit reached. Unable to auto-assign remaining tickets to the parent registrant.');
16161                return false;
16162            }
16163            var beforeAssigned = $container.find('> .aPackage').length;
16164            $buyerLink.trigger('click');
16165            var afterAssigned = $container.find('> .aPackage').length;
16166            if (afterAssigned <= beforeAssigned) {
16167                showTicketGroupMaxError('Group attendee limit reached. Unable to auto-assign remaining tickets to the parent registrant.');
16168                return false;
16169            }
16170        }
16171    } finally {
16172        _ticketGroupMaxAutoAssigning = false;
16173    }
16174    if (getUnassignedTicketPackageSlots().length > 0) {
16175        showTicketGroupMaxError('Group attendee limit reached. Remaining tickets must be assigned to the parent registrant.');
16176        return false;
16177    }
16178    clearTicketGroupMaxError();
16179    updateTicketGroupMaxAssignUi();
16180    return true;
16181}
16182
16183function updateTicketGroupMaxAssignUi() {
16184    if (!isTicketGroupMaxEnabled()) {
16185        return;
16186    }
16187    var atMax = isTicketGroupMaxReached();
16188    $('.packageContainer__head .assign-user-to-package').closest('li').each(function () {
16189        $(this).toggle(!atMax);
16190    });
16191    if (typeof simplifiedTicketAssignment !== 'undefined' && parseInt(simplifiedTicketAssignment)) {
16192        $('.fakePackage .assign-user-to-package').toggle(!atMax);
16193    }
16194}
16195
16196function canAssignEmailUnderTicketGroupMax(email) {
16197    if (!isTicketGroupMaxEnabled() || _ticketGroupMaxAutoAssigning) {
16198        return true;
16199    }
16200    if (wouldExceedTicketGroupMax(email)) {
16201        showTicketGroupMaxError();
16202        return false;
16203    }
16204    clearTicketGroupMaxError();
16205    return true;
16206}
16207
16208function canAddNewOtherAttendeeUnderTicketGroupMax() {
16209    if (!isTicketGroupMaxEnabled() || _ticketGroupMaxAutoAssigning) {
16210        return true;
16211    }
16212    if (isTicketGroupMaxReached()) {
16213        showTicketGroupMaxError();
16214        return false;
16215    }
16216    clearTicketGroupMaxError();
16217    return true;
16218}
16219
16220function afterTicketAssignmentApplyGroupMaxRules(assignedEmail) {
16221    if (!isTicketGroupMaxEnabled() || _ticketGroupMaxAutoAssigning) {
16222        return true;
16223    }
16224    // Assign clicks must only assign ONE ticket. Auto-assign remaining
16225    // tickets to the parent happens on submit, not during assign.
16226    updateTicketGroupMaxAssignUi();
16227    if (getTicketGroupMaxOtherCount() > getTicketGroupRegistrationMax()) {
16228        showTicketGroupMaxError();
16229        return false;
16230    }
16231    clearTicketGroupMaxError();
16232    return true;
16233}
16234
16235function validateAndEnforceTicketGroupMaxOnSubmit() {
16236    if (!isTicketGroupMaxEnabled()) {
16237        return true;
16238    }
16239    if (getTicketGroupMaxOtherCount() > getTicketGroupRegistrationMax()) {
16240        showTicketGroupMaxError();
16241        return false;
16242    }
16243    if (isTicketGroupMaxReached() && getUnassignedTicketPackageSlots().length > 0) {
16244        if (!autoAssignRemainingTicketsToParent()) {
16245            return false;
16246        }
16247    }
16248    if (getTicketGroupMaxOtherCount() > getTicketGroupRegistrationMax()) {
16249        showTicketGroupMaxError();
16250        return false;
16251    }
16252    clearTicketGroupMaxError();
16253    updateTicketGroupMaxAssignUi();
16254    return true;
16255}
16256/* === End Ticket Group Registration Max helpers === */
16257
16258function checkAssignedPackages() {
16259
16260    selected = $('.user_list').val();
16261
16262    if(isTicket){
16263        sumTotal=0;
16264        let appId = 20550;
16265        let organizationID= '323';
16266        let excluded_app_ids = [18834,18423, 17033,15625,14838,10401, 10397, 10710, 11778, 11759, 11755, 11772, 11866, 1000200,11866, 14376, 14377, 14525,14172,14838,14853,11561,15461,15741,16279,16782,16783,18414,20463, 1000000441,1000001478, 10003234, 10003307, 1000008001];
16267        let excluded_org_ids = ["78"];
16268        if(!excluded_app_ids.includes(appId) && !excluded_org_ids.includes(organizationID)){
16269            if ($('.packageContainer .packageContainer__head', window.parent.document).length) {
16270                $('.packageContainer .packageContainer__head', window.parent.document).each(function () {
16271                var $package = $(this);
16272                var oriTotal = $package.attr("data-ori-total");
16273                sumTotal=parseInt(oriTotal)+sumTotal;
16274            });
16275            selected=sumTotal;
16276            }
16277        }else{
16278            if ($('.packageContainer .packageContainer__head', window.document).length) {
16279                $('.packageContainer .packageContainer__head', window.document).each(function () {
16280                var $package = $(this);
16281                var oriTotal = $package.attr("data-ori-total");
16282                sumTotal=parseInt(oriTotal)+sumTotal;
16283            });
16284            selected=sumTotal;
16285            }
16286        }
16287    }
16288
16289    count_value = 0;
16290
16291    var groupEmailsArray = $("input[name='user_list[]']").map(function () {
16292        if ($(this).val()) {
16293            count_value++;
16294            var obj = jQuery.parseJSON($(this).val());
16295            if (obj.email) {
16296                return obj.email;
16297            } else {
16298                return;
16299            }
16300
16301        }
16302    }).get();
16303    groupEmails = groupEmailsArray.join(",");
16304    var appId = 20550;
16305    // if(appId == 19899 && selected == 50 && count_value == 49 && $("#user100").val() != ""){
16306    //     count_value=50;
16307    // }
16308
16309    // Ticket group max: auto-assign remaining to parent before completeness check
16310    if (typeof validateAndEnforceTicketGroupMaxOnSubmit === 'function' && !validateAndEnforceTicketGroupMaxOnSubmit()) {
16311        return false;
16312    }
16313
16314    // Recalculate assignment count after possible auto-assign
16315    count_value = 0;
16316    groupEmailsArray = $("input[name='user_list[]']").map(function () {
16317        if ($(this).val()) {
16318            count_value++;
16319            var obj = jQuery.parseJSON($(this).val());
16320            if (obj.email) {
16321                return obj.email;
16322            } else {
16323                return;
16324            }
16325        }
16326    }).get();
16327    groupEmails = groupEmailsArray.join(",");
16328
16329    $("#group-error").remove();
16330    if (!$('.user-links').length == 0) {
16331        if (selected != null && (isTicket ? selected > 1 : selected >= 1)) {
16332            if (selected != count_value && selected !== undefined) {
16333                
16334                // console.log('$("#bypass_auto").length');
16335                // console.log($("#bypass_auto").length);
16336                if($("#bypass_auto").length == 0 && $("#bypass").length == 0){
16337                    if(isTicket){
16338                        if(isTicketTop){
16339                            $('.user_list').after('<label id="group-error" class="error" for="group" style="display: block; color: red;">Please assign below tickets to user</label>');
16340                        }else{
16341                            $('.packageBlock').after('<label id="group-error" class="error" for="group" style="display: block; color: red;">Please assign below tickets to user</label>');
16342                        }
16343
16344                    }else{
16345                        if (appId == 9185) {
16346                            $('.user_list').after('<label id="group-error" class="error" for="group" style="display: block; color: red;">Please add your spouse/partner details by clicking the button below - It is mandatory, if you wish to bring your spouse/partner to any of the events.</label>');
16347                        } else {
16348                            $('.user_list').after('<label id="group-error" class="error" for="group" style="display: block; color: red;">Secondary users are required, please add all Secondary user</label>');
16349                        }
16350                    }
16351
16352
16353
16354                return false;
16355                }
16356            }
16357        }
16358    }
16359
16360    
16361    return true;
16362}
16363
16364function checkAllAddonsAssigned() {
16365
16366    if(isTicket && isGroupRegistrationField){
16367        let remainingAddons= $('.packageBlock').attr("data-remaining-addons");
16368        if (remainingAddons != "") {
16369            if(isTicketTop){
16370                $('.user_list').after('<label id="group-error" class="error" for="group" style="display: block; color: red;">Please assign the remaining addons: ' + remainingAddons + '</label>');
16371            }else{
16372                $('.packageBlock').after('<label id="group-error" class="error" for="group" style="display: block; color: red;">Please assign the remaining addons: ' + remainingAddons + '</label>');
16373            }
16374
16375            return false;
16376        }
16377    }
16378
16379    
16380    return true;
16381}
16382
16383function escapeSelector(id) {
16384    return id.replace(/\[/g, '\\[').replace(/\]/g, '\\]');
16385}
16386        function shouldSkipValidation(inputField) {
16387            // Skip validation for hidden fields
16388            if (inputField.type === "hidden") {
16389                return true;
16390            }
16391            
16392            // Skip validation if parent form_field_grp is hidden
16393            const formFieldGrp = inputField.closest('.form_field_grp');
16394            if (formFieldGrp && formFieldGrp.style.display === 'none') {
16395                return true;
16396            }
16397
16398            // Skip if parent page-break-fields is hidden
16399            const parentField = inputField.closest('.page-break-fields');
16400            if (parentField && parentField.style.display === 'none') {
16401                return true;
16402            }
16403
16404            return false;
16405        }
16406        
16407        // Function to validate radio button group
16408        function validateRadioGroup(groupName, group, errorLabelId,PLEASE_SELECT_OPTION_MESSAGE, FIELD_REQUIRED_MESSAGE) {
16409            const isSelected = $(`input[name='${escapeSelector(groupName)}']:checked`).length > 0;
16410            if (!isSelected) {
16411                group.find('.error').remove();
16412                if (!group.find(`#${errorLabelId}`).length) {
16413                    group.append(`<label id="${errorLabelId}" class="error" for="${escapeSelector(groupName)}">${PLEASE_SELECT_OPTION_MESSAGE}</label>`);
16414                }
16415                return true;
16416            }
16417            $(`#${errorLabelId}`).remove();
16418            return false;
16419        }
16420
16421        // Function to validate checkbox group
16422        function validateCheckboxGroup(inputField, groupName, group, errorLabelId,PLEASE_SELECT_OPTION_MESSAGE, FIELD_REQUIRED_MESSAGE) {
16423            if (!inputField.required) return false;
16424            
16425            const isChecked = $(`input[name='${escapeSelector(groupName)}']:checked`).not('input[type="hidden"]').length > 0;
16426            if (!isChecked) {
16427                group.find('.error').remove();
16428                if (!group.find(`#${errorLabelId}`).length) {
16429                    group.append(`<label id="${errorLabelId}" class="error" for="${escapeSelector(groupName)}" style="display:block; color: red;">${FIELD_REQUIRED_MESSAGE}</label>`);
16430                }
16431                return true;
16432            }
16433            $(`#${errorLabelId}`).remove();
16434            return false;
16435        }
16436
16437        // Function to validate individual field
16438        function validateIndividualField(inputField, field, errorLabelId, escapedFieldId,PLEASE_SELECT_OPTION_MESSAGE, FIELD_REQUIRED_MESSAGE) {
16439            const isInvalid = inputField.required && (
16440                inputField.value.trim() === "" || 
16441                (inputField.type === "checkbox" && !inputField.checked)
16442            );
16443
16444            if (isInvalid) {
16445                $(`#${errorLabelId}`).remove();
16446                if ($(`#${escapedFieldId}-error`).length > 0) {
16447                    $(`#${escapedFieldId}-error`).remove();
16448                }
16449                if (!field.find(`#${errorLabelId}`).length && field.length > 0) {
16450                    field.after(`<label id="${errorLabelId}" class="error" for="${escapedFieldId}">${FIELD_REQUIRED_MESSAGE}</label>`);
16451                }
16452                return true;
16453            }
16454            $(`#${errorLabelId}`).remove();
16455            return false;
16456        }
16457
16458    // simple page break form
16459    $(document).ready(function() {
16460        if($('#pagebreak-steps-simple-form').length >0 ) {
16461            var stepsArray =[];
16462            $('.page-break-fields').hide();
16463            $('.page-break-fields').parent().hide();
16464            if (stepsArray.length > 0) {
16465                $('.page-break-element-' + stepsArray[0]).parent().show();
16466                $('.page-break-element-' + stepsArray[0]).show();
16467                $('.page-break-element-' + stepsArray[0]).find('.searchable-select').each(function () {
16468                    window.initFormSelect2($(this), true);
16469                });
16470                var newContent = '<div id="uniqueContent" class="col-sm-12">' +
16471                    '<div class="pagebreak-btns">' +
16472                    '<button type="button" onclick="ShowFormFieldPageBreak(1)" class="btn primary">Next</button>' +
16473                    '</div>' +
16474                    '</div>';
16475                $('.page_break_form').append(newContent);
16476            }
16477        }
16478    });
16479    gStepNumber = 1;
16480    fromBackBtn = false;
16481    tcktModifiedFromBackBtn = false;
16482    function ShowFormFieldPageBreak(steps){
16483        
16484        if($('#pagebreak-steps-simple-form').length >0 ) {
16485            var stepsArray =[];
16486            let appId = 20550;
16487            let excluded_app_ids = [10001417];
16488            if(excluded_app_ids.includes(appId)){
16489                var stepsArray=['78932','78933'];
16490            }
16491            $("#LoadingBar").show();
16492        if(gStepNumber > steps){
16493            fromBackBtn = true;
16494        } else {
16495            fromBackBtn = false;
16496        }
16497        gStepNumber = steps;
16498            var error_count=false;
16499            var currentPageValidate = null;
16500            currentPageValidate = stepsArray[steps - 1];
16501            const PLEASE_SELECT_OPTION_MESSAGE = "Please select an option.";
16502            const FIELD_REQUIRED_MESSAGE = "This field is required.";
16503        // Select all input fields within the page-break element
16504    
16505        document.querySelectorAll(`.page-break-element-${currentPageValidate} input, .page-break-element-${currentPageValidate} select`).forEach(inputField => {
16506            if (shouldSkipValidation(inputField)) {
16507                return;
16508            }
16509
16510            if (inputField.id || inputField.name) {
16511                const escapedFieldId = inputField.id ? escapeSelector(inputField.id) : null;
16512                const field = escapedFieldId ? $(`#${escapedFieldId}`) : null;
16513                const groupName = inputField.name;
16514                const group = groupName ? $(`input[name='${escapeSelector(groupName)}']`).closest(".form_field_grp") : null;
16515                const errorLabelId = groupName ? `${groupName.replace(/\[|\]/g, "")}-error` : `${escapedFieldId}-error`;
16516                if (inputField.type === "radio" && groupName) {
16517                    error_count = validateRadioGroup(groupName, group, errorLabelId, PLEASE_SELECT_OPTION_MESSAGE, FIELD_REQUIRED_MESSAGE) || error_count;
16518                }
16519                else if (inputField.type === "checkbox" && groupName) {
16520                    error_count = validateCheckboxGroup(inputField, groupName, group, errorLabelId, PLEASE_SELECT_OPTION_MESSAGE, FIELD_REQUIRED_MESSAGE) || error_count;
16521                }
16522                else {
16523                    error_count = validateIndividualField(inputField, field, errorLabelId, escapedFieldId, PLEASE_SELECT_OPTION_MESSAGE, FIELD_REQUIRED_MESSAGE) || error_count;
16524                }
16525            }
16526        });
16527
16528        if (error_count) {
16529            $("#LoadingBar").hide();
16530            return false;
16531        }
16532            $("#LoadingBar").hide();
16533            $('.page-break-fields').hide();
16534            $('.page-break-fields').parent().hide();
16535            if (stepsArray.length > 0) {
16536                $('.page-break-element-' + stepsArray[steps]).parent().show();
16537                $('.page-break-element-' + stepsArray[steps]).show();
16538                $('.page-break-element-' + stepsArray[steps]).find('.searchable-select').each(function () {
16539                    window.initFormSelect2($(this), true);
16540                });
16541                if (steps == 0) {
16542                    var newContent = '<div id="uniqueContent" class="col-sm-12">' +
16543                        '<div class="pagebreak-btns">' +
16544                        '<button type="button" onclick="ShowFormFieldPageBreak(' + (steps + 1) + ')" class="btn primary">Next</button>' +
16545                        '</div>' +
16546                        '</div>';
16547                }else if(steps ==stepsArray.length - 1){
16548                    var newContent = '<div id="uniqueContent" class="col-sm-12">' +
16549                        '<div class="pagebreak-btns">' +
16550                        '<button type="button" onclick="ShowFormFieldPageBreak(' + (steps-1) + ')" class="btn">Back</button>' +
16551                        '</div>' +
16552                        '</div>';
16553                }
16554                else {
16555
16556                    var newContent = '<div id="uniqueContent" class="col-sm-12">' +
16557                        '<div class="pagebreak-btns">' +
16558                        '<button type="button" onclick="ShowFormFieldPageBreak(' + (steps - 1) + ')" class="btn">Back</button>' +
16559                        '<button type="button" onclick="ShowFormFieldPageBreak(' + (steps + 1) + ')" class="btn primary">Next</button>' +
16560                        '</div>' +
16561                        '</div>';
16562                }
16563                if ($('#uniqueContent').length > 0) {
16564                    $('#uniqueContent').replaceWith(newContent);
16565                }else{
16566                    $('.page_break_form').append(newContent);
16567                }
16568                steps=steps+1;
16569                document.querySelectorAll('.pagebreak-steps li').forEach((li, index) => {
16570                    if (index < steps - 1) li.className = 'visited';
16571                    else if (index === steps - 1) li.className = 'active';
16572                    else li.className = '';
16573                });
16574            }
16575            if(typeof ShowFormFieldPageBreakCallBack !== 'undefined'){
16576                ShowFormFieldPageBreakCallBack(steps);
16577            }
16578        }
16579
16580        if (!skipEmptyPageSimpleView(stepsArray, steps-1, fromBackBtn)) {
16581            return false;
16582        }
16583       
16584    }
16585
16586    function checkSimpleViewHasAtleastOneField($currentPage){
16587
16588        var hasAtleastOneField = false;
16589
16590        document.querySelectorAll(`.page-break-element-${$currentPage} input, .page-break-element-${$currentPage} select,.page-break-element-${$currentPage} p`).forEach(inputField => {
16591            // Skip validation for hidden fields
16592
16593            if (inputField.type === "hidden" || inputField.style.display === 'none') {
16594                return; // Skip hidden fields completely
16595            }
16596            const parentField = inputField.closest('.form_field_grp');
16597            if (parentField && parentField.style.display === 'none') {
16598                return; // Skip this field if the parent container is hidden
16599            }
16600            if (inputField.id || inputField.name) { // Ensure the input field has an ID or a name
16601
16602                hasAtleastOneField = true;
16603            }
16604        });
16605
16606        return hasAtleastOneField;
16607    }
16608
16609    function showPageBreakError() {
16610        if ($('.page-break-error-show').length) {
16611        $('.page-break-error-show').remove();
16612        }
16613
16614        // Correctly apply CSS to '.page_break_heading'
16615        $('.page_break_heading').css('color', 'black');
16616
16617        var errorIds = [];
16618        // Correctly select elements with 'has-error' but not 'valid'
16619        $('.has-error:not(.valid)').each(function() {
16620            var id = $(this).attr('id'); // Get the id of the element
16621            if (id) {
16622                errorIds.push(removeErrorSuffix(id)); // Apply suffix removal and add to array
16623
16624            }
16625        });
16626
16627        // Remove duplicates from error IDs and print them
16628        errorIds = removeDuplicates(errorIds);
16629
16630
16631        var labelIds = [];
16632        errorIds.forEach(function(id) {
16633            var forValue = $('label[for="' + id + '"]').attr('for');
16634            if (forValue) {
16635                var parentSpan = $('label[for="' + forValue + '"]').closest('span[class*="page-break-element"]');
16636                if (parentSpan.length) {
16637                    var classAttr = parentSpan.attr('class');
16638                    var match = classAttr.match(/page-break-element-(\d+)/);
16639                    if (match && match[1]) {
16640                        labelIds.push(match[1]); // Add the extracted number to the array
16641                    }
16642                }
16643            }
16644        });
16645
16646        // Remove duplicates from label IDs and apply CSS styling
16647        labelIds = removeDuplicates(labelIds);
16648        labelIds.forEach(function(id) {
16649            $('.label_' + id).css('color', '#F36531'); // Correct the syntax for applying CSS
16650            $('.label_' + id)
16651    .after('<span style="color:red;" class="page-break-error-show">missing information</span>');
16652
16653        });
16654    }
16655
16656    function removeErrorSuffix(inputString) {
16657        return inputString.split("-error")[0];
16658    }
16659
16660    function removeDuplicates(array) {
16661        let uniqueElements = [];
16662        let seenElements = {};
16663
16664        array.forEach(el => {
16665            if (!seenElements.hasOwnProperty(el)) {
16666                uniqueElements.push(el);
16667                seenElements[el] = true;
16668            }
16669        });
16670
16671        return uniqueElements;
16672    }
16673
16674    /**
16675     * Base64-encode the exact UTF-8 JSON signed by the server.
16676     * TextEncoder converts non-ASCII characters to bytes before btoa().
16677     */
16678    function encodeShuttlePaymentData(str) {
16679        try {
16680            var bytes = new TextEncoder().encode(str);
16681            var binary = '';
16682            for (var i = 0; i < bytes.length; i++) {
16683                binary += String.fromCharCode(bytes[i]);
16684            }
16685            return btoa(binary);
16686        } catch (e) {
16687            console.error('Unable to UTF-8/base64 encode Shuttle payment data.', e);
16688            return null;
16689        }
16690    }
16691
16692    /**
16693     * SECURITY: Generate shuttle signature server-side to protect secret keys
16694     * This function makes an AJAX call to the server to generate the signature
16695     * without exposing secret keys to the client-side
16696     */
16697    function generateSecureShuttleSignature(sharedKey, methodName, options, callback) {
16698        // CRITICAL FIX: Store the stringified options to ensure consistency
16699        var optionsString = JSON.stringify(options);
16700        
16701        $.ajax({
16702            url: '/en/shuttle/generateShuttleSignature',
16703            type: 'POST',
16704            data: {
16705                methodName: methodName,
16706                options: optionsString
16707            },
16708            dataType: 'json',
16709            success: function(response) {
16710                console.log('Shuttle signature response:', response);
16711                if (response.success) {
16712                    // Return both signature and normalized options
16713                    // This ensures the EXACT same string is used for both signature and data attribute
16714                    callback(response.signature, response.normalizedOptions);
16715                } else {
16716                    console.error('Server error generating signature:', response.error);
16717                    callback(null, null);
16718                }
16719            },
16720            error: function(xhr, status, error) {
16721                console.error('AJAX error generating signature:', error);
16722                console.error('Response text:', xhr.responseText);
16723                console.error('Status:', xhr.status);
16724                callback(null, null);
16725            }
16726        });
16727    }
16728
16729    // REMOVED: Old insecure generateSignature function that exposed secret keys
16730    // function generateSignature(sharedKey, secretKey, methodName, options) { ... }
16731
16732    function processShuttle(paymentResultForShuttle) {
16733        $("#LoadingBar").show();
16734        var user_id = paymentResultForShuttle.userId;
16735        var currency = paymentResultForShuttle.currency;
16736        var amount = paymentResultForShuttle.amount;
16737        var userType = paymentResultForShuttle.userType;
16738        var sharedKey = paymentResultForShuttle.shuttleSharedApiKey;
16739        // SECURITY: Secret key removed from client-side - will be handled server-side
16740        // var secretKey = paymentResultForShuttle.shuttleSecretApiKey;
16741        var instanceKey = paymentResultForShuttle.is_sandbox == 1 ? paymentResultForShuttle.sandbox_key : paymentResultForShuttle.live_instance_key;
16742
16743        // Safely get user data and trim whitespace to ensure consistency
16744        var firstName = $('input[name="first_name"]').length ? $('input[name="first_name"]').val().trim() : '';
16745        var lastName = $('input[name="last_name"]').length ? $('input[name="last_name"]').val().trim() : '';
16746        var email = $('input[name="email"]').length ? $('input[name="email"]').val().trim() : '';
16747        var phoneNumber = $('input[name="phone_number"]').length ? $('input[name="phone_number"]').val().trim() : '';
16748        var decodedUserId = user_id ? atob(user_id) : '';
16749
16750        // Avoid stacked buttons/containers on repeated submit
16751        $('#shuttle_button_pay, #payment_container, #shuttle_checkout_overlay').remove();
16752
16753        // Keep Shuttle's native MODEL modal UI (Checkout header + card form).
16754        // parent container stays in DOM for Shuttle; do not wrap in a custom overlay.
16755        var modalHTML = '<button type="button" id="shuttle_button_pay" style="display:none;">Pay Now</button>'
16756            + '<div id="payment_container" style="display:none;"></div>';
16757        document.body.insertAdjacentHTML('beforeend', modalHTML);
16758
16759        var success_url = 'form/processShuttleResponseSuccess/' + user_id + '/' + userType;
16760        var cancel_url = 'form/processShuttleResponseFailure';
16761                console.log("paymentResultForShuttle:");
16762        console.log(paymentResultForShuttle);
16763        console.log("success_url:" + success_url);
16764        console.log("cancel_url:" + cancel_url);
16765
16766        // MODEL = Shuttle's centered modal (original UI). disable_new_window keeps it on-page.
16767        let style = "MODEL";
16768        let disable_new_window = true;
16769        if (appId === 15017 || appId === 22682) {
16770            style = "INLINE";
16771            disable_new_window = false;
16772        }
16773
16774        var options = {
16775            instance_key: instanceKey,
16776            currency: currency,
16777            amount: amount,
16778            account: {
16779                "crm_key": decodedUserId,
16780                "first_name": firstName,
16781                "last_name": lastName,
16782                "email": email,
16783                "phone": phoneNumber
16784            },
16785            style: style,
16786            parent: "payment_container",
16787            title: "Checkout",
16788            checkout_text: "Payment of " + currency + " " + amount,
16789            success_url: success_url,
16790            cancel_url: cancel_url,
16791            disable_new_window: disable_new_window,
16792            default_logo_url: false,
16793            description: (paymentResultForShuttle.invoice_description || '').toString(),
16794            theme: (organizationId == 1733) ? {
16795                "headerBackground": "#FFFF00",
16796                "headerBorderBottom": "5px solid #FF0000",
16797                "baseBorderRadius": 50,
16798                "colorPrimaryBase": "#0000FF",
16799                "color": "#A52A2A",
16800                "fontSize": "36px"
16801            } : {
16802                "headerBackground": "yellow",
16803                "headerBorderBottom": "5px solid #f00",
16804                "baseBorderRadius": 50,
16805                "colorPrimaryBase": "#00f",
16806                "color": "brown",
16807                "fontSize": "36px"
16808            }
16809        };
16810        if (organizationId == 1733) {
16811            options.save_card = true;
16812            options.hide_save_card_toggle = true;
16813        }
16814
16815        console.log("Generating Shuttle signature with options:", options);
16816
16817        // CRITICAL FIX: Generate signature FIRST, then use normalized options
16818        // This ensures the EXACT same JSON string is used for both signature and data attribute
16819        generateSecureShuttleSignature(sharedKey, "doPayment", options, function(signature, normalizedOptions) {
16820            if (signature && normalizedOptions) {
16821                console.log("Signature generated successfully");
16822                console.log("Using normalized options for data attribute");
16823
16824                var encodedPayment = encodeShuttlePaymentData(normalizedOptions);
16825                if (!encodedPayment) {
16826                    console.error('Failed to base64-encode Shuttle payment options');
16827                    alert('Payment initialization failed. Please try again or contact support.');
16828                    $("#LoadingBar").hide();
16829                    return;
16830                }
16831
16832                // Only set attrs on the Shuttle pay button — never all page buttons
16833                var $shuttleBtn = $("#shuttle_button_pay");
16834                $shuttleBtn.attr("data-shuttle-payment", encodedPayment);
16835                $shuttleBtn.attr("data-shuttle-signature", signature);
16836
16837                Shuttle.bindButtons();
16838                if ($shuttleBtn[0] && typeof $shuttleBtn[0].click === 'function') {
16839                    $shuttleBtn[0].click();
16840                } else {
16841                    $shuttleBtn.trigger('click');
16842                }
16843                $("#LoadingBar").hide();
16844            } else {
16845                console.error('Failed to generate secure shuttle signature');
16846                alert('Payment initialization failed. Please try again or contact support.');
16847                $("#LoadingBar").hide();
16848            }
16849        });
16850
16851        window.addEventListener("message", function (e) {
16852            if (e.data && e.data.message === "PAYMENT_SUCCESS" && e.data.success === true) {
16853                var email = $('input[name="email"]').val();
16854
16855                if (email) {
16856                    $("#LoadingBar").show();
16857                    const activateUserByEmailURL = '/en/form/activateUserByEmail/';
16858                    var postData = {
16859                        email: email,
16860                        payment: e.data.payment ? JSON.stringify(e.data.payment) : ''
16861                    };
16862                    if (e.data.id) postData.payment_response = JSON.stringify({
16863                        id: e.data.id,
16864                        reference: e.data.reference,
16865                        gateway_status: e.data.gateway_status,
16866                        status: e.data.status,
16867                        transaction: e.data.transaction,
16868                        payment: e.data.payment
16869                    });
16870                    $.ajax({
16871                        url: activateUserByEmailURL,
16872                        type: 'POST',
16873                        data: postData,
16874                        dataType: 'json',
16875                        success: function(response) {
16876                            $("#LoadingBar").hide();
16877                            console.log('User activation response:', response);
16878                            if (response && response.status === true) {
16879                                // Optionally redirect or show success UI using response data
16880                            }
16881                        },
16882                        error: function(xhr, status, error) {
16883                            $("#LoadingBar").hide();
16884                            console.error('Error activating user:', error);
16885                        }
16886                    });
16887                }
16888            }
16889        });
16890    }
16891        var dependencyArr = [];
16892
16893    function ticketDependency() {
16894        var ticketPackagesForDep = null;
16895        if (typeof TicketPackages !== 'undefined' && TicketPackages) {
16896            ticketPackagesForDep = TicketPackages;
16897        }
16898        if (!ticketPackagesForDep && localStorage.getItem("TicketPackages")) {
16899            try {
16900                ticketPackagesForDep = JSON.parse(localStorage.getItem("TicketPackages"));
16901                if (typeof TicketPackages !== 'undefined') {
16902                    TicketPackages = ticketPackagesForDep;
16903                }
16904            } catch (e) {
16905                ticketPackagesForDep = null;
16906            }
16907        }
16908
16909        var dependecyList = [];
16910        if (dependencyArr) {
16911            $.each(dependencyArr, function (key, value) {
16912                var dependencyItem = {
16913                    child_id: value.child_id,
16914                    depen: []
16915                };
16916
16917                    $.each(value.depen, function (depKey, depValue) {
16918                        var parentConditions = [];
16919
16920                        $.each(depValue, function (index, depItem) {
16921                            var conditions = [];
16922
16923                            $.each(depItem.dependency, function (dIndex, dItem) {
16924                                if (depItem.input_type === 'ticket') {
16925
16926                                    if(enableV5ApiDiscount && isUpgradeDowngradeProfile && !isGroupRegistrationField){
16927                                        if(dItem.value){
16928                                            if ($('.package-block-' + dItem.value).is(':hidden')) {
16929                                                if($('#fld_' + value.child_id).val()){
16930                                                    $('#fld_' + value.child_id).val('').trigger("change");
16931                                                }
16932                                            }
16933                                        }
16934                                    
16935                                    }
16936                                    $('#grp_fld_' + value.child_id).parent().hide();
16937                                    conditions.push(dItem);
16938                                }
16939                            });
16940
16941                            if (conditions.length > 0) {
16942                                parentConditions.push({
16943                                    parent_id: depItem.parent_id,
16944                                    input_type: depItem.input_type,
16945                                    label: depItem.label,
16946                                    dependency: conditions
16947                                });
16948                            }
16949                        });
16950
16951                        if (parentConditions.length > 0) {
16952                            dependencyItem.depen.push(parentConditions);
16953                        }
16954                    });
16955
16956                    if (dependencyItem.depen.length > 0) {
16957                        dependecyList.push(dependencyItem);
16958                    }
16959                });
16960        }
16961        if(ticketPackagesForDep){
16962
16963        if (dependecyList.length > 0){
16964            $.each(dependecyList, function (key, value) {
16965                var conditions = 'if(';
16966                $.each(value.depen, function (depKey, depValue) {
16967                        var sign = '';
16968                        if (depValue.length > 1) {
16969                            sign = '&&';
16970                        } else {
16971                            sign = '||';
16972                        }
16973                        var lastChar = conditions.charAt(conditions.length - 1);
16974                        if (lastChar === ')') {
16975                            conditions += sign + '(';
16976                        } else {
16977                            conditions += '(';
16978                        }
16979                        $.each(depValue, function (index, depItem) {
16980                            $.each(depItem.dependency, function (dIndex, dItem) {
16981                                var keyExists = false;
16982                                var packageKey = dItem.value !== null && dItem.value !== undefined ? String(dItem.value) : '';
16983                                if (packageKey && ticketPackagesForDep.hasOwnProperty(packageKey)) {
16984                                    keyExists = true;
16985                                }
16986                                var lastChar = conditions.charAt(conditions.length - 1);
16987                                if (lastChar === '(') {
16988
16989                                } else {
16990                                    conditions += sign;
16991                                }
16992                                if (dItem.condition == '=') {
16993                                    if (keyExists) {
16994                                        conditions += true;
16995                                    } else {
16996                                        conditions += false;
16997                                    }
16998                                } else {
16999                                    if (keyExists) {
17000                                        conditions += false;
17001                                    } else {
17002                                        conditions += true;
17003                                    }
17004                                }
17005                            });
17006                        });
17007                        conditions += ' )';
17008
17009                });
17010
17011                    conditions += "){ $('#grp_fld_" + value.child_id + "').parent().show(); }else{ $('#grp_fld_" + value.child_id + "').parent().hide(); $('#grp_fld_" + value.child_id + "').find('input[type=\"text\"], input[type=\"number\"], input[type=\"email\"], input[type=\"file\"], select, textarea').val(''); }";
17012                    eval(conditions);
17013
17014            });
17015        }
17016        }
17017    }
17018
17019    if (typeof registerTicketPackagesPostMessageListener === 'function') {
17020        registerTicketPackagesPostMessageListener();
17021    }
17022
17023    
17024    
17025        function processTapPayment(paymentResultForTapPayment) {
17026        $("#LoadingBar").show();
17027        var amount = paymentResultForTapPayment.amount;
17028        var userId = paymentResultForTapPayment.userId;
17029        var userType = paymentResultForTapPayment.userType;
17030        jQuery.ajax({
17031            url: '/form/processTapPayResponse/',
17032            type: "POST",
17033            data: {
17034                amount: amount,
17035                userId: userId,
17036                userType: userType
17037            },
17038            success: function (response) {
17039                $("#LoadingBar").hide();
17040                response = eval('(' + response + ')');
17041                if (response.status == true) {
17042                    window.location.href = response.checkoutUrl;
17043                }
17044            },
17045            error: function (xhr, status, error) {
17046                console.error('Error processing payment:', error);
17047            }
17048        });
17049    }
17050    function processSnapPayment(paymentResultForSnapPayment) {
17051        $("#LoadingBar").show();
17052        var amount = paymentResultForSnapPayment.amount;
17053        var userId = paymentResultForSnapPayment.userId;
17054        var userType = paymentResultForSnapPayment.userType;
17055        var sessionId =paymentResultForSnapPayment.session_id;
17056        jQuery.ajax({
17057            url: '/form/processSnapPayResponse/',
17058            type: "POST",
17059            data: {
17060                amount: amount,
17061                userId: userId,
17062                userType: userType,
17063                sessionId : sessionId
17064            },
17065            success: function (response) {
17066                $("#LoadingBar").hide();
17067                response = eval('(' + response + ')');
17068                if (response.status == true) {
17069                    window.location.href = response.checkoutUrl;
17070                }
17071            },
17072            error: function (xhr, status, error) {
17073                console.error('Error processing payment:', error);
17074            }
17075        });
17076    }
17077
17078    
17079       function validateTicketPackages() {
17080        ticketpackages=TicketPackages;
17081        const packageKeys = Object.keys(ticketpackages);
17082        if (packageKeys.length > 1) {
17083            return true; // More than one package
17084        }
17085        if (packageKeys.length === 1) {
17086            const singlePackage = ticketpackages[packageKeys[0]];
17087            if (singlePackage.pkg_qty > 1) {
17088                return true; // Only one package, but quantity is greater than 1
17089            }
17090        }
17091        return false; // Only one package and quantity is 1
17092    }
17093
17094        const urlParams = new URLSearchParams(window.location.search);
17095    const disableEditProfile = urlParams.get('disableUpdate');
17096
17097    // If disableEditProfile parameter exists, hide the submit button
17098    if (disableEditProfile) {
17099        $(document).ready(function() {
17100            $('#submit').hide();
17101        });
17102    }
17103
17104
17105    
17106    var PackageDonationAmount=0;
17107    var PackageDonationAmountNotIncludeBookingFee=0;
17108    var PackageDonationArray=null;
17109    var taxAppliedUpgrade=0;
17110    var userDetailsEditTicket=null;
17111    var userDetailsEditDiscountAmount=0;
17112    var stripeConnectElement=false;
17113    var EditProfileDiscCode=null;
17114    var EditProfileDiscountAmount=null;
17115    var EditProfilePaymentMethodId=null;
17116    var multipleTicketPackageList=null;
17117    var multipleTicketPackageListOnly=null;
17118    var multipleTicketEdit = '';
17119    var notAllowMultileTicketSelection = '';
17120    var currencySymbol='$';
17121    var UpgradePackageAndAddonsOnly = '';
17122    var enableUpgradeOnlyPackageAddons = '';
17123    var enableTicketUpgradeHidePurchasePackage = '';
17124    var enableTicketUpgradeRestrictQty = '';
17125    var enableTicketUpgradeShowHigher = '';
17126    var enableTicketUpgradeChangePurchaseTicket = '';
17127    var enableTicketUpgradeRestrictAddonsQty = '';
17128    var enableTicketUpgradeRestrictAddonsQtyNumber = '';
17129    var enableTicketUpgradeShowPurchasePackage = '';
17130    var enableTicketUpgradeHideUserEdit = '';
17131    var byPassGroupMember = '';
17132    var selectedPkgUpgradeDowngrade = '';
17133    var checkSingleTicketSelection = '';
17134    var enableTicketUpgradeShowDiscount = '';
17135    var isUniqueEmail = '0';
17136
17137    var UpgradePackageAndAddonsOnlyTimeout=false;
17138    var upgradeProfileBookingFeeAmount=0;
17139    var upgradeProfileBookingFeeTax=0;
17140    var BookingFeeAmountUpgradeTax=true;
17141    var paymentDataUpgrade=null;
17142    var upgradeDowngradeUserId=null;
17143    var upgradeDowngradeAppId=null;
17144    var upgradeDowngradePaymentMethodDetailId=null;
17145    var isUpgradeDowngradeForAPI=false;
17146    var isRegistrationForm = true;
17147    var isUpgradeDowngradeProfile = "";
17148 
17149    if(multipleTicketEdit) {
17150
17151        var packageListforUpgradeOnly=[];
17152        $(window).on('load', function () {
17153               var checkGroupRegistration=false;
17154              if(checkSingleTicketSelection && parseInt(enableTicketUpgradeHidePurchasePackage) =='1' & selectedPkgUpgradeDowngrade.trim() !== ""){
17155                  checkGroupRegistration =true;
17156              }else{
17157                  isUpgradeDowngradeForAPI =true;
17158                  UpgradeProfile(() => {
17159                        // new e request
17160                      $("#LoadingBar").show();
17161                      if(isUpgradeDowngradeForAPI && enableV5ApiDiscount) {
17162                          // Handle discount code
17163                          EditProfileDiscCode = (EditProfileDiscCode === undefined || EditProfileDiscCode === "undefined") ? "" : EditProfileDiscCode;
17164                          
17165                          if(EditProfileDiscCode !== null) {
17166                              Object.assign(TicketPackages, {
17167                                  discountCode: EditProfileDiscCode,
17168                                  discountCodeStatusSuccessText: "Promo code is applied",
17169                                  discountCodeStatusErrorText: "Invalid Discount Code Entered",
17170                                  discountPriceText: 'Your Discounted price is '
17171                              });
17172                          }
17173
17174                          // Set payment method if available
17175                          if(upgradeDowngradePaymentMethodDetailId !== null) {
17176                              TicketPackages['paymentMethodId'] = upgradeDowngradePaymentMethodDetailId;
17177                          }
17178                          TicketPackages['isUpgradeDowngradeProfile'] = (isUpgradeDowngradeProfile !== null && isUpgradeDowngradeProfile !== '' && (isUpgradeDowngradeProfile == 1 || isUpgradeDowngradeProfile == "1")) ? "1" : "0";
17179
17180                          syncEditProfilePackageQuantitiesFromPaymentPackages10002912(multipleTicketPackageListOnly);
17181                          paymentSummaryObject.getPaymentSummaryDetails(TicketPackages);
17182                          isUpgradeDowngradeForAPI = false;
17183                      }
17184
17185                      if(enableV5ApiDiscount) {
17186                          upgradeDowngradeObject.showHidePackageOnUpgradeDowngrade(
17187                              selectedPkgUpgradeDowngrade,
17188                              multipleTicketPackageListOnly,
17189                              enableTicketUpgradeShowHigher,
17190                              0,
17191                              enableTicketUpgradeHidePurchasePackage,
17192                              enableTicketUpgradeRestrictAddonsQty,
17193                              enableTicketUpgradeShowPurchasePackage
17194                          );
17195                          if(typeof enableTicketUpgradeShowDiscount !== 'undefined' && enableTicketUpgradeShowDiscount !='0'){
17196                            upgradeDowngradeObject.showHideDiscountOnUpgradeDowngrade()
17197                            console.log("enableTicketUpgradeShowDiscount END 0");
17198                           
17199                        }
17200                        console.log("enableTicketUpgradeShowDiscount END");
17201                        setTimeout(function () {
17202                            $('#spinner').remove();
17203                            $('body').css('filter', ''); // remove blur
17204                        }, 3000);
17205                      }
17206                      
17207                      $("#LoadingBar").hide();
17208
17209                    });
17210              }
17211
17212
17213            if(enableV5ApiDiscount){
17214               $("#LoadingBar").show();
17215                  var upgradeDowngradeObject = new UpgradeDowngradeClass("https://www.codeseccon.com/rest/v5/registration/paymentSummary/upgradeDowngrade/getAmountPaid");
17216                     if(checkGroupRegistration !=true){
17217                       upgradeDowngradeObject.getUpgradeDowngradeUserData(upgradeDowngradeUserId,upgradeDowngradeAppId);
17218                     }
17219                // Wait for packages data to load before showing/hiding packages for upgrade/downgrade
17220                setTimeout(function() {
17221                    // Show or hide packages based on upgrade/downgrade settings
17222                    upgradeDowngradeObject.showHidePackageOnUpgradeDowngrade(
17223                        selectedPkgUpgradeDowngrade,
17224                        multipleTicketPackageListOnly,
17225                        enableTicketUpgradeShowHigher,
17226                        0,
17227                        enableTicketUpgradeHidePurchasePackage
17228                    );
17229                    $("#LoadingBar").hide();
17230
17231                }, 5000);
17232
17233                }
17234            if(UpgradePackageAndAddonsOnly || enableUpgradeOnlyPackageAddons){
17235                    setTimeout(function() {
17236
17237                    if(UpgradePackageAndAddonsOnly){
17238                        $("#LoadingBar").show();
17239                        $("#LoadingBar").hide();
17240                        CheckAddonsQtyPackageQtyUpgradeHigher(true);
17241                        UpgradePackageAndAddonsOnlyTimeout=true;
17242                    }
17243                    if(enableUpgradeOnlyPackageAddons){
17244                        $("#LoadingBar").show();
17245                        $("#LoadingBar").hide();
17246                        CheckAddonsQtyPackageQtyUpgradeHigher(false);
17247
17248                    }
17249                        $("#LoadingBar").hide();
17250                    },13000);
17251            }else{
17252                   $("#LoadingBar").hide();
17253            }
17254        });
17255    }
17256
17257    var globalPackagesAndAddonsData = null;
17258    var enableSoldOutOwnedEditProfile3850 = false;
17259    var enableExpiredOwnedEditProfile10003110 = false;
17260    var appID = 20550;
17261    var editProfileUserId = 0;
17262    function shouldCaptureUpgradeProfilePackageControls() {
17263        if (enableExpiredOwnedEditProfile10003110 && window.location.href.indexOf('editProfileV2') !== -1) {
17264            return true;
17265        }
17266        return appID === 21406 || (appID === 10002912 && editProfileUserId === 638206992);
17267    }
17268    function applyEditProfilePackageQuantity10002912(packageId, targetQty) {
17269        if (appID !== 10002912) {
17270            return;
17271        }
17272        targetQty = parseInt(targetQty, 10) || 0;
17273        if (targetQty <= 0 || isNaN(parseFloat(packageId)) || !isFinite(packageId)) {
17274            return;
17275        }
17276        var $packageBlock = $('.package-block-' + packageId);
17277        if (!$packageBlock.length) {
17278            return;
17279        }
17280        var $qtyInput = $packageBlock.find('.qty_package');
17281        var currentQty = parseInt($qtyInput.val(), 10) || 0;
17282        if (currentQty === 0) {
17283            var $packBtn = $packageBlock.find('.ticketSelbtn.pack' + packageId);
17284            if ($packBtn.length) {
17285                $packBtn.trigger('click');
17286                currentQty = parseInt($qtyInput.val(), 10) || 0;
17287            }
17288        }
17289        if (currentQty !== targetQty) {
17290            $qtyInput.val(targetQty);
17291        }
17292        var $totalPriceEl = $packageBlock.find('.total__price');
17293        if (!TicketPackages[packageId]) {
17294            TicketPackages[packageId] = {};
17295        }
17296        TicketPackages[packageId].pkg_price = $totalPriceEl.data('pkgprice');
17297        TicketPackages[packageId].total_price = $totalPriceEl.data('price');
17298        TicketPackages[packageId].tax = $totalPriceEl.data('tax');
17299        TicketPackages[packageId].pkg_qty = targetQty;
17300        TicketPackages[packageId].pkgTaxAmount = $totalPriceEl.data('pkg_tax_amount');
17301        TicketPackages[packageId].isTaxInclusive = $totalPriceEl.data('is_tax_inclusive');
17302        TicketPackages[packageId].inclusiveTaxValue = $totalPriceEl.data('inclusive_tax');
17303        TicketPackages[packageId].inclusiveTaxPrice = $totalPriceEl.data('inclusive_tax_price');
17304        TicketPackages[packageId].isDonation = $totalPriceEl.data('is_donation');
17305        TicketPackages[packageId].applyBookingFeeToDonation = $totalPriceEl.data('apply_booking_fee_to_donation');
17306    }
17307    function buildEditProfilePackageQuantitiesFromPaymentPackages10002912(paymentPackages) {
17308        var packageQuantities = {};
17309        if (appID !== 10002912 || !paymentPackages || typeof paymentPackages !== 'object') {
17310            return packageQuantities;
17311        }
17312        $.each(paymentPackages, function (email, packages) {
17313            if (!packages || typeof packages !== 'object') {
17314                return;
17315            }
17316            $.each(packages, function (packageId, packageDetails) {
17317                if (isNaN(parseFloat(packageId)) || !isFinite(packageId)) {
17318                    return;
17319                }
17320                if (!packageQuantities[packageId]) {
17321                    packageQuantities[packageId] = 0;
17322                }
17323                packageQuantities[packageId] += parseInt(packageDetails.package_qty, 10) || 0;
17324            });
17325        });
17326        return packageQuantities;
17327    }
17328    function syncEditProfilePackageQuantitiesFromPaymentPackages10002912(paymentPackages) {
17329        if (appID !== 10002912) {
17330            return;
17331        }
17332        var packageQuantities = buildEditProfilePackageQuantitiesFromPaymentPackages10002912(paymentPackages);
17333        $.each(packageQuantities, function (packageId, qty) {
17334            applyEditProfilePackageQuantity10002912(packageId, qty);
17335        });
17336    }
17337    function syncEditProfilePackageQuantityFromPayment(packageId, targetQty) {
17338        if (!enableExpiredOwnedEditProfile10003110) {
17339            return;
17340        }
17341        targetQty = parseInt(targetQty, 10) || 0;
17342        if (targetQty <= 0 || isNaN(parseFloat(packageId)) || !isFinite(packageId)) {
17343            return;
17344        }
17345        var $packageBlock = $('.package-block-' + packageId);
17346        if (!$packageBlock.length) {
17347            return;
17348        }
17349        var $qtyInput = $packageBlock.find('.qty_package');
17350        var currentQty = parseInt($qtyInput.val(), 10) || 0;
17351        if (currentQty === targetQty) {
17352            if (TicketPackages[packageId]) {
17353                TicketPackages[packageId].pkg_qty = targetQty;
17354            }
17355            return;
17356        }
17357        if (currentQty === 0) {
17358            var $packBtn = $packageBlock.find('.ticketSelbtn.pack' + packageId);
17359            if ($packBtn.length) {
17360                $packBtn.trigger('click');
17361            }
17362        }
17363        $qtyInput.val(targetQty);
17364        var $totalPriceEl = $packageBlock.find('.total__price');
17365        if (!TicketPackages[packageId]) {
17366            TicketPackages[packageId] = {};
17367        }
17368        TicketPackages[packageId].pkg_price = $totalPriceEl.data('pkgprice');
17369        TicketPackages[packageId].total_price = $totalPriceEl.data('price');
17370        TicketPackages[packageId].tax = $totalPriceEl.data('tax');
17371        TicketPackages[packageId].pkg_qty = targetQty;
17372        TicketPackages[packageId].pkgTaxAmount = $totalPriceEl.data('pkg_tax_amount');
17373        TicketPackages[packageId].isTaxInclusive = $totalPriceEl.data('is_tax_inclusive');
17374        TicketPackages[packageId].inclusiveTaxValue = $totalPriceEl.data('inclusive_tax');
17375        TicketPackages[packageId].inclusiveTaxPrice = $totalPriceEl.data('inclusive_tax_price');
17376        TicketPackages[packageId].isDonation = $totalPriceEl.data('is_donation');
17377        TicketPackages[packageId].applyBookingFeeToDonation = $totalPriceEl.data('apply_booking_fee_to_donation');
17378    }
17379    function editProfileGroupRegNeedsRebuild(packageQuantities) {
17380        if (!enableExpiredOwnedEditProfile10003110 || !userDetailsEditTicket || !packageQuantities) {
17381            return false;
17382        }
17383        var needsRebuild = false;
17384        $.each(packageQuantities, function (packageId, expectedQty) {
17385            if (isNaN(parseFloat(packageId)) || !isFinite(packageId)) {
17386                return;
17387            }
17388            var $head = $('#packageContainerBlock' + packageId + ' .packageContainer__head');
17389            if (!$head.length) {
17390                needsRebuild = true;
17391                return false;
17392            }
17393            var oriTotal = parseInt($head.attr('data-ori-total'), 10) || 0;
17394            if (oriTotal !== parseInt(expectedQty, 10)) {
17395                needsRebuild = true;
17396                return false;
17397            }
17398        });
17399        return needsRebuild;
17400    }
17401    function lockEditProfileExpiredOwnedPackageControls() {
17402        if (!enableExpiredOwnedEditProfile10003110) {
17403            return;
17404        }
17405        $('[data-expired-owned-lock="1"]').each(function () {
17406            $(this).find('.qty-plus, .qty-minus').prop('disabled', true).css({opacity: '0.6', cursor: 'not-allowed'});
17407            $(this).find('.ticketSelbtn').addClass('disabled').css({opacity: '0.6', 'pointer-events': 'none'}).attr('aria-disabled', 'true');
17408        });
17409    }
17410    function UpgradeProfile(callback) {
17411        if (shouldCaptureUpgradeProfilePackageControls()) {
17412             captureAndEnableUpgradeProfilePackageControls();
17413        }
17414        // Check if the URL contains 'editProfileV2'
17415        if (window.location.href.indexOf('editProfileV2') !== -1) {
17416            $('.coupncode button[type="submit"]').remove();
17417            $("#LoadingBar").show();
17418            var responsePayment = '';
17419            var paymentData = JSON.parse(responsePayment);
17420            
17421            /* VFC-23245 Addon issue on upgrade downgrade */
17422            if (paymentData.packages) {
17423                let addonQuantitiesList = {}
17424                $.each(paymentData.packages, function (email, packages) {
17425                    
17426                    $.each(packages, function (packageId, packageDetails) {
17427                        
17428                        addonQuantitiesList[packageId] = {};
17429                        
17430                        if (packageDetails.field_addons) {
17431                            $.each(packageDetails.field_addons, function (itr, addonId) {
17432                                
17433                                if (!addonQuantitiesList[packageId][addonId]) {
17434                                    addonQuantitiesList[packageId][addonId] = 0;
17435                                }
17436                                
17437                                let maxLimit = $('.ticket__addon .qty-plus[data-addons="' + addonId + '"][data-id="' + packageId + '"]').attr('data-addons-limit');
17438                                
17439                                if (maxLimit == 0) {
17440                                    $('.ticket__addon .qty-plus[data-addons="' + addonId + '"][data-id="' + packageId + '"]').hide();
17441                                }
17442
17443                                maxLimit++;
17444                                $('.ticket__addon .qty-plus[data-addons="' + addonId + '"][data-id="' + packageId + '"]').attr('data-addons-limit', maxLimit);
17445                            });
17446                        }
17447                    });
17448                });
17449            }
17450            
17451            $('.ticket__addon .qty-plus[data-addons-limit="0"]').closest('.ticket__addon__item').remove();
17452            
17453            paymentDataUpgrade = JSON.parse(responsePayment);
17454            console.log('paymentData');
17455            console.log(paymentData);
17456
17457            if (enableV5EnhanceAvailabilityApi) {
17458                globalPackagesAndAddonsData = paymentData;
17459                let enhanceAvailApiPostData = {"packages":[],"appId":"20550"};
17460                
17461                enhancedTicketAvailabilityObject.getPackageAndAddonCountForUpgradeDowngrade(enhanceAvailApiPostData, paymentData);
17462            }
17463            
17464             upgradeDowngradeUserId=paymentData.userId;
17465             upgradeDowngradeAppId=paymentData.appId;
17466            EditProfileDiscountAmount = paymentData.discount_amount_val;
17467           upgradeDowngradePaymentMethodDetailId=paymentData.payment_method_detail_id;
17468            EditProfileDiscCode = paymentData.disc_code;
17469            multipleTicketPackageList = paymentData.userDetailsEditTicket;
17470            multipleTicketPackageListOnly = paymentData.packages;
17471            var totalAmount = paymentData.amount;
17472            if (paymentData.calAmount) {
17473                totalAmount = paymentData.calAmount;
17474            }
17475            if (paymentData.stripeConnectElement && paymentData.stripeConnectElement == 1) {
17476                stripeConnectElement = true;
17477            }
17478             var previousAmount = paymentData.previous_amount;
17479            currencySymbol = paymentData.symbol;
17480            EditProfilePaymentMethodId = paymentData.payment_method_id;
17481
17482
17483            $("#LoadingBar").show();
17484            var responsePayment = '';
17485            try {
17486            var paymentData = JSON.parse(responsePayment);
17487            console.log(paymentData);
17488            } catch (e) {
17489                console.error("Error parsing JSON:", e.message);
17490            }
17491            console.log('paymentData');
17492            console.log(paymentData);
17493
17494            localStorage.setItem('paymentData', JSON.stringify(paymentData));            
17495            EditProfileDiscountAmount = paymentData.discount_amount_val;
17496            taxAppliedUpgrade=paymentData.taxApplied;
17497            EditProfileDiscCode = paymentData.disc_code;
17498            var totalAmount = paymentData.amount;
17499            if(paymentData.calAmount){
17500                totalAmount = paymentData.calAmount;
17501            }
17502            if(paymentData.stripeConnectElement && paymentData.stripeConnectElement ==1){
17503                stripeConnectElement=true;
17504            }
17505            var previousAmount = paymentData.previous_amount;
17506            
17507            
17508            var currencySymbol = paymentData.symbol;
17509            EditProfilePaymentMethodId = paymentData.payment_method_id;
17510
17511            userDetailsEditTicket = paymentData.userDetailsEditTicket;
17512
17513
17514             // delay in milliseconds
17515            $('.is_ticket_show_payment_details').hide();
17516            // Track package quantities across different emails
17517            var packageQuantities = {};
17518            var delay = 100;
17519            var promises = [];
17520            // First pass to accumulate package quantities
17521            $.each(paymentData.packages, function (email, packages) {
17522                $.each(packages, function (packageId, packageDetails) {
17523                     if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
17524                    if (!packageQuantities[packageId]) {
17525                        packageQuantities[packageId] = 0;
17526                    }
17527                    packageQuantities[packageId] += packageDetails.package_qty;
17528                    var savedPackage = localStorage.getItem("savedPackage");
17529                    var packageContainer = $('#packageContainerBlock' + packageId, window.parent.document);
17530                    }
17531                });
17532            });
17533            //new
17534
17535            $.each(paymentData.packages, function (email, packages) {
17536                $.each(packages, function (packageId, packageDetails) {
17537                    if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
17538                      let taskPromise = new Promise(function (resolve, reject) {
17539                          try{
17540                        packageListforUpgradeOnly[packageId] = [];
17541                        setTimeout(function () {
17542                            var $element = $('.pack' + packageId);
17543                            if ($element.length > 0) {
17544                                $element.trigger('click');
17545
17546                            }
17547
17548                            // If total package quantity is greater than 1, click the qty-plus button
17549                            if (packageQuantities[packageId] > 1) {
17550                                var qty = packageQuantities[packageId] - 1;
17551                                for (var i = 0; i < qty; i++) {
17552                                    // setTimeout(function () {
17553                                    var $qtyPlusElement = $('.qty-plus[data-id="' + packageId + '"]');
17554                                    if ($qtyPlusElement.length > 0) {
17555                                        $qtyPlusElement.trigger('click');
17556
17557                                    }
17558                                    // }, i * 100); // delay increased for each click
17559                                }
17560                            }
17561                            if (enableExpiredOwnedEditProfile10003110) {
17562                                syncEditProfilePackageQuantityFromPayment(packageId, packageQuantities[packageId]);
17563                            }
17564                            if (appID === 10002912) {
17565                                applyEditProfilePackageQuantity10002912(packageId, packageQuantities[packageId]);
17566                            }
17567                            // Click addon buttons based on their existence
17568
17569                            setTimeout(function () {
17570                                if (packageDetails.field_addons) {
17571
17572                                    $.each(packageDetails.field_addons, function (index, addonId) {
17573                                        packageListforUpgradeOnly[packageId].push(addonId);
17574                                        var $addonButtonClass = $('.addons_item_' + addonId + '_' + packageId);
17575                                        var $selectCounterElement = $('.selectCounter_' + addonId + '_' + packageId);
17576                                        // Check if the selectCounterElement exists and its display property
17577                                        if ($selectCounterElement.length > 0 && $selectCounterElement.css('display') === 'none') {
17578                                            // If the selectCounterElement is hidden, we should try clicking the addonBtn directly
17579                                            var $addonButton = $('.addonBtn[data-addons="' + addonId + '"][data-id="' + packageId + '"]');
17580                                            if ($addonButton.length > 0) {
17581                                                $addonButton.trigger('click');
17582                                            }
17583                                        } else {
17584                                            // If selectCounterElement is visible or doesn't exist, click the addonButtonClass
17585                                            if ($addonButtonClass.length > 0) {
17586                                                $addonButtonClass.trigger('click');
17587                                            }
17588                                        }
17589                                    });
17590                                }
17591                            }, delay + 200);
17592                           resolve();
17593
17594                        }, delay);
17595                        delay += 700; // increment delay for the next package click
17596                        }catch (e) {
17597                              resolve();
17598                                }
17599                        });
17600                      promises.push(taskPromise); // Add the task promise to the array
17601                    }
17602                });
17603            });
17604              // After all promises are finished, call the callback
17605       var checkPromis=true;
17606        Promise.all(promises).then(function() {
17607            if (appID === 10002912) {
17608                syncEditProfilePackageQuantitiesFromPaymentPackages10002912(paymentData.packages);
17609            }
17610            if (enableExpiredOwnedEditProfile10003110) {
17611                $.each(packageQuantities, function (packageId, qty) {
17612                    syncEditProfilePackageQuantityFromPayment(packageId, qty);
17613                });
17614                if (editProfileGroupRegNeedsRebuild(packageQuantities)) {
17615                    $('.packageBlock').html('');
17616                    if (typeof window.orderNowProcessing !== 'undefined') {
17617                        window.orderNowProcessing = false;
17618                    }
17619                    var $orderNowBtn = $('.order-now-button:visible, .order-now-button1:visible').first();
17620                    if ($orderNowBtn.length) {
17621                        $orderNowBtn.trigger('click');
17622                    }
17623                }
17624                lockEditProfileExpiredOwnedPackageControls();
17625            }
17626            // App 3850 only: edit profile sold-out-but-purchased — lock qty after restoring selection/totals
17627            if (enableSoldOutOwnedEditProfile3850) {
17628                $('[data-sold-out-owned-lock="1"]').each(function () {
17629                    $(this).find('.qty-plus, .qty-minus').prop('disabled', true).css({opacity: '0.6', cursor: 'not-allowed'});
17630                });
17631                if (typeof updateDifferentialAmount === 'function') {
17632                    updateDifferentialAmount(parseFloat(totalAmount), parseFloat(previousAmount));
17633                }
17634            }
17635            // Once all tasks are completed, call the callback function
17636            if (typeof callback === "function" && checkPromis) {
17637                callback();
17638                checkPromis=false;
17639            }
17640        }).finally(function () {
17641            if (shouldCaptureUpgradeProfilePackageControls()) {
17642                 restoreUpgradeProfilePackageControlsState();
17643            }
17644            if (enableExpiredOwnedEditProfile10003110) {
17645                lockEditProfileExpiredOwnedPackageControls();
17646            }
17647        });
17648            //new
17649            var newHtml = '<span data-total="pending_amount" tabindex="0" id="pending_amount"></span>';
17650            $('.totalcountT').append(newHtml);
17651            $("#LoadingBar").show();
17652            updateTotalAmount(EditProfileDiscCode, EditProfileDiscountAmount);
17653
17654            // var bookingFeeAmount = 0;
17655            if (paymentData.bookingFeeAmount) {
17656                // bookingFeeAmount += paymentData.bookingFeeAmount;
17657                // upgradeProfileBookingFeeAmount = bookingFeeAmount;
17658                // totalAmount -= paymentData.bookingFeeAmount;
17659            }
17660            if (paymentData.bookingFeeTax) {
17661                // bookingFeeAmount += paymentData.bookingFeeTax;
17662                // upgradeProfileBookingFeeTax = paymentData.bookingFeeTax;
17663                // totalAmount -= paymentData.bookingFeeTax;
17664            }
17665        
17666            if(enableV5ApiDiscount == 0){
17667                   setInterval(function () {
17668                updateDifferentialAmount(parseFloat(totalAmount), parseFloat(previousAmount)); // , bookingFeeAmount
17669            }, 100);
17670            }
17671           
17672
17673        }
17674        if (multipleTicketEdit && ((UpgradePackageAndAddonsOnly && !notAllowMultileTicketSelection) || enableUpgradeOnlyPackageAddons)) {
17675            var counter = 0;  // Initialize a counter
17676            var intervalId = setInterval(function () {
17677                var allHidden = true;  // Flag to track if all elements have been hidden
17678                packageListforUpgradeOnly.forEach(function (item, index) {
17679                    var buttonElement = $('button.qty-minus[data-id="' + index + '"]');
17680                    if (buttonElement.length) {
17681                        buttonElement.hide();
17682                        $('.package_' + index).hide();
17683                    }
17684                });
17685
17686                counter++;
17687                // Stop the interval if all buttons are hidden or the counter reaches 3
17688                if ( counter >= 50 ) {
17689                    clearInterval(intervalId);
17690                }
17691            }, 100);
17692        }
17693
17694
17695    }
17696    function updateDifferentialAmount(totalAmount, previousAmount, bookingFeeAmount=0) {
17697        var totalElement = document.querySelector('.totalcountT p[data-total]');
17698        if (totalElement) {
17699            var totalText = totalElement.textContent;
17700
17701            var totalNumber =parseFloat(totalText.replace(/[^0-9.]/g, ''));
17702            if(paymentDataUpgrade){
17703            // if(BookingFeeAmountUpgradeTax){
17704                if(paymentDataUpgrade.bookingFeeAmount){
17705                    totalNumber=totalNumber+paymentDataUpgrade.bookingFeeAmount;
17706                }
17707                if(paymentDataUpgrade.bookingFeeTax){
17708                    totalNumber=totalNumber+paymentDataUpgrade.bookingFeeTax ;
17709                }
17710           
17711            
17712             //    BookingFeeAmountUpgradeTax=false;
17713             // }
17714            }
17715            
17716            // totalNumber += bookingFeeAmount;
17717            var differentialAmount = (totalNumber - (totalAmount + previousAmount)).toFixed(1);
17718            $('#pending_amount').text('Pending Amount: ' + currencySymbol + '' + differentialAmount);
17719            $('.order__summary .price__item > div:nth-of-type(1) span').text(currencySymbol + '' + differentialAmount);
17720            $('.order__summary .price__item > div:nth-of-type(1) span').attr('data-subtotal', differentialAmount);
17721            if (EditProfileDiscountAmount !== null && EditProfileDiscountAmount !== 0 && EditProfileDiscountAmount > 0 && userDetailsEditDiscountAmount !=0) {
17722
17723                $('.order__summary > div.price__item >div:nth-of-type(2) > span').text(currencySymbol + '' + '0.00');
17724            }else{
17725                $('.order__summary > div.price__item >div:nth-of-type(2) > span').text(currencySymbol + '' + userDetailsEditDiscountAmount);
17726            }
17727
17728            $('.order__summary .price__item > div.total__price > span').text(currencySymbol + '' + differentialAmount);
17729
17730            if(differentialAmount <0){
17731                var refundAmount=differentialAmount;
17732                $('.order__summary .price__item > div:nth-of-type(1) span').text(currencySymbol + '' + '0.00');
17733                if ($(".refund_price").length === 0) {
17734                    $('.order__summary .price__item .pricing:last').after('<div class="refund_price pricing"><p tabindex="0">Refund</p><span></span></div>');
17735                }
17736                $('.refund_amount_multiple_edit').remove();
17737                if ($(".refund_amount_multiple_edit").length === 0) {
17738                    $(".ticketFormCol").before(`
17739                                    <div class="refund_amount_multiple_edit" style="padding: 4px;    text-align: center;">
17740                                        <span class="badge badge-warning" style="font-size: 16px;padding: 14px; border-radius: 2px; text-align: center;">
17741                                            Note: Please contact the admin for your <span class="refund_amount_edit"></span> refund
17742                                        </span>
17743                                    </div>
17744                                `);
17745                    // $('.order__summary > div.price__item >div:nth-of-type(3) > span').text(currencySymbol + '' + Math.abs(differentialAmount));
17746
17747                }
17748                $('.order__summary .price__item > div.refund_price > span').text(currencySymbol + '' + differentialAmount);
17749                $('.order__summary .price__item > div.total__price > span').text(currencySymbol + '' + differentialAmount);
17750                $('.refund_amount_edit').text(currencySymbol + '' + differentialAmount);
17751                $('.order__payment h6').hide();
17752                $('.payment__method').hide();
17753                // $('.packageBlock').css("visibility", "visible");
17754                // $(".ticketFormCol").hide();
17755            }else if(differentialAmount > 0){
17756                if($('.refund_price').length) {
17757                    $('.refund_price').remove();
17758                }
17759                if($('.refund_amount_multiple_edit').length) {
17760                    $('.refund_amount_multiple_edit').remove();
17761                }
17762                $('.order__payment h6').show();
17763                $('.payment__method').show();
17764                if (typeof paymentSummaryObject !== 'undefined' && typeof paymentSummaryObject.restorePaymentBoxChrome === 'function') {
17765                    paymentSummaryObject.restorePaymentBoxChrome();
17766                }
17767                $(".ticketFormCol").show();
17768            }else{
17769                if($('.refund_price').length) {
17770                    $('.refund_price').remove();
17771                }
17772                if($('.refund_amount_multiple_edit').length) {
17773                    $('.refund_amount_multiple_edit').remove();
17774                }
17775                $('.packageBlock').css("visibility", "visible");
17776                $('.group_registration_label').css("display", "block");
17777                $('.group-reg-block').css("height", "auto");
17778                $('.order__payment h6').hide();
17779                $('.payment__method').hide();
17780                if (typeof paymentSummaryObject !== 'undefined' && typeof paymentSummaryObject.stripPaymentBoxChrome === 'function') {
17781                    paymentSummaryObject.stripPaymentBoxChrome();
17782                }
17783                $(".ticketFormCol").show();
17784            }
17785        }
17786
17787    }
17788
17789    function updateTotalAmount(EditProfileDiscCode,EditProfileDiscountAmount) {
17790
17791        if (EditProfileDiscountAmount !== null && EditProfileDiscountAmount !== 0 && EditProfileDiscountAmount > 0) {
17792            $("#LoadingBar").show();
17793            setTimeout(function() {
17794                var inputField = $('.coupn-code-sec .form-control');
17795                inputField.val(EditProfileDiscCode);
17796                var applyButton = $('.cacl-disc');
17797                applyButton.trigger('click');
17798                $("#LoadingBar").hide();
17799            }, 2000);
17800
17801        }
17802    }
17803
17804
17805    if (window.addEventListener) {
17806        window.addEventListener("message", onMessage, false);        
17807    }  else if (window.attachEvent) {
17808        window.attachEvent("onmessage", onMessage, false);
17809    }
17810    function onMessage(event) {
17811        // Check sender origin to be trusted
17812        //if (event.origin !== "http://example.com") return;
17813
17814        var data = event.data;
17815
17816        if (typeof(window[data.func]) == "function") {
17817            window[data.func].call(null, data.message);
17818        }
17819    }
17820
17821    function reloadIFrame() {
17822        $('#floorPlanIframeDiv').show();
17823        $('.selected-seat').hide();
17824    }
17825
17826    // Function to be called from iframe
17827    function hideIFrame(message) {
17828        $('#floorPlanIframeDiv').hide();
17829        $('.seat-plan-seat-number').html(message.text);
17830        $('.selected-seat').show();
17831        $('#seat_plan_id').val(message.templateId);
17832        $('#seat_number').val(message.id);
17833        $('#seat_text').val(message.text);
17834    }
17835
17836    /**
17837     * Update Stripe Payment Intent Info before submitting the form
17838     *
17839     * @param number totalAmount
17840     * 
17841     * // VFC-17411 - add receiptEmail in payment intent for stripe Element
17842     *
17843     * @return void
17844     */
17845    function updateStripePaymentIntentInfoBeforeSubmit(totalAmount = 0)
17846    {
17847        let appId = 20550;
17848        let stripePaymentIntentId = '';
17849        let updatePaymentIntentUrl = "https://www.codeseccon.com/en/form/updatePaymentIntent";
17850
17851        let receiptEmail = '';
17852        let emailInputField = $('input[name="email"]');
17853        if($(emailInputField).val().trim() != ''){
17854            receiptEmail = $(emailInputField).val().trim();
17855        }
17856
17857        if('' == stripePaymentIntentId){
17858            let stripeElementContainer = $('body').find('.StripeElement');
17859            if($(stripeElementContainer).length > 0){
17860                stripePaymentIntentId = $('body').find('.StripeElement').attr('data-stripe_payment_intent_id');
17861            }
17862        }
17863
17864        jQuery.ajax({
17865            url: updatePaymentIntentUrl,
17866            data: {
17867                intent_id: stripePaymentIntentId,
17868                amount: totalAmount.toFixed(2),
17869                appID: appId,
17870                receiptEmail: receiptEmail
17871            },
17872            type: "POST",
17873            success: function (response) {
17874                // do nothing
17875            }
17876        });
17877
17878    }
17879    $(document).ready(function() {
17880        $('.showOrHideCustomerDetails').on('click', function() {
17881            $('#collapseOne').toggleClass('show');
17882            $('#collapseOne123').toggleClass('show');
17883        });
17884    });
17885     function getlastRecordID(){
17886        var lastFilledId = "";
17887        var nextId = "";
17888
17889        $('input[name="user_list[]"]').each(function (index, element) {
17890            var value = $(this).val();
17891
17892            // Check if the value is not empty or not null
17893            if (value && value !== "null" && value !== "") {
17894                lastFilledId = $(this).attr('id'); // Store the last non-empty field ID
17895            } else if (lastFilledId) {
17896                // If we already found the last filled ID, generate the next ID
17897                var currentId = $(this).attr('id');
17898                var idNumber = parseInt(currentId.match(/\d+$/)); // Extract numeric part of the ID
17899                nextId = idNumber; // Reconstruct the ID with "user"
17900                return false; // Exit loop after finding the next ID
17901            }
17902        });
17903        return nextId-1;
17904    }
17905
17906    function CheckAddonsQtyPackageQtyUpgradeHigher(check) {
17907
17908        $.each(multipleTicketPackageList, function (index, users) {
17909            let addonQuantities = {}; // Initialize addonQuantities for each package
17910
17911            // Loop through each user within the current package
17912            $.each(users, function (index2, user) {
17913                const addonsList = user.field_addons_qty; // Get the addons quantity object
17914
17915                if (addonsList) {
17916                    // Iterate over each addon in the addonsList
17917                    $.each(addonsList, function (addonKey, quantity) {
17918                        // Accumulate quantity for each addon in the addonQuantities object
17919                        if (addonQuantities[addonKey]) {
17920                            addonQuantities[addonKey] += quantity;
17921                        } else {
17922                            addonQuantities[addonKey] = quantity;
17923                        }
17924                    });
17925                }
17926            });
17927            // Show the package element based on the current index
17928            if (check) {
17929                $('.package_' + index).show();
17930            }
17931
17932
17933            // Check addon quantities against required quantities
17934            $.each(addonQuantities, function (addonKey, totalQuantity) {
17935                const addonQty = TicketPackages[index]?.[addonKey]?.['addons_qty']; // Get the required quantity
17936
17937                if (addonQty) {
17938                    // Compare the total quantity with the required quantity
17939                    if (parseFloat(addonQty) > totalQuantity) {
17940                        // Show the minus button if it exists
17941                        const minusButton = $('.addons_item_minus_' + addonKey + '_' + index);
17942                        if (minusButton.length) {
17943                            minusButton.show();
17944                        }
17945                    } else {
17946                        // Hide the minus button if the quantity condition is met
17947                        $('.addons_item_minus_' + addonKey + '_' + index).hide();
17948                    }
17949                }
17950            });
17951
17952            // Reset addonQuantities for the next package
17953            addonQuantities = {};
17954        });
17955    }
17956
17957    function setAssignUserData(newUserData, savePackageID) {
17958
17959
17960        if (newUserData != null) {
17961            var TicketPackages = localStorage.getItem("TicketPackages");
17962            TicketPackages = JSON.parse(TicketPackages);
17963            for (var key in TicketPackages) {
17964                if (key != savePackageID) {
17965                    // Target the correct package container
17966                    var packageContainerNew = $('#packageContainerBlock' + key, window.parent.document);
17967                    if (packageContainerNew.length > 0) {
17968                        // var dropdownMenuNew = packageContainerNew.find('.dropdown-menu');
17969                        var dropdownMenuNew = packageContainerNew.find('.packageContainer__head .dropdown-menu-main');
17970                        dropdownMenuNew.append(newUserData);
17971                    }
17972                }
17973            }
17974        }
17975    }
17976    function CalculateDonationPackageAmount() {
17977        let donationResults = {};
17978        let totalDonationPackageSum = 0;
17979        let totalDonationAddons = 0;
17980        PackageDonationAmountNotIncludeBookingFee=0;
17981        for (const packageId in TicketPackages) {
17982            if(!isNaN(parseFloat(packageId)) && isFinite(packageId)) {
17983                const pkg = TicketPackages[packageId];
17984                // Check if the package is a donation
17985                if (pkg.isDonation === 1) {
17986                    // Calculate donationPackageSum
17987                    const pkg_price = parseFloat(pkg.pkg_price) || 0;
17988                    const pkg_qty = parseInt(pkg.pkg_qty) || 0;
17989                    const donationPackageSum = pkg_price * pkg_qty;
17990                    // Initialize donationAddons total
17991                    let donationAddons = 0;
17992                    // Loop through addons (sub-objects) in the package
17993                    for (const addonId in pkg) {
17994                        const addon = pkg[addonId];
17995                        // Ensure addon has `addons_price` and `addons_qty` properties
17996                        if (addon && addon.hasOwnProperty('addons_price') && addon.hasOwnProperty('addons_qty')) {
17997                            const addons_price = parseFloat(addon.addons_price) || 0;
17998                            const addons_qty = parseInt(addon.addons_qty) || 0;
17999                            donationAddons += addons_price * addons_qty;
18000                        }
18001                    }
18002                    // Store results for this donation package
18003                    donationResults[packageId] = {
18004                        donationPackageSum,
18005                        donationAddons,
18006                        applyBookingFeeToDonation: pkg.applyBookingFeeToDonation,
18007                        isDonation: pkg.isDonation
18008                    };
18009                    if (pkg.applyBookingFeeToDonation == 0) {
18010                        PackageDonationAmountNotIncludeBookingFee += donationPackageSum + donationAddons;
18011                    }
18012                    // Accumulate totals
18013                    totalDonationPackageSum += donationPackageSum;
18014                    totalDonationAddons += donationAddons;
18015                }
18016            }
18017        }
18018        // Final results
18019        PackageDonationArray = donationResults;
18020        PackageDonationAmount = totalDonationPackageSum + totalDonationAddons;
18021        return true;
18022    }
18023
18024</script>
18024
18025
18026<!-- JIRA Ticket - VFC-19349 -->
18027<script type="text/javascript">
18028    /* Ticket: VFC-21255 */
18029    if (isRegistrationForm) {
18030
18031        $(document).ready(function(){
18032
18033            if (pageBreakSummaryCount > 0) {
18034                $(".is_ticket_show_payment_details").hide();
18035            }
18036        })
18037    }
18038</script>
18038
18039
18040
18041<script type="text/javascript">
18042/* Ticket: VFC-21254  */
18043
18044$(document).ready(function(){
18045
18046    var showChar = 148;
18047    var moreButtonText = "Read more";
18048    var lessButtonText = "Read less";
18049
18050    $('.ticketadd__desc__text p').each(function () {
18051
18052        var content = $(this).html();
18053
18054        if (content.length > showChar) {
18055
18056            var visibleText = content.substr(0, showChar);
18057            var hiddenText = content.substr(showChar, content.length - showChar);
18058
18059            var html = visibleText + '<span class="morecontent" style="display: none;"><span style="display: none;">' + hiddenText + '</span>&nbsp;&nbsp;</span>';
18060
18061            $(this).html(html);
18062        }else {
18063            $(this).next('.ticketadd__readmore').hide();
18064        }
18065    });
18066
18067    $(".ticketadd__readmore").click(function (e) {
18068        e.preventDefault();
18069        moreButtonText=  $(this).attr('data-rmore');
18070        lessButtonText=$(this).attr('data-rless');
18071        if ($(this).hasClass("less")) {
18072            $(this).removeClass("less");
18073            $(this).html(moreButtonText);
18074        } else {
18075            $(this).addClass("less");
18076            $(this).html(lessButtonText);
18077        }
18078        $(this).prev().find('span').toggle();
18079        return false;
18080    });
18081    // if(!multipleTicketEdit){
18082        var ticketTop= '';
18083        var pageBreakSteps= '0';
18084        if(ticketTop && pageBreakSteps ==0 && true){
18085            $('.both-block').prepend('<button type="button" class="backButtonRegisterUser" title="Going back will reset the information on this page. You will need to re-enter your details."><i style="top: 4px;" class="glyphicon glyphicon-arrow-left " >  </i>Back</button>');
18086            $('.backButtonRegisterUser').on('click', function () {
18087                $('.both-block').hide();
18088                $('.ev__ticket__wrapper').show();
18089                $('.order-now-button').prop('disabled', false);
18090                if (typeof window.orderNowProcessing !== 'undefined') {
18091                    window.orderNowProcessing = false;
18092                }
18093                if (Object.keys(TicketPackages).length > 0) {
18094                    $.each(TicketPackages, function(packageId, packageDetails) {
18095                        $(`#packageContainerBlock${packageId}`).remove();
18096                    });
18097                }
18098                if ($('input[name="user_list[]"]').length > 0) {
18099                    $('input[name="user_list[]"]').val('');
18100                }
18101                clickedOnce = false;
18102                // Set a local cookie named "backButtonClicked" with value "true" that expires in 1 day
18103                var d = new Date();
18104                d.setTime(d.getTime() + (24*60*60*1000)); // 1 day
18105                var expires = "expires="+ d.toUTCString();
18106                document.cookie = "backButtonClicked=true;" + expires + ";path=/";
18107                return false;
18108            });
18109        }
18110    // }
18111});
18112function checkAllFieldsHidden() {
18113    // Get all form fields inside the ticketFormCol
18114    const fields = document.querySelectorAll('.ticketFormCol .event__form');
18115    
18116    // Check if all fields have display:none
18117    const allHidden = Array.from(fields).every(field => {
18118        const style = window.getComputedStyle(field);
18119        return style.display === 'none';
18120    });
18121    
18122    return allHidden;
18123}  
18124function findFirstEmptyField(startIndex) {
18125    // First empty #userN (all user_list[] inputs, not a 50 cap). Returning startIndex
18126    // when that field was empty skipped earlier holes after remove.
18127    var found = -1;
18128    $('input[name="user_list[]"]').each(function () {
18129        if ($(this).val()) {
18130            return;
18131        }
18132        var id = this.id || '';
18133        if (id.indexOf('user') === 0) {
18134            found = parseInt(id.replace('user', ''), 10);
18135            return false;
18136        }
18137    });
18138    return found;
18139}
18140
18141function formatTotal(amount) {
18142    return parseFloat(amount).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 });
18143}
18144
18145/* Ticket: VFC-21830 - show description after page ready */
18146$(document).ready(function() {
18147    $(".ticket__item .ticket-desc-p").css('display', 'block');
18148    appId = '20550';
18149   console.log(window.location.href); 
18150if(appId ==15570){
18151    console.log(appId); 
18152    if (window.location.href === "https://www.mainstreetnow.org/en/registration-form") {
18153    // URL matches registration form
18154    console.log("On registration form page");
18155$('.package-block-771506').hide();
18156$('.package-block-771507').hide();
18157} else {
18158    // URL does not match
18159    console.log("Not on registration form page"); 
18160
18161setTimeout(function() {
18162        // Check if the Select button is display: none
18163        if ($('a.pricebtn-btn.ticketSelbtn.pack771506').css('display') === 'none') {
18164 console.log("If button is hidden, hide package block 1111111111111"); 
18165            // If button is hidden, hide package block 772817
18166            $('.ticket__item.package-block-772817').hide();
18167        } else {
18168 console.log("If button is hidden, hide package block 222222222"); 
18169            // If button is visible, hide package block 771506
18170            $('.ticket__item.package-block-771506').hide();
18171        }
18172    }, 2000);
18173
18174
18175setTimeout(function() {
18176        // Check if the Select button is display: none
18177        if ($('a.pricebtn-btn.ticketSelbtn.pack771507').css('display') === 'none') {
18178 console.log("If button is hidden, hide package block 1111111111111"); 
18179            // If button is hidden, hide package block 772817
18180            $('.ticket__item.package-block-772818').hide();
18181        } else {
18182 console.log("If button is hidden, hide package block 222222222"); 
18183            // If button is visible, hide package block 771506
18184            $('.ticket__item.package-block-771507').hide();
18185        }
18186    }, 2000);
18187
18188}
18189}   
18190
18191
18192});
18193</script>
18193
18194
18195<script>
18196    $(document).ready(function() {
18197
18198    if (enableV5EnhanceAvailabilityApi) {
18199
18200        let postData = {"packages":[],"appId":"20550"};
18201        
18202        if (!isUpgradeDowngradeProfile) {
18203            enhancedTicketAvailabilityObject.getAddonAndPackageCount(postData);    
18204        }
18205    }
18206
18207    $('.ticketSelbtn').on('click', function(){
18208        // console.log('ticketSelbtn');
18209         packageBadge=$(this).closest('.ticket__item').find('.ticket__desc .ticket__desc__text h5').text();
18210        // console.log('packageBadge',packageBadge);
18211        $('.package_on_badges').val(packageBadge);
18212        $('input[name="package_on_badges"]').val(packageBadge);
18213    });
18214
18215    $('.order-now-button').on('click', function(){
18216        let names = [];
18217        
18218        $('.addonsvp input[type=checkbox]:checked').each(function () {
18219            // Get the data-name value
18220            let fullName = $(this).data('name');            
18221            // Extract text before the first parenthesis, if it exists
18222            let cleanName = fullName.split('(')[0].trim();            
18223            // Add the clean name to our array
18224            names.push(cleanName);
18225        });
18226        
18227        $('.addons_on_badges').val(names.join(', '));
18228        $('input[name="addons_on_badges"]').val(names.join(', '));
18229    });
18230
18231        });
18232
18233    async function stripeElementCall(elements,stripe_object){
18234        // console.log(stripe_object);
18235            // form.addEventListener('submit', async (event) => {
18236                if (flag_lis == 0) {
18237                    console.log("flag_lis == 0");
18238                    var payment_gateway_name=$('input[name="optionsRadios"]:checked').data('name');
18239                    // event.preventDefault();
18240
18241                    let mainEmail = $('input[name="email"]').val().trim();
18242                    let error = null;
18243                    try {
18244                        const result = await stripe_object.confirmPayment({
18245                            //`Elements` instance that was used to create the Payment Element
18246                            elements,
18247                            confirmParams: {
18248                                return_url: 'https://vfairs.com',
18249                                receipt_email: ('' != mainEmail)? mainEmail : ''
18250                            },
18251                            redirect: 'if_required'
18252                        });
18253
18254                        const messageContainer = document.querySelector('#error-message');
18255                        if (result.error && $('input[name="optionsRadios"]:checked').data('name') === 'Stripe') {
18256                            if ($(".refund_amount_multiple_edit").length === 1) {
18257                                $('#payment-element').css('display', 'none');
18258                                isStripeValidation = true;
18259                                flag_lis = 1;
18260                                $('#' + id).submit();
18261                            }else{
18262                                console.log("result.error: " + result.error);
18263                                if(payment_gateway_name == 'Stripe'){
18264                                    messageContainer.textContent = result.error.message;
18265                                }
18266                                error = result.error;
18267                            }
18268                            // console.log("result.error: " + result.error);
18269                            // if(payment_gateway_name == 'Stripe'){
18270                            //     messageContainer.textContent = result.error.message;
18271                            // }
18272                            // error = result.error;
18273                        } else {
18274                            // console.log("isStripeValidation ");
18275                            messageContainer.textContent = '';
18276                            isStripeValidation = true;
18277                            flag_lis = 1;
18278                            $('#' + id).submit();
18279                        }
18280                    } catch (err) {
18281                        console.error('Payment error:', err);
18282                        error = {message: err};
18283                    }
18284
18285                    if (error) {
18286                        // This point will only be reached if there is an immediate error when
18287                        // confirming the payment. Show error to your customer (for example, payment
18288                        // details incomplete)
18289                        if(payment_gateway_name == 'Stripe'){
18290                        const messageContainer = document.querySelector('#error-message');
18291                        messageContainer.textContent = error.message;
18292                        }
18293                    } else {
18294
18295                    }
18296                }
18297        }
18298
18299        async  function verifyStripeCallTrigger(){
18300                console.log("verify stripe call");
18301                await stripeElementCall(elements, stripe);
18302            }
18303</script>
18303
18304<style>
18305.manageAccountBlock {
18306  display: flex;
18307  justify-content: center;
18308  align-items: center;
18309  flex-direction: column;
18310  gap: 10px;
18311  max-width: 320px;
18312  width: 100%;
18313  margin-inline: auto;
18314}
18315.manageAccountBlock .manageAccountBlock__text {
18316  font-weight: 400;
18317  font-size: 14px;
18318  line-height: 20px;
18319  color: #5f6269;
18320  margin: 0px;
18321  text-align: center;
18322}
18323.manageAccountBlock .manageAccountBlock__link {
18324  color: #f36531;
18325  font-size: 14px;
18326  font-weight: 800;
18327  line-height: 20px;
18328  text-decoration: underline;
18329}
18330</style>
18331<script>
18332function updateSnapPayType(radio) {
18333    const hiddenInput = document.getElementById("selectedSnapPayType");
18334    if (hiddenInput) {
18335        if (radio.classList.contains("snapPayCC")) {
18336            hiddenInput.value = "CC";
18337        } else if (radio.classList.contains("snapPayACH")) {
18338            hiddenInput.value = "ACH";
18339        } else {
18340            hiddenInput.value = "";
18341        }
18342    }
18343}
18344$('.pmnt_fld').on('change', function() {
18345    const selectedOptionText = $(this).find("option:selected").text();
18346    const hiddenInput = document.getElementById("selectedSnapPayType");
18347    if (hiddenInput) {
18348    if (selectedOptionText.includes('Credit Card')) {
18349        hiddenInput.value = "CC";
18350    } else if (selectedOptionText.includes('ACH/Electronic Check')) {
18351        hiddenInput.value = "ACH";
18352    } else {
18353        hiddenInput.value = ""; // Clear the hidden field if neither CC nor ACH is selected
18354    }
18355}
18356});
18357// Check on load which option is selected
18358$(document).ready(function() {
18359    const hiddenInput = document.getElementById("selectedSnapPayType");
18360
18361    if (hiddenInput) {
18362        const checkedSnapPayRadio = document.querySelector('input[name="optionsRadios"].snapPayCC:checked, input[name="optionsRadios"].snapPayACH:checked');
18363        if (checkedSnapPayRadio) {
18364            updateSnapPayType(checkedSnapPayRadio);
18365            return;
18366        }
18367
18368        const selectedOptionText = $('.pmnt_fld').find("option:selected").text();
18369        if (selectedOptionText.includes('Credit Card')) {
18370            hiddenInput.value = "CC";
18371        } else if (selectedOptionText.includes('ACH/Electronic Check')) {
18372            hiddenInput.value = "ACH";
18373        } else {
18374            hiddenInput.value = "";
18375        }
18376    }
18377});
18378    
18379/**
18380         * Main function to hide unwanted form fields in iframe and show only specific fields
18381         * Keeps visible: first_name, last_name, email (readonly), field_addons (functional), and all buttons
18382         */
18383        function hideFieldsInIframe() {
18384            try {
18385                var $iframeContent = getIframeContent();
18386                if (!$iframeContent) return;
18387                
18388                var fieldsToKeep = ['first_name', 'last_name', 'email', 'field_addons'];
18389                
18390                // Step 1: Hide everything first, then selectively show what we need
18391                hideAllLabels($iframeContent);
18392                hideUnwantedFormFields($iframeContent, fieldsToKeep);
18393                hideEmptyContainers($iframeContent, fieldsToKeep);
18394                
18395                // Step 2: Show only the fields and elements we want to keep
18396                showButtons($iframeContent);
18397                showAddonsField($iframeContent);
18398                showUserDataFields($iframeContent);
18399                showBuyerDependencyFields($iframeContent);
18400                
18401                // Step 3: Set up defensive mechanism to maintain visibility
18402                setupDefensiveMechanism();
18403                
18404            } catch (e) {
18405                // Silent error handling for any unexpected issues
18406            }
18407        }
18408        
18409        /**
18410         * Get iframe content and validate access
18411         * @returns {jQuery|null} iframe content or null if not accessible
18412         */
18413        function getIframeContent() {
18414            var $iframe = jQuery('#iframe-id-new');
18415            var $iframeContent = $iframe.contents();
18416            
18417            // Check if we can access the iframe content
18418            return $iframeContent.length > 0 ? $iframeContent : null;
18419        }
18420        
18421        /**
18422         * Hide all labels in the iframe
18423         * @param {jQuery} $iframeContent - iframe content jQuery object
18424         */
18425        function hideAllLabels($iframeContent) {
18426            $iframeContent.find('label').css('display', 'none');
18427        }
18428        
18429        /**
18430         * Hide all form fields except buttons, hidden fields, and fields we want to keep
18431         * @param {jQuery} $iframeContent - iframe content jQuery object
18432         * @param {Array} fieldsToKeep - array of field names to keep visible
18433         */
18434        function hideUnwantedFormFields($iframeContent, fieldsToKeep) {
18435            $iframeContent.find('input, select, textarea').each(function() {
18436                var $field = jQuery(this);
18437                var fieldType = $field.attr('type');
18438                var fieldId = $field.attr('id');
18439                var fieldName = $field.attr('name');
18440                
18441                // Skip buttons, hidden inputs, and specific fields we want to keep
18442                var isButton = fieldType === 'submit' || fieldType === 'button' || $field.hasClass('btn') || $field.is('button');
18443                var isHidden = fieldType === 'hidden';
18444                var isFieldToKeep = fieldId === 'field_addons' || fieldsToKeep.indexOf(fieldName) !== -1;
18445                
18446                if (isButton || isHidden || isFieldToKeep) {
18447                    return; // Keep these visible
18448                }
18449                
18450                // Hide all other fields
18451                $field.css('display', 'none');
18452            });
18453        }
18454        
18455        /**
18456         * Hide containers that don't contain fields we want to keep or buttons
18457         * @param {jQuery} $iframeContent - iframe content jQuery object
18458         * @param {Array} fieldsToKeep - array of field names to keep visible
18459         */
18460        function hideEmptyContainers($iframeContent, fieldsToKeep) {
18461            var containerSelectors = '.col-12, .form-group, .field-group, .radio-block-all, .checkbox-block-all';
18462            
18463            $iframeContent.find(containerSelectors).each(function() {
18464                var $container = jQuery(this);
18465                
18466                var hasKeepFields = containerHasKeepFields($container, fieldsToKeep);
18467                var hasButtons = containerHasButtons($container);
18468                
18469                // Hide container only if it has neither keep fields nor buttons
18470                if (!hasKeepFields && !hasButtons) {
18471                    $container.css('display', 'none');
18472                }
18473            });
18474        }
18475        
18476        /**
18477         * Check if container has any fields we want to keep
18478         * @param {jQuery} $container - container jQuery object
18479         * @param {Array} fieldsToKeep - array of field names to keep visible
18480         * @returns {boolean}
18481         */
18482        function containerHasKeepFields($container, fieldsToKeep) {
18483            for (var i = 0; i < fieldsToKeep.length; i++) {
18484                var selector = 'input[name="' + fieldsToKeep[i] + '"], #' + fieldsToKeep[i];
18485                if ($container.find(selector).length > 0) {
18486                    return true;
18487                }
18488            }
18489            return false;
18490        }
18491        
18492        /**
18493         * Check if container has any buttons
18494         * @param {jQuery} $container - container jQuery object
18495         * @returns {boolean}
18496         */
18497        function containerHasButtons($container) {
18498            var buttonSelectors = 'button, input[type="submit"], input[type="button"], .btn';
18499            return $container.find(buttonSelectors).length > 0;
18500        }
18501        
18502        /**
18503         * Show all buttons with important styling
18504         * @param {jQuery} $iframeContent - iframe content jQuery object
18505         */
18506        function showButtons($iframeContent) {
18507            var buttonSelectors = 'button, input[type="submit"], input[type="button"], .btn';
18508            $iframeContent.find(buttonSelectors).attr('style', 'display: block !important');
18509        }
18510        
18511        /**
18512         * Show addons field dropdown (keep it functional)
18513         * @param {jQuery} $iframeContent - iframe content jQuery object
18514         */
18515        function showAddonsField($iframeContent) {
18516            var $addonsField = $iframeContent.find('#field_addons');
18517            
18518            // Show the field itself
18519            $addonsField.attr('style', 'display: block !important');
18520            
18521            // Show its container
18522            $addonsField.closest('.form-group, .col-12').attr('style', 'display: block !important');
18523            
18524            // Show its label
18525            $iframeContent.find('label[for="field_addons"]').attr('style', 'display: block !important');
18526        }
18527        
18528        /**
18529         * Field ids that were kept off the main form because they depen
18529d on a ticket,
18530         * limited to the package the buyer just took.
18531         * @returns {Array} field ids
18532         */
18533        function getBuyerDependencyFieldIds() {
18534            var fieldMap = window.mainFormTicketDependencyFields;
18535            if (!fieldMap) {
18536                return [];
18537            }
18538
18539            var assignedPackage = String(localStorage.getItem('savedPackage') || '');
18540            var fieldIds = [];
18541            for (var fieldId in fieldMap) {
18542                if (!Object.prototype.hasOwnProperty.call(fieldMap, fieldId)) {
18543                    continue;
18544                }
18545                if (assignedPackage && jQuery.inArray(assignedPackage, fieldMap[fieldId]) !== -1) {
18546                    fieldIds.push(fieldId);
18547                }
18548            }
18549            return fieldIds;
18550        }
18551
18552        /**
18553         * Undo the blanket hiding for the buyer's ticket-dependent fields, which are only
18554         * collected here because the main form never rendered them
18555         * @param {jQuery} $iframeContent - iframe content jQuery object
18556         */
18557        function showBuyerDependencyFields($iframeContent) {
18558            jQuery.each(getBuyerDependencyFieldIds(), function (index, fieldId) {
18559                var $group = $iframeContent.find('#grp_fld_' + fieldId);
18560                if (!$group.length) {
18561                    return;
18562                }
18563
18564                $group.parents('.col-12, .form-group, .field-group, .radio-block-all, .checkbox-block-all')
18565                    .attr('style', 'display: block !important');
18566                $group.find('input, select, textarea').css('display', '');
18567                $group.find('label').attr('style', 'display: block !important');
18568            });
18569        }
18570
18571        /**
18572         * Show user data fields (first_name, last_name, email) as readonly
18573         * @param {jQuery} $iframeContent - iframe content jQuery object
18574         */
18575        function showUserDataFields($iframeContent) {
18576            var userFieldSelectors = 'input[name="first_name"], input[name="last_name"], input[name="email"]';
18577            var readonlyStyles = 'display: block !important; background-color: #f5f5f5 !important; color: #666 !important; cursor: not-allowed !important';
18578            
18579            $iframeContent.find(userFieldSelectors).each(function() {
18580                var $field = jQuery(this);
18581                
18582                // Make field readonly with styling
18583                $field.prop('readonly', true);
18584                $field.attr('style', readonlyStyles);
18585                
18586                // Show the form group containing this field
18587                $field.closest('.col-12, .form-group, .field-group').attr('style', 'display: block !important');
18588                
18589                // Show associated labels
18590                showFieldLabels($iframeContent, $field);
18591            });
18592        }
18593        
18594        /**
18595         * Show labels associated with a specific field
18596         * @param {jQuery} $iframeContent - iframe content jQuery object
18597         * @param {jQuery} $field - field jQuery object
18598         */
18599        function showFieldLabels($iframeContent, $field) {
18600            var fieldId = $field.attr('id');
18601            var fieldName = $field.attr('name');
18602            
18603            // Show label by id
18604            if (fieldId) {
18605                $iframeContent.find('label[for="' + fieldId + '"]').attr('style', 'display: block !important');
18606            }
18607            
18608            // Show label by name
18609            if (fieldName) {
18610                $iframeContent.find('label[for="' + fieldName + '"]').attr('style', 'display: block !important');
18611            }
18612            
18613            // Show labels within the same container
18614            $field.closest('.col-12, .form-group, .field-group').find('label').each(function() {
18615                var $label = jQuery(this);
18616                var labelFor = $label.attr('for');
18617                
18618                if (labelFor === fieldId || labelFor === fieldName) {
18619                    $label.attr('style', 'display: block !important');
18620                }
18621            });
18622        }
18623        
18624        /**
18625         * Set up defensive mechanism to maintain field visibility over time
18626         * Runs periodically to re-enforce visibility settings in case something tries to override them
18627         */
18628        function setupDefensiveMechanism() {
18629            var retryCount = 0;
18630            var maxRetries = 10;
18631            
18632            var defensiveInterval = setInterval(function() {
18633                retryCount++;
18634                if (retryCount > maxRetries) {
18635                    clearInterval(defensiveInterval);
18636                    return;
18637                }
18638                
18639                try {
18640                    var $currentContent = getIframeContent();
18641                    if (!$currentContent) {
18642                        clearInterval(defensiveInterval);
18643                        return;
18644                    }
18645                    
18646                    // Re-enforce visibility for all important elements
18647                    showAddonsField($currentContent);
18648                    showUserDataFields($currentContent);
18649                    showBuyerDependencyFields($currentContent);
18650                    
18651                } catch (e) {
18652                    // Silent error handling
18653                }
18654            }, 800);
18655        }
18656
18657        /**
18658         * File extension validation to prevent .jfif files
18659         */
18660        function validateFileExtension(fileInput) {
18661            var files = fileInput.files;
18662            if (!files || files.length === 0) return true;
18663            
18664            var allowedExtensions = ['pdf', 'doc', 'docx', 'txt', 'rtf', 'png', 'jpg', 'jpeg'];
18665            var blockedExtensions = ['jfif'];
18666            
18667            for (var i = 0; i < files.length; i++) {
18668                var file = files[i];
18669                var fileName = file.name.toLowerCase();
18670                var fileExtension = fileName.split('.').pop();
18671                
18672                // Check if file extension is blocked
18673                if (blockedExtensions.includes(fileExtension)) {
18674                    // Clear the input
18675                    fileInput.value = '';
18676                    
18677                    // Show error message
18678                    var errorSpan = jQuery(fileInput).closest('.col-12').find('.text-danger');
18679                    if (errorSpan.length > 0) {
18680                        errorSpan.text('.jfif files are not supported. Please use JPG, PNG, or PDF format.');
18681                        errorSpan.show();
18682                    } else {
18683                        // Fallback alert if error span not found
18684                        alert('.jfif files are not supported. Please use JPG, PNG, or PDF format.');
18685                    }
18686                    
18687                    return false;
18688                }
18689                
18690                // Check if file extension is in allowed list (for images)
18691                if (fileName.match(/\.(jpg|jpeg|png|gif)$/i) && !allowedExtensions.includes(fileExtension)) {
18692                    fileInput.value = '';
18693                    var errorSpan = jQuery(fileInput).closest('.col-12').find('.text-danger');
18694                    if (errorSpan.length > 0) {
18695                        errorSpan.text('Please select only ' + allowedExtensions.join(', ') + ' files.');
18696                        errorSpan.show();
18697                    } else {
18698                        alert('Please select only ' + allowedExtensions.join(', ') + ' files.');
18699                    }
18700                    return false;
18701                }
18702            }
18703            
18704            // Clear any previous error messages if validation passes
18705            var errorSpan = jQuery(fileInput).closest('.col-12').find('.text-danger');
18706            if (errorSpan.length > 0) {
18707                errorSpan.text('');
18708                errorSpan.hide();
18709            }
18710            
18711            return true;
18712        }
18713
18714        /**
18715         * Check if a file input has blocked extensions (without modifying DOM)
18716         */
18717        function hasBlockedFileExtensions(fileInput) {
18718            var files = fileInput.files;
18719            if (!files || files.length === 0) return false;
18720            
18721            var blockedExtensions = ['jfif'];
18722            
18723            for (var i = 0; i < files.length; i++) {
18724                var file = files[i];
18725                var fileName = file.name.toLowerCase();
18726                var fileExtension = fileName.split('.').pop();
18727                
18728                if (blockedExtensions.includes(fileExtension)) {
18729                    return true;
18730                }
18731            }
18732            
18733            return false;
18734        }
18735
18736        /**
18737         * Validate all file inputs in a form
18738         */
18739        function validateAllFileInputs(form) {
18740            var isValid = true;
18741            var fileInputs = jQuery(form).find('input[type="file"]');
18742            var blockedFiles = [];
18743            
18744            fileInputs.each(function() {
18745                if (hasBlockedFileExtensions(this)) {
18746                    isValid = false;
18747                    blockedFiles.push(this);
18748                }
18749            });
18750            
18751            // Show error messages for blocked files
18752            if (!isValid) {
18753                blockedFiles.forEach(function(input) {
18754                    var errorSpan = jQuery(input).closest('.col-12').find('.text-danger');
18755                    if (errorSpan.length > 0) {
18756                        errorSpan.text('.jfif files are not supported. Please use JPG, PNG, or PDF format.');
18757                        errorSpan.show();
18758                    }
18759                });
18760            }
18761            
18762            return isValid;
18763        }
18764
18765        /**
18766         * Set up file input validation when DOM is ready
18767         */
18768        jQuery(document).ready(function() {
18769            // Add change event listener to all file inputs
18770            jQuery(document).on('change', 'input[type="file"]', function() {
18771                validateFileExtension(this);
18772                
18773                // Fix for speaker registration form - display complete filename
18774                            });
18775            
18776            // Form submit validation is now handled in the main form submit handler above
18777        });
18778
18779
18780
18781
18782</script>
vendor: 1 bytes, line 18782
18782
18783<script>
18784// AJAX upload for file inputs marked with data-ajax-upload="1"
18785(function($){
18786    
18787  function getLangFromPath(){
18788    var path = window.location.pathname.replace(/^\/+/, '');
18789    var seg = path.split('/')[0] || 'en';
18790    return (seg && seg.length === 2) ? seg : 'en';
18791  }
18792
18793  // Add app_id check for 19017
18794  // The PHP variable is injected into JS for use here
18795  var app_id = 20550;
18796
18797  $(document).on('change','input[type="file"][data-ajax-upload="1"]',function(){
18798    // Only run AJAX upload for app_id 19017
18799    var $enableClientSideUploads = '1';
18800    if ([19017, 10001417].indexOf(app_id) === -1 && $enableClientSideUploads !== '1') {
18801      return;
18802    }
18803
18804    var $input = $(this);
18805    var files = this.files;
18806    if(!files || !files.length){ return; }
18807    var file = files[0];
18808
18809    // Build allowed extensions from accept or data-file-type
18810    var accept = $input.attr('accept') || '';
18811    var declaredType = ($input.data('file-type') || '').toString();
18812    function getAllowedFromAccept(acc){
18813      if(!acc){ return null; }
18814      var tokens = acc.split(',').map(function(t){ return t.trim().toLowerCase(); });
18815      var exts = [];
18816      tokens.forEach(function(t){
18817        if (t === 'image/*') {
18818          exts = exts.concat(['jpg','jpeg','png','gif','webp','svg']);
18819          return;
18820        }
18821        if (t === 'application/pdf') { exts.push('pdf'); return; }
18822        if (t === 'text/csv' || t === 'application/csv') { exts.push('csv'); return; }
18823        if (t === 'text/plain') { exts.push('txt'); return; }
18824        if (t === 'image/jpeg') { exts = exts.concat(['jpeg','jpg']); return; }
18825        if (t === 'image/jpg') { exts.push('jpg'); return; }
18826        if (t === 'image/png') { exts.push('png'); return; }
18827        if (t === 'image/gif') { exts.push('gif'); return; }
18828        if (t === 'image/webp') { exts.push('webp'); return; }
18829        if (t === 'image/svg+xml') { exts.push('svg'); return; }
18830        // Excel MIME types
18831        if (t === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') { exts.push('xlsx'); return; }
18832        if (t === 'application/vnd.ms-excel') { exts.push('xls'); return; }
18833        // Word MIME types
18834        if (t === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document') { exts.push('docx'); return; }
18835        if (t === 'application/msword') { exts.push('doc'); return; }
18836        // PowerPoint MIME types
18837        if (t === 'application/vnd.openxmlformats-officedocument.presentationml.presentation') { exts.push('pptx'); return; }
18838        if (t === 'application/vnd.ms-powerpoint') { exts.push('ppt'); return; }
18839        if (t.indexOf('.') === 0) { exts.push(t.replace('.', '')); return; }
18840        if (t.indexOf('/') > -1) {
18841          var part = t.split('/')[1];
18842          if (part) { exts.push(part); }
18843        }
18844      });
18845      return exts.length ? Array.from(new Set(exts)) : null;
18846    }
18847    function defaultsForType(t){
18848      if (t === 'image') return ['jpg','jpeg','png','gif','webp'];
18849      if (t === 'csv') return ['csv','txt'];
18850      if (t === 'video') return ['mp4','webm','mov','avi','mkv','wmv','ogg'];
18851      // document/default
18852      return ['pdf','doc','docx','xls','xlsx','ppt','pptx','txt'];
18853    }
18854    var allowedExts = getAllowedFromAccept(accept) || defaultsForType(declaredType || 'document');
18855    var ext = (file.name.split('.').pop() || '').toLowerCase();
18856
18857    // Size limits (bytes): allow override via data-max-size
18858    var defaultMax = 5*1024*1024; // 5 MB for images/docs/csv
18859    if ((declaredType || accept).toString().match(/video\//i) || declaredType === 'video') {
18860      defaultMax = 10*1024*1024; // 10 MB for videos
18861    }
18862    var maxSize = parseInt($input.attr('data-max-size')) || defaultMax;
18863
18864    var $error = $input.closest('.col-12').find('.text-danger');
18865    function showError(msg){
18866      if ($error.length) { $error.text(msg).show(); }
18867      else { alert(msg); }
18868    }
18869    // Type check
18870    if (allowedExts && allowedExts.length && ext && allowedExts.indexOf(ext) === -1) {
18871      $input.val('');
18872      showError('Invalid file type. Allowed: ' + allowedExts.join(', '));
18873      return;
18874    }
18875    // Size check
18876    if (file.size > maxSize) {
18877      $input.val('');
18878      var mb = (maxSize / (1024*1024)).toFixed(0);
18879      showError('File size exceeds ' + mb + ' MB limit.');
18880      return;
18881    }
18882    // Clear previous error if any
18883    if ($error.length) { $error.text('').hide(); }
18884
18885    var lang = getLangFromPath();
18886    var url = '/' + lang + '/form/uploadFiles';
18887    var formData = new FormData();
18888    formData.append('file', file);
18889
18890    // Derive file_type for backend (prefer actual selected file extension over accept list)
18891    var fileType = declaredType || (function(extLower){
18892      if (['jpg','jpeg','png','gif','webp','svg'].indexOf(extLower) !== -1) { return 'image'; }
18893      if (['mp4','webm','mov','avi','mkv','wmv','ogg'].indexOf(extLower) !== -1) { return 'video'; }
18894      if (['csv','txt'].indexOf(extLower) !== -1) { return 'csv'; }
18895      return 'document';
18896    })(ext);
18897    formData.append('file_type', fileType);
18898    if (allowedExts && allowedExts.length) {
18899      formData.append('allowed_exts', allowedExts.join(','));
18900    }
18901
18902    var $form = $input.closest('form');
18903    function toggleSubmitButtons(){
18904      var count = parseInt($form.data('uploads_in_progress') || 0, 10) || 0;
18905      var disable = count > 0;
18906      $form.find('input[type="submit"], button[type="submit"]').prop('disabled', disable).toggleClass('disabled', disable);
18907    }
18908    function incUploads(){
18909      var n = parseInt($form.data('uploads_in_progress') || 0, 10) || 0;
18910      $form.data('uploads_in_progress', n + 1);
18911      toggleSubmitButtons();
18912    }
18913    function decUploads(){
18914      var n = parseInt($form.data('uploads_in_progress') || 0, 10) || 0;
18915      n = Math.max(0, n - 1);
18916      $form.data('uploads_in_progress', n);
18917      toggleSubmitButtons();
18918    }
18919
18920    var $status = $('<span class="text-info ms-2 upload-status">Uploading...</span>');
18921    $input.after($status);
18922    $input.prop('disabled', true);
18923    incUploads();
18924
18925    $.ajax({
18926      url: url,
18927      method: 'POST',
18928      data: formData,
18929      processData: false,
18930      contentType: false,
18931      success: function(resp){
18932        try{ if(typeof resp === 'string'){ resp = JSON.parse(resp); } }catch(e){}
18933        if(resp && resp.status){
18934          // Prefer data-field (fld_{id}) so file uploads always post with the registration field key.
18935          // Exception: profile_picture must keep that POST key (backend first-class mapping).
18936          var currentName = $input.attr('name') || $input.attr('data-original-name');
18937          var hiddenName = (currentName === 'profile_picture')
18938            ? 'profile_picture'
18939            : ($input.attr('data-field') || currentName);
18940          var $hidden = $input.siblings('input[type="hidden"][data-uploaded-url="1"]');
18941          if(!$hidden.length){
18942            $hidden = $('<input type="hidden" data-uploaded-url="1" />');
18943            $input.after($hidden);
18944          }
18945          $hidden.attr('name', hiddenName);
18946          $hidden.val(resp.display_url);
18947          // Use the native filename display by keeping the file value
18948          // Remove any custom label we may have created previously
18949          $input.siblings('.file-chosen-label').remove();
18950          // Prevent original file input from submitting by removing its name
18951          try { $input.attr('data-original-name', hiddenName); $input.removeAttr('name'); } catch(e) {}
18952          // Clear any jQuery Validate error state and labels
18953          try {
18954            var $form = $input.closest('form');
18955            if ($form.length && typeof $form.validate === 'function') {
18956              var v = $form.validate();
18957              if (v) { v.resetForm(); }
18958            }
18959            $input.removeClass('error').attr('aria-invalid','false').prop('required', false).removeAttr('data-rule-required');
18960            var errLabel = $('#'+($input.attr('id')||'')+'-error');
18961            if (errLabel.length) { errLabel.text('').hide(); }
18962          } catch(e) {}
18963          $status.removeClass('text-info').addClass('text-success').text('Uploaded');
18964        } else {
18965          var msg = (resp && resp.message) ? resp.message : 'Upload failed';
18966          $status.removeClass('text-info').addClass('text-danger').text(msg);
18967        }
18968      },
18969      error: function(){
18970        $status.removeClass('text-info').addClass('text-danger').text('Upload failed');
18971      },
18972      complete: function(){
18973        $input.prop('disabled', false);
18974        setTimeout(function(){ $status.fadeOut(400,function(){ $(this).remove(); }); }, 2500);
18975        decUploads();
18976      }
18977    });
18978  });
18979})(jQuery);
18980
18981$(document).ready(function() {
18982    function hideUpdateButtons() {
18983        if (isUpgradeDowngradeProfile == 1 && enableTicketUpgradeHideUserEdit ==1) {
18984            $('.update-user-to-package').hide();
18985        }
18986    }
18987    // Hide initially
18988    hideUpdateButtons();
18989    // Hide any new buttons that get added
18990    setInterval(hideUpdateButtons, 500); // Check every 500ms
18991});
18992
18993</script>
18993
18994
18995</div>
18996
18997    <!-- Optional JavaScript -->
18998    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
18999    
18999<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
18999    
19000    
19000<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
19000
19001    <!-- 
19001<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV" crossorigin="anonymous"></script>
19001 -->
19002    
19002<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.min.js"></script>
19002
19003    
19003<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.5/jquery.validate.min.js"></script>
19003
19004    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/select2.min.css" rel="stylesheet" />
19005    
19005<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/select2.min.js"></script>
19005
19006
19007      </body>
19008</html></p></div></div>
19009      </div>
19010    </div>
19011  </div>
19012
19013<script type="application/javascript">
19014  function inIframe () {
19015    try {
19016      return window.self !== window.top;
19017    } catch (e) {
19018      return true;
19019    }
19020  }
19021  //if(inIframe() && "//"){
19022  //  window.location.href = window.location.origin + "/en/thank-you";
19023  //}
19024  
19025</script>
19025
19026    <div id="top"><i class="fa fa-arrow-up" aria-hidden="true"></i></div>
19027    <footer class="footer-section whiteText">
19028        <div class="container">
19029            <div class="row">
19030                <div class="col-sm-9 col-xs-12 ">
19031                    <ul class="footer-links">
19032                        <li><a href="/en/privacy-policy">Privacy Policy</a></li>
19033                        <li><a href="/en/terms-of-service/">Terms of Service</a></li>
19034                    </ul>
19035                </div>
19036                <div class="col-sm-3 col-xs-12 text-right">
19037                    <!--  <ul class="socialIcons">
19038        <li><a href="" target="_blank"><i class="fa fa-facebook"></i></a></li>
19039        <li><a href="" target="_blank"><i class="fa fa-linkedin"></i></a></li>
19040        <li><a href="" target="_blank"><i class="fa fa-instagram"></i></a></li>
19041        <li><a href="" target="_blank"><i class="fa fa-twitter"></i></a></li>
19042    </ul> -->
19043                    <a target="_blank" href="http://www.vfairs.com" rel="noopener noreferrer"> <img src="https://vepimg.b8cdn.com/uploads/vjfnew/586/content/docs/1566910747poweredby.png" title="powered-by-vfair" alt="" /> </a></div>
19044            </div>
19045        </div>
19046    </footer>
19046<script type="text/javascript">
19047        var DynamicDate = "Aug 19, 2026 14:30";
19048    var timeTemplate = "<ul><li><p>%d</p> <span class='cd-time'>Days</span></li> <li><p>%h</p> <span class='cd-time'>Hours</span></li><li><p>%i</p> <span class='cd-time'>Minutes</span></li> <li><p>%s</p> <span class='cd-time'>Seconds</span></li></ul>";
19049</script>
19049
19050<!-- using older jquery -->
19051<script src="https://vepjs.b8cdn.com/js/jquery.min.js"></script>
19051
19052<!-- using older bootstrap -->
19053<script src="https://vepjs.b8cdn.com/js/bootstrap.min-v3.4.1.js"></script>
vendor: 1 bytes, line 19053
19053
19054<script src="https://vepjs.b8cdn.com/js/bootstrap3-typeahead.min.js"></script>
vendor: 1 bytes, line 19054
19054
19055<script src="https://vepjs.b8cdn.com/js/typeahead.bundle.js"></script>
19055
19056      
19056<script src="https://vepjs.b8cdn.com/js/plugins.js?v=3.1"></script>
19056
19057      <link href="https://vepcss.b8cdn.com/css/select/select2.min.css" rel="stylesheet" />
19058      
19058<script src="https://vepjs.b8cdn.com/js/select/select2.min.js"></script>
19058
19059      
19059<script src="https://vepjs.b8cdn.com/js/main.js?v=1.1"></script>
19059
19060      
19060<script src="https://vepjs.b8cdn.com/js/validation/jquery.validate.min.js"></script>
19060
19061      
19061<script src="https://vepjs.b8cdn.com/js/jquery.disableautofill.min.js"></script>
19061
19062      
19062<script src="https://vepjs.b8cdn.com/js/validation/additional-methods.min.js"></script>
19062
19063      
19063<script src="https://vepjs.b8cdn.com/js/bootstrap-datepicker.js"></script>
19063
19064      
19064<script src="https://vepjs.b8cdn.com/js/sweetalert.js"></script>
19064
19065      
19065<script src="https://vepjs.b8cdn.com/js/moment/moment.js"></script>
19065
19066      
19066<script src="https://vepjs.b8cdn.com/js/moment-timezone.js"></script>
19066
19067      
19067<script src="https://vepjs.b8cdn.com/js/agenda_timezone.js?v=27"></script>
19067
19068    
19069
19070<!--[if lt IE 9]>
19071<script src="https://vepjs.b8cdn.com/js/html5.js"></script>
vendor: 1 bytes, line 19071
19071
19072<script src="https://vepjs.b8cdn.com/js/jquery.backgroundsize.js"></script>
vendor: 1 bytes, line 19072
19072
19073<script src="https://vepjs.b8cdn.com/js/respond.min.js"></script>
vendor: 1 bytes, line 19073
19073
19074<script type="text/javascript">
19075    var tpElm = document.getElementById('top-element');
19076    $(tpElm).css("background-size", "cover");
19077    $.refreshBackgroundDimensions(tpElm);
19078</script>
19078
19079<![endif]-->
19080
19081<script type="text/javascript">
19082    app_id = 20550;
19083    user_id = 0;
19084    booth_id = 0;
19085    user_type_id = 0;
19086    is_two_factor_screen = 0;
19087    var EventTimeZoneName = "America/New_York";
19088    var EventTimeZoneOffset = "GMT-5:00";
19089    var AgendaDateFormat = "m/d/Y H:i";
19090    var EnableMobileWeb = "false";
19091    var CountdownText = "Event Is Live!";
19092
19093    function setCountdownTextCallback(){
19094        if(CountdownText!=""){
19095            var CountdownText2 = '<div class="eventlive">'+CountdownText+'</div>';
19096            $('#clockdiv').html(CountdownText2)
19097        }
19098    }
19099
19100    // User Existing List Check Started 
19101        // User Existing List Check End 
19102
19103    // This is for form builder edit mode.
19104    
19105    if(typeof IsLogedin=="undefined"){
19106      IsLogedin = false;
19107    }
19108    if(typeof IsEventLive=="undefined") {
19109      IsEventLive = true;
19110    }
19111    
19112    var inActiveEventSite = false;;
19113
19114    function updateStatTracker(app_id, type_id,user_id,content_id){
19115        var GetUserStat = new Object();
19116        GetUserStat.AppId = app_id;
19117        GetUserStat.TypeId = type_id;
19118        GetUserStat.Lang = 'en';
19119        GetUserStat.UserId = user_id;
19120        GetUserStat.ContentId = content_id;
19121        $.post(window.location.origin + "/en/UpdateStatTrackerDirect", GetUserStat).done(function (resp) {
19122            var re = /\s\s+/g;
19123            var response = resp.replace(re, ' ');
19124            var json = JSON.parse(response);
19125        });
19126    }
19127
19128    function isMobile() {
19129        return navigator.userAgent.match(/Android/i) ||
19130            navigator.userAgent.match(/BlackBerry/i) ||
19131            navigator.userAgent.match(/iPhone|iPad|iPod/i) ||
19132            navigator.userAgent.match(/Opera Mini/i) ||
19133            navigator.userAgent.match(/IEMobile/i) ||
19134            navigator.userAgent.match(/WPDesktop/i);
19135    }
19136
19137    $(document).ready(function () {
19138
19139        // global Accessibility fixes
19140        /*$.each($(".form-control,input,button,h1,h2,h3,h4,h5,h6,p:not(.booth-description-paragraph),.panel-body,li:not(.booth-documents-li),a, label, span:not(.glyphicon, .fa,.docico),img"), function(){
19141            // OMITING FORM BUILDER INPUTS - AJ
19142            if(!$(this).parents('.em4r5').length){
19143                let get_this_element_tab_index = $(this);
19144                let get_text_tab_index = $(this).text().trim();
19145                if(get_text_tab_index!=""){
19146                    get_this_element_tab_index.attr("tabindex","0");
19147                }else{
19148                    get_this_element_tab_index.removeAttr("tabindex");
19149                }
19150            }
19151        });*/
19152        const $targets = $(".form-control,input,button,h1,h2,h3,h4,h5,h6,p:not(.booth-description-paragraph),.panel-body,li:not(.booth-documents-li),a,label,span:not(.glyphicon, .fa,.docico),img").not('input[type="hidden"], [type="hidden"], input[name="appID"], input[name="formID"], #appID, #formID');
19153
19154        $.each($targets, function () {
19155            // OMITTING FORM BUILDER INPUTS - AJ
19156            if (!$(this).parents('.em4r5').length) {
19157                const $el = $(this);
19158                const txt = $el.text().trim();
19159                if (txt !== "") {
19160                    $el.attr("tabindex", "0");
19161                } else {
19162                    $el.removeAttr("tabindex");
19163                }
19164            }
19165        });
19166
19167        $("div[role='heading']").attr("role","banner");
19168
19169        $(".modal").attr("tabindex","-1");
19170
19171        $.each($("a:not(.booth-next-list-li-anchor,.exhibitor-list-items, .booth-hall-grid-view),button,h1,h2,h3,h4,h5,h6,li:not(.booth-users-online, .booth-list-dropdown-li),span, img, input,.track-this-element"), function(){
19172            // OMITING FORM BUILDER INPUTS - AJ
19173            if(!$(this).parents('.em4r5').length){
19174                let get_this_element = $(this);
19175                let get_text = get_this_element.text().trim();
19176                let get_text_alt = get_this_element.attr("alt");
19177                let get_text_title = get_this_element.attr("title");
19178
19179                if(get_text==="" && get_text_alt!=="" && get_text_alt!=="×" && get_text_alt !== 'undefined'){
19180                    const aria_labels_htmlParser= new DOMParser().parseFromString(get_text_alt, 'text/html');
19181                    if(aria_labels_htmlParser.body.textContent !== 'undefined'){
19182                        get_this_element.attr("aria-label", aria_labels_htmlParser.body.textContent);
19183                    }
19184                }
19185
19186                if(get_text!=="" && get_text!=="×" && get_text !== 'undefined'){
19187                    const aria_labels_get_text_htmlParser= new DOMParser().parseFromString(get_text, 'text/html');
19188                    if(aria_labels_get_text_htmlParser.body.textContent !== 'undefined'){
19189                        get_this_element.attr("aria-label", aria_labels_get_text_htmlParser.body.textContent);
19190                    }
19191                }
19192
19193                if(get_text_title !=='' && get_text_title !== 'undefined'){
19194                    const aria_labels_get_title_htmlParser= new DOMParser().parseFromString(get_text_title, 'text/html');
19195                    if(aria_labels_get_title_htmlParser.body.textContent !== 'undefined'){
19196                        get_this_element.attr("aria-label", aria_labels_get_title_htmlParser.body.textContent);
19197                    }
19198                }
19199
19200                if(get_this_element.prop("tagName")==="INPUT" && get_this_element.attr("value") !== '' && get_this_element.attr("value") !== 'undefined'){
19201                    const aria_labels_get_value_htmlParser= new DOMParser().parseFromString(get_this_element.attr("value"), 'text/html');
19202
19203                    if(aria_labels_get_value_htmlParser.body.textContent !== 'undefined'){
19204                        get_this_element.attr("aria-label", aria_labels_get_value_htmlParser.body.textContent);
19205                    }
19206                }
19207            }
19208        });
19209        // remove from these hidden fields to avoid auto complete issue
19210        ['uuiid','unique_token','user_id','booth_id','access_id','appID','formID','webinar_id'].forEach(function (name) {
19211            $('input[type="hidden"][name="' + name + '"], input[type="hidden"]#' + name).removeAttr('tabindex');
19212        });
19213        // end global Accessibility fixes
19214
19215
19216                    adjustTimeZone(EventTimeZoneName);
19217        
19218        //For redirection of App on Mobile view.
19219        if(EnableMobileWeb === '1'){
19220            if(isMobile()!=null){
19221                //window.location = "https://m.vfairs.com/?appId="+app_id;
19222            }
19223        }
19224        
19225        if(IsLogedin && IsEventLive){
19226            $(".hide-on-login").hide();
19227            $(".show-on-login").show();
19228        }else{
19229          $(".hide-on-login").show();
19230          $(".show-on-login").hide();
19231        }
19232
19233        $(document).on("click", ".read-more-text", function(){
19234            $($(this).attr("data-target")).slideToggle();
19235        });
19236
19237        $(document).on("click", "#guest_login", function(){
19238          $('#LoginModal').remove();
19239          $("#auto-login-frm").submit();
19240        });
19241        
19242        if(IsinIframe()){
19243            $("#privacy_sticky,footer").hide();
19244        }
19245
19246        if(app_id==550){
19247            $("#LoginModal").modal({
19248                backdrop: 'static',
19249                keyboard: false
19250            });
19251        }
19252                // Resend Email
19253        $('.resendbtn').on('click',function(){
19254            // debugger;
19255            var update_token_url = location.protocol + '//' + location.host + "/en/resend_token";
19256            var update_token = new Object();
19257            update_token.AppId = '20550';
19258            update_token.Email = $("#uLoginEmail").val();
19259            update_token.user_id = $("#user_id").val();
19260            var csrfName = 'ci_csrf_token';
19261            var csrfHash = '';
19262            update_token[csrfName] = csrfHash;
19263            $.post(update_token_url, update_token).done(function (resp) {
19264                $('#tokenResponseBox').html("The verification code has been sent again.");
19265                $('#tokenResponseBox').show('slow');
19266                setTimeout(function(){ $('#tokenResponseBox').hide('slow'); }, 10000);
19267                startTimer(60);
19268            })
19269        })
19270        // end Resend Email
19271        function startTimer(duration) {
19272            $('.resendbtn').attr('disabled',true)
19273            console.log('TEST',duration)
19274            var timer = duration, minutes, seconds;
19275            var x = setInterval(function () {
19276                minutes = parseInt(timer / 60, 10);
19277                seconds = parseInt(timer % 60, 10);
19278
19279                minutes = minutes < 10 ? "0" + minutes : minutes;
19280                seconds = seconds < 10 ? "0" + seconds : seconds;
19281
19282                // display.textContent = minutes + ":" + seconds;
19283
19284                if (--timer < 0) {
19285                    //timer = duration;
19286                    $('.resendbtn').removeAttr('disabled')
19287                    clearInterval(x);
19288                }
19289                $('#countdown-timer').html(minutes+":"+seconds);
19290            }, 1000);
19291        }
19292        
19293        if ($('#clockdiv').length > 0) {
19294            var deadline = -3972432000;
19295            if (deadline > 0) {
19296                initializeClock('clockdiv', deadline);
19297            }else{
19298                setCountdownTextCallback();
19299            }
19300        }
19301        $(".less-characters,.less-characters-btn").on("click", function () {
19302            $(".more-characters").show();
19303            //$(this).hide();
19304        });
19305        $(".more-characters").on("click", function () {
19306            //$(".less-characters").show();
19307            //$(this).hide();
19308        });
19309                    if (IsLogedin && IsEventLive && "false" == 'false') {
19310                $("a[data-target=#LoginModal]").attr("href", "/en/hall").removeAttr("data-target").html("Login / Access the Online Event");
19311                $('.hide-on-login').hide();
19312                $('.hide-on-login').addClass('hide');
19313                $('.show-on-login').show();
19314            }
19315                    setTimeout(function () {
19316            $(".slider-thumb-img:first").trigger("click");
19317        }, 1000);
19318        $(".slider-thumb-img").on("click", function () {
19319            var title = $(this).attr("title");
19320            var largeimage = $(this).attr("data-img");
19321            var description = $(this).attr("data-description");
19322            var text = $(this).children(".slider-thumb-text-box").html();
19323            $(".image-heading-text").hide().html(title).fadeIn(900);
19324            if(description!=""){
19325                $(".image-description-text").hide().html(description).fadeIn(900);
19326            }
19327            $("#large-image-box-slider").hide().attr("src", largeimage).fadeIn(900);
19328            $(".image-info-text").html(text);
19329        });
19330
19331                                    });
19332
19333
19334    // Forms Validations for employer_reg page
19335    $(document).ready(function () {
19336                        $("#Main-Login-Frm input[name='Password']").attr("disabled", true).val("");
19337        if (IsLogedin && IsEventLive && $.inArray(parseInt(app_id), [526, 690])!=0 ) {
19338            /*$("button:contains('Click Here To Login'),button:contains('Enter the Virtual Event')").on("click", function () {
19339                window.location = window.location.origin + "/en/hall";
19340            });
19341            //$("button:contains('Click Here To Login')").html("Enter the Virtual Event");*/
19342        }
19343        $("#LogoutBtn").on("click", function () {
19344            window.location = window.location.origin + '/en/logout';
19345        });
19346        $("#ShowLoginBox-for-attend").on("click", function () {
19347            if (IsLogedin && IsEventLive) {
19348                window.location = window.location.origin + '/en/attend-and-win-feed-back';
19349            } else {
19350                $("input[name='login-red'][type='hidden']").val(window.location.origin + "/en/attend-and-win-feed-back");
19351                $("#LoginBtn").trigger("click");
19352            }
19353        });
19354        // Get Stats of Total Registrations
19355                // End Get Total Registrations Stats
19356
19357        $(".showsamples").on("click", function () {
19358            $('#cv-samples').modal({
19359                keyboard: true
19360            });
19361        });
19362        // Video Player Box
19363        $(".fancylinkIframeCustomAsh").on("click", function () {
19364            var url = ($(this).attr("href") == '#1' ? "https://vep.b8cdn.com/test-drive/videos/vid-en-14-06-2015.html" : "https://vep.b8cdn.com/test-drive/videos/vid-ar-14-06-2015.html");
19365            var BuildHTML = "<iframe width='100%' height='100%' border='0' src='" + url + "'></iframe>";
19366            $("#VideoPlayerModal-Content").html(BuildHTML);
19367            $('#VideoPlayerModal').modal({
19368                keyboard: true
19369            });
19370        });
19371        $('#VideoPlayerModal').on('hidden.bs.modal', function (e) {
19372            $("#VideoPlayerModal-Content").html("");
19373        });
19374
19375        // VFF Foras (Iraq)
19376        $(".TrackForas-Visitors").on("click", function () {
19377            var ClickType = $(this).attr("id").replace("Foras-Count-", "");
19378            var TrackURL = window.location.origin + "/en/forasvisitorsupdate";
19379            var TrackObj = new Object();
19380            TrackObj.AppId = 103;
19381            TrackObj.ClickType = ClickType;
19382            TrackObj.Lang = 'en';
19383            $.post(TrackURL, TrackObj).done(function (resp) {
19384                // Response Received Filter response
19385                var re = /\s\s+/g;
19386                resp = resp.replace(re, ' ');
19387                RespObject = JSON.parse(resp);
19388            });
19389        });
19390        // End VJF Foras (Iraq)
19391
19392
19393        // eFair Harcode things
19394        $("select[name='field_id_1237510']").on('change', function () {
19395            var getthis = $(this);
19396            if (getthis.val() != "") {
19397                getthis.closest(".ctrl-hdn-cstm").next(".ctrl-hdn-cstm").hide();
19398                $("#field_id_1237512").parent().parent(".ctrl-hdn-cstm").hide();
19399            } else {
19400                getthis.closest(".ctrl-hdn-cstm").next(".ctrl-hdn-cstm").show();
19401                $("#field_id_1237512").parent().parent(".ctrl-hdn-cstm").show();
19402            }
19403        });
19404        $("select[name='field_id_1237511']").on('change', function () {
19405            var getthis = $(this);
19406            if (getthis.val() != "") {
19407                getthis.closest(".ctrl-hdn-cstm").prev(".ctrl-hdn-cstm").hide();
19408                $("select[name='field_id_1237513']").parent().parent(".ctrl-hdn-cstm").hide();
19409            } else {
19410                getthis.closest(".ctrl-hdn-cstm").prev(".ctrl-hdn-cstm").show();
19411                $("select[name='field_id_1237513']").parent().parent(".ctrl-hdn-cstm").show();
19412            }
19413        });
19414        //
19415
19416        $("#launch").hide();
19417        
19418        // Hardcode for Are you Student ? eFair (78)
19419        $("input[name='field_id_1237508']").on('change', function () {
19420            var PrevJobField = $(this).parents().closest(".form-group").prev('.form-group');
19421            var SelectedVal = $("input[name='field_id_1237508']:checked").val();
19422            var ChildItems = $(this).parent().closest(".form-group").nextAll('.ctrl-hdn-cstm');
19423            if (SelectedVal == '1') {
19424                PrevJobField.hide();
19425                $("#field_id_43012").rules("add", {
19426                    Student: true,
19427                    messages: {
19428                        Student: "Please enter a valid Abu Dhabi University student email!",
19429                    }
19430                });
19431                ChildItems.show();
19432            } else {
19433                PrevJobField.show();
19434                $("#field_id_43012").rules("remove", "Student");
19435                ChildItems.hide();
19436            }
19437        });
19438
19439
19440        // Hardcode for Secondory City selection (MOH 107)
19441        $("select[name='field_id_1237503']").on('change', function () {
19442
19443            var Select1 = "<option value=''>-- Select --</option><option value='Ahsa'>Ahsa</option><option value='Al Taif'>Al Taif</option><option value='Al Qunfudhah'>Al Qunfudhah</option>";
19444            var Select2 = "<option value=''>-- Select --</option><option value='Hail'>Hail</option><option value='Qatif'>Qatif</option><option value='Jouf'>Jouf</option>";
19445            var Select3 = "<option value=''>-- Select --</option><option value='Bisha'>Bisha</option><option value='Hafr al Batin'>Hafr al Batin</option><option value='Northern Boarders'>Northern Boarders</option>";
19446            var Select4 = "<option value=''>-- Select --</option><option value='Bisha'>Bisha</option><option value='Hail'>Hail</option><option value='Al Ahsa'>Al Ahsa</option>";
19447            var Select5 = "<option value=''>-- Select --</option><option value='Hafr Al Batin'>Hafr Al Batin</option><option value='Al Qatif'>Al Qatif</option><option value='Al Qunfudhah'>Al Qunfudhah</option>";
19448
19449            if ($(this).val() == '1') {
19450                $("select[name='field_id_1237507']").html(Select1);
19451            } else if ($(this).val() == '2') {
19452                $("select[name='field_id_1237507']").html(Select2);
19453            }
19454            else if ($(this).val() == '3') {
19455                $("select[name='field_id_1237507']").html(Select3);
19456            } else if ($(this).val() == '4') {
19457                $("select[name='field_id_1237507']").html(Select4);
19458            } else {
19459                $("select[name='field_id_1237507']").html(Select5);
19460            }
19461            $("select[name='field_id_1237507']").parent().parent().show();
19462        });
19463
19464
19465        // Hardcode for licence selection (MOH 107)
19466        $("select[name='field_id_1237504']").on('change', function () {
19467            if ($(this).val() == '1') {
19468                $(this).parent().parent().nextAll(':lt(2)').show();
19469            } else {
19470                $(this).parent().parent().nextAll(':lt(2)').hide();
19471            }
19472        });
19473
19474        
19475         
19476        $("select[name='field_id_1242077']").on("change",function(){
19477            var myValues = $(this).val();
19478            if(myValues==1){
19479                $("#group-container-field_id_1242077 p.help-block").html("<ul class='drop-down-help-font'><li>A great way to go further with Ford is to join the company through the Ford College Graduate (FCG) program. Most departments offer these programs, which provide recent college graduates a variety of rotational job assignments during their first few years with Ford Motor Company.</li><li>Through the rotational assignments, the programs’ objective is to strengthen the FCGs business acumen and technical skills through rapid exposure to varied business activities.</li><li>Upon completion of the program, the FCGs “graduates” and is placed within his or her home department to continue building a career at Ford.</li><li>
19479 To learn more about Ford’s College Graduate Program, <a target='_blank' href='https://corporate.ford.com/careers/students-and-recent-grads.html'>click here</a>.</li></ul>");
19480            }else if(myValues==2){
19481                $("#group-container-field_id_1242077 p.help-block").html("<ul class='drop-down-help-font'><li>The Ford Summer Internship Program provides students with hands-on, career-specific experience through full-time work during summer break (from early-May through the end of August). Students are engaged in networking and educational activities throughout their internship to gain exposure to senior level management and to learn more about Ford, our values and career opportunities.</li><li>Most Summer Interns will have just completed their junior year of an undergraduate program or one academic year of a Master's program and are expecting to graduate the following year. Generally, candidates are selected for having top academic standing, as well as exceptional leadership, communication and self-motivation skills.</li></ul>");
19482            }else if(myValues==3){
19483                $("#group-container-field_id_1242077 p.help-block").html("<ul class='drop-down-help-font'><li>When you join Ford Motor Company, your journey begins. You become part of skilled and motivated teams making inspired products that create a better world. If that sounds extraordinary to you, you may have just reached the end of your career search. Check out our opportunities for experienced professionals.</li></ul>");
19484            }else{
19485                $("#group-container-field_id_1242077 p.help-block").html("");
19486            }
19487        });
19488
19489        $("select[name='field_id_1242084']").on("change",function(){
19490            var myValues = $(this).val();
19491            if(myValues==1){
19492                $("#group-container-field_id_1242084 p.help-block").html("<ul class='drop-down-help-font'><li>Neurodiverse, Autism and Disability Hiring Program</li><li>To learn more about FordWorks program, <a href='https://corporate.ford.com/careers/fordworks.html' target='_blank'>click here</a></li></ul>");
19493            }else if(myValues==2){
19494                $("#group-container-field_id_1242084 p.help-block").html("<ul class='drop-down-help-font'><li>Ford's re-entry program aims to help career re-launchers get back into the workforce. The program is looking for candidates who have taken a career break or have been underemployed for two or more years. Ford offers re-entry candidates a full-time position while providing tools to successfully re-acclimate into the workforce.)</li><li>To learn more about Ford's Re-Entry program, <a href='https://corporate.ford.com/careers/re-entry-program.html' target='_blank'>click here</a>.</li></ul>");
19495            }else{
19496                $("#group-container-field_id_1242084 p.help-block").html("");
19497            }
19498        });
19499           
19500   
19501
19502
19503
19504                // invite to vfairs form
19505        $("#invite_to_vfair_form").validate({
19506            rules: {
19507                'email[]': {
19508                    require_from_group: [1, ".email-group"],
19509                    email:true
19510                }
19511            },
19512            highlight: function (element) {
19513                $(element).closest('.form-group').addClass('has-error');
19514            },
19515            unhighlight: function (element) {
19516                $(element).closest('.form-group').removeClass('has-error');
19517            },
19518            errorElement: 'span',
19519            errorClass: 'help-block',
19520            errorPlacement: function (error, element) {
19521                if (element.parent('.input-group').length) {
19522                    error.insertAfter(element.parent());
19523                } else {
19524                    error.insertAfter(element);
19525                }
19526            },
19527            submitHandler: function () {
19528                $(".invite-to-vfair-form-container .alert").remove();
19529
19530                var FeedBackURL = window.location.origin + "/en/invite_to_vfair";
19531                var inviter_name = "";
19532                var inviter_email = "";
19533                if( $("#invite_to_vfair_form input[name='inviter_name']").length==0){
19534                    $("#invite_to_vfair_form").prepend("<input type='hidden' name='inviter_name' value='" + inviter_name + "'/>");
19535                }
19536                if( $("#invite_to_vfair_form input[name='inviter_email']").length==0){
19537                    $("#invite_to_vfair_form").prepend("<input type='hidden' name='inviter_email' value='" + inviter_email + "'/>");
19538                }
19539                $.post(FeedBackURL, $("#invite_to_vfair_form").serialize()).done(function (server_response) {
19540                    var re = /\s\s+/g;
19541                    var response = server_response.replace(re, ' ');
19542                    var object = JSON.parse(response);
19543                    if (object.status) {
19544                        $(".invite-to-vfair-description").hide();
19545                        $(".invite-to-vfair-form-container").html("<div class='col-sm-8 alert alert-success'>" + object.message +"</div>");
19546                    } else {
19547                        $(".invite-to-vfair-form-container").append("<div class='col-sm-8 alert alert-danger'>" + object.message +"</div>");
19548                    }
19549                });
19550            }
19551        });
19552
19553        // Script for Bayt.Careers
19554        $("#feedbackfrm").validate({
19555            rules: {
19556                experience: {
19557                    minlength: 50,
19558                    maxlength: 400,
19559                    required: true
19560                },
19561                rate: {
19562                    minlength: 50,
19563                    maxlength: 400,
19564                    required: true
19565                },
19566                useful: {
19567                    minlength: 50,
19568                    maxlength: 400,
19569                    required: true
19570                },
19571                service: {
19572                    minlength: 50,
19573                    maxlength: 400,
19574                    required: true
19575                }
19576            },
19577            highlight: function (element) {
19578                $(element).closest('.form-group').addClass('has-error');
19579            },
19580            unhighlight: function (element) {
19581                $(element).closest('.form-group').removeClass('has-error');
19582            },
19583            errorElement: 'span',
19584            errorClass: 'help-block',
19585            errorPlacement: function (error, element) {
19586                if (element.parent('.input-group').length) {
19587                    error.insertAfter(element.parent());
19588                } else {
19589                    error.insertAfter(element);
19590                }
19591            },
19592            submitHandler: function () {
19593                var FeedBackURL = window.location.origin + "/en/feed_back_attend_win";
19594                var FeedBack = new Object();
19595                FeedBack.AppId = 108;
19596                FeedBack.Lang = 'en';
19597                FeedBack.experience = $("#experience").val();
19598                FeedBack.rate = $("#rate").val();
19599                FeedBack.useful = $("#useful").val();
19600                FeedBack.service = $("#service").val();
19601                $.post(FeedBackURL, FeedBack).done(function (resp) {
19602                    var re = /\s\s+/g;
19603                    resp = resp.replace(re, ' ');
19604                    RespObject = JSON.parse(resp);
19605                    if (RespObject.Status) {
19606                        $("#FeedBackResponseMsg").removeClass("FormResponseError").addClass("FormResponseSuccess").html(RespObject.Message);
19607                        $('#feedbackfrm')[0].reset();
19608                    } else {
19609                        if (RespObject.Message == "Please login first.") {
19610                            $("#LoginBtn").trigger("click");
19611                            $("#ResponseBox").html(RespObject.Message).show();
19612                        } else {
19613                            $("#FeedBackResponseMsg").removeClass("FormResponseSuccess").addClass("FormResponseError").html(RespObject.Message);
19614                        }
19615                    }
19616                });
19617            }
19618        });
19619        // End Script Bayt Careers
19620
19621
19622        // Participation form for crisil.vfairs.com (564)
19623        $("#participation-confirmation-form").validate({
19624            rules: {
19625                participant_email: {
19626                    required: true,
19627                    email:true
19628                }
19629            },
19630            highlight: function (element) {
19631                $(element).closest('.form-group').addClass('has-error');
19632            },
19633            unhighlight: function (element) {
19634                $(element).closest('.form-group').removeClass('has-error');
19635            },
19636            errorElement: 'span',
19637            errorClass: 'help-block',
19638            errorPlacement: function (error, element) {
19639                if (element.parent('.input-group').length) {
19640                    error.insertAfter(element.parent());
19641                } else {
19642                    error.insertAfter(element);
19643                }
19644            },
19645            submitHandler: function () {
19646                $("#error-box-participation-form").hide();
19647                var ParticipationObj = new Object();
19648                ParticipationObj.AppId = 564;
19649                ParticipationObj.Lang = 'en';
19650                ParticipationObj.email = $("#participant_email").val();
19651
19652                $.post(window.location.origin + "/en/participation_confirmation", ParticipationObj).done(function (resp) {
19653                    var re = /\s\s+/g;
19654                    resp = resp.replace(re, ' ');
19655                    RespObject = JSON.parse(resp);
19656                    if (RespObject.status) {
19657                        $("#participation-modal .modal-body").html(RespObject.message);
19658                    } else {
19659                        $("#error-box-participation-form").html(RespObject.message).show();
19660                    }
19661                });
19662            }
19663        });
19664
19665        $("#call_for_proposal_form").validate({
19666            rules: {
19667                what_kind_of_session:{required:true},
19668                session_format:{required:true},
19669                session_title:{required:true},
19670                session_abstract:{required:true},
19671                session_full_description:{required:true},
19672                action_take_away_1:{required:true},
19673                action_take_away_2:{required:true},
19674                action_take_away_3:{required:true},
19675
19676                speaker_full_name:{required:true},
19677                speaker_email_address:{required:true,email:true},
19678                speaker_title:{required:true},
19679                speaker_organization:{required:true},
19680                speaker_phone:{required:true},
19681                speaker_social:{required:true},
19682                other_speakers_multiple:{required:true},
19683                list_any_speaking_engagements:{required:true},
19684                speaker_bios:{required:true},
19685                link_speaker_headshots:{required:true},
19686            },
19687            highlight: function (element) {
19688                $(element).closest('.form-group').addClass('has-error');
19689            },
19690            unhighlight: function (element) {
19691                $(element).closest('.form-group').removeClass('has-error');
19692            },
19693            errorElement: 'span',
19694            errorClass: 'help-block',
19695            errorPlacement: function (error, element) {
19696                if (element.parent('.input-group').length) {
19697                    error.insertAfter(element.parent());
19698                } else {
19699                    error.insertAfter(element);
19700                }
19701            },
19702            submitHandler: function () {
19703                var CallForProp = new Object();
19704                CallForProp.AppId = 549;
19705                CallForProp.what_kind_of_session =  $("#what_kind_of_session").val();
19706                CallForProp.session_format =  $("#session_format").val();
19707                CallForProp.session_title =  $("#session_title").val();
19708                CallForProp.session_abstract =  $("#session_abstract").val();
19709                CallForProp.session_full_description =  $("#session_full_description").val();
19710                CallForProp.action_take_away_1 =  $("#action_take_away_1").val();
19711                CallForProp.action_take_away_2 =  $("#action_take_away_2").val();
19712                CallForProp.action_take_away_3 =  $("#action_take_away_3").val();
19713                CallForProp.speaker_full_name =  $("#speaker_full_name").val();
19714                CallForProp.speaker_email_address =  $("#speaker_email_address").val();
19715                CallForProp.speaker_title =  $("#speaker_title").val();
19716
19717                CallForProp.target_audience = $('#treeview-container').treeview('selectedValues').join(", ");
19718
19719                CallForProp.speaker_organization =  $("#speaker_organization").val();
19720                CallForProp.speaker_phone =  $("#speaker_phone").val();
19721                CallForProp.speaker_social =  $("#speaker_social").val();
19722                CallForProp.other_speakers_multiple =  $("#other_speakers_multiple").val();
19723                CallForProp.list_any_speaking_engagements =  $("#list_any_speaking_engagements").val();
19724                CallForProp.speaker_bios =  $("#speaker_bios").val();
19725                CallForProp.link_speaker_headshots =  $("#link_speaker_headshots").val();
19726                CallForProp.type =  "CALL_FOR_PROPOSAL";
19727
19728                $.post(window.location.origin + "/en/call_for_proposal_form", CallForProp).done(function (resp) {
19729                    var re = /\s\s+/g;
19730                    resp = resp.replace(re, ' ');
19731                    RespObject = JSON.parse(resp);
19732                    if (RespObject.status) {
19733                        $("#call_for_proposal_form div.row").html("<div class='col-sm-12'><h2>Thank you for submission.</h2></div>");
19734                    } else {
19735                        $("#call_for_proposal_form div.row").html("<p>Can not submit your proposal, please try again.</p>").show();
19736                    }
19737                });
19738            }
19739        });
19740
19741
19742        $(".submitbtns").click(function () {
19743            $(".submitbtns").attr("name", "false");
19744            $(this).attr("name", "true");
19745        });
19746
19747
19748        var regValidateRules = {
19749            firstname: {minlength: 3, maxlength: 15, required: true},
19750            email: {required: true, email: true},
19751            companyname: {minlength: 3, required: true},
19752            category: {required: true},
19753            Number: {minlength: 3, required: true, number: false},
19754            industry: {required: true}
19755        }
19756
19757                regValidateRules.CompanyURL = {required: false};
19758        //regValidateRules.Location = {minlength: 3, required: true};
19759        regValidateRules.Designation = {minlength: 3, required: true};
19760        regValidateRules.classifyuser = {required: true};
19761        
19762        $('#RegisterFrm').validate({
19763            rules: regValidateRules,
19764            highlight: function (element) {
19765                $(element).closest('.form-group').addClass('has-error');
19766            },
19767            unhighlight: function (element) {
19768                $(element).closest('.form-group').removeClass('has-error');
19769            },
19770            errorElement: 'span',
19771            errorClass: 'help-block',
19772            errorPlacement: function (error, element) {
19773                if (element.parent('.input-group').length) {
19774                    error.insertAfter(element.parent());
19775                } else {
19776                    error.insertAfter(element);
19777                }
19778                return false; // <<- returning false stops the page reload
19779            },
19780            submitHandler: function (e) {
19781
19782                $("#RegisterFrm button").prop("disabled",true).text("Please wait.....");
19783                var TrackURL = window.location.origin + "/en/update_employer_registration";
19784                var TrackObj = new Object();
19785                TrackObj.AppId = '20550';
19786                TrackObj.Lang = 'en';
19787                TrackObj.firstname = $("#firstname").val();
19788                TrackObj.lastname = $("#lastname").val();
19789                TrackObj.email = $("#email").val();
19790                TrackObj.companyname = $("#companyname").val();
19791                TrackObj.category = $("#category").val();
19792                TrackObj.vendor = $("#vendor").val();
19793                TrackObj.other_vendor = $("#other_vendor").val();
19794                TrackObj.LearningOutcomes = $("#LearningOutcomes").val();
19795                T
19795rackObj.SessionTopic = $("#SessionTopic").val();
19796                TrackObj.phone = $("#phone").val();
19797                TrackObj.howdoyouhear = $("#howdoyouhear").val();
19798                TrackObj.time_zone = $("#time_zone").val();
19799                TrackObj.city = ($("#city").length > 0 ? $("#city").val() : "");
19800                TrackObj.state = ($("#state").length > 0 ? $("#state").val() : "");
19801                TrackObj.zipcode = ($("#zipcode").length > 0 ? $("#zipcode").val() : "");
19802
19803                
19804                                TrackObj.CompanyURL = $("#CompanyURL").val();
19805                TrackObj.Location = $("#Location").val();
19806                TrackObj.Designation = $("#Designation").val();
19807                TrackObj.Number = $("#Number").val();
19808                TrackObj.classifyuser = $("#classifyuser").val();
19809                TrackObj.Message = $("#Message").val();
19810                TrackObj.industry = $("#industry").val();
19811                TrackObj.RegisterType = ($("#RegisterBtn").attr("name") == 'true' ? true : false);
19812
19813                $.post(TrackURL, TrackObj).done(function (resp) {
19814                    var re = /\s\s+/g;
19815                    resp = resp.replace(re, ' ');
19816                    RespObject = JSON.parse(resp);
19817                    if (RespObject.Status) {
19818                        $('#RegisterFrm')[0].reset();
19819                        $(".form-area").hide();
19820                        if (TrackObj.AppId == 160) {
19821                            $('<div class="text-center"><a href="#" class="btn-yellow">Download Sponsorship and Exhibitor Packages</a></div>').insertAfter("#ResponseMsg");
19822                        }
19823                        if (TrackObj.AppId == 664) {
19824                            $('<div class="msg alert-success">
19824Thank you for showing interest. Our team will contact you soon.</div>').insertAfter("#response");
19825                        }
19826                        $(".page-description-area").hide();
19827                        $("#ResponseMsg").removeClass("alert-danger").addClass("alert-success").html(RespObject.Message).show();
19828                    } else {
19829                        $("#RegisterFrm button").prop("disabled",false);
19830                        $("#ResponseMsg").removeClass("alert-success").addClass("alert-danger").html(RespObject.Message).show();
19831                    }
19832                    return false; // <<- returning false stops the page reload
19833                });
19834
19835                $("#RegisterFrm button").prop("disabled",false);
19836                return false; // <<- returning false stops the page reload
19837            }
19838        });
19839    });
19840
19841    /// Validation End
19842    
19843
19844
19845
19846    // Forgot Password Section Start
19847
19848    // Hide login modal on showing reset password modal
19849    $('#forgot-pwd-modal').on('shown.bs.modal', function (e) {
19850        $("#forgot-pwd-responseBox").html("").hide();
19851        $('#LoginModal').modal('hide');
19852    });
19853
19854    // Validate and reset call for forgot password
19855    var PassresetValidateRules = {
19856        resetemail: {required: true, email: true}
19857    };
19858
19859        $('#reset-pwd-frm').validate({
19860        rules: PassresetValidateRules,
19861        highlight: function (element) {
19862            $(element).closest('.form-group').addClass('has-error');
19863        },
19864        unhighlight: function (element) {
19865            $(element).closest('.form-group').removeClass('has-error');
19866        },
19867        errorElement: 'span',
19868        errorClass: 'help-block',
19869        errorPlacement: function (error, element) {
19870            if (element.parent('.input-group').length) {
19871                error.insertAfter(element.parent());
19872            } else {
19873                error.insertAfter(element);
19874            }
19875        },
19876        submitHandler: function () {
19877            var PwdResetURL = location.protocol + '//' + location.host + "/en/reset_user_password";
19878                        var ResetPwdObj = new Object();
19879            ResetPwdObj.AppId = '20550';
19880            ResetPwdObj.Lang = 'en';
19881            ResetPwdObj.Email = $("#resetemail").val();
19882            ResetPwdObj.pwd = ($("#pwd").length > 0 ? $("#pwd").val() : "");
19883            var csrfName = 'ci_csrf_token';
19884            var csrfHash = '';
19885            ResetPwdObj[csrfName] = csrfHash;
19886
19887            $.post(PwdResetURL, ResetPwdObj).done(function (resp) {
19888                var re = /\s\s+/g;
19889                resp = resp.replace(re, ' ');
19890                RespObject = JSON.parse(resp);
19891                if (RespObject.Status) {
19892                    $('#reset-pwd-frm')[0].reset();
19893                    $("#forgot-pwd-responseBox").removeClass("FormResponseError").addClass("FormResponseSuccess").html(RespObject.Message).show();
19894                } else {
19895                    $("#forgot-pwd-responseBox").removeClass("FormResponseSuccess").addClass("FormResponseError").html(RespObject.Message).show();
19896                }
19897                if (typeof passwordResetCallBack !== 'undefined') {
19898                    passwordResetCallBack(RespObject);
19899                }
19900            });
19901        }
19902    });
19903
19904    // Forgot Password Section End //
19905
19906    // update on login consent + password (768)
19907    $('#update_pwd_frm_update_consent').validate({
19908      rules: {
19909        uLoginEmail: {required: true, email: true},
19910        uPassword: {required: true, minlength: 5},
19911        uConfirmPassword: {required: true, minlength: 5, equalTo: "#uPassword"},
19912        uConsent: {required: true},
19913      },
19914      highlight: function (element) {
19915        $(element).closest('.form-group').addClass('has-error');
19916      },
19917      unhighlight: function (element) {
19918        $(element).closest('.form-group').removeClass('has-error');
19919      },
19920      errorElement: 'span',
19921      errorClass: 'help-block',
19922      errorPlacement: function (error, element) {
19923        if (element.parent('.input-group').length) {
19924          error.insertAfter(element.parent());
19925        } else {
19926          error.insertAfter(element);
19927        }
19928      },
19929      submitHandler: function () {
19930        var update_pwd_url = location.protocol + '//' + location.host + "/en/update_new_user_password_on_login";
19931        var update_pwd = new Object();
19932        update_pwd.AppId = '20550';
19933        update_pwd.token = $("#pwd-reset-update-token-id").val();
19934        update_pwd.newpassword = $("#uConfirmPassword").val();
19935        update_pwd.Lang = 'en';
19936        update_pwd.Email = $("#uLoginEmail").val();
19937        update_pwd.consent = ($("#uConsent").is(":checked") ? 1 : 0);
19938        
19939        $.post(update_pwd_url, update_pwd).done(function (resp) {
19940          var re = /\s\s+/g;
19941          resp = resp.replace(re, ' ');
19942          RespObject = JSON.parse(resp);
19943          if (RespObject.Status) {
19944            if(update_pwd.AppId==564){
19945              $('#update-pwd-window-body').html("<div class='form-group message-form-group'><p>Password has been updated successfully, please wait logging you in.</p></div>");
19946              $("input[name='LoginEmail']").val(update_pwd.Email);
19947              $("input[name='LoginEmail']").parents(".form-group:first").append("<input type='hidden' name='auto_login' value='true'/><input type='password' name='Password' value='" + update_pwd.newpassword +"'/>");
19948              setTimeout(function(){
19949                $("#Main-Login-Frm").submit();
19950              },2000);
19951            }else{
19952              $('#update-pwd-window-body').html("<div class='form-group message-form-group'><p>" + RespObject.Message +"</p></div>");
19953            }
19954            $('#update-pwd-window .modal-footer button:last').remove();
19955            $('#update-pwd-window .modal-footer button:last').text("Close");
19956
19957          } else {
19958            $("#update-pwd-window-body .message-form-group").removeClass("FormResponseSuccess").addClass("FormResponseError").html(RespObject.Message).show();
19959          }
19960        });
19961      }
19962    });
19963    // end update on login appid:(768)
19964
19965    // update on login (3568)
19966    $('#update-pwd-Frm_update_consent').validate({
19967        rules: {
19968            uLoginEmail: {required: true, email: true},
19969            uPassword: {required: true, minlength: 5},
19970            uConfirmPassword: {required: true, minlength: 5, equalTo: "#uPassword"},
19971            uConsent: {required: true},
19972            field_id_1273574: {required: true},
19973        },
19974        highlight: function (element) {
19975            $(element).closest('.form-group').addClass('has-error');
19976        },
19977        unhighlight: function (element) {
19978            $(element).closest('.form-group').removeClass('has-error');
19979        },
19980        errorElement: 'span',
19981        errorClass: 'help-block',
19982        errorPlacement: function (error, element) {
19983            if (element.parent('.input-group').length) {
19984                error.insertAfter(element.parent());
19985            } else {
19986                error.insertAfter(element);
19987            }
19988        },
19989        submitHandler: function () {
19990            var update_pwd_url = location.protocol + '//' + location.host + "/en/update_new_user_password_on_login";
19991            var update_pwd = new Object();
19992            update_pwd.AppId = '20550';
19993            update_pwd.token = $("#pwd-reset-update-token-id").val();
19994            update_pwd.newpassword = $("#uConfirmPassword").val();
19995            update_pwd.Lang = 'en';
19996            update_pwd.Email = $("#uLoginEmail").val();
19997            update_pwd.consent = ($("#uConsent").is(":checked") ? 1 : 0);
19998            update_pwd.field_id_1273574 = $("#field_id_1273574").val();
19999            
20000            $.post(update_pwd_url, update_pwd).done(function (resp) {
20001                var re = /\s\s+/g;
20002                resp = resp.replace(re, ' ');
20003                RespObject = JSON.parse(resp);
20004                if (RespObject.Status) {
20005                   
20006                    $('#update-pwd-window-body').html("<div class='form-group message-form-group'><p>" + RespObject.Message +"</p></div>");
20007                    
20008                    $('#update-pwd-window .modal-footer button:last').remove();
20009                    $('#update-pwd-window .modal-footer button:last').text("Close");
20010
20011                } else {
20012                    $("#update-pwd-window-body .message-form-group").removeClass("FormResponseSuccess").addClass("FormResponseError").html(RespObject.Message).show();
20013                }
20014            });
20015        }
20016    });
20017    // end update on login appid:(3568)
20018
20019    // update on login (4467)
20020    $('#update-pwd-Frm_update_extra_fields').validate({
20021        rules: {
20022            uLoginEmail: {required: true, email: true},
20023            uPassword: {required: true, minlength: 5, maxlength: 100},
20024            uConfirmPassword: {required: true, minlength: 5, maxlength: 100,equalTo: "#uPassword"},
20025            uConsent: {required: true},
20026            field_id_1284014: {required: true},
20027            field_id_1284015: {required: true},
20028            field_id_1284016: {required: true},
20029            field_id_1284018: {required: true},
20030            field_id_1284019: {required: true},
20031        },
20032        highlight: function (element) {
20033            $(element).closest('.form-group').addClass('has-error');
20034        },
20035        unhighlight: function (element) {
20036            $(element).closest('.form-group').removeClass('has-error');
20037        },
20038        errorElement: 'span',
20039        errorClass: 'help-block',
20040        errorPlacement: function (error, element) {
20041            if (element.parent('.input-group').length) {
20042                error.insertAfter(element.parent());
20043            } else {
20044                error.insertAfter(element);
20045            }
20046        },
20047        submitHandler: function () {
20048            var update_pwd_url = location.protocol + '//' + location.host + "/en/update_new_user_password_on_login";
20049            var update_pwd = new Object();
20050            update_pwd.AppId = '20550';
20051            update_pwd.token = $("#pwd-reset-update-token-id").val();
20052            update_pwd.newpassword = $("#uConfirmPassword").val();
20053            update_pwd.Lang = 'en';
20054            update_pwd.Email = $("#uLoginEmail").val();
20055            update_pwd.consent = ($("#uConsent").is(":checked") ? 1 : 0);
20056            update_pwd.field_id_1284014 = $("#field_id_1284014").val();
20057            update_pwd.field_id_1284015 = $("#field_id_1284015").val();
20058            update_pwd.field_id_1284016 = $("#field_id_1284016").val();
20059            update_pwd.field_id_1284018 = $("#field_id_1284018").val();
20060            update_pwd.field_id_1284019 = $("#field_id_1284019").val();
20061            update_pwd.field_id_1284020 = $("#field_id_1284020").val();
20062            
20063            $.post(update_pwd_url, update_pwd).done(function (resp) {
20064                var re = /\s\s+/g;
20065                resp = resp.replace(re, ' ');
20066                RespObject = JSON.parse(resp);
20067                if (RespObject.Status) {
20068                   
20069                    $('#update-pwd-window-body').html("<div class='form-group message-form-group'><p>" + RespObject.Message +"</p></div>");
20070                    
20071                    $('#update-pwd-window .modal-footer button:last').remove();
20072                    $('#update-pwd-window .modal-footer button:last').text("Close");
20073
20074                } else {
20075                    $("#update-pwd-window-body .message-form-group").removeClass("FormResponseSuccess").addClass("FormResponseError").html(RespObject.Message).show();
20076                }
20077            });
20078        }
20079    });
20080    // end update on login appid:(4467)
20081    // update on login (4827)
20082    $('#update-pwd-Frm_update_school_field').validate({
20083        rules: {
20084            uLoginEmail: {required: true, email: true},
20085        },
20086        highlight: function (element) {
20087            $(element).closest('.form-group').addClass('has-error');
20088        },
20089        unhighlight: function (element) {
20090            $(element).closest('.form-group').removeClass('has-error');
20091        },
20092        errorElement: 'span',
20093        errorClass: 'help-block',
20094        errorPlacement: function (error, element) {
20095            if (element.parent('.input-group').length) {
20096                error.insertAfter(element.parent());
20097            } else {
20098                error.insertAfter(element);
20099            }
20100        },
20101        submitHandler: function () {
20102            var update_pwd_url = location.protocol + '//' + location.host + "/en/update_new_user_password_on_login";
20103            var update_pwd = new Object();
20104            update_pwd.AppId = '20550';
20105            update_pwd.token = $("#pwd-reset-update-token-id").val();
20106            update_pwd.Lang = 'en';
20107            update_pwd.Email = $("#uLoginEmail").val();
20108            update_pwd.field_id_1290124 = $("#field_id_1290124").val();
20109            
20110            $.post(update_pwd_url, update_pwd).done(function (resp) {
20111                var re = /\s\s+/g;
20112                resp = resp.replace(re, ' ');
20113                RespObject = JSON.parse(resp);
20114                if (RespObject.Status) {
20115                    $('#update-pwd-window-body').html("<div class='form-group message-form-group'><p>" + RespObject.Message +"</p></div>");
20116                    $("input[name='LoginEmail']").val(update_pwd.Email);
20117                    $("input[name='LoginEmail']").parents(".form-group:first").append("<input type='hidden' name='auto_login' value='true'/>");
20118                    setTimeout(function(){
20119                        $("#Main-Login-Frm").submit();
20120                    },2000);
20121                } else {
20122                    $("#update-pwd-window-body .message-form-group").removeClass("FormResponseSuccess").addClass("FormResponseError").html(RespObject.Message).show();
20123                }
20124            });
20125        }
20126    });
20127    // end update on login appid:(4827)
20128
20129    
20130
20131    var password_reset_rules = {
20132      updatepwdemail: {required: true, email: true},
20133      updatepwdnewpwd: {required: true, minlength: 5,maxlength:100},
20134      updatepwdconfirm: {required: true, minlength: 5, maxlength:100,equalTo: "#updatepwdnewpwd"}
20135    };
20136
20137    var set_password_first_login = {
20138        uLoginEmail: {required: true,email: true},
20139        uPassword: {required: true, minlength: 5},
20140        uConfirmPassword: {required: true, minlength: 5, equalTo: "#uPassword"}
20141    };
20142
20143    if(app_id==1389){
20144        $.validator.addMethod("checklower", function(value, element) {
20145            return /[a-z]/.test(value);
20146        },"Need atleast 1 lowercase alphabet");
20147        $.validator.addMethod("checkupper", function(value, element) {
20148            return /[A-Z]/.test(value);
20149        },"Need atleast 1 uppercase alphabet");
20150        $.validator.addMethod("checkdigit", function(value, element) {
20151            return /[0-9]/.test(value);
20152        },"Need atleast 1 digit");
20153        // $.validator.addMethod("pwcheck", function(value) {
20154        //     return /^[A-Za-z0-9\d=!\-@._*]*$/.test(value) && /[a-z]/.test(value) && /\d/.test(value) && /[A-Z]/.test(value);
20155        // },"Password is not strong enough");
20156
20157        password_reset_rules.updatepwdnewpwd = {required: true, minlength: 8, maxlength: 100, checklower: true,checkupper: true,checkdigit: true},
20158        password_reset_rules.updatepwdconfirm = {required: true, minlength: 8, maxlength: 100, equalTo: "#updatepwdnewpwd"}
20159    }
20160
20161    if(app_id==2952){
20162        password_reset_rules.updatepwdnewpwd = {required: true, minlength: 8,maxlength: 100};
20163        password_reset_rules.updatepwdconfirm = {required: true, minlength: 8, maxlength: 100, equalTo: "#updatepwdnewpwd"};
20164    }
20165
20166    password_reset_rules.updatepwdnewpwd['minlength'] = 6;
20167password_reset_rules.updatepwdconfirm['minlength'] = 6;
20168set_password_first_login.uPassword['minlength'] = 6;
20169set_password_first_login.uConfirmPassword['minlength'] = 6;
20170
20171    // update on login (262)
20172    // VFC-56285: apps with set_password_on_first_login enabled render a
20173    // #require-set-password-otp marker (_modal.php) and an OTP field/group;
20174    // this state machine inserts an email-OTP round trip before the existing
20175    // password-set POST below, which is otherwise unchanged.
20176    var setPasswordOtpStep = 'password';
20177    set_password_first_login.otp = {
20178        required: function () {
20179            return $("#require-set-password-otp").length > 0 && setPasswordOtpStep === 'otp';
20180        }
20181    };
20182    // Local countdown, separate from the unrelated 2FA-login startTimer()/
20183    // #countdown-timer/.resendbtn above - an app could have both features on.
20184    function startUpdatePwdOtpTimer(duration) {
20185        $('#update-pwd-otp-resend').attr('disabled', true);
20186        var timer = duration, minutes, seconds;
20187        var x = setInterval(function () {
20188            minutes = parseInt(timer / 60, 10);
20189            seconds = parseInt(timer % 60, 10);
20190            minutes = minutes < 10 ? "0" + minutes : minutes;
20191            seconds = seconds < 10 ? "0" + seconds : seconds;
20192            if (--timer < 0) {
20193                $('#update-pwd-otp-resend').removeAttr('disabled');
20194                clearInterval(x);
20195            }
20196            $('#update-pwd-otp-countdown').html(minutes + ":" + seconds);
20197        }, 1000);
20198    }
20199    $('#update-pwd-Frm_update').validate({
20200        rules: set_password_first_login,
20201        highlight: function (element) {
20202            $(element).closest('.form-group').addClass('has-error');
20203        },
20204        unhighlight: function (element) {
20205            $(element).closest('.form-group').removeClass('has-error');
20206        },
20207        errorElement: 'span',
20208        errorClass: 'help-block',
20209        errorPlacement: function (error, element) {
20210            if (element.parent('.input-group').length) {
20211                error.insertAfter(element.parent());
20212            } else {
20213                error.insertAfter(element);
20214            }
20215        },
20216        submitHandler: function () {
20217            var update_pwd_url = location.protocol + '//' + location.host + "/en/update_new_user_password_on_login";
20218            var update_pwd = new Object();
20219            update_pwd.AppId = '20550';
20220            update_pwd.token = $("#pwd-reset-update-token-id").val();
20221            update_pwd.newpassword = $("#uConfirmPassword").val();
20222            update_pwd.Lang = 'en';
20223            update_pwd.Email = $("#uLoginEmail").val();
20224            var csrfName = 'ci_csrf_token';
20225            var csrfHash = '';
20226            update_pwd[csrfName] = csrfHash;
20227
20228            if ($("#require-set-password-otp").length && setPasswordOtpStep !== 'otp-verified') {
20229                if (setPasswordOtpStep === 'password') {
20230                    var otp_send_url = location.protocol + '//' + location.host + "/en/send_set_password_otp";
20231                    $.post(otp_send_url, update_pwd).done(function (resp) {
20232                        var re = /\s\s+/g;
20233                        resp = resp.replace(re, ' ');
20234                        RespObject = JSON.parse(resp);
20235                        $("#update-pwd-responseBox").hide();
20236                        if (RespObject.Status) {
20237                            setPasswordOtpStep = 'otp';
20238                            $('#update-pwd-set-fields').hide();
20239                            $('#update-pwd-otp-group').show();
20240                            $('.update-pwd-submit-btn').text('Verify & Set Password');
20241                            startUpdatePwdOtpTimer(60);
20242                        } else {
20243                            $("#update-pwd-responseBox").removeClass("FormResponseSuccess").addClass("FormResponseError").html(RespObject.Message).show();
20244                        }
20245                    });
20246                    return;
20247                }
20248                if (setPasswordOtpStep === 'otp') {
20249                    var otp_verify_url = location.protocol + '//' + location.host + "/en/verify_set_password_otp";
20250                    var otp_verify = new Object();
20251                    otp_verify.AppId = update_pwd.AppId;
20252                    otp_verify.Email = update_pwd.Email;
20253                    otp_verify.token = $("#update-pwd-otp").val();
20254                    otp_verify[csrfName] = csrfHash;
20255                    $.post(otp_verify_url, otp_verify).done(function (resp) {
20256                        var re = /\s\s+/g;
20257                        resp = resp.replace(re, ' ');
20258                        RespObject = JSON.parse(resp);
20259                        if (RespObject.Status) {
20260                            setPasswordOtpStep = 'otp-verified';
20261                            $('#update-pwd-Frm_update').submit();
20262                        } else {
20263                            $("#update-pwd-responseBox").removeClass("FormResponseSuccess").addClass("FormResponseError").html(RespObject.Message).show();
20264                        }
20265                    });
20266                    return;
20267                }
20268            }
20269
20270            $.post(update_pwd_url, update_pwd).done(function (resp) {
20271                var re = /\s\s+/g;
20272                resp = resp.replace(re, ' ');
20273                RespObject = JSON.parse(resp);
20274                if (RespObject.Status) {
20275                    if(update_pwd.AppId==564){
20276                        $('#update-pwd-window-body').html("<div class='form-group message-form-group'><p>Password has been updated successfully, please wait logging you in.</p></div>");
20277                        $("input[name='LoginEmail']").val(update_pwd.Email);
20278                        $("input[name='LoginEmail']").parents(".form-group:first").append("<input type='hidden' name='auto_login' value='true'/><input type='password' name='Password' value='" + update_pwd.newpassword +"'/>");
20279                        setTimeout(function(){
20280                            $("#Main-Login-Frm").submit();
20281                        },2000);
20282                    }else{
20283                        $('#update-pwd-window-body').html("<div class='form-group message-form-group'><p>" + RespObject.Message +"</p></div>");
20284                    }
20285                    $('#update-pwd-window .modal-footer button:last').remove();
20286                    $('#update-pwd-window .modal-footer button:last').text("Close");
20287
20288                } else {
20289                    $("#update-pwd-window-body .message-form-group").removeClass("FormResponseSuccess").addClass("FormResponseError").html(RespObject.Message).show();
20290                }
20291            });
20292        }
20293    });
20294    // end update on login appid:(262)
20295
20296    // Resend OTP for the set-first-password popup (VFC-56285)
20297    $('#update-pwd-otp-resend').on('click', function () {
20298        var otp_send_url = location.protocol + '//' + location.host + "/en/send_set_password_otp";
20299        var resend_otp = new Object();
20300        resend_otp.AppId = '20550';
20301        resend_otp.Lang = 'en';
20302        resend_otp.Email = $("#uLoginEmail").val();
20303        var csrfName = 'ci_csrf_token';
20304        var csrfHash = '';
20305        resend_otp[csrfName] = csrfHash;
20306        $.post(otp_send_url, resend_otp).done(function (resp) {
20307            var re = /\s\s+/g;
20308            resp = resp.replace(re, ' ');
20309            RespObject = JSON.parse(resp);
20310            if (RespObject.Status) {
20311                $('#update-pwd-responseBox').removeClass("FormResponseError").addClass("FormResponseSuccess").html("The verification code has been sent again.").show('slow');
20312                setTimeout(function () { $('#update-pwd-responseBox').hide('slow'); }, 10000);
20313                startUpdatePwdOtpTimer(60);
20314            } else {
20315                $("#update-pwd-responseBox").removeClass("FormResponseSuccess").addClass("FormResponseError").html(RespObject.Message).show();
20316            }
20317        });
20318    });
20319    // end resend OTP for set-first-password popup
20320
20321    // Set new password
20322    $('#reset-update-pwd-frm').validate({
20323        rules: password_reset_rules,
20324        highlight: function (element) {
20325            $(element).closest('.form-group').addClass('has-error');
20326        },
20327        unhighlight: function (element) {
20328            $(element).closest('.form-group').removeClass('has-error');
20329        },
20330        errorElement: 'span',
20331        errorClass: 'help-block',
20332        errorPlacement: function (error, element) {
20333            if (element.parent('.input-group').length) {
20334                error.insertAfter(element.parent());
20335            } else {
20336                error.insertAfter(element);
20337            }
20338        },
20339        submitHandler: function () {
20340            var update_pwd_url = location.protocol + '//' + location.host + "/en/update_new_user_password";
20341            var update_pwd = new Object();
20342            update_pwd.AppId = '20550';
20343            update_pwd.token = $("#pwd-reset-update-token").val();
20344            update_pwd.newpassword = $("#updatepwdconfirm").val();
20345            update_pwd.Lang = 'en';
20346            update_pwd.Email = $("#updatepwdemail").val();
20347            var csrfName = 'ci_csrf_token';
20348            var csrfHash = '';
20349            update_pwd[csrfName] = csrfHash;
20350
20351            $.post(update_pwd_url, update_pwd).done(function (resp) {
20352                var re = /\s\s+/g;
20353                resp = resp.replace(re, ' ');
20354                let RespObject = JSON.parse(resp);
20355                if (RespObject.Status) {
20356                    $('#reset-update-pwd-frm')[0].reset();
20357                    $('#reset-update-pwd-frm .form-group:not(:last-child)').hide();
20358                    $('#reset-update-pwd-frm .modal-footer button:last').hide();
20359                    $("#reset-pwd-responseBox").removeClass("FormResponseError").addClass("FormResponseSuccess").html(RespObject.Message).show();
20360                } else {
20361                    $("#reset-pwd-responseBox").removeClass("FormResponseSuccess").addClass("FormResponseError").html(RespObject.Message).show();
20362                }
20363
20364                if (typeof passwordResetSuccessCallBack !== 'undefined') {
20365                  passwordResetSuccessCallBack(RespObject);
20366                }
20367
20368            });
20369        }
20370    });
20371
20372
20373    $('#LoginModal').on('hidden.bs.modal', function (e) {
20374        $("#ResponseBox").html("").hide();
20375    });
20376            var eventNotstarted=false;
20377
20378    
20379    
20380    if(document.location.hash!="" && (document.location.hash.indexOf("booth-")==1 || document.location.hash.indexOf("webinar-")==1 || document.location.hash.indexOf("Booth-")==1 || document.location.hash.indexOf("toyota")==1 || document.location.hash.indexOf("custom-cms-page")==1 || document.location.hash.indexOf("diversity-and-inclusion")==1)){
20381        if(app_id==586){
20382            $("input[name='login-red']").val("/en/hall" +  document.location.hash);
20383        }else if(app_id==343){
20384          $("input[name='login-red']").val("/en/hall" +  document.location.hash);
20385          $("#LoginModal").modal("show");
20386        }else if(app_id==690){
20387              $("input[name='login-red']").val("/en/hall" +  document.location.hash);
20388              setTimeout(function() {
20389                $(".two-btns .guest-login:first").trigger("click");
20390              }, 1000);
20391        }else{
20392            $("#LoginModal").modal("show");
20393            $("input[name='login-red']").val("/en/hall" +  document.location.hash);
20394        }
20395    }
20396
20397    // dynamic password policies related
20398    // number check
20399    jQuery.validator.addMethod("policy_reset_arabic_num", function (value, element) {
20400        return /\d/.test(value);
20401    }, "Password must contain one numeric eg (0-9)");
20402
20403    // lowercase alphabet a-z
20404    jQuery.validator.addMethod("policy_reset_roman_lower", function (value, element) {
20405        return /[a-z]/.test(value);
20406    }, "Password must contain any of lower case letters (a...z)");
20407
20408    // upper case alphabet A-Z
20409    jQuery.validator.addMethod("policy_reset_roman_upper", function (value, element) {
20410        return /[A-Z]/.test(value);
20411    }, "Password must contain any of upper case letters (A...Z)");
20412
20413    // special characters  (e.g. ~ ! @ # $ & -)
20414    jQuery.validator.addMethod("policy_reset_special_characters", function (value, element) {
20415        var special_characters = /[~!@#$&-]/;
20416        return special_characters.test(value);
20417    }, "Password must contain any of special characters eg (~ ! @ # $ & -)");
20418    // dynamic password policies related
20419
20420    jQuery.validator.addMethod("USJEmailEmp", function (value, element) {
20421      if (/@usj.edu.mo\s*$/.test(value) || /@ashfaqsolangi.com\s*$/.test(value)) {
20422        return true;
20423      }else{
20424        return false;
20425      }
20426    }, "Please use your official email (eg @usj.edu.mo).");
20427
20428    jQuery.validator.addMethod("bscEmployeeID", function (value, element) {
20429      return (value!="" && value.length == 7 && $.isNumeric(value) ? true : false);
20430    }, "Enter your 7-digit Employee ID");
20431
20432    jQuery.validator.addMethod("allowed_arm_only", function (value, element) {
20433      if (/@arm.com\s*$/.test(value) || /@liveunion.co.uk\s*$/.test(value) || /@armchina.com\s*$/.test(value) ||
20434          /@treasure-data.com\s*$/.test(value) || /@ashfaqsolangi.com\s*$/.test(value)) {
20435        return true;
20436      }else{
20437        return false;
20438      }
20439    }, "Please use your official email, provided email address is not allowed.");
20440
20441    jQuery.validator.addMethod("CRIAQOnly", function (value, element) {
20442      if (/@3m.com\s*$/.test(value) || /@a7integration.com\s*$/.test(value) || /@acsynam.com\s*$/.test(value) ||
20443        /@advancedpowdercoatinginc.com\s*$/.test(value) || /@aeromontreal.ca\s*$/.test(value) || /@aeronyx.ca\s*$/.test(value) ||
20444        /@admtl.com\s*$/.test(value) || /@aiac.ca\s*$/.test(value) || /@asiiweb.com\s*$/.test(value) ||
20445        /@apnca.com\s*$/.test(value) || /@vyoo.ai\s*$/.test(value) || /@ara-uas.com\s*$/.test(value) ||
20446        /@atem.com\s*$/.test(value) || /@athenatechno.tech\s*$/.test(value) || /@avr-global.com\s*$/.test(value) ||
20447        /@l3commercialaviation.com\s*$/.test(value) || /@avior.ca\s*$/.test(value) || /@bmu.co\s*$/.test(value) ||
20448        /@bellhelicopter.com\s*$/.test(value) || /@biexpertise.com\s*$/.test(value) || /@binarieslid.com\s*$/.test(value) ||
20449        /@bombardier.com\s*$/.test(value) || /@cae.com\s*$/.test(value) || /@calogysolutions.com\s*$/.test(value) ||
20450        /@asc-csa.gc.ca\s*$/.test(value) || /@carillon.ca\s*$/.test(value) || /@cgq.qc.ca\s*$/.test(value) ||
20451        /@cmqtr.qc.ca\s*$/.test(value) || /@crvi.ca\s*$/.test(value) || /@ctmp.ca\s*$/.test(value) ||
20452        /@cqrda.caglish\s*$/.test(value) || /@cegepmontpetit.ca\s*$/.test(value) || /@ciena.com\s*$/.test(value) ||
20453        /@cmcelectronics.ca\s*$/.test(value) || /@cdcq.qc.ca\s*$/.test(value) || /@compositesvci.com\s*$/.test(value) ||
20454        /@genikinc.com\s*$/.test(value) || /@concordia.ca\s*$/.test(value) || /@crim.ca\s*$/.test(value) ||
20455        /@criq.qc.ca\s*$/.test(value) || /@cscanada.ca\s*$/.test(value) || /@deepsight.ca\s*$/.test(value) ||
20456        /@delastek.com\s*$/.test(value) || /@deleaves-drone.com\s*$/.test(value) || /@demaspa.it\s*$/.test(value) ||
20457        /@dronevolt.com\s*$/.test(value) || /@etsmtl.ca\s*$/.test(value) || /@polymtl.ca\s*$/.test(value) ||
20458        /@elastoproxy.com\s*$/.test(value) || /@electro-kut.com\s*$/.test(value) || /@elementai.com\s*$/.test(value) ||
20459        /@elisen-assoc.com\s*$/.test(value) || /@equispheres.com\s*$/.test(value) || /@castolin.com-CA\s*$/.test(value) ||
20460        /@exonetik.com\s*$/.test(value) || /@exonetik.com\s*$/.test(value) || /@flying-whales.com\s*$/.test(value) ||
20461        /@frqnt.gouv.qc.ca\s*$/.test(value) || /@fusia.fr\s*$/.test(value) || /@microsoft.com\s*$/.test(value) ||
20462        /@fzengineering.com\s*$/.test(value) || /@gardn.org\s*$/.test(value) || /@globvision.com\s*$/.test(value) ||
20463        /@economie.gouv.qc.ca\s*$/.test(value) || /@gcttg.com\s*$/.test(value) || /@hec.ca\s*$/.test(value) ||
20464        /@herouxdevtek.com\s*$/.test(value) || /@humanitas.io\s*$/.test(value) || /@hutchinson.com\s*$/.test(value) ||
20465        /@hydroquebec.com\s*$/.test(value) || /@idscorporation.com\s*$/.test(value) || /@visiooimage.com\s*$/.test(value) ||
20466        /@ivisolutions.ca\s*$/.test(value) || /@ino.ca\s*$/.test(value) || /@inrs.caglish\s*$/.test(value) ||
20467        /@keitas.com\s*$/.test(value) || /@kinovarobotics.com\s*$/.test(value) || /@biomaterials.kruger.com\s*$/.test(value) ||
20468        /@l3t.com\s*$/.test(value) || /@laflamme-ing.com\s*$/.test(value) || /@latesys.com\s*$/.test(value) ||
20469        /@libellulemonde.com\s*$/.test(value) || /@liburdi.com\s*$/.test(value) || /@socomore.com\s*$/.test(value) ||
20470        /@magellan.aero\s*$/.test(value) || /@mss.ca\s*$/.test(value) || /@marinvent.com\s*$/.test(value) ||
20471        /@mayahtt.com\s*$/.test(value) || /@mcgill.ca\s*$/.test(value) || /@mdacorporation.com\s*$/.test(value) ||
20472        /@mecanum.com\s*$/.test(value) || /@melocheinc.com\s*$/.test(value) || /@messier-dowty.com\s*$/.test(value) ||
20473        /@nachurs-alpine.com\s*$/.test(value) || /@nrc-cnrc.gc.cag\s*$/.test(value) || /@nergica.com\s*$/.test(value) ||
20474        /@netur.ca\s*$/.test(value) || /@neuralvol.com\s*$/.test(value) || /@ngcaerospace.com\s*$/.test(value) ||
20475        /@nordiasoft.com\s*$/.test(value) || /@notostechnologies.com\s*$/.test(value) || /@novika.ca\s*$/.test(value) ||
20476        /@nrc-cnrc.gc.cag\s*$/.test(value) || /@theobjects.com\s*$/.test(value) || /@opal-rt.com\s*$/.test(value) ||
20477        /@optonique.ca\s*$/.test(value) || /@ova.ai\s*$/.test(value) || /@parker.com\s*$/.test(value) ||
20478        /@pwc.ca\s*$/.test(value) || /@precisionadm.com\s*$/.test(value) || /@presagis.com\s*$/.test(value) ||
20479        /@prop-air.com\s*$/.test(value) || /@pultrusiontech.com\s*$/.test(value) || /@qohash.com\s*$/.test(value) ||
20480        /@queensu.ca\s*$/.test(value) || /@reactiondynamics.space\s*$/.test(value) || /@rheagroup.com\s*$/.test(value) ||
20481        /@rockwellcollins.com\s*$/.test(value) || /@rolls-royce.com\s*$/.test(value) || /@pmscada.ca\s*$/.test(value) ||
20482        /@safran-helicopter-engines.com\s*$/.test(value) || /@savinte.com\s*$/.test(value) || /@seedai.ca\s*$/.test(value) ||
20483        /@siicanada.com\s*$/.test(value) || /@dcm.aero\s*$/.test(value) || /@sita.aero\s*$/.test(value) ||
20484        /@solaxis.ca\s*$/.test(value) || /@sonacamontreal.com\s*$/.test(value) || /@sphereco.ca\s*$/.test(value) ||
20485        /@stelia-aerospace.com\s*$/.test(value) || /@tecnar.com\s*$/.test(value) || /@teijincarbon.com\s*$/.test(value) ||
20486        /@tekna.com\s*$/.test(value) || /@thalesgroup.com\s*$/.test(value) || /@thalesgroup.com\s*$/.test(value) ||
20487        /@trafinc.com\s*$/.test(value) || /@tristarmulticopters.com\s*$/.test(value) || /@cedalma.com\s*$/.test(value) ||
20488        /@umontreal.ca\s*$/.test(value) || /@usherbrooke.ca\s*$/.test(value) || /@uqac.ca\s*$/.test(value) ||
20489        /@uqam.caglish\s*$/.test(value) || /@uqtr.ca\s*$/.test(value) || /@ulaval.ca\s*$/.test(value) ||
20490        /@uwindsor.ca\s*$/.test(value) || /@valqari.com\s*$/.test(value) || /@vigilantglobal.com\s*$/.test(value) ||
20491        /@vozwin.com\s*$/.test(value) || /@lets-warp.com\s*$/.test(value) || /@xonaspace.com\s*$/.test(value)) {
20492        return true;
20493      }else{
20494        return false;
20495      }
20496    }, "Please use your CRIAQ member organization email address.");
20497
20498    jQuery.validator.addMethod("BlockedCadence", function (value, element) {
20499        if (/@126.com\s*$/.test(value) || /@163.com\s*$/.test(value) || /@adelphia.net\s*$/.test(value) || /@air.net\s*$/.test(value) ||
20500            /@airmail.net\s*$/.test(value) || /@aliyun.com\s*$/.test(value) || /@aol.com\s*$/.test(value) || /@atlanticbb.net\s*$/.test(value) ||
20501            /@att.net\s*$/.test(value) || /@att.yahoo.com\s*$/.test(value) || /@attbi.com\s*$/.test(value) || /@attglobal.net\s*$/.test(value) ||
20502            /@autowb.com\s*$/.test(value) || /@basicisp.net\s*$/.test(value) || /@bcpl.net\s*$/.test(value) || /@bellatlantic.net\s*$/.test(value) ||
20503            /@bellnet.ca\s*$/.test(value) || /@bellsouth.net\s*$/.test(value) || /@bestweb.net\s*$/.test(value) || /@bev.net\s*$/.test(value) || /@blacksburg.net\s*$/.test(value) || /@blazenet.net\s*$/.test(value) ||
20504            /@cableone.net\s*$/.test(value) || /@cais.net\s*$/.test(value) || /@cantv.net\s*$/.test(value) || /@capu.net\s*$/.test(value) || /@ce.medione.net\s*$/.test(value) || /@central.cox.net\s*$/.test(value) ||
20505            /@centurylink.com\s*$/.test(value) || /@charm.net\s*$/.test(value) || /@charter.net\s*$/.test(value) || /@comcast.net\s*$/.test(value) || /@compuserve.com\s*$/.test(value) || /@concentric.net\s*$/.test(value) || /@covad.net\s*$/.test(value) || /@cox.net\s*$/.test(value) || /@coxmail.com\s*$/.test(value) || /@crosslink.net\s*$/.test(value) || /@csi.com\s*$/.test(value) || /@daum.net\s*$/.test(value) || /@dca.net\s*$/.test(value) || /@deltanet.com\s*$/.test(value) || /@direcway.com \s*$/.test(value) || /@dmv.com\s*$/.test(value) || /@dslextreme.com\s*$/.test(value) || /@earthlink.net\s*$/.test(value) || /@east.cox.net\s*$/.test(value) || /@edge.net\s*$/.test(value) || /@email.com\s*$/.test(value) || /@emsn.com\s*$/.test(value) || /@enter.net\s*$/.test(value) || /@erols.com\s*$/.test(value) || /@excite.com\s*$/.test(value) || /@ezy.net\s*$/.test(value) || /@fastmail.fm\s*$/.test(value) || /@fcc.net\s*$/.test(value) || /@flashcom.net\s*$/.test(value) || /@forthnet.gr\s*$/.test(value) || /@frontier.com\s*$/.test(value) || /@frontline.net\s*$/.test(value) || /@fullchannel.net\s*$/.test(value) || /@Gateway.net\s*$/.test(value) || /@gl.centurytel.net\s*$/.test(value) || /@gl.umbc.edu\s*$/.test(value) || /@gmail.co.in\s*$/.test(value) || /@gmail.com\s*$/.test(value) || /@gmail.hu\s*$/.test(value) || /@gmail.it\s*$/.test(value) || /@gmail.ru\s*$/.test(value) || /@gtei.bellatlantic.net\s*$/.test(value) || /@gti.net\s*$/.test(value) || /@gw.dmv.com\s*$/.test(value) || /@hanmail.net\s*$/.test(value) || /@hotcom\s*$/.test(value) || /@hotmail.com\s*$/.test(value) || /@ibm.net \s*$/.test(value) || /@idx4.com\s*$/.test(value) || /@iearthlink.net\s*$/.test(value) || /@ihwy.com\s*$/.test(value) || /@integra.net\s*$/.test(value) || /@interaccess.com\s*$/.test(value) || /@internetmci.com\s*$/.test(value) || /@ionet.net\s*$/.test(value) || /@i-plus.net\s*$/.test(value) || /@ismtp.earthlink.net\s*$/.test(value) || /@isp.com\s*$/.test(value) || /@itol.com\s*$/.test(value) || /@ix.netcom.com\s*$/.test(value) || /@juno.com\s*$/.test(value) || /@kulmeo.com\s*$/.test(value) || /@live.com\s*$/.test(value) || /@mchsi.com\s*$/.test(value) || /@mciworldcom.net \s*$/.test(value) || /@mediacomcable.com\s*$/.test(value) || /@medione.net\s*$/.test(value) || /@megapathdsl.net\s*$/.test(value) || /@mindspring.com\s*$/.test(value) || /@msn.com\s*$/.test(value) || /@mw.centurytel.net\s*$/.test(value) || /@nauticom.net\s*$/.test(value) || /@naver.com\s*$/.test(value) || /@netaddress.usa.net\s*$/.test(value) || /@netcom.ca\s*$/.test(value) || /@netcom.com \s*$/.test(value) || /@netscape.com\s*$/.test(value) || /@netzero.net\s*$/.test(value) || /@njd.xo.com\s*$/.test(value) || /@ntegra.net\s*$/.test(value) || /@nw.centurytel.net\s*$/.test(value) || /@olg.com\s*$/.test(value) || /@optonline.net\s*$/.test(value) || /@oranek.com\s*$/.test(value) || /@outblaze.com\s*$/.test(value) || /@outlook.com\s*$/.test(value) || /@pacbell.net \s*$/.test(value) || /@patmedia.net\s*$/.test(value) || /@peoplepc.com\s*$/.test(value) || /@pipeline.com\s*$/.test(value) || /@prodigy.net\s*$/.test(value) || /@proptd.net\s*$/.test(value) || /@psi.net\s*$/.test(value) || /@ptd.net\s*$/.test(value) || /@qis.net\s*$/.test(value) || /@qq.com\s*$/.test(value) || /@qwest.net\s*$/.test(value) || /@rackspace.com\s*$/.test(value) || /@rcn.com\s*$/.test(value) || /@relay.psi.net\s*$/.test(value) || /@rogers.com\s*$/.test(value) || /@rr.com\s*$/.test(value) || /@rsvhr.com\s*$/.test(value) || /@rupayamail.com\s*$/.test(value) || /@sbcglobal.net\s*$/.test(value) || /@sbcglobal.yahoo.com\s*$/.test(value) || /@sk.sympatico.ca\s*$/.test(value) || /@smarthost.cox.com\s*$/.test(value) || /@snip.net\s*$/.test(value) || /@so.centurytel.net\s*$/.test(value) || /@sprint.com\s*$/.test(value) || /@sprintmail.com \s*$/.test(value) || /@sprynet.com\s*$/.test(value) || /@starpower.net\s*$/.test(value) || /@suddenlink.com\s*$/.test(value) || /@surewest.net\s*$/.test(value) || /@swva.net\s*$/.test(value) || /@sympatico.ca\s*$/.test(value) || /@synacor.com\s*$/.test(value) || /@telus.net\s*$/.test(value) || /@toto.net\s*$/.test(value) || /@tucows.com\s*$/.test(value) || /@usa.net\s*$/.test(value) || /@usit.net\s*$/.test(value) || /@uu.net\s*$/.test(value) || /@veanlo.com\s*$/.test(value) || /@verizon.net\s*$/.test(value) || /@videotron.ca\s*$/.test(value) || /@webstable.com\s*$/.test(value) || /@west.cox.net\s*$/.test(value) || /@wideopenwest.com\s*$/.test(value) || /@windstream.com\s*$/.test(value) || /@wockcy.com\s*$/.test(value) || /@worldnet.att.net \s*$/.test(value) || /@xo.com\s*$/.test(value) || /@yahoo.ca\s*$/.test(value) || /@yahoo.cn\s*$/.test(value) || /@yahoo.co.id\s*$/.test(value) || /@yahoo.co.in\s*$/.test(value) || /@yahoo.co.jp\s*$/.test(value) || /@yahoo.co.kr\s*$/.test(value) || /@yahoo.co.nz\s*$/.test(value) || /@yahoo.co.th\s*$/.test(value) || /@yahoo.co.uk\s*$/.test(value) || /@yahoo.com\s*$/.test(value) || /@yahoo.de\s*$/.test(value) || /@yahoo.dk\s*$/.test(value) || /@yahoo.es\s*$/.test(value) || /@yahoo.fr\s*$/.test(value) || /@yahoo.gr\s*$/.test(value) || /@yahoo.ie\s*$/.test(value) || /@yahoo.in\s*$/.test(value) || /@yahoo.it\s*$/.test(value) || /@yahoo.no\s*$/.test(value) || /@yahoo.pl\s*$/.test(value) || /@yahoo.ro\s*$/.test(value) || /@yahoo.se\s*$/.test(value) || /@yahoogroups.com\s*$/.test(value) || /@ymail.com\s*$/.test(value) || /@yopmail.com\s*$/.test(value) || /@ziplink.net\s*$/.test(value) || /@rediffmail.com\s*$/.test(value) || /@icloud.com\s*$/.test(value) || /@alessandroogheri.com\s*$/.test(value) || /@abelite-da.com\s*$/.test(value) || /@adiva.com\s*$/.test(value) || /@advantest-ard.com\s*$/.test(value) || /@alatek.com\s*$/.test(value) || /@aldec.com\s*$/.test(value) || /@awaveip.com\s*$/.test(value) || /@altium.com\s*$/.test(value) || /@altium.com.au\s*$/.test(value) || /@amiq.com\s*$/.test(value) || /@analogbits.com\s*$/.test(value) || /@analogix.com\s*$/.test(value) || /@anasift.com\s*$/.test(value) || /@andestech.com\s*$/.test(value) || /@ankasys.com\s*$/.test(value) || /@ansys.com\s*$/.test(value) || /@apsimtech.com\s*$/.test(value) || /@adapt-io.com\s*$/.test(value) || /@arcadiainnovation.com\s*$/.test(value) || /@archelon.com\s*$/.test(value) || /@arteris.com\s*$/.test(value) || /@ascinc.com\s*$/.test(value) || /@asicdepot.com\s*$/.test(value) || /@asic-world.com\s*$/.test(value) || /@astc-design.com\s*$/.test(value) || /@atoptech.com\s*$/.test(value) || /@aumraj.com\s*$/.test(value) || /@aurora.tech\s*$/.test(value) || /@ausdia.c
20505om\s*$/.test(value) || /@autodesk.com\s*$/.test(value) || /@broadcom.com\s*$/.test(value) || /@avatar-da.com\s*$/.test(value) || /@averant.com\s*$/.test(value) || /@avery-design.com\s*$/.test(value) || /@axiscorp.com\s*$/.test(value) || /@axisdesign.com\s*$/.test(value) || /@axissystems.com\s*$/.test(value) || /@beyondsemi.com\s*$/.test(value) || /@bluepearlsoftware.com\s*$/.test(value) || /@bluespec.com\s*$/.test(value) || /@brekersystems.com\s*$/.test(value) || /@cad-design.com\s*$/.test(value) || /@cast-inc.com\s*$/.test(value) || /@ceva-dsp.com\s*$/.test(value) || /@cfdrc.com\s*$/.test(value) || /@chipglobe.com\s*$/.test(value) || /@chipmd.com\s*$/.test(value) || /@codasip.com\s*$/.test(value) || /@cst.com\s*$/.test(value) || /@Comsol.com\s*$/.test(value) || /@correctdesigns.com\s*$/.test(value) || /@cortus.com\s*$/.test(value) || /@coseda-tech.com\s*$/.test(value) || /@cwseda.com\s*$/.test(value) || /@credosemi.com\s*$/.test(value) || /@alibaba.com\s*$/.test(value) || /@cvcblr.com\s*$/.test(value) || /@3ds.com\s*$/.test(value) || /@defactotech.com\s*$/.test(value) || /@designw.com\s*$/.test(value) || /@diakopto.com\s*$/.test(value) || /@digitalcircuitdesign.com\s*$/.test(value) || /@dcd.pl\s*$/.test(value) || /@dolphin-design.fr\s*$/.test(value) || /@dspg.com\s*$/.test(value) || /@dynalith.com\s*$/.test(value) || /@easyic.ro\s*$/.test(value) || /@edaptive.com\s*$/.test(value) || /@elcamino.de\s*$/.test(value) || /@elgris.com\s*$/.test(value) || /@elsys-eastern.com\s*$/.test(value) || /@esperanto.ai\s*$/.test(value) || /@etopus.com\s*$/.test(value) || /@eurekatech.com\s*$/.test(value) || /@excellicon.com\s*$/.test(value) || /@fintronic.com\s*$/.test(value) || /@fishtail-da.com\s*$/.test(value) || /@fract-tech.com\s*$/.test(value) || /@frobas.com\s*$/.test(value) || /@fsresult.com\s*$/.test(value) || /@ftlsystems.com\s*$/.test(value) || /@gaisler.com\s*$/.test(value) || /@gemdt.com\s*$/.test(value) || /@guc-asic.com\s*$/.test(value) || /@hdl-dh.com\s*$/.test(value) || /@hisilicon.com\s*$/.test(value) || /@empyrean.com.cn\s*$/.test(value) || /@empyrean-tech.com\s*$/.test(value) || /@huawei.com\s*$/.test(value) || /@hypersilicon.com\s*$/.test(value) || /@ibextech.jp\s*$/.test(value) || /@icmanage.com\s*$/.test(value) || /@imgtec.com\s*$/.test(value) || /@ime.cas.cn\s*$/.test(value) || /@incentia.com\s*$/.test(value) || /@incoresemi.com\s*$/.test(value) || /@infinisim.com\s*$/.test(value) || /@innosilicon.com\s*$/.test(value) || /@inno-logic.com\s*$/.test(value) || /@inphi.com\s*$/.test(value) || /@insighteda.com\s*$/.test(value) || /@Integratedsoft.com\s*$/.test(value) || /@intelliprop.com\s*$/.test(value) || /@interrasystems.com\s*$/.test(value) || /@intusoft.com\s*$/.test(value) || /@ip-maker.com\s*$/.test(value) || /@iroctech.com\s*$/.test(value) || /@javelin-da.com\s*$/.test(value) || /@Jcmwave.com\s*$/.test(value) || /@jedat.co.jp\s*$/.test(value) || /@jtag.com\s*$/.test(value) || /@kandou.com\s*$/.test(value) || /@keysight.com\s*$/.test(value) || /@lorentzsolution.com\s*$/.test(value) || /@lowrisc.org\s*$/.test(value) || /@lucedaphotonics.com\s*$/.test(value) || /@m31tech.com\s*$/.test(value) || /@Magillem.com\s*$/.test(value) || /@magma.com\s*$/.test(value) || /@maviss-design.com\s*$/.test(value) || /@mayahtt.com\s*$/.test(value) || /@memscap.com\s*$/.test(value) || /@mentor.com\s*$/.test(value) || /@mentorg.com\s*$/.test(value) || /@mentorgraphics.com\s*$/.test(value) || /@methods2business.com\s*$/.test(value) || /@microeda.com\s*$/.test(value) || /@mixel.com\s*$/.test(value) || /@morethanip.com\s*$/.test(value) || /@mosys.com\s*$/.test(value) || /@motivo.ai\s*$/.test(value) || /@msol.co.jp\s*$/.test(value) || /@mti.com\s*$/.test(value) || /@mycad.com\s*$/.test(value) || /@nangate.com\s*$/.test(value) || /@nimbic.com\s*$/.test(value) || /@nobug.ro\s*$/.test(value) || /@nptest.com\s*$/.test(value) || /@nsysinc.com\s*$/.test(value) || /@ntlab.com\s*$/.test(value) || /@numeritech.com\s*$/.test(value) || /@nwlogic.com\s*$/.test(value) || /@oasis-ds.com\s*$/.test(value) || /@obsidiansoft.com\s*$/.test(value) || /@oea.com\s*$/.test(value) || /@onespin-solutions.
20505com\s*$/.test(value) || /@opshub.com\s*$/.test(value) || /@optem.com\s*$/.test(value) || /@optimalcorp.com\s*$/.test(value) || /@Optiwave.com\s*$/.test(value) || /@oskitechnology.com\s*$/.test(value) || /@paradigm-works.com\s*$/.test(value) || /@paragon-ic.com\s*$/.test(value) || /@perceptionsoftware.com\s*$/.test(value) || /@perfectvips.com\s*$/.test(value) || /@pgc.com\s*$/.test(value) || /@pgc.com.tw\s*$/.test(value) || /@phoenixsoftware.com\s*$/.test(value) || /@Photond.com\s*$/.test(value) || /@pitsim.com\s*$/.test(value) || /@plda.com\s*$/.test(value) || /@prodesigncad.de\s*$/.test(value) || /@prodesign-europe.com\s*$/.test(value) || /@prolificinc.com\s*$/.test(value) || /@prolific.com.tw\s*$/.test(value) || /@prosilog.com\s*$/.test(value) || /@prover.com\s*$/.test(value) || /@provino-tech.com\s*$/.test(value) || /@ptc.com\s*$/.test(value) || /@pulsic.com\s*$/.test(value) || /@qdai.com\s*$/.test(value) || /@rachip.com\s*$/.test(value) || /@randomlogiccorp.com\s*$/.test(value) || /@realintent.com\s*$/.test(value) || /@remicro.com\s*$/.test(value) || /@Remcom.com\s*$/.test(value) || /@reshape.com\s*$/.test(value) || /@roalogic.com\s*$/.test(value) || /@robustchip.com\s*$/.test(value) || /@runtimeinc.com\s*$/.test(value) || /@s2cinc.com\s*$/.test(value) || /@s3group.com\s*$/.test(value) || /@safelogic.se\s*$/.test(value) || /@sagantec.de\s*$/.test(value) || /@sagantec.nl\s*$/.test(value) || /@sagantec.com\s*$/.test(value) || /@sandwork.com\s*$/.test(value) || /@kavcak.com\s*$/.test(value) || /@scianalog.com\s*$/.test(value) || /@sd.com\s*$/.test(value) || /@semifore.com\s*$/.test(value) || /@semtech.com\s*$/.test(value) || /@sequencedesign.com\s*$/.test(value) || /@sfmtech.com\s*$/.test(value) || /@shearwater.com\s*$/.test(value) || /@sifive.com\s*$/.test(value) || /@sicanvas.com \s*$/.test(value) || /@siemens.com\s*$/.test(value) || /@sierra-da.com\s*$/.test(value) || /@sifr.com\s*$/.test(value) || /@sisoft.com\s*$/.test(value) || /@sii.co.jp\s*$/.test(value) || /@siliconcr.com\s*$/.test(value) || /@siliconds.com\s*$/.test(value) || /@silicontechnologiesinc.com\s*$/.test(value) || /@siliconcanvas.com\s*$/.test(value) || /@silexinsight.com\s*$/.test(value) || /@silvaco.com\s*$/.test(value) || /@simantis.com\s*$/.test(value) || /@snowbush.com\s*$/.test(value) || /@softmixedsignal.com\s*$/.test(value) || /@sonicsinc.com\s*$/.test(value) || /@sonnetsoftware.com\s*$/.test(value) || /@stellacorp.co.jp\s*$/.test(value) || /@stonepillar.com\s*$/.test(value) || /@sycon-design.com\s*$/.test(value) || /@syncad.com\s*$/.test(value) || /@synopsys.co.jp\s*$/.test(value) || /@synopsys.com\s*$/.test(value) || /@syntacore.com\s*$/.test(value) || /@syntest.com\s*$/.test(value) || /@syosil.com\s*$/.test(value) || /@takumi-solutions.com\s*$/.test(value) || /@tanner.com\s*$/.test(value) || /@tdasystems.com\s*$/.test(value) || /@txcorp.com\s*$/.test(value) || /@tekstart.com\s*$/.test(value) || /@tempusf.com\s*$/.test(value) || /@tension.com\s*$/.test(value) || /@terasystems.com\s*$/.test(value) || /@tessi.com\s*$/.test(value) || /@timingdesigner.com\s*$/.test(value) || /@tool.co.jp\s*$/.test(value) || /@tracto.da.com\s*$/.test(value) || /@transeda.com\s*$/.test(value) || /@truecircuits.com\s*$/.test(value) || /@trustic.eu\s*$/.test(value) || /@ubitechnology.com\s*$/.test(value) || /@uniquify.com\s*$/.test(value) || /@veriests.com\s*$/.test(value) || /@veriez.com\s*$/.test(value) || /@verific.com\s*$/.test(value) || /@vtech-inc.co.jp\s*$/.test(value) || /@verifore.jp\s*$/.test(value) || /@verilab.com\s*$/.test(value) || /@verisense.com\s*$/.test(value) || /@verisilicon.com\s*$/.test(value) || /@veritools.com\s*$/.test(value) || /@versysdesign.com\s*$/.test(value) || /@videantis.com\s*$/.test(value) || /@videantis.de\s*$/.test(value) || /@vivantecorp.com\s*$/.test(value) || /@voomtown.com\s*$/.test(value) || /@vpiphotonics.com\s*$/.test(value) || /@vworks.com\s*$/.test(value) || /@wavecomp.ai\s*$/.test(value) || /@wssi.com\s*$/.test(value) || /@xjtag.com\s*$/.test(value) || /@xpedion.com\s*$/.test(value) || /@xplm.com\s*$/.test(value) || /@xtreme-eda.com\s*$/.test(value) || /@yxi.com\s*$/.test(value) || /@zeland.com\s*$/.test(value) || /@zenasis.com\s*$/.test(value) || /@zsp.com\s*$/.test(value) || /@zuken.com\s*$/.test(value) || /@incusolution.com\s*$/.test(value) || /@atosolution.com\s*$/.test(value) || /@126.com\s*$/.test(value) || /@163.com\s*$/.test(value) || /@3ds.com\s*$/.test(value) || /@abelite-da.com\s*$/.test(value) || /@adapt-io.com\s*$/.test(value) || /@adelphia.net\s*$/.test(value) || /@adiva.com\s*$/.test(value) || /@advantest-ard.com\s*$/.test(value) || /@air.net\s*$/.test(value) || /@airmail.net\s*$/.test(value) || /@alatek.com\s*$/.test(value) || /@aldec.com\s*$/.test(value) || /@alessandroogheri.com\s*$/.test(value) || /@alibaba.com\s*$/.test(value) || /@aliyun.com\s*$/.test(value) || /@altium.com\s*$/.test(value) || /@altium.com.au\s*$/.test(value) || /@amiq.com\s*$/.test(value) || /@analogbits.com\s*$/.test(value) || /@analogix.com\s*$/.test(value) || /@anasift.com\s*$/.test(value) || /@andestech.com\s*$/.test(value) || /@ankasys.com\s*$/.test(value) || /@ansys.com\s*$/.test(value) || /@aol.com\s*$/.test(value) || /@apsimtech.com\s*$/.test(value) || /@arcadiainnovation.com\s*$/.test(value) || /@archelon.com\s*$/.test(value) || /@arteris.com\s*$/.test(value) || /@ascinc.com\s*$/.test(value) || /@asicdepot.com\s*$/.test(value) || /@asic-world.com\s*$/.test(value) || /@astc-design.com\s*$/.test(value) || /@atlanticbb.net\s*$/.test(value) || /@atoptech.com\s*$/.test(value) || /@att.net\s*$/.test(value) || /@att.yahoo.com\s*$/.test(value) || /@attbi.com\s*$/.test(value) || /@attglobal.net\s*$/.test(value) || /@aumraj.com\s*$/.test(value) || /@aurora.tech\s*$/.test(value) || /@ausdia.c
20505om\s*$/.test(value) || /@autodesk.com\s*$/.test(value) || /@autowb.com\s*$/.test(value) || /@avatar-da.com\s*$/.test(value) || /@averant.com\s*$/.test(value) || /@avery-design.com\s*$/.test(value) || /@awaveip.com\s*$/.test(value) || /@axiscorp.com\s*$/.test(value) || /@axisdesign.com\s*$/.test(value) || /@axissystems.com\s*$/.test(value) || /@basicisp.net\s*$/.test(value) || /@bcpl.net\s*$/.test(value) || /@bellatlantic.net\s*$/.test(value) || /@bellnet.ca\s*$/.test(value) || /@bellsouth.net\s*$/.test(value) || /@bestweb.net\s*$/.test(value) || /@bev.net\s*$/.test(value) || /@beyondsemi.com\s*$/.test(value) || /@blacksburg.net\s*$/.test(value) || /@blazenet.net\s*$/.test(value) || /@bluepearlsoftware.com\s*$/.test(value) || /@bluespec.com\s*$/.test(value) || /@brekersystems.com\s*$/.test(value) || /@broadcom.com\s*$/.test(value) || /@cableone.net\s*$/.test(value) || /@cad-design.com\s*$/.test(value) || /@cais.net\s*$/.test(value) || /@cantv.net\s*$/.test(value) || /@capu.net\s*$/.test(value) || /@cast-inc.com\s*$/.test(value) || /@ce.medione.net\s*$/.test(value) || /@central.cox.net\s*$/.test(value) || /@centurylink.com\s*$/.test(value) || /@ceva-dsp.com\s*$/.test(value) || /@cfdrc.com\s*$/.test(value) || /@charm.net\s*$/.test(value) || /@charter.net\s*$/.test(value) || /@chipglobe.com\s*$/.test(value) || /@chipmd.com\s*$/.test(value) || /@codasip.com\s*$/.test(value) || /@comcast.net\s*$/.test(value) || /@compuserve.com\s*$/.test(value) || /@Comsol.com\s*$/.test(value) || /@concentric.net\s*$/.test(value) || /@correctdesigns.com\s*$/.test(value) || /@cortus.com\s*$/.test(value) || /@coseda-tech.com\s*$/.test(value) || /@covad.net\s*$/.test(value) || /@cox.net\s*$/.test(value) || /@coxmail.com\s*$/.test(value) || /@credosemi.com\s*$/.test(value) || /@crosslink.net\s*$/.test(value) || /@csi.com\s*$/.test(value) || /@cst.com\s*$/.test(value) || /@cvcblr.com\s*$/.test(value) || /@cwseda.com\s*$/.test(value) || /@daum.net\s*$/.test(value) || /@dca.net\s*$/.test(value) || /@dcd.pl\s*$/.test(value) || /@defactotech.com\s*$/.test(value) || /@deltanet.com\s*$/.test(value) || /@designw.com\s*$/.test(value) || /@diakopto.com\s*$/.test(value) || /@digitalcircuitdesign.com\s*$/.test(value) || /@direcway.com \s*$/.test(value) || /@dmv.com\s*$/.test(value) || /@dolphin-design.fr\s*$/.test(value) || /@dslextreme.com\s*$/.test(value) || /@dspg.com\s*$/.test(value) || /@dynalith.com\s*$/.test(value) || /@earthlink.net\s*$/.test(value) || /@east.cox.net\s*$/.test(value) || /@easyic.ro\s*$/.test(value) || /@edaptive.com\s*$/.test(value) || /@edge.net\s*$/.test(value) || /@elcamino.de\s*$/.test(value) || /@elgris.com\s*$/.test(value) || /@elsys-eastern.com\s*$/.test(value) || /@email.com\s*$/.test(value) || /@empyrean.com.cn\s*$/.test(value) || /@empyrean-tech.com\s*$/.test(value) || /@emsn.com\s*$/.test(value) || /@enter.net\s*$/.test(value) || /@erols.com\s*$/.test(value) || /@esperanto.ai\s*$/.test(value) || /@etopus.com\s*$/.test(value) || /@eurekatech.com\s*$/.test(value) || /@excellicon.com\s*$/.test(value) || /@excite.com\s*$/.test(value) || /@ezy.net\s*$/.test(value) || /@fastmail.fm\s*$/.test(value) || /@fcc.net\s*$/.test(value) || /@fintronic.com\s*$/.test(value) || /@fishtail-da.com\s*$/.test(value) || /@flashcom.net\s*$/.test(value) || /@forthnet.gr\s*$/.test(value) || /@fract-tech.com\s*$/.test(value) || /@frobas.com\s*$/.test(value) || /@frontier.com\s*$/.test(value) || /@frontline.net\s*$/.test(value) || /@fsresult.com\s*$/.test(value) || /@ftlsystems.com\s*$/.test(value) || /@fullchannel.net\s*$/.test(value) || /@gaisler.com\s*$/.test(value) || /@Gateway.net\s*$/.test(value) || /@gemdt.com\s*$/.test(value) || /@gl.centurytel.net\s*$/.test(value) || /@gl.umbc.edu\s*$/.test(value) || /@gmail.co.in\s*$/.test(value) || /@gmail.com\s*$/.test(value) || /@gmail.hu\s*$/.test(value) || /@gmail.it\s*$/.test(value) || /@gmail.ru\s*$/.test(value) || /@gtei.bellatlantic.net\s*$/.test(value) || /@gti.net\s*$/.test(value) || /@guc-asic.com\s*$/.test(value) || /@gw.dmv.com\s*$/.test(value) || /@hanmail.net\s*$/.test(value) || /@hdl-dh.com\s*$/.test(value) || /@hisilicon.com\s*$/.test(value) || /@hotcom\s*$/.test(value) || /@hotmail.com\s*$/.test(value) || /@huawei.com\s*$/.test(value) || /@hypersilicon.com\s*$/.test(value) || /@ibextech.jp\s*$/.test(value) || /@ibm.net \s*$/.test(value) || /@icloud.com\s*$/.test(value) || /@icmanage.com\s*$/.test(value) || /@idx4.com\s*$/.test(value) || /@iearthlink.net\s*$/.test(value) || /@ihwy.com\s*$/.test(value) || /@ime.cas.cn\s*$/.test(value) || /@imgtec.com\s*$/.test(value) || /@incentia.com\s*$/.test(value) || /@incoresemi.com\s*$/.test(value) || /@infinisim.com\s*$/.test(value) || /@inno-logic.com\s*$/.test(value) || /@innosilicon.com\s*$/.test(value) || /@inphi.com\s*$/.test(value) || /@insighteda.com\s*$/.test(value) || /@integra.net\s*$/.test(value) || /@Integratedsoft.com\s*$/.test(value) || /@intelliprop.com\s*$/.test(value) || /@interaccess.com\s*$/.test(value) || /@internetmci.com\s*$/.test(value) || /@interrasystems.com\s*$/.test(value) || /@intusoft.com\s*$/.test(value) || /@ionet.net\s*$/.test(value) || /@i-plus.net\s*$/.test(value) || /@ip-maker.com\s*$/.test(value) || /@iroctech.com\s*$/.test(value) || /@ismtp.earthlink.net\s*$/.test(value) || /@isp.com\s*$/.test(value) || /@itol.com\s*$/.test(value) || /@ix.netcom.com\s*$/.test(value) || /@javelin-da.com\s*$/.test(value) || /@Jcmwave.com\s*$/.test(value) || /@jedat.co.jp\s*$/.test(value) || /@jtag.com\s*$/.test(value) || /@juno.com\s*$/.test(value) || /@kandou.com\s*$/.test(value) || /@kavcak.com\s*$/.test(value) || /@keysight.com\s*$/.test(value) || /@kulmeo.com\s*$/.test(value) || /@live.com\s*$/.test(value) || /@lorentzsolution.com\s*$/.test(value) || /@lowrisc.org\s*$/.test(value) || /@lucedaphotonics.com\s*$/.test(value) || /@m31tech.com\s*$/.test(value) || /@magillem.com\s*$/.test(value) || /@magma.com\s*$/.test(value) || /@maviss-design.com\s*$/.test(value) || /@mayahtt.com\s*$/.test(value) || /@mchsi.com\s*$/.test(value) || /@mciworldcom.net \s*$/.test(value) || /@mediacomcable.com\s*$/.test(value) || /@medione.net\s*$/.test(value) || /@megapathdsl.net\s*$/.test(value) || /@memscap.com\s*$/.test(value) || /@mentor.com\s*$/.test(value) || /@mentorg.com\s*$/.test(value) || /@mentorgraphics.com\s*$/.test(value) || /@methods2business.com\s*$/.test(value) || /@microeda.com\s*$/.test(value) || /@mindspring.com\s*$/.test(value) || /@mixel.com\s*$/.test(value) || /@morethanip.com\s*$/.test(value) || /@mosys.com\s*$/.test(value) || /@motivo.ai\s*$/.test(value) || /@msn.com\s*$/.test(value) || /@msol.co.jp\s*$/.test(value) || /@mti.com\s*$/.test(value) || /@mw.centurytel.net\s*$/.test(value) || /@mycad.com\s*$/.test(value) || /@nangate.com\s*$/.test(value) || /@nauticom.net\s*$/.test(value) || /@naver.com\s*$/.test(value) || /@netaddress.usa.net\s*$/.test(value) || /@netcom.ca\s*$/.test(value) || /@netcom.com \s*$/.test(value) || /@netscape.com\s*$/.test(value) || /@netzero.net\s*$/.test(value) || /@nimbic.com\s*$/.test(value) || /@njd.xo.com\s*$/.test(value) || /@nobug.ro\s*$/.test(value) || /@nptest.com\s*$/.test(value) || /@nsysinc.com\s*$/.test(value) || /@ntegra.net\s*$/.test(value) || /@ntlab.com\s*$/.test(value) || /@numeritech.com\s*$/.test(value) || /@nw.centurytel.net\s*$/.test(value) || /@nwlogic.com\s*$/.test(value) || /@oasis-ds.com\s*$/.test(value) || /@obsidiansoft.com\s*$/.test(value) || /@oea.com\s*$/.test(value) || /@olg.com\s*$/.test(value) || /@onespin-solutions.
20505com\s*$/.test(value) || /@opshub.com\s*$/.test(value) || /@optem.com\s*$/.test(value) || /@optimalcorp.com\s*$/.test(value) || /@Optiwave.com\s*$/.test(value) || /@optonline.net\s*$/.test(value) || /@oranek.com\s*$/.test(value) || /@oskitechnology.com\s*$/.test(value) || /@outblaze.com\s*$/.test(value) || /@outlook.com\s*$/.test(value) || /@pacbell.net \s*$/.test(value) || /@paradigm-works.com\s*$/.test(value) || /@paragon-ic.com\s*$/.test(value) || /@patmedia.net\s*$/.test(value) || /@peoplepc.com\s*$/.test(value) || /@perceptionsoftware.com\s*$/.test(value) || /@perfectvips.com\s*$/.test(value) || /@pgc.com\s*$/.test(value) || /@pgc.com.tw\s*$/.test(value) || /@phoenixsoftware.com\s*$/.test(value) || /@Photond.com\s*$/.test(value) || /@pipeline.com\s*$/.test(value) || /@pitsim.com\s*$/.test(value) || /@plda.com\s*$/.test(value) || /@prodesigncad.de\s*$/.test(value) || /@prodesign-europe.com\s*$/.test(value) || /@prodigy.net\s*$/.test(value) || /@prolific.com.tw\s*$/.test(value) || /@prolificinc.com\s*$/.test(value) || /@proptd.net\s*$/.test(value) || /@prosilog.com\s*$/.test(value) || /@prover.com\s*$/.test(value) || /@provino-tech.com\s*$/.test(value) ||
20506            /@psi.net\s*$/.test(value) || /@ptc.com\s*$/.test(value) || /@ptd.net\s*$/.test(value) || /@pulsic.com\s*$/.test(value) ||
20507            /@qdai.com\s*$/.test(value) || /@qis.net\s*$/.test(value) || /@qq.com\s*$/.test(value) || /@qwest.net\s*$/.test(value) ||
20508            /@rachip.com\s*$/.test(value) || /@rackspace.com\s*$/.test(value) || /@randomlogiccorp.com\s*$/.test(value) || /@rcn.com\s*$/.test(value) || /@realintent.com\s*$/.test(value) || /@rediffmail.com\s*$/.test(value) || /@relay.psi.net\s*$/.test(value) || /@Remcom.com\s*$/.test(value) || /@remicro.com\s*$/.test(value) || /@reshape.com\s*$/.test(value) || /@roalogic.com\s*$/.test(value) || /@robustchip.com\s*$/.test(value) || /@rogers.com\s*$/.test(value) || /@rr.com\s*$/.test(value) || /@rsvhr.com\s*$/.test(value) || /@runtimeinc.com\s*$/.test(value) || /@rupayamail.com\s*$/.test(value) || /@s2cinc.com\s*$/.test(value) || /@s3group.com\s*$/.test(value) || /@safelogic.se\s*$/.test(value) || /@sagantec.com\s*$/.test(value) || /@sagantec.de\s*$/.test(value) || /@sagantec.nl\s*$/.test(value) || /@sandwork.com\s*$/.test(value) || /@sbcglobal.net\s*$/.test(value) || /@sbcglobal.yahoo.com\s*$/.test(value) || /@scianalog.com\s*$/.test(value) || /@sd.com\s*$/.test(value) || /@semifore.com\s*$/.test(value) || /@semtech.com\s*$/.test(value) || /@sequencedesign.com\s*$/.test(value) || /@sfmtech.com\s*$/.test(value) || /@shearwater.com\s*$/.test(value) || /@sicanvas.com \s*$/.test(value) || /@siemens.com\s*$/.test(value) || /@sierra-da.com\s*$/.test(value) || /@sifive.com\s*$/.test(value) || /@sifr.com\s*$/.test(value) || /@sii.co.jp\s*$/.test(value) || /@silexinsight.com\s*$/.test(value) || /@siliconcanvas.com\s*$/.test(value) || /@siliconcr.com\s*$/.test(value) || /@siliconds.com\s*$/.test(value) || /@silicontechnologiesinc.com\s*$/.test(value) || /@silvaco.com\s*$/.test(value) || /@simantis.com\s*$/.test(value) || /@sisoft.com\s*$/.test(value) || /@sk.sympatico.ca\s*$/.test(value) || /@smarthost.cox.com\s*$/.test(value) || /@snip.net\s*$/.test(value) || /@snowbush.com\s*$/.test(value) || /@so.centurytel.net\s*$/.test(value) || /@softmixedsignal.com\s*$/.test(value) || /@sonicsinc.com\s*$/.test(value) || /@sonnetsoftware.com\s*$/.test(value) || /@sprint.com\s*$/.test(value) || /@sprintmail.com \s*$/.test(value) || /@sprynet.com\s*$/.test(value) || /@starpower.net\s*$/.test(value) || /@stellacorp.co.jp\s*$/.test(value) || /@stonepillar.com\s*$/.test(value) || /@suddenlink.com\s*$/.test(value) || /@surewest.net\s*$/.test(value) || /@swva.net\s*$/.test(value) || /@sycon-design.com\s*$/.test(value) || /@sympatico.ca\s*$/.test(value) || /@synacor.com\s*$/.test(value) || /@syncad.com\s*$/.test(value) || /@synopsys.co.jp\s*$/.test(value) || /@synopsys.com\s*$/.test(value) || /@syntacore.com\s*$/.test(value) || /@syntest.com\s*$/.test(value) || /@syosil.com\s*$/.test(value) || /@takumi-solutions.com\s*$/.test(value) || /@tanner.com\s*$/.test(value) || /@tdasystems.com\s*$/.test(value) || /@tekstart.com\s*$/.test(value) || /@telus.net\s*$/.test(value) || /@tempusf.com\s*$/.test(value) || /@tension.com\s*$/.test(value) || /@terasystems.com\s*$/.test(value) || /@tessi.com\s*$/.test(value) || /@timingdesigner.com\s*$/.test(value) || /@tool.co.jp\s*$/.test(value) || /@toto.net\s*$/.test(value) || /@tracto-da.com \s*$/.test(value) || /@transeda.com\s*$/.test(value) || /@truecircuits.com\s*$/.test(value) || /@trustic.eu\s*$/.test(value) || /@tucows.com\s*$/.test(value) || /@txcorp.com\s*$/.test(value) || /@ubitechnology.com\s*$/.test(value) || /@uniquify.com\s*$/.test(value) || /@usa.net\s*$/.test(value) || /@usit.net\s*$/.test(value) || /@uu.net\s*$/.test(value) || /@veanlo.com\s*$/.test(value) || /@veriests.com\s*$/.test(value) || /@veriez.com\s*$/.test(value) || /@verific.com\s*$/.test(value) || /@verifore.jp\s*$/.test(value) || /@verilab.com\s*$/.test(value) || /@verisense.com\s*$/.test(value) || /@verisilicon.com\s*$/.test(value) || /@veritools.com\s*$/.test(value) || /@verizon.net\s*$/.test(value) || /@versysdesign.com\s*$/.test(value) || /@videantis.com\s*$/.test(value) || /@videantis.de\s*$/.test(value) || /@videotron.ca\s*$/.test(value) || /@vivantecorp.com\s*$/.test(value) || /@voomtown.com\s*$/.test(value) || /@vpiphotonics.com\s*$/.test(value) || /@vtech-inc.co.jp\s*$/.test(value) || /@vworks.com\s*$/.test(value) || /@wavecomp.ai\s*$/.test(value) || /@webstable.com\s*$/.test(value) || /@west.cox.net\s*$/.test(value) || /@wideopenwest.com\s*$/.test(value) || /@windstream.com\s*$/.test(value) || /@wockcy.com\s*$/.test(value) || /@worldnet.att.net \s*$/.test(value) || /@wssi.com\s*$/.test(value) || /@xjtag.com\s*$/.test(value) || /@xo.com\s*$/.test(value) || /@xpedion.com\s*$/.test(value) || /@xplm.com\s*$/.test(value) || /@xtreme-eda.com\s*$/.test(value) || /@yahoo.ca\s*$/.test(value) || /@yahoo.cn\s*$/.test(value) || /@yahoo.co.id\s*$/.test(value) || /@yahoo.co.in\s*$/.test(value) || /@yahoo.co.jp\s*$/.test(value) || /@yahoo.co.kr\s*$/.test(value) || /@yahoo.co.nz\s*$/.test(value) || /@yahoo.co.th\s*$/.test(value) || /@yahoo.co.uk\s*$/.test(value) || /@yahoo.com\s*$/.test(value) || /@yahoo.de\s*$/.test(value) || /@yahoo.dk\s*$/.test(value) || /@yahoo.es\s*$/.test(value) || /@yahoo.fr\s*$/.test(value) || /@yahoo.gr\s*$/.test(value) || /@yahoo.ie\s*$/.test(value) || /@yahoo.in\s*$/.test(value) || /@yahoo.it\s*$/.test(value) || /@yahoo.no\s*$/.test(value) || /@yahoo.pl\s*$/.test(value) || /@yahoo.ro\s*$/.test(value) || /@yahoo.se\s*$/.test(value) || /@yahoogroups.com\s*$/.test(value) || /@ymail.com\s*$/.test(value) || /@yopmail.com\s*$/.test(value) || /@yxi.com\s*$/.test(value) || /@zeland.com\s*$/.test(value) || /@zenasis.com\s*$/.test(value) || /@ziplink.net\s*$/.test(value) || /@zsp.com\s*$/.test(value) || /@zuken.com\s*$/.test(value) || /@empal.com\s*$/.test(value) || /@nate.com\s*$/.test(value) || /@paran.com\s*$/.test(value) || /@hitel.net\s*$/.test(value) || /@ednc.com\s*$/.test(value) || /@sailline.co.
20508kr\s*$/.test(value) || /@asml.com\s*$/.test(value)) {
20509            return false;
20510        }else{
20511            return true;
20512        }
20513    }, "Invalid email. Email from this domain name is not allowed.");
20514
20515    jQuery.validator.addMethod("Student", function (value, element) {
20516        return this.optional(element) || /^\w+[\w-\.]*\@[students]{8,8}\.[adu]{3,3}\.[ac]{2,2}\.[ae]{2,2}$/.test(value);
20517    }, "Please specify the correct domain for your documents");
20518
20519    jQuery(document).ready(function ($) {
20520
20521        $(".scroll-to-top").on("click", function () {
20522            $('body,html').animate({
20523                    scrollTop: 0,
20524                }, 2000
20525            );
20526        });
20527
20528        if(typeof $.fn.tooltip!="undefined"){
20529          $('[data-toggle="tooltip"]').tooltip({html: true});
20530        }
20531
20532        if ($('.cd-top').length > 0) {
20533            // browser window scroll (in pixels) after which the "back to top" link is shown
20534            var offset = 300,
20535                //browser window scroll (in pixels) after which the "back to top" link opacity is reduced
20536                offset_opacity = 1200,
20537                //duration of the top scrolling animation (in ms)
20538                scroll_top_duration = 700,
20539                //grab the "back to top" link
20540                $back_to_top = $('.cd-top');
20541
20542            //hide or show the "back to top" link
20543            $(window).scroll(function () {
20544                ($(this).scrollTop() > offset) ? $back_to_top.addClass('cd-is-visible') : $back_to_top.removeClass('cd-is-visible cd-fade-out');
20545                if ($(this).scrollTop() > offset_opacity) {
20546                    $back_to_top.addClass('cd-fade-out');
20547                }
20548            });
20549
20550            //smooth scroll to top
20551            $back_to_top.on('click', function (event) {
20552                event.preventDefault();
20553                $('body,html').animate({
20554                        scrollTop: 0,
20555                    }, scroll_top_duration
20556                );
20557            });
20558        }
20559    });
20560
20561    function IsinIframe () {
20562        try {
20563            return window.self !== window.top;
20564        } catch (e) {
20565            return true;
20566        }
20567    }
20568    function resizeIframe(obj) {
20569        obj.style.height = obj.contentWindow.document.documentElement.scrollHeight + 'px';
20570    }
20571    function getUrlParameter(name) {
20572      name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
20573      var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
20574      var results = regex.exec(location.search);
20575      return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
20576    };
20577    </script>
20577
20578<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
20578<script>
20579
20580
20581    $(document).ready(function() {
20582
20583
20584        $("#top").click(function() { // When arrow is clicked
20585            $("body,html").animate({
20586                scrollTop: 0 // Scroll to top of body
20587            }, 500);
20588        });
20589
20590        $(window).scroll(function() {
20591            if ($(this).scrollTop() >= 50) { // If page is scrolled more than 50px
20592                $("#top").fadeIn(200); // Fade in the arrow
20593            } else {
20594                $("#top").fadeOut(200); // Else fade out the arrow
20595            }
20596        });
20597
20598      });    var num = 30;
20599
20600        $(window).bind('scroll', function () {
20601            if ($(window).scrollTop() > num) {
20602        
20603                $('.sticky').addClass('stickyNav');
20604            } else {
20605                $('.sticky').removeClass('stickyNav');
20606            }
20607        });
20608        
20609        $('.navbar-nav>li>a, .navClose').on('click', function(){
20610            $('.navbar-collapse').collapse('hide');
20611        });
20612         $('.slide, .btn-close-access').on('click', function(){
20613            $('#accessibility-fade-in').toggleClass('show');
20614        });
20615        </script>
20615
20616
20617
20618 
20618<script>
20619    document.addEventListener('DOMContentLoaded', function() {
20620      var newTitle = "CodeSecCon 2026 | Aug 19, 2026 | The Virtual Conference on Software Security";
20621
20622      // Change <title> tag (browser tab title)
20623      document.title = newTitle;
20624
20625      // Change <meta property="og:title">
20626      var metaTag = document.querySelector('meta[property="og:title"]');
20627      if (metaTag) {
20628        metaTag.setAttribute('content', newTitle);
20629        console.log("Meta og:title updated to:", newTitle);
20630      } else {
20631        console.warn("Meta tag for og:title not found.");
20632      }
20633    });
20634  </script>
20634
20635
20636<script type="text/javascript">
20637      $(".header-content li.active").removeClass("active");
20638      $(".header-content li a[href*='registration-form']").parent().addClass("active");
20639    </script>
20639<script type="text/javascript">
20640$(document).ready(function () {
20641    if(CustomGetCookie("ppc")==null){
20642        //
20643    } else {
20644        $("#privacy_sticky").remove();
20645    }
20646
20647    });
20648function CustomGetCookie(name) {
20649  var v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
20650  return v ? v[2] : null;
20651}
20652function CustomSetCookie(name, value, days) {
20653  var d = new Date;
20654  d.setTime(d.getTime() + 24*60*60*1000*days);
20655  document.cookie = name + "=" + value + ";path=/;expires=" + d.toGMTString();
20656}
20657
20658function cookiePolicyReject() {
20659  CustomSetCookie("ppc", "2", 365);
20660  $("#privacy_sticky").remove();
20661  //$("body").append("");
20662}
20663</script>
20663
20664
20665
20666
20667<script>
20668    let applicationLang = "en";
20669    let userCancellationUrl = "https://www.codeseccon.com/form/cancelUserRegistration";
20670    let deleteUserUrl = "https://www.codeseccon.com/form/deleteUserRegistration";
20671    let userEditRegistrationUrl = "https://www.codeseccon.com/en/form/editProfileV2?user_id=&ud_profile=0&mode=&acces_id=";
20672    let logoutUrl = "https://www.codeseccon.com/en/logout"
20673
20674    // VFC-18362 - show login popup upon login failure in corresponding page
20675    let loginFailureData = [];
20676    let showloginPopupOnPageLoad = 0;
20677
20678    // VFC-18169 - determine if popup should appear on page load to ask if registration is to be cancelled
20679    let cancelRegistrationNow = 0;
20680
20681    document.addEventListener('DOMContentLoaded', function () {
20682        const urlParams = new URLSearchParams(window.location.search);
20683        const alertType = urlParams.get('alert');
20684        console.log('alertType');
20685        if (alertType === 'delete-success') {
20686            alert('Your account has been deleted successfully');
20687        }
20688    });
20689
20690
20691    /**
20692     * Setup Alert|Confirm Modal popup Content
20693     *
20694     * @param string action_type
20695     * @param boolean shouldLoadModal
20696     *
20697     * @return void
20698     */
20699    function setUpConfirmAlertPopupContent(action_type = 'cancel_registration', shouldLoadModal = false) {
20700        let confirmAlertModal = $('#confirm_alert_modal-d');
20701
20702        if('cancel_registration' == action_type){
20703            // setup modal properties
20704            $(confirmAlertModal).find('.confirm_alert_modal_title-d').text('Are you sure you want to cancel your registration?');
20705            $(confirmAlertModal).find('.confirm_alert_modal_description-d').text('Cancelling your registration will remove your access to the event. If you proceed, you will no longer be able to participate or access event-related materials.');
20706
20707            $(confirmAlertModal).find('.btn_cancel_action-d').attr('data-cancel_btn_text', 'Keep My Registration');
20708            $(confirmAlertModal).find('.btn_cancel_action-d').text('Keep My Registration');
20709
20710            $(confirmAlertModal).find('.btn_confirm_action-d').attr('data-confirm_action_type', 'cancel_registration');
20711            $(confirmAlertModal).find('.btn_confirm_action-d').text('Cancel Registration');
20712
20713            $(confirmAlertModal).find('.btn_confirm_action-d').attr('data-confirm_action_btn_text', 'Cancel Registration');
20714        }
20715
20716
20717        if('delete_registration' == action_type){
20718
20719             confirmAlertModal = $('#delete_alert_modal-d');
20720            // setup modal properties
20721            $(confirmAlertModal).find('.confirm_alert_modal_title-d').text('Delete Account?');
20722            $(confirmAlertModal).find('.confirm_alert_modal_description-d').text('Deleting your account will remove your access to the event.');
20723
20724            $(confirmAlertModal).find('.btn_cancel_action-d').attr('data-cancel_btn_text', 'Keep My Account');
20725            $(confirmAlertModal).find('.btn_cancel_action-d').text('Keep My Account');
20726
20727            $(confirmAlertModal).find('.btn_confirm_action-d').attr('data-confirm_action_type', 'delete_registration');
20728            $(confirmAlertModal).find('.btn_confirm_action-d').text('Delete Account');
20729
20730            $(confirmAlertModal).find('.btn_confirm_action-d').attr('data-confirm_action_btn_text', 'Delete Account');
20731        }
20732
20733        if(shouldLoadModal)
20734        {
20735            // VFC-18157 - show confirmation popup on all pages except at login page
20736            let currentPagePath = window.location.pathname;
20737            if(!currentPagePath.includes('login')){
20738                $(confirmAlertModal).modal('show'); // display modal
20739            }
20740        }
20741    }
20742
20743    /**
20744     * Update Login Popup content based on action that triggerd it
20745     *
20746     * @param string actionType
20747     * @param boolean hasValidationFailed
20748     */
20749    function updateUxOnLoginPopup(actionType = 'cancel_registration', hasValidationFailed = false) {
20750        let loginForm = $('body').find('#Main-Login-Frm');
20751        let formModal = $(loginForm).parents('#LoginModal');
20752        let formUrl = $(loginForm).attr('action');
20753
20754        
20755        // VFC - VFC-20150 - temporary fix if showing en link on kr view
20756        if ([10000559, 381].includes(app_id) && window.location.pathname.split('/')[1] === 'kr') {  
20757            let updatedUrl = formUrl.replace('/en/', '/kr/');  // Replace 'en' with 'kr'
20758            $(loginForm).attr('action', updatedUrl);  // Set the new action URL
20759            formUrl = updatedUrl;
20760        }
20761        formUrl = new URL(formUrl);
20762    
20763        // remove existing params from Query string
20764        formUrl.searchParams.delete('edit_registration');
20765        formUrl.searchParams.delete('cancel_registration');
20766        formUrl.searchParams.delete('delete_registration');
20767
20768        if('cancel_registration' == actionType){
20769            $(formModal).attr('data-action_type', 'cancel_registration');
20770            formUrl.searchParams.set("cancel_registration", "1");
20771
20772            let modalTitleElm = $(formModal).find('.modal-title');
20773            let formModalBodyElm = $(formModal).find('.modal-body');
20774            let cancelUserRegistrationModalTitle = 'Cancel Registration'
20775            let cancelUserRegistrationModalDescriptParagraph = '<p id="cancel_user_desc_para-d">For your security, we need you to log in to confirm your cancellation request.</p>';
20776
20777            $(modalTitleElm).attr('data-original_title', $.trim(modalTitleElm.text()));
20778            $(modalTitleElm).text(cancelUserRegistrationModalTitle);
20779            let cancelRegDescriptionParaElm = $(formModalBodyElm).find('#cancel_user_desc_para-d');
20780            if(cancelRegDescriptionParaElm.length > 0){
20781                // $(formModalBodyElm).remove('#cancel_user_desc_para-d');
20782                $('#cancel_user_desc_para-d').remove();
20783            }
20784            $(formModalBodyElm).prepend(cancelUserRegistrationModalDescriptParagraph);
20785        }
20786
20787        else if('delete_registration' == actionType){
20788
20789            $(formModal).attr('data-action_type', 'delete_registration');
20790            formUrl.searchParams.set("delete_registration", "1");
20791
20792            let modalTitleElm = $(formModal).find('.modal-title');
20793            let formModalBodyElm = $(formModal).find('.modal-body');
20794            let cancelUserRegistrationModalTitle = 'Delete Account'
20795            let cancelUserRegistrationModalDescriptParagraph = '<p id="delete_user_desc_para-d">For your security, we need you to log in to confirm your delete request.</p>';
20796
20797            $(modalTitleElm).attr('data-original_title', $.trim(modalTitleElm.text()));
20798            $(modalTitleElm).text(cancelUserRegistrationModalTitle);
20799            let cancelRegDescriptionParaElm = $(formModalBodyElm).find('#delete_user_desc_para-d');
20800            if(cancelRegDescriptionParaElm.length > 0){
20801                // $(formModalBodyElm).remove('#cancel_user_desc_para-d');
20802                $('#delete_user_desc_para-d').remove();
20803            }
20804            $(formModalBodyElm).prepend(cancelUserRegistrationModalDescriptParagraph);
20805        }
20806        else if('edit_profile' == actionType){
20807            $(formModal).attr('data-action_type', 'edit_profile');
20808            formUrl.searchParams.set("edit_my_registration", "1");
20809
20810            let modalTitleElm = $(formModal).find('.modal-title');
20811            let originalTitle = $(modalTitleElm).attr('data-original_title');
20812            if (typeof originalTitle !== 'undefined') { // case attribute is already set
20813                $(modalTitleElm).text($.trim(originalTitle));
20814                if($('#cancel_user_desc_para-d').length > 0){
20815                    $('#cancel_user_desc_para-d').remove();
20816                }
20817                $(modalTitleElm).removeAttr('data-original_title');
20818            }
20819        }
20820        else if('manage_account' == actionType){
20821            $(formModal).attr('data-action_type', 'manage_account');
20822            formUrl.searchParams.set("manage_account", "1");
20823
20824            let modalTitleElm = $(formModal).find('.modal-title');
20825            let originalTitle = $(modalTitleElm).attr('data-original_title');
20826            if (typeof originalTitle !== 'undefined') { // case attribute is already set
20827                $(modalTitleElm).text($.trim(originalTitle));
20828                if($('#cancel_user_desc_para-d').length > 0){
20829                    $('#cancel_user_desc_para-d').remove();
20830                }
20831                $(modalTitleElm).removeAttr('data-original_title');
20832            }
20833        }
20834        else{
20835            // reset form title
20836            $(formModal).removeAttr('data-action_type'); // remove action type additional attribute
20837
20838            let modalTitleElm = $(formModal).find('.modal-title');
20839            let originaTitle = $(modalTitleElm).attr('data-original_title');
20840            if (typeof originaTitle !== 'undefined') { // case attribute is already set
20841                $(modalTitleElm).text($.trim(originaTitle));
20842                if($('#cancel_user_desc_para-d').length > 0){
20843                    $('#cancel_user_desc_para-d').remove();
20844                }
20845                $(modalTitleElm).removeAttr('data-original_title');
20846            }
20847        }
20848
20849        // VFC-18362 - redirect back to same page; show error message in popup
20850        if(hasValidationFailed){
20851            $(formModal).find('#ResponseBox').text(loginFailureData.LoginMsg);
20852            $(formModal).find('#ResponseBox').css({"display": "block"});
20853        }
20854
20855        $(loginForm).attr('action', formUrl); // update form action
20856    }
20857
20858    $(function(event) {
20859
20860        if(cancelRegistrationNow){
20861            setUpConfirmAlertPopupContent('cancel_registration', true);
20862        }
20863
20864        // VFC-18362 - show login popup upon login failure in corresponding page
20865        if(showloginPopupOnPageLoad){
20866            let formModal = $('#LoginModal');
20867           
20868            // Check if loginFailureData exists and is not null/undefined before parsing
20869            if(loginFailureData && typeof loginFailureData === 'string'){
20870                try {
20871                    console.log(loginFailureData);
20872                    loginFailureData = JSON.parse(loginFailureData);
20873                    console.log('updateUxOnLoginPopup',loginFailureData);
20874                    console.log('loginFailureData.cancel_registration:',loginFailureData.cancel_registration);
20875                    if(loginFailureData.cancel_registration == 1 || loginFailureData.cancel_registration == '1'){
20876                      
20877                        updateUxOnLoginPopup('cancel_registration', true); // update UI|UX for cancel Registraton of popup
20878                    }
20879                    else if(loginFailureData && loginFailureData.edit_my_registration == 1){
20880                        updateUxOnLoginPopup('edit_profile', true); // update UI|UX for edit profile of popup
20881                    }
20882                } catch(e) {
20883                    console.error('Error parsing loginFailureData:', e);
20884                }
20885            } else if(loginFailureData && typeof loginFailureData === 'object'){
20886                // loginFailureData is already an object, no need to parse
20887                console.log('updateUxOnLoginPopup',loginFailureData);
20888                console.log('loginFailureData.cancel_registration:',loginFailureData.cancel_registration);
20889                if(loginFailureData.cancel_registration == 1 || loginFailureData.cancel_registration == '1'){
20890                  
20891                    updateUxOnLoginPopup('cancel_registration', true); // update UI|UX for cancel Registraton of popup
20892                }
20893                else if(loginFailureData && loginFailureData.edit_my_registration == 1){
20894                    updateUxOnLoginPopup('edit_profile', true); // update UI|UX for edit profile of popup
20895                }
20896            }
20897
20898            $(formModal).modal('show');
20899        }
20900
20901        // reset login form back to original
20902        $('body').on('click', '#LoginBtn', function(e){
20903            let loginForm = $('body').find('#Main-Login-Frm');
20904            if(loginForm.length > 0){ // form exists
20905                updateUxOnLoginPopup('simple_login'); // update UI|UX for simple Registraton of popup
20906            }
20907        });
20908
20909        // VFC-15322 - Allow Registration Cancellation
20910        let canceRegistrationlLinkElm = $('body').find('.btn_cancel_registration-d');
20911        let deleteRegistrationlLinkElm = $('body').find('.btn_delete_registration-d');
20912        if(canceRegistrationlLinkElm.length > 0 || eventNotstarted){
20913            // trigger confirm action for cancellation
20914            $('#confirm_alert_modal-d').on('click', '.btn_confirm_action-d', function(e){
20915                let elm = $(this);
20916                let actionType = $(elm).attr('data-confirm_action_type');
20917                let confirmAlertModal = $(elm).parents('#delete_alert_modal-d');
20918                $(confirmAlertModal).modal('hide'); // hide confirmation modal
20919
20920                if('cancel_registration' == actionType){
20921                    $('#confirm_alert_modal-d').hide();
20922                    if(user_id == 0){ // user is not logged in
20923                        e.preventDefault();
20924                        e.stopPropagation();
20925
20926                        let loginForm = $('body').find('#Main-Login-Frm');
20927                        if(loginForm.length > 0){ // form exists
20928                            let formModal = $(loginForm).parents('#LoginModal');
20929                            updateUxOnLoginPopup('cancel_registration'); // update UI|UX for cancel Registraton of popup
20930                            $(formModal).modal('show'); // show login form modal popup
20931                        }
20932                        return false;
20933                    }
20934
20935                    // make a ajax based server hit
20936                    $.ajax({
20937                        url: userCancellationUrl,
20938                        type: 'post',
20939                        cache: false,
20940                        success: function (response) {
20941                            response = eval('(' + response + ')');
20942                            console.log('response:', response);
20943                            if(response.success === false){
20944                                alert(response.message);
20945                            }
20946                            else{
20947                                logoutUrl = new URL(logoutUrl);
20948                                logoutUrl.searchParams.set("cancel_attendee_registration", "1");
20949
20950                                window.top.location.href = logoutUrl; // logoff current user
20951                            }
20952                        }
20953                    });
20954                }
20955            });
20956
20957            $('body').on('click', '.btn_cancel_registration-d', function(e){
20958                setUpConfirmAlertPopupContent('cancel_registration', true);
20959            });
20960        }
20961
20962        if(deleteRegistrationlLinkElm.length > 0){
20963            // trigger confirm action for cancellation
20964            $('#delete_alert_modal-d').on('click', '.btn_confirm_action-d', function(e){
20965                let elm = $(this);
20966                let actionType = $(elm).attr('data-confirm_action_type');
20967                let confirmAlertModal = $(elm).parents('#delete_alert_modal-d');
20968                $(confirmAlertModal).modal('hide'); // hide confirmation modal
20969
20970                if('delete_registration' == actionType){
20971                    if(user_id == 0){ // user is not logged in
20972                        e.preventDefault();
20973                        e.stopPropagation();
20974
20975                        let loginForm = $('body').find('#Main-Login-Frm');
20976                        if(loginForm.length > 0){ // form exists
20977                            let formModal = $(loginForm).parents('#LoginModal');
20978                            updateUxOnLoginPopup('delete_registration'); // update UI|UX for cancel Registraton of popup
20979                            $(formModal).modal('show'); // show login form modal popup
20980                        }
20981                        return false;
20982                    }
20983
20984                    // make a ajax based server hit
20985                    $.ajax({
20986                        url: deleteUserUrl,
20987                        type: 'post',
20988                        cache: false,
20989                        success: function (response) {
20990                            response = eval('(' + response + ')');
20991                            console.log('response:', response);
20992                            if(response.success === false){
20993                                alert(response.message);
20994                            }
20995                            else{
20996                                logoutUrl = new URL(logoutUrl);
20997                                logoutUrl.searchParams.set("delete_attendee_registration", "1");
20998
20999                                window.top.location.href = logoutUrl; // logoff current user
21000                            }
21001                        }
21002                    });
21003                }
21004            });
21005
21006            $('body').on('click', '.btn_delete_registration-d', function(e){
21007                setUpConfirmAlertPopupContent('delete_registration', true);
21008            });
21009        }
21010
21011
21012        // VFC-15333 - CTA Edit in the registration form
21013        let userEditRegistrationLinkElm = $('body').find('.btn_edit_registration-d');
21014        if(userEditRegistrationLinkElm.length > 0){
21015            $('body').on('click', '.btn_edit_registration-d', function(e) {
21016                let elm = $(this);
21017
21018                if (user_id == 0) { // user is not logged in
21019                    e.preventDefault();
21020                    e.stopPropagation();
21021
21022                    let loginForm = $('body').find('#Main-Login-Frm');
21023                    if(loginForm.length > 0){ // form exists
21024                        let formModal = $(loginForm).parents('#LoginModal');
21025                        updateUxOnLoginPopup('edit_profile'); // update UI|UX for edit profile of popup
21026                        $(formModal).modal('show'); // show login form modal popup
21027                    }
21028                    return false;
21029                }
21030
21031                window.location.href = userEditRegistrationUrl; // redirect user to edit profile page
21032            });
21033        }
21034
21035        let userManageAccountLinkElm = $('body').find('.btn_manage_account-d');
21036        if(userManageAccountLinkElm.length > 0){
21037            $('body').on('click', '.btn_manage_account-d', function(e) {
21038
21039                let elm = $(this);
21040
21041                e.preventDefault();
21042                e.stopPropagation();
21043
21044                let loginForm = $('body').find('#Main-Login-Frm');
21045                if(loginForm.length > 0){ // form exists
21046                    let formModal = $(loginForm).parents('#LoginModal');
21047                    updateUxOnLoginPopup('manage_account'); // update UI|UX for edit profile of popup
21048                    $(formModal).modal('show'); // show login form modal popup
21049                }
21050                return false;
21051
21052                // window.location.href = userEditRegistrationUrl; // redirect user to edit profile page
21053            });
21054        }
21055    });
21056</script>
21056
21057    
21057<script type="text/javascript">
21058      window.addEventListener('load', function() {
21059        (function (c, l, a, r, i, t, y) {
21060            c[a] = c[a] || function () {
21061                (c[a].q = c[a].q || []).push(arguments)
21062            };
21063            t = l.createElement(r);
21064            t.async = 1;
21065            t.src = "https://www.clarity.ms/tag/" + i;
21066            y = l.getElementsByTagName(r)[0];
21067            y.parentNode.insertBefore(t, y);
21068        })(window, document, "clarity", "script", "godh5n915b");
21069      });
21070    </script>
21070
21071</body>
21072
21073</html>

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.