PageSourceSearch

https://www.rims-annualconference.org/mobileadmin

html rims-annualconference.org collected 2026-10-08 23:47:52 UTC 160,239 bytes, 4,316 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4    <meta charset="utf-8">
5    <title>Attendee Check-In</title>
6
7    <meta name="apple-mobile-web-app-capable" content="yes" />
8    <meta name="HandheldFriendly" content="True">
9    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" >
10    <meta http-equiv="cleartype" content="on">
11    <link href="https://staticcdn.eventscloud.com/css/fonts/fontawesome-pro-6.7.1/css/all.css" rel="stylesheet">
12    <style type="text/css">
13        body:not(.legacy_ui) {
14  margin: 0;
15  position: relative;
16  font-family: helvetica, arial, sans-serif;
17}
18body:not(.legacy_ui)::placeholder {
19  color: #888888;
20}
21body:not(.legacy_ui) #page-content {
22  margin: 0;
23  font-size: 16px;
24  min-height: 400px;
25}
26body:not(.legacy_ui) #page-content header {
27  padding: 0.7em 0;
28  text-align: center;
29  font: 16px/16px Arial, sans-serif;
30  font-weight: bold;
31  color: #ffffff;
32  background-color: var(--primary-theme-color);
33}
34body:not(.legacy_ui) #page-content header .main-menu-button {
35  float: left;
36  width: 60px;
37  position: relative;
38  height: 30px;
39}
40body:not(.legacy_ui) #page-content header .icon-checkin {
41  color: #fff;
42  position: absolute;
43  top: -5px;
44  left: 20px;
45  width: 30px;
46  cursor: pointer;
47  font-size: 25px;
48}
49body:not(.legacy_ui) #page-content header .icon-checkin:hover {
50  color: var(--secondary-theme-color);
51  cursor: pointer;
52}
53body:not(.legacy_ui) #page-content header span {
54  display: inline-block;
55}
56body:not(.legacy_ui) #page-content .search-box {
57  position: relative;
58  background: #fff;
59}
60body:not(.legacy_ui) #page-content .search-box:not(.attendees-search-box) {
61  padding-right: 5px;
62}
63body:not(.legacy_ui) #page-content .search-box .search-elements {
64  position: relative;
65  height: 50px;
66  padding: 5px 48px 5px 10px;
67  white-space: nowrap;
68}
69body:not(.legacy_ui) #page-content .search-box .search-elements input[type="text"] {
70  width: 100%;
71  height: 48px;
72  padding-left: 30px;
73  border: 2px solid #D3D3D3;
74  border-right: none;
75  font-size: 18px;
76  line-height: 16px;
77  -moz-border-radius: 12px 0 0 12px;
78  -webkit-border-radius: 12px 0 0 12px;
79  border-radius: 12px 0 0 12px;
80  border-top-right-radius: 0;
81  border-bottom-right-radius: 0;
82}
83body:not(.legacy_ui) #page-content .search-box .search-elements input[type="text"]:focus {
84  border: 2px solid var(--primary-theme-color);
85  border-right: none;
86}
87body:not(.legacy_ui) #page-content .search-box .search-elements .search-button {
88  position: absolute;
89  float: right;
90  right: 0;
91  top: 5px;
92  width: 48px;
93  height: 48px;
94  background: var(--primary-theme-color);
95  cursor: pointer;
96  color: #fff;
97  font-size: 18px;
98  text-align: center;
99  line-height: 16px;
100  align-content: center;
101  -moz-border-radius: 0 12px 12px 0;
102  -webkit-border-radius: 0 12px 12px 0;
103  border-radius: 0 12px 12px 0;
104}
105body:not(.legacy_ui) #page-content .search-box .search-elements .search-button .icon-search {
106  color: #fff;
107  margin-left: 5px;
108}
109body:not(.legacy_ui) #page-content .search-box .search-elements .search-button:hover {
110  background: var(--secondary-theme-color);
111}
112body:not(.legacy_ui) #page-content .search-box .search-elements .icon-calendar,
113body:not(.legacy_ui) #page-content .search-box .search-elements .icon-user {
114  position: absolute;
115  top: 20px;
116  left: 20px;
117  color: var(--primary-theme-color);
118}
119body:not(.legacy_ui) #page-content .attendees-search-box .search-elements {
120  margin-right: 55px;
121}
122body:not(.legacy_ui) #page-content .attendees-search-box .register-attendee-button {
123  position: absolute;
124  right: -40px;
125  top: 15px;
126  width: 35px;
127  height: 31px;
128  background: var(--primary-theme-color);
129  cursor: pointer;
130  color: #fff;
131  font-size: 22px;
132  text-align: center;
133  line-height: 31px;
134  -moz-border-radius: 4px;
135  -webkit-border-radius: 4px;
136  border-radius: 4px;
137}
138body:not(.legacy_ui) #page-content .attendees-search-box .register-attendee-button:hover {
139  background: var(--secondary-theme-color);
140}
141body:not(.legacy_ui) #page-content .title-box {
142  padding: 10px 20px;
143  border: 1px solid var(--primary-theme-color);
144  background: var(--primary-theme-color);
145  color: #fff;
146  font-weight: bold;
147  font-size: 16px;
148  position: relative;
149  text-align: left;
150  line-height: 30px;
151}
152body:not(.legacy_ui) #page-content .title-box .title-button {
153  display: inline-block;
154  width: 20px;
155  position: relative;
156  margin: 0 20px 0 0;
157}
158body:not(.legacy_ui) #page-content .title-box .title-button .icon-arrow-left,
159body:not(.legacy_ui) #page-content .title-box .title-button .icon-cancel-circle {
160  position: absolute;
161  left: 0;
162  top: -18px;
163}
164body:not(.legacy_ui) #page-content .title-box .title-button .icon-arrow-left {
165  cursor: pointer;
166  font-size: 14px;
167  color: var(--primary-theme-color);
168  background: #fff;
169  border: 1px solid var(--primary-theme-color);
170  -moz-border-radius: 20px;
171  -webkit-border-radius: 20px;
172  border-radius: 20px;
173  padding: 5px;
174  margin-right: 20px;
175}
176body:not(.legacy_ui) #page-content .title-box .title-button .icon-arrow-left:hover {
177  color: #fff;
178  background: var(--secondary-theme-color);
179  border: 1px solid var(--secondary-theme-color);
180}
181body:not(.legacy_ui) #page-content .title-box .title-button .icon-cancel-circle {
182  cursor: pointer;
183  font-size: 24px;
184  color: #fff;
185  padding: 5px;
186  margin-right: 20px;
187  top: -23px;
188}
189body:not(.legacy_ui) #page-content .title-box .title-button .icon-cancel-circle:hover {
190  color: var(--secondary-theme-color);
191}
192body:not(.legacy_ui) #page-content .page-body {
193  width: 100%;
194  text-align: center;
195  color: #333;
196}
197body:not(.legacy_ui) #page-content .page-body ul {
198  list-style: none;
199  margin: 0;
200  padding: 0;
201  text-align: left;
202}
203body:not(.legacy_ui) #page-content .page-body img.etouches-logo {
204  margin: 20px 0;
205  width: 203px;
206}
207body:not(.legacy_ui) #page-content .page-body p.help-text {
208  margin: 0 20px;
209}
210body:not(.legacy_ui) #page-content .page-body .event-name {
211  font-size: 25px;
212}
213body:not(.legacy_ui) #page-content .page-body .error-message {
214  color: #f00;
215  padding: 5px 20px;
216}
217body:not(.legacy_ui) #page-content .page-body .blue-button,
218body:not(.legacy_ui) #page-content .page-body .white-button {
219  height: 50px;
220  width: 100%;
221  padding: 0 10px;
222  display: block;
223  line-height: 30px;
224  border: none;
225  font-size: 16px;
226  font-weight: bold;
227  text-shadow: none;
228  color: #fff;
229  background: var(--primary-theme-color);
230  -moz-border-radius: 12px;
231  -webkit-border-radius: 12px;
232  border-radius: 12px;
233}
234body:not(.legacy_ui) #page-content .page-body .blue-button [class^="icon-"],
235body:not(.legacy_ui) #page-content .page-body .blue-button [class*=" icon-"],
236body:not(.legacy_ui) #page-content .page-body .white-button [class^="icon-"],
237body:not(.legacy_ui) #page-content .page-body .white-button [class*=" icon-"] {
238  color: #fff;
239}
240body:not(.legacy_ui) #page-content .page-body .blue-button:hover,
241body:not(.legacy_ui) #page-content .page-body .white-button:hover {
242  background: var(--secondary-theme-color);
243  border-color: var(--secondary-theme-color);
244  cursor: pointer;
245}
246body:not(.legacy_ui) #page-content .page-body .blue-button:active,
247body:not(.legacy_ui) #page-content .page-body .white-button:active {
248  position: relative;
249  top: 1px;
250}
251body:not(.legacy_ui) #page-content .page-body .white-button {
252  background: #fff;
253  border: 1px solid var(--primary-theme-color);
254  color: var(--primary-theme-color);
255}
256body:not(.legacy_ui) #page-content .page-body .white-button:hover {
257  background: var(--secondary-theme-color);
258  border-color: var(--secondary-theme-color);
259  color: #fff;
260}
261body:not(.legacy_ui) #page-content .page-body input,
262body:not(.legacy_ui) #page-content .page-body textarea,
263body:not(.legacy_ui) #page-content .page-body select {
264  height: 48px;
265  width: 100%;
266  font-size: 15px;
267  line-height: 16px;
268  padding: 5px 16px 5px 16px;
269  margin-bottom: 10px;
270  border: 2px solid #D3D3D3;
271  -moz-border-radius: 12px;
272  -webkit-border-radius: 12px;
273  border-radius: 12px;
274  -webkit-box-sizing: border-box;
275  -moz-box-sizing: border-box;
276  box-sizing: border-box;
277}
278body:not(.legacy_ui) #page-content .page-body input:focus-visible,
279body:not(.legacy_ui) #page-content .page-body textarea:focus-visible,
280body:not(.legacy_ui) #page-content .page-body select:focus-visible {
281  outline: 0;
282}
283body:not(.legacy_ui) #page-content .page-body input:focus,
284body:not(.legacy_ui) #page-content .page-body textarea:focus,
285body:not(.legacy_ui) #page-content .page-body select:focus {
286  border: 2px solid var(--primary-theme-color);
287}
288body:not(.legacy_ui) #page-content .page-body form.login-from {
289  margin: 20px;
290  text-align: left;
291}
292body:not(.legacy_ui) #page-content .page-body form.login-from label {
293  font-weight: bold;
294}
295body:not(.legacy_ui) #page-content .page-body ul.event-list {
296  border-top: 1px solid #D3D3D3;
297}
298body:not(.legacy_ui) #page-content .page-body ul.event-list li {
299  position: relative;
300  padding: 10px 0px 10px 20px;
301  border-bottom: 1px solid #D3D3D3;
302  cursor: pointer;
303  color: var(--primary-theme-color);
304}
305body:not(.legacy_ui) #page-content .page-body ul.event-list li .icon {
306  font-size: 22px;
307  padding-right: 20px;
308}
309body:not(.legacy_ui) #page-content .page-body ul.event-list li .icon-folder {
310  color: var(--primary-theme-color);
311}
312body:not(.legacy_ui) #page-content .page-body ul.event-list li .icon-calendar {
313  color: var(--primary-theme-color);
314}
315body:not(.legacy_ui) #page-content .page-body ul.event-list li .icon-arrow-right {
316  color: var(--primary-theme-color);
317  font-size: 16px;
318  float: right;
319  padding-top: 5px;
320}
321body:not(.legacy_ui) #page-content .page-body ul.event-list li .event-id-label {
322  display: block;
323  color: var(--primary-theme-color);
324  font-size: 14px;
325  margin-left: 45px;
326}
327body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-name {
328  width: 35%;
329  display: inline-block;
330}
331body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info {
332  border-top: 1px solid #c6c6c6;
333  margin-left: 45px;
334  margin-top: 7px;
335  margin-right: 30px;
336  padding-top: 5px;
337  color: #000;
338  font-size: 14px;
339}
340body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part {
341  display: inline-block;
342  padding-right: 2px;
343}
344body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part + :not(:empty) {
345  border-left: 1px solid #c6c6c6;
346  padding-left: 5px;
347}
348body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty),
349body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:first-child {
350  border-left: none;
351  padding-left: 0;
352}
353body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty):not(:empty) + :empty ~ :not(:empty):last-child,
354body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:first-child:not(:empty) + :empty ~ :not(:empty):last-child {
355  border-left: 1px solid #c6c6c6;
356  padding-left: 5px;
357  margin-left: -5px;
358}
359body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty) {
360  margin-left: -5px;
361}
362body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty):last-child {
363  margin-left: -10px;
364}
365body:not(.legacy_ui) #page-content .page-body ul.event-list li:hover {
366  background: var(--secondary-theme-color);
367  color: #fff !important;
368}
369body:not(.legacy_ui) #page-content .page-body ul.event-list li:hover i,
370body:not(.legacy_ui) #page-content .page-body ul.event-list li:hover .event-item-extra-info {
371  color: #fff;
372}
373body:not(.legacy_ui) #page-content .page-body ul.event-data li {
374  padding: 10px 20px;
375}
376body:not(.legacy_ui) #page-content .page-body ul.event-data li b {
377  padding-right: 10px;
378}
379body:not(.legacy_ui) #page-content .page-body ul.menu li,
380body:not(.legacy_ui) #page-content .page-body ul.logout-confirmation li {
381  padding: 10px 20px;
382}
383body:not(.legacy_ui) #page-content .page-body ul.menu .logout-name,
384body:not(.legacy_ui) #page-content .page-body ul.logout-confirmation .logout-name {
385  font-weight: normal;
386  font-style: italic;
387}
388body:not(.legacy_ui) #page-content .page-body ul.attendees-list li {
389  cursor: pointer;
390  position: relative;
391  border-bottom: 1px solid #D3D3D3;
392  padding: 10px 0;
393}
394body:not(.legacy_ui) #page-content .page-body ul.attendees-list li table {
395  width: 100%;
396  border-collapse: collapse;
397  table-layout: fixed;
398}
399body:not(.legacy_ui) #page-content .page-body ul.attendees-list li table td {
400  position: relative;
401  padding: 0 10px;
402  vertical-align: top;
403  word-wrap: break-word;
404}
405body:not(.legacy_ui) #page-content .page-body ul.attendees-list li table tr.info td {
406  padding-top: 0;
407}
408body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .checked-icon {
409  width: 40px;
410  padding: 0;
411}
412body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .checked-icon .icon-user,
413body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .checked-icon .icon-blankperson,
414body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .checked-icon .icon-dashedperson {
415  font-size: 26px;
416  color: var(--primary-theme-color);
417  width: 30px;
418  margin-left: 10px;
419}
420body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .name {
421  color: var(--primary-theme-color);
422  text-align: left;
423}
424body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .name .company {
425  width: 100%;
426  max-width: 100%;
427  text-align: left;
428  color: #838383;
429}
430body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .email {
431  color: #787878;
432  font-size: 14px;
433}
434body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .buttons {
435  margin: 10px 0 0 0;
436}
437body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .buttons button {
438  width: auto;
439  display: inline-block;
440  margin-right: 10px;
441}
442body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .buttons button i {
443  margin-right: 10px;
444}
445body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .company {
446  width: 100px;
447  max-width: 100px;
448  text-align: right;
449  color: #838383;
450  padding-right: 10px;
451}
452body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .info {
453  display: none;
454}
455body:not(.legacy_ui) #page-content .page-body ul.attendees-list li.active {
456  font-weight: bold;
457  color: var(--primary-theme-color) !important;
458  border: 1px solid var(--primary-theme-color);
459}
460body:not(.legacy_ui) #page-content .page-body ul.attendees-list li.active > :not(button) > i,
461body:not(.legacy_ui) #page-content .page-body ul.attendees-list li.active td,
462body:not(.legacy_ui) #page-content .page-body ul.attendees-list li.active .icon-user,
463body:not(.legacy_ui) #page-content .page-body ul.attendees-list li.active .icon-blankperson,
464body:not(.legacy_ui) #page-content .page-body ul.attendees-list li.active .icon-dashedperson {
465  font-weight: bold;
466}
467body:not(.legacy_ui) #page-content .page-body ul.attendees-list li:not(.active):hover {
468  background: var(--secondary-theme-color);
469  color: #fff !important;
470}
471body:not(.legacy_ui) #page-content .page-body ul.attendees-list li:not(.active):hover i,
472body:not(.legacy_ui) #page-content .page-body ul.attendees-list li:not(.active):hover td,
473body:not(.legacy_ui) #page-content .page-body ul.attendees-list li:not(.active):hover .icon-user,
474body:not(.legacy_ui) #page-content .page-body ul.attendees-list li:not(.active):hover .company,
475body:not(.legacy_ui) #page-content .page-body ul.attendees-list li:not(.active):hover .icon-blankperson,
476body:not(.legacy_ui) #page-content .page-body ul.attendees-list li:not(.active):hover .visibleSubFields,
477body:not(.legacy_ui) #page-content .page-body ul.attendees-list li:not(.active):hover .icon-dashedperson {
478  color: #fff;
479}
480body:not(.legacy_ui) #page-content .page-body ul.attendees-list li .visibleSubFields {
481  color: #787878;
482  cursor: auto;
483  font-size: 14px;
484}
485body:not(.legacy_ui) #page-content .page-body .register-attendee-header {
486  -moz-border-radius: 5px;
487  -webkit-border-radius: 5px;
488  border-radius: 5px;
489  background: var(--primary-theme-color);
490  padding: 10px 10px 10px 60px;
491  margin: 20px;
492  color: #FFFFFF;
493  text-align: left;
494  font-size: 16px;
495  font-weight: bold;
496  position: relative;
497}
498body:not(.legacy_ui) #page-content .page-body .register-attendee-header i {
499  font-size: 24px;
500  position: absolute;
501  top: 9px;
502  left: 20px;
503}
504body:not(.legacy_ui) #page-content .page-body ul.register-attendee {
505  margin-bottom: 0;
506}
507body:not(.legacy_ui) #page-content .page-body ul.register-attendee li {
508  padding: 5px 20px;
509}
510body:not(.legacy_ui) #page-content .page-body ul.register-attendee li label {
511  font-weight: bold;
512  color: #2D2D2D;
513  display: block;
514  margin-bottom: 5px;
515}
516body:not(.legacy_ui) #page-content .page-body .register-attendee-questions {
517  margin: 0 auto !important;
518  padding: 0 20px !important;
519}
520body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .fallback-question-container {
521  width: 100%;
522  margin-bottom: 10px;
523}
524body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .fallback-question-container .fallback-question-label {
525  font-weight: bold;
526  color: #2D2D2D;
527  display: block;
528  margin-bottom: 5px;
529  text-align: left;
530}
531body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .fallback-question-container .fallback-question-label .required-indicator {
532  color: #f00;
533  margin-left: 2px;
534}
535body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .fallback-question-container .fallback-question-input {
536  height: 48px;
537  width: 100%;
538  font-size: 15px;
539  line-height: 16px;
540  padding: 5px 16px 5px 16px;
541  margin-bottom: 10px;
542  border: 2px solid #D3D3D3;
543  -moz-border-radius: 12px;
544  -webkit-border-radius: 12px;
545  border-radius: 12px;
546  -webkit-box-sizing: border-box;
547  -moz-box-sizing: border-box;
548  box-sizing: border-box;
549}
550body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .fallback-question-container .fallback-question-input:focus-visible {
551  outline: 0;
552}
553body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .fallback-question-container .fallback-question-input:focus {
554  border: 2px solid var(--primary-theme-color);
555}
556body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .fallback-question-container .fallback-question-input::placeholder {
557  color: #888888;
558}
559body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer {
560  width: 100% !important;
561  border: none !important;
562  background: transparent !important;
563  margin-bottom: 10px !important;
564}
565body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer tbody,
566body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer tr {
567  display: block !important;
568  width: 100% !important;
569}
570body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] tr,
571body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] tr {
572  display: flex !important;
573  flex-direction: column !important;
574}
575body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionLabel,
576body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionLabel {
577  width: 100% !important;
578  text-align: left !important;
579  padding: 0 0 5px 0 !important;
580  display: block !important;
581  font-weight: bold !important;
582  color: #2D2D2D !important;
583}
584body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput,
585body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput {
586  width: 100% !important;
587  display: block !important;
588}
589body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput input[type="text"],
590body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput input[type="email"],
591body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput input[type="text"],
592body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput input[type="email"] {
593  height: 48px !important;
594  width: 100% !important;
595  font-size: 15px !important;
596  line-height: 16px !important;
597  padding: 5px 16px 5px 16px !important;
598  margin-bottom: 10px !important;
599  border: 2px solid #D3D3D3 !important;
600  -moz-border-radius: 12px;
601  -webkit-border-radius: 12px;
602  border-radius: 12px;
603  -webkit-box-sizing: border-box;
604  -moz-box-sizing: border-box;
605  box-sizing: border-box;
606}
607body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput input[type="text"]:focus-visible,
608body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput input[type="email"]:focus-visible,
609body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput input[type="text"]:focus-visible,
610body:not(.legacy_
610ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput input[type="email"]:focus-visible {
611  outline: 0 !important;
612}
613body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput input[type="text"]:focus,
614body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput input[type="email"]:focus,
615body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput input[type="text"]:focus,
616body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput input[type="email"]:focus {
617  border: 2px solid var(--primary-theme-color) !important;
618}
619body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput textarea,
620body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput textarea {
621  width: 100% !important;
622  font-size: 15px !important;
623  line-height: 16px !important;
624  padding: 5px 16px 5px 16px !important;
625  margin-bottom: 10px !important;
626  border: 2px solid #D3D3D3 !important;
627  -moz-border-radius: 12px;
628  -webkit-border-radius: 12px;
629  border-radius: 12px;
630  -webkit-box-sizing: border-box;
631  -moz-box-sizing: border-box;
632  box-sizing: border-box;
633  min-height: 80px !important;
634  resize: vertical !important;
635}
636body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput textarea:focus-visible,
637body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput textarea:focus-visible {
638  outline: 0 !important;
639}
640body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="1"] .questionInput textarea:focus,
641body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="2"] .questionInput textarea:focus {
642  border: 2px solid var(--primary-theme-color) !important;
643}
644body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="3"] tr {
645  display: flex !important;
646  flex-direction: row !important;
647  align-items: center !important;
648}
649body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="3"] .questionLabel {
650  flex-shrink: 0 !important;
651  padding-right: 10px !important;
652  display: inline-block !important;
653  text-align: left !important;
654  font-weight: bold !important;
655  color: #2D2D2D !important;
656}
657body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="3"] .questionInput {
658  display: inline-block !important;
659  padding: 0 !important;
660}
661body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="4"] tr,
662body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="17"] tr,
663body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="16"] tr {
664  display: flex !important;
665  flex-direction: column !important;
666  align-items: flex-start !important;
667}
668body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="4"] .questionLabel,
669body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="17"] .questionLabel,
670body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="16"] .questionLabel {
671  width: 100% !important;
672  padding-bottom: 5px !important;
673  display: block !important;
674  text-align: left !important;
675  font-weight: bold !important;
676  color: #2D2D2D !important;
677}
678body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="4"] .questionInput,
679body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="17"] .questionInput,
680body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="16"] .questionInput {
681  width: 100% !important;
682  display: block !important;
683  padding: 0 !important;
684}
685body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox,
686body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] {
687  width: 100% !important;
688  border: none !important;
689  background: transparent !important;
690  margin: 0 !important;
691  text-align: left !important;
692}
693body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox td[role="group"],
694body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox td.standard,
695body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] td[role="group"],
696body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] td.standard {
697  padding: 0 0 0 20px !important;
698  text-align: left !important;
699}
700body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox td[role="group"],
701body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] td[role="group"] {
702  vertical-align: top !important;
703}
704body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox td.standard,
705body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] td.standard {
706  display: block !important;
707}
708body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox hr,
709body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] hr {
710  display: none !important;
711}
712body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox br,
713body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] br {
714  display: none !important;
715}
716body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox input[type="checkbox"],
717body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox input[type="radio"],
718body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] input[type="checkbox"],
719body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] input[type="radio"] {
720  display: inline-block !important;
721  vertical-align: middle !important;
722  margin-right: 8px !important;
723  margin-left: 0 !important;
724  margin-top: 0 !important;
725  margin-bottom: 0 !important;
726  width: auto !important;
727  height: auto !important;
728  accent-color: var(--primary-theme-color);
729}
730body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox label,
731body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] label {
732  display: inline !important;
733  vertical-align: middle !important;
734  margin: 0 !important;
735  cursor: pointer !important;
736  line-height: 1.6 !important;
737  text-align: left !important;
738}
739body:not(.legacy_ui) #page-content .page-body .register-attendee-questions table[data-questiontype="4"].r-multicheckbox label::after,
740body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] table[role="presentation"] label::after {
741  content: "" !important;
742  display: block !important;
743  margin-bottom: 8px !important;
744}
745body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] input[type="radio"] {
746  border: none !important;
747  border-radius: 0 !important;
748  padding: 0 !important;
749  cursor: pointer !important;
750  accent-color: var(--primary-theme-color);
751  -webkit-box-sizing: content-box;
752  -moz-box-sizing: content-box;
753  box-sizing: content-box;
754}
755body:not(.legacy_ui) #page-content .page-body .register-attendee-questions div[role="radiogroup"] input[type="radio"]:focus {
756  border: none !important;
757}
758body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .clear-selection-label {
759  float: left !important;
760  padding-left: 20px !important;
761  padding-bottom: 5px !important;
762}
763body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="16"] tr {
764  display: flex !important;
765  flex-direction: column !important;
766}
767body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="16"] .questionLabel {
768  width: 100% !important;
769  text-align: left !important;
770  padding: 0 0 5px 0 !important;
771  display: block !important;
772  font-weight: bold !important;
773  color: #2D2D2D !important;
774}
775body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="16"] .questionInput {
776  width: 100% !important;
777  display: block !important;
778}
779body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="16"] .questionInput select {
780  height: 48px !important;
781  width: 350px !important;
782  font-size: 15px !important;
783  padding: 5px 16px !important;
784  border: 2px solid #D3D3D3 !important;
785  -moz-border-radius: 12px;
786  -webkit-border-radius: 12px;
787  border-radius: 12px;
788  -webkit-box-sizing: border-box;
789  -moz-box-sizing: border-box;
790  box-sizing: border-box;
791  background-color: #fff;
792  appearance: auto;
793  float: left !important;
794  accent-color: var(--primary-theme-color);
795}
796body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="3"] .questionInput input[type="checkbox"] {
797  width: auto !important;
798  height: auto !important;
799  margin: 0 !important;
800  vertical-align: middle !important;
801  accent-color: var(--primary-theme-color);
802}
803body:not(.legacy_ui) #page-content .page-body .register-attendee-questions .questionContainer[data-questiontype="3"] .questionInput .checkbox-container {
804  display: inline-flex !important;
805  align-items: center !important;
806  width: auto !important;
807  margin: 0 !important;
808  padding: 0 !important;
809}
810body:not(.legacy_ui) #page-content .attendees-filter {
811  border-top: 1px solid var(--primary-theme-color);
812  border-bottom: 2px solid var(--primary-theme-color);
813}
814body:not(.legacy_ui) #page-content .attendees-filter table {
815  width: 100%;
816}
817body:not(.legacy_ui) #page-content .attendees-filter table tr {
818  list-style: none;
819  padding: 0;
820  margin: 0;
821  background: #fff;
822  height: 41px;
823  border: 2px solid var(--primary-theme-color);
824}
825body:not(.legacy_ui) #page-content .attendees-filter table tr td {
826  width: 33%;
827  text-align: center;
828  vertical-align: center;
829  color: var(--primary-theme-color);
830  font-weight: bold;
831  cursor: pointer;
832  border-left: 2px solid var(--primary-theme-color);
833}
834body:not(.legacy_ui) #page-content .attendees-filter table tr td div {
835  padding: 10px 0;
836}
837body:not(.legacy_ui) #page-content .attendees-filter table tr td:hover {
838  background: var(--secondary-theme-color);
839  color: #fff;
840}
841body:not(.legacy_ui) #page-content .attendees-filter table tr td:hover i {
842  color: #fff;
843}
844body:not(.legacy_ui) #page-content .attendees-filter table tr td:first-child div {
845  border-left: none;
846}
847body:not(.legacy_ui) #page-content .attendees-filter table tr td.active {
848  background: var(--primary-theme-color);
849  color: #fff;
850}
851body:not(.legacy_ui) #page-content .attendees-filter table.with-pre-load tr td {
852  width: 20%;
853}
854body:not(.legacy_ui) #page-content .attendees-filter table.with-cancel tr td {
855  width: 20%;
856}
857body:not(.legacy_ui) #page-content .help-info {
858  bottom: 0;
859  width: 100%;
860  padding: 0 20px 20px 20px;
861  text-align: center;
862  font-weight: bold;
863  -webkit-box-sizing: border-box;
864  -moz-box-sizing: border-box;
865  box-sizing: border-box;
866}
867body:not(.legacy_ui) #page-content .help-info.left {
868  text-align: left;
869}
870body:not(.legacy_ui) #page-content .help-info.left a span:last-child {
871  margin-left: 15px;
872}
873body:not(.legacy_ui) #page-content .help-info a {
874  color: var(--secondary-theme-color);
875  text-decoration: underline;
876  cursor: pointer;
877  position: relative;
878}
879body:not(.legacy_ui) #page-content .help-info a span.icon-arrow-right,
880body:not(.legacy_ui) #page-content .help-info a span.icon-arrow-left {
881  position: absolute;
882  top: 4px;
883  font-size: 12px;
884}
885body:not(.legacy_ui) #page-content .help-info a span.icon-arrow-right {
886  right: -15px;
887}
888body:not(.legacy_ui) #page-content .help-info a:hover {
889  color: var(--primary-theme-color);
890}
891body:not(.legacy_ui) #page-content .checkin-location-name {
892  float: right;
893  margin-right: 15px;
894  color: #aaaaaa;
895}
896.filter-container {
897  position: fixed;
898  top: 90px;
899  left: 0px;
900  width: 300px;
901  background: white;
902  border: 1px solid #ccc;
903  box-shadow: 2px 2px 10px rgba(0,0,0,0.2);
904  padding: 15px 15px 15px 10px;
905  border-radius: 5px;
906  display: none;
907  z-index: 10000;
908}
909.filter-icon {
910  position: relative;
911  z-index: 10001;
912}
913.filter-text {
914  display: flex;
915  justify-content: space-between;
916  align-items: center;
917  cursor: pointer;
918  padding: 5px 0;
919  margin-bottom: 10px;
920  border-bottom: 1px solid #ddd;
921  font-size: 15px;
922  color: var(--primary-theme-color);
923}
924.filter-container input[type="checkbox"] {
925  width: auto !important;
926  box-shadow: 1px 1px 1px 0px #DDDDDD !important;
927  margin-bottom: 0 !important;
928  padding: 0 !important;
929}
930.filter-header {
931  display: flex;
932  justify-content: space-between;
933  align-items: center;
934  font-weight: bold;
935  cursor: pointer;
936  padding: 5px 0;
937}
938.filter-title {
939  display: flex;
940  align-items: center;
941  gap: 6px;
942  color: var(--primary-theme-color);
943}
944.filter-buttons {
945  display: flex;
946  justify-content: space-between;
947  margin-bottom: 10px;
948}
949.filter-buttons button {
950  padding: 8px 12px;
951  border: none;
952  cursor: pointer;
953  border-radius: 3px;
954  font-size: 14px;
955}
956.clear-btn {
957  background: none;
958  border: 1px solid var(--primary-theme-color) !important;
959  color: var(--primary-theme-color);
960}
961.clear-btn:hover {
962  background: none;
963  border-color: var(--primary-theme-color);
964  color: var(--primary-theme-color);
965}
966.apply-btn {
967  width: 30%;
968  background: var(--primary-theme-color);
969  font-size: 16px;
970  font-weight: bold;
971  text-shadow: none;
972  color: #f7f7f7;
973}
974.apply-btn:hover {
975  background: var(--secondary-theme-color);
976  color: #fff;
977  cursor: pointer;
978}
979.apply-btn:active {
980  position: relative;
981  top: 1px;
982}
983.category {
984  margin-top: 10px;
985  display: none;
986  overflow-y: auto;
987  height: 250px;
988}
989.category label {
990  display: flex;
991  align-items: flex-start;
992  padding: 5px 0;
993  width: 100%;
994  color: var(--primary-theme-color);
995}
996.category label span {
997  display: inline-block;
998  white-space: nowrap;
999  overflow: hidden;
1000  text-overflow: ellipsis;
1001  max-width: 290px;
1002}
1003.category input[type='checkbox'] {
1004  margin-right: 8px;
1005  height: 13px !important;
1006}
1007.category input[type='checkbox']:checked,
1008.exclude-preload input[type='checkbox']:checked {
1009  accent-color: var(--primary-theme-color);
1010}
1011.category input[type='checkbox']:hover,
1012.exclude-preload input[type='checkbox']:hover {
1013  accent-color: var(--secondary-theme-color);
1014}
1015#filter-options {
1016  background: none;
1017  border: none;
1018  font-size: 20px;
1019  cursor: pointer;
1020  color: var(--primary-theme-color);
1021}
1022#filter-options:hover {
1023  color: var(--secondary-theme-color);
1024}
1025.exclude-preload {
1026  display: flex;
1027  padding-bottom: 15px;
1028}
1029.checkbox-preload {
1030  width: 10%;
1031  text-align: left;
1032}
1033.text-preload {
1034  text-align: left;
1035  text-wrap: auto;
1036  color: var(--primary-theme-color);
1037}
1038.exclude-preload input[type='checkbox'] {
1039  margin-right: 8px;
1040  height: 13px !important;
1041}
1042.left-adjusted {
1043  left: 60px !important;
1044}
1045@media only screen and (min-device-width: 767px) and (max-device-width: 1025px),only screen and (min-device-height: 767px) and (max-device-height: 1025px) and (orientation: landscape),only screen and (min-device-width: 383px) and (max-device-width: 513px) and (-webkit-device-pixel-ratio: 2),only screen and (min-device-width: 511px) and (max-device-width: 683px) and (-webkit-device-pixel-ratio: 1.5) {
1046  body:not(.legacy_ui) #page-content .page-body .blue-button,
1047  body:not(.legacy_ui) #page-content .page-body .white-button {
1048    margin: 0 auto;
1049  }
1050  body:not(.legacy_ui) #page-content .page-body .blue-button .logout-name,
1051  body:not(.legacy_ui) #page-content .page-body .white-button .logout-name {
1052    display: none;
1053  }
1054  body:not(.legacy_ui) #page-content .page-body form.login-from,
1055  body:not(.legacy_ui) #page-content .page-body .logout-confirmation,
1056  body:not(.legacy_ui) #page-content .page-body .menu {
1057    margin: 20px auto;
1058    width: 30%;
1059    min-width: 250px;
1060  }
1061  body:not(.legacy_ui) #page-content .page-body .event-data .blue-button,
1062  body:not(.legacy_ui) #page-content .page-body .event-data .white-button {
1063    width: 30%;
1064    min-width: 250px;
1065  }
1066  body:not(.legacy_ui) #page-content .page-body .menu {
1067    margin: 20px auto;
1068    width: 30%;
1069    min-width: 250px;
1070  }
1071  body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-name {
1072    width: 80%;
1073  }
1074  body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info {
1075    border-top: none;
1076    width: 80%;
1077    margin-left: 0;
1078    margin-top: 0;
1079    margin-right: 0;
1080    padding-top: 0;
1081    font-size: 16px;
1082    display: inline-block;
1083  }
1084  body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part {
1085    width: 30%;
1086  }
1087  body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part + :not(:empty) {
1088    border-left: none;
1089    padding-left: 0;
1090  }
1091  body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty),
1092  body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty):last-child,
1093  body:not(.legacy_ui) #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:first-child:not(:empty) + :empty ~ :not(:empty):last-child {
1094    margin-left: 0;
1095    padding-left: 0;
1096    border-left: none;
1097  }
1098  body:not(.legacy_ui) #page-content .page-body ul.register-attendee {
1099    margin: 0 auto;
1100    width: 50%;
1101  }
1102  body:not(.legacy_ui) #page-content .page-body ul.register-attendee li {
1103    padding: 5px 0;
1104  }
1105  body:not(.legacy_ui) #page-content .page-body ul.register-attendee li.register-button {
1106    width: 60%;
1107    min-width: 170px;
1108    margin: 0 auto;
1109  }
1110  body:not(.legacy_ui) #page-content .page-body .register-attendee-questions {
1111    margin: 0 auto;
1112    width: 50%;
1113  }
1114}
1115body.legacy_ui {
1116  margin: 0;
1117  position: relative;
1118  font-family: helvetica, arial, sans-serif;
1119}
1120body.legacy_ui #page-content {
1121  margin: 0;
1122  font-size: 16px;
1123  min-height: 400px;
1124}
1125body.legacy_ui #page-content header {
1126  padding: 0.7em 0;
1127  text-align: center;
1128  font: 16px/16px Arial, sans-serif;
1129  font-weight: bold;
1130  color: #ffffff;
1131  text-shadow: 0.04em 0.04em #707070;
1132  background: -moz-linear-gradient(top,#c75300 0%,#b33f00 100%);
1133  background: -webkit-gradient(linear,left top,left bottom,color-stop(0%,#c75300),color-stop(100%,#b33f00));
1134  background: -webkit-linear-gradient(top,#c75300 0%,#b33f00 100%);
1135  background: -o-linear-gradient(top,#c75300 0%,#b33f00 100%);
1136  background: -ms-linear-gradient(top,#c75300 0%,#b33f00 100%);
1137  background: linear-gradient(to bottom,#c75300 0%,#b33f00 100%);
1138  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@gradient-top', endColorstr='@gradient-bottom',GradientType=0 );
1139}
1140body.legacy_ui #page-content header .main-menu-button {
1141  float: left;
1142  width: 60px;
1143  position: relative;
1144  height: 30px;
1145}
1146body.legacy_ui #page-content header .icon-checkin {
1147  position: absolute;
1148  top: -8px;
1149  left: 20px;
1150  width: 30px;
1151  cursor: pointer;
1152  font-size: 32px;
1153}
1154body.legacy_ui #page-content header span {
1155  display: inline-block;
1156}
1157body.legacy_ui #page-content .search-box {
1158  position: relative;
1159  border-bottom: 1px solid #ccc;
1160  background: #f2f2f2;
1161}
1162body.legacy_ui #page-content .search-box .search-elements {
1163  position: relative;
1164  height: 30px;
1165  padding: 5px 55px 5px 20px;
1166}
1167body.legacy_ui #page-content .search-box .search-elements input[type="text"] {
1168  height: 31px;
1169  width: 100%;
1170  padding: 5px 5px 5px 30px;
1171  border: 1px solid #ccc;
1172  border-right: none;
1173  box-shadow: inset 1px 1px 1px 0px #dddddd;
1174  font-size: 16px;
1175  -moz-border-radius: 4px 0 0 4px;
1176  -webkit-border-radius: 4px 0 0 4px;
1177  border-radius: 4px 0 0 4px;
1178  -webkit-box-sizing: border-box;
1179  -moz-box-sizing: border-box;
1180  box-sizing: border-box;
1181}
1182body.legacy_ui #page-content .search-box .search-elements .search-button {
1183  position: absolute;
1184  right: 20px;
1185  top: 5px;
1186  width: 35px;
1187  height: 31px;
1188  background: #c75300;
1189  cursor: pointer;
1190  color: #fff;
1191  font-size: 20px;
1192  text-align: center;
1193  line-height: 31px;
1194  -moz-border-radius: 0 4px 4px 0;
1195  -webkit-border-radius: 0 4px 4px 0;
1196  border-radius: 0 4px 4px 0;
1197}
1198body.legacy_ui #page-content .search-box .search-elements .search-button:active {
1199  background: #b35300;
1200}
1201body.legacy_ui #page-content .search-box .search-elements .icon-calendar,
1202body.legacy_ui #page-content .search-box .search-elements .icon-user {
1203  position: absolute;
1204  top: 12px;
1205  left: 30px;
1206  color: #9F9F9F;
1207}
1208body.legacy_ui #page-content .attendees-search-box .search-elements {
1209  margin-right: 55px;
1210}
1211body.legacy_ui #page-content .attendees-search-box .register-attendee-button {
1212  position: absolute;
1213  right: -40px;
1214  top: 5px;
1215  width: 35px;
1216  height: 31px;
1217  background: #006599;
1218  cursor: pointer;
1219  color: #fff;
1220  font-size: 22px;
1221  text-align: center;
1222  line-height: 31px;
1223  -moz-border-radius: 4px;
1224  -webkit-border-radius: 4px;
1225  border-radius: 4px;
1226}
1227body.legacy_ui #page-content .attendees-search-box .register-attendee-button:active {
1228  background: #b35300;
1229}
1230body.legacy_ui #page-content .title-box {
1231  padding: 10px 20px;
1232  border: 1px solid #fff;
1233  background: #c75300;
1234  color: #fff;
1235  font-weight: bold;
1236  font-size: 16px;
1237  position: relative;
1238  text-align: left;
1239  line-height: 30px;
1240}
1241body.legacy_ui #page-content .title-box .title-button {
1242  display: inline-block;
1243  width: 20px;
1244  position: relative;
1245  margin: 0 20px 0 0;
1246}
1247body.legacy_ui #page-content .title-box .title-button .icon-arrow-left,
1248body.legacy_ui #page-content .title-box .title-button .icon-cancel-circle {
1249  position: absolute;
1250  left: 0;
1251  top: -18px;
1252}
1253body.legacy_ui #page-content .title-box .title-button .icon-arrow-left {
1254  cursor: pointer;
1255  font-size: 14px;
1256  color: #c75300;
1257  background: #fff;
1258  border: 1px solid #c75300;
1259  -moz-border-radius: 20px;
1260  -webkit-border-radius: 20px;
1261  border-radius: 20px;
1262  padding: 5px;
1263  margin-right: 20px;
1264}
1265body.legacy_ui #page-content .title-box .title-button .icon-cancel-circle {
1266  cursor: pointer;
1267  font-size: 24px;
1268  color: #fff;
1269  padding: 5px;
1270  margin-right: 20px;
1271  top: -23px;
1272}
1273body.legacy_ui #page-content .page-body {
1274  width: 100%;
1275  text-align: center;
1276  color: #333;
1277}
1278body.legacy_ui #page-content .page-body ul {
1279  list-style: none;
1280  margin: 0;
1281  padding: 0;
1282  text-align: left;
1283}
1284body.legacy_ui #page-content .page-body img.etouches-logo {
1285  margin: 20px 0;
1286  width: 203px;
1287}
1288body.legacy_ui #page-content .page-body p.help-text {
1289  margin: 0 20px;
1290}
1291body.legacy_ui #page-content .page-body .event-name {
1292  font-size: 25px;
1293}
1294body.legacy_ui #page-content .page-body .error-message {
1295  color: #f00;
1296  padding: 5px 20px;
1297}
1298body.legacy_ui #page-content .page-body .blue-button,
1299body.legacy_ui #page-content .page-body .white-button {
1300  height: 30px;
1301  width: 100%;
1302  padding: 0 10px;
1303  display: block;
1304  line-height: 30px;
1305  border: none;
1306  font-size: 16px;
1307  font-weight: bold;
1308  text-shadow: none;
1309  color: #f7f7f7;
1310  -moz-border-radius: 4px;
1311  -webkit-border-radius: 4px;
1312  border-radius: 4px;
1313  background: -moz-linear-gradient(top,#09c 0%,#007BA5 100%);
1314  background: -webkit-gradient(linear,left top,left bottom,color-stop(0%,#09c),color-stop(100%,#007BA5));
1315  background: -webkit-linear-gradient(top,#09c 0%,#007BA5 100%);
1316  background: -o-linear-gradient(top,#09c 0%,#007BA5 100%);
1317  background: -ms-linear-gradient(top,#09c 0%,#007BA5 100%);
1318  background: linear-gradient(to bottom,#09c 0%,#007BA5 100%);
1319  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@gradient-top', endColorstr='@gradient-bottom',GradientType=0 );
1320}
1321body.legacy_ui #page-content .page-body .blue-button:hover,
1322body.legacy_ui #page-content .page-body .white-button:hover {
1323  background: #069;
1324  color: #fff;
1325  cursor: pointer;
1326}
1327body.legacy_ui #page-content .page-body .blue-button:active,
1328body.legacy_ui #page-content .page-body .white-button:active {
1329  position: relative;
1330  top: 1px;
1331}
1332body.legacy_ui #page-content .page-body .white-button {
1333  background: none;
1334  border: 1px solid #7E9FAE;
1335  color: #4381AA;
1336}
1337body.legacy_ui #page-content .page-body .white-button:hover {
1338  background: none;
1339  border-color: #069;
1340  color: #069;
1341}
1342body.legacy_ui #page-content .page-body input,
1343body.legacy_ui #page-content .page-body textarea {
1344  width: 100%;
1345  padding: 5px;
1346  margin-bottom: 10px;
1347  border: 1px solid #ccc;
1348  box-shadow: inset 1px 1px 1px 0px #dddddd;
1349  font-size: 16px;
1350  -moz-border-radius: 4px;
1351  -webkit-border-radius: 4px;
1352  border-radius: 4px;
1353  -webkit-box-sizing: border-box;
1354  -moz-box-sizing: border-box;
1355  box-sizing: border-box;
1356}
1357body.legacy_ui #page-content .page-body form.login-from {
1358  margin: 20px;
1359  text-align: left;
1360}
1361body.legacy_ui #page-content .page-body form.login-from label {
1362  font-weight: bold;
1363}
1364body.legacy_ui #page-content .page-body ul.event-list {
1365  border-top: 1px solid #ccc;
1366}
1367body.legacy_ui #page-content .page-body ul.event-list li {
1368  position: relative;
1369  padding: 10px 0px 10px 20px;
1370  border-bottom: 1px solid #ccc;
1371  cursor: pointer;
1372  color: #c75300;
1373}
1374body.legacy_ui #page-content .page-body ul.event-list li .icon {
1375  font-size: 22px;
1376  padding-right: 20px;
1377}
1378body.legacy_ui #page-content .page-body ul.event-list li .icon-folder {
1379  color: #D8B012;
1380}
1381body.legacy_ui #page-content .page-body ul.event-list li .icon-calendar {
1382  color: #006696;
1383}
1384body.legacy_ui #page-content .page-body ul.event-list li .icon-arrow-right {
1385  color: #C6C6C6;
1386  font-size: 16px;
1387  float: right;
1388  padding-top: 5px;
1389}
1390body.legacy_ui #page-content .page-body ul.event-list li .event-id-label {
1391  display: block;
1392  color: #6A6A6A;
1393  font-size: 14px;
1394  margin-left: 45px;
1395}
1396body.legacy_ui #page-content .page-body ul.event-list li.event {
1397  background: #F5F5F5;
1398}
1399body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-name {
1400  width: 35%;
1401  display: inline-block;
1402}
1403body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info {
1404  border-top: 1px solid #c6c6c6;
1405  margin-left: 45px;
1406  margin-top: 7px;
1407  margin-right: 30px;
1408  padding-top: 5px;
1409  color: #000;
1410  font-size: 14px;
1411}
1412body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part {
1413  display: inline-block;
1414  padding-right: 2px;
1415}
1416body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part + :not(:empty) {
1417  border-left: 1px solid #c6c6c6;
1418  padding-left: 5px;
1419}
1420body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty),
1421body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:first-child {
1422  border-left: none;
1423  padding-left: 0;
1424}
1425body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty):not(:empty) + :empty ~ :not(:empty):last-child,
1426body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:first-child:not(:empty) + :empty ~ :not(:empty):last-child {
1427  border-left: 1px solid #c6c6c6;
1428  padding-left: 5px;
1429  margin-left: -5px;
1430}
1431body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty) {
1432  margin-left: -5px;
1433}
1434body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty):last-child {
1435  margin-left: -10px;
1436}
1437body.legacy_ui #page-content .page-body ul.event-list li:hover {
1438  background: #e0e0e0;
1439}
1440body.legacy_ui #page-content .page-body ul.event-data li {
1441  padding: 10px 20px;
1442}
1443body.legacy_ui #page-content .page-body ul.event-data li b {
1444  padding-right: 10px;
1445}
1446body.legacy_ui #page-content .page-body ul.menu li,
1447body.legacy_ui #page-content .page-body ul.logout-confirmation li {
1448  padding: 10px 20px;
1449}
1450body.legacy_ui #page-content .page-body ul.menu .logout-name,
1451body.legacy_ui #page-content .page-body ul.logout-confirmation .logout-name {
1452  font-weight: normal;
1453  font-style: italic;
1454}
1455body.legacy_ui #page-content .page-body ul.attendees-list li {
1456  cursor: pointer;
1457  position: relative;
1458  border-bottom: 1px solid #ccc;
1459  padding: 10px 0;
1460}
1461body.legacy_ui #page-content .page-body ul.attendees-list li table {
1462  width: 100%;
1463  border-collapse: collapse;
1464  table-layout: fixed;
1465}
1466body.legacy_ui #page-content .page-body ul.attendees-list li table td {
1467  position: relative;
1468  padding: 0 10px;
1469  vertical-align: top;
1470  word-wrap: break-word;
1471}
1472body.legacy_ui #page-content .page-body ul.attendees-list li table tr.info td {
1473  padding-top: 0;
1474}
1475body.legacy_ui #page-content .page-body ul.attendees-list li .checked-icon {
1476  width: 40px;
1477  padding: 0;
1478}
1479body.legacy_ui #page-content .page-body ul.attendees-list li .checked-icon .icon-user,
1480body.legacy_ui #page-content .page-body ul.attendees-list li .checked-icon .icon-blankperson,
1481body.legacy_ui #page-content .page-body ul.attendees-list li .checked-icon .icon-dashedperson {
1482  font-size: 26px;
1483  color: #016798;
1484  width: 30px;
1485  margin-left: 10px;
1486}
1487body.legacy_ui #page-content .page-body ul.attendees-list li .name {
1488  color: #c75300;
1489  text-align: left;
1490}
1491body.legacy_ui #page-content .page-body ul.attendees-list li .name .company {
1492  width: 100%;
1493  max-width: 100%;
1494  text-align: left;
1495  color: #838383;
1496}
1497body.legacy_ui #page-content .page-body ul.attendees-list li .email {
1498  color: #787878;
1499  font-size: 14px;
1500}
1501body.legacy_ui #page-content .page-body ul.attendees-list li .buttons {
1502  margin: 10px 0 0 0;
1503}
1504body.legacy_ui #page-content .page-body ul.attendees-list li .buttons button {
1505  width: auto;
1506  display: inline-block;
1507  margin-right: 10px;
1508}
1509body.legacy_ui #page-content .page-body ul.attendees-list li .buttons button i {
1510  margin-right: 10px;
1511}
1512body.legacy_ui #page-content .page-body ul.attendees-list li .buttons button.white-button {
1513  height: 32px;
1514}
1515body.legacy_ui #page-content .page-body ul.attendees-list li .company {
1516  width: 100px;
1517  max-width: 100px;
1518  text-align: right;
1519  color: #838383;
1520  padding-right: 10px;
1521}
1522body.legacy_ui #page-content .page-body ul.attendees-list li .info {
1523  display: none;
1524}
1525body.legacy_ui #page-content .page-body ul.attendees-list li:hover {
1526  background: #e0e0e0;
1527}
1528body.legacy_ui #page-content .page-body .register-attendee-header {
1529  -moz-border-radius: 5px;
1530  -webkit-border-radius: 5px;
1531  border-radius: 5px;
1532  background: #006599;
1533  padding: 10px 10px 10px 60px;
1534  margin: 20px;
1535  color: #FFFFFF;
1536  text-align: left;
1537  font-size: 16px;
1538  font-weight: bold;
1539  position: relative;
1540}
1541body.legacy_ui #page-content .page-body .register-attendee-header i {
1542  font-size: 24px;
1543  position: absolute;
1544  top: 9px;
1545  left: 20px;
1546}
1547body.legacy_ui #page-content .page-body ul.register-attendee {
1548  margin-bottom: 0;
1549}
1550body.legacy_ui #page-content .page-body ul.register-attendee li {
1551  padding: 5px 20px;
1552}
1553body.legacy_ui #page-content .page-body ul.register-attendee li label {
1554  font-weight: bold;
1555  color: #2D2D2D;
1556  display: block;
1557  margin-bottom: 5px;
1558}
1559body.legacy_ui #page-content .attendees-filter {
1560  border-top: 1px solid #CFCFCF;
1561  border-bottom: 2px solid #c75300;
1562}
1563body.legacy_ui #page-content .attendees-filter table {
1564  width: 100%;
1565}
1566body.legacy_ui #page-content .attendees-filter table tr {
1567  list-style: none;
1568  padding: 0;
1569  margin: 0;
1570  background: #D9D9D9;
1571  height: 41px;
1572  border-top: 2px solid #fff;
1573  border-bottom: 2px solid #fff;
1574}
1575body.legacy_ui #page-content .attendees-filter table tr td {
1576  width: 33%;
1577  text-align: center;
1578  vertical-align: center;
1579  color: #6E6E6E;
1580  font-weight: bold;
1581  cursor: pointer;
1582  border-left: 2px solid #F9F9F9;
1583}
1584body.legacy_ui #page-content .attendees-filter table tr td div {
1585  padding: 10px 0;
1586}
1587body.legacy_ui #page-content .attendees-filter table tr td:first-child div {
1588  border-left: none;
1589}
1590body.legacy_ui #page-content .attendees-filter table tr td.active {
1591  background: #c75300;
1592  color: #fff;
1593}
1594body.legacy_ui #page-content .attendees-filter table.with-pre-load tr td {
1595  width: 20%;
1596}
1597body.legacy_ui #page-content .attendees-filter table.with-cancel tr td {
1598  width: 20%;
1599}
1600body.legacy_ui #page-content .help-info {
1601  position: absolute;
1602  bottom: 0;
1603  width: 100%;
1604  padding: 0 20px 20px 20px;
1605  text-align: center;
1606  font-weight: bold;
1607  -webkit-box-sizing: border-box;
1608  -moz-box-sizing: border-box;
1609  box-sizing: border-box;
1610}
1611body.legacy_ui #page-content .help-info.left {
1612  text-align: left;
1613}
1614body.legacy_ui #page-content .help-info.left a span:last-child {
1615  margin-left: 15px;
1616}
1617body.legacy_ui #page-content .help-info a {
1618  color: #09c;
1619  text-decoration: none;
1620  cursor: pointer;
1621  position: relative;
1622}
1623body.legacy_ui #page-content .help-info a span.icon-arrow-right,
1624body.legacy_ui #page-content .help-info a span.icon-arrow-left {
1625  position: absolute;
1626  top: 4px;
1627  font-size: 12px;
1628}
1629body.legacy_ui #page-content .help-info a span.icon-arrow-right {
1630  right: -15px;
1631}
1632body.legacy_ui #page-content .checkin-location-name {
1633  float: right;
1634  margin-right: 15px;
1635  color: #aaaaaa;
1636}
1637body.legacy_ui .search-box {
1638  position: relative;
1639  border-bottom: 1px solid #ccc;
1640  background: #f2f2f2;
1641}
1642body.legacy_ui .search-box .search-elements {
1643  position: relative;
1644  height: 30px;
1645  padding: 5px 55px 5px 20px;
1646  white-space: nowrap;
1647}
1648body.legacy_ui .search-box .search-elements input[type="text"] {
1649  height: 31px;
1650  width: 100%;
1651  padding: 5px 5px 5px 30px;
1652  border: 1px solid #ccc;
1653  border-right: none;
1654  box-shadow: inset 1px 1px 1px 0px #dddddd;
1655  font-size: 16px;
1656  -moz-border-radius: 4px 0 0 4px;
1657  -webkit-border-radius: 4px 0 0 4px;
1658  border-radius: 4px 0 0 4px;
1659  -webkit-box-sizing: border-box;
1660  -moz-box-sizing: border-box;
1661  box-sizing: border-box;
1662}
1663body.legacy_ui .search-box .search-elements .search-button {
1664  position: absolute;
1665  right: 20px;
1666  top: 5px;
1667  width: 35px;
1668  height: 31px;
1669  background: #c75300;
1670  cursor: pointer;
1671  color: #fff;
1672  font-size: 20px;
1673  text-align: center;
1674  line-height: 31px;
1675  -moz-border-radius: 0 4px 4px 0;
1676  -webkit-border-radius: 0 4px 4px 0;
1677  border-radius: 0 4px 4px 0;
1678}
1679body.legacy_ui .search-box .search-elements .search-button:active {
1680  background: #b35300;
1681}
1682body.legacy_ui .search-box .search-elements .icon-calendar,
1683body.legacy_ui .search-box .search-elements .icon-user {
1684  position: absolute;
1685  top: 12px;
1686  left: 30px;
1687  color: #9F9F9F;
1688}
1689body.legacy_ui .filter-container {
1690  position: fixed;
1691  top: 75px;
1692  left: 0px;
1693  width: 300px;
1694  background: white;
1695  border: 1px solid #ccc;
1696  box-shadow: 2px 2px 10px rgba(0,0,0,0.2);
1697  padding: 15px;
1698  border-radius: 5px;
1699  display: none;
1700  z-index: 10000;
1701}
1702body.legacy_ui .filter-icon {
1703  position: relative;
1704  z-index: 10001;
1705}
1706body.legacy_ui .filter-text {
1707  display: flex;
1708  justify-content: space-between;
1709  align-items: center;
1710  cursor: pointer;
1711  padding: 5px 0;
1712  margin-bottom: 10px;
1713  border-bottom: 1px solid #ddd;
1714  font-size: 15px;
1715  color: #6A6A6A;
1716}
1717body.legacy_ui .filter-container input[type="checkbox"] {
1718  width: auto !important;
1719  box-shadow: 1px 1px 1px 0px #DDDDDD !important;
1720  margin-bottom: 0 !important;
1721  padding: 0 !important;
1722}
1723body.legacy_ui .filter-header {
1724  display: flex;
1725  justify-content: space-between;
1726  align-items: center;
1727  font-weight: bold;
1728  cursor: pointer;
1729  padding: 5px 0;
1730}
1731body.legacy_ui .filter-title {
1732  display: flex;
1733  align-items: center;
1734  gap: 6px;
1735  color: #6A6A6A;
1736}
1737body.legacy_ui .filter-buttons {
1738  display: flex;
1739  justify-content: space-between;
1740  margin-bottom: 10px;
1741}
1742body.legacy_ui .filter-buttons button {
1743  padding: 8px 12px;
1744  border: none;
1745  cursor: pointer;
1746  border-radius: 3px;
1747  font-size: 14px;
1748}
1749body.legacy_ui .clear-btn {
1750  background: none;
1751  border: 1px solid #5ea1bf !important;
1752  color: #4381AA;
1753}
1754body.legacy_ui .clear-btn:hover {
1755  background: none;
1756  border-color: #069;
1757  color: #069;
1758}
1759body.legacy_ui .apply-btn {
1760  width: 30%;
1761  background: #007BA5;
1762  font-size: 16px;
1763  font-weight: bold;
1764  text-shadow: none;
1765  color: #f7f7f7;
1766}
1767body.legacy_ui .apply-btn:hover {
1768  background: #069;
1769  color: #fff;
1770  cursor: pointer;
1771}
1772body.legacy_ui .apply-btn:active {
1773  position: relative;
1774  top: 1px;
1775}
1776body.legacy_ui .category {
1777  margin-top: 10px;
1778  display: none;
1779  overflow-y: auto;
1780  height: 250px;
1781}
1782body.legacy_ui .category label {
1783  display: flex;
1784  align-items: flex-start;
1785  padding: 5px 0;
1786  width: 100%;
1787  color: #6A6A6A;
1788}
1789body.legacy_ui .category label span {
1790  display: inline-block;
1791  white-space: nowrap;
1792  overflow: hidden;
1793  text-overflow: ellipsis;
1794  max-width: 290px;
1795}
1796body.legacy_ui .category input[type='checkbox'] {
1797  margin-right: 8px;
1798}
1799body.legacy_ui .category input[type='checkbox']:checked,
1800body.legacy_ui .exclude-preload input[type='checkbox']:checked {
1801  accent-color: #007BA5;
1802}
1803body.legacy_ui .category input[type='checkbox']:hover,
1804body.legacy_ui .exclude-preload input[type='checkbox']:hover {
1805  accent-color: #069;
1806}
1807body.legacy_ui #filter-options {
1808  background: none;
1809  border: none;
1810  font-size: 20px;
1811  cursor: pointer;
1812  color: #007BA5;
1813}
1814body.legacy_ui #filter-options:hover {
1815  color: #069;
1816}
1817body.legacy_ui .exclude-preload {
1818  display: flex;
1819  padding-bottom: 15px;
1820}
1821body.legacy_ui .checkbox-preload {
1822  width: 10%;
1823  text-align: left;
1824}
1825body.legacy_ui .text-preload {
1826  text-align: left;
1827  text-wrap: auto;
1828  color: #6A6A6A;
1829}
1830body.legacy_ui .exclude-preload input[type='checkbox'] {
1831  margin-right: 8px;
1832  height: 13px !important;
1833}
1834body.legacy_ui .left-adjusted {
1835  left: 65px !important;
1836}
1837@media only screen and (min-device-width: 767px) and (max-device-width: 1025px),only screen and (min-device-height: 767px) and (max-device-height: 1025px) and (orientation: landscape),only screen and (min-device-width: 383px) and (max-device-width: 513px) and (-webkit-device-pixel-ratio: 2),only screen and (min-device-width: 511px) and (max-device-width: 683px) and (-webkit-device-pixel-ratio: 1.5) {
1838  body.legacy_ui #page-content .page-body .blue-button,
1839  body.legacy_ui #page-content .page-body .white-button {
1840    margin: 0 auto;
1841  }
1842  body.legacy_ui #page-content .page-body .blue-button .logout-name,
1843  body.legacy_ui #page-content .page-body .white-button .logout-name {
1844    display: none;
1845  }
1846  body.legacy_ui #page-content .page-body form.login-from,
1847  body.legacy_ui #page-content .page-body .logout-confirmation,
1848  body.legacy_ui #page-content .page-body .menu {
1849    margin: 20px auto;
1850    width: 30%;
1851    min-width: 250px;
1852  }
1853  body.legacy_ui #page-content .page-body .event-data .blue-button,
1854  body.legacy_ui #page-content .page-body .event-data .white-button {
1855    width: 30%;
1856    min-width: 250px;
1857  }
1858  body.legacy_ui #page-content .page-body .menu {
1859    margin: 20px auto;
1860    width: 30%;
1861    min-width: 250px;
1862  }
1863  body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info {
1864    border-top: none;
1865    width: 50%;
1866    margin-left: 0;
1867    margin-top: 0;
1868    margin-right: 0;
1869    padding-top: 0;
1870    font-size: 16px;
1871    display: inline-block;
1872  }
1873  body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part {
1874    width: 30%;
1875  }
1876  body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part + :not(:empty) {
1877    border-left: none;
1878    padding-left: 0;
1879  }
1880  body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty),
1881  body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:empty + :not(:empty):last-child,
1882  body.legacy_ui #page-content .page-body ul.event-list li.event-item .event-item-extra-info .event-item-part:first-child:not(:empty) + :empty ~ :not(:empty):last-child {
1883    margin-left: 0;
1884    padding-left: 0;
1885    border-left: none;
1886  }
1887  body.legacy_ui #page-content .page-body ul.register-attendee {
1888    margin: 0 auto;
1889    width: 50%;
1890  }
1891  body.legacy_ui #page-content .page-body ul.register-attendee li {
1892    padding: 5px 0;
1893  }
1894  body.legacy_ui #page-content .page-body ul.register-attendee li.register-button {
1895    width: 60%;
1896    min-width: 170px;
1897    margin: 0 auto;
1898  }
1899}
1900[class^="icon-"],
1901[class*=" icon-"] {
1902  font-family: "Font Awesome 6 Pro" !important;
1903  speak: none;
1904  font-style: normal;
1905  font-weight: normal;
1906  font-variant: normal;
1907  text-transform: none;
1908  line-height: 1;
1909  -webkit-font-smoothing: antialiased;
1910  -moz-osx-font-smoothing: grayscale;
1911}
1912.icon-cancel-circle:before {
1913  content: "\f057" !important;
1914}
1915.icon-checkin:before {
1916  content: "\f4fc" !important;
1917  font-weight: 900;
1918}
1919.icon-search:before {
1920  content: "\f002" !important;
1921}
1922.icon-calendar:before {
1923  content: "\f073" !important;
1924}
1925.icon-folder:before {
1926  content: "\f07b" !important;
1927}
1928.icon-folder-open:before {
1929  content: "\f07c" !important;
1930  font-style: normal;
1931}
1932.icon-arrow-right:before {
1933  content: "\f105" !important;
1934  font-style: normal;
1935  font-weight: 900;
1936}
1937.icon-arrow-left:before {
1938  content: "\f104" !important;
1939  font-style: normal;
1940  font-weight: 900;
1941  padding: 5px;
1942}
1943.icon-blankperson:before {
1944  content: "\f007" !important;
1945  font-style: normal;
1946  font-weight: normal;
1947}
1948.icon-dashedperson:before {
1949  content: "\f007" !important;
1950  font-size: 24px;
1951  font-style: normal;
1952  font-weight: normal;
1953  border-radius: 50%;
1954  border: 1px dashed;
1955  padding: 5px;
1956}
1957.icon-user:before {
1958  content: "\f007" !important;
1959  font-style: normal;
1960  font-weight: 900;
1961}
1962.icon-user-plus:before {
1963  content: "\f234" !important;
1964  font-style: normal;
1965  font-weight: 900;
1966}
1967.icon-checkmark:before {
1968  content: "\f00c" !important;
1969  font-style: normal;
1970  font-weight: 900;
1971}
1972.clear {
1973  clear: both;
1974}
1975
1976    </style>
1977    <link href="/application/themes/mobile-attendee/creator-icons.css" type="text/css" rel="stylesheet" />
1978</head>
1979<body>
1980        <link href="/application/themes/mobile-attendee/attendee-info.css" rel="stylesheet" type="text/css" />
1981    <style>
1982        .button-container-checkin {
1983            display: flex;
1984            flex-wrap: nowrap; /* prevents wrapping on wider screens */
1985            gap: 8px;
1986            justify-content: space-between;
1987            margin-top: 10px;
1988        }
1989        .button-container-checkin button {
1990            flex: 1 0 auto; /* grow, no shrink, auto basis */
1991            padding: 10px 12px;
1992            font-size: 14px;
1993            min-width: 100px;
1994            border: none;
1995            border-radius: 4px;
1996            cursor: pointer;
1997            white-space: nowrap;
1998            width: auto !important;
1999            margin: 0 auto;
2000        }
2001
2002        /* See more/less link styling */
2003        .see-more-link {
2004            color: #007bff;
2005            text-decoration: none;
2006            font-size: 0.9em;
2007            margin-left: 4px;
2008            cursor: pointer;
2009            white-space: nowrap;
2010        }
2011        .see-more-link:hover {
2012            text-decoration: underline;
2013            color: #0056b3;
2014        }
2015        .field-content {
2016            white-space: pre-wrap;
2017            word-wrap: break-word;
2018        }
2019
2020        @media (max-width: 480px) {
2021            .button-container-checkin {
2022                flex-direction: column;
2023            }
2024        }
2025    </style>
2026<div id="page-content">
2027</div>
2028
2029<script type="text/html" id="page-template">
2030    <header>
2031        <div class="main-menu-button" data-bind="visible: showMenuButton">
2032            <i class="icon-checkin" data-bind="click: onMainMenuClick"></i>
2033        </div>
2034        <span data-bind="text : headerText">Attendee Check-In</span>
2035        <span class="checkin-location-name" data-bind="text: checkinLocation"></span>
2036    </header>
2037
2038    <div class="page-body">
2039        <img class="etouches-logo" data-bind="visible: logoUrl, attr: { src: logoUrl }">
2040
2041        <p class="error-message" data-bind="visible : errorMessage, text:errorMessage"></p>
2042
2043    <div class="search-box" data-bind="visible: showSearchPanel, css : customButtonsClass">
2044        <div class="search-elements">
2045                                <button id="filter-options" class="filter-button" onclick="toggleFilterDropdown()" data-bind="visible :showFilterPanel">
2046                        <i id="category-filter" class="fa-regular fa-filter"></i>
2047                    </button>
2048                    <div class="filter-container" id="filter-menu" data-bind="visible :showFilterPanel" >
2049                        <div class="filter-buttons">
2050                            <button class="clear-btn" data-bind="click: onClearFiltersClick">Clear</button>
2051                            <button class="apply-btn" data-bind="click: onApplyFiltersClick">Apply</button>
2052                        </div>
2053                        <div class="filter-text">Filter by</div>
2054
2055                            <div class="exclude-preload" data-bind ="visible :showPreLoadAttendees">
2056                                <div class="checkbox-preload"><input type="checkbox" class="category-checkbox" name="exclude_preload" id="exclude_preload"></div>
2057                                <div class="text-preload"><span class="category-text">Exclude Pre-load records from All Attendees Tab</span></div>
2058                            </div>
2059
2060                        <div class="filter-header" onclick="toggleCategory()">
2061                            <div class="filter-title">
2062                                Category <span id="selected-count"></span>
2063                            </div>
2064                            <div class="filter-toggle" id="category-toggle">-</div>
2065
2066                        </div>
2067                        <div class="category" id="category-section" style="display: block" data-bind="foreach: categories">
2068                            <label>
2069                                <span data-bind="style: { display: parentid != 0 ? 'inline-block' : 'none', width: '16px' }"></span>
2070
2071                                    <input type="checkbox"
2072                                           class="category-checkbox"
2073                                           data-bind="
2074                       attr: {
2075                           'data-categoryid': categoryid,
2076                           'data-parentid': parentid || 0,
2077                           'value': categoryid + (parentid && parentid != 0 ? '|' + parentid : '')
2078                       },
2079                       checked: $root.selectedCategories,
2080                       click: function() {
2081                           setupCategoryCheckboxLogic();
2082                           return true;
2083                       }">
2084                                    <span class="category-text" data-bind="text: name, attr: { title: name }"></span>
2085                                </label>
2086                        </div>
2087                    </div>
2088
2089            
2090            <i data-bind="visible: searchIcon, css: searchIcon"></i>
2091            <input type="text" data-bind="value: searchText, attr : { placeholder : searchPlaceholder }"/>
2092            <div class="search-button">
2093                <i class="icon-search" data-bind="click: onSearchButtonClick"></i>
2094            </div>
2095            <div class="custom-buttons register-attendee-button" data-bind="visible: showCustomButtons">
2096                <i class="icon-user-plus" data-bind="click: onRegisterAttendeeClick"></i>
2097            </div>
2098        </div>
2099    </div>
2100
2101        <div class="title-box" data-bind="visible: showTitleBox">
2102            <span class="title-button" data-bind="visible: titleButtonIcon">
2103                <i data-bind="css: titleButtonIcon, click: onTitleBoxButtonClick"></i>
2104            </span>
2105            <i class="title-icon" data-bind="click: onTitleBoxButtonClick, visible: titleIcon, css: titleIcon"></i>
2106            <span class="title-text" data-bind="text: titleText"></span>
2107        </div>
2108
2109        <div id="content"></div>
2110    </div>
2111</script>
2111
2112
2113<script type="text/html" id="login-page-template">
2114    <form class="login-from" data-bind="submit: login">
2115        <label>Username</label><br>
2116        <input type="text" class="email" data-bind="value: username"><br>
2117
2118        <label>Password</label><br>
2119        <input type="password" class="password"  data-bind="value: password"><br>
2120
2121        <input class="blue-button" type="submit" value="Login">
2122    </form>
2123
2124    <div class="help-info">
2125        <a data-bind="click: goToResetPasswordPage">Can't access your account? </a>
2126    </div>
2127</script>
2127
2128
2129<script type="text/html" id="login-by-link-page-template">
2130    <p class="help-text event-name" data-bind="text: eventName"></p>
2131
2132    <form class="login-from" data-bind="submit: login">
2133        <label data-bind="visible: showPasswordField">Password</label><br>
2134        <input type="password" class="password"  data-bind="visible: showPasswordField, value: password"><br>
2135
2136        <input class="blue-button" type="submit" value="Login">
2137    </form>
2138</script>
2138
2139
2140<script type="text/html" id="reset-password-page-template">
2141    <p class="help-text">Enter your user name below and we will send you a password reset email.</p>
2142
2143    <form class="login-from" data-bind="submit: send">
2144        <label>User name:</label><br>
2145        <input type="text" class="email" data-bind="value: username"><br>
2146        <label>Captcha</label><br>
2147        <span style="display: inline-block;height: 50px;">
2148             <img id="refresh_captcha" src="/mobileadmin/loginAPI/generateCaptcha" style="width: 270px;display: inline-block;" />
2149            <span><i class="fa fa-solid fa-arrow-rotate-left fa-fw fa-xl" style="cursor: pointer;position: relative;top: -15px;" onclick="loadCaptcha()"></i></span>
2150        </span>
2151        <span style="display: block;">
2152            <input id="captcha" type="text" data-bind="value: captcha" autocomplete="off" size="40" placeholder="Captcha">
2153        </span>
2154        <input class="blue-button" type="submit" value="Send Password">
2155    </form>
2156
2157    <div class="help-info left">
2158        <a data-bind="click: goToLoginPage">
2159            <span class="icon-arrow-left"></span>
2160            <span>Login</span>
2161        </a>
2162    </div>
2163</script>
2163
2164
2165<script type="text/html" id="events-page-template">
2166    <ul class="event-list" data-bind="foreach: events, visible: events">
2167        <li class="event-item" data-bind="click: $parent.select, css : type">
2168            <i class="icon" data-bind="css: cssClass"></i>
2169            <i class="icon icon-arrow-right"></i>
2170            <span class="event-item-name" data-bind="text: name"></span>
2171            <div class="event-item-extra-info" data-bind="visible: (startDate || location || programManager)">
2172                <span class="event-item-part" data-bind="text: startDate"></span>
2173                <span class="event-item-part" data-bind="text: location"></span>
2174                <span class="event-item-part" data-bind="text: programManager"></span>
2175            </div>
2176            <span class="event-id-label" data-bind="visible: showId">
2177                <b>event ID:</b>
2178                <span data-bind="text: id, visible: showId"></span>
2179            </span>
2180        </li>
2181    </ul>
2182</script>
2182
2183
2184<script type="text/html" id="event-page-template">
2185    <ul class="event-data">
2186        <li data-bind="with: eventData">
2187            <b>event ID:</b><span data-bind="text: eventId"></span>
2188        </li>
2189        <li data-bind="with: eventData">
2190            <b>start date:</b><span data-bind="text: startDate"></span>
2191        </li>
2192        <li data-bind="with: eventData">
2193            <b>end date:</b><span data-bind="text: endDate"></span>
2194        </li>
2195        <li data-bind="with: eventData">
2196            <b>event status:</b><span data-bind="text: status"></span>
2197        </li>
2198
2199        <li data-bind="with: eventData, visible: showCheckinLocations || 0">
2200            <b>Check-in Location:<b>
2201            <select id="checkin-location" data-bind="html: checkinLocations">
2202                            </select>
2203        </li>
2204
2205        <li>
2206            <button class="blue-button" data-bind="click: startCheckingButtonClick">start checking attendees in</button>
2207        </li>
2208        <li data-bind="ifnot: isLoggedInByLink">
2209            <button class="white-button" data-bind="click: onCloseButtonClick">close</button>
2210        </li>
2211    </ul>
2212</script>
2212
2213
2214<script type="text/html" id="menu-page-template">
2215    <ul class="menu" data-bind="ifnot: showLogoutConfirmation">
2216        <li data-bind="visible: showGoToEventsPageButton">
2217            <button class="blue-button" data-bind="click: goToEventsPage">go to event browser</button>
2218        </li>
2219        <li>
2220            <button class="blue-button" data-bind="click: showLogoutConfirmationDialog">log out <span class="logout-name" data-bind="text: userName"></span></button>
2221        </li>
2222        <li>
2223            <button class="white-button" data-bind="click: cancel">cancel</button>
2224        </li>
2225    </ul>
2226
2227    <ul class="logout-confirmation" data-bind="visible: showLogoutConfirmation">
2228        <li>
2229            <p>Do you want to log out?</p>
2230        </li>
2231
2232        <li>
2233            <button class="blue-button" data-bind="click: logout">Yes</button>
2234        </li>
2235        <li>
2236            <button class="white-button" data-bind="click: cancelLogout">No</button>
2237        </li>
2238    </ul>
2239</script>
2239
2240
2241<script type="text/html" id="attendees-page-template">
2242    <div class="attendees-filter" data-bind="visible: showAttendeesFilter">
2243        <table data-bind="css : { 'with-pre-load' : showPreLoadAttendees, 'with-cancel' : showCancelAttendees}">
2244            <tr data-bind="foreach: filters">
2245                <td data-bind="click: $parent.changeFilter, css : { active : id == $parent.filterType() }">
2246                    <span data-bind="text: name"></span>
2247                    (<span data-bind="text: total"></span>)
2248                </td>
2249            </tr>
2250        </table>
2251    </div>
2252    <ul class="attendees-list" data-bind="foreach: attendees">
2253        <li data-bind="click: $parent.select">
2254            <table>
2255                <tbody>
2256                <tr>
2257                    <td class="checked-icon">
2258                        <div data-bind="css : { 'icon-user' : isCheckedIn == true, 'icon-blankperson' : isCheckedIn == false, 'icon-dashedperson' : isCheckedIn == null }"></div>
2259                    </td>
2260                    <td class="name">
2261                        <div class="extra-fields-section" data-bind="foreach: $root.eventData.attendeeVisibleTopTwoFields">
2262                            <span style="float: left">
2263                                                                                        <span data-bind="text: $index() === 0 ? $parents[1].getFieldDisplayValue($parent.attendeeId, fieldName, $parent[fieldName]) : ', ' + $parents[1].getFieldDisplayValue($parent.attendeeId, fieldName, $parent[fieldName])" class="field-content"></span>
2264                                                            <!-- ko if: $parents[1].needsTruncation(fieldName, $parent[fieldName]) -->
2265                                <a href="#" class="see-more-link" data-bind="click: function(data, event) { return $parents[1].toggleFieldExpansion($parent.attendeeId, fieldName, event); }, text: $parents[1].isFieldExpanded($parent.attendeeId, fieldName) ? ' See less' : '...See more'"></a>
2266                                <!-- /ko -->
2267                            </span>
2268                        </div>
2269                        <div class="clear"></div>
2270                        <div class="extra-fields-section visibleSubFields" data-bind="foreach: $root.eventData.attendeeVisibleSubFields">
2271                            <span class="extra-field">
2272                                                                <span data-bind="text: $parents[1].getFieldDisplayValue($parent.attendeeId, fieldName, $parent[fieldName])" class="field-content"></span>
2273                                <!-- ko if: $parents[1].needsTruncation(fieldName, $parent[fieldName]) -->
2274                                <a href="#" class="see-more-link" data-bind="click: function(data, event) { return $parents[1].toggleFieldExpansion($parent.attendeeId, fieldName, event); }, text: $parents[1].isFieldExpanded($parent.attendeeId, fieldName) ? ' See less' : '...See more'"></a>
2275                                <!-- /ko -->
2276                            </span>
2277                            <div class="clear"></div>
2278                        </div>
2279                    </td>
2280                    <td>
2281                        <span style="margin-right: 0px" data-bind="text: groupCount ,css: { 'group-count': +groupCount > 0 }"></span>
2282                    </td>
2283                </tr>
2284                </tbody>
2285            </table>
2286
2287            <table id="attendee_new_info" class="info" >
2288                <tbody data-bind="foreach: $root.eventData.attendeeHiddenFields">
2289                    <tr>
2290                        <td class="visibleSubFields">
2291                                                        <span data-bind="text: $parents[1].getFieldDisplayValue($parent.attendeeId, fieldName, $parent[fieldName])" class="field-content"></span>
2292                            <!-- ko if: $parents[1].needsTruncation(fieldName, $parent[fieldName]) -->
2293                            <a href="#" class="see-more-link" data-bind="click: function(data, event) { return $parents[1].toggleFieldExpansion($parent.attendeeId, fieldName, event); }, text: $parents[1].isFieldExpanded($parent.attendeeId, fieldName) ? ' See less' : '...See more'"></a>
2294                            <!-- /ko -->
2295                        </td>
2296                    </tr>
2297                </tbody>
2298                <tbody>
2299                    <tr data-bind="if: groupMembers !== ''">
2300                        <td class="visibleSubFields" data-bind="text: 'Group: ' + groupMembers">Group:</td>
2301                    </tr>
2302                    <tr data-bind="if: guest !== ''">
2303                        <td class="visibleSubFields" data-bind="text: guest"></td>
2304                    </tr>
2305                </tbody>
2306            </table>
2307
2308
2309
2310            <div style="display: flex; justify-content: center;" >
2311                <table class="new-attendee-info" >
2312                    <tbody>
2313                    <tr class="info">
2314                        <td style="padding-left: 40px;">
2315                            <div class="button-container-checkin">
2316                                <button class="blue-button check-in" data-bind="visible : typeof registrationstatus !== 'undefined' && registrationstatus != 'Cancelled' && isCheckedIn == false, click : $parent.checkInAttendee">Check-In</button>
2317                                <button class="blue-button checked-in" data-bind="visible : typeof registrationstatus !== 'undefined' && registrationstatus != 'Cancelled' && isCheckedIn == true,  click : $parent.unCheckAttendee"><i class="icon-checkmark"></i>Checked-In</button>
2318                                <button class="blue-button check-in-group" data-bind="visible : typeof registrationstatus !== 'undefined' && registrationstatus == 'Confirmed' && isGroupCheckIn == true, click : $parent.groupCheckInAttendee">Check-In Group</button>
2319                                <button class="blue-button register" data-bind="visible : typeof registrationstatus !== 'undefined' && registrationstatus != 'Cancelled' && isCheckedIn == null,  click : $parent.registerPreLoadAttendee"><i class="icon-user-plus"></i>Register</button>
2320                                <button class="white-button" data-bind="click: $parent.cancel">Close</button>
2321                                <button class="blue-button no-show"
2322                                        data-bind="visible : typeof registrationstatus !== 'undefined' && registrationstatus != 'Cancelled' && noShow == false, click : $parent.noShowAttendee">
2323                                    Mark as No Show
2324                                </button>
2325                                <button class="blue-button no-showed"
2326                                        data-bind="visible : noShow == true, click : $parent.undoNoShowAttendee">
2327                                    <i class="icon-checkmark"></i>No Show
2328                                </button>
2329                            </div>
2330                        </td>
2331                        <td align="right" style="padding-right: 40px;">
2332                            <div class="buttons">
2333                                <button class="white-button attendee_cancel" disabled="disabled" style="color:white; background:gray;"
2334                                        data-bind="visible: $root.eventData.mobileCancelRegistrationSetting == 1 && typeof registrationstatus !== 'undefined' && registrationstatus == 'Cancelled',
2335                                            click : $parent.cancelAttendeeRegistration">Attendee Cancelled</button>
2336                                <button class="blue-button cancel_reg"
2337                                        data-bind="visible: $root.eventData.mobileCancelRegistrationSetting == 1 && typeof registrationstatus !== 'undefined' && registrationstatus != 'Cancelled' && isCheckedIn != null,
2338                                        click : $parent.cancelAttendeeRegistration">Cancel Registration</button>
2339                            </div>
2340                        </td>
2341                    </tr>
2342                    </tbody>
2343                </table>
2344            </div>
2345
2346        </li>
2347    </ul>
2348
2349    <p id="loading" data-bind="visible: isLoading">
2350        <span style="padding:0.5em; background:#2a2a2a; display:inline-block; border-radius:0.5em;">
2351            <img src="/images/loading_circle.gif" alt="Loading" />
2352        </span>
2353    </p>
2354
2355    
2356</script>
2356
2357
2358<script type="text/html" id="register-attendee-page-template">
2359    <div class="register-attendee-header">
2360        <i class="icon-user-plus "></i>
2361        Register new attendee
2362    </div>
2363
2364    <!-- Container for dynamically rendered questions HTML -->
2365    <div class="register-attendee-questions" data-bind="html: $root.eventData.questionsHtml"></div>
2366
2367    <ul class="register-attendee register-attendee-buttons">
2368        <li>
2369            <label for="notes">Notes</label>
2370            <textarea id="notes" data-bind="value: notes"></textarea>
2371        </li>
2372        <li class="register-button">
2373            <input type="submit" class="blue-button" data-bind="click: register" value="register and check-in">
2374        </li>
2375        <li class="register-button">
2376            <button class="white-button" data-bind="click: cancel">cancel</button>
2377        </li>
2378    </ul>
2379</script>
2379
2380
2381
2382    <div id="overlay" style="display: none;"></div>
2383    <div id="alertWindow" style="display: none;">
2384        <div id="alertText"></div>
2385        <div id="alertBtn"></div>
2386    </div>
2387
2388    
2388<script type="text/javascript" src="https://staticcdn.eventscloud.com/libs/js/jquery/3.6.4/jquery-3.6.4.min.js"></script>
2388
2389    
2389<script type="text/javascript" src="https://code.jquery.com/jquery-migrate-3.4.0.js"></script>
2389
2390    
2390<script type="text/javascript" src="https://staticcdn.eventscloud.com/libs/js/knockout-3.5.1.js"></script>
2390
2391    
2392    <!-- Registration helper functions for question rendering -->
2393    
2393<script type="text/javascript" src="/ereg/include/scripts.js"></script>
2393
2394
2395    <!-- include mobile/index_js.tpl -->
2396    
2396<script type="text/javascript">
2397        var _csrf = "2ed17d80efeac74c092b5cb1a382b3e346d650c171619ef88",
2398    _isLoggedIn = "",
2399    _isLoggedInByLink = "",
2400    _loginCode = "",
2401    _showPreLoadApplicants = "0",
2402    _eventData = null,
2403    _defaultLogoUrl = "/application/themes/mobile-attendee/img/logo.png",
2404    _logoUrl = (_eventData && _eventData.eventLogo) ? _eventData.eventLogo : _defaultLogoUrl,
2405    _errorMessage = "",
2406    _loggedUserName = "",
2407    _passwordRequired = "1",
2408    _isNewPlatformThemeEnabled = "0",
2409    _newPlatformThemeColors = '0';
2410
2411var checkinLocation;
2412
2413function loadCaptcha() {
2414    document.getElementById('refresh_captcha').src = "/mobileadmin/loginAPI/generateCaptcha?t=" + new Date().getTime();
2415    document.getElementById('captcha').value="";
2416}
2417var renderAccountThemeColors = function (isLoggedIn, newPlatformThemeColors, isNewPlatformThemeEnabled) {
2418    // Create a new style element or find an existing one
2419    let style = document.createElement('style');
2420    document.head.appendChild(style);
2421
2422    // Dynamically set CSS rules using the variables
2423    if (!isLoggedIn) {
2424        style.innerHTML = `
2425            :root {
2426                --primary-theme-color: #223651;
2427                --secondary-theme-color: #435A6C;
2428                --highlight-theme-color: #DDE5EA;
2429            }`;
2430            $("body").removeClass('legacy_ui');
2431    } else {
2432        if (!isNewPlatformThemeEnabled) {
2433            $("body").addClass('legacy_ui');
2434        } else {
2435            $("body").removeClass('legacy_ui');
2436        }
2437    style.innerHTML = `
2438        :root {
2439            --primary-theme-color: ` + newPlatformThemeColors.primarycolor + `;
2440            --secondary-theme-color: ` + newPlatformThemeColors.secondarycolor + `;
2441            --highlight-theme-color: ` + newPlatformThemeColors.highlightcolor + `;
2442        }`;
2443    }
2444};
2445
2446var _mobilePreloadFieldValues = null;
2447
2448function setMobilePreloadFieldValues(itemData) {
2449    _mobilePreloadFieldValues = itemData || null;
2450}
2451
2452// ET-83452: Suppress ereg inline handlers that reference DOM elements absent in mobile.
2453// toggleVisibilityChkBox — emitted inside 
2453<script> tags in questionsHtml; KO's html
2454// binding does not execute those scripts so the function is never defined.
2455// loadselectdescription — defined in scripts.js but relies on a selectdescription
2456// element that does not exist in the mobile check-in layout; calling it throws
2457// "Cannot read properties of undefined (reading 'display')".
2458// Both are replaced with no-ops here; our mobileEvaluateConditional engine handles
2459// all show/hide logic via jQuery event delegation instead.
2460window.toggleVisibilityChkBox = function () { return; };
2461window.loadselectdescription  = function () { return; };
2462
2463/**
2464 * ET-83452: Mobile Conditional Question Engine
2465 *
2466 * KnockoutJS's html binding does NOT execute 
2466<script> tags inside injected HTML,
2467 * so the inline togglevisibilityN() functions that regfunctions.php emits are
2468 * never defined. This engine uses a server-generated conditional map (passed via
2469 * eventData.conditionalMap) to drive show/hide logic via jQuery event delegation.
2470 *
2471 * The map is built in EventAPI.php using regQuestionDisplay::getRequiredResponse()
2472 * so trigger values are normalised the same way as desktop ereg.
2473 *
2474 * Supported parent input types:
2475 *   Type 16 — Dropdown         (select element)
2476 *   Type 17 — Radio Button     (input[type=radio])
2477 *   Type  4 — Multi-checkbox   (input[type=checkbox])
2478 */
2479
2480// Module-level store populated by initMobileConditionalQuestions().
2481// Shape: { "parentQuestionId": [{ childId, trigger, operator }, ...], ... }
2482var _mobileConditionalMap = {};
2483
2484function restoreMobilePreloadFields($container) {
2485    if (!_mobilePreloadFieldValues || !$container || !$container.length) {
2486        return;
2487    }
2488    $container.find('input[name^="input["], textarea[name^="input["], select[name^="input["]').each(function() {
2489        var name = $(this).attr('name') || '';
2490        var match = name.match(/^input\[([^\]]+)\]/);
2491        if (!match) {
2492            return;
2493        }
2494        var fieldName = match[1];
2495        if (/_(value|values)$/.test(fieldName)) {
2496            return;
2497        }
2498        var fieldValue = _mobilePreloadFieldValues[fieldName];
2499        var choiceKey = _mobilePreloadFieldValues[fieldName + '_value'];
2500        if (fieldValue === undefined || fieldValue === null || fieldValue === '') {
2501            return;
2502        }
2503        var $el = $(this);
2504        if ($el.is('select')) {
2505            if (choiceKey) {
2506                $el.val(String(choiceKey));
2507            } else if (!$el.val(fieldValue)) {
2508                $el.find('option').each(function() {
2509                    var $opt = $(this), optVal = $opt.val();
2510                    if (!optVal) {
2511                        return;
2512                    }
2513                    if ($.trim($opt.text()) === fieldValue || $opt.attr('data-eng') === fieldValue) {
2514                        $el.val(optVal);
2515                        return false;
2516                    }
2517                });
2518            }
2519        } else if ($el.is('input[type="radio"]')) {
2520            if (choiceKey) {
2521                $container.find('input[type="radio"][name="' + name + '"][value="' + choiceKey + '"]').prop('checked', true);
2522            } else {
2523                $container.find('input[type="radio"][name="' + name + '"][value="' + fieldValue + '"]').prop('checked', true);
2524            }
2525        } else if ($el.is('input[type="checkbox"]')) {
2526            if (name.indexOf('][') !== -1) {
2527                return;
2528            }
2529            if (fieldValue === 'Checked') {
2530                $el.prop('checked', true);
2531            }
2532        } else if ($el.attr('type') !== 'hidden') {
2533            $el.val(fieldValue);
2534        }
2535    });
2536    Object.keys(_mobilePreloadFieldValues).forEach(function(fieldName) {
2537        if (/_(value|values)$/.test(fieldName)) {
2538            return;
2539        }
2540        var numericValues = _mobilePreloadFieldValues[fieldName + '_values'];
2541        if (!numericValues) {
2542            return;
2543        }
2544        $.each(numericValues, function(i, numericValue) {
2545            if (numericValue) {
2546                $container.find('input[type="checkbox"][name^="input[' + fieldName + ']"][value="' + numericValue + '"]').prop('checked', true);
2547            }
2548        });
2549    });
2550}
2551
2552/**
2553 * Show or hide conditional child question tables for a given parent.
2554 * Primary path: uses _mobileConditionalMap (server-generated, reliable).
2555 * Fallback path: reads data-conditional-parent DOM attributes.
2556 *
2557 * @param parentId   string|number  The parent question's questionid
2558 * @param currentVal string|Array   Current value(s) from the parent input
2559 * @param inputType  string         'dropdown' | 'radio' | 'checkbox'
2560 */
2561function mobileEvaluateConditional(parentId, currentVal, inputType) {
2562    var entries = _mobileConditionalMap[String(parentId)] || [];
2563
2564    function applyVisibility($child, trigger, operator) {
2565        var shouldShow = false;
2566        if (inputType === 'checkbox') {
2567            var values = Array.isArray(currentVal) ? currentVal : [currentVal];
2568            shouldShow = values.map(String).indexOf(String(trigger)) !== -1;
2569        } else {
2570            switch (operator) {
2571                case '==': shouldShow = String(currentVal) === String(trigger); break;
2572                case '!=': shouldShow = String(currentVal) !== String(trigger) && String(currentVal) !== ''; break;
2573                case '>':  shouldShow = parseFloat(currentVal) >  parseFloat(trigger); break;
2574                case '<':  shouldShow = parseFloat(currentVal) <  parseFloat(trigger); break;
2575                default:   shouldShow = String(currentVal) === String(trigger);
2576            }
2577        }
2578        if (shouldShow) {
2579            $child.show();
2580            restoreMobilePreloadFields($child);
2581        } else {
2582            $child.hide();
2583        }
2584    }
2585
2586    if (entries.length) {
2587        // Primary: use the server-generated map (most reliable)
2588        entries.forEach(function (entry) {
2589            var $child = $('#q' + entry.childId);
2590            if ($child.length) {
2591                applyVisibility($child, entry.trigger, entry.operator || '==');
2592            }
2593        });
2594    } else {
2595        // Fallback: scan DOM data-conditional-parent attributes
2596        $('[data-conditional-parent="' + parentId + '"]').each(function () {
2597            var $child   = $(this);
2598            var trigger  = $child.data('conditionalTrigger');
2599            var operator = String($child.data('conditionalOperator') || '==');
2600            applyVisibility($child, trigger, operator);
2601        });
2602    }
2603}
2604
2605/**
2606 * Initialise conditional visibility after KO has injected questionsHtml into the DOM.
2607 *
2608 * @param conditionalMap object  eventData.conditionalMap from the API response.
2609 *                               Maps parentQuestionId => [{ childId, trigger, operator }].
2610 *
2611 * 1. Stores the map and hides ALL conditional child tables.
2612 * 2. Creates no-op window.togglevisibilityN() stubs so legacy inline handlers
2613 *    on parent questions do not throw ReferenceError.
2614 * 3. Attaches namespaced jQuery event delegation for Dropdown, Radio, Checkbox.
2615 * 4. Evaluates initial state for pre-filled / edit-attendee scenarios.
2616 */
2617function initMobileConditionalQuestions(conditionalMap) {
2618    _mobileConditionalMap = conditionalMap || {};
2619
2620    // 1. Hide all conditional children using the server-generated map
2621    Object.keys(_mobileConditionalMap).forEach(function (parentId) {
2622        (_mobileConditionalMap[parentId] || []).forEach(function (entry) {
2623            $('#q' + entry.childId).hide();
2624        });
2625    });
2626    // Belt-and-suspenders: also hide any tables marked with data-conditional-parent
2627    $('[data-conditional-parent]').hide();
2628
2629    // 2. Suppress legacy inline togglevisibility* calls
2630    $('.register-attendee-questions [onchange], .register-attendee-questions [onclick]').each(function () {
2631        var attrs = ($(this).attr('onchange') || '') + ' ' + ($(this).attr('onclick') || '');
2632        var re = /togglevisibility(\d+)/g;
2633        var m;
2634        while ((m = re.exec(attrs)) !== null) {
2635            var fnName = 'togglevisibility' + m[1];
2636            if (typeof window[fnName] === 'undefined') {
2637                window[fnName] = function () { return; };
2638            }
2639        }
2640    });
2641
2642    // 3. Event delegation — .mobileConditional namespace prevents duplicate handlers
2643    //    on re-render (cancel → register again clears and re-attaches cleanly).
2644    $(document)
2645        .off('.mobileConditional')
2646        // --- Dropdown (Type 16) ---
2647        .on('change.mobileConditional',
2648            '.register-attendee-questions select',
2649            function () {
2650                var parentId = ($(this).closest('table[id^="q"]').attr('id') || '').replace('q', '');
2651                if (parentId) { mobileEvaluateConditional(parentId, $(this).val(), 'dropdown'); }
2652            }
2653        )
2654        // --- Radio Button (Type 17) ---
2655        .on('change.mobileConditional',
2656            '.register-attendee-questions input[type="radio"]',
2657            function () {
2658                var parentId = ($(this).closest('table[id^="q"]').attr('id') || '').replace('q', '');
2659                if (parentId) { mobileEvaluateConditional(parentId, $(this).val(), 'radio'); }
2660            }
2661        )
2662        // --- Multi-checkbox (Type 4) ---
2663        .on('change.mobileConditional',
2664            '.register-attendee-questions input[type="checkbox"]',
2665            function () {
2666                var $table   = $(this).closest('table[id^="q"]');
2667                var parentId = ($table.attr('id') || '').replace('q', '');
2668                if (parentId) {
2669                    var checkedVals = [];
2670                    $table.find('input[type="checkbox"]:checked').each(function () {
2671                        checkedVals.push(String($(this).val()));
2672                    });
2673                    mobileEvaluateConditional(parentId, checkedVals, 'checkbox');
2674                }
2675            }
2676        )
2677        // --- Clear Selection (radio buttons) ---
2678        // The inline onclick handler unchecks radio buttons without firing a change
2679        // event, so the conditional engine is never notified. Intercept the click
2680        // and evaluate with an empty value to hide all children of the parent.
2681        .on('click.mobileConditional',
2682            '.register-attendee-questions .clear-selection-label',
2683            function () {
2684                var $table   = $(this).closest('table[id^="q"]');
2685                var parentId = ($table.attr('id') || '').replace('q', '');
2686                if (parentId) {
2687                    setTimeout(function () {
2688                        mobileEvaluateConditional(parentId, '', 'radio');
2689                    }, 0);
2690                }
2691            }
2692        );
2693
2694    // 4. Evaluate initial state for pre-filled values (edit / pre-load attendee)
2695    $('.register-attendee-questions select').each(function () {
2696        var val = $(this).val();
2697        if (val) {
2698            var parentId = ($(this).closest('table[id^="q"]').attr('id') || '').replace('q', '');
2699            if (parentId) { mobileEvaluateConditional(parentId, val, 'dropdown'); }
2700        }
2701    });
2702    $('.register-attendee-questions input[type="radio"]:checked').each(function () {
2703        var parentId = ($(this).closest('table[id^="q"]').attr('id') || '').replace('q', '');
2704        if (parentId) { mobileEvaluateConditional(parentId, $(this).val(), 'radio'); }
2705    });
2706    var seenParents = {};
2707    $('.register-attendee-questions input[type="checkbox"]').each(function () {
2708        var $table   = $(this).closest('table[id^="q"]');
2709        var parentId = ($table.attr('id') || '').replace('q', '');
2710        if (parentId && !seenParents[parentId]) {
2711            seenParents[parentId] = true;
2712            var vals = [];
2713            $table.find('input[type="checkbox"]:checked').each(function () {
2714                vals.push(String($(this).val()));
2715            });
2716            if (vals.length) { mobileEvaluateConditional(parentId, vals, 'checkbox'); }
2717        }
2718    });
2719}
2720
2721$(function () {
2722    if (!_isLoggedIn) {
2723        renderAccountThemeColors(false, [], true);
2724    }
2725    var pageViewModel = new PageViewModel();
2726
2727    ko.renderTemplate($('#page-template').attr('id'), pageViewModel, {
2728        templateEngine: ko.nativeTemplateEngine.instance
2729    }, $('#page-content')[0]);
2730
2731
2732    if (_errorMessage) {
2733        pageViewModel.hideAllPageElements();
2734        pageViewModel.logoUrl(_logoUrl);
2735        pageViewModel.errorMessage(_errorMessage);
2736
2737        return false;
2738    }
2739
2740    if (_isLoggedIn && _loginCode.length == 0) {
2741        var eventsViewModel = new EventsListViewModel();
2742        pageViewModel.render(eventsViewModel, $('#events-page-template'));
2743        eventsViewModel.loadEventsList(0);
2744    } else if (_isLoggedIn && _loginCode.length != 0) {
2745        var eventViewModel = new EventViewModel();
2746        pageViewModel.render(eventViewModel, $('#event-page-template'));
2747        eventViewModel.loadEventData(_eventData.eventId);
2748    } else if (_loginCode.length != 0) {
2749        var loginByLinkViewModel = new LoginByLinkViewModel();
2750        loginByLinkViewModel.eventName(_eventData.eventName);
2751        loginByLinkViewModel.eventLogo(_logoUrl);
2752        pageViewModel.showMenuButton(false);
2753        pageViewModel.render(loginByLinkViewModel, $('#login-by-link-page-template'));
2754    } else {
2755        var loginViewModel = new LoginViewModel();
2756        pageViewModel.showMenuButton(false);
2757        pageViewModel.render(loginViewModel, $('#login-page-template'));
2758    }
2759});
2760
2761
2762/*! A fix for the iOS orientationchange zoom bug. Script by @scottjehl, rebound by @wilto.MIT License.*/(function(m){if(!(/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>-1)){return}var l=m.document;if(!l.querySelector){return}var n=l.querySelector("meta[name=viewport]"),a=n&&n.getAttribute("content"),k=a+",maximum-scale=1",d=a+",maximum-scale=10",g=true,j,i,h,c;if(!n){return}function f(){n.setAttribute("content",d);g=true}function b(){n.setAttribute("content",k);g=false}function e(o){c=o.accelerationIncludingGravity;j=Math.abs(c.x);i=Math.abs(c.y);h=Math.abs(c.z);if(!m.orientation&&(j>7||((h>6&&i<8||h<8&&i>6)&&j>5))){if(g){b()}}else{if(!g){f()}}}m.addEventListener("orientationchange",f,false);m.addEventListener("devicemotion",e,false)})(this);
2763
2764
2765var PageViewModel = function() {
2766    var self = this;
2767
2768    self.errorMessage = ko.observable(null);
2769
2770    self.logoUrl = ko.observable(null);
2771
2772    self.headerText = ko.observable(null);
2773    self.checkinLocation = ko.observable(null);
2774    self.showMenuButton = ko.observable(true);
2775
2776    self.showSearchPanel = ko.observable(false);
2777    self.showFilterPanel = ko.observable(false);
2778    self.searchIcon = ko.observable(null);
2779    self.searchPlaceholder = ko.observable(null);
2780    self.searchText = ko.observable(null);
2781
2782    self.showCustomButtons = ko.observable(false);
2783    self.customButtonsClass = ko.observable(null);
2784
2785    self.categories = ko.observableArray([]);
2786
2787    self.showTitleBox = ko.observable(null);
2788    self.titleText = ko.observable(null);
2789
2790    self.titleButtonIcon = ko.observable(false);
2791
2792    self.titleIcon = ko.observable(false);
2793
2794    self.showPreLoadAttendees = ko.observable(false);
2795
2796    self.model = null;
2797    self.template = null;
2798
2799    self.onSearchButtonClickCallback = function() {
2800        return false;
2801    };
2802    self.onTitleBoxButtonClickCallback = function() {
2803        return false;
2804    };
2805    self.onRegisterAttendeeClickCallback = function() {
2806        return false;
2807    };
2808
2809    self.onClearFiltersClickCallback = function () {
2810    return false;
2811    };
2812
2813
2814    self.hideAllPageElements = function() {
2815        self.errorMessage(false);
2816        self.logoUrl(false);
2817        self.searchText(null);
2818        self.showSearchPanel(false);
2819        self.showFilterPanel(false);
2820        self.showCustomButtons(false);
2821        self.customButtonsClass(null);
2822        $('.attendees-search-box').removeClass('attendees-search-box');
2823        self.showTitleBox(false);
2824        self.titleText(null);
2825        self.titleButtonIcon(null);
2826        self.titleIcon(null);
2827        self.headerText('Attendee Check-In');
2828
2829        self.onTitleBoxButtonClickCallback = function() {
2830            return false;
2831        };
2832
2833        self.onSearchButtonClickCallback = function() {
2834            return false;
2835        };
2836
2837        self.onRegisterAttendeeClickCallback = function() {
2838            return false;
2839        };
2840    };
2841
2842    self.onMainMenuClick = function() {
2843        var menuViewModel = new MenuViewModel();
2844
2845        menuViewModel.previousModel = self.model;
2846        menuViewModel.previousTemplate = self.template;
2847
2848        menuViewModel.userName(_loggedUserName);
2849        if (_isLoggedInByLink) {
2850            menuViewModel.showGoToEventsPageButton(false);
2851        }
2852
2853        self.render(menuViewModel, $('#menu-page-template'));
2854    };
2855
2856    self.onTitleBoxButtonClick = function() {
2857        return self.onTitleBoxButtonClickCallback();
2858    };
2859
2860    self.onSearchButtonClick = function() {
2861        var searchText = self.searchText();
2862        if (!searchText) {
2863            self.showNotificationMessage('You must enter some text to search');
2864
2865            return false;
2866        }
2867
2868        return self.onSearchButtonClickCallback();
2869    };
2870
2871    self.onRegisterAttendeeClick = function() {
2872        return self.onRegisterAttendeeClickCallback();
2873    };
2874
2875    self.loadCategories = function(eventId) {
2876        self.startApiCall(
2877        '/mobileadmin/attendeeAPI/loadCategories',
2878        { eventId: eventId }, // params object
2879        function(response) {
2880        // Ensure we always have an array, even if empty
2881        self.categories(Array.isArray(response.categories) ? response.categories : []);
2882        // Initialize checkbox logic after DOM update
2883        setTimeout(setupCategoryCheckboxLogic, 0);
2884        }
2885        );
2886    };
2887
2888    self.onApplyFiltersClick = function() {
2889    return self.onApplyFiltersClickCallback();
2890    };
2891    self.onClearFiltersClick = function() {
2892    return self.onClearFiltersClickCallback();
2893    };
2894
2895    self.render = function(model, template) {
2896        self.model = model;
2897        self.model.isLoggedInByLink = +_isLoggedInByLink;
2898        self.template = template;
2899
2900        self.model.init(self);
2901
2902        self.renderContent(model, template);
2903    };
2904
2905    self.renderContent = function(model, template) {
2906        ko.renderTemplate(template.attr('id'), model, {
2907            templateEngine: ko.nativeTemplateEngine.instance
2908        }, $('#content')[0]);
2909    };
2910
2911    self.startApiCall = function(url, params, callback, onError) {
2912        $.post(
2913            url,
2914            {
2915                csrf: _csrf,
2916                params : ko.toJSON(params)
2917            },
2918            function(response) {
2919                if (response.error) {
2920                    var errorMessage = response.error;
2921                    if (errorMessage && typeof errorMessage === 'object' && errorMessage.message) {
2922                        errorMessage = errorMessage.message;
2923                    }
2924                    self.showNotificationMessage(errorMessage);
2925                    if (onError) {
2926                        onError();
2927                    }
2928                } else {
2929                    callback(response);
2930                }
2931            },
2932            'json'
2933        ).fail(function() {
2934            self.showNotificationMessage('Request failed. Please try again.');
2935            if (onError) {
2936                onError();
2937            }
2938        });
2939    };
2940
2941    self.showNotificationMessage = function(message) {
2942        alert(message);
2943    };
2944};
2945
2946var MenuViewModel = function () {
2947    var self = this;
2948
2949    self.pageModel;
2950
2951    self.previousModel;
2952    self.previousTemplate;
2953
2954    self.userName = ko.observable(null);
2955    self.showLogoutConfirmation = ko.observable(false);
2956    self.showGoToEventsPageButton = ko.observable(true);
2957
2958    self.init = function(pageModel) {
2959        self.pageModel = pageModel;
2960
2961        pageModel.hideAllPageElements();
2962        pageModel.logoUrl(_logoUrl);
2963    };
2964
2965    self.goToEventsPage = function() {
2966        var eventsViewModel = new EventsListViewModel();
2967        self.pageModel.render(eventsViewModel, $('#events-page-template'));
2968        eventsViewModel.loadEventsList(0);
2969    };
2970
2971    self.showLogoutConfirmationDialog = function() {
2972        self.showLogoutConfirmation(true);
2973    };
2974
2975    self.logout = function() {
2976        self.pageModel.startApiCall(
2977            '/mobileadmin/loginAPI/logout',
2978            {},
2979            function(response) {
2980                renderAccountThemeColors(false, [], true);
2981                _isLoggedIn = false;
2982                if (_isLoggedInByLink) {
2983                    _isLoggedInByLink = false;
2984                    var loginByLinkViewModel = new LoginByLinkViewModel();
2985                    loginByLinkViewModel.eventName(_eventData.eventName);
2986                    loginByLinkViewModel.eventLogo(_logoUrl);
2987
2988                    self.pageModel.render(loginByLinkViewModel, $('#login-by-link-page-template'));
2989                    self.pageModel.showMenuButton(false);
2990                } else {
2991                    var loginViewModel = new LoginViewModel();
2992
2993                    self.pageModel.render(loginViewModel, $('#login-page-template'));
2994                }
2995            }
2996        );
2997    };
2998
2999    self.cancelLogout = function() {
3000        self.showLogoutConfirmation(false);
3001    };
3002
3003    self.cancel = function() {
3004        self.pageModel.render(self.previousModel, self.previousTemplate, false);
3005    };
3006};
3007
3008var LoginViewModel = function () {
3009    var self = this;
3010
3011    self.pageModel;
3012
3013    self.username = ko.observable(null);
3014    self.password = ko.observable(null);
3015
3016    self.init = function(pageModel) {
3017        self.pageModel = pageModel;
3018
3019        self.pageModel.hideAllPageElements();
3020
3021        self.pageModel.showMenuButton(false);
3022        self.pageModel.logoUrl(_logoUrl);
3023    };
3024
3025    self.goToEventsPage = function () {
3026        var eventsViewModel = new EventsListViewModel();
3027        self.pageModel.render(eventsViewModel, $('#events-page-template'));
3028        eventsViewModel.loadEventsList(0);
3029    };
3030
3031    self.login = function () {
3032        if (self.username() && self.password()) {
3033            self.username(self.username().toLowerCase());
3034
3035            self.pageModel.startApiCall(
3036                '/mobileadmin/loginAPI/login',
3037                {
3038                    username: self.username(),
3039                    password: self.password()
3040                },
3041                function(response) {
3042                    _isLoggedIn = true;
3043                    _loggedUserName = response.loggedUserName;
3044                    self.goToEventsPage();
3045                    self.pageModel.showMenuButton(true);
3046                    renderAccountThemeColors(true, response.new_account_level_theme_color, response.is_new_platform_theme_enabled);
3047                }
3048            );
3049        } else {
3050            self.pageModel.showNotificationMessage('You must specify all fields');
3051        }
3052    };
3053
3054    self.goToResetPasswordPage = function () {
3055        self.pageModel.render(new ResetPasswordViewModel(), $('#reset-password-page-template'));
3056    };
3057};
3058
3059var ResetPasswordViewModel = function () {
3060    var self = this;
3061
3062    self.pageModel;
3063
3064    self.username = ko.observable(null);
3065    self.captcha = ko.observable(null);
3066    self.logoUrl = ko.observable(_logoUrl);
3067
3068    self.init = function(pageModel) {
3069        self.pageModel = pageModel;
3070
3071        self.pageModel.hideAllPageElements();
3072        self.pageModel.logoUrl(_logoUrl);
3073    }
3074
3075    self.send = function () {
3076        if (self.username() && self.captcha()) {
3077            self.username(self.username());
3078            self.captcha(self.captcha());
3079
3080            self.pageModel.startApiCall(
3081                '/mobileadmin/loginAPI/sendResetPasswordEmail',
3082                {
3083                    username: self.username(),
3084                    captcha: self.captcha(),
3085                },
3086                function(response) {
3087                    self.pageModel.showNotificationMessage('If that username exists you have been emailed your password.');
3088                    self.goToLoginPage();
3089                }
3090            );
3091        } else {
3092            self.pageModel.showNotificationMessage('You must specify all the fields');
3093        }
3094    };
3095
3096    self.goToLoginPage = function () {
3097        var loginViewModel = new LoginViewModel();
3098        self.pageModel.render(loginViewModel, $('#login-page-template'));
3099    };
3100};
3101
3102var LoginByLinkViewModel = function () {
3103    var self = this;
3104
3105    self.pageModel;
3106
3107    self.password = ko.observable(null);
3108    self.eventLogo = ko.observable(null);
3109    self.eventName = ko.observable(null);
3110
3111    self.init = function (pageModel) {
3112        self.pageModel = pageModel;
3113
3114        self.pageModel.hideAllPageElements();
3115        self.pageModel.logoUrl(_logoUrl);
3116    };
3117
3118    self.showPasswordField =_passwordRequired ;
3119
3120    self.login = function () {
3121        if (self.showPasswordField && !self.password()) {
3122            self.pageModel.showNotificationMessage('You must specify password');
3123        } else {
3124            self.pageModel.startApiCall(
3125                '/mobileadmin/loginAPI/loginByLink',
3126                {
3127                    code: _loginCode,
3128                    password: self.password()
3129
3130                },
3131                function(response) {
3132                    self.pageModel.showMenuButton(true);
3133                    _isLoggedIn = true;
3134                    _isLoggedInByLink = true;
3135                    self.goToEventPage(_eventData.eventId);
3136                }
3137            );
3138        }
3139    };
3140
3141    self.goToEventPage = function(eventId) {
3142        var eventViewModel = new EventViewModel();
3143        self.pageModel.render(eventViewModel, $('#event-page-template'));
3144        eventViewModel.loadEventData(eventId);
3145    };
3146};
3147
3148var EventsListViewModel = function () {
3149    var self = this;
3150
3151    self.pageModel;
3152    self.currentFolderName;
3153
3154    self.events = ko.observableArray(null);
3155
3156    self.eventId = ko.observable(null);
3157    self.titleText = ko.observable(null);
3158    self.backFolderId = ko.observable(null);
3159    self.eventData = ko.observable(null);
3160    self.searchText = ko.observable(null);
3161    self.titleIcon = ko.observable(null);
3162
3163    self.init = function (pageModel) {
3164        self.pageModel = pageModel;
3165
3166        pageModel.hideAllPageElements();
3167        pageModel.showSearchPanel(true);
3168        pageModel.showFilterPanel(false);
3169        pageModel.searchPlaceholder('search events by name or #');
3170        pageModel.searchIcon('icon-calendar');
3171
3172        pageModel.showTitleBox(true);
3173        if (self.currentFolderName) {
3174            pageModel.titleText(self.currentFolderName);
3175        }
3176
3177        pageModel.onTitleBoxButtonClickCallback = function() {
3178            self.pageModel.searchText(null);
3179            self.loadEventsList(self.backFolderId());
3180        };
3181
3182        pageModel.onSearchButtonClickCallback = function() {
3183            self.backFolderId(0);
3184            self.searchText(self.pageModel.searchText());
3185
3186            self.pageModel.startApiCall(
3187                '/mobileadmin/eventAPI/searchEvents',
3188                {
3189                    searchText: self.pageModel.searchText()
3190                },
3191                function(response) {
3192                    self.events(response.eventsList);
3193                    self.pageModel.titleText('Results for: ' + self.pageModel.searchText());
3194                    self.pageModel.titleIcon('icon-search');
3195                    self.pageModel.titleButtonIcon('icon-cancel-circle');
3196                }
3197            );
3198        };
3199    };
3200
3201    self.loadEventsList = function(parentFolderId) {
3202        self.pageModel.startApiCall(
3203            '/mobileadmin/eventAPI/loadEventsList',
3204            {
3205                parentFolderId: parentFolderId
3206            },
3207            function(response) {
3208                renderAccountThemeColors(true, response.new_account_level_theme_color, response.is_new_platform_theme_enabled);
3209                self.events(response.eventsList);
3210
3211                self.backFolderId(response.backFolderId);
3212                if (parentFolderId == 0) {
3213                    self.pageModel.titleButtonIcon(false);
3214                    self.pageModel.titleIcon(false);
3215                    self.pageModel.titleText('My events and folders');
3216                } else {
3217                    self.pageModel.titleButtonIcon('icon-arrow-left');
3218                    self.pageModel.titleIcon('icon-folder-open');
3219                    self.pageModel.titleText(response.currentFolderName);
3220                    self.currentFolderName = response.currentFolderName;
3221                }
3222            }
3223        );
3224    };
3225
3226    self.select = function (item) {
3227        if (item.type == 'folder') {
3228            self.loadEventsList(item.id);
3229        } else {
3230            var eventViewModel = new EventViewModel();
3231
3232            self.pageModel.render(eventViewModel, $('#event-page-template'));
3233            eventViewModel.loadEventData(item.id);
3234        }
3235    };
3236
3237    self.close = function(item, e) {
3238        self.searchText(null);
3239        self.titleText(null);
3240        self.titleIcon(null);
3241        self.loadEventsList(self.backFolderId());
3242        e.preventDefault();
3243    };
3244};
3245
3246var EventViewModel = function () {
3247    var self = this;
3248
3249    self.pageModel;
3250
3251    self.eventData = ko.observable(null);
3252    self.showCheckinLocations = ko.observable(null);
3253
3254    self.init = function (pageModel) {
3255        self.pageModel = pageModel;
3256
3257        pageModel.hideAllPageElements();
3258        if (!_isLoggedInByLink) {
3259            pageModel.showSearchPanel(true);
3260            pageModel.searchPlaceholder('search events by name or #');
3261            pageModel.showFilterPanel(false);
3262            pageModel.searchIcon('icon-calendar');
3263            pageModel.showTitleBox(true);
3264        } else {
3265            pageModel.headerText(_eventData.eventName);
3266            pageModel.logoUrl(_logoUrl);
3267        }
3268
3269        pageModel.onTitleBoxButtonClickCallback = function() {
3270            self.onCloseButtonClick();
3271        };
3272
3273        pageModel.onSearchButtonClickCallback = function() {
3274            var searchText = self.pageModel.searchText();
3275
3276            var eventsViewModel = new EventsListViewModel();
3277            self.pageModel.render(eventsViewModel, $('#events-page-template'));
3278
3279            eventsViewModel.backFolderId(0);
3280            eventsViewModel.searchText(searchText);
3281
3282            self.pageModel.startApiCall(
3283                '/mobileadmin/eventAPI/searchEvents',
3284                {
3285                    searchText: searchText
3286                },
3287                function(response) {
3288                    eventsViewModel.events(response.eventsList);
3289                    eventsViewModel.pageModel.titleText('Results for: ' + searchText);
3290                    eventsViewModel.pageModel.titleIcon('icon-search');
3291                    eventsViewModel.pageModel.titleButtonIcon('icon-cancel-circle');
3292                }
3293            );
3294        };
3295    };
3296
3297    self.loadEventData = function(eventId) {
3298        self.pageModel.startApiCall(
3299            '/mobileadmin/eventAPI/loadEventData',
3300            {
3301                eventId: eventId
3302            },
3303            function(response) {
3304                renderAccountThemeColors(true, response.new_account_level_theme_color, response.is_new_platform_theme_enabled);
3305                self.eventData(response.eventData);
3306                self.pageModel.titleText(response.eventData.eventName);
3307                self.pageModel.titleIcon('icon-calendar');
3308                self.pageModel.titleButtonIcon('icon-arrow-left');
3309                self.showCheckinLocations(response.eventData.checkinLocations && response.eventData.checkinLocations.length > 0);
3310                self.pageModel.searchText(null);
3311            }
3312        );
3313    };
3314
3315    self.onCloseButtonClick = function() {
3316        eventsListModel = new EventsListViewModel();
3317        self.pageModel.render(eventsListModel, $('#events-page-template'));
3318        eventsListModel.loadEventsList(self.eventData().folderId);
3319    };
3320
3321    self.startCheckingButtonClick = function(item, e) {
3322        checkinLocation = $('#checkin-location:visible');
3323        var attendeesViewModel = new AttendeesViewModel();
3324        attendeesViewModel.checkinLocationsEnabled = checkinLocation.length > 0;
3325
3326        if (attendeesViewModel.checkinLocationsEnabled) {
3327            attendeesViewModel.currentCheckinLocation = checkinLocation.val();
3328            attendeesViewModel.currentCheclinLocationName = checkinLocation.find('option:selected').html();
3329
3330            if (!attendeesViewModel.currentCheckinLocation) {
3331                alert('Please select Check-in Location');
3332                return;
3333            }
3334        }
3335
3336        attendeesViewModel.eventData = item.eventData();
3337        self.pageModel.render(attendeesViewModel, $('#attendees-page-template'));
3338        self.pageModel.loadCategories(item.eventData().eventId);
3339        if(item.eventData().isAllowedPreLoad){
3340            self.pageModel.showPreLoadAttendees(true);
3341        }
3342        attendeesViewModel.loadAttendeesList();
3343    };
3344};
3345
3346var AttendeesViewModel = function () {
3347    var self = this;
3348
3349    const SEARCH_ATTENDEES_ENDPOINT = '/mobileadmin/attendeeAPI/searchAttendees';
3350    const LOAD_ATTENDEES_LIST_ENDPOINT = '/mobileadmin/attendeeAPI/loadAttendeesList';
3351    const TRUNCATE_LENGTH = 100; // Characters to show before truncation
3352
3353    self.pageModel;
3354    self.eventData;
3355
3356    self.attendees = ko.observableArray(null);
3357    self.filterType = ko.observable(1);
3358    self.showPreLoadAttendees = ko.observable(null);
3359    self.showCancelAttendees = ko.observable(null);
3360    self.showAttendeesFilter = ko.observable(true);
3361    self.selectedCategories = ko.observableArray([]);
3362    self.excludePreload = ko.observable(null);
3363    self.multilineFields = ko.observableArray([]);
3364    self.expandedFields = {}; // Track expanded state for each attendee/field
3365
3366    // Pagination + search state
3367    self.currentPage = 1;
3368    self.isLoading = ko.observable(false);
3369    self.hasMore = true;
3370    self.scrollHandler = null;
3371    self.isSearchMode = ko.observable(false);
3372    self.searchQuery = ko.observable('');
3373
3374    self.filters = ko.observableArray([
3375        { id : 1, name: 'All Attendees', total: ko.observable(0) },
3376        { id : 2, name: 'Not Checked In', total: ko.observable(0) },
3377        { id : 3, name: 'Checked In', total: ko.observable(0) }
3378    ]);
3379
3380    // Helper function to check if field needs truncation
3381    self.needsTruncation = function(fieldName, fieldValue) {
3382        if (!fieldValue || typeof fieldValue !== 'string') return false;
3383        if (self.multilineFields().indexOf(fieldName) === -1) return false;
3384        return fieldValue.length > TRUNCATE_LENGTH || fieldValue.indexOf('\n') !== -1;
3385    };
3386
3387    // Helper function to get display value (truncated or full)
3388    self.getFieldDisplayValue = function(attendeeId, fieldName, fieldValue) {
3389        if (!self.needsTruncation(fieldName, fieldValue)) {
3390            return fieldValue;
3391        }
3392        
3393        var expandKey = attendeeId + '_' + fieldName;
3394        if (self.expandedFields[expandKey]) {
3395            return fieldValue; // Show full content
3396        }
3397        
3398        // Truncate: take first line or first TRUNCATE_LENGTH chars, whichever is shorter
3399        var firstNewLine = fieldValue.indexOf('\n');
3400        var truncateAt = firstNewLine > 0 && firstNewLine < TRUNCATE_LENGTH ? firstNewLine : TRUNCATE_LENGTH;
3401        return fieldValue.substring(0, truncateAt);
3402    };
3403
3404    // Helper function to check if field is expanded
3405    self.isFieldExpanded = function(attendeeId, fieldName) {
3406        var expandKey = attendeeId + '_' + fieldName;
3407        return self.expandedFields[expandKey] || false;
3408    };
3409
3410    // Toggle field expansion
3411    self.toggleFieldExpansion = function(attendeeId, fieldName, event) {
3412        var expandKey = attendeeId + '_' + fieldName;
3413        self.expandedFields[expandKey] = !self.expandedFields[expandKey];
3414        
3415        // Update only the specific field's display instead of re-rendering the entire list
3416        if (event && event.target) {
3417            var $link = $(event.target);
3418            var $fieldContent = $link.siblings('.field-content');
3419            var attendee = self.attendees().find(function(a) { return a.attendeeId === attendeeId; });
3420            if (attendee && $fieldContent.length > 0) {
3421                var fieldValue = attendee[fieldName];
3422                var displayValue = self.getFieldDisplayValue(attendeeId, fieldName, fieldValue);
3423                $fieldContent.text(displayValue);
3424                
3425                // Update the link text
3426                var isExpanded = self.expandedFields[expandKey];
3427                $link.text(isExpanded ? ' See less' : '...See more');
3428            }
3429        }
3430        
3431        // Prevent event bubbling
3432        if (event && event.stopPropagation) {
3433            event.stopPropagation();
3434        }
3435        return false;
3436    };
3437
3438    self.init = function (pageModel) {
3439        self.pageModel = pageModel;
3440        if ((_isLoggedInByLink && _showPreLoadApplicants)
3441            || self.eventData.isAllowedPreLoad) {
3442            const alreadyExists = self.filters().some(filter => filter.id === 4);
3443            if (!alreadyExists) {
3444            self.filters.push(
3445                {
3446                    id : 4,
3447                    name: 'Pre-loaded',
3448                    total: ko.observable(0)
3449                }
3450            );
3451}
3452            self.showPreLoadAttendees(true);
3453        }
3454
3455
3456        if(self.eventData.enable_mobile_attendee_cancel_registration == 1){
3457            if ((self.eventData.mobileCancelRegistrationSetting == 1) || (self.eventData.isAllowedCancel))
3458            {
3459                self.filters.push(
3460            {
3461                id : 5,
3462                name: 'Cancelled',
3463                total: ko.observable(0)
3464            }
3465            );
3466                self.showCancelAttendees(true);
3467            }
3468        }
3469
3470        pageModel.hideAllPageElements();
3471        pageModel.showSearchPanel(true);
3472        pageModel.showCustomButtons(true);
3473        pageModel.showFilterPanel(true);
3474        pageModel.customButtonsClass('attendees-search-box');
3475        pageModel.searchPlaceholder('search attendees');
3476                    pageModel.searchIcon('icon-user left-adjusted');
3477                pageModel.headerText(self.eventData.eventName);
3478
3479        if (self.currentCheckinLocation) {
3480            pageModel.checkinLocation('Check-in Location: ' + self.currentCheclinLocationName);
3481        } else {
3482            pageModel.checkinLocation('');
3483        }
3484
3485        self.filterType = ko.observable(1);
3486        if(self.eventData.default_home_tab != 0){
3487            self.filterType(self.eventData.default_home_tab);
3488        }
3489
3490        pageModel.onSearchButtonClickCallback = function() {
3491            const searchText = self.pageModel.searchText();
3492
3493            self.isSearchMode(true);
3494            self.searchQuery(searchText);
3495
3496            self.pageModel.showTitleBox(true);
3497            self.showAttendeesFilter(false);
3498
3499            self.pageModel.onTitleBoxButtonClickCallback = function() {
3500                // Clear search
3501                self.isSearchMode(false);
3502                self.searchQuery('');
3503                self.pageModel.showTitleBox(false);
3504                self.showAttendeesFilter(true);
3505                self.pageModel.searchText(null);
3506                self.isLoading(false);
3507                self.loadAttendeesList();
3508            };
3509
3510            self.isLoading(false);
3511            self.currentPage = 1;
3512            self.hasMore = true;
3513            self.attendees([]);
3514
3515            self.pageModel.titleText('Results for: ' + searchText);
3516            self.pageModel.titleIcon('icon-search');
3517            self.pageModel.titleButtonIcon('icon-cancel-circle');
3518
3519            self.loadNextPage(true);
3520            return false;
3521        };
3522
3523        pageModel.onRegisterAttendeeClickCallback = function() {
3524            var registerAttendeeViewModel = new RegisterAttendeeViewModel();
3525            registerAttendeeViewModel.eventData = self.eventData;
3526            self.pageModel.render(registerAttendeeViewModel, $('#register-attendee-page-template'));
3527        };
3528            pageModel.onApplyFiltersClickCallback = function () {
3529            const filterIcon = document.getElementById('category-filter');
3530            // Collect selected category IDs from checked checkboxes
3531            let checkboxes = document.querySelectorAll("#category-section input[type='checkbox']:checked");
3532            let excludeCheckbox = document.querySelector(".exclude-preload input[type='checkbox']");
3533            let isChecked = excludeCheckbox?.checked;
3534
3535            let selected = Array.from(checkboxes).map(cb => (cb.value));
3536
3537            self.selectedCategories(selected); // Save selected categories
3538            self.excludePreload(isChecked);
3539            self.loadAttendeesList();
3540
3541
3542            document.getElementById("filter-menu").style.display = "none";
3543            if (selected.length > 0 || isChecked == true) {
3544                filterIcon.classList.remove('fa-regular');
3545                filterIcon.classList.add('fa-solid');
3546            }else{
3547                filterIcon.classList.remove('fa-solid');
3548                filterIcon.classList.add('fa-regular');
3549            }
3550        };
3551        pageModel.onClearFiltersClickCallback = function () {
3552
3553            const filterIcon = document.getElementById('category-filter');
3554            document.querySelectorAll("#category-section input[type='checkbox']").forEach(function(cb) {
3555                cb.checked = false;
3556                cb.disabled = false;
3557            });
3558            let excludeCheckbox = document.querySelector(".exclude-preload input[type='checkbox']");
3559            if (excludeCheckbox) {
3560                excludeCheckbox.checked = false;
3561            }
3562            filterIcon.classList.remove('fa-solid');
3563            filterIcon.classList.add('fa-regular');// Uncheck all checkboxes
3564            self.selectedCategories(null); // Save selected categories
3565            self.excludePreload(null);
3566            self.loadAttendeesList();
3567            // Optionally hide the filter menu
3568            updateSelectedCategoryCount();
3569
3570            document.getElementById("filter-menu").style.display = "none";
3571        };
3572        
3573        self.scrollHandler = function() {
3574            if (self.isLoading() || !self.hasMore) {
3575                return;
3576            }
3577
3578            const scrollPos = $(window).scrollTop() + $(window).height();
3579            const threshold = $(document).height() - 150; // 150px from bottom
3580
3581            if (scrollPos >= threshold) {
3582                self.loadNextPage(false);
3583            }
3584        };
3585
3586        $(window).off('scroll.attendees').on('scroll.attendees', self.scrollHandler);
3587
3588        self.isSearchMode(false);
3589        self.searchQuery('');
3590        self.currentPage = 1;
3591        self.hasMore = true;
3592        self.attendees([]);
3593        self.loadNextPage(true);
3594    };
3595
3596    //detach scroll when leaving this view
3597    self.dispose = function() {
3598        $(window).off('scroll.attendees');
3599    };
3600
3601    self.changeFilter = function(item) {
3602        self.filterType(item.id);
3603        self.loadAttendeesList();
3604    };
3605
3606    self.loadAttendeesList = function() {
3607        self.isLoading(false);
3608        self.currentPage = 1;
3609        self.hasMore = true;
3610        self.attendees([]);
3611        self.loadNextPage(true);
3612    };
3613
3614    self.loadNextPage = function(isFirstLoad) {
3615        if (!self.hasMore && !isFirstLoad) {
3616            return;
3617        }
3618        if (self.isLoading() && !isFirstLoad) {
3619            return;
3620        }
3621
3622        self.isLoading(true);
3623
3624        const params = {
3625            eventId: self.eventData.eventId,
3626            filterType: self.filterType(),
3627            page: self.currentPage
3628        }
3629
3630        let attendeeListEndpoints = '';
3631
3632        if (self.isSearchMode()) {
3633            params.searchText = self.searchQuery();
3634            attendeeListEndpoints = SEARCH_ATTENDEES_ENDPOINT;
3635        } else {
3636                            params.selectedCategories = self.selectedCategories();
3637                params.excludePreload = self.excludePreload();
3638                        attendeeListEndpoints = LOAD_ATTENDEES_LIST_ENDPOINT;
3639        }
3640
3641        self.pageModel.startApiCall(
3642            attendeeListEndpoints,
3643            params,
3644            function(response) {
3645                const newList = response.attendeesList || [];
3646
3647                if (isFirstLoad) {
3648                    self.attendees(newList);
3649                    // Store multiline fields metadata on first load
3650                    if (response.multilineFields) {
3651                        self.multilineFields(response.multilineFields);
3652                    }
3653                } else {
3654                    self.attendees(self.attendees().concat(newList));
3655                }
3656
3657                if (response.totalAttendeesList) {
3658                    ko.utils.arrayMap(self.filters(), function(filter) {
3659                        if (response.totalAttendeesList[filter.id] !== undefined) {
3660                            filter.total(response.totalAttendeesList[filter.id]);
3661                        }
3662                    });
3663                }
3664
3665                self.hasMore = response.hasMore;
3666
3667                if (self.hasMore) {
3668                    self.currentPage += 1;
3669                }
3670
3671                self.isLoading(false);
3672            },
3673            function() {
3674                self.isLoading(false);
3675            }
3676        );
3677    };
3678
3679    self.checkInAttendee = function(item, e) {
3680        self.pageModel.startApiCall(
3681            '/mobileadmin/attendeeAPI/checkInAttendee',
3682            {
3683                attendeeId: item.attendeeId,
3684                locationId: self.checkinLocationsEnabled ? self.currentCheckinLocation : 0
3685            },
3686            function(response) {
3687                var filters = self.filters(),
3688                    checkInButton = $(e.currentTarget);
3689
3690                filters[1].total(parseInt(filters[1].total()) - 1);
3691                filters[2].total(parseInt(filters[2].total()) + 1);
3692
3693                item.isCheckedIn = true;
3694                checkInButton.closest('li').find('.checked-in').show();
3695                checkInButton.hide();
3696                checkInButton.closest('li').find('.icon-blankperson').removeClass('icon-blankperson').addClass('icon-user');
3697                self.reRenderAttendeeRowButtons(response, e, item);
3698            }
3699        );
3700    };
3701
3702    self.cancelAttendeeRegistration = function(item, e) {
3703        if (!confirm("You are about to cancel " + item.fname + " " + item.lname + " \nAre you sure you want to cancel the attendee?")) {
3704            return;
3705        }
3706
3707        self.pageModel.startApiCall(
3708            '/mobileadmin/attendeeAPI/cancelAttendeeRegistration',
3709        {
3710            eventId : self.eventData.eventId,
3711            attendeeId: item.attendeeId,
3712            email: item.email,
3713        },
3714        function(response) {
3715            self.loadAttendeesList();
3716        }
3717        );
3718    };
3719
3720    self.groupCheckInAttendee = function(item, e) {
3721
3722        self.pageModel.startApiCall(
3723        '/mobileadmin/attendeeAPI/checkInAttendeeGroup',
3724            {
3725                attendeeId: item.attendeeId,
3726                parentId : item.parentid,
3727                locationId: self.checkinLocationsEnabled ? self.currentCheckinLocation : 0
3728            },
3729            function(response) {
3730                self.loadAttendeesList();
3731            }
3732        );
3733    };
3734
3735    self.unCheckAttendee = function(item, e) {
3736        self.pageModel.startApiCall(
3737            '/mobileadmin/attendeeAPI/checkInAttendee',
3738            {
3739                attendeeId: item.attendeeId,
3740                uncheck: true
3741            },
3742            function(response) {
3743                var filters = self.filters(),
3744                    checkInButton = $(e.currentTarget);
3745
3746                filters[1].total(parseInt(filters[1].total()) + 1);
3747                filters[2].total(parseInt(filters[2].total()) - 1);
3748
3749                item.isCheckedIn = false;
3750                checkInButton.closest('li').find('.check-in').show();
3751                checkInButton.hide();
3752                checkInButton.closest('li').find('.icon-user').removeClass('icon-user').addClass('icon-blankperson');
3753                self.reRenderAttendeeRowButtons(response, e, item);
3754            }
3755        );
3756    };
3757
3758    self.noShowAttendee = function(item, e) {
3759        self.pageModel.startApiCall(
3760            '/mobileadmin/attendeeAPI/noShowAttendee',
3761            {
3762                attendeeId: item.attendeeId,
3763                noshow: 1
3764            },
3765            function(response) {
3766                var filters = self.filters();
3767                if (item.isCheckedIn) {
3768                    // Move from Checked In -> Not Checked In when marking No Show
3769                    filters[2].total(Math.max(0, parseInt(filters[2].total()) - 1));
3770                    filters[1].total(parseInt(filters[1].total()) + 1);
3771                    item.isCheckedIn = false;
3772
3773                    // Reset user icon with unchecked user
3774                    var checkInButton = $(e.currentTarget);
3775                    checkInButton.closest('li').find('.icon-user').removeClass('icon-user').addClass('icon-blankperson');
3776                }
3777                self.reRenderAttendeeRowButtons(response, e, item);
3778                e.stopPropagation();
3779            }
3780        );
3781    };
3782
3783    self.undoNoShowAttendee = function(item, e) {
3784        self.pageModel.startApiCall(
3785            '/mobileadmin/attendeeAPI/noShowAttendee',
3786            {
3787                attendeeId: item.attendeeId,
3788                noshow: 0
3789            },
3790            function(response) {
3791                self.reRenderAttendeeRowButtons(response, e, item);
3792                e.stopPropagation();
3793            }
3794        );
3795    };
3796
3797    self.select = function(item, e) {
3798        $(e.currentTarget).addClass('active');
3799        $(e.currentTarget).find('.info').show();
3800    };
3801
3802    self.cancel = function(item, e) {
3803        $(e.currentTarget).closest('li').removeClass('active');
3804        $(e.currentTarget).closest('li').find('.info').hide();
3805
3806        e.stopPropagation();
3807    };
3808
3809    self.registerPreLoadAttendee = function(item, e) {
3810        var registerAttendeeViewModel = new RegisterAttendeeViewModel();
3811
3812        registerAttendeeViewModel.eventData = self.eventData;
3813        registerAttendeeViewModel.preLoadId = item.attendeeId;
3814        registerAttendeeViewModel.itemData = item;
3815
3816        self.pageModel.render(registerAttendeeViewModel, $('#register-attendee-page-template'));
3817
3818        e.stopPropagation();
3819    };
3820
3821    self.reRenderAttendeeRowButtons = function(response, e, item) {
3822        if(response && response.updatedAttendeeData && response.updatedAttendeeData.registrationstatus != '') {
3823            let ele = $(e.currentTarget)
3824            switch(response.updatedAttendeeData.registrationstatus) {
3825                case 'Attended':
3826                    ele.closest('li').find('.no-show').show();
3827                    ele.closest('li').find('.no-showed').hide();
3828                    if(item.isGroupCheckIn) {
3829                        ele.closest('li').find('.check-in-group').hide();
3830                    }
3831                    break;
3832                case 'Confirmed':
3833                    ele.closest('li').find('.no-showed').hide();
3834                    ele.closest('li').find('.no-show').show();
3835                    if(item.isGroupCheckIn) {
3836                        ele.closest('li').find('.check-in-group').show();
3837                    }
3838                    break;
3839                case 'No Show':
3840                    ele.closest('li').find('.no-showed').show();
3841                    ele.closest('li').find('.check-in').show();
3842                    ele.closest('li').find('.no-show').hide();
3843                    ele.closest('li').find('.checked-in').hide();
3844                    if(item.isGroupCheckIn) {
3845                        ele.closest('li').find('.check-in-group').hide();
3846                    }
3847                    break;
3848            }
3849        }
3850    };
3851
3852};
3853
3854var RegisterAttendeeViewModel = function () {
3855    var self = this;
3856
3857    self.pageModel;
3858    self.eventData;
3859    self.preLoadId;
3860    self.itemData = null;
3861
3862    self.formFields = ko.observableArray([]);
3863    self.notes = ko.observable(null);
3864
3865    self.init = function(pageModel) {
3866        var formFields = [],
3867            i, j,
3868            fieldKey,
3869            fieldName,
3870            value,
3871            fields = self.getFields();
3872
3873        self.pageModel = pageModel;
3874
3875        pageModel.hideAllPageElements();
3876        pageModel.headerText(self.eventData.eventName);
3877
3878        for (i in fields) {
3879            for (j in self.eventData.attendeeVisibleFields) {
3880                fieldKey = self.eventData.attendeeVisibleFields[j].fieldName;
3881                fieldName = self.eventData.attendeeVisibleFields[j].reportName;
3882
3883                if (fieldKey != fields[i]) {
3884                    continue;
3885                }
3886
3887                formFields[i] = {
3888                    key: fieldKey,
3889                    name: fieldName,
3890                    value: ''
3891                };
3892            }
3893        }
3894
3895        var fieldLength = (self.itemData != null ? Object.values(self.itemData).length : 0);
3896        formFields.forEach((obj, i) => {
3897            if(self.itemData != null && self.itemData[obj.key] != undefined) {
3898                formFields[i].value = self.itemData[obj.key];
3899            }
3900        });
3901        self.formFields(formFields);
3902
3903        // Populate form fields with pre-loaded data after DOM is ready
3904        if (self.itemData != null && self.preLoadId) {
3905            setTimeout(function() {
3906                initMobileConditionalQuestions(self.eventData ? self.eventData.conditionalMap : null);
3907                self.populateFormFieldsFromItemData();
3908            }, 100);
3909        } else {
3910            setMobilePreloadFieldValues(null);
3911        setTimeout(function () {
3912            initMobileConditionalQuestions(self.eventData ? self.eventData.conditionalMap : null);
3913        }, 50);
3914        }
3915    };
3916
3917    self.getFields = function() {
3918        var fieldKeys = [],
3919            attendeeVisibleFields = self.eventData.attendeeVisibleFields,
3920            i,
3921            customKeys = [],
3922            key;
3923
3924        for (i in attendeeVisibleFields) {
3925            key = attendeeVisibleFields[i].fieldName;
3926            if (['fname', 'lname'].indexOf(key) == -1) {
3927                customKeys.push(key);
3928            }
3929        }
3930
3931        for (i in attendeeVisibleFields) {
3932            switch (attendeeVisibleFields[i]['fieldName']) {
3933                case 'fname':
3934                    fieldKeys[0] = 'fname';
3935                    break;
3936                case 'lname':
3937                    fieldKeys[1] = 'lname';
3938                    break;
3939            }
3940        }
3941
3942        for (i = 0; i < 10; i++) {
3943            if (fieldKeys[i] == undefined && customKeys.length != 0) {
3944                fieldKeys[i] = customKeys.shift();
3945            }
3946        }
3947
3948        return fieldKeys;
3949    };
3950
3951    self.populateFormFieldsFromItemData = function() {
3952        if (!self.itemData) {
3953            return;
3954        }
3955
3956        setMobilePreloadFieldValues(self.itemData);
3957
3958        Object.keys(self.itemData).forEach(function(fieldName) {
3959            if (/^(attendeeId|isCheckedIn|noShow|groupCount|groupMembers|guest|isGroupCheckIn|registrationstatus)$/.test(fieldName) || /_(value|values)$/.test(fieldName)) {
3960                return;
3961            }
3962            var fieldValue = self.itemData[fieldName];
3963            var choiceKey = self.itemData[fieldName + '_value'];
3964
3965            if (fieldValue === undefined || fieldValue === null || fieldValue === '') {
3966                return;
3967            }
3968
3969            var $select = $('.register-attendee-questions select[name="input[' + fieldName + ']"]');
3970            if ($select.length) {
3971                if (choiceKey) {
3972                    $select.val(String(choiceKey));
3973                } else if (!$select.val(fieldValue)) {
3974                    $select.find('option').each(function() {
3975                        var $opt = $(this), optVal = $opt.val();
3976                        if (!optVal) {
3977                            return;
3978                        }
3979                        if ($.trim($opt.text()) === fieldValue || $opt.attr('data-eng') === fieldValue) {
3980                            $select.val(optVal);
3981                            return false;
3982                        }
3983                    });
3984                }
3985                return;
3986            }
3987
3988            var $radios = $('.register-attendee-questions input[type="radio"][name="input[' + fieldName + ']"]');
3989            if ($radios.length) {
3990                if (choiceKey) {
3991                    $radios.filter('[value="' + choiceKey + '"]').prop('checked', true);
3992                } else {
3993                    $radios.filter('[value="' + fieldValue + '"]').prop('checked', true);
3994                    if (!$radios.filter(':checked').length) {
3995                        $radios.each(function() {
3996                            if ($(this).attr('alt') === fieldValue) {
3997                                $(this).prop('checked', true);
3998                            }
3999                        });
4000                    }
4001                }
4002                return;
4003            }
4004
4005            var inputSelector = 'input[name="input[' + fieldName + ']"], textarea[name="input[' + fieldName + ']"]';
4006            var $field = $(inputSelector);
4007
4008            if ($field.length > 0) {
4009                if ($field.is('input[type="checkbox"]')) {
4010                    if (fieldValue === 'Checked') {
4011                        $field.prop('checked', true);
4012                    } else {
4013                        $field.each(function() {
4014                            if ($(this).val() == fieldValue) {
4015                                $(this).prop('checked', true);
4016                            }
4017                        });
4018                    }
4019                } else {
4020                    $field.val(fieldValue);
4021                }
4022            }
4023
4024            var numericValuesField = fieldName + '_values';
4025            if (numericValuesField in self.itemData && self.itemData[numericValuesField]) {
4026                $.each(self.itemData[numericValuesField], function(i, numericValue) {
4027                    if (numericValue) {
4028                        $('input[type="checkbox"][name^="input[' + fieldName + ']"][value="' + numericValue + '"]').prop('checked', true);
4029                    }
4030                });
4031            } else if (typeof fieldValue === 'string' && fieldValue.indexOf(',') > -1) {
4032                var values = fieldValue.split(',');
4033                values.forEach(function(val) {
4034                    var trimmedVal = val.trim();
4035                    $('.register-attendee-questions input[type="checkbox"]').each(function() {
4036                        var $checkbox = $(this);
4037                        var checkboxName = $checkbox.attr('name');
4038                        var checkboxAlt = $checkbox.attr('alt');
4039                        if (checkboxName && checkboxName.indexOf('input[' + fieldName + ']') === 0 && checkboxAlt == trimmedVal) {
4040                            $checkbox.prop('checked', true);
4041                        }
4042                    });
4043                });
4044            }
4045        });
4046        $('.register-attendee-questions select').each(function () {
4047            var val = $(this).val();
4048            if (val) {
4049                var parentId = ($(this).closest('table[id^="q"]').attr('id') || '').replace('q', '');
4050                if (parentId) { mobileEvaluateConditional(parentId, val, 'dropdown'); }
4051            }
4052        });
4053        $('.register-attendee-questions input[type="radio"]:checked').each(function () {
4054            var parentId = ($(this).closest('table[id^="q"]').attr('id') || '').replace('q', '');
4055            if (parentId) { mobileEvaluateConditional(parentId, $(this).val(), 'radio'); }
4056        });
4057        var seen = {};
4058        $('.register-attendee-questions input[type="checkbox"]').each(function () {
4059            var $table = $(this).closest('table[id^="q"]');
4060            var parentId = ($table.attr('id') || '').replace('q', '');
4061            if (parentId && !seen[parentId]) {
4062                seen[parentId] = true;
4063                var vals = [];
4064                $table.find('input[type="checkbox"]:checked').each(function () {
4065                    vals.push(String($(this).val()));
4066                });
4067                if (vals.length) { mobileEvaluateConditional(parentId, vals, 'checkbox'); }
4068            }
4069        });
4070    };
4071
4072    self.register = function() {
4073        var values = {},
4074            hasEmptyFields = false;
4075
4076        // Collect all input values from the rendered questions HTML
4077        $.each($('.register-attendee-questions input, .register-attendee-questions textarea, .register-attendee-questions select'), function(k, v) {
4078            var name = $(v).attr('name'),
4079                value = $(v).val(),
4080                fieldType = $(v).attr('type') || $(v).prop('tagName').toLowerCase();
4081
4082            // Skip hidden inputs and inputs without names
4083            if ($(v).attr('type') === 'hidden' || !name) {
4084                return;
4085            }
4086
4087            // ET-83452: Skip any input that lives inside a hidden conditional child table.
4088            // These questions are not visible to the attendee and must not be submitted,
4089            // otherwise stale or invalid values may overwrite existing attendee data.
4090            var $conditionalTable = $(v).closest('table[data-conditional-parent]');
4091            if ($conditionalTable.length > 0 && $conditionalTable.is(':hidden')) {
4092                return;
4093            }
4094
4095            // Handle radio buttons - only capture the checked radio's value.
4096            // $(v).val() returns the value attribute regardless of :checked state,
4097            // so without this guard the last radio in the DOM always overwrites the result.
4098            if ($(v).attr('type') === 'radio') {
4099                if ($(v).is(':checked')) {
4100                    values[name] = value;
4101                }
4102                // Validate required radio groups: check if at least one in the group is selected.
4103                // PHP places aria-required on the wrapper <div role="radiogroup"> / <td>, not on
4104                // individual <input type="radio"> elements, so we look up the container.
4105                if (!values[name]) {
4106                    var $radioGroup = $(v).closest('div[role="radiogroup"], td[aria-required]');
4107                    var isRadioRequired = $radioGroup.attr('aria-required') === 'true';
4108                    if (isRadioRequired) {
4109                        var anyChecked = $('.register-attendee-questions input[type="radio"][name="' + name + '"]:checked').length > 0;
4110                        if (!anyChecked) {
4111                            hasEmptyFields = true;
4112                        }
4113                    }
4114                }
4115                return;
4116            }
4117
4118            // Handle checkboxes specially (multiple checkboxes with same name)
4119            if ($(v).attr('type') === 'checkbox') {
4120                // Parse the name format: input[fieldname][key]
4121                var match = name.match(/input\[([^\]]+)\](?:\[([^\]]+)\])?/);
4122                if (match) {
4123                    var fieldName = match[1];
4124                    var fullFieldName = 'input[' + fieldName + ']'; // Keep the input[] prefix
4125                    if (!values[fullFieldName]) {
4126                        values[fullFieldName] = [];
4127                    }
4128                    if ($(v).is(':checked')) {
4129                        values[fullFieldName].push($(v).val());
4130                    }
4131                }
4132                // Validate required multi-checkbox groups: PHP places aria-required on the
4133                // group <td role="group">, so walk up to that container and verify at least
4134                // one checkbox in the group is checked.
4135                var $checkboxGroup = $(v).closest('td[role="group"][aria-required]');
4136                if ($checkboxGroup.length > 0 && $checkboxGroup.attr('aria-required') === 'true') {
4137                    if ($checkboxGroup.find('input[type="checkbox"]:checked').length === 0) {
4138                        hasEmptyFields = true;
4139                    }
4140                }
4141                return;
4142            } else {
4143                values[name] = value;
4144            }
4145            
4146            // Validate required text inputs and textareas
4147            if ((fieldType === 'text' || fieldType === 'textarea') && (!value || value.trim().length === 0)) {
4148                if ($(v).attr('aria-required') === 'true' || $(v).prop('required')) {
4149                    hasEmptyFields = true;
4150                }
4151            }
4152
4153            // Validate required <select> elements (dropdown questions, inputtype=16) when native
4154            // input types are enabled. Selects always have a value in jQuery (.val()), so we check
4155            // whether the empty placeholder option (value="") is still selected.
4156            if (fieldType === 'select' && (!value || value === '')) {
4157                // Only flag as empty if the field is marked required (aria-required or required attr)
4158                if ($(v).attr('aria-required') === 'true' || $(v).prop('required')) {
4159                    hasEmptyFields = true;
4160                }
4161            }
4162        });
4163
4164        if (hasEmptyFields) {
4165            self.pageModel.showNotificationMessage('Please fill all fields');
4166        } else {
4167            self.pageModel.startApiCall(
4168                '/mobileadmin/attendeeAPI/registerAttendee',
4169                {
4170                    eventId : self.eventData.eventId,
4171                    preLoadId : self.preLoadId,
4172                    values : values,
4173                    notes: self.notes(),
4174                    locationId: (checkinLocation.length > 0 ? checkinLocation.val() : 0)
4175                },
4176                function(response) {
4177                    var name = [];
4178                    if (values['input[fname]'] != undefined) {
4179                        name.push(values['input[fname]']);
4180                    }
4181                    if (values['input[lname]'] != undefined) {
4182                        name.push(values['input[lname]']);
4183                    }
4184                    if (name.length != 0) {
4185                        name = name.join(' ');
4186                    } else {
4187                        name = 'attendee';
4188                    }
4189
4190                    self.pageModel.showNotificationMessage('Registration has been created for '+ name);
4191                    self.pageModel.onClearFiltersClick();
4192                    self.cancel();
4193                }
4194            );
4195        }
4196    };
4197
4198    self.cancel = function() {
4199        var attendeesViewModel = new AttendeesViewModel();
4200        attendeesViewModel.eventData = self.eventData;
4201        self.pageModel.render(attendeesViewModel, $('#attendees-page-template'));
4202        attendeesViewModel.loadAttendeesList();
4203    };
4204};
4205
4206function toggleFilterDropdown() {
4207    let dropdown = document.getElementById("filter-menu");
4208    dropdown.style.display = (dropdown.style.display === "block") ? "none" : "block";
4209}
4210
4211// Close dropdown when clicking outside
4212document.addEventListener("click", function(event) {
4213    let dropdown = document.getElementById("filter-menu");
4214    let button = document.getElementById("filter-options");
4215
4216    if (dropdown && button && !dropdown.contains(event.target) && !button.contains(event.target)) {
4217        dropdown.style.display = "none";
4218    }
4219});
4220
4221function toggleCategory() {
4222    let categorySection = document.getElementById("category-section");
4223    let toggleIcon = document.getElementById("category-toggle");
4224    if (categorySection.style.display === "none" || categorySection.style.display === "") {
4225        categorySection.style.display = "block";
4226        toggleIcon.textContent = "-";
4227    } else {
4228        categorySection.style.display = "none";
4229        toggleIcon.textContent = "+";
4230    }
4231}
4232
4233
4234function setupCategoryCheckboxLogic() {
4235    const checkboxes = document.querySelectorAll('.category-checkbox');
4236
4237    checkboxes.forEach(function (checkbox) {
4238        checkbox.addEventListener('change', function () {
4239
4240            const categoryId = this.dataset.categoryid;
4241            const parentId = this.dataset.parentid;
4242
4243            if (this.checked) {
4244                // If it's a parent, check and disable all children
4245                checkAndDisableChildren(categoryId, true);
4246
4247                // If it's a child, check if all siblings are checked, enable parent
4248                if (parentId && parentId !== "0") {
4249                    const siblingCheckboxes = document.querySelectorAll('.category-checkbox[data-parentid="' + parentId + '"]');
4250                    const allSiblingsChecked = Array.from(siblingCheckboxes).every(cb => cb.checked);
4251                    const parentCheckbox = document.querySelector('.category-checkbox[data-categoryid="' + parentId + '"]');
4252
4253                    if (allSiblingsChecked && parentCheckbox) {
4254                        parentCheckbox.disabled = false;
4255                        parentCheckbox.checked = true;
4256                    } else if (parentCheckbox) {
4257                        parentCheckbox.disabled = true;
4258                        parentCheckbox.checked = false;
4259                    }
4260                }
4261
4262            } else {
4263                // If it's a parent, uncheck and enable all children
4264                checkAndDisableChildren(categoryId, false);
4265
4266                // If it's a child, and no siblings are checked, enable the parent
4267                if (parentId && parentId !== "0") {
4268                    const siblingCheckboxes = document.querySelectorAll('.category-checkbox[data-parentid="' + parentId + '"]');
4269                    const anyChecked = Array.from(siblingCheckboxes).some(cb => cb.checked);
4270                    const allChecked = Array.from(siblingCheckboxes).every(cb => cb.checked);
4271                    const parentCheckbox = document.querySelector('.category-checkbox[data-categoryid="' + parentId + '"]');
4272
4273                    if (!anyChecked && parentCheckbox) {
4274                        parentCheckbox.disabled = false;
4275                        parentCheckbox.checked = false;
4276                    }else{
4277                        if(parentCheckbox){
4278                            parentCheckbox.disabled = true;
4279                            parentCheckbox.checked = false;
4280                        }
4281                    }
4282
4283                }
4284            }
4285updateSelectedCategoryCount();
4286    });
4287});
4288updateSelectedCategoryCount();
4289    function checkAndDisableChildren(parentId, state) {
4290        const children = document.querySelectorAll('.category-checkbox[data-parentid="' + parentId + '"]');
4291        children.forEach(function (child) {
4292            child.checked = state;
4293            child.disabled = state;
4294            });
4295    }
4296
4297}
4298
4299function updateSelectedCategoryCount() {
4300    const selectedCount = document.querySelectorAll('.category .category-checkbox:checked').length;
4301    const countSpan = document.getElementById('selected-count');
4302    if(!countSpan) return;
4303    if(selectedCount > 0){
4304    document.getElementById('selected-count').innerText = '('+selectedCount+')';
4305    countSpan.style.display = 'inline-block';
4306    }else{
4307    countSpan.style.display = 'none';
4308    }
4309
4310}
4311
4312    </script>
4312
4313
4314    <!-- include any page-specific scripts. ex: views/pages/menu_js.tpl  -->
4315    </body>
4316</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.