Publicador de Conteúdos e Mídias

Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> isEMED  [in template "20102#20129#438394" at line 4469, column 13]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #if !isEMED  [in template "20102#20129#438394" at line 4469, column 7]
----
1<#assign isEditMode=themeDisplay.getURLCurrent()?contains('p_l_mode=edit') /> 
2<!-- Essa verificação é necessária para que não encaminhe erros de freemarker ao KIBANA ao acessar a página de edição dos componentes --> 
3<#if isEditMode> 
4  <h3>Modo de edição identificado</h3> 
5  <#else> 
6 
7    <#assign resources=themeDisplay.getPortalURL() /> 
8    <#assign contextPath="/documents/d/global" /> 
9    <#assign _rnd=.now?long> 
10 
11      <style> 
12        #content .lfr-layout-structure-item-container.container-fluid.container-fluid-max-xl { 
13          max-width: 100%; 
14          padding: 0 !important; 
15        } 
16 
17        .ssp:not(.liferay-instance) .ssp-como-me-matricular__passo-passo-card { 
18          background: white; 
19          width: 100%; 
20          padding: 32px 52px; 
21          box-shadow: 2px 5px 12px #00000040; 
22          border-radius: 20px; 
23          display: flex; 
24          flex-wrap: nowrap; 
25          justify-content: space-between; 
26          align-items: center; 
27        } 
28 
29        .ssp:not(.liferay-instance) .ssp-como-me-matricular__passo-passo-card .item-passo-icone { 
30          max-width: 100%; 
31          height: 72px; 
32          margin-bottom: 10px; 
33        } 
34 
35        .ssp:not(.liferay-instance) .ssp-como-me-matricular__section { 
36          background: #472247; 
37          border-top: 18px solid #792F7A; 
38          text-align: center; 
39          padding-bottom: 60px; 
40        } 
41 
42        .ssp:not(.liferay-instance) .ssp-como-me-matricular__section .title-section-white::after { 
43 
44 
45          display: none; 
46 
47 
48        } 
49 
50        .ssp:not(.liferay-instance) .ssp-como-me-matricular__section .title-section-white { 
51          color: white; 
52          font-size: 44px !important; 
53          margin-bottom: 32px !important; 
54          text-align: unset; 
55        } 
56 
57        .ssp:not(.liferay-instance) .ssp-como-me-matricular__passo-passo-card .item-passo-title { 
58          font-size: 28px; 
59          color: #B767C2; 
60          font-weight: bold; 
61          line-height: 28px; 
62          margin: 0; 
63          margin-bottom: .5rem; 
64        } 
65 
66 
67        .ssp:not(.liferay-instance) .ssp-card-modal-forma-pagamento__icon-credit-card::after { 
68 
69          font-size: 18px; 
70 
71        } 
72 
73        .ssp:not(.liferay-instance) .ssp-card-modal-forma-pagamento__icon-boleto::after { 
74 
75          font-size: 18px; 
76 
77        } 
78 
79        .ssp:not(.liferay-instance) .ssp-card-modal-forma-pagamento__header { 
80          align-items: center; 
81          color: #454F63; 
82        } 
83 
84        .ssp:not(.liferay-instance) .ssp-card-modal-forma-pagamento__btn-close::after { 
85          font-family: "Font Awesome 6 Pro"; 
86          font-weight: normal; 
87          content: "\f00d"; 
88          font-style: normal; 
89          font-size: 30px; 
90          cursor: pointer; 
91        } 
92 
93        .ssp:not(.liferay-instance) .ssp-card-modal-forma-pagamento__body { 
94 
95          padding: 0 15px; 
96        } 
97 
98        .ssp-card-modal-forma-pagamento__tipos-content p { 
99 
100          color: #454F63 !important; 
101          font-size: 14px !important; 
102        } 
103 
104        .ssp-card-modal-forma-pagamento__tipos-content strong { 
105 
106          font-weight: bold !important; 
107        } 
108 
109        .txt-desconto-oito { 
110 
111          font-weight: 600 !important; 
112          border: 1px solid #f2f2f2; 
113          border-right: 0; 
114          border-left: 0; 
115          padding: 10px 0; 
116        } 
117 
118        .next-mobile { 
119          color: white; 
120          display: flex; 
121          align-items: center; 
122          text-decoration: none !important; 
123        } 
124 
125        .next-mobile:hover { 
126          color: white; 
127          font-weight: normal !important; 
128        } 
129 
130        .next-mobile::before { 
131          font-family: "Montserrat", sans-serif; 
132          content: "Próxima"; 
133          font-size: 14px; 
134          font-weight: 600; 
135          display: block; 
136          margin-right: 9px; 
137          color: white; 
138        } 
139 
140        .next-mobile.slick-arrow.slick-disabled { 
141          opacity: 0.4; 
142        } 
143 
144 
145        /* Prev Mobile button */ 
146 
147 
148        .prev-mobile { 
149          color: white; 
150          display: flex; 
151          align-items: center; 
152          text-decoration: none; 
153          text-decoration: none !important; 
154        } 
155 
156        .prev-mobile:hover { 
157          color: white; 
158          font-weight: normal !important; 
159        } 
160 
161        .prev-mobile::after { 
162          font-family: "Montserrat", sans-serif; 
163          content: "Anterior"; 
164          font-weight: 600; 
165          font-size: 14px; 
166          display: block; 
167          margin-left: 9px; 
168          color: white; 
169        } 
170 
171        .prev-mobile.slick-arrow.slick-disabled { 
172          opacity: 0.4; 
173        } 
174 
175 
176        .icon-ao-vivo { 
177          font-size: 15px !important; 
178          margin: 0 3px; 
179        } 
180 
181        .ssp-card-detalhe-curso__tag-ao-vivo { 
182          font-family: "Montserrat"; 
183          font-size: 19px; 
184          letter-spacing: 0px; 
185          color: #F77A3B; 
186        } 
187 
188        .selecione-unidade-title-custom { 
189 
190          width: 100% !important; 
191 
192        } 
193 
194        .recalcular { 
195          background: #F6921E !important; 
196          border: solid 1px #F6921E !important; 
197        } 
198 
199        .ssp-card-detalhe-curso__description { 
200 
201          font-family: "Montserrat"; 
202          max-width: 800px; 
203          font-size: 20px; 
204          font-weight: 500; 
205          font-stretch: normal; 
206          font-style: normal; 
207          line-height: 1.23; 
208          letter-spacing: normal; 
209          margin: 10px 0; 
210          text-align: left; 
211          color: #4f596f; 
212 
213        } 
214 
215        /* nova formatação para registro de interesse */ 
216        .ssp:not(.liferay-instance) .ssp-aviso-novas-turmas__content { 
217          display: flex; 
218          flex-wrap: nowrap; 
219          justify-content: center; 
220          align-items: center; 
221          padding: 10px 0; 
222        } 
223 
224        /* Novas tags para formato de curso */ 
225 
226        .ssp-card-detalhe-curso__tag-formato { 
227 
228          font-size: 18px; 
229          font-weight: 600; 
230 
231        } 
232 
233        .icon-formato { 
234          margin-right: 7px; 
235        } 
236 
237        .online-aovivo { 
238          position: relative; 
239 
240        } 
241 
242        .icon-small-wifi { 
243          font-size: 13px; 
244          position: absolute; 
245          left: -12px; 
246          top: -5px; 
247        } 
248 
249        .ssp-desconto-2022 .modal-extensao_txteconomiza { 
250          font-size: 14px !important; 
251          font-weight: 100 !important; 
252        } 
253 
254        .ssp-desconto-2022 .ssp-card-oferta-curso__desconto-content .ssp-card-oferta-curso__valor-desconto { 
255          font-weight: 100 !important; 
256        } 
257 
258        .ssp-desconto-2022 .modal-extensao-btn-conheca { 
259          border: 1px solid #474F61 !important; 
260          border-radius: 4px; 
261          color: #474F61 !important; 
262          font-size: 15px; 
263          height: 50px; 
264          margin-left: 0; 
265          display: flex; 
266          align-items: center; 
267          justify-content: center; 
268        } 
269 
270        .ssp-card-modal-forma-pagamento.ssp-desconto-2022 { 
271          color: #454F63; 
272        } 
273 
274        .ssp-card-oferta-curso__item-valor-investimento.ssp-desconto-2022 { 
275          font-size: 22px !important; 
276        } 
277 
278        .ssp-card-oferta-curso__item-valor-investimento.ssp-desconto-2022 span { 
279          font-size: 13px !important; 
280        } 
281 
282        .ssp-desconto-2022 span { 
283          padding: 0 !important; 
284        } 
285 
286        .ssp:not(.liferay-instance) .ssp-card-registro-interesse__select { 
287          appearance: none !important; 
288          -webkit-appearance: none !important; 
289          -moz-appearance: none !important; 
290 
291          background-size: 25px 25px !important; 
292          background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxOTIgNTEyIj48IS0tIEZvbnQgQXdlc29tZSBQcm8gNS4xNS40IGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlIChDb21tZXJjaWFsIExpY2Vuc2UpIC0tPjxwYXRoIGQ9Ik0xODcuOCAyNjQuNUw0MSA0MTIuNWMtNC43IDQuNy0xMi4zIDQuNy0xNyAwTDQuMiAzOTIuN2MtNC43LTQuNy00LjctMTIuMyAwLTE3TDEyMi43IDI1NiA0LjIgMTM2LjNjLTQuNy00LjctNC43LTEyLjMgMC0xN0wyNCA5OS41YzQuNy00LjcgMTIuMy00LjcgMTcgMGwxNDYuOCAxNDhjNC43IDQuNyA0LjcgMTIuMyAwIDE3eiIvPjwvc3ZnPg==); 
293          background-repeat: no-repeat !important; 
294          background-position-x: 99% !important; 
295          background-position-y: 50% !important; 
296        } 
297 
298        @media only screen and (max-width: 768px) { 
299 
300          .ssp-card-detalhe-curso__tag-ao-vivo { 
301            font-size: 14px; 
302            display: none; 
303          } 
304 
305          .ssp:not(.liferay-instance) .ssp-aviso-novas-turmas__content { 
306 
307            flex-wrap: wrap !important; 
308 
309          } 
310 
311          .ssp-card-modal-forma-pagamento__tipos-content p { 
312 
313            font-size: 12px !important; 
314          } 
315 
316 
317          .ssp:not(.liferay-instance) .ssp-section-selecione-unidade { 
318            padding: 30px 0 !important; 
319            padding-bottom: 30px !important; 
320            background-color: #2a2e43; 
321          } 
322 
323          .ssp:not(.liferay-instance) .ssp-aviso-novas-turmas__title { 
324            padding-bottom: 1.25rem !important; 
325          } 
326 
327          .selecione-unidade-title-custom { 
328            width: 100% !important; 
329 
330          } 
331 
332          .ssp-card-detalhe-curso__description { 
333            width: 100%; 
334            font-size: 15px; 
335 
336          } 
337 
338          .ssp-como-me-matricular__passo-passo-card { 
339            padding: 30px 24px !important; 
340 
341          } 
342 
343          .emed-select-group { 
344            box-shadow: none !important; 
345            border: none !important; 
346            border-bottom: 1px solid #6E6E6E !important; 
347            border-radius: 0 !important; 
348            padding: 0 !important; 
349            margin: 1rem 0 !important; 
350          } 
351 
352          .emed .ssp-card-registro-interesse__title-modal { 
353            font-size: 20px !important; 
354          } 
355 
356          .emed .ssp-card-registro-interesse__title-section-itens { 
357            font-size: 15px !important; 
358            margin-top: 0px !important; 
359            margin-bottom: 0px !important; 
360            color: #2a2e43; 
361          } 
362 
363          .ssp-card-registro-interesse.emed [type="checkbox"] { 
364            transform: scale(0.6); 
365            margin-left: 2px; 
366          } 
367 
368          .ssp-card-registro-interesse.emed label { 
369            margin-left: 0px; 
370            margin-right: 3px; 
371          } 
372        } 
373 
374        .ssp-card-oferta-curso__local-realizacao-content__title { 
375          font-family: "Open Sans", sans-serif; 
376          font-size: 10pt; 
377          font-weight: normal; 
378          color: #00488c; 
379          font-weight: bold; 
380          text-decoration: none !important; 
381          padding-left: 10px; 
382        } 
383 
384        @media screen and (min-width: 767px) { 
385 
386          .ssp-modal-local-realizacao { 
387            width: 480px !important; 
388          } 
389 
390          .ssp-card-modal-forma-pagamento__header { 
391            margin-bottom: 20px; 
392          } 
393 
394          .ssp-modal-local-realizacao__title { 
395            color: #01488C !important; 
396            text-align: center !important; 
397            margin-left: -23px !important; 
398          } 
399 
400          .ssp:not(.liferay-instance) .ssp-modal-local-realizacao__title { 
401            font-size: 14pt; 
402          } 
403 
404          .ssp:not(.liferay-instance) [data-info="data-para-matricula"] { 
405            font-size: 14px !important; 
406            text-align: left; 
407          } 
408 
409          .ssp-modal-emed-txt-desconto-oito { 
410            padding: 10px 0 0px !important; 
411          } 
412 
413          .ssp:not(.liferay-instance) .ssp-modal-emed-info-valor-matricula { 
414            color: #4F596F; 
415            font-size: 15px !important; 
416            text-align: center; 
417            font-weight: 500 !important; 
418          } 
419        } 
420 
421        @media screen and (max-width: 767px) { 
422          .ssp:not(.liferay-instance) .ssp-modal-local-realizacao { 
423            width: 347px; 
424            padding: 22px; 
425          } 
426 
427          .ssp-modal { 
428            padding-top: 72px !important; 
429          } 
430 
431          .ssp-card-modal-forma-pagamento { 
432            max-width: 335px !important; 
433          } 
434 
435          .ssp-card-modal-forma-pagamento__body { 
436            padding: 0px !important; 
437          } 
438 
439          .ssp-modal-emed-txt-desconto-oito { 
440            font-size: 12px !important; 
441          } 
442 
443          .ssp-card-modal-forma-pagamento__header { 
444            margin-bottom: 20px !important; 
445          } 
446 
447          .txt-desconto-oito i { 
448            font-size: 12px !important; 
449            padding-top: 3px; 
450          } 
451 
452          .txt-pague-vista { 
453            font-size: 12px !important; 
454          } 
455 
456          .txt-ganhe-mais { 
457            font-size: 12px !important; 
458          } 
459 
460          .ssp-modal-emed-info-valor-matricula { 
461            color: #2A2E43 !important; 
462            font-size: 12px !important; 
463            font-weight: 500 !important; 
464          } 
465 
466          .ssp:not(.liferay-instance) [data-info="data-para-matricula"] { 
467            font-size: 12px !important; 
468            line-height: 1.5; 
469            text-align: left; 
470          } 
471 
472          .ssp-desconto-2022 .txt-desconto-oito { 
473            font-size: 14px !important; 
474          } 
475        } 
476 
477        @media screen and (max-width: 767px) { 
478          .ssp:not(.liferay-instance) .ssp-modal-local-realizacao__title { 
479            font-size: 16pt; 
480          } 
481        } 
482 
483        .container-local-realizacao { 
484          padding: 6px; 
485          border: 0.5pt solid #cdd0d8; 
486          border-radius: 5px; 
487          width: 260px; 
488          margin: 10px auto; 
489          box-shadow: 1px 1px 1px #0000000F; 
490        } 
491 
492        .idioma-online { 
493          border: 0 !important; 
494          box-shadow: none !important; 
495        } 
496 
497        .btn-idiomas__aula-online .fa-wifi { 
498          margin-right: 7px 
499        } 
500 
501        .ssp-modal-local-realizacao__title { 
502          color: #01488C !important; 
503          text-align: center !important; 
504        } 
505 
506        h6.ssp-modal-local-realizacao__title::after { 
507          content: ""; 
508          display: block; 
509          width: 20%; 
510          padding-top: 10px; 
511          border-bottom: 1px solid #01488C; 
512          transition: .5s; 
513          margin: auto; 
514        } 
515 
516        .ssp:not(.liferay-instance) .ssp-card-oferta-curso__local-realizacao-content__icon-wifi::after { 
517          font-family: "Font Awesome 5 Free"; 
518          content: '\f1eb'; 
519          font-weight: 600; 
520          color: #00488c; 
521          font-size: 8px; 
522          font-style: normal; 
523          margin-left: 2px; 
524        } 
525 
526        .ssp:not(.liferay-instance) .ssp-card-oferta-curso__local-realizacao-content__icon-chalkboard-teacher::after { 
527          font-family: "Font Awesome 5 Free"; 
528          content: '\f51c'; 
529          font-weight: 600; 
530          color: #00488c; 
531          font-size: 13px; 
532          font-style: normal; 
533        } 
534 
535        .ssp-card-oferta-curso__local-realizacao-content__icon-wifi { 
536          display: flex; 
537          margin-top: 0px; 
538          margin-bottom: -10px; 
539        } 
540 
541        .ssp:not(.liferay-instance) .ssp-modal__local-realizacao-content__icon-wifi::after { 
542          font-family: "Font Awesome 5 Free"; 
543          content: '\f1eb'; 
544          font-weight: 600; 
545          color: #00488c; 
546          font-size: 9pt; 
547          font-style: normal; 
548          margin-right: 10px; 
549        } 
550 
551        .ssp:not(.liferay-instance) .ssp-modal__local-realizacao-content__icon-chalkboard-teacher::after { 
552          font-family: "Font Awesome 5 Free"; 
553          content: '\f51c'; 
554          font-weight: 600; 
555          color: #00488c; 
556          font-size: 16pt; 
557          font-style: normal; 
558          margin-left: -16px; 
559        } 
560 
561        .ssp-modal__local-realizacao-content__icon-wifi { 
562          display: flex; 
563          margin-right: 2px 
564        } 
565 
566        .ssp-modal-local-realizacao__texto { 
567          text-align: center !important; 
568        } 
569 
570        .texto-modal-emed { 
571          text-align: left; 
572        } 
573 
574        .nextPrevOpacity { 
575          opacity: 0.3; 
576        } 
577 
578 
579        .modal-extensao { 
580          display: block; 
581          position: fixed; 
582          z-index: 2000; 
583          padding-top: 100px; 
584          left: 0; 
585          top: 0; 
586          width: 100%; 
587          height: 100%; 
588          overflow: auto; 
589          background-color: black; 
590          background-color: rgba(0, 0, 0, 0.6); 
591          font-family: Montserrat; 
592        } 
593 
594        .modal-extensao_content { 
595          max-width: 700px; 
596          width: 100%; 
597          background: white; 
598          border-radius: 12px; 
599          padding: 30px 60px; 
600          position: relative; 
601          text-align: center; 
602          margin: auto; 
603          -webkit-animation-name: animatetop; 
604          -webkit-animation-duration: 0.4s; 
605          animation-name: animatetop; 
606          animation-duration: 0.4s; 
607        } 
608 
609        .modal-extensao-condicoes__title { 
610          color: #000 !important; 
611          text-transform: uppercase !important; 
612          font-size: 18px !important; 
613 
614        } 
615 
616        .modal-extensao-condicoes__subtitle { 
617          color: #000 !important; 
618          font-size: 18px !important; 
619          margin-bottom: 0px !important; 
620 
621        } 
622 
623        .modal-extensao__btn { 
624          background-color: #5ACC75 !important; 
625          font-size: 14px; 
626          float: right; 
627          color: #ffffff; 
628          min-width: 165px; 
629        } 
630 
631        .modal-extensao__btn:hover { 
632          background-color: #3fb25c !important; 
633          border-color: transparent; 
634          color: #ffffff; 
635        } 
636 
637        .modal-extensao_subtitle { 
638          font-size: 13.7px !important; 
639          color: #2A2E43 !important; 
640          font-family: Montserrat, semi-bold !important; 
641          font-weight: 600 !important; 
642        } 
643 
644        .modal-extensao_subtitle::after { 
645          content: " "; 
646          display: block; 
647          width: 126px; 
648          height: 2px; 
649          background: #707070; 
650          margin: 0 auto; 
651          margin-top: 5px; 
652        } 
653 
654        .modal-extensao_preco { 
655          color: #454F63; 
656          font-size: 25px; 
657          font-family: Montserrat; 
658          font-weight: bold; 
659        } 
660 
661        .modal-extensao_ctboleto { 
662          width: 50%; 
663          float: left; 
664          border-color: #D7D7DB; 
665          border-style: solid; 
666          border-width: 1px; 
667          border-left: none; 
668          font-size: 21px; 
669          color: #454F63 
670        } 
671 
672        .modal-extensao_ctcard { 
673          width: 50%; 
674          float: left; 
675          border-color: #D7D7DB; 
676          border-style: solid; 
677          border-width: 1px; 
678          border-right: none; 
679          border-left: none; 
680          font-size: 21px; 
681          color: #454F63; 
682        } 
683 
684        .modal-extensao_txtPag { 
685          color: #2A2E43; 
686          font-size: 9px; 
687          font-family: Montserrat; 
688          font-weight: 600; 
689          display: block; 
690        } 
691 
692        .modal-extensao_txteconomiza { 
693          display: block; 
694          font-size: 12px; 
695        } 
696 
697        .modal-extensao_txtverde { 
698          color: #5ACC75; 
699        } 
700 
701        .modal-extensao_txtParcela { 
702          color: #2A2E43; 
703          font-size: 12px; 
704          font-family: Montserrat; 
705          font-weight: normal; 
706          display: block; 
707        } 
708 
709        .modal-extensao_txtporcent { 
710          font-size: 9px; 
711          color: #5ACC75; 
712          font-weight: 600; 
713        } 
714 
715        .modal-extensao-btn-conheca { 
716          color: #2967F4 !important; 
717          background-color: transparent; 
718          border-color: #2967F4 !important; 
719          box-shadow: none !important; 
720          font-size: 14px !important; 
721          margin-left: 10px; 
722          transition: 0.3s; 
723          float: left; 
724        } 
725 
726        .modal-extensao-btn-conferir { 
727          color: #2967F4 !important; 
728          background-color: transparent; 
729          border-color: #2967F4 !important; 
730          box-shadow: none !important; 
731          font-size: 14px !important; 
732          margin-left: 10px; 
733          transition: 0.3s; 
734          min-width: 330px; 
735          min-height: 50px; 
736        } 
737 
738        .modal-extensao-btn-conferir:hover { 
739          color: #ffffff !important; 
740        } 
741 
742        .modal-extensao-btn-conheca:hover, 
743        .modal-extensao-btn-conheca:focus { 
744          color: #ffffff !important; 
745        } 
746 
747        .modal-extensao-btn-aluno-sim-nao { 
748          color: #000000; 
749          background-color: transparent; 
750          border-color: #000000 !important; 
751          box-shadow: none !important; 
752          font-size: 14px !important; 
753          margin-left: 10px; 
754          transition: 0.3s; 
755          min-width: 95px; 
756        } 
757 
758        .modal-extensao-btn-aluno-sim-ativo { 
759          color: #ffffff !important; 
760          background-color: #3969EB !important; 
761          border-color: #3969EB !important; 
762        } 
763 
764        .modal-extensao-btn-aluno-sim-nao:hover { 
765          background-color: transparent; 
766          border-color: #3969EB !important; 
767          color: #3969EB !important; 
768        } 
769 
770        .modal-extensao-voltar-icon, 
771        .modal-extensao-fechar { 
772          font-size: 13px; 
773          position: absolute; 
774          top: 30px; 
775          right: 20px; 
776          cursor: pointer; 
777          color: #000; 
778        } 
779 
780        .modal-extensao-voltar-txticon { 
781          color: #000; 
782          font-size: 9px; 
783          font-family: Montserrat; 
784          font-weight: 600; 
785          padding-left: 5px; 
786        } 
787 
788        .modal-extensao-ico-check { 
789          color: #5ACC75; 
790          font-size: 65px; 
791        } 
792 
793        .modal-extensao-aluno_txtcontent { 
794          font-size: 18px !important; 
795          color: #000; 
796        } 
797 
798        .modal-extensao-aluno__btn { 
799          background-color: #5ACC75 !important; 
800          font-size: 14px; 
801          color: #ffffff; 
802          min-width: 330px; 
803          text-transform: uppercase; 
804          min-height: 50px; 
805        } 
806 
807        .modal-extensao-aluno__btn:hover { 
808          color: #fff; 
809          background-color: #3fb25c !important; 
810          border-color: transparent; 
811          color: #ffffff; 
812        } 
813 
814        .modal-extensao-ico-percent { 
815          background-color: blue; 
816          color: #fff; 
817          font-size: 48px; 
818          border-radius: 50%; 
819          padding: 10px 18px; 
820        } 
821 
822        .btn-preco-ex-aluno, 
823        .btn-preco-padrao { 
824 
825          background: none; 
826          border: none; 
827          width: 100%; 
828          display: flex; 
829          align-items: center; 
830          justify-content: space-between; 
831          text-align: left; 
832          font-size: 14px; 
833        } 
834 
835        .custom-icon-right { 
836          transform: rotate(0); 
837          transition: all 0.5s; 
838        } 
839 
840        .custom-icon-right-active { 
841          transform: rotate(90deg); 
842        } 
843 
844        .ssp-divisor { 
845          width: 100%; 
846          color: #D7D7DB; 
847          margin: 15px 0; 
848        } 
849 
850 
851        @media only screen and (max-width: 768px) { 
852 
853          .modal-extensao_content { 
854            width: 336px; 
855            padding: 60px 20px 20px 20px; 
856          } 
857 
858          .modal-extensao__btn { 
859            width: 100%; 
860          } 
861 
862          .modal-extensao-modal-extensao__btn { 
863            float: initial; 
864            width: 234px; 
865          } 
866 
867          .modal-extensao-btn-conheca { 
868            float: initial; 
869            width: 100%; 
870            margin-left: 0px; 
871          } 
872 
873          .modal-extensao-aluno__btn { 
874            min-width: 234px; 
875          } 
876 
877          .modal-extensao-btn-conferir { 
878            min-width: 234px; 
879            margin-left: 0px; 
880          } 
881        } 
882 
883 
884        /* Emed */ 
885        .ssp-btn-emed__voltar-curso { 
886          border: 1px solid #474F61; 
887          color: #474F61; 
888          max-width: 372px; 
889          margin-left: 60px; 
890          height: 50px; 
891          padding: 12px !important; 
892        } 
893 
894        @media (max-width: 768px) { 
895          .ssp-btn-emed__voltar-curso { 
896            font-size: 14px; 
897            margin-left: 0px !important; 
898          } 
899        } 
900 
901        @media only screen and (max-width: 767px) { 
902          .ssp:not(.liferay-instance) .ssp-emed-visita-text { 
903            margin: 0; 
904            transform: none; 
905            margin-left: 10px; 
906          } 
907        } 
908 
909        .ssp:not(.liferay-instance) .icon-map-adress::after { 
910          padding: 0 8px 0 0; 
911        } 
912 
913        .ssp:not(.liferay-instance) .ssp-card-oferta-curso__mensagem-legal { 
914          margin: 5px 0; 
915        } 
916 
917        .ssp:not(.liferay-instance) .ssp-ofertas-emed__card-info-investimento .btn-card-investimento { 
918          width: 100%; 
919          color: white !important; 
920          font-size: 15px; 
921          font-weight: 600; 
922          margin: 10px 0; 
923        } 
924 
925        .ssp-modal-emed-info-txt-matricula { 
926          display: inline-block; 
927        } 
928 
929        .ssp:not(.liferay-instance) .btn-card-investimento.--inscreva-se.disabled, 
930        .ssp:not(.liferay-instance) a.btn.btn-success.disabled.manutencao { 
931          background: #BFC3C9 !important; 
932          color: #454F63 !important; 
933          opacity: 1 !important; 
934          font-size: 14px; 
935          border: none; 
936        } 
937 
938        .ssp:not(.liferay-instance) .ssp-ofertas-emed__card-info-investimento .btn-card-investimento.--bolsas.disabled { 
939          background: #E5E8ED; 
940          color: #454F63 !important; 
941          opacity: 1; 
942          font-size: 14px; 
943        } 
944 
945        .ssp:not(.liferay-instance) .ssp-ofertas-emed__card-info-investimento .btn-card-investimento.--inscreva-se { 
946          background-color: #5acc75; 
947          text-transform: none; 
948        } 
949 
950        .ssp:not(.liferay-instance) .ssp-ofertas-emed__card-info-investimento .link-descontos-parcelamentos { 
951          font-weight: 600; 
952        } 
953 
954        .ssp:not(.liferay-instance) .ssp-card-oferta-curso__sem-vaga-title { 
955          margin: 0; 
956        } 
957 
958        .ssp:not(.liferay-instance) .ssp-ofertas-emed__card-container { 
959 
960          padding: 0; 
961 
962        } 
963 
964        .ssp:not(.liferay-instance) .ssp-ofertas-emed__filtro-content { 
965          padding: 40px 0; 
966        } 
967 
968        .ssp:not(.liferay-instance) .ssp-ofertas-emed__card-info-investimento .txt-boleto-cartao { 
969          text-align: center; 
970        } 
971 
972        .ssp:not(.liferay-instance) .ssp-ofertas-emed__card-info-investimento { 
973          position: relative; 
974        } 
975 
976        .ssp:not(.liferay-instance) .ssp-ofertas-emed__card-info-investimento-loading-host { 
977          position: absolute; 
978          inset: 0; 
979          z-index: 3; 
980          background: rgba(255, 255, 255, 0.84); 
981        } 
982 
983        .ssp:not(.liferay-instance) .ssp-ofertas-emed__section.ssp-ofertas-emed--loading { 
984          position: relative; 
985        } 
986 
987        .ssp:not(.liferay-instance) .ssp-ofertas-emed__loading-host { 
988          position: absolute; 
989          inset: 0; 
990          z-index: 3; 
991          background: rgba(255, 255, 255, 0.84); 
992        } 
993 
994        .ssp-card-modal-emed-lineou { 
995          height: 1px; 
996          background-color: #FC7834; 
997          text-align: center; 
998          width: 50%; 
999          margin: 0px auto; 
1000          margin-bottom: 15px; 
1001        } 
1002 
1003        .ssp-card-modal-emed-lineou span { 
1004          background-color: white; 
1005          position: relative; 
1006          top: -0.8em; 
1007          padding: 0 19px; 
1008          font-weight: bold; 
1009          color: #2A2E43; 
1010          font-size: 15px; 
1011        } 
1012 
1013        .ssp-modal-emed-txtValor { 
1014          font-size: 16px; 
1015          color: #04488C; 
1016          font-weight: bold; 
1017        } 
1018 
1019        .ssp-card-modal-emed-centralizaPagtos { 
1020          max-width: 285px; 
1021          margin: 0 auto; 
1022          margin-top: 18px !important; 
1023        } 
1024 
1025        .ssp-card-modal-forma-pagamento__tipos-content p { 
1026          font-weight: 500 !important; 
1027        } 
1028 
1029        .textoCartoesAceitos { 
1030          font-weight: 500 !important; 
1031        } 
1032 
1033        .ssp-card-modal-emed-valorObs { 
1034          color: #004A8C; 
1035          display: flex; 
1036          justify-content: center; 
1037          font-weight: 500; 
1038          padding-top: 11px; 
1039          font-size: 14px; 
1040        } 
1041 
1042        .ssp-card-modal-emed-boxDesconto { 
1043          border: 0 !important; 
1044          font-weight: 500 !important; 
1045          background-color: #F7F7F7; 
1046          border-radius: 13px; 
1047          padding: 20px 40px !important; 
1048          margin-bottom: 0 !important; 
1049        } 
1050 
1051        .ssp-modal-emed-boxoito { 
1052          padding: 5px 45px !important; 
1053          text-align: center; 
1054          border-bottom: 0px !important; 
1055        } 
1056 
1057        .ssp-modal-emed-btfechar { 
1058          position: absolute; 
1059          right: 0; 
1060          display: flex; 
1061          flex-direction: column; 
1062          text-align: center; 
1063          line-height: 0.9; 
1064          top: -48px; 
1065          color: #E4E8F0; 
1066          font-weight: 500; 
1067          font-size: 14px; 
1068        } 
1069 
1070        .ssp-card-modal-forma-pagamento__btn-close:hover { 
1071          opacity: .6; 
1072        } 
1073 
1074        .ssp-card-modal-emed-ano { 
1075          font-weight: 500; 
1076          font-size: 22px; 
1077          color: #454F63; 
1078        } 
1079 
1080        .ssp:not(.liferay-instance) [data-info="msg-20-desconto"] { 
1081          font-weight: 500 !important; 
1082 
1083        } 
1084 
1085        .ssp-card-modal-emed-valorObs i { 
1086          padding-top: 2px; 
1087          padding-right: 3px; 
1088        } 
1089 
1090        button[id^="btnComprarEmedModal_"] { 
1091          height: 50px; 
1092          font-weight: 600; 
1093          max-width: 372px; 
1094          width: 100%; 
1095          margin: 0 auto; 
1096          /* margin-left: 60px; */ 
1097          display: block; 
1098          height: 50px; 
1099          padding: 12px !important; 
1100 
1101        } 
1102 
1103        .obsspan { 
1104          justify-content: left; 
1105          padding-bottom: 10px; 
1106        } 
1107 
1108        .emed_transferencia_texto { 
1109          font-size: 20px !important; 
1110          ; 
1111        } 
1112 
1113 
1114        @media only screen and (max-width: 767px) { 
1115 
1116          .ssp:not(.liferay-instance) .ssp-card-oferta-curso__mensagem-legal { 
1117            width: 100%; 
1118          } 
1119 
1120          .ssp-card-modal-emed-valorObs { 
1121            font-size: 12px; 
1122          } 
1123 
1124          .obsspan { 
1125            justify-content: left; 
1126            margin-left: -14px !important; 
1127          } 
1128 
1129          .ssp-modal-emed-boxoito { 
1130            padding: 5px 0px !important; 
1131          } 
1132 
1133          .ssp-modal-emed-info-txt-matricula { 
1134            display: inherit; 
1135          } 
1136 
1137          .ssp-card-modal-emed-boxDesconto { 
1138            padding: 20px 20px !important; 
1139            font-size: 12px !important; 
1140          } 
1141 
1142          .ssp:not(.liferay-instance) [data-info="msg-20-desconto"] { 
1143            font-size: 12px !important; 
1144            font-weight: 500 !important; 
1145          } 
1146 
1147          .ssp-modal-emed-btfechar { 
1148            font-size: 12px; 
1149 
1150          } 
1151 
1152          button[id^="btnComprarEmedModal_"] { 
1153            height: 50px; 
1154            padding: 10px; 
1155            border-radius: 4px; 
1156            margin-left: 0px !important 
1157          } 
1158 
1159          button[id^="btnComprarEmedModal_"] span { 
1160            font-size: 15px; 
1161            font-weight: 600; 
1162          } 
1163 
1164          .ssp-btn-emed__voltar-curso_0 { 
1165            font-weight: 600 !important; 
1166            height: 50px; 
1167            border-radius: 4px !important; 
1168            padding: 14px !important; 
1169          } 
1170 
1171          .emed_transferencia_texto { 
1172            font-size: 16px !important; 
1173          } 
1174 
1175        } 
1176 
1177        @media screen and (min-width: 1200px) { 
1178          .ssp-col-lg-without { 
1179            flex: unset; 
1180            width: unset; 
1181          } 
1182        } 
1183 
1184        @media screen and (max-width: 1199px) { 
1185          .ssp-desconto-2022 .modal-extensao_txteconomiza { 
1186            font-size: 12px !important; 
1187          } 
1188 
1189          .ssp-filters-px { 
1190            padding: 0 !important; 
1191          } 
1192 
1193          .ssp-switch-label { 
1194            margin: auto 0 !important; 
1195          } 
1196 
1197          .ssp-switch-label-message { 
1198            margin-top: 10px; 
1199            margin-bottom: 10px; 
1200            padding-right: 0 !important; 
1201            padding-left: 0 !important; 
1202          } 
1203 
1204          .ssp-container-selecione-unidade [name="unidades-ofertas"] { 
1205            max-width: 316px !important; 
1206          } 
1207 
1208          .ssp-detalhe-curso-titulo-filter { 
1209            font-size: 16px !important; 
1210          } 
1211        } 
1212 
1213 
1214        .ssp-filters-px { 
1215          padding: 0 80px; 
1216        } 
1217 
1218        /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ 
1219        /* !!!!!!! CSS Destinado ao switch(toggle) !!!!!!! */ 
1220        /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ 
1221        .ssp-switch { 
1222          position: relative; 
1223          display: inline-block; 
1224          width: 63px; 
1225          height: 32px; 
1226        } 
1227 
1228        .ssp-switch input { 
1229          opacity: 0; 
1230          width: 0; 
1231          height: 0; 
1232        } 
1233 
1234        .ssp-switch-label { 
1235          margin: auto 15px; 
1236          font: normal normal 600 16px/19px Montserrat; 
1237          letter-spacing: 0px; 
1238          color: #FFFFFF; 
1239          white-space: nowrap; 
1240        } 
1241 
1242        .ssp-switch-label-section { 
1243          font: normal normal 600 18px/22px Montserrat; 
1244          margin-bottom: 11px; 
1245        } 
1246 
1247        .ssp-switch-label-message { 
1248          font: normal normal medium 16px/19px Montserrat !important; 
1249          letter-spacing: 0px; 
1250          color: #FFFFFF; 
1251          margin-top: 16px; 
1252          padding-left: 25px; 
1253          padding-right: 25px; 
1254        } 
1255 
1256        .ssp-switch-divider { 
1257          border-bottom: 1px solid #4a4d5f; 
1258          width: 100%; 
1259        } 
1260 
1261        .ssp:not(.liferay-instance) .ssp-detalhe-curso-titulo-filter.ssp-detalhe-curso-titulo-filter { 
1262          font-size: 21px; 
1263        } 
1264 
1265        .ssp-switch-slider { 
1266          position: absolute; 
1267          cursor: pointer; 
1268          top: 0; 
1269          left: 0; 
1270          right: 0; 
1271          bottom: 0; 
1272          background-color: #00000000; 
1273          border: 1px solid #FFFFFF; 
1274          -webkit-transition: .4s; 
1275          transition: .4s; 
1276        } 
1277 
1278        .ssp-switch-slider:before { 
1279          position: absolute; 
1280          content: ""; 
1281          height: 21px; 
1282          width: 21px; 
1283          left: 4px; 
1284          bottom: 4px; 
1285          background-color: white; 
1286          -webkit-transition: .4s; 
1287          transition: .4s; 
1288        } 
1289 
1290        input:checked+.ssp-switch-slider { 
1291          background-color: #5ACC75; 
1292          border: 1px solid #5ACC75; 
1293        } 
1294 
1295        input:checked+.ssp-switch-slider-secondary { 
1296          background-color: #2967F4; 
1297          border: 1px solid #2967F4; 
1298        } 
1299 
1300        input:focus+.ssp-switch-slider { 
1301          box-shadow: 0 0 1px #5ACC75; 
1302        } 
1303 
1304        input:focus+.ssp-switch-slider-secondary { 
1305          box-shadow: 0 0 1px #2967F4; 
1306        } 
1307 
1308        input:checked+.ssp-switch-slider:before { 
1309          -webkit-transform: translateX(33px); 
1310          -ms-transform: translateX(33px); 
1311          transform: translateX(33px); 
1312        } 
1313 
1314        /* Rounded sliders */ 
1315        .ssp-switch-slider.round { 
1316          border-radius: 34px; 
1317        } 
1318 
1319        .ssp-switch-slider.round:before { 
1320          border-radius: 50%; 
1321        } 
1322 
1323        /*Utilizado no modal de registro de interesse #9309*/ 
1324        option[value=""][disabled] { 
1325          display: none; 
1326        } 
1327 
1328        /* Css para botao de idiomas online */ 
1329 
1330        .btn-idiomas__aula-online { 
1331          background: #5382FF; 
1332          color: white !important; 
1333          text-decoration: none !important; 
1334          padding: 11px 14px; 
1335          border-radius: 4px; 
1336          font-size: 13px; 
1337          font-weight: 600; 
1338          transition: .3s; 
1339        } 
1340 
1341        .btn-idiomas__aula-online:hover { 
1342          background: #5275D1; 
1343          font-weight: 600 !important; 
1344        } 
1345 
1346        .title-idioma-online__modal, 
1347        .icon-wifi-title__modal { 
1348          color: #5382FF !important; 
1349          font-size: 25px !important; 
1350          margin: 0 !important; 
1351          margin-right: 5px !important; 
1352        } 
1353 
1354        .btn-modal-entendi__idioma-online { 
1355          font-size: 16px !important; 
1356          font-weight: 600 !important; 
1357          color: #5382FF !important; 
1358          border: #5382FF 1px solid !important; 
1359          padding: 15px 142px; 
1360          width: auto !important; 
1361        } 
1362 
1363        .btn-modal-entendi__idioma-online:hover { 
1364          font-size: 16px !important; 
1365          font-weight: 600 !important; 
1366          color: #5382FF !important; 
1367          border: #5382FF 1px solid !important; 
1368          background: white !important; 
1369        } 
1370 
1371        @media only screen and (max-width: 768px) { 
1372 
1373          .title-idioma-online__modal, 
1374          .icon-wifi-title__modal { 
1375            color: #5382FF !important; 
1376            font-size: 21px !important; 
1377            margin: 0 !important; 
1378            margin-right: 5px !important; 
1379          } 
1380 
1381          .btn-modal-entendi__idioma-online { 
1382            font-size: 16px !important; 
1383            font-weight: 600 !important; 
1384            color: #5382FF !important; 
1385            border: #5382FF 1px solid !important; 
1386            padding: 12px 30%; 
1387            width: auto !important; 
1388          } 
1389 
1390        } 
1391 
1392        .btn-emed-lista-espera { 
1393          background-color: #C560C7 !important; 
1394        } 
1395 
1396        .ssp:not(.liferay-instance) .ssp-container__form-select { 
1397          max-width: 430px; 
1398          width: 100%; 
1399        } 
1400 
1401 
1402        @media (max-width: 768px) { 
1403          .ssp:not(.liferay-instance) .ssp-ofertas-emed__card { 
1404            margin: 10px 20px; 
1405            max-width: 335px; 
1406          } 
1407        } 
1408 
1409        /* css EMED Registro de interesse */ 
1410 
1411        .emed #periodo-registro-interesse, 
1412        .emed #turmas-registro-interesse { 
1413 
1414          display: flex; 
1415          align-items: center; 
1416          padding: 0.625rem 0; 
1417          width: 85%; 
1418          justify-content: space-between; 
1419          margin: 0 auto; 
1420 
1421        } 
1422 
1423        .ssp-card-registro-interesse__title-section-itens { 
1424          margin: 10px 0 11.5px 0 !important; 
1425          font-size: 20px; 
1426          flex-basis: 120px; 
1427        } 
1428 
1429        .ssp-card-registro-interesse__check-itens-content { 
1430          display: flex !important; 
1431          justify-content: center !important; 
1432          flex: 0 1 90% !important; 
1433        } 
1434 
1435        .ssp-card-registro-interesse__check-item { 
1436          display: flex; 
1437          align-items: center; 
1438          flex-basis: 100px; 
1439        } 
1440 
1441        .ssp-card-registro-interesse label { 
1442          margin-right: 0 !important; 
1443        } 
1444 
1445        .ssp-card-registro-interesse [type="checkbox"] { 
1446          box-shadow: 0px 0px 6px #00000029; 
1447        } 
1448 
1449        #cursos-registro-interesse, 
1450        #unidades-registro-interesse { 
1451          padding: 10px 0; 
1452        } 
1453 
1454        .emed-select-group { 
1455 
1456          box-shadow: 0px 0px 12px #00000010; 
1457          border: 1px solid #6E6E6E; 
1458          border-radius: 4px; 
1459          padding: 1.0rem 1.125rem; 
1460          margin: 1rem 0; 
1461 
1462        } 
1463 
1464        .ssp:not(.liferay-instance) .ssp-card-registro-interesse__add-mais>a { 
1465          color: #457eff !important; 
1466        } 
1467 
1468        .emed .ssp-card-registro-interesse__btn-enviar { 
1469          background-color: #C560C7 !important; 
1470        } 
1471 
1472        .ssp-card-registro-interesse__title-modal { 
1473          color: #C560C7 !important; 
1474          font-size: 35px !important; 
1475          font-weight: bold !important; 
1476          margin: 0 !important; 
1477        } 
1478 
1479        #msg-transferencia-emed { 
1480          display: flex; 
1481          justify-content: center; 
1482          flex: wrap; 
1483          flex-direction: column; 
1484          align-items: center; 
1485          padding: 1rem 0; 
1486        } 
1487 
1488        .transferencia-emed-title { 
1489          color: #d266d4; 
1490          display: flex; 
1491          gap: 10px; 
1492          font-size: 16px; 
1493          font-weight: bold; 
1494          align-items: center; 
1495        } 
1496 
1497        .transferencia-emed-title p { 
1498          margin: 0 !important; 
1499          font-weight: bold !important; 
1500          font-size: 16px !important; 
1501        } 
1502 
1503        .transferencia-emed-link a { 
1504          font-size: 15px; 
1505          font-weight: 500 !important; 
1506          color: #792F7A; 
1507          display: block; 
1508          text-align: center; 
1509        } 
1510 
1511        .transferencia-emed-link a:hover { 
1512          font-weight: 500 !important; 
1513          color: #792F7A; 
1514        } 
1515 
1516        .emed .ssp-card-registro-interesse__label-curso-selecionado { 
1517          color: #2A2E43 !important; 
1518          font-weight: bold !important; 
1519          font-size: 28px; 
1520        } 
1521 
1522 
1523        /* css para registro de interesse atual */ 
1524 
1525        #periodo-registro-interesse, 
1526        #dias-registro-interesse { 
1527          padding: .625rem 0; 
1528        } 
1529 
1530        /* css card sem turma e registro de interesse emed*/ 
1531 
1532        .slick-area-emed { 
1533          display: -webkit-box !important; 
1534          display: -ms-flexbox !important; 
1535          display: flex !important; 
1536          -webkit-box-align: center; 
1537          -ms-flex-align: center; 
1538          align-items: center; 
1539          -webkit-box-pack: center; 
1540          -ms-flex-pack: center; 
1541          justify-content: center; 
1542          font-size: 0; 
1543          -ms-flex-wrap: nowrap; 
1544          flex-wrap: nowrap; 
1545        } 
1546 
1547        .slick-area-emed .slick-track, 
1548        .slick-area-emed .slick-list { 
1549          width: 100%; 
1550        } 
1551 
1552        @media only screen and (max-width: 1199px) and (min-width: 768px) { 
1553          .slick-area-emed--md-bleed { 
1554            width: 100vw; 
1555            left: calc(-1 * calc(50vw - (740px / 2) + 37px)) !important; 
1556          } 
1557 
1558          .slick-area-emed--md-bleed .slick-list { 
1559            padding-left: calc(calc(50vw - (768px / 2) + 37px)); 
1560            padding-right: calc(calc(50vw - (768px / 2) + 37px)); 
1561          } 
1562 
1563          .slick-area-emed--md-bleed .slick-arrow { 
1564            display: none !important; 
1565          } 
1566        } 
1567 
1568        @media only screen and (min-width: 376px) and (max-width: 1024px) { 
1569          .slick-area-emed--md-bleed { 
1570            width: 100vw; 
1571            left: calc(-1 * (calc(100vw / 2) - calc(310px / 2) - 3px)); 
1572          } 
1573 
1574          .slick-area-emed--md-bleed .slick-list { 
1575            padding-left: 2px; 
1576          } 
1577 
1578          .slick-area-emed--md-bleed .slick-arrow { 
1579            display: none !important; 
1580          } 
1581        } 
1582 
1583        @media only screen and (max-width: 375px) { 
1584 
1585          .ssp-emed__card-slider-body { 
1586            padding: 25px 30px; 
1587          } 
1588 
1589 
1590          .slick-area-emed--md-bleed { 
1591            width: 100vw; 
1592            left: calc(-1 * (calc(100vw / 2) - calc(310px / 2) - 3px)); 
1593          } 
1594 
1595          /* .slick-area-emed--md-bleed .slick-list { 
1596      padding-left: 20px; 
1597 
1598    } */ 
1599          .slick-area-emed--md-bleed .slick-arrow { 
1600            display: none !important; 
1601          } 
1602        } 
1603 
1604        .slick-area__item { 
1605          display: flex; 
1606          flex-basis: auto; 
1607        } 
1608 
1609        .ssp-emed__section__textCard { 
1610          margin: 20px 0 0 0; 
1611        } 
1612 
1613        .ssp-emed__card-slider-body { 
1614          padding: 25px 50px; 
1615          min-height: 350px; 
1616          display: flex; 
1617          flex-direction: column; 
1618        } 
1619 
1620        .slick-area__item { 
1621          display: flex; 
1622          flex-basis: auto; 
1623        } 
1624 
1625        .ssp-emed__card-slider-body a { 
1626          text-decoration: none !important; 
1627          font-weight: normal; 
1628          color: #78849E 
1629        } 
1630 
1631        .ssp-emed__card-slider-body a:hover { 
1632          font-weight: bold !important; 
1633          color: #2a2e43 
1634        } 
1635 
1636        .ssp-emed__card-slider { 
1637          border-radius: 12px; 
1638          background: transparent; 
1639          -webkit-box-shadow: 0 0 12px 0 rgb(0 0 0 / 16%); 
1640          box-shadow: 0 0 12px 0 rgb(0 0 0 / 16%); 
1641          margin: 12px; 
1642          position: relative; 
1643          overflow: hidden; 
1644          color: #ffffff !important; 
1645          border: 1px solid #fff; 
1646          min-height: 350px; 
1647        } 
1648 
1649        .ssp-emed__card-slider-transferencias { 
1650          border-radius: 12px; 
1651          background: var(--color-neutral-25); 
1652          max-width: 816px; 
1653          margin: 0 auto; 
1654          width: 100%; 
1655          padding: 56px; 
1656          color: var(--color-neutral-800); 
1657 
1658          .ssp-h3, 
1659          p { 
1660            margin-bottom: 0; 
1661          } 
1662 
1663          .card-slider-body { 
1664            display: grid; 
1665            gap: 16px; 
1666          } 
1667 
1668          .btn-transferencia { 
1669            padding: 16px 40px; 
1670            background: var(--marca-azulsenac-400); 
1671            color: var(--color-neutral-25); 
1672            width: fit-content; 
1673            margin: 0 auto; 
1674            margin-top: 16px; 
1675            text-decoration: none !important; 
1676            border-radius: 4px; 
1677            transition: .3s; 
1678 
1679            &:hover { 
1680              background: var(--marca-azulsenac-500); 
1681            } 
1682 
1683          } 
1684 
1685        } 
1686 
1687        .slick-initialized .slick-track { 
1688          display: flex; 
1689        } 
1690 
1691        .slick-initialized .slick-slide { 
1692          height: inherit !important; 
1693          display: flex; 
1694        } 
1695 
1696        .ssp-emed__section__titleCard { 
1697          font-size: 28px !important; 
1698          color: #ffffff !important; 
1699          margin: 0 !important; 
1700          display: flex !important; 
1701          justify-content: flex-start !important; 
1702          flex-direction: row !important; 
1703          align-items: start !important; 
1704          flex-basis: 60px; 
1705        } 
1706 
1707        .ssp-emed__section__titleCard i { 
1708          font-size: 28px; 
1709          color: #ffffff; 
1710          margin: 0 0.85rem 0 0; 
1711          line-height: 30px; 
1712        } 
1713 
1714        .ssp-emed__section__titleCard i.fa-envelope { 
1715          margin-top: 0px; 
1716        } 
1717 
1718        .ssp-emed__section__titleCard i.fa-users-class { 
1719          margin-top: 2px; 
1720        } 
1721 
1722.ssp-emed__section__titleCard div { 
1723  text-decoration: none; 
1724  font-size: 28px !important; 
1725  font-weight: bold; 
1726  margin: 0!important; 
1727  transform:translateY(-2px) 
1728} 
1729 
1730        .ssp-emed__section__introCard { 
1731          display: block; 
1732          font: 28px/30px 'Montserrat'; 
1733          font-weight: 600; 
1734          margin: 20px 0; 
1735          color: #ffffff; 
1736        } 
1737 
1738        .ssp-emed__section__introCardCTA { 
1739          font: 34px/36px 'Montserrat'; 
1740          font-weight: bold; 
1741          display: block; 
1742          margin: 20px 0; 
1743          color: #ffffff; 
1744        } 
1745 
1746        .ssp-emed__section__textCard { 
1747          font: 22px/30px 'Montserrat'; 
1748          color: #ffffff; 
1749          display: block; 
1750          margin: 20px 0 0 0; 
1751          position: relative; 
1752        } 
1753 
1754        .ssp-emed__iconWrapper { 
1755          display: inline-block; 
1756          width: 50px; 
1757          color: #B053B2; 
1758          position: absolute; 
1759          bottom: 0; 
1760          right: 0; 
1761        } 
1762 
1763        .ssp-emed__btn { 
1764          background-color: #B053B2; 
1765          color: #fff !important; 
1766          font: normal normal 600 18px/22px Montserrat; 
1767          box-shadow: 0px 4px 16px #455B6314; 
1768          width: 100%; 
1769          transition: .3s; 
1770          padding: 10px !important; 
1771        } 
1772 
1773        .ssp-emed__btn:hover { 
1774          opacity: 0.7; 
1775        } 
1776 
1777        /*mobile emed*/ 
1778        @media only screen and (max-width: 1024px) { 
1779          .slick-area-emed .slick-dots li.slick-active button:before { 
1780            opacity: .75; 
1781            color: #707070; 
1782          } 
1783 
1784          .slick-area-emed .slick-dots li button:before { 
1785            color: blue; 
1786          } 
1787 
1788          .ssp-card-detalhe-curso__secundary-info-carga-horaria { 
1789            min-width: 35%; 
1790            text-align: end; 
1791          } 
1792 
1793          .ssp-emed__card-slider-transferencias { 
1794            padding: 56px 24px; 
1795            border-radius: 0; 
1796 
1797 
1798            .card-slider-body { 
1799              display: grid; 
1800              gap: 16px; 
1801            } 
1802 
1803            .btn-transferencia { 
1804              padding: 16px; 
1805              text-align: center; 
1806              width: 100%; 
1807            } 
1808 
1809          } 
1810 
1811        } 
1812 
1813        @media only screen and (max-width: 1199px) and (min-width: 768px) { 
1814          .slick-area-emed--md-bleed { 
1815            width: 100vw; 
1816            left: calc(-1 * calc(50vw - (740px / 2) + 37px)) !important; 
1817          } 
1818 
1819          .slick-area-emed--md-bleed .slick-list { 
1820            padding-left: calc(calc(50vw - (768px / 2) + 37px)); 
1821            padding-right: calc(calc(50vw - (768px / 2) + 37px)); 
1822          } 
1823 
1824          .slick-area-emed--md-bleed .slick-arrow { 
1825            display: none !important; 
1826          } 
1827        } 
1828 
1829        @media only screen and (min-width: 375px) and (max-width: 1024px) { 
1830          .slick-area-emed--md-bleed { 
1831            width: 100vw; 
1832            left: calc(-1 * (calc(100vw / 2) - calc(310px / 2) - 3px)); 
1833          } 
1834 
1835          .slick-area-emed--md-bleed .slick-list { 
1836            padding-left: 2px; 
1837          } 
1838 
1839          .slick-area-emed--md-bleed .slick-arrow { 
1840            display: none !important; 
1841          } 
1842 
1843          .ssp-emed__section__titleCard { 
1844            align-items: start !important; 
1845          } 
1846 
1847          .ssp-emed__section__titleCard div { 
1848            font-weight: bold !important; 
1849          } 
1850 
1851          .ssp-emed__section__titleCard i { 
1852            font-weight: 300 !important; 
1853            font-size: 28px !important; 
1854            margin: 3px 0.85rem 0 0; 
1855          } 
1856 
1857          .transferencia-emed-title { 
1858            font-size: 12px; 
1859          } 
1860 
1861          .ssp:not(.liferay-instance) .ssp-card-registro-interesse__select { 
1862            background-size: 15px 15px !important; 
1863            padding: 0 10px; 
1864          } 
1865        } 
1866 
1867        @media only screen and (max-width: 550px) { 
1868 
1869          .ssp-emed__section__introCardCTA { 
1870            font-size: 28px; 
1871          } 
1872 
1873          #msg-transferencia-emed { 
1874            gap: 12px; 
1875          } 
1876 
1877 
1878 
1879          .ssp-emed__card-slider { 
1880            width: 335px; 
1881            min-height: 440px; 
1882          } 
1883 
1884          .slick-initialized .slick-track { 
1885            display: flex; 
1886          } 
1887 
1888          .slick-initialized .slick-slide { 
1889            height: inherit !important; 
1890            display: flex; 
1891            min-height: 440px; 
1892          } 
1893 
1894          .ssp-emed__card-slider-body { 
1895            padding: 25px 30px; 
1896          } 
1897 
1898          .ssp-emed__section__titleCard div { 
1899            transform: translateY(-5%); 
1900            font-size: 24px !important; 
1901          } 
1902 
1903          .slick-area-emed--md-bleed { 
1904            width: 100vw; 
1905            left: calc(-1 * (calc(100vw / 2) - calc(310px / 2) - 3px)); 
1906          } 
1907 
1908          .slick-area-emed--md-bleed .slick-list { 
1909            padding-left: 20px; 
1910          } 
1911 
1912          .slick-area-emed--md-bleed .slick-arrow { 
1913            display: none !important; 
1914          } 
1915 
1916          .ssp-card-registro-interesse__title-section-itens { 
1917            flex-basis: 80px; 
1918          } 
1919 
1920          .emed #periodo-registro-interesse, 
1921          .emed #turmas-registro-interesse { 
1922            width: 95%; 
1923          } 
1924 
1925          .emed .ssp:not(.liferay-instance) .ssp-card-registro-interesse label { 
1926            margin: 0 !important; 
1927          } 
1928 
1929          .emed .ssp-card-registro-interesse.emed [type="checkbox"] { 
1930            margin-left: 0 !important; 
1931          } 
1932 
1933          .emed .ssp-card-registro-interesse__check-item { 
1934            flex-basis: 100px; 
1935          } 
1936        } 
1937 
1938        .emed-select-group { 
1939          box-shadow: 0px 0px 12px #00000010; 
1940          border: 1px solid #6E6E6E; 
1941          border-radius: 4px; 
1942          margin: 1rem 0; 
1943        } 
1944 
1945        .emed-select-group h4 { 
1946          margin: 15px 0 10px 0; 
1947        } 
1948 
1949        .ssp-emed__section__textCard { 
1950          margin: 20px 0 0 0; 
1951        } 
1952 
1953        .ssp-card-msg-sucesso__btn { 
1954          font-size: 20px; 
1955        } 
1956 
1957        .ssp:not(.liferay-instance) .ssp-card-oferta-curso { 
1958          height: fit-content; 
1959        } 
1960 
1961        .ssp-card-duvida__bolsa-estudo { 
1962 
1963          background: #DCE8FF; 
1964          padding: 30px; 
1965          max-width: 683px; 
1966          width: 100%; 
1967          border-radius: 14px; 
1968          display: flex; 
1969          justify-content: center; 
1970          align-items: center; 
1971          gap: 20px; 
1972          margin: 1rem auto; 
1973 
1974        } 
1975 
1976        .ssp-card-duvida__bolsa-estudo p { 
1977 
1978          font-size: 16px !important; 
1979          font-weight: bold !important; 
1980          color: #2967F4 !important; 
1981          margin: 0 !important; 
1982          ; 
1983 
1984        } 
1985 
1986        .ssp-card-duvida__bolsa-estudo a { 
1987 
1988          border: 1px solid #2967F4 !important; 
1989          font-size: 14px !important; 
1990          font-weight: 600; 
1991          text-decoration: none !important; 
1992          color: #2967F4 !important; 
1993          padding: 14px 27px; 
1994          border-radius: 6px; 
1995          transition: .3s; 
1996 
1997        } 
1998 
1999        .ssp:not(.liferay-instance) .ssp-card-duvida__bolsa-estudo a:hover { 
2000 
2001          font-size: 14px !important; 
2002          font-weight: 600 !important; 
2003          background: #2967F4 !important; 
2004          color: white !important; 
2005          opacity: 1 !important; 
2006 
2007        } 
2008 
2009        @media only screen and (max-width: 768px) { 
2010 
2011          .ssp-card-duvida__bolsa-estudo { 
2012 
2013            background: #DCE8FF; 
2014            padding: 20px; 
2015            flex-flow: column; 
2016            width: 90%; 
2017 
2018          } 
2019 
2020          .ssp-card-duvida__bolsa-estudo p { 
2021 
2022            max-width: 200px; 
2023            text-align: center; 
2024 
2025          } 
2026 
2027          .ssp-card-duvida__bolsa-estudo a { 
2028 
2029            padding: 16px 27px; 
2030 
2031          } 
2032 
2033        } 
2034 
2035        /* Novo Card de Oferta */ 
2036 
2037        /* ajustes no card existente */ 
2038 
2039        .ssp:not(.liferay-instance) .ssp-card-oferta__info-turma { 
2040          margin-bottom: 30px; 
2041        } 
2042 
2043        .ssp:not(.liferay-instance) .ssp-card-oferta__info-turma-content { 
2044          margin-bottom: 5px; 
2045        } 
2046 
2047        .ssp:not(.liferay-instance) .ssp-card-oferta-curso__item-data-periodo { 
2048          margin: 5px 0 10px 0; 
2049        } 
2050 
2051        .ssp:not(.liferay-instance) .ssp-card-oferta-curso__dia-hora-item { 
2052          border-radius: 0; 
2053          background-color: unset; 
2054          padding: 0; 
2055          max-width: 100%; 
2056          width: 100%; 
2057          margin: 0; 
2058        } 
2059 
2060        .ssp:not(.liferay-instance) .ssp-card-oferta-curso__dia-hora_content { 
2061          margin: 0; 
2062          opacity: 0; 
2063          transition: 0.3s; 
2064        } 
2065 
2066        .ssp:not(.liferay-instance) .ssp-card-oferta-curso__dia-hora-item__dia { 
2067          margin: 0; 
2068          font-size: 17px; 
2069          font-weight: bold; 
2070          font-stretch: normal; 
2071          font-style: normal; 
2072          line-height: 1.23; 
2073          letter-spacing: normal; 
2074          text-align: center; 
2075        } 
2076 
2077        .ssp:not(.liferay-instance) .ssp-card-oferta-curso__dia-hora-item__hora { 
2078          margin: 0; 
2079          font-size: 17px; 
2080          font-weight: bold; 
2081          font-stretch: normal; 
2082          font-style: normal; 
2083          line-height: 1.3; 
2084          letter-spacing: normal; 
2085          text-align: center; 
2086        } 
2087 
2088        .modal-extensao_txteconomiza { 
2089          font-size: 14px; 
2090          color: #454F63; 
2091          font-weight: 400; 
2092        } 
2093 
2094        .btn.btn-lg { 
2095          padding: .7rem; 
2096 
2097        } 
2098 
2099        .ssp:not(.liferay-instance) .ssp-card-oferta-curso__desconto-content p { 
2100          font-size: 17px; 
2101        } 
2102 
2103        .ssp-card-oferta-curso__item-valor-investimento { 
2104          font-size: 38px; 
2105        } 
2106 
2107        .ssp:not(.liferay-instance) .ssp-card-oferta-curso__formas-pagamento-content .ssp-card-oferta-curso__formas-pagamento-content__title { 
2108          color: #454F63; 
2109          font-weight: bold !important; 
2110          font-size: 14px; 
2111        } 
2112 
2113        .ssp:not(.liferay-instance) .ssp-card-oferta-curso__formas-pagamento-content .ssp-card-oferta-curso__formas-pagamento-content__icon-credit-card::after { 
2114          color: #454F63 !important; 
2115          font-size: 14px; 
2116        } 
2117 
2118        .ssp-card-modal-forma-pagamento__icon-boleto-e-cartao { 
2119          font-size: 18px !important; 
2120          margin-right: 15px !important; 
2121        } 
2122 
2123 
2124        .ssp:not(.liferay-instance) .ssp-card-oferta-curso__formas-pagamento-content span { 
2125          color: #454F63; 
2126          font-size: 14px; 
2127          font-weight: 400; 
2128        } 
2129 
2130        .ssp:not(.liferay-instance) .ssp-card-oferta-curso__formas-pagamento-content { 
2131          padding-bottom: 0; 
2132        } 
2133 
2134        /* local realizacao */ 
2135 
2136        .ssp:not(.liferay-instance) .ssp-card-oferta-curso__local-realizacao-content__title { 
2137          font-size: 13px; 
2138          color: #00488C; 
2139          font-weight: 600; 
2140          text-decoration: none !important; 
2141          border: 1px solid #00488C; 
2142          padding: 11px 14px; 
2143          transition: .3s; 
2144          border-radius: 4px; 
2145          display: flex; 
2146          gap: 5px; 
2147          align-items: center; 
2148        } 
2149 
2150        .ssp:not(.liferay-instance) .ssp-card-oferta-curso__local-realizacao-content__title:hover { 
2151          color: white; 
2152          font-weight: 600 !important; 
2153          background: #08488C; 
2154        } 
2155 
2156        .container-local-realizacao { 
2157          padding: 0; 
2158          border: 0; 
2159          border-radius: unset; 
2160          width: 100%; 
2161          margin: 10px 0 0 0; 
2162          box-shadow: none; 
2163          display: flex; 
2164          justify-content: center; 
2165          align-items: flex-end; 
2166        } 
2167 
2168        .icon-local-realizacao { 
2169          color: #00488C; 
2170          font-size: 13px; 
2171        } 
2172 
2173 
2174        @media only screen and (max-width: 768px) { 
2175 
2176          .ssp:not(.liferay-instance) .ssp-card-oferta-curso__dia-hora-item__dia { 
2177            font-size: 16px; 
2178          } 
2179 
2180          .ssp:not(.liferay-instance) .ssp-card-oferta-curso__title-item { 
2181            font-size: 14px !important; 
2182          } 
2183 
2184          .ssp:not(.liferay-instance) .ssp-card-oferta-curso__valor-desconto { 
2185            font-size: 15px; 
2186          } 
2187 
2188          .ssp:not(.liferay-instance) .ssp-card-oferta-curso__item-valor-investimento { 
2189            font-size: 33px; 
2190          } 
2191 
2192          .icon-local-realizacao { 
2193            font-size: 12px; 
2194          } 
2195 
2196          .modal-extensao_txteconomiza { 
2197            font-size: 12px; 
2198          } 
2199 
2200          .content-valores-descontos { 
2201            padding-bottom: 8px !important; 
2202          } 
2203 
2204          .ssp:not(.liferay-instance) .ssp-card-oferta-curso__desconto-content p { 
2205            font-size: 14px !important; 
2206          } 
2207 
2208 
2209        } 
2210 
2211 
2212 
2213 
2214        /* final ajustes no card existente */ 
2215 
2216 
2217        /* Novos elementos */ 
2218 
2219        .content-data-dias { 
2220          padding: 20px; 
2221          padding-top: 0; 
2222          border-bottom: none !important; 
2223        } 
2224 
2225        .content-valores-descontos { 
2226          padding: 20px 0 0 0; 
2227          opacity: 1; 
2228          height: auto; 
2229          transition: 0.3s; 
2230          overflow: hidden; 
2231          border-top: 1px #E4E8F0 solid; 
2232        } 
2233 
2234        .content-valores-descontos.hide-price { 
2235 
2236          padding: 0; 
2237          opacity: 0; 
2238          height: 0; 
2239 
2240        } 
2241 
2242        .content-btn-bolsa { 
2243 
2244          border-top: 1px #E4E8F0 solid; 
2245          padding-top: 20px; 
2246 
2247        } 
2248 
2249        .content-btn-bolsa.modifier-content-show { 
2250 
2251          padding-bottom: 20px; 
2252 
2253        } 
2254 
2255        .content-btn-bolsa.modifier-content-show .ou-separator-desconto { 
2256          display: none; 
2257        } 
2258 
2259        .content-btn-bolsa.modifier-content-show .btn-show-price { 
2260          display: none; 
2261        } 
2262 
2263        .content-buttons { 
2264 
2265          padding: 20px 0 0 0; 
2266 
2267        } 
2268 
2269        .block-valor-desconto { 
2270 
2271          background-color: #F2F6FF; 
2272          padding: 30px 10px 15px 10px; 
2273          border-radius: 12px; 
2274          position: relative; 
2275 
2276        } 
2277 
2278        .block-valor-desconto .ssp-card-oferta-curso__item-valor-investimento span { 
2279          font-size: 18px; 
2280        } 
2281 
2282        .block-valor-total { 
2283 
2284          background-color: #F2F6FF; 
2285          padding: 15px 10px; 
2286          border-radius: 12px; 
2287          position: relative; 
2288 
2289        } 
2290 
2291        .block-valor-total .ssp-card-oferta-curso__title-item { 
2292          font-size: 16px !important; 
2293          color: #454F63 !important; 
2294          font-weight: 500 !important; 
2295        } 
2296 
2297        .block-valor-total .ssp-card-oferta-curso__item-valor-investimento { 
2298          font-size: 22px; 
2299        } 
2300 
2301        .block-valor-total .ssp-card-oferta-curso__item-valor-investimento span { 
2302          font-size: 11px; 
2303        } 
2304 
2305        .block-valor-total .ssp-card-oferta-curso__desconto-content p { 
2306          font-size: 14px; 
2307          font-weight: 500; 
2308        } 
2309 
2310        .tag-label-desconto { 
2311 
2312          background-color: #B6FDCF; 
2313          border-radius: 15px; 
2314          padding: 5px; 
2315          margin: -50px 20px 10px 20px; 
2316 
2317        } 
2318 
2319        .tag-label-desconto span, 
2320        .tag-label-desconto small { 
2321          font-size: 16px !important; 
2322          font-weight: bold !important; 
2323          color: #454F63 !important; 
2324        } 
2325 
2326 
2327 
2328        .ou-separator-desconto { 
2329          font-size: 16px; 
2330          color: #454F63; 
2331          font-weight: bold; 
2332          display: flex; 
2333          flex-wrap: nowrap; 
2334          align-items: center; 
2335          justify-content: space-between; 
2336          gap: 15px; 
2337          padding: 20px 0; 
2338        } 
2339 
2340        .ou-separator-desconto::after { 
2341          content: ""; 
2342          height: 2px; 
2343          background-color: #E4E8F0; 
2344          width: 100%; 
2345          display: block; 
2346        } 
2347 
2348        .ou-separator-desconto::before { 
2349          content: ""; 
2350          height: 2px; 
2351          background-color: #E4E8F0; 
2352          width: 100%; 
2353          display: block; 
2354        } 
2355 
2356        .btn-show-price { 
2357 
2358          background: unset; 
2359          border: 0; 
2360          font-size: 14px !important; 
2361          color: #454F63 !important; 
2362 
2363        } 
2364 
2365        .btn-show-price p { 
2366          margin: 0 !important; 
2367        } 
2368 
2369        .btn-show-price span { 
2370          text-decoration: underline; 
2371          font-weight: bold; 
2372        } 
2373 
2374        @media only screen and (max-width: 768px) { 
2375 
2376          .content-data-dias { 
2377 
2378            padding: 20px 0; 
2379 
2380          } 
2381 
2382          .ssp-card-oferta-curso__local-realizacao-content__title { 
2383 
2384            font-size: 14px; 
2385            display: flex; 
2386            align-items: center; 
2387            gap: 5px; 
2388            padding: 10px 13px; 
2389          } 
2390 
2391          .ssp-card-oferta-curso__local-realizacao-content__title i { 
2392 
2393            font-size: 11px; 
2394          } 
2395 
2396          .tag-label-desconto span, 
2397          .tag-label-desconto small { 
2398            font-size: 13px !important; 
2399          } 
2400 
2401          .tag-label-desconto { 
2402            padding: 5px; 
2403            margin: -50px 12px 10px 12px; 
2404          } 
2405 
2406          .block-valor-desconto .ssp-card-oferta-curso__item-valor-investimento span { 
2407            font-size: 18px; 
2408          } 
2409 
2410          .content-buttons { 
2411            padding: 10px 0 0 0; 
2412          } 
2413 
2414 
2415        } 
2416 
2417        /*final Novo card de ofertas*/ 
2418 
2419        /* form aprendizagem */ 
2420 
2421        [data-modal="modal"] { 
2422          background-color: rgba(0, 0, 0, 0.7); 
2423          backdrop-filter: blur(10px); 
2424          display: none; 
2425        } 
2426 
2427        [data-modal="close-form-modal"] { 
2428 
2429          font-size: 22px; 
2430          background: unset !important; 
2431          color: white !important; 
2432          display: flex; 
2433          align-items: center; 
2434          margin: 0; 
2435          padding: 0; 
2436          position: absolute; 
2437          right: 0; 
2438          border: 0; 
2439          gap: 5px; 
2440          right: 2%; 
2441          top: -2%; 
2442 
2443        } 
2444 
2445        [data-modal="close-form-modal"] i { 
2446 
2447          font-size: 43px; 
2448          height: fit-content; 
2449 
2450        } 
2451 
2452        .open-modal-form { 
2453          position: fixed; 
2454          top: 0; 
2455          width: 100%; 
2456          height: 100%; 
2457          z-index: 100; 
2458          display: flex; 
2459          justify-content: center; 
2460          align-items: center; 
2461          overflow: auto; 
2462 
2463        } 
2464 
2465        .open-modal-form .ssp_ct_form_programe { 
2466          animation-name: animatetop; 
2467          animation-duration: .4s; 
2468          position: relative; 
2469        } 
2470 
2471        label .reference-mark { 
2472          color: #78849e; 
2473        } 
2474 
2475        .lexicon-icon-asterisk { 
2476          color: #78849e; 
2477        } 
2478 
2479        .lexicon-icon-reload { 
2480          margin-left: 10px; 
2481        } 
2482 
2483        .ssp_title_form_programe { 
2484          font-size: 42px !important; 
2485          color: #ffffff !important; 
2486          font-family: "Montserrat", sans-serif; 
2487          font-weight: 600; 
2488          text-align: left; 
2489        } 
2490 
2491        .ssp_subtitle_form_programe { 
2492          margin-top: 0px !important; 
2493 
2494        } 
2495 
2496        .ssp_subtitle_form_programe { 
2497          font-size: 20px !important; 
2498          color: #ffffff !important; 
2499          font-family: "Montserrat", sans-serif; 
2500          font-weight: 600; 
2501          text-align: left; 
2502        } 
2503 
2504        .lfr-ddm-form-page { 
2505          background-color: #fff; 
2506          border-radius: 12px 12px 0px 0px; 
2507          padding: 35px 15px !important; 
2508        } 
2509 
2510        .ssp:not(.liferay-instance) .form-group label { 
2511          color: #78849E; 
2512          font: normal normal 600 16px/19px Montserrat; 
2513          padding-bottom: 10px; 
2514        } 
2515 
2516        .lfr-ddm-form-page-description { 
2517          display: none !important; 
2518        } 
2519 
2520        .lfr-ddm-form-page-title { 
2521          display: none !important; 
2522        } 
2523 
2524        .lfr-ddm-form-submit { 
2525          background-color: #0380F0; 
2526          text-align: center; 
2527          float: none !important; 
2528          border: 1px solid #0380F0; 
2529          border-radius: 6px; 
2530          font-size: 16px; 
2531          width: 245px; 
2532          height: 50px; 
2533        } 
2534 
2535        .lfr-ddm-form-pagination-controls { 
2536          background-color: #fff; 
2537          text-align: center; 
2538          border-radius: 0px 0px 12px 12px; 
2539          padding-bottom: 25px; 
2540        } 
2541 
2542        .ddm-form-name { 
2543          display: none !important; 
2544        } 
2545 
2546        .ddm-form-description { 
2547          display: none !important; 
2548        } 
2549 
2550        .ddm-form-builder-app { 
2551          margin-top: 35px; 
2552        } 
2553 
2554        .taglib-captcha { 
2555          display: flex; 
2556        } 
2557 
2558        .input-text-wrapper { 
2559          left: 20px; 
2560        } 
2561 
2562        .lfr-ddm-form-pagination-controls { 
2563          padding-top: 0px !important; 
2564          display: flex; 
2565          justify-content: center; 
2566          align-items: center; 
2567          flex-flow: column; 
2568        } 
2569 
2570        @media only screen and (max-width: 1024px) { 
2571 
2572          .open-modal-form { 
2573 
2574            align-items: flex-start; 
2575 
2576          } 
2577 
2578          .ddm-form-builder-app { 
2579            margin-top: 15px; 
2580          } 
2581 
2582          .ssp_title_form_programe { 
2583            font-size: 34px !important; 
2584            line-height: 1.2 !important; 
2585          } 
2586 
2587          .ssp_subtitle_form_programe { 
2588            font-size: 18px !important; 
2589          } 
2590 
2591          .taglib-captcha { 
2592            display: block; 
2593          } 
2594 
2595          .input-text-wrapper { 
2596            left: 0; 
2597          } 
2598 
2599          .ssp_ct_form_programe { 
2600            padding: 0px; 
2601            max-width: 100%; 
2602            padding: 40px 20px; 
2603          } 
2604 
2605          [data-modal="close-form-modal"] { 
2606 
2607            right: 20px; 
2608            top: 0; 
2609 
2610          } 
2611 
2612        } 
2613 
2614        .ssp:not(.liferay-instance) a.btn.btn-success.disabled { 
2615          pointer-events: none; 
2616          opacity: 0.5 !important; 
2617          color: #FFF !important; 
2618          background-color: #4CBF69 !important; 
2619          cursor: not-allowed; 
2620          border: none !important; 
2621          font-size: 0.9rem !important; 
2622        } 
2623 
2624        .slick-list.draggable { 
2625          height: auto !important; 
2626        } 
2627 
2628        .ssp:not(.liferay-instance) .ssp-image-opacity { 
2629 
2630          opacity: 1; 
2631          object-fit: cover; 
2632          object-position: center; 
2633 
2634        } 
2635 
2636        .ssp-option-group { 
2637          text-align: left; 
2638          font: normal normal 600 15px/19px Montserrat; 
2639          letter-spacing: 0px; 
2640          color: #004A8C; 
2641        } 
2642 
2643        .ssp-option { 
2644          text-align: left; 
2645          font: normal normal normal 15px/19px Montserrat; 
2646          letter-spacing: 0px; 
2647          color: #656565; 
2648        } 
2649 
2650        @media only screen and (max-width: 768px) { 
2651          .ssp-option-group { 
2652            font: normal normal 600 15px/19px Montserrat; 
2653          } 
2654 
2655          .ssp-option { 
2656            font: normal normal normal 15px/19px Montserrat; 
2657          } 
2658        } 
2659 
2660        .open-modal-form.lfr-ddm__default-page-header { 
2661          display: none; 
2662        } 
2663 
2664        /* css para funcionalidade de híbrido */ 
2665 
2666        .ssp-emed__vantagens-content.livre span { 
2667          color: #FF9057 !important; 
2668        } 
2669 
2670        .ssp-emed__vantagens-content.livre a:hover { 
2671          color: white; 
2672          background-color: #FF9057 !important; 
2673          ; 
2674          border: 1px solid #FF9057 !important; 
2675          ; 
2676        } 
2677 
2678        .ssp-emed__vantagens-content.tecnico span { 
2679          color: #F7BD23 !important; 
2680        } 
2681 
2682        .ssp-emed__vantagens-content.tecnico a:hover { 
2683          color: white; 
2684          background-color: #F7BD23 !important; 
2685          ; 
2686          border: 1px solid #F7BD23 !important; 
2687          ; 
2688        } 
2689 
2690        .ssp-emed__vantagens-content.ensino-medio-tecnico span { 
2691          color: #C761CB !important; 
2692        } 
2693 
2694        .ssp-emed__vantagens-content.ensino-medio-tecnico a:hover { 
2695          color: white; 
2696          background-color: #C761CB !important; 
2697          ; 
2698          border: 1px solid #C761CB !important; 
2699          ; 
2700        } 
2701 
2702        .ssp-emed__vantagens-content.extensao span { 
2703          color: #3ECCA6 !important; 
2704        } 
2705 
2706        .ssp-emed__vantagens-content.extensao a:hover { 
2707          color: white; 
2708          background-color: #3ECCA6 !important; 
2709          border: 1px solid #3ECCA6 !important; 
2710        } 
2711 
2712        /* Transferencias EMED */ 
2713 
2714        .emed-transferencias-space { 
2715          max-width: auto; 
2716        } 
2717 
2718        .card-transferencias-emed { 
2719          text-align: left; 
2720        } 
2721 
2722        .card-transferencias-emed .ssp-emed__card-slider-body { 
2723          padding: 30px; 
2724        } 
2725 
2726        .card-pre-inscricao { 
2727          text-align: center; 
2728        } 
2729 
2730        .card-pre-inscricao .ssp-emed__card-slider-body { 
2731          justify-content: space-evenly; 
2732        } 
2733 
2734        .footer-card-card-pre-inscricao { 
2735          margin-top: 48px; 
2736        } 
2737 
2738        .card-transferencias-emed, 
2739        .card-pre-inscricao { 
2740 
2741          span, 
2742          strong { 
2743            font-size: 24px; 
2744          } 
2745 
2746          span { 
2747            font-weight: 500; 
2748          } 
2749 
2750          strong { 
2751            font-weight: 700; 
2752          } 
2753 
2754          .transferencias-emed-rodape { 
2755            margin-top: 25px; 
2756 
2757            span { 
2758              font-size: 0.9rem; 
2759              font-weight: 400; 
2760            } 
2761          } 
2762        } 
2763 
2764        @media only screen and (max-width: 768px) { 
2765          .card-pre-inscricao { 
2766            text-align: left; 
2767          } 
2768 
2769          .footer-card-card-pre-inscricao { 
2770            margin-top: 24px; 
2771          } 
2772 
2773          .footer-card-card-pre-inscricao strong { 
2774            margin-top: 24px; 
2775            font-size: 24px !important; 
2776          } 
2777 
2778          .card-pre-inscricao .ssp-emed__card-slider { 
2779            width: 100%; 
2780            max-width: 329px; 
2781            min-height: 390px; 
2782            margin: 0; 
2783          } 
2784 
2785          .card-pre-inscricao .ssp-emed__card-slider:nth-child(n+2) { 
2786            margin: 12px; 
2787          } 
2788 
2789          .card-transferencias-emed, 
2790          .card-pre-inscricao { 
2791 
2792            span, 
2793            strong { 
2794              font-size: 16px; 
2795            } 
2796 
2797            .ssp-emed__section__titleCard { 
2798              flex-basis: 0; 
2799              margin-bottom: 24px !important; 
2800              align-items: center !important; 
2801            } 
2802 
2803            .ssp-emed__section__titleCard i { 
2804              font-size: 24px !important; 
2805            } 
2806 
2807            .ssp-emed__section__titleCard div { 
2808              font-size: 20px !important; 
2809            } 
2810          } 
2811 
2812          .slick-area__item.card-pre-inscricao { 
2813            min-height: 390px !important; 
2814          } 
2815 
2816          .card-transferencias-emed .ssp-emed__card-slider { 
2817            margin: 0; 
2818          } 
2819 
2820          .card-transferencias-emed .ssp-emed__card-slider { 
2821            margin: 0; 
2822            min-height: 300px; 
2823          } 
2824 
2825          .card-transferencias-emed .col-md-12 { 
2826            padding: 0; 
2827          } 
2828 
2829          .card-transferencias-emed .transferencias-emed-rodape span { 
2830            font-size: 12px; 
2831          } 
2832 
2833          .ssp-ofertas-emed__filtro-content .btn-filtro { 
2834            width: 156px !important; 
2835            font-size: 14px !important; 
2836          } 
2837 
2838          #titulo-emed { 
2839            text-transform: uppercase; 
2840          } 
2841 
2842          .emed-transferencias-space div:nth-child(n+2) { 
2843            padding-left: 0; 
2844          } 
2845 
2846          .emed-transferencias-space .slick-area-emed--md-bleed { 
2847            position: inherit; 
2848          } 
2849 
2850} 
2851 
2852 
2853/* ========================================================================== 
2854   Tags de modalidade da ficha de curso (Ensino Superior) 
2855   Figma: Integração EAD > ficha de curso (node 3284:2390) 
2856   "Presencial" = tag informativa | "Conferir curso EAD" = tag clicável 
2857   ========================================================================== */ 
2858.ssp-modalidade-curso { 
2859  /* Tokens por nível (padrão: pós-graduação, conforme protótipo) */ 
2860  --_tag-presencial-bg: #8280fe; /* niveis/pos/pos-300 */ 
2861  --_tag-ead-bg: #e1e0fe;        /* niveis/pos/pos-50 */ 
2862  --_tag-color: #000;            /* neutros/neutro-900 */ 
2863 
2864  display: flex; 
2865  flex-wrap: wrap; 
2866  align-items: center; 
2867  gap: 16px; 
2868  margin: 20px 0 40px; 
2869 
2870  &.ssp-modalidade-curso--graduacao { 
2871    --_tag-presencial-bg: #6eacea; /* tipocurso/graduacao-300 */ 
2872    --_tag-ead-bg: #dcebf9;        /* tipocurso/graduacao-50 */ 
2873  } 
2874 
2875  &.ssp-modalidade-curso--extensao { 
2876    --_tag-presencial-bg: #68d7b8; /* tipocurso/extensao-300 */ 
2877    --_tag-ead-bg: #ddf6ef;        /* TODO: confirmar tipocurso/extensao-50 */ 
2878  } 
2879 
2880  .ssp-modalidade-curso__tag { 
2881    display: inline-flex; 
2882    align-items: center; 
2883    gap: 8px; 
2884    padding: 16px; 
2885    border-radius: 20px; 
2886    font-family: "Montserrat", sans-serif; 
2887    font-size: 16px; 
2888    font-weight: 500; 
2889    line-height: 24px; 
2890    color: var(--_tag-color); 
2891    white-space: nowrap; 
2892 
2893    &.ssp-modalidade-curso__tag--presencial { 
2894      background-color: var(--_tag-presencial-bg); 
2895    } 
2896 
2897    &.ssp-modalidade-curso__tag--ead { 
2898      /* Reset de <button> (abrirá modal futuramente) */ 
2899      appearance: none; 
2900      margin: 0; 
2901      border: 0; 
2902      text-align: left; 
2903      background-color: var(--_tag-ead-bg); 
2904      text-decoration: none !important; 
2905      cursor: pointer; 
2906 
2907      /* Sem hover: neutraliza estilos globais do tema */ 
2908      &:hover, 
2909      &:focus, 
2910      &:active { 
2911        color: var(--_tag-color) !important; 
2912        font-weight: 500 !important; 
2913        text-decoration: none !important; 
2914        background-color: var(--_tag-ead-bg); 
2915      } 
2916 
2917      &:focus-visible { 
2918        outline: 2px solid var(--_tag-color); 
2919        outline-offset: 2px; 
2920      } 
2921    } 
2922  } 
2923 
2924  .ssp-modalidade-curso__icon { 
2925    flex-shrink: 0; 
2926    width: 20px; 
2927    height: 20px; 
2928  } 
2929 
2930  @media (max-width: 767px) { 
2931    gap: 12px; 
2932    margin: 16px 0 24px; 
2933 
2934    .ssp-modalidade-curso__tag { 
2935      padding: 12px 16px; 
2936      font-size: 14px; 
2937      line-height: 20px; 
2938    } 
2939  } 
2940} 
2941 
2942</style> 
2943                
2944	 
2945  <#assign 
2946     
2947    prefix = "ssp" 
2948    nomeVocabularioTipoCurso = 'tipo-de-curso' 
2949     
2950   
2951    nomeVocabularioUnidades = 'unidades' 
2952     
2953    nomeVocabularioFormato = 'formato' 
2954     
2955    nomeFormato = ""   
2956    nomeVocabularioModalidade = 'modalidade' 
2957     
2958    nomeModalidade = ""   
2959     
2960    normalizer = serviceLocator.findService("com.liferay.portal.kernel.util.FriendlyURLNormalizer") 
2961   
2962    journalArticle = getJournalArticle() 
2963  /> 
2964   
2965  <#if journalArticle?contains("#erro#")> 
2966    erro 
2967  <#else> 
2968   
2969    <#assign 
2970   
2971      categories = getCategorias(journalArticle.getResourcePrimKey()) 
2972  
2973      document = saxReaderUtil.read(journalArticle.getContent()).getRootElement() 
2974   
2975      xPathSelector = saxReaderUtil.createXPath("dynamic-element[@field-reference='dataEfetivaFTFieldSet']") 
2976			dataEfetivaFTFieldSet	= xPathSelector.selectSingleNode(document) 
2977        
2978		  xPathSelector = saxReaderUtil.createXPath("//dynamic-element[@field-reference='dataEfetivaFT']") 
2979			dataEfetiva = xPathSelector.selectSingleNode(document) 
2980						  
2981			dataEfetivaSTR = dataEfetiva.elementText("dynamic-content")?string 
2982   
2983      articleId = journalArticle.getArticleId() 
2984   
2985      codigoFT = getStringValue(document,'codigoFT') 
2986   
2987      tituloComercial = journalArticle.getTitle() 
2988   
2989      objetivo = getStringValue(dataEfetivaFTFieldSet, 'objetivoComercial') 
2990       
2991      cargaHoraria = getStringValue(dataEfetivaFTFieldSet, 'cargaHorariaTotalFT') 
2992   
2993      oQueVouAprenderComercial = getStringValue(dataEfetivaFTFieldSet, 'oQueVouAprenderComercial') 
2994   
2995      comoVouAprenderComercial = getStringValue(dataEfetivaFTFieldSet, 'comoVouAprenderComercial') 
2996			 
2997			possoFazerEsteCursoComercial = getStringValue(dataEfetivaFTFieldSet, 'possoFazerEsteCursoComercial') 
2998						  
2999      tereiCertificadoComercial = getStringValue(dataEfetivaFTFieldSet, 'tereiCertificadoComercial') 
3000   
3001      tereiDiplomaComercial = getStringValue(dataEfetivaFTFieldSet, 'tereiDiplomaComercial') 
3002   
3003      precisoEstagiarComercial = getStringValue(dataEfetivaFTFieldSet, 'precisoEstagiarComercial') 
3004   
3005      comoMeMatricularComercial = getStringValue(dataEfetivaFTFieldSet, 'comoMeMatricularComercial') 
3006   
3007      oQueMaisPrecisoSaberComercial = getStringValue(dataEfetivaFTFieldSet, 'oQueMaisPrecisoSaberComercial') 
3008       
3009      normalizedModalidadeName  = "" 
3010   
3011    /> 
3012	 
3013    <div style="display: none;">ElasticSearchNaoRetornarFiltro </div> 
3014    <input type="hidden" name="codigoFT" value="${codigoFT}" /> 
3015    <input type="hidden" name="articleId" value="${articleId}" /> 
3016   
3017    <input type="hidden" name="dataEfetivaSTR" value="${dataEfetivaSTR}" /> 
3018     
3019    <input type="hidden" name="codUnidadeSelecionada" value="" /> 
3020   
3021    <#list categories as category> 
3022       
3023      <#assign 
3024        vocabulary = getVocabulary(category.getVocabularyId()) 
3025      /> 
3026   
3027      <#if normalizer.normalize(vocabulary.getName()) == nomeVocabularioTipoCurso> 
3028   
3029        <#assign 
3030          categoriaTipoCurso = category 
3031          normalizedCategoryName = normalizer.normalize(category.getName()) 
3032        /> 
3033         
3034        <input type="hidden" name="tipoCurso" value="${normalizedCategoryName}" /> 
3035         
3036      <#elseif normalizer.normalize(vocabulary.getName()) == nomeVocabularioUnidades> 
3037   
3038        <input type="hidden" name="unidades" value="${category.getCategoryId()}" data-unidade="${category.getName()}" /> 
3039       
3040      <#elseif normalizer.normalize(vocabulary.getName()) == nomeVocabularioModalidade> 
3041     
3042      <#assign 
3043          categoriaModalidade = category 
3044          normalizedModalidadeName = normalizer.normalize(category.getName()) 
3045           
3046        /> 
3047        <input type="hidden" name="modalidadeName" value="${normalizedModalidadeName}" /> 
3048        <input type="hidden" name="modalidades" value="${normalizedModalidadeName}" /> 
3049         
3050      <#elseif normalizer.normalize(vocabulary.getName()) == nomeVocabularioFormato> 
3051      <#assign 
3052        nomeFormato = category.getName() 
3053      /> 
3054        
3055        
3056       <#assign idFormato = category.getCategoryId() /> 
3057        <#if nomeFormato == "Presencial + EAD" > 
3058            <input type="hidden" name="formato" value="${category.getCategoryId()}" data-formato="Presencial + EAD" /> 
3059        <#else> 
3060        	<input type="hidden" name="formato" value="${category.getCategoryId()}" data-formato="${category.getName()}" /> 
3061        </#if> 
3062      </#if> 
3063    </#list> 
3064   
3065    <#assign xPathSelector = saxReaderUtil.createXPath("//dynamic-element[@field-reference='imagemComercial']")> 
3066    <#assign imagemAlt = ""> 
3067    <#assign imagemUrl = ""> 
3068   
3069    <#if xPathSelector.selectSingleNode(dataEfetivaFTFieldSet)?? > 
3070   
3071      <#assign imagemStr = xPathSelector.selectSingleNode(dataEfetivaFTFieldSet).getStringValue()> 
3072      <#if imagemStr?contains("{") > 
3073        <#attempt> 
3074          <#assign imagemJson = jsonFactoryUtil.createJSONObject(imagemStr) /> 
3075          <#assign imagemId = getterUtil.getInteger(imagemJson.get('fileEntryId')) /> 
3076          <#if imagemId?? && imagemId gt 0 > 
3077            <#assign dl = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService") 
3078              dlURLHelper = serviceLocator.findService("com.liferay.document.library.util.DLURLHelper") 
3079              fileEntry = dl.getFileEntry(imagemId) /> 
3080            <#if fileEntry??> 
3081              <#assign imagemAlt = imagemJson.get('alt') /> 
3082              <#assign imagemUrl = dlURLHelper.getDownloadURL(fileEntry, fileEntry.getFileVersion(), themeDisplay,null) /> 
3083            </#if> 
3084          </#if> 
3085        <#recover> 
3086          <#assign 
3087            imagemAlt = "" 
3088            imagemUrl = ""  
3089          /> 
3090        </#attempt> 
3091      </#if> 
3092 
3093                </#if> 
3094 
3095                <#assign URLCodec=staticUtil["com.liferay.portal.kernel.util.URLCodec"] 
3096                  HtmlUtil=staticUtil["com.liferay.portal.kernel.util.HtmlUtil"] 
3097                  StringPool=staticUtil["com.liferay.petra.string.StringPool"] 
3098                  dlFileEntryLocalService=serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") 
3099                  xPathSelector=saxReaderUtil.createXPath("//dynamic-element[@field-reference='quaisMateriaisComercial' 
3100                  ]") 
3101                  quaisMateriaisComercialPDFStr=xPathSelector.selectSingleNode(dataEfetivaFTFieldSet).getStringValue() /> 
3102 
3103                <#if quaisMateriaisComercialPDFStr?contains('classPK')> 
3104 
3105                  <#assign PDFJson=jsonFactoryUtil.createJSONObject(quaisMateriaisComercialPDFStr) 
3106                    classPKNumber=PDFJson.classPK?number fileEntry=dlFileEntryLocalService.getDLFileEntry(classPKNumber) 
3107                    folderId=fileEntry.getFolderId() title=fileEntry.getTitle() 
3108                    quaisMateriaisComercialPDFUrl=themeDisplay.getPortalURL() + themeDisplay.getPathContext() 
3109                    + "/documents/" + themeDisplay.getScopeGroupId() + StringPool.SLASH + folderId + StringPool.SLASH + 
3110                    URLCodec.encodeURL(HtmlUtil.unescape(title)) /> 
3111 
3112                  <#else> 
3113                    <#assign quaisMateriaisComercialPDFUrl=""> 
3114                </#if> 
3115 
3116                <#function getStatusListaEsperaEMED> 
3117                  <#attempt> 
3118                    <#local controlService=serviceLocator.findService("br.senac.services.api.BooleanControl") /> 
3119                    <#if controlService??> 
3120                      <#return controlService.isEnabled("listaEsperaEMED") /> 
3121                    </#if> 
3122                    <#recover> 
3123                  </#attempt> 
3124                  <#return false /> 
3125                </#function> 
3126 
3127                <#function getFirstArticleStructure categoryId structureName> 
3128                  <#attempt> 
3129                    <#assign searchImpl=serviceLocator.findService("br.senac.search.api.Search")> 
3130                      <#assign companyId=themeDisplay.getCompanyId()> 
3131                        <#assign groupId=themeDisplay.getScopeGroupId()> 
3132                          <#assign articles=searchImpl.findArticlesByCategoryIds(companyId, groupId, structureName, 
3133                            (categoryId gt 0)?then([categoryId],[]), true, 0, 1)> 
3134                            <#if articles?size gt 0> 
3135                              <#return articles?first> 
3136                            </#if> 
3137                            <#return ''> 
3138                              <#recover> 
3139                                <#return ''> 
3140                  </#attempt> 
3141                </#function> 
3142 
3143 
3144                <#assign nomeTipoCurso=categoriaTipoCurso.getName() nomeCategoriaTipoCurso=categoriaTipoCurso.getName() 
3145                  idTipoCurso=categoriaTipoCurso.getCategoryId() /> 
3146                <input type="hidden" name="nomeCategoriaTipoCurso" value="${nomeCategoriaTipoCurso}" /> 
3147 
3148                <#if nomeTipoCurso?contains("Ensino Médio Técnico")> 
3149 
3150                  <#assign nomeTipoCurso=categoriaTipoCurso.getName() /> 
3151 
3152                  <input type="hidden" name="idTipoCurso" value="${idTipoCurso}" /> 
3153 
3154                  <#elseif (nomeTipoCurso?contains("cnico") && !nomeTipoCurso?contains("EAD") ) || 
3155                    nomeTipoCurso?contains("Livre")> 
3156 
3157                    <#assign nomeTipoCurso="Cursos " + categoriaTipoCurso.getName() + "s" /> 
3158 
3159                    <#else> 
3160                      <#assign nomeTipoCurso=categoriaTipoCurso.getName() /> 
3161                      <#assign nomeTipoCurso=categoriaTipoCurso.getName() /> 
3162 
3163                </#if> 
3164 
3165                <#-- Caso o curso seja do formato hibrido, busca o webcontent da pasta Onde as aulas vão acontecer - 
3166                  hibrido --> 
3167                  <#if nomeFormato=="Presencial + EAD"> 
3168                    <#assign hibridoStructure=getFirstArticleStructure(idFormato,"formato-hibrido") 
3169                      documentHibrido=saxReaderUtil.read(hibridoStructure.getContent()) 
3170                      rootElement=documentHibrido.getRootElement() 
3171                      xPathSelector=saxReaderUtil.createXPath("dynamic-element[@field-reference='textoFormatoHibrido' 
3172                      ]") /> 
3173                    <#if xPathSelector.selectSingleNode(rootElement)??> 
3174                      <#assign txtHibrido=xPathSelector.selectSingleNode(rootElement).getStringValue()?trim /> 
3175                      <input type="hidden" name="textoFormatoHibrido" value="${txtHibrido}" /> 
3176                    </#if> 
3177                  </#if> 
3178 
3179 
3180                  <#-- dados de compartilhamento --> 
3181                    <@liferay_util["html-top"]> 
3182                      <meta name="image" property="og:image" content="${imagemUrl}"> 
3183                      <meta property="og:image:width" content="1024"> 
3184                      </@> 
3185                      <#-- dados de compartilhamento --> 
3186 
3187 
3188                        <#assign 
3189                          webContentServiceUtil=serviceLocator.findService("br.senac.services.service.WebContentServiceUtil") 
3190                          temasMercadologicos=webContentServiceUtil.getTemasPorArticleId(themeDisplay.getScopeGroupId(), 
3191                          journalArticle) categoriesIdiomas=temasMercadologicos?filter(c -> 
3192                          c.getName()?lower_case?contains("idioma")) 
3193                          hasIdiomas = categoriesIdiomas?has_content 
3194                          hasEMED = normalizedModalidadeName?contains("ensino-medio") 
3195                          /> 
3196 
3197                          <#function getManutencao> 
3198 
3199                            <#assign manutencaoStructure=getFirstArticleStructure(idTipoCurso,"manutencoes") /> 
3200                            <#if manutencaoStructure==""> 
3201                              <#return {"bolsa":"", "compra" :"", "rodape" :""} /> 
3202                            </#if> 
3203                            <#assign txtBolsa="" txtCompra="" txtRodape="" 
3204                              content=saxReaderUtil.read(manutencaoStructure.getContent()) 
3205                              rootElement=content.getRootElement() /> 
3206                            <#assign 
3207                              xPathSelector=saxReaderUtil.createXPath("dynamic-element[@field-reference='chkManutencaoBolsa' 
3208                              ]") /> 
3209                            <#if xPathSelector.selectSingleNode(rootElement).getStringValue()?trim=="true"> 
3210                              <#assign 
3211                                xPathSelector=saxReaderUtil.createXPath("dynamic-element[@field-reference='txtManutencaoBolsa' 
3212                                ]") /> 
3213                              <#assign txtBolsa=xPathSelector.selectSingleNode(rootElement).getStringValue()?trim /> 
3214                            </#if> 
3215                            <#assign 
3216                              xPathSelector=saxReaderUtil.createXPath("dynamic-element[@field-reference='chkManutencaoCompra' 
3217                              ]") /> 
3218                            <#if xPathSelector.selectSingleNode(rootElement).getStringValue()?trim=="true"> 
3219                              <#assign 
3220                                xPathSelector=saxReaderUtil.createXPath("dynamic-element[@field-reference='txtManutencaoCompra' 
3221                                ]") /> 
3222                              <#assign txtCompra=xPathSelector.selectSingleNode(rootElement).getStringValue()?trim /> 
3223                            </#if> 
3224                            <#if txtCompra !="" || txtBolsa !=""> 
3225                              <#assign 
3226                                xPathSelector=saxReaderUtil.createXPath("dynamic-element[@field-reference='txtManutencaoRodape' 
3227                                ]") /> 
3228                              <#assign txtRodape=xPathSelector.selectSingleNode(rootElement).getStringValue()?trim /> 
3229                            </#if> 
3230 
3231                            <#return {"bolsa": txtBolsa, "compra" : txtCompra, "rodape" : txtRodape} /> 
3232 
3233                          </#function> 
3234 
3235                          <#assign listaEsperaAtiva=getStatusListaEsperaEMED() /> 
3236 
3237                          <#assign manutencao=getManutencao() /> 
3238                          <input type="hidden" id="manutencao-compra" value="${manutencao.compra}" /> 
3239                          <input type="hidden" id="manutencao-bolsa" value="${manutencao.bolsa}" /> 
3240 
3241                          <div class="${prefix}-header-curso__image"> 
3242                            <#if imagemUrl?contains(".webp")> 
3243                              <#-- Remove midias adaptaveis --> 
3244                                <picture> 
3245                                  <img class="ssp-image-opacity" src="${imagemUrl}" <#if imagemAlt?length !=0> 
3246                                  alt="${imagemAlt}" 
3247                            </#if> loading="lazy"> 
3248                            </picture> 
3249                            <#else> 
3250                              <img class="ssp-image-opacity" src="${imagemUrl}" <#if imagemAlt?length !=0> 
3251                              alt="${imagemAlt}" 
3252      </#if> loading="lazy"> 
3253</#if> 
3254<div class="${prefix}-header-curso__tag-formato bg-nivel-${normalizedCategoryName}"> 
3255  <#if hasIdiomas> 
3256    <span>${nomeTipoCurso}</span> 
3257    <#else> 
3258      <span>${nomeTipoCurso} | ${nomeFormato}</span> 
3259  </#if> 
3260</div> 
3261</div> 
3262 
3263<section id="curso-info"> 
3264  <div class="ssp-card-detalhe-curso__container"> 
3265 
3266    <div class="ssp-card-detalhe-curso"> 
3267 
3268      <div class="ssp-card-detalhe-curso__tag-color-tipo bg-nivel-${normalizedCategoryName}"></div> 
3269 
3270      <div class="container"> 
3271 
3272        <#if nomeFormato?contains("ao-vivo")> 
3273          <span class="ssp-card-detalhe-curso__tag-ao-vivo">Senac Online<i class="fas fa-signal-stream icon-ao-vivo" 
3274              aria-hidden="true"></i>ao vivo</span> 
3275 
3276        </#if> 
3277 
3278        <div class="ssp-card-detalhe-curso__content"> 
3279          <div> 
3280 
3281            <!-- <#if nomeTipoCurso?contains("Ensino Médio Técnico")> 
3282 
3283                     <p class="ssp-txt-emed__inscricoes-aberta">Inscrições abertas</p> 
3284 
3285                    </#if> --> 
3286 
3287            <!-- rever a lógica da chama de inscricoes abertas --> 
3288 
3289                    <h1 class="ssp-card-detalhe-curso__title">${tituloComercial}</h1> 
3290                    <input type="hidden" name="tituloComercial" value="${tituloComercial}" /> 
3291 
3292                    <#-- Tags de modalidade: Presencial (informativa) + Conferir curso EAD --> 
3293                    <#-- getStringValue casa por @name (autogerado nos campos novos do Form Builder atual); 
3294                         linkCursoEad guarda o identificador em @field-reference, mesmo padrão 
3295                         já usado no resto deste arquivo pra imagemComercial/quaisMateriaisComercial. 
3296                         A existência de curso EAD semelhante é validada só pelo linkCursoEad preenchido. --> 
3297                    <#assign xPathSelector_linkCursoEad = saxReaderUtil.createXPath("//dynamic-element[@field-reference='linkCursoEad']") /> 
3298                    <#assign linkCursoEad = ((xPathSelector_linkCursoEad.selectSingleNode(document).getStringValue())!"")?trim /> 
3299                    <#-- Artigos salvos antes da criação do campo trazem o texto "null" --> 
3300                    <#if linkCursoEad?lower_case == "null"> 
3301                      <#assign linkCursoEad = "" /> 
3302                    </#if> 
3303                    <#if normalizedCategoryName == "extensao" 
3304                        && linkCursoEad?has_content> 
3305                      <div class="ssp-modalidade-curso ssp-modalidade-curso--${normalizedCategoryName}"> 
3306                        <span class="ssp-modalidade-curso__tag ssp-modalidade-curso__tag--presencial">Presencial</span> 
3307                        <button type="button" class="ssp-modalidade-curso__tag ssp-modalidade-curso__tag--ead" data-url-ead="${linkCursoEad}"> 
3308                          Conferir curso EAD 
3309                          <svg class="ssp-modalidade-curso__icon" width="20" height="20" viewBox="0 0 20 20" fill="none" aria-hidden="true" focusable="false"> 
3310                            <path d="M8.5 4.5H5.5C4.95 4.5 4.5 4.95 4.5 5.5V14.5C4.5 15.05 4.95 15.5 5.5 15.5H14.5C15.05 15.5 15.5 15.05 15.5 14.5V11.5" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/> 
3311                            <path d="M11.5 4.5H15.5V8.5M15.5 4.5L9.5 10.5" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/> 
3312                          </svg> 
3313                        </button> 
3314                      </div> 
3315 
3316                      <script> 
3317                          (() => { 
3318                              document.querySelectorAll('.ssp-modalidade-curso__tag--ead').forEach((el) => { 
3319                                  el.addEventListener('click', (event) => { 
3320                                      const url = el.dataset.urlEad; 
3321                                      if (!url) return; 
3322                                      event.preventDefault(); 
3323                                      Templates.SenacEad.openWithUrl(url, 'modal-senac-ead'); 
3324                                  }); 
3325                              }); 
3326                          })(); 
3327                      </script> 
3328                    </#if> 
3329 
3330            <div class="ssp-card-detalhe-curso__description">${objetivo}</div> 
3331          </div> 
3332          <div class="ssp-card-detalhe-curso__secunday-info-content"> 
3333 
3334            <#if nomeFormato?contains("ao-vivo")> 
3335              <span class="d-md-none"> 
3336                <a class="ssp-card-detalhe-curso__secunday-info-back-link" href="#" 
3337                  style="color: #ff9057;">${categoriaTipoCurso.getName()}</a> 
3338                <#if !hasIdiomas> 
3339                  <span> | ${nomeFormato}</span> 
3340                </#if> 
3341              </span> 
3342 
3343              <#else> 
3344                <span class="d-md-none"> 
3345                  <a class="ssp-card-detalhe-curso__secunday-info-back-link" 
3346                    href="#">${categoriaTipoCurso.getName()}</a> 
3347                  <#if !hasIdiomas> 
3348                    <span> | ${nomeFormato}</span> 
3349                  </#if> 
3350                </span> 
3351 
3352            </#if> 
3353 
3354            <p class="ssp-card-detalhe-curso__secundary-info-carga-horaria">${cargaHoraria} horas</p> 
3355          </div> 
3356        </div> 
3357        <div class="ssp-saiba-mais-curso-accordion"> 
3358 
3359          <#if (possoFazerEsteCursoComercial?length> 0)> 
3360            <div class="ssp-saiba-mais-curso-accordion__body"> 
3361              <div class="ssp-saiba-mais-curso-accordion__heading" role="button">Posso fazer este curso?</div> 
3362              <div class="ssp-saiba-mais-curso-accordion__contents">${possoFazerEsteCursoComercial}</div> 
3363            </div> 
3364 
3365          </#if> 
3366 
3367          <#if (oQueVouAprenderComercial?length> 0) > 
3368            <div class="ssp-saiba-mais-curso-accordion__body"> 
3369              <div class="ssp-saiba-mais-curso-accordion__heading" role="button">O que vou aprender?</div> 
3370              <div class="ssp-saiba-mais-curso-accordion__contents" id="plano-curso">${oQueVouAprenderComercial}</div> 
3371            </div> 
3372          </#if> 
3373 
3374          <#if (comoVouAprenderComercial?length> 0)> 
3375            <div class="ssp-saiba-mais-curso-accordion__body"> 
3376              <div class="ssp-saiba-mais-curso-accordion__heading" role="button">Como vou aprender?</div> 
3377              <div class="ssp-saiba-mais-curso-accordion__contents">${comoVouAprenderComercial}</div> 
3378            </div> 
3379          </#if> 
3380 
3381 
3382          <div class="ssp-saiba-mais-curso-accordion__body"> 
3383            <div class="ssp-saiba-mais-curso-accordion__heading" role="button">Quais materiais vou precisar?</div> 
3384            <#if nomeTipoCurso?contains("Ensino Médio Técnico")> 
3385              <div class="ssp-saiba-mais-curso-accordion__contents"> 
3386                Desenvolvemos os materiais e disponibilizamos tudo para você!<br /><br />Também temos bibliotecas 
3387                físicas e virtuais, além de parceria com a Microsoft, que garante acesso à plataforma Teams para 
3388                conferir aulas, avisos e materiais da sua turma. 
3389              </div> 
3390              <#else> 
3391                <#if (quaisMateriaisComercialPDFUrl?length> 0)> 
3392                  <div class="ssp-saiba-mais-curso-accordion__contents"> 
3393                    <a href="${quaisMateriaisComercialPDFUrl}" target="_blank"><i class="fa fa-download" 
3394                        aria-hidden="true"></i> Confira os materiais que você precisará.</a> 
3395                  </div> 
3396                  <#else> 
3397                    <div class="ssp-saiba-mais-curso-accordion__contents">Inicialmente, não há lista de materiais para 
3398                      este curso. Mas confirme em aula se será necessário comprar algum item.</div> 
3399                </#if> 
3400            </#if> 
3401          </div> 
3402 
3403          <#if (tereiDiplomaComercial?length> 0)> 
3404            <div class="ssp-saiba-mais-curso-accordion__body"> 
3405              <div class="ssp-saiba-mais-curso-accordion__heading" role="button">Terei diploma?</div> 
3406              <div class="ssp-saiba-mais-curso-accordion__contents">${tereiDiplomaComercial}</div> 
3407            </div> 
3408          </#if> 
3409 
3410          <#if (tereiCertificadoComercial?length> 0)> 
3411            <div class="ssp-saiba-mais-curso-accordion__body"> 
3412              <div class="ssp-saiba-mais-curso-accordion__heading" role="button">Terei certificado?</div> 
3413              <div class="ssp-saiba-mais-curso-accordion__contents">${tereiCertificadoComercial}</div> 
3414            </div> 
3415          </#if> 
3416 
3417          <#if (comoMeMatricularComercial?length> 0)> 
3418            <div class="ssp-saiba-mais-curso-accordion__body"> 
3419              <div class="ssp-saiba-mais-curso-accordion__heading" role="button">Como me matricular?</div> 
3420              <div class="ssp-saiba-mais-curso-accordion__contents">${comoMeMatricularComercial}</div> 
3421            </div> 
3422          </#if> 
3423 
3424          <#if (precisoEstagiarComercial?length> 0)> 
3425            <div class="ssp-saiba-mais-curso-accordion__body"> 
3426              <div class="ssp-saiba-mais-curso-accordion__heading" role="button">Preciso estagiar?</div> 
3427              <div class="ssp-saiba-mais-curso-accordion__contents">${precisoEstagiarComercial}</div> 
3428            </div> 
3429          </#if> 
3430 
3431 
3432          <#if (oQueMaisPrecisoSaberComercial?length> 0)> 
3433            <div class="ssp-saiba-mais-curso-accordion__body"> 
3434              <#if nomeTipoCurso?contains("Ensino Médio Técnico")> 
3435                <div class="ssp-saiba-mais-curso-accordion__heading" role="button">Estudo em outra escola, como funciona 
3436                  a transferência?</div> 
3437                <#else> 
3438                  <div class="ssp-saiba-mais-curso-accordion__heading" role="button">O que mais preciso saber?</div> 
3439              </#if> 
3440              <div class="ssp-saiba-mais-curso-accordion__contents">${oQueMaisPrecisoSaberComercial}</div> 
3441            </div> 
3442          </#if> 
3443 
3444          <!-- Info para EMED --> 
3445 
3446          <#if nomeTipoCurso?contains("Ensino Médio Técnico")> 
3447 
3448            <div class="ssp-emed__vantagens-content"> 
3449 
3450              <p>Conheça <span>mais vantagens</span> do Ensino Médio Técnico no Senac.</p> 
3451              <a href="/ensino-medio-tecnico" class="btn">Saiba mais</a> 
3452 
3453            </div> 
3454 
3455            <#elseif nomeFormato?contains("Presencial") && nomeFormato?contains("EAD") && 
3456              !nomeTipoCurso?contains("Idioma")> 
3457 
3458              <!-- Info para híbrido --> 
3459 
3460              <div class="ssp-emed__vantagens-content ${normalizedCategoryName}"> 
3461 
3462                <p>Quer saber mais sobre nossos <span>cursos com aulas presenciais e a distância</span>?</p> 
3463                <a href="/presencial-ead" class="btn">Saiba mais</a> 
3464 
3465              </div> 
3466 
3467              <#else> 
3468 
3469                <!-- <div class="ssp-emed__vantagens-content ${normalizedCategoryName}"> 
3470                                                                                                         
3471                      <p>Conheça <span>mais vantagens</span>?</p> 
3472                      <a href="#" class="btn">Saiba mais</a> 
3473                   
3474                    </div> --> 
3475 
3476          </#if> 
3477 
3478 
3479          <!-- Slider para cursos de Cozinheiro e Garçom --> 
3480 
3481          <#if codigoFT=="14125"> 
3482 
3483            <div> 
3484 
3485              <h6 
3486                style="font-family: Montserrat;font-size: 20px;font-weight: 600;color: #2a2e43;padding: 15px;border-top: 1px solid #e7e7e7;"> 
3487                Quer participar do processo seletivo? Confira todas as etapas:</h6> 
3488 
3489 
3490              <div class="slider-passo-passo__cursos-cozinha"> 
3491 
3492                <div class="ssp-passo-passo-cozinheiro_card"> 
3493 
3494                  <div> 
3495 
3496                    <h6 class="ssp-passo-passo-cozinheiro_card-title">Abertura do processo</h6> 
3497 
3498                    <p class="ssp-passo-passo-cozinheiro_card-txt">Primeiro, confirme se você atende aos pré-requisitos 
3499                      para se inscrever em <a class="ssp-passo-passo-cozinheiro_card-link" 
3500                        href="/bolsas-de-estudo">bolsas de estudo</a>. Depois, confira no campo "Como me matricular?" o 
3501                      cronograma de abertura das inscrições do processo seletivo. </p> 
3502 
3503                  </div> 
3504 
3505 
3506                </div> 
3507 
3508                <div class="ssp-passo-passo-cozinheiro_card"> 
3509 
3510                  <div> 
3511 
3512                    <h6 class="ssp-passo-passo-cozinheiro_card-title">Inscrições</h6> 
3513 
3514                    <p class="ssp-passo-passo-cozinheiro_card-txt">Quando o processo seletivo abrir, faça login no site, 
3515                      acesse a página do curso, selecione a unidade e realize a inscrição, que é gratuita. As inscrições 
3516                      podem ser encerradas antes da data divulgada, quando alcançarmos 3 inscrições por vaga.</p> 
3517 
3518                  </div> 
3519 
3520                </div> 
3521 
3522                <div class="ssp-passo-passo-cozinheiro_card"> 
3523 
3524                  <div> 
3525 
3526                    <h6 class="ssp-passo-passo-cozinheiro_card-title">Convocação para entrevista</h6> 
3527 
3528                    <p class="ssp-passo-passo-cozinheiro_card-txt"> 
3529                      Ao finalizar sua inscrição no processo seletivo, você receberá uma confirmação no e-mail que 
3530                      cadastrou no nosso site. Também vamos enviar para o seu e-mail o convite para a entrevista e as 
3531                      orientações sobre envio dos documentos necessários. 
3532                    </p> 
3533 
3534 
3535                  </div> 
3536 
3537                </div> 
3538 
3539                <div class="ssp-passo-passo-cozinheiro_card"> 
3540 
3541                  <div> 
3542 
3543                    <h6 class="ssp-passo-passo-cozinheiro_card-title">Entrevista</h6> 
3544 
3545                    <p class="ssp-passo-passo-cozinheiro_card-txt">A entrevista poderá ser on-line ou presencial nos 
3546                      hotéis-escola Senac. Se você não participar, sua inscrição é cancelada automaticamente. Antes da 
3547                      entrevista, não esqueça de enviar os documentos por e-mail. 
3548                    </p> 
3549 
3550 
3551                  </div> 
3552 
3553                </div> 
3554 
3555                <div class="ssp-passo-passo-cozinheiro_card"> 
3556 
3557                  <div> 
3558 
3559                    <h6 class="ssp-passo-passo-cozinheiro_card-title">Resultado</h6> 
3560 
3561                    <p class="ssp-passo-passo-cozinheiro_card-txt"> 
3562                      Até 7 dias depois de ter feito a entrevista, você receberá a resposta por e-mail sobre o resultado 
3563                      do processo seletivo. 
3564                    </p> 
3565 
3566                  </div> 
3567 
3568                </div> 
3569 
3570                <div class="ssp-passo-passo-cozinheiro_card"> 
3571 
3572                  <div> 
3573 
3574                    <h6 class="ssp-passo-passo-cozinheiro_card-title">Matrícula</h6> 
3575 
3576                    <p class="ssp-passo-passo-cozinheiro_card-txt"> 
3577                      Se receber a aprovação, a próxima etapa é fazer a matrícula. Lembre-se de enviar os documentos, 
3578                      inclusive os exames solicitados no e-mail. 
3579                    </p> 
3580 
3581                  </div> 
3582 
3583                </div> 
3584 
3585                <div class="ssp-passo-passo-cozinheiro_card"> 
3586 
3587                  <div> 
3588 
3589                    <h6 class="ssp-passo-passo-cozinheiro_card-title">Início do curso!</h6> 
3590 
3591                    <p class="ssp-passo-passo-cozinheiro_card-txt"> 
3592                      Teve aprovação em todas as etapas? Parabéns! 
3593 
3594                      Sua jornada de transformação profissional 
3595 
3596                      começará com o início das aulas. Mas se não 
3597 
3598                      conseguiu dessa vez, não desanime. Sempre estamos com 
3599 
3600                      vagas abertas para diversos cursos. 
3601                    </p> 
3602 
3603                  </div> 
3604 
3605                </div> 
3606 
3607 
3608              </div> 
3609 
3610            </div> 
3611 
3612            <#elseif codigoFT=="15390"> 
3613 
3614              <div> 
3615 
3616                <h6 
3617                  style="font-family: Montserrat;font-size: 20px;font-weight: 600;color: #2a2e43;padding: 15px;border-top: 1px solid #e7e7e7;"> 
3618                  Quer participar do processo seletivo? Confira todas as etapas:</h6> 
3619 
3620                <div class="slider-passo-passo__cursos-cozinha"> 
3621 
3622                  <div class="ssp-passo-passo-cozinheiro_card"> 
3623 
3624                    <div> 
3625 
3626                      <h6 class="ssp-passo-passo-cozinheiro_card-title">Abertura do processo</h6> 
3627 
3628                      <p class="ssp-passo-passo-cozinheiro_card-txt">Primeiro, confirme se você atende aos 
3629                        pré-requisitos para se inscrever em <a class="ssp-passo-passo-cozinheiro_card-link" 
3630                          href="/bolsas-de-estudo">bolsas de estudo</a>. Depois, confira no campo "Como me matricular?" 
3631                        o cronograma de abertura das inscrições do processo seletivo. </p> 
3632 
3633                    </div> 
3634 
3635 
3636                  </div> 
3637 
3638                  <div class="ssp-passo-passo-cozinheiro_card"> 
3639 
3640                    <div> 
3641 
3642                      <h6 class="ssp-passo-passo-cozinheiro_card-title">Inscrições</h6> 
3643 
3644                      <p class="ssp-passo-passo-cozinheiro_card-txt">Quando o processo seletivo abrir, faça login no 
3645                        site, acesse a página do curso, selecione a unidade e realize a inscrição, que é gratuita. As 
3646                        inscrições podem ser encerradas antes da data divulgada, quando alcançarmos 3 inscrições por 
3647                        vaga.</p> 
3648 
3649                    </div> 
3650 
3651                  </div> 
3652 
3653                  <div class="ssp-passo-passo-cozinheiro_card"> 
3654 
3655                    <div> 
3656 
3657                      <h6 class="ssp-passo-passo-cozinheiro_card-title">Convocação para entrevista</h6> 
3658 
3659                      <p class="ssp-passo-passo-cozinheiro_card-txt"> 
3660                        Ao finalizar sua inscrição no processo seletivo, você receberá uma confirmação no e-mail que 
3661                        cadastrou no nosso site. Também vamos enviar para o seu e-mail o convite para a entrevista e as 
3662                        orientações sobre envio dos documentos necessários. 
3663                      </p> 
3664 
3665 
3666                    </div> 
3667 
3668                  </div> 
3669 
3670                  <div class="ssp-passo-passo-cozinheiro_card"> 
3671 
3672                    <div> 
3673 
3674                      <h6 class="ssp-passo-passo-cozinheiro_card-title">Entrevista</h6> 
3675 
3676                      <p class="ssp-passo-passo-cozinheiro_card-txt">A entrevista poderá ser on-line ou presencial nos 
3677                        hotéis-escola Senac. Se você não participar, sua inscrição é cancelada automaticamente. Antes da 
3678                        entrevista, não esqueça de enviar os documentos por e-mail. 
3679                      </p> 
3680 
3681 
3682                    </div> 
3683 
3684                  </div> 
3685 
3686                  <div class="ssp-passo-passo-cozinheiro_card"> 
3687 
3688                    <div> 
3689 
3690                      <h6 class="ssp-passo-passo-cozinheiro_card-title">Resultado</h6> 
3691 
3692                      <p class="ssp-passo-passo-cozinheiro_card-txt"> 
3693                        Até 7 dias depois de ter feito a entrevista, você receberá a resposta por e-mail sobre o 
3694                        resultado do processo seletivo. 
3695                      </p> 
3696 
3697                    </div> 
3698 
3699                  </div> 
3700 
3701                  <div class="ssp-passo-passo-cozinheiro_card"> 
3702 
3703                    <div> 
3704 
3705                      <h6 class="ssp-passo-passo-cozinheiro_card-title">Matrícula</h6> 
3706 
3707                      <p class="ssp-passo-passo-cozinheiro_card-txt"> 
3708                        Se receber a aprovação, a próxima etapa é fazer a matrícula. Lembre-se de enviar os documentos, 
3709                        inclusive os exames solicitados no e-mail. 
3710                      </p> 
3711 
3712                    </div> 
3713 
3714                  </div> 
3715 
3716                  <div class="ssp-passo-passo-cozinheiro_card"> 
3717 
3718                    <div> 
3719 
3720                      <h6 class="ssp-passo-passo-cozinheiro_card-title">Início do curso!</h6> 
3721 
3722                      <p class="ssp-passo-passo-cozinheiro_card-txt"> 
3723                        Teve aprovação em todas as etapas? Parabéns! 
3724 
3725                        Sua jornada de transformação profissional 
3726 
3727                        começará com o início das aulas. Mas se não 
3728 
3729                        conseguiu dessa vez, não desanime. Sempre estamos com 
3730 
3731                        vagas abertas para diversos cursos. 
3732                      </p> 
3733 
3734                    </div> 
3735 
3736                  </div> 
3737 
3738 
3739                </div> 
3740 
3741              </div> 
3742 
3743          </#if> 
3744 
3745          <!-- Final Slider para cursos de Cozinheiro e Garçom --> 
3746 
3747        </div> 
3748      </div> 
3749    </div> 
3750  </div> 
3751</section> 
3752<#assign dNoneSelectUnidade='' mostrarUnidades=!nomeFormato?contains("ao-vivo") 
3753  isEMED=normalizedCategoryName?contains("ensino-medio-tecnico") 
3754  isAprendizagem=normalizedCategoryName?contains("jovem-aprendiz") /> 
3755 
3756<#if nomeFormato?contains("ao-vivo")> 
3757  <#assign dNoneSelectUnidade='d-none' /> 
3758</#if> 
3759 
3760<#-- Obter data matricula emed --> 
3761  <#if isEMED> 
3762    <#function getMatriculaEMED> 
3763      <#assign emedTags=getFirstArticleStructure(0,"emed-tags") document=saxReaderUtil.read(emedTags.getContent()) 
3764        rootElement=document.getRootElement() 
3765        xPathSelector=saxReaderUtil.createXPath("dynamic-element[@field-reference='dataInicioPeriodoMatricula' ]") /> 
3766      <#if xPathSelector.selectSingleNode(rootElement)??> 
3767        <#assign dataInicio=xPathSelector.selectSingleNode(rootElement).getStringValue()?trim /> 
3768      </#if> 
3769      <#assign xPathSelector=saxReaderUtil.createXPath("dynamic-element[@field-reference='horaInicioMatricula' ]") /> 
3770      <#if xPathSelector.selectSingleNode(rootElement)??> 
3771        <#assign horaInicio=xPathSelector.selectSingleNode(rootElement).getStringValue()?trim /> 
3772      </#if> 
3773 
3774      <#setting time_zone="America/Sao_Paulo"> 
3775        <#assign today=.now?datetime /> 
3776        <#assign emeddatetime=(dataInicio + " " + horaInicio)?datetime["yyyy-MM-dd HH:mm"] /> 
3777        <#assign matriculaAberta=today gt emeddatetime /> 
3778 
3779        <#return {"dataInicio" : dataInicio, "horaInicio" : horaInicio, "aberta" : matriculaAberta}> 
3780    </#function> 
3781 
3782    <#assign matriculaEMED=getMatriculaEMED() /> 
3783 
3784  </#if> 
3785 
3786  <#if isEMED || isAprendizagem> 
3787    <section class="ssp-section-selecione-unidade ssp-section ${dNoneSelectUnidade}" style="background:#2B2E41"> 
3788      <div class="container"> 
3789 
3790        <div class="ssp-container-selecione-unidade" style="max-width: 815px; margin: auto;"> 
3791          <div class="ssp-container_ofertas__title"> 
3792            <h3 class="ssp-aviso-novas-turmas__title selecione-unidade-title-custom"> 
3793 
3794              Selecione uma unidade para conhecer as próximas turmas: 
3795 
3796            </h3> 
3797          </div> 
3798 
3799          <div class="ssp-container__form-select"> 
3800            <select id="unidades-ofertas" class="form-control" name="unidades-ofertas"> 
3801              <option value="">Selecione uma unidade</option> 
3802            </select> 
3803          </div> 
3804 
3805        </div> 
3806 
3807        <div class="ssp-ofertas__box-endereco-unidade"> 
3808          <i class="icon-map-adress"></i> 
3809          <a href="" target="_blank" class="ssp-ofertas__endereco-unidade"></a> 
3810        </div> 
3811 
3812      </div> 
3813 
3814    </section> 
3815    <#else> 
3816      <section class="ssp-section-selecione-unidade ssp-section" style="background:#2B2E41"> 
3817        <div class="container"> 
3818          <div class="ssp-container-selecione-unidade ${dNoneSelectUnidade} row no-gutters mb-lg-8"> 
3819            <div class="ssp-container_ofertas__title"> 
3820              <h2 class="ssp-aviso-novas-turmas__title selecione-unidade-title-custom ssp-detalhe-curso-titulo-filter"> 
3821                Escolha a unidade e conheça as turmas disponíveis:</h2> 
3822            </div> 
3823          </div> 
3824          <div class="row ssp-filters-px justify-content-center"> 
3825            <div class="col-12 col-lg ${dNoneSelectUnidade} px-md-0 order-1"> 
3826              <div class="ssp-container-selecione-unidade row no-gutters"> 
3827                <div class="col-12"> 
3828                  <div class="ssp-container__form-select mx-auto"> 
3829                    <label for="unidades-ofertas" 
3830                      class="ssp-switch-label ssp-switch-label-section mx-0 d-none d-lg-block">Selecione uma 
3831                      unidade:</label> 
3832                    <select id="unidades-ofertas" class="form-control" name="unidades-ofertas"></select> 
3833                  </div> 
3834                </div> 
3835              </div> 
3836            </div> 
3837 
3838            <div id="ssp-alternadores" 
3839              class="col mt-5 mt-lg-0 ${(isEMED || isAprendizagem)?then('d-none', '')} px-md-0 order-3 order-lg-2" 
3840              style="max-width: 480px; display: none;"> 
3841              <div class="row no-gutters ssp-switch-label ssp-switch-label-section mx-0">Filtre por:</div> 
3842              <div class="row no-gutters mt-4"> 
3843                <#assign mostrarFiltroInscricao=(nomeTipoCurso?contains("Técnico") && !nomeTipoCurso?contains("Ensino 
3844                  Médio")) || nomeTipoCurso?contains("Livre") || nomeTipoCurso?contains("Extensão") 
3845                  mostrarFiltroBolsa=(nomeTipoCurso?contains("Técnico") && !nomeTipoCurso?contains("Ensino Médio")) || 
3846                  (nomeTipoCurso?contains("Livre") && !normalizedModalidadeName?contains("acoes-educ.-curta-duracao")) 
3847                  textoFiltroCompra=(nomeTipoCurso?contains("Livre") && 
3848                  normalizedModalidadeName?contains("acoes-educ.-curta-duracao"))?then("Matrículas 
3849                  abertas", "Comprar agora" ) /> 
3850 
3851 
3852                <#if mostrarFiltroInscricao && mostrarFiltroBolsa> 
3853                  <div class="ssp-switch-divider d-md-none my-4"></div> 
3854                </#if> 
3855 
3856                <#if mostrarFiltroInscricao> 
3857                  <div class="col-12 col-lg"> 
3858                    <div class="d-flex justify-content-between justify-content-lg-start"> 
3859                      <label class="ssp-switch order-2 order-lg-1"> 
3860                        <input type="checkbox" id="chkInscricao"> 
3861                        <span class="ssp-switch-slider round"></span> 
3862                      </label> 
3863                      <label for="chkInscricao" class="ssp-switch-label order-1 order-lg-2">${textoFiltroCompra}</label> 
3864                    </div> 
3865                  </div> 
3866                </#if> 
3867 
3868 
3869                <#if mostrarFiltroBolsa> 
3870                  <div class="col-12 col-lg"> 
3871                    <div class="d-flex justify-content-between justify-content-lg-start"> 
3872                      <label class="ssp-switch order-2 order-lg-1"> 
3873                        <input type="checkbox" id="chkBolsa"> 
3874                        <span class="ssp-switch-slider ssp-switch-slider-secondary round"></span> 
3875                      </label> 
3876                      <label for="chkBolsa" class="ssp-switch-label order-1 order-lg-2">Bolsas de estudo</label> 
3877                    </div> 
3878                  </div> 
3879                </#if> 
3880              </div> 
3881            </div> 
3882 
3883            <div class="col-12 order-2 order-lg-3"> 
3884              <div class="row ${mostrarUnidades?then('text-center text-lg-left', 'text-center')}"> 
3885                <div id="msgFiltroAplicado" class="col-12 ssp-switch-label-message" style="display: none;"> 
3886                  <div class="row no-gutters"> 
3887                    <span class="col-12 ssp-col-lg-without ${mostrarUnidades?then('', 'ml-auto')}">Filtro aplicado com 
3888                      sucesso.&nbsp;</span> 
3889                    <span class="col-12 ssp-col-lg-without ${mostrarUnidades?then('', 'mr-auto')}">Confira o 
3890                      resultado.</span> 
3891                  </div> 
3892                </div> 
3893              </div> 
3894            </div> 
3895          </div> 
3896 
3897          <div class="ssp-ofertas__box-endereco-unidade ${dNoneSelectUnidade}"> 
3898            <i class="icon-map-adress"></i> 
3899            <a href="" target="_blank" class="ssp-ofertas__endereco-unidade"></a> 
3900          </div> 
3901 
3902        </div> 
3903 
3904      </section> 
3905  </#if> 
3906 
3907 
3908  <!--  EMED	 --> 
3909  <section class="ssp-ofertas-emed__section d-none"> 
3910 
3911    <h2 class="title-section-white" id="titulo-emed"></h2> 
3912 
3913    <div class="ssp-ofertas-emed__filtro-content container"> 
3914 
3915      <button type="button" value="0010" class="btn btn-filtro btn--filtro-ativo">Turmas - 1º ano</button> 
3916 
3917      <button type="button" value="0" class="btn btn-filtro">Transferências</button> 
3918 
3919    </div> 
3920 
3921    <div class="ssp-ofertas-emed__card-container"> 
3922 
3923      <div class="ssp-slick-ofertas-emed"> 
3924 
3925      </div> 
3926 
3927    </div> 
3928 
3929  </section> 
3930 
3931  <!-- FIM EMED --> 
3932 
3933  <section id="ssp-section-response" class="ssp-section" style="background: #2a2e43; position: relative;"> 
3934 
3935    <div id="turmas-container"> 
3936 
3937      <div id="informe-novas-turmas"> 
3938        <div style="display: flex; flex-wrap: nowrap;"> 
3939 
3940          <a class="prev-mobile d-lg-none d-xl-none nextPrevOpacity" href="#"> 
3941            <i class="fas fa-chevron-left"></i> 
3942          </a> 
3943 
3944          <h2 id="ssp-h3-turmas" class="ssp-section-title ssp-card-oferta-curso__section-title text-capitalize" 
3945            style="font-weight: bold;text-transform: uppercase; display: none;">Turmas</h2> 
3946 
3947          <a href="#" class="next-mobile d-lg-none d-xl-none"> 
3948            <i class="fas fa-chevron-right"></i> 
3949          </a> 
3950 
3951        </div> 
3952 
3953 
3954        <div class="oferta-slick-area oferta-slick-area--md-bleed slider-container"> 
3955 
3956        </div> 
3957      </div> 
3958 
3959      <#if !isEMED> 
3960        <div class="ssp-card-oferta-curso__sem-vaga d-none" style="margin: auto;"> 
3961 
3962          <h2 class="ssp-card-oferta-curso__sem-vaga-title"> 
3963            Estude com a gente na próxima turma! 
3964          </h2> 
3965 
3966          <p class="ssp-card-oferta-curso__sem-vaga-description"> 
3967            Registre seu interesse e avisaremos você quando surgirem novas vagas. 
3968          </p> 
3969        </div> 
3970        <#else> 
3971 
3972          <div class="card-transferencias-emed p-0 d-none emed-transferencias-space"> 
3973 
3974            <div class="slick-area__item"> 
3975 
3976              <div class="ssp-emed__card-slider-transferencias"> 
3977 
3978                <div class="card-slider-body"> 
3979                  <h2 class="ssp-h3"> 
3980                    Confira as regras para solicitar uma transferência 
3981                  </h2> 
3982                  <p class="ssp-p-m">As solicitações são enviadas apenas via formulário on-line e para ingresso de 
3983                    estudantes de 1º e 2º ano.</p> 
3984                  <p class="ssp-p-m">As vagas são remanescentes e limitadas.</p> 
3985                  <a href="/ensino-medio-tecnico/transferencias" class="ssp-button btn-transferencia">Saber mais sobre 
3986                    transferência </a> 
3987                </div> 
3988              </div> 
3989 
3990            </div> 
3991 
3992          </div> 
3993 
3994          <#if matriculaEMED.aberta> 
3995            <div class="sem-vaga-emed container p-0 d-none"> 
3996              <#else> 
3997                <div class="sem-vaga-emed container p-0 d-none emed-transferencias-space"> 
3998          </#if> 
3999          <div> 
4000            <div class="col-md-12 col-xs-12 pb-10"> 
4001 
4002              <!--slick slider--> 
4003              <div class="slick-area-emed slick-area-emed--md-bleed"> 
4004 
4005                <#if matriculaEMED.aberta> 
4006                  <div class="slick-area__item"> 
4007 
4008                    <div class="ssp-emed__card-slider"> 
4009 
4010                      <div class="ssp-emed__card-slider-body"> 
4011                        <h2 class="ssp-emed__section__titleCard"> 
4012                          <i class="fal fa-users-class"></i> 
4013                          <div><lfr-editable type="rich-text">Turmas</lfr-editable></div> 
4014                        </h2> 
4015                        <lfr-editable type="rich-text"> 
4016                          <div class="ssp-emed__section__introCard"><strong>Estude com a gente na próxima 
4017                              turma!</strong></div> 
4018                          <div class="ssp-emed__section__textCard"> 
4019                            <span class="texto"> 
4020                              Registre seu interesse e avisaremos você sobre a abertura das inscrições para o próximo 
4021                              ano. 
4022                            </span> 
4023                            <span 
4024                              class="ssp-emed__iconWrapper animate__animated animate__fadeOutRight animate__infinite"><i 
4025                                class="fas fa-chevron-right"></i></span> 
4026                          </div> 
4027                        </lfr-editable> 
4028                        </a> 
4029                      </div> 
4030 
4031                    </div> 
4032 
4033                  </div> 
4034 
4035                  <div class="slick-area__item"> 
4036 
4037                    <div class="ssp-emed__card-slider"> 
4038                      <div class="ssp-emed__card-slider-body"> 
4039 
4040                        <h2 class="ssp-emed__section__titleCard"> 
4041                          <i class="far fa-envelope"></i> 
4042                          <div><lfr-editable id="emed-precos-title" type="rich-text">Registro de 
4043                              Interesse</lfr-editable></div> 
4044                        </h2> 
4045                        <lfr-editable id="txt_emed_boleto" type="rich-text"> 
4046                          <div class="ssp-emed__section__introCardCTA"> 
4047                            Quer receber um aviso sobre as turmas do próximo ano? 
4048                          </div> 
4049                        </lfr-editable> 
4050                        </a> 
4051                        <a class="ssp-emed__btn btn btn-lg w-100 mt-3 ssp-card-modal-selecionar-outro__btn-close_10" 
4052                          id="btnOptin" href="javascript:;">Sim, me avise.</a> 
4053                      </div> 
4054                    </div> 
4055                  </div> 
4056                  <#else> 
4057                    <#-- pre inscricao emed --> 
4058                      <div class="slick-area__item card-pre-inscricao"> 
4059 
4060                        <div class="ssp-emed__card-slider"> 
4061 
4062                          <div class="ssp-emed__card-slider-body"> 
4063                            <h2 class="ssp-emed__section__titleCard"> 
4064                              <i class="fal fa-users-class"></i> 
4065                              <div> 
4066                                <h4 class="ssp-h4" data-lfr-editable-id="ssp-transf-text" 
4067                                  data-lfr-editable-type="rich-text">Confira as datas das próximas turmas</h4> 
4068                              </div> 
4069                            </h2> 
4070                            <lfr-editable type="rich-text" style="text-align: left;"> 
4071                              <div class="ssp-emed__section__introCard" style="margin: 0;"><strong class="ssp-p-g" 
4072                                  style="font-weight: 700;">Inscrições para bolsas</strong></div> 
4073                              <div class="ssp-emed__section__textCard" style="margin: 0!important;"> 
4074                                <span class="ssp-p-g texto"> 
4075                                  A partir de 3/8, às 12h 
4076                                </span> 
4077                            </lfr-editable> 
4078                            <hr style="margin: 24px 0; background: #FFF;" /> 
4079                            <lfr-editable type="rich-text" style="text-align: left;"> 
4080                              <div class="ssp-emed__section__introCard" style="margin: 0;"><strong class="ssp-p-g" 
4081                                  style="font-weight: 700;">Matrículas</strong></div> 
4082                              <div class="ssp-emed__section__textCard" style="margin: 0!important;"> 
4083                                <span class="ssp-p-g texto"> 
4084                                  A partir de 17/8, às 12h 
4085                                </span> 
4086                              </div> 
4087                            </lfr-editable> 
4088                            </a> 
4089                          </div> 
4090 
4091                        </div> 
4092                        <!-- <div class="ssp-emed__card-slider"> 
4093           
4094                          <div class="ssp-emed__card-slider-body"> 
4095                            <h2 class="ssp-emed__section__titleCard"> 
4096                              <i class="fal fa-users-class"></i> 
4097                              <div><lfr-editable id="emed-aulas-title" type="rich-text">Turmas</lfr-editable></div> 
4098                            </h2> 
4099                            <lfr-editable id="txt_emed_aulas" type="rich-text"> 
4100                              <div> 
4101                                <strong>Matrículas e inscrições para bolsas de estudo:</strong><br/> 
4102                                <span style="font-weight: 400;"> 
4103                                  a partir de ${matriculaEMED.dataInicio?split("-")?reverse?join("/")}, às ${matriculaEMED.horaInicio?split(":")?first} horas 
4104                                  <#if matriculaEMED.horaInicio?split(":")?last != "00"> 
4105                                    e ${matriculaEMED.horaInicio?split(":")?last} minutos 
4106                                  </#if> 
4107                                </span> 
4108                              </div> 
4109 
4110                              <div class="footer-card-card-pre-inscricao"> 
4111                                <strong> 
4112                                  Estude com a gente na próxima turma!<br/> 
4113                                  Esperamos por você! 
4114                                </strong> 
4115                              </div> 
4116                            </lfr-editable> 
4117                            </a> 
4118                          </div> --> 
4119 
4120                      </div> 
4121 
4122              </div> 
4123 
4124      </#if> 
4125 
4126    </div> 
4127    <!--/slick slider--> 
4128 
4129    </div> 
4130    </div> 
4131    </div> 
4132 
4133    </#if> 
4134    <div class="oferta-slick-area_modal"> 
4135    </div> 
4136 
4137    <#if manutencao.rodape !=""> 
4138      <p class="ssp-card-oferta-curso__mensagem-legal">${manutencao.rodape}</p> 
4139      <#else> 
4140        <#if isEMED> 
4141          <p class="ssp-card-oferta-curso__mensagem-legal">O Senac reserva-se o direito de alterar o número de vagas, 
4142            datas, horários ou cancelar o programa.</p> 
4143          <#else> 
4144            <p class="ssp-card-oferta-curso__mensagem-legal">A turma pode ser cancelada ou ter alterações do número de 
4145              vagas, datas e horários.</p> 
4146        </#if> 
4147    </#if> 
4148 
4149    </div> 
4150 
4151    <div id="ssp-abrir-pagina-bolsa" class="ssp-card-duvida__bolsa-estudo d-none" style="margin-top: 44px;"> 
4152 
4153      <p>Tem dúvidas sobre bolsas de estudo?</p> 
4154      <a href="/bolsas-de-estudo">Saiba como funciona</a> 
4155 
4156    </div> 
4157 
4158 
4159  </section> 
4160 
4161  <section id="section-registro-interesse" class="ssp-section-novas-turmas"> 
4162 
4163    <div class="container"> 
4164 
4165      <div class="ssp-aviso-novas-turmas__content"> 
4166 
4167        <!-- <div class="pb-sm-5 pb-md-5" > --> 
4168        <div> 
4169 
4170          <p class="ssp-aviso-novas-turmas__title">Receba um aviso por e-mail se abrirem novas turmas.</p> 
4171          <!-- p class="ssp-aviso-novas-turmas__description">Selecione a unidade e registre seu interesse.</p --> 
4172 
4173        </div> 
4174 
4175        <!--  
4176                  <div class="ssp-container__form-select"> 
4177   
4178                      <select class="form-control select-large select-registro-interesse" id="select-registro-interesse"> 
4179                          <option value="">Selecione uma unidade</option> 
4180                      </select> 
4181   
4182                  </div> 
4183          --> 
4184        <div class="ssp-btn-group__content-teste"> 
4185 
4186          <button type="button" class="btn btn-primary btn-custom" id="btn-aviso-novas-turmas">Registrar 
4187            interesse</button> 
4188 
4189        </div> 
4190 
4191 
4192 
4193      </div> 
4194 
4195 
4196    </div> 
4197 
4198 
4199  </section> 
4200 
4201  <section id="modal-backpack-error" class="ssp-modal-registro-interesse d-none"> 
4202 
4203    <div class="ssp-card-msg-erro"> 
4204 
4205      <div class="ssp-card-msg-sucesso__content"> 
4206        <i class="fas fa-exclamation-circle" style="color: #ec3a3a;"></i> 
4207        <p>Houve um erro ao inserir curso na mochila!</p> 
4208        <p>Por favor, tente novamente!</p> 
4209      </div> 
4210 
4211      <div> 
4212        <button id="btn-voltar-modal-backpack-error" class="btn btn-nivel ssp-card-msg-sucesso__btn">Voltar</button> 
4213      </div> 
4214 
4215    </div> 
4216 
4217  </section> 
4218 
4219  <section id="modal-backpack-success" class="ssp-modal-registro-interesse d-none"> 
4220 
4221    <div class="ssp-modal-mochila-curso"> 
4222 
4223      <div class="ssp-modal-mochila-curso__header"> 
4224 
4225        <button class="modal-btn-close" type="button"> 
4226 
4227          <i class="fal fa-times"></i> 
4228 
4229        </button> 
4230 
4231        <h2 class="modal-title">Curso adicionado à mochila!</h2> 
4232        <p class="modal-subtitle">Você incluiu na sua mochila de compras o curso 
4233          <span id="modal-backpack-success__nome-curso"></span> 
4234        </p> 
4235 
4236      </div> 
4237 
4238      <div class="ssp-modal-mochila-curso__body"> 
4239 
4240        <p>A sua vaga só é garantida nesta turma quando você finaliza a 
4241          compra. Deseja concluir agora?</p> 
4242 
4243      </div> 
4244 
4245      <div class="ssp-modal-mochila-curso__block-btn-items block-btn-items"> 
4246 
4247        <a class="btn-finalizar-compra btn-mochila-finalizar-compra-success" href="#"> 
4248          Finalizar compra 
4249        </a> 
4250 
4251        <button class="btn-continuar-site btn-mochila-continuar-site-success"> 
4252          Continuar no site 
4253        </button> 
4254 
4255      </div> 
4256 
4257 
4258    </div> 
4259 
4260  </section> 
4261 
4262  </#if> 
4263 
4264  <#if nomeTipoCurso?has_content && nomeTipoCurso?contains("Ensino Médio Técnico")> 
4265    <!-- Agende a sua visita --> 
4266    <#assign searchImpl=serviceLocator.findService("br.senac.search.api.Search") /> 
4267    <#assign articles=searchImpl.search("EMED - Agende sua visita", {}, themeDisplay.getCompanyId(), 
4268      themeDisplay.getScopeGroupId(), themeDisplay.getUserId(), false) /> 
4269 
4270    <section id="ssp-emed-visita-sector"> 
4271      <div class="container py-5 pt-lg-0" style="display:none;"> 
4272        <div data-emed="ssp-emed-visita-wrapper" class="ssp-emed-visita-wrapper"> 
4273          <#list articles![] as article> 
4274            <#assign document=saxReaderUtil.read(article.getContent()) /> 
4275            <#assign rootElement=document.getRootElement() /> 
4276 
4277            <#assign xPathSelector=saxReaderUtil.createXPath("dynamic-element[@field-reference='textoDoBotao' ]") 
4278              textoDoBotao=xPathSelector.selectSingleNode(rootElement).getStringValue() 
4279              xPathSelector=saxReaderUtil.createXPath("dynamic-element[@field-reference='linkBotao' ]") 
4280              linkBotao=xPathSelector.selectSingleNode(rootElement).getStringValue() 
4281              xPathSelector=saxReaderUtil.createXPath("dynamic-element[@field-reference='ativarBotao' ]") 
4282              ativarBotao=xPathSelector.selectSingleNode(rootElement).getStringValue() /> 
4283 
4284            <#if ativarBotao?trim=="true"> 
4285              <script>$('#ssp-emed-visita-sector').children().show()</script> 
4286              <div data-emed="ssp-emed-visita-text" class="ssp-emed-visita-text"> 
4287 
4288                <a href="${linkBotao}">${textoDoBotao}</a> 
4289 
4290              </div> 
4291              <div class="ssp-emed-visita-icon"> 
4292                <i class="fas fa-route"></i> 
4293              </div> 
4294            </#if> 
4295          </#list> 
4296        </div> 
4297      </div> 
4298    </section> 
4299 
4300 
4301    <!-- Como me matricular EMED --> 
4302 
4303    <section class="ssp-como-me-matricular__section"> 
4304 
4305      <h2 class="title-section-white">Como me matricular?</h2> 
4306 
4307      <div class="container"> 
4308 
4309        <div class="ssp-como-me-matricular__passo-passo-card"> 
4310 
4311          <div class="item-passo"> 
4312            <img class="item-passo-icone" src="/o/senac-theme/images/icon-escolha-curso.svg" alt=""> 
4313            <p class="item-passo-title">Escolha o curso</p> 
4314            <span>Selecione o curso, a unidade do seu interesse e confira as turmas disponíveis.</span> 
4315          </div> 
4316 
4317          <img class="item-passo-icone-seta" src="/o/senac-theme/images/icon-seta-passo.svg" alt=""> 
4318 
4319          <div class="item-passo"> 
4320            <img class="item-passo-icone" src="/o/senac-theme/images/icon-realize-inscricao.svg" alt=""> 
4321            <p class="item-passo-title">Adicione à Mochila</p> 
4322            <span>Faça login ou crie uma conta em nosso site e continue a compra.</span> 
4323          </div> 
4324 
4325          <img class="item-passo-icone-seta" src="/o/senac-theme/images/icon-seta-passo.svg" alt=""> 
4326 
4327          <div class="item-passo"> 
4328            <img class="item-passo-icone" src="/o/senac-theme/images/icon-aguarde-contato.svg" alt=""> 
4329            <p class="item-passo-title">Faça a matrícula</p> 
4330            <span>Todas as etapas são on-line. Para garantir a vaga, preencha todas as informações.</span> 
4331          </div> 
4332 
4333        </div> 
4334 
4335 
4336      </div> 
4337 
4338    </section> 
4339 
4340  </#if> 
4341 
4342 
4343  <section class="ssp-section ssp-section-lg-bottom-slider d-none" id="section-cursos-voce-pode-gostar" 
4344    style="background-color: #f2f2f2"> 
4345    <div class="ssp-container-large"> 
4346      <h2 class="ssp-section-title"> 
4347        Cursos que você pode gostar 
4348      </h2> 
4349    </div> 
4350    <div id="slider-curso"></div> 
4351  </section> 
4352 
4353 
4354  <#-- Section para o item de curso--> 
4355    <div id="curso-item-template" class="d-none slick-area__item"> 
4356 
4357      <div class="ssp-card-curso" style="height: 288px;"> 
4358 
4359        <a class="ssp-absolute-link ck-curso" href="#a"></a> 
4360 
4361        <div class="ssp-card-curso__image"> 
4362 
4363          <div class="ssp-image-container"> 
4364            <img src="" /> 
4365 
4366          </div> 
4367 
4368        </div> 
4369 
4370        <div class="ssp-card-curso__body"> 
4371 
4372          <div class="ssp-card-curso__color-tag-modalidade"></div> 
4373 
4374          <div class="ssp-card-curso__tags"> 
4375 
4376            <span class="ssp-card-curso__tag-formato-title"></span> 
4377 
4378            <span class="tag-modalidade-title__senac-online d-none">Senac Online - ao vivo</span> 
4379 
4380          </div> 
4381 
4382          <h6 class="ssp-card-curso__title"> 
4383 
4384          </h6> 
4385 
4386          <div class="ssp-card-curso__info"> 
4387 
4388            <span 
4389              class="ssp-tag bg-white border-nivel-extensao text-nivel-extensao mr-1 btn-inscricoes-abertas">Inscrições 
4390              abertas</span> 
4391            <span class="ssp-tag bg-white border-primary text-primary btn-bolsas">Bolsas</span> 
4392 
4393          </div> 
4394 
4395        </div> 
4396 
4397      </div> 
4398 
4399    </div> 
4400 
4401    <#function getJournalArticle> 
4402 
4403 
4404      <#assign 
4405        journalArticleService=serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
4406      <#assign friendlyURL=themeDisplay.getURLCurrent()?split("/")?last?split("?")?first> 
4407        <#assign groupId=themeDisplay.getSiteGroupId()> 
4408          <#attempt> 
4409 
4410            <#if !friendlyURL?contains("fragment_collections")> 
4411 
4412              <#return journalArticleService.getArticleByUrlTitle(groupId,friendlyURL)> 
4413                <#else> 
4414 
4415                  <#return '#erro#'> 
4416            </#if> 
4417 
4418            <#recover> 
4419 
4420              <#return '#erro#'> 
4421          </#attempt> 
4422    </#function> 
4423 
4424    <#function getCategorias primaryKey> 
4425 
4426      <#assign 
4427        categoryService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
4428      <#attempt> 
4429 
4430        <#return categoryService.getCategories("com.liferay.journal.model.JournalArticle", primaryKey)> 
4431 
4432          <#recover> 
4433 
4434            <#return '#erro#'> 
4435      </#attempt> 
4436    </#function> 
4437 
4438    <#function getVocabulary vocabularyId> 
4439 
4440      <#assign 
4441        vocabularyService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyService") /> 
4442      <#attempt> 
4443 
4444        <#return vocabularyService.getVocabulary(vocabularyId)> 
4445 
4446          <#recover> 
4447 
4448            <#return '#erro#'> 
4449      </#attempt> 
4450    </#function> 
4451 
4452    <#function getStringValue dom name> 
4453      <#assign seletorSTR="dynamic-element[@field-reference='" +name+"']" 
4454        xPathSelector=saxReaderUtil.createXPath(seletorSTR) /> 
4455      <#if xPathSelector.selectSingleNode(dom)??> 
4456        <#assign valueSTR=xPathSelector.selectSingleNode(dom).getStringValue()?trim /> 
4457        <#return valueSTR> 
4458      </#if> 
4459      <#return ''> 
4460    </#function> 
4461 
4462 
4463 
4464    <!-- modal registro interesse --> 
4465 
4466 
4467    <section id="modal-registro-interesse" class="ssp-modal-registro-interesse d-none"> 
4468 
4469      <#if !isEMED> 
4470        <div class="ssp-card-registro-interesse"> 
4471 
4472          <i id="btn-close-Modal-registro-interesse" class="fas fa-times btn-close__modal-login"></i> 
4473 
4474          <p class="ssp-card-registro-interesse__label-curso-selecionado">Curso selecionado:</p> 
4475          <h3 class="ssp-card-registro-interesse__nome-curso"></h3> 
4476 
4477          <div id="unidades-registro-interesse"> 
4478 
4479            <h4 class="ssp-card-registro-interesse__title-section-itens">Unidade:</h4> 
4480 
4481            <div id="select-unidades-registro-interesse"> 
4482              <select class="ssp-card-registro-interesse__select unidades" id="select_0"> 
4483                <option value="" disabled="" selected="">Selecione uma unidade</option> 
4484              </select> 
4485            </div> 
4486 
4487            <div class="ssp-card-registro-interesse__add-mais"> 
4488              <a class="" id="add-unidade-regsitro-interesse" href="#a"><i class="fas fa-plus mr-1"></i>Adicionar 
4489                unidade</a> 
4490 
4491              &nbsp; 
4492 
4493              <a class="" id="remove-unidade-regsitro-interesse" href="#a"><i class="fas fa-times mr-1"></i>Remover 
4494                unidade</a> 
4495            </div> 
4496 
4497          </div> 
4498 
4499          <div id="dias-registro-interesse"> 
4500            <h4 class="ssp-card-registro-interesse__title-section-itens text-center">Dias da Semana</h4> 
4501 
4502            <div class="ssp-card-registro-interesse__week-content"> 
4503              <span id="todosDias" class="ssp-week-day">Todos</span> 
4504              <span class="ssp-week-day">Seg</span> 
4505              <span class="ssp-week-day">Ter</span> 
4506              <span class="ssp-week-day">Qua</span> 
4507              <span class="ssp-week-day">Qui</span> 
4508              <span class="ssp-week-day">Sex</span> 
4509              <span class="ssp-week-day">Sab</span> 
4510            </div> 
4511 
4512          </div> 
4513 
4514          <div id="periodo-registro-interesse"> 
4515 
4516            <h4 class="ssp-card-registro-interesse__title-section-itens text-center">Período:</h4> 
4517 
4518            <div class="ssp-card-registro-interesse__check-itens-content periodos-registro-interesse"> 
4519 
4520              <div class="ssp-card-registro-interesse__check-item" id="div-campo-todos"> 
4521                <input type="checkbox" name="" value="" id="check-todos-periodos"> 
4522                <label for="check-todos-periodos">Todos</label> 
4523              </div> 
4524 
4525              <div class="ssp-card-registro-interesse__check-item"> 
4526                <input type="checkbox" name="" value="M" id="periodo-m"> 
4527                <label for="periodo-m">Manhã</label> 
4528              </div> 
4529 
4530              <div class="ssp-card-registro-interesse__check-item"> 
4531                <input type="checkbox" name="" value="T" id="periodo-t"> 
4532                <label for="periodo-t">Tarde</label> 
4533              </div> 
4534 
4535              <div class="ssp-card-registro-interesse__check-item"> 
4536                <input type="checkbox" name="" value="N" id="periodo-n"> 
4537                <label for="periodo-n" "="">Noite</label> 
4538                      </div> 
4539 
4540 
4541                  </div> 
4542 
4543              </div> 
4544 
4545              <div class=" ssp-card-registro-interesse__card-politica"> 
4546 
4547 
4548              </div> 
4549 
4550              <div class="ssp-card-registro-interesse__check-item"> 
4551                <input type="checkbox" name="" value="" id="check-politica-privacidade"> 
4552                <label for="check-politica-privacidade">Aceito a Política de Privacidade</label> 
4553              </div> 
4554 
4555              <div class="text-center mt-5"> 
4556 
4557                <button class="btn btn-nivel ssp-card-registro-interesse__btn-enviar btn-with-loading" href="#a" 
4558                  id="enviar-registro-interesse-btn" disabled="disabled">Enviar</button> 
4559 
4560                <p class="ssp-card-registro-interesse__aviso"><strong>Importante:</strong> O registro de interesse não 
4561                  garante a vaga.</p> 
4562 
4563              </div> 
4564 
4565            </div> 
4566 
4567            <#else> 
4568 
4569              <div class="ssp-card-registro-interesse emed"> 
4570 
4571                <i id="btn-close-Modal-registro-interesse" class="fas fa-times btn-close__modal-login"></i> 
4572 
4573                <p class="ssp-card-registro-interesse__label-curso-selecionado">Curso selecionado:</p> 
4574 
4575                <div class="emed-select-group"> 
4576 
4577                  <h3 class="ssp-card-registro-interesse__title-modal"></h3> 
4578 
4579                  <div id="unidades-registro-interesse"> 
4580 
4581                    <h4 class="ssp-card-registro-interesse__title-section-itens">Escolha uma unidade</h4> 
4582 
4583                    <div id="select-unidades-registro-interesse"> 
4584                      <select class="ssp-card-registro-interesse__select unidades" id="select_0"> 
4585                        <option value="" disabled="" selected="">Selecione uma unidade</option> 
4586                      </select> 
4587                    </div> 
4588 
4589                    <div class="ssp-card-registro-interesse__add-mais"> 
4590                      <a class="" id="add-unidade-regsitro-interesse" href="#a"><i 
4591                          class="fas fa-plus mr-1"></i>Adicionar unidade</a> 
4592 
4593                      &nbsp; 
4594 
4595                      <a class="" id="remove-unidade-regsitro-interesse" href="#a"><i 
4596                          class="fas fa-times mr-1"></i>Remover unidade</a> 
4597                    </div> 
4598 
4599                  </div> 
4600 
4601                </div> 
4602 
4603 
4604                <div id="periodo-registro-interesse"> 
4605 
4606                  <p class="ssp-card-registro-interesse__title-section-itens">Período:</p> 
4607 
4608                  <div class="ssp-card-registro-interesse__check-itens-content periodos-registro-interesse"> 
4609                    <div class="ssp-card-registro-interesse__check-item"> 
4610                      <input type="checkbox" name="" value="M" id="periodo-m"> 
4611                      <label for="periodo-m">Manhã</label> 
4612                    </div> 
4613 
4614                    <div class="ssp-card-registro-interesse__check-item"> 
4615                      <input type="checkbox" name="" value="T" id="periodo-t"> 
4616                      <label for="periodo-t">Tarde</label> 
4617                    </div> 
4618 
4619                    <div class="ssp-card-registro-interesse__check-item" id="div-campo-todos"> 
4620                      <input type="checkbox" name="" value="" id="check-todos-periodos"> 
4621                      <label for="check-todos-periodos">Todos</label> 
4622                    </div> 
4623 
4624                  </div> 
4625 
4626                </div> 
4627 
4628                <div id="turmas-registro-interesse"> 
4629 
4630                  <p class="ssp-card-registro-interesse__title-section-itens">Turma:</p> 
4631 
4632                  <div class="ssp-card-registro-interesse__check-itens-content turmas-registro-interesse"> 
4633 
4634                    <div class="ssp-card-registro-interesse__check-item"> 
4635                      <input type="checkbox" name="" value="1" id="primeiro"> 
4636                      <label for="primeiro">1º ano</label> 
4637                    </div> 
4638 
4639                    <div class="ssp-card-registro-interesse__check-item"> 
4640                      <input type="checkbox" name="" value="2" id="segundo"> 
4641                      <label for="segundo">2º ano</label> 
4642                    </div> 
4643 
4644                    <div class="ssp-card-registro-interesse__check-item"> 
4645                      <input type="checkbox" name="" value="3" id="terceiro"> 
4646                      <label for="terceiro">3º ano</label> 
4647                    </div> 
4648 
4649                  </div> 
4650 
4651                </div> 
4652 
4653                <div id="msg-transferencia-emed"> 
4654 
4655                  <div class="transferencia-emed-title"> 
4656                    <i class="fas fa-comment-exclamation"></i> 
4657                    <p>Quer se transferir de escola?</p> 
4658                  </div> 
4659 
4660                  <div class="transferencia-emed-link"> 
4661                    <a href="#">Fale direto com a unidade de interesse.</a> 
4662                  </div> 
4663 
4664                </div> 
4665 
4666                <div class="ssp-card-registro-interesse__card-politica"> 
4667 
4668                </div> 
4669 
4670                <div class="ssp-card-registro-interesse__check-item"> 
4671                  <input type="checkbox" name="" value="" id="check-politica-privacidade"> 
4672                  <label for="check-politica-privacidade">Aceito a Política de Privacidade</label> 
4673                </div> 
4674 
4675                <div class="text-center mt-5"> 
4676 
4677                  <button class="btn btn-nivel ssp-card-registro-interesse__btn-enviar btn-with-loading" href="#a" 
4678                    id="enviar-registro-interesse-btn" disabled="disabled">Enviar</button> 
4679 
4680                  <p class="ssp-card-registro-interesse__aviso"><strong>Importante:</strong> O registro de interesse não 
4681                    garante a vaga.</p> 
4682 
4683                </div> 
4684 
4685              </div> 
4686 
4687      </#if> 
4688    </section> 
4689 
4690    <section id="modal-registro-interesse-sucesso" class="ssp-modal-registro-interesse d-none"> 
4691 
4692      <div class="ssp-card-msg-sucesso"> 
4693 
4694        <div class="ssp-card-msg-sucesso__content"> 
4695          <i class="fas fa-exclamation-circle"></i> 
4696          <p>Obrigado por registrar seu interesse!</p> 
4697          <p>Acompanhe seu e-mail para ficar por dentro das novidades!</p> 
4698        </div> 
4699 
4700        <div> 
4701          <a class="btn btn-nivel ssp-card-msg-sucesso__btn" href="#" id="btn-voltar-home">Voltar para a home</a> 
4702        </div> 
4703 
4704      </div> 
4705 
4706    </section> 
4707 
4708    <section id="modal-registro-interesse-erro" class="ssp-modal-registro-interesse d-none"> 
4709 
4710      <div class="ssp-card-msg-erro"> 
4711 
4712        <div class="ssp-card-msg-sucesso__content"> 
4713          <i class="fas fa-exclamation-circle" style="color: #ec3a3a;"></i> 
4714          <p>Houve um erro ao registrar seu interesse!</p> 
4715          <p>Por favor, tente novamente!</p> 
4716        </div> 
4717 
4718        <div> 
4719          <a class="btn btn-nivel ssp-card-msg-sucesso__btn" href="#">Voltar para a home</a> 
4720        </div> 
4721 
4722      </div> 
4723 
4724    </section> 
4725 
4726    <!-- Aviso para curso de aprendizagem --> 
4727 
4728    <div id="aviso-curso-aprendizagem" class="ssp-bolsa-formulario__card-aviso-atencao d-none" style="width: 100%;"> 
4729 
4730      <i class="fas fa-exclamation-circle ssp-bolsa-formulario__card-aviso-atencao-icon" aria-hidden="true"></i> 
4731 
4732      <div class="ssp-bolsa-formulario__card-aviso-texto"> 
4733        <p>Para contratar aprendiz, preencha o formulário e entraremos em contato.</p> 
4734      </div> 
4735 
4736    </div> 
4737 
4738    <!-- modal form de aprendizagem --> 
4739 
4740    <#if isAprendizagem> 
4741 
4742      <#assign resources=themeDisplay.getPortalURL() /> 
4743      <link href="${resources}/documents/d/global/css-formulario-aprendizagem" rel="stylesheet" type="text/css"> 
4744 
4745      <dialog id="modal-form" class="ssp-modal-ds"> 
4746 
4747        <button type="button" data-modal="close-form-modal"> 
4748          Fechar 
4749          <i class="fas fa-times"></i> 
4750        </button> 
4751 
4752      </dialog> 
4753 
4754    </#if> 
4755 
4756    <div id="avisoTrampolim" class="ssp-bolsa-formulario__card-aviso-atencao container text-left d-none" 
4757      style="width: 100%;"> 
4758      <i class="fas fa-exclamation-circle ssp-bolsa-formulario__card-aviso-atencao-icon" aria-hidden="true"></i> 
4759      <div class="ssp-bolsa-formulario__card-aviso-texto"> 
4760        <p>Para informações sobre preço do curso e matrícula, entre em contato a unidade.</p> 
4761      </div> 
4762 
4763    </div> 
4764 
4765 
4766    <!--modal forma pagto extensao--> 
4767    <section id="modalFormaPagtoExt" class="modal-extensao ssp-modal"> 
4768      <div class="modal-extensao_content"> 
4769        <i class="fas fa-undo modal-extensao-voltar-icon"><span class="modal-extensao-voltar-txticon">Voltar</span></i> 
4770        <h1 class="modal-extensao-condicoes__title">Descontos e Parcelamento</h1> 
4771        <div class="row"> 
4772 
4773          <!-- <button class="btn-preco-padrao d-xs-flex d-sm-flex d-lg-none d-xl-none"> 
4774                Preço Padrão 
4775                <i class="fas fa-chevron-right custom-icon-right"></i> 
4776              </button> --> 
4777 
4778          <div class="col-lg-6 col-sm-12 col-xs-12"> 
4779 
4780            <h2 class="modal-extensao_subtitle">Investimento</h2> 
4781 
4782            <span class="modal-extensao_preco">R$ <span class="precoVendaOferta"></span></span> 
4783            <span class="modal-extensao_txteconomiza">.<b class="modal-extensao_txtverde"></b></span> 
4784            <div class="modal-extensao_ctboleto pt-2 pb-2 mb-3"> 
4785              <i class="fas fa-barcode" aria-hidden="true"></i> 
4786              <span class="modal-extensao_txtPag">Boleto Bancário</span> 
4787              <span class="modal-extensao_txtParcela"><b><span class="numParcelaBoleto"></span>x de R$ <span 
4788                    class="precoParcelaBoleto"></span></b></span> 
4789              <span class="modal-extensao_txtParcela">sem juros</span> 
4790            </div> 
4791            <div class="modal-extensao_ctcard pt-2 pb-2 mb-3"> 
4792              <i class="far fa-credit-card" aria-hidden="true"></i> 
4793              <span class="modal-extensao_txtPag">Cartão de Crédito</span> 
4794              <span class="modal-extensao_txtParcela"><b><span class="numParcelaCartoes"></span>x de R$ <span 
4795                    class="precoParcelaCartoes"></span></b></span> 
4796              <span class="modal-extensao_txtParcela">sem juros</span> 
4797            </div> 
4798            <p class="modal-extensao_txtParcela pt-5"><b>À vista:</b> R$ <span class="precoAVistaPadraoExt"></span> 
4799              <span class="modal-extensao_txtporcent">(-8%)</span> 
4800            </p> 
4801          </div> 
4802 
4803          <!-- <hr class="ssp-divisor d-xs-block d-sm-block d-lg-none d-xl-none"> --> 
4804 
4805          <!-- <button class="btn-preco-ex-aluno d-xs-flex d-sm-flex d-lg-none d-xl-none"> 
4806              Preço para Contribuintes,<br>alunos e ex-alunos* 
4807              <i class="fas fa-chevron-right custom-icon-right"></i> 
4808            </button> --> 
4809 
4810          <div class="col-lg-6 col-sm-12 col-xs-12"> 
4811            <h2 class="modal-extensao_subtitle mt-4">Valor com 20% de desconto para alunos, ex-alunos e contribuintes 
4812              Senac</h2> 
4813            <span class="modal-extensao_preco">R$ <span class="precoContrExt"></span></span> 
4814            <span class="modal-extensao_txteconomiza">Você economiza <b class="modal-extensao_txtverde">R$ <span 
4815                  class="economiaExt"></span> (-20%)</b></span> 
4816            <div class="modal-extensao_ctboleto pt-2 pb-2 mb-3"> 
4817              <i class="fas fa-barcode" aria-hidden="true"></i> 
4818              <span class="modal-extensao_txtPag">Boleto Bancário</span> 
4819              <span class="modal-extensao_txtParcela"><b><span class="numParcelaBoleto"></span>x de R$ <span 
4820                    class="precoParcelaBoletoExt"></span></b></span> 
4821              <span class="modal-extensao_txtParcela">sem juros</span> 
4822            </div> 
4823            <div class="modal-extensao_ctcard pt-2 pb-2 mb-3"> 
4824              <i class="far fa-credit-card" aria-hidden="true"></i> 
4825              <span class="modal-extensao_txtPag">Cartão de Crédito</span> 
4826              <span class="modal-extensao_txtParcela"><b><span class="numParcelaCartoes"></span>x de R$ <span 
4827                    class="precoParcelaCartoesExt"></span></b></span> 
4828              <span class="modal-extensao_txtParcela">sem juros</span> 
4829            </div> 
4830            <p class="modal-extensao_txtParcela pt-5"><b>À vista:</b> R$ <span class="precoAVistaContrExt"></span> <span 
4831                class="modal-extensao_txtporcent">(-8%)</span></p> 
4832          </div> 
4833          <div class="col-lg-6 col-sm-12 col-xs-12"> 
4834            <a target="_blank" href="#"> 
4835              <button class="btn modal-extensao__btn mt-3 text-uppercase">Comprar</button> 
4836            </a> 
4837          </div> 
4838          <div class="col-lg-6 col-sm-12 col-xs-12"> 
4839            <button class="btn btn-primary modal-extensao-btn-conheca mt-3">Conheça os descontos</button> 
4840          </div> 
4841        </div> 
4842      </div> 
4843 
4844      <div class="modal-extensao_content modal-pergunta-aluno-ext d-none"> 
4845 
4846        <i class="fal fa-times modal-extensao-voltar-icon" style="font-size:25px;"></i> 
4847        <h1 class="modal-extensao-condicoes__title">Você é nosso aluno?</h1> 
4848        <div class="row"> 
4849          <div class="col-6 text-right"> 
4850 
4851            <button class="btn btn-primary modal-extensao-btn-aluno-sim-nao sim mt-3">Sim</button> 
4852 
4853          </div> 
4854          <div class="col-6 text-left"> 
4855 
4856            <button class="btn btn-primary modal-extensao-btn-aluno-sim-nao nao mt-3">Não</button> 
4857 
4858          </div> 
4859        </div> 
4860        <div class="row d-none msg-alunoSim"> 
4861          <div class="col-12 text-center mt-10"> 
4862            <i class="fas fa-check-circle modal-extensao-ico-check"></i> 
4863            <h2 class="modal-extensao-condicoes__subtitle">Boa notícia!</h2> 
4864            <p class="modal-extensao-aluno_txtcontent">Você tem 20% de desconto neste curso.<br> Faça seu login e 
4865              preencha os dados solicitados.</p> 
4866            <p class="mb-0"> 
4867              <a target="_blank" href="#"> 
4868                <button class="btn modal-extensao-aluno__btn ok mt-3">Fazer Inscrição</button> 
4869              </a> 
4870            </p> 
4871            <p class="mt-0"> 
4872              <a href="https://www.sp.senac.br/descontos-e-parcelamentos/pos-e-extensao-universitaria"> 
4873                <button class="btn btn-primary modal-extensao-btn-conferir mt-3" id="btn-conferir-regras">Conferir 
4874                  Regras</button> 
4875              </a> 
4876            </p> 
4877          </div> 
4878        </div> 
4879        <div class="row d-none msg-alunoNao"> 
4880          <div class="col-12 text-center mt-10"> 
4881            <i class="fas fa-percentage modal-extensao-ico-percent"></i> 
4882            <h2 class="modal-extensao-condicoes__subtitle">Poxa! Não fique triste...</h2> 
4883            <p class="modal-extensao-aluno_txtcontent">Você não tem direito ao desconto de 20% neste curso. Mas você tem 
4884              direito ao desconto de pontualidade (melhorar texto)</p> 
4885            <p class="mb-0"> 
4886              <a target="_blank" href="#"> 
4887                <button class="btn modal-extensao-aluno__btn not mt-3">Fazer Inscrição</button> 
4888              </a> 
4889            </p> 
4890            <p class="mt-0"> 
4891              <a href="https://www.sp.senac.br/descontos-e-parcelamentos/pos-e-extensao-universitaria"> 
4892                <button class="btn btn-primary modal-extensao-btn-conferir mt-3" id="btn-conferir-regras">Conferir 
4893                  Regras</button> 
4894              </a> 
4895            </p> 
4896          </div> 
4897        </div> 
4898      </div> 
4899    </section> 
4900 
4901 
4902    <!-- Modal Descontos e Parcelamento EMED --> 
4903    <div id="modalPagtoEmed" class="ssp-modal"> 
4904 
4905      <div class="ssp-card-modal-forma-pagamento"> 
4906 
4907        <div class="ssp-card-modal-forma-pagamento__header"> 
4908          <h6 class="ssp-card-modal-forma-pagamento__header-title font-weight-bold text-center" style="color:#454F63"> 
4909            Descontos e parcelamentos</h6> 
4910          <div class="ssp-modal-emed-btfechar"> 
4911            <i class="ssp-card-modal-forma-pagamento__btn-close ssp-card-modal-forma-pagamento__btn-close_0"></i> 
4912            <span>Fechar</span> 
4913          </div> 
4914        </div> 
4915 
4916        <div class="ssp-card-modal-forma-pagamento__body"> 
4917 
4918          <p class="ssp-modal-emed-info-valor-matricula"><span class="ssp-modal-emed-info-txt-matricula">1ª parcela de 
4919              R$ <span class="precoParcelaEmedModal"></span> <span>+ <span class="numParcelaEmedModal"></span> 
4920                mensalidades de R$ <span class="precoParcelaEmedModal"></span></span></p> 
4921 
4922          <p class="ssp-card-modal-forma-pagamento__valor-desconto ssp-modal-emed-valor-total-txt"> <span 
4923              class="ssp-modal-emed-txtValor">Valor total:</span> <span 
4924              class="precoVendaOferta ssp-modal-emed-valor-total">R$ 414,40</span> 
4925            <span class="ssp-card-modal-emed-ano">/ano</span> 
4926          </p> 
4927 
4928          <p class="txt-desconto-oito ssp-modal-emed-txt-desconto-oito text-center" style="border-bottom: 0px;"><i 
4929              class="fas fa-badge-percent"></i> <span class="txt-pague-vista">Pague à vista e</span> <span 
4930              class="txt-ganhe-mais" style="color:#FC7834;font-weight:bold"> ganhe mais 8% de desconto.</span></p> 
4931          <div class="ssp-card-modal-emed-lineou"><span>ou</span></div> 
4932 
4933          <small class="ssp-card-oferta-curso__title-item font-weight-bold" 
4934            style="margin:0;font-size:14px;text-align: center;">Ganhe fôlego: parcele seu curso!</small> 
4935 
4936          <div class="ssp-card-modal-forma-pagamento__tipos"> 
4937 
4938            <div 
4939              class="ssp-card-modal-forma-pagamento__tipos-content align-items-start ssp-card-modal-emed-centralizaPagtos" 
4940              style="margin:0 auto"> 
4941              <i class="ssp-card-modal-forma-pagamento__icon-boleto-cartao"></i> 
4942              <div class="ssp-card-modal-forma-pagamento__info-cartao"> 
4943                <p><strong>Pix + Boleto Bancário</strong></p> 
4944                <p>1ª parcela no Pix</p> 
4945                <p>Valor restante em <span>até <span class="numParcelaCartoesBoleto"></span>x de <br>R$ <span 
4946                      class="precoParcelaCartoesBoleto"></span></span> sem juros no boleto</p> 
4947              </div> 
4948            </div> 
4949 
4950            <div 
4951              class="ssp-card-modal-forma-pagamento__tipos-content align-items-start ssp-card-modal-emed-centralizaPagtos" 
4952              style="margin:0 auto"> 
4953              <i class="ssp-card-modal-forma-pagamento__icon-boleto-cartao"></i> 
4954              <div class="ssp-card-modal-forma-pagamento__info-cartao"> 
4955                <p><strong>Cartão de Crédito +</strong></p> 
4956                <p><strong>Boleto Bancário</strong></p> 
4957                <!-- <p>1ª parcela em <span>até 4x de R$ <span class="valorParcelaEntradaCartoesBoleto">265,50</span></span> sem juros no cartão</p> --> 
4958                <p>1ª parcela no cartão</p> 
4959                <p>Valor restante em <span>até <span class="numParcelaCartoesBoleto"></span>x de <br>R$ <span 
4960                      class="precoParcelaCartoesBoleto"></span></span> sem juros no boleto</p> 
4961              </div> 
4962            </div> 
4963 
4964            <div 
4965              class="ssp-card-modal-forma-pagamento__tipos-content align-items-start mt-4 ssp-card-modal-emed-centralizaPagtos" 
4966              style="margin:0 auto" id="content_boleto_0"> 
4967              <i class="ssp-card-modal-forma-pagamento__icon-boleto"></i> 
4968              <div class="ssp-card-modal-forma-pagamento__info-cartao"> 
4969                <p><strong>Boleto Bancário</strong></p> 
4970                <p>Em até <span><span class="numParcelaBoleto">12</span>x de R$ <span 
4971                      class="precoParcelaBoleto">34,53</span></span> sem juros</p> 
4972              </div> 
4973            </div> 
4974 
4975            <div 
4976              class="ssp-card-modal-forma-pagamento__tipos-content align-items-start ssp-card-modal-emed-centralizaPagtos" 
4977              style="margin:0 auto"> 
4978              <i class="ssp-card-modal-forma-pagamento__icon-credit-card"></i> 
4979              <div class="ssp-card-modal-forma-pagamento__info-cartao"> 
4980                <p><strong>Cartão de Crédito</strong></p> 
4981                <p>(<span class="textoCartoesAceitos">Mastercard, Visa, Elo, American Express, Hipercard</span>)</p> 
4982                <p>Em até <span><span class="numParcelaCartoes">12</span>x de R$ <span 
4983                      class="precoParcelaCartoes">34,53</span></span> sem juros</p> 
4984              </div> 
4985            </div> 
4986 
4987            <div 
4988              class="ssp-card-modal-forma-pagamento__tipos-content align-items-start mt-4 ssp-card-modal-emed-centralizaPagtos" 
4989              style="margin:0 auto" id="content_boleto_0"> 
4990              <i class="fa-brands fa-pix" style="margin-right:15px;font-size:18px"></i> 
4991              <div class="ssp-card-modal-forma-pagamento__info-cartao"> 
4992                <p><strong>Pix</strong></p> 
4993                <p>Valor total à vista com desconto</p> 
4994              </div> 
4995            </div> 
4996 
4997            <p class="txt-desconto-oito ssp-modal-emed-txt-desconto-oito ssp-modal-emed-boxoito" 
4998              data-info="data-para-matricula" style="margin:16px 0"><span 
4999                class="ssp-card-modal-emed-valorObs obsspan"><i class="fas fa-exclamation-circle"></i>As vagas são 
5000                limitadas e por ordem de chegada!</span>Garanta seu lugar! Matricule-se agora.</p> 
5001 
5002            <p class="txt-desconto-oito ssp-modal-emed-txt-desconto-oito ssp-card-modal-emed-boxDesconto" 
5003              data-info="msg-20-desconto"><strong>E você ainda tem</strong><span style="color:#FC7834;font-weight:bold"> 
5004                20% desconto na mensalidade se:</span><br> 
5005              - Estuda ou estudou no Senac<br> 
5006              - É dependente de quem trabalha em empresa contribuinte do Senac<br> 
5007              - Estuda ou estudou na rede pública de ensino 
5008            </p> 
5009 
5010          </div> 
5011 
5012        </div> 
5013 
5014 
5015        <a href="#a" class="btn btn-lg w-100 ssp-btn-emed__voltar-curso" style="margin-top: 20px;font-weight:600" id="" 
5016          data-espaco-ex="true" data-unidade="" data-evento="" data-destino-compra="" data-index=""><span 
5017            class="">Voltar para página do curso</span></a> 
5018 
5019 
5020 
5021      </div> 
5022    </div> 
5023 
5024    <#if isEMED> 
5025      <div id="modalAntesCompraEmed" class="ssp-modal"> 
5026        <div class="ssp-modal-local-realizacao"> 
5027          <div class="ssp-modal-local-realizacao__title-content"> 
5028            <h6 class="ssp-modal-local-realizacao__title" style="padding-left:10%;">IMPORTANTE!</h6> 
5029            <i class="ssp-card-modal-antes-compra__btn-close ssp-card-modal-forma-pagamento__btn-close"></i> 
5030          </div> 
5031          <div class="ssp-modal-local-realizacao__texto"> 
5032            <p class="texto-modal-emed textoEmedModalAntesCompra0010 d-none"> 
5033 
5034              Esta matrícula é válida apenas para a compra do curso de acordo com a escola e o horário já 
5035              selecionados.<br /> 
5036 
5037            </p> 
5038            <p class="texto-modal-emed textoEmedModalAntesCompra0010Espera d-none"> 
5039 
5040              Saiba como funciona a inscrição para a lista de espera:<br /><br /> 
5041              - É válida somente para a <b>compra do curso</b><br /> 
5042              - Não garante vaga para o estudante<br /> 
5043              - É válida apenas para o curso, horário e escola selecionados<br /> 
5044              - Caso surjam vagas, você receberá um e-mail para fazer a matrícula<br /> 
5045 
5046            </p> 
5047            <p class="texto-modal-emed textoEmedModalAntesCompra0020e0030 d-none"> 
5048 
5049              - Essa inscrição é para uma lista de espera de transferência para 2º ou 3º ano do Ensino Médio Técnico, 
5050              por isso, ao realizá-la não garantimos a vaga<br /><br /> 
5051              - A inscrição só pode ser solicitada para quem deseja estudar no Senac realizando a compra do 
5052              curso<br /><br /> 
5053              - Se a turma escolhida tiver vagas, você receberá um e-mail com orientações sobre a entrega de documentos 
5054              e as formas de pagamento para efetivar a transferência 
5055 
5056            </p> 
5057            <div class="btn ssp-modal-local-realizacao__btn-content"> 
5058              <button class="btn btn-lg btn-success w-100 mt-3" offercode="" id="btnCompraLocalEmed">Continuar para 
5059                compra</button> 
5060              <a class="ssp-modal-local-realizacao__btn btn btn-lg w-100 mt-3 ssp-card-modal-selecionar-outro__btn-close" 
5061                href="#a">Voltar para o curso</a> 
5062            </div> 
5063          </div> 
5064        </div> 
5065      </div> 
5066 
5067    </#if> 
5068 
5069 
5070 
5071 
5072    <script> 
5073      let showedFilters = false 
5074      var groupId = themeDisplay.getScopeGroupId(); 
5075 
5076      var urlSearchCursosPorCategory = '/o/senac-curso-services/cursosPorCategoryIds/{groupId}?categoryIds={categoryId}&start=0&end={limit}'; 
5077 
5078      var urlSearchOferta = '/o/senac-oferta-services/ofertasPorCategoryIds/' + groupId 
5079 
5080      var urlSearchUnidade = '/o/senacsearch/Unidade/{companyId}/{groupId}/{userId}?q=codigoUnidade_pt_BR:{codigoUnidade}'; 
5081      var urlUnidadeInfoDetalhe = '/o/senac-content-services/unidadeInfoDetalhe/{companyId}/{codigoUnidade}'; 
5082      var urlSearchCursoInfo = '/o/senac-content-services/cursosInfoDetalhe/{groupId}/{cursosInfo}?inscricaoAberta={inscricaoAberta}&bolsaAberta={bolsaAberta}&buscarUnidadesComOferta={buscarUnidadesComOferta}'; 
5083      var urlRegistroInteresse = '/o/senac-content-services/registroInteresse/'; 
5084      var urlRegistroInteresseEmailInteressado = '/o/senac-content-services/envioEmailRegistroInteresse/'; 
5085      var cntSelectUnidades = 1; 
5086      var urlPlanoCurso = 'https://www.sp.senac.br/jsp/includeMatdid.jsp?file=/ha1shared/projects/matdid/{codigoFT}-{dataEfetiva}.html'; 
5087      var urlGetServerT = '/o/senac-content-services/getServerTime'; 
5088      var todayG = null; 
5089      var serverDateRequest = null; 
5090      var codigoFTCursoAprendizagem = 18984; 
5091      var globalGroupId = Liferay.ThemeDisplay.getCompanyGroupId(); 
5092      var isAoVivo = 0; 
5093      var nomeFormatoAoVivoDxp = 'Senac Online - ao vivo'; 
5094      var ofertaUnidadeMap = new Map(); 
5095      var ultimaUnidade = 0; 
5096      var regIndex = new RegExp('\{index\}', 'g'); 
5097      var linkBotaoCompra = 'https://autenticacao.sp.senac.br/auth/realms/institucional/protocol/openid-connect/auth?scope=openid+email+profile&response_type=code&redirect_uri=https%3A%2F%2Fwww.sp.senac.br%2FecommerceFrontEnd%2F%3Fvcw_unidade%3D{codigoUnidade}%26vcw_evento%3D{codigoOferta}&client_id=ecommerce'; 
5098      var carregouUltimaOferta = false; 
5099      var ofertasMap = new Map(); 
5100      var codUnidadeSenacAoVivo = '108'; 
5101      var ofertasComBolsa = false; 
5102 
5103      //funcao para pegar host do ambiente, se eh teste ou prod (utilizado no servico da bolsa)- 9546 
5104      function getServiceEnvironmentHost() { 
5105        if (!isAmbienteTeste()) 
5106          return window.location.origin 
5107        else 
5108          return 'https://gesportal.sp.senac.br' 
5109      } 
5110 
5111      var hostBolsa = getServiceEnvironmentHost() 
5112 
5113      // Montar object push - google tag manager - 1 
5114      let itensEcommerce = null; 
5115      let ofertaSelecionada = null; 
5116 
5117      const today = new Date; 
5118 
5119      //categoryId -> cod unidade 
5120      var mapUnidadesIds = new Map(); 
5121      var objsTela = { 
5122        unidades: [], 
5123        unidadesRegistroInteresse: [], 
5124        categoriesIds: [], 
5125        ofertasAoVivoTodasUnidades: [], 
5126        primeiroChange: true 
5127      }; 
5128      var startOfertaParam = 0; 
5129      var endOfertaParam = 25; 
5130 
5131      var ehCursoTrampolim = false; 
5132 
5133      const isHibrido = $('input[name="formato"]').data('formato') === 'Presencial + EAD'; 
5134 
5135      var textoFormatoHibrido = ""; 
5136      var temTextoParaFormatoHibrido = false; 
5137 
5138      //Validar se o campo textoFormatoHibrido existe e se não está vazio 
5139      if (isHibrido) { 
5140        textoFormatoHibrido = $('input[name="textoFormatoHibrido"]').val(); 
5141        if (typeof textoFormatoHibrido !== 'undefined') { 
5142          if (textoFormatoHibrido.trim() !== '') { 
5143            temTextoParaFormatoHibrido = true; 
5144            textoFormatoHibrido += '<br>'; 
5145          } 
5146        } 
5147      } 
5148 
5149      const HOST = window.location.origin; 
5150      const URLGeral = window.location.href; 
5151 
5152      //EMED 
5153      const anoTurmaEmed = '2027'; 
5154 
5155      const tipoCursoNome = function () { return $('.ssp-header-curso__tag-formato').text().trim(); } 
5156 
5157      const isEmed = (tipoCursoNome().indexOf('Ensino Médio Técnico') > -1); 
5158 
5159      const statusEmed = Object.freeze({ 
5160        NAO_ENCONTRADA: 0, 
5161        INSCRICAO: 1, 
5162        ESPERA: 2, 
5163        ESGOTADO: 3 
5164      }); 
5165 
5166      let unidadesToURL = [] 
5167 
5168      const loadPoliticaPrivacidade = async function () { 
5169 
5170        if (PortalService !== 'undefined') { 
5171          const politicaContent = await PortalService.getPoliticaPrivacidade(); 
5172          document.querySelectorAll('.ssp-card-registro-interesse__card-politica').forEach(el => { 
5173            el.innerHTML = politicaContent; 
5174          }); 
5175        } 
5176 
5177      } 
5178 
5179      const localLivreOnline = function (textoLocal) { 
5180        textoLocal = textoLocal || '' 
5181        textoLocal = textoLocal.replaceAll('online', 'on-line') 
5182 
5183        const textoOnline = 'Nesta turma, todas as aulas serão on-line e ao vivo pela plataforma digital Microsoft Teams'; 
5184 
5185        return textoLocal.toUpperCase().includes(textoOnline.toUpperCase()); 
5186      } 
5187 
5188      const linkBolsa = function (oferta) { 
5189        const hostBolsaUrl = new URL(isAmbienteTeste() ? 'https://hpsgq.sp.senac.br/queue-bootstrap' : 'https://psgq.sp.senac.br/queue-bootstrap'); 
5190 
5191        hostBolsaUrl.searchParams.set('un', codigoUnidade); 
5192        hostBolsaUrl.searchParams.set('cs', $('[name="codigoFT"]').val()); 
5193        hostBolsaUrl.searchParams.set('tu', oferta.codigoOferta); 
5194        hostBolsaUrl.searchParams.set('qv', oferta.qtdeTotalVagasPSG); 
5195 
5196        return hostBolsaUrl.toString(); 
5197      } 
5198 
5199      $('.ssp-ofertas-emed__filtro-content .btn').on('click', function () { 
5200 
5201        var classAtivo = 'btn--filtro-ativo'; 
5202 
5203        if (!$(this).hasClass(classAtivo)) { 
5204 
5205          $(this).siblings().removeClass(classAtivo); 
5206 
5207          $(this).addClass(classAtivo); 
5208 
5209          const $cardTransferencias = $('.card-transferencias-emed'); 
5210 
5211          if ($(this).val() == '0') { 
5212            hideCardSemTurmas(true); 
5213            $('.ssp-slick-ofertas-emed').empty(); 
5214            if (!$('.ssp-slick-ofertas-emed').hasClass('d-none')) $('.ssp-slick-ofertas-emed').addClass('d-none'); 
5215            $('.prev-mobile, .next-mobile').addClass('d-none'); 
5216            $cardTransferencias.removeClass('d-none'); 
5217          } else { 
5218            if (!$cardTransferencias.hasClass('d-none')) $cardTransferencias.addClass('d-none'); 
5219            $('.ssp-slick-ofertas-emed').removeClass('d-none'); 
5220            populaOfertas(objsTela.ofertas); 
5221          } 
5222 
5223        } 
5224 
5225      }); 
5226 
5227      //Cronometro 
5228      var hidden, visibilityChange; 
5229      var restartTimeout = null; 
5230      var interval01, interval15; 
5231 
5232      if (typeof document.hidden !== "undefined") { // Opera 12.10 and Firefox 18 and later support 
5233        hidden = "hidden"; 
5234        visibilityChange = "visibilitychange"; 
5235      } else if (typeof document.msHidden !== "undefined") { 
5236        hidden = "msHidden"; 
5237        visibilityChange = "msvisibilitychange"; 
5238      } else if (typeof document.webkitHidden !== "undefined") { 
5239        hidden = "webkitHidden"; 
5240        visibilityChange = "webkitvisibilitychange"; 
5241      } 
5242 
5243      // Verifica suporte a Visibility API 
5244      if (typeof document.addEventListener === "undefined" || hidden === undefined) { 
5245        console.log("Navegador incompativel com page visibility api"); 
5246      } else { 
5247        // Evento para quando a visibilidade da pagina mudar 
5248        document.addEventListener(visibilityChange, handleVisibilityChange, false); 
5249      } 
5250 
5251      $(".ssp-saiba-mais-curso-accordion").on("click", ".ssp-saiba-mais-curso-accordion__heading", function () { 
5252 
5253        $(this).toggleClass("active").next().slideToggle(); 
5254 
5255        $(".sp-saiba-mais-curso-accordion__contents").not($(this).next()).slideUp(300); 
5256 
5257        $(this).siblings().removeClass("active"); 
5258      }); 
5259 
5260      function loadUnidadesRegistroInteresse(urlCursoInfo) { 
5261        if (objsTela.unidadesRegistroInteresse && objsTela.unidadesRegistroInteresse.length) 
5262          return 
5263 
5264        let urlUnidades = new URL(window.location.origin + urlCursoInfo) 
5265        let paramsUnidades = new URLSearchParams(urlUnidades.search) 
5266        paramsUnidades.delete('inscricaoAberta') 
5267        paramsUnidades.delete('bolsaAberta') 
5268        paramsUnidades.delete('buscarUnidadesComOferta') 
5269        urlUnidades.search = '?' + paramsUnidades.toString() 
5270        urlUnidades = urlUnidades.href 
5271 
5272        $.ajax({ 
5273          url: urlUnidades, 
5274          method: 'get', 
5275          async: false 
5276        }).done(function (data) { 
5277          if (data.length > 0) { 
5278            const cursoInfo = JSON.parse(data); 
5279            const unidadesOfertantes = cursoInfo.unidadesOfertantes; 
5280 
5281            $.each(unidadesOfertantes, function (k, item) { 
5282              var unidade = {}; 
5283              unidade['categoryId'] = item['categoryId']; 
5284              unidade['codigoUnidade'] = item['codigoUnidade']; 
5285              unidade['nome'] = item['nomeUnidade']; 
5286              unidade['enderecoUnidade'] = item['enderecoUnidade']; 
5287              unidade['numero'] = item['numEnderecoUnidade']; 
5288              unidade['complemento'] = item['complementoEnderecoUnidade']; 
5289              unidade['bairro'] = item['bairroUnidade']; 
5290              unidade['googlemapsUnidade'] = item['googlemapsUnidade']; 
5291              unidade['friendlyURL'] = item['friendlyURL']; 
5292              unidade['selecionado'] = false; 
5293              unidade['selectSelecionado'] = ""; 
5294              unidade['ofertas'] = []; 
5295 
5296              if (!objsTela.unidadesRegistroInteresse.filter(uni => uni['categoryId'] == unidade['categoryId']).length) 
5297                objsTela.unidadesRegistroInteresse.push(unidade) 
5298            }); 
5299          } 
5300        }); 
5301      } 
5302 
5303      function loadUnidades(showOptions, unidadeValue) { 
5304        //Busca as unidades do curso 
5305        let buscarUnidadesComOferta = false; 
5306 
5307        if (!isEmed && (!$('#chkInscricao').prop('checked') && !$('#chkBolsa').prop('checked'))) 
5308          buscarUnidadesComOferta = true; 
5309 
5310        const urlCursoInfo = urlSearchCursoInfo 
5311          .replace('\{groupId\}', groupId) 
5312          .replace('\{cursosInfo\}', $('[name="articleId"]').val()) 
5313          .replace('\{inscricaoAberta\}', $('#chkInscricao').prop('checked')) 
5314          .replace('\{bolsaAberta\}', $('#chkBolsa').prop('checked')) 
5315          .replace('\{buscarUnidadesComOferta\}', buscarUnidadesComOferta); 
5316 
5317        loadUnidadesRegistroInteresse(urlCursoInfo) 
5318 
5319        $.ajax({ 
5320          url: urlCursoInfo, 
5321          method: 'get', 
5322          async: false, 
5323          beforeSend: function () { 
5324            loading('.oferta-slick-area'); 
5325          } 
5326        }).done( 
5327          function (data) { 
5328 
5329            if (data.length > 0) { 
5330 
5331              const cursoInfo = JSON.parse(data); 
5332 
5333              const unidades = buscarUnidadesComOferta ? cursoInfo.unidadesComOferta : cursoInfo.unidadesOfertantes; 
5334 
5335              if (!isAoVivo && (!buscarUnidadesComOferta || unidades.length > 0)) 
5336                $('.ssp-container-selecione-unidade').removeClass('d-none') 
5337 
5338              objsTela.unidades = [] 
5339              mapUnidadesIds = new Map(); 
5340 
5341              $.each(unidades, function (k, item) { 
5342 
5343                var unidade = cloneObj(item) 
5344                unidade['nome'] = item['nomeUnidade']; 
5345                unidade['numero'] = item['numEnderecoUnidade']; 
5346                unidade['complemento'] = item['complementoEnderecoUnidade']; 
5347                unidade['bairro'] = item['bairroUnidade']; 
5348                unidade['ofertas'] = []; 
5349 
5350                objsTela.unidades.push(unidade); 
5351 
5352                mapUnidadesIds.set(unidade['categoryId'], unidade['codigoUnidade']); 
5353 
5354                objsTela.unidades.forEach(unidade => unidadesToURL.filter(u => u.friendlyURL == unidade.friendlyURL).length ? '' : unidadesToURL.push(unidade)) 
5355              }); 
5356 
5357 
5358              populaSelectUnidades(undefined, showOptions, unidadeValue); 
5359 
5360            } 
5361          }); 
5362 
5363      } 
5364 
5365      function getOfertaObjectFromJson(ofertaJSON, index) { 
5366 
5367 
5368        var oferta = {}; 
5369        var xml = $($.parseXML(ofertaJSON.content)); 
5370        oferta['ordenar'] = paramOrdem(xml); 
5371        oferta['vagasTotal'] = xml.find('[name="vagasTotal"]').text().trim(); 
5372        var dataInicio = xml.find('[name="dataInicioOferta"]').text().split('-'); 
5373        var dataFim = xml.find('[name="dataFimOferta"]').text().split('-'); 
5374        oferta['dataInicio'] = dataInicio[2].trim() + '/' + dataInicio[1].trim() + '/' + dataInicio[0].trim(); 
5375        oferta['dataFim'] = dataFim[2].trim() + '/' + dataFim[1].trim() + '/' + dataFim[0].trim(); 
5376        oferta['horaInicio'] = xml.find('[name="horaInicioOferta"]').text(); 
5377        oferta['codigoOferta'] = xml.find('[name="codigoOferta"]').text().trim(); 
5378        var dias = []; 
5379        oferta['horaFimOferta'] = xml.find('[name="horaFimOferta"]').text().trim(); 
5380        xml.find('[name="diasDaSemanaOferta"]').find('option').each(function (index, dia) { 
5381          dias.push($(dia).text()); 
5382        }); 
5383        oferta['diasDaSemanaOferta'] = dias; 
5384        oferta['periodoDiaOferta'] = xml.find('[name="periodoDiaOferta"]').text().trim(); 
5385        oferta['precoCheioOferta'] = xml.find('[name="precoCheioOferta"]').text().trim(); 
5386        oferta['precoVendaOferta'] = xml.find('[name="precoVendaOferta"]').text().trim(); 
5387        oferta['numeroMaxParcelasOferta'] = xml.find('[name="numeroMaxParcelasOferta"]').text().trim(); 
5388 
5389        oferta['textoCartoesAceitos'] = pegarTextoCartoesAceitos(xml.find('[name="formaDePagamentoCartaoOferta"]').text().trim()); 
5390        oferta['numParcelaCartoes'] = pegaNumParcela(xml.find('[name="formaDePagamentoCartaoOferta"]').text().trim()); 
5391        oferta['precoParcelaCartoes'] = pegaValorParcela(xml.find('[name="formaDePagamentoCartaoOferta"]').text().trim()); 
5392        oferta['numParcelaBoleto'] = pegaNumParcela(xml.find('[name="formaDePagamentoBoletoOferta"]').text().trim()); 
5393        oferta['precoParcelaBoleto'] = pegaValorParcela(xml.find('[name="formaDePagamentoBoletoOferta"]').text().trim()); 
5394 
5395        oferta['precoVendaMaxParcelaOferta'] = xml.find('[name="precoVendaMaxParcelaOferta"]').text().trim(); 
5396        oferta['formaDePagamentoOferta'] = xml.find('[name="formaDePagamentoOferta"]').text().trim(); 
5397        oferta['botaoCompraOferta'] = xml.find('[name="botaoCompraOferta"]').text().trim(); 
5398        oferta['vagasParaCompraOferta'] = xml.find('[name="vagasParaCompraOferta"]').text().trim(); 
5399        oferta['botaoBolsaOferta'] = xml.find('[name="botaoBolsaOferta"]').text().trim(); 
5400        oferta['vagasBolsaOferta'] = xml.find('[name="vagasBolsaOferta"]').text().trim(); 
5401        oferta['dataAberturaBolsaOferta'] = xml.find('[name="dataAberturaBolsaOferta"]').text().trim(); 
5402        oferta['horaAberturaBolsaOferta'] = xml.find('[name="horaAberturaBolsaOferta"]').text().trim(); 
5403        oferta['espacoExterno'] = xml.find('[name="espacoExterno"]').text().trim(); 
5404        oferta['localEspacoExterno'] = xml.find('[name="localEspacoExterno"]').text().trim(); 
5405        oferta['ruaEspacoExterno'] = xml.find('[name="ruaEspacoExterno"]').text().trim(); 
5406        oferta['numeroEspacoExterno'] = xml.find('[name="numeroEspacoExterno"]').text().trim(); 
5407        oferta['complementoEspacoExterno'] = xml.find('[name="complementoEspacoExterno"]').text().trim(); 
5408        oferta['bairroEspacoExterno'] = xml.find('[name="bairroEspacoExterno"]').text().trim(); 
5409        oferta['cidadeEspacoExterno'] = xml.find('[name="cidadeEspacoExterno"]').text().trim(); 
5410        oferta['ufEspacoExterno'] = xml.find('[name="ufEspacoExterno"]').text().trim(); 
5411        oferta['cepEspacoExterno'] = xml.find('[name="cepEspacoExterno"]').text().trim(); 
5412        oferta['qtdeTotalVagas'] = xml.find('[name="qtdeTotalVagas"]').text().trim(); 
5413        oferta['qtdeTotalVagasPSG'] = xml.find('[name="qtdeTotalVagasPSG"]').text().trim(); 
5414        oferta['horariosAllOferta'] = xml.find('[name="horariosAllOferta"]').text().trim(); 
5415        oferta['formaDePagamentoCartaoOferta'] = xml.find('[name="formaDePagamentoCartaoOferta"]').text().trim(); 
5416        oferta['formaDePagamentoBoletoOferta'] = xml.find('[name="formaDePagamentoBoletoOferta"]').text().trim(); 
5417        oferta['dtLimiteMatricula'] = xml.find('[name="dtLimiteMatricula"]').text().trim(); 
5418        oferta['dataAberturaMatricula'] = xml.find('[name="dataAberturaMatricula"]').text().trim(); 
5419        oferta['etapa'] = xml.find('[name="etapa"]').text().trim(); 
5420        oferta['destinoCompra'] = xml.find('[name="destinoCompra"]').text().trim(); 
5421        //adicao do destinoBolsa na oferta - 9546 - 11/07/2022 
5422        oferta['destinoBolsa'] = xml.find('[name="destinoBolsa"]').text().trim(); 
5423 
5424        // 18/07/2025 - Removido o  dataAberturaBolsaOferta recebendo o dataAberturaMatricula  
5425        // devido a mudança de regra que recebemos da área 
5426 
5427        return oferta; 
5428      } 
5429 
5430      const getStatusEmed = (oferta) => { 
5431 
5432        if ("${listaEsperaAtiva?c}" !== "true") return statusEmed.INSCRICAO; 
5433 
5434        const urlStatusEsperaEmed = () => { 
5435          let url = (isAmbienteTeste()) ? 
5436            'https://hinscricao-educacional-backend.sp.senac.br/api/lista-espera/' 
5437            : 'https://inscricao-educacional-ms.sp.senac.br/api/lista-espera/'; 
5438 
5439          return url + oferta.codigoOferta; 
5440        } 
5441 
5442        const callTl = async () => { 
5443          if (getCookie('tl') == null) { 
5444            return await $.ajax({ 
5445              url: '/o/senac-content-services/geraTokenServicosSenac', 
5446              method: 'GET' 
5447            }); 
5448          } 
5449          return getCookie('tl'); 
5450        } 
5451 
5452        const callListaEspera = async () => { 
5453          var tl = ''; 
5454          try { 
5455            tl = await callTl(); 
5456            if (getCookie('tl') == null) { 
5457              tl = JSON.parse(tl).token; 
5458              writeCookie('tl', tl, 6, ''); 
5459            } 
5460          } catch (err) { 
5461            console.error(err); 
5462            return {}; 
5463          } 
5464 
5465          return $.ajax({ 
5466            url: urlStatusEsperaEmed(), 
5467            method: 'GET', 
5468            beforeSend: function (xhr) { 
5469              xhr.setRequestHeader("Authorization", tl); 
5470            } 
5471          }) 
5472        } 
5473 
5474        return new Promise(async function (resolve, reject) { 
5475          const resp = await callListaEspera(); 
5476          if (typeof resp !== 'object') resp = JSON.parse(resp); 
5477          let status = resp.STATUS; 
5478          resolve(status); 
5479        }); 
5480 
5481      } 
5482 
5483      function getOfertasAoVivo(codigoFT, dataEfetivaOferta, categoryIds) { 
5484 
5485        if (categoryIds && categoryIds.length) { 
5486          var params = new URLSearchParams(); 
5487          params.set('codigoFTOferta', codigoFT) 
5488          params.set('dataEfetivaOferta', dataEfetivaOferta) 
5489          params.set('categoryIds', categoryIds) 
5490          params.set('start', startOfertaParam) 
5491          params.set('end', endOfertaParam) 
5492          params.set('inscricaoAberta', $('#chkInscricao').prop('checked')) 
5493          params.set('bolsaAberta', $('#chkBolsa').prop('checked')) 
5494          params.set('cursoArticleId', $('[name="articleId"]').val() || ''); 
5495 
5496          if ($('#chkBolsa').prop('checked')) { 
5497            params.set('considerarDataBolsaFutura', true) 
5498          } 
5499          const url = urlSearchOferta + '?' + params.toString() 
5500 
5501          $.ajax({ 
5502            url: url, 
5503            method: 'get', 
5504            dataType: 'json', 
5505            async: false 
5506          }).done( 
5507            function (data) { 
5508 
5509              if (data.length > 0) { 
5510                $('#ssp-alternadores').show() 
5511                showedFilters = true 
5512 
5513                objsTela.ofertasAoVivoTodasUnidades = [] 
5514 
5515                data.forEach(function (ofertaJSON, index) { 
5516 
5517                  var oferta = getOfertaObjectFromJson(ofertaJSON, index); 
5518 
5519                  //guardo em um map a oferta e qual unidade é, para utilizar depois no populaOferta para o aoVivo                
5520                  ofertaUnidadeMap.set(oferta['codigoOferta'], mapUnidadesIds.get(parseInt(ofertaJSON.unidadeCategoryIds))); 
5521                  objsTela.ofertasAoVivoTodasUnidades.push(oferta); 
5522 
5523                }); 
5524              } else { 
5525                loadAlternadores(data) 
5526              } 
5527 
5528              populaOfertas(objsTela.ofertasAoVivoTodasUnidades); 
5529              addEventBolsa() 
5530            } 
5531          ).fail(function (e) { 
5532            console.error(e) 
5533            populaOfertas(objsTela.ofertasAoVivoTodasUnidades = []); 
5534          }) 
5535        } else { 
5536          loadAlternadores([]) 
5537          populaOfertas(objsTela.ofertasAoVivoTodasUnidades = []) 
5538        } 
5539 
5540        if (isAoVivo) { 
5541          if (objsTela.ofertasAoVivoTodasUnidades && objsTela.ofertasAoVivoTodasUnidades.length) 
5542            hideCardSemTurmas(true) 
5543          else 
5544            hideCardSemTurmas(false) 
5545        } 
5546      } 
5547 
5548      function mudouToggleOferta(ofertas) { 
5549        const oferta = ofertas && ofertas[0] 
5550        if (!oferta) 
5551          return true 
5552 
5553        const selecaoInscricao = $('#chkInscricao').prop('checked') 
5554        const selecaoBolsa = $('#chkBolsa').prop('checked') 
5555 
5556        return oferta.selecaoInscricao != selecaoInscricao || oferta.selecaoBolsa != selecaoBolsa 
5557      } 
5558 
5559      function loadAlternadores(ofertas) { 
5560        if (showedFilters) { 
5561          $('#ssp-alternadores').show() 
5562          return 
5563        } 
5564 
5565        if ($('#unidades-ofertas').is(":hidden") || $('#unidades-ofertas option').length <= 1) { 
5566          if (isAoVivo) { 
5567            if (ofertas && ofertas.length) 
5568              $('#ssp-alternadores').show() 
5569            else { 
5570              if (!$('#chkInscricao').prop('checked') && !$('#chkBolsa').prop('checked')) 
5571                $('#ssp-alternadores').hide() 
5572              else 
5573                $('#ssp-alternadores').show() 
5574            } 
5575          } else { 
5576            if (!$('#chkInscricao').prop('checked') && !$('#chkBolsa').prop('checked')) 
5577              $('#ssp-alternadores').hide() 
5578            else 
5579              $('#ssp-alternadores').show() 
5580          } 
5581        } else 
5582          $('#ssp-alternadores').show() 
5583 
5584        showedFilters = showedFilters || $('#ssp-alternadores').is(":visible") 
5585      } 
5586 
5587      function getOfertas(codigoFT, dataEfetivaOferta, categoryId) { 
5588 
5589        var indiceUnidade = -1; 
5590        const selecaoInscricao = $('#chkInscricao').prop('checked') 
5591        const selecaoBolsa = $('#chkBolsa').prop('checked') 
5592 
5593        for (var i = 0; i < objsTela.unidades.length; i++) 
5594          if (objsTela.unidades[i].categoryId == categoryId) 
5595            indiceUnidade = i; 
5596 
5597        ultimaUnidade = indiceUnidade; 
5598 
5599        if (!objsTela.categoriesIds.includes(categoryId) || mudouToggleOferta(objsTela.unidades[indiceUnidade]['ofertas'])) { 
5600          objsTela.unidades[indiceUnidade]['ofertas'] = [] 
5601 
5602          var params = new URLSearchParams(); 
5603          params.set('codigoFTOferta', codigoFT) 
5604          params.set('dataEfetivaOferta', dataEfetivaOferta) 
5605          params.set('categoryIds', categoryId) 
5606          params.set('start', startOfertaParam) 
5607          params.set('end', endOfertaParam) 
5608          params.set('inscricaoAberta', $('#chkInscricao').prop('checked')) 
5609          params.set('bolsaAberta', $('#chkBolsa').prop('checked')) 
5610          params.set('cursoArticleId', $('[name="articleId"]').val() || ''); 
5611 
5612          if ($('#chkBolsa').prop('checked')) { 
5613            params.set('considerarDataBolsaFutura', true) 
5614          } 
5615 
5616          const url = urlSearchOferta + '?' + params.toString() 
5617 
5618          var deferredOfertas = $.Deferred(); 
5619 
5620          $.ajax({ 
5621            url: url, 
5622            method: 'get', 
5623            dataType: 'json' 
5624          }).done( 
5625            async function (data) { 
5626 
5627              if (data.length > 0) { 
5628                $('#ssp-alternadores').show() 
5629                showedFilters = true 
5630 
5631                $('.ssp-container-selecione-unidade').show(); 
5632 
5633                data.forEach(function (ofertaJSON, index) { 
5634 
5635                  var oferta = getOfertaObjectFromJson(ofertaJSON, index); 
5636 
5637                  //Preenche as ofertas da unidade              
5638                  objsTela.unidades[indiceUnidade]['ofertas'].push(oferta); 
5639                  objsTela.unidades[indiceUnidade]['ofertas'].forEach(o => { 
5640                    o.selecaoInscricao = selecaoInscricao 
5641                    o.selecaoBolsa = selecaoBolsa 
5642                  }) 
5643 
5644                }); 
5645              } else { 
5646                loadAlternadores() 
5647              } 
5648              objsTela.categoriesIds.push(categoryId); 
5649              await populaOfertas(objsTela.unidades[indiceUnidade]['ofertas']); 
5650              addEventBolsa() 
5651              deferredOfertas.resolve(); 
5652            } 
5653          ).fail(function () { 
5654            console.error('Erro ao buscar ofertas da unidade selecionada.'); 
5655            hideCardSemTurmas(false) 
5656            deferredOfertas.reject(); 
5657          }) 
5658 
5659          return deferredOfertas.promise() 
5660 
5661          //Se estiver na cache, valida as ofertas 
5662        } else { 
5663 
5664          var deferredCache = $.Deferred(); 
5665          Promise.resolve(populaOfertas(objsTela.unidades[indiceUnidade]['ofertas'])) 
5666            .then(function () { 
5667              deferredCache.resolve(); 
5668            }) 
5669            .catch(function () { 
5670              deferredCache.reject(); 
5671            }); 
5672          return deferredCache.promise(); 
5673 
5674        } 
5675      } 
5676 
5677      function populaSelectUnidades(unidades, showOptions, unidadeValue) { 
5678        var unidadePreSelecionada = false; 
5679        var categoryIdUnidadePreSelecionada = ''; 
5680 
5681        //Oredenacao 
5682        objsTela.unidades.sort(function (a, b) { 
5683          return ordenar(a, b, 'nome'); 
5684        }); 
5685 
5686        objsTela.unidadesRegistroInteresse.sort(function (a, b) { 
5687          return ordenar(a, b, 'nome'); 
5688        }); 
5689 
5690        //console.log(objsTela.unidades); 
5691 
5692        $.each(objsTela.unidades, function (k, item) { 
5693 
5694          if (getURLData().includes('/' + item.friendlyURL + '/')) { 
5695            unidadePreSelecionada = true; 
5696            categoryIdUnidadePreSelecionada = item['categoryId']; 
5697          } 
5698        }); 
5699 
5700        //console.log('Unidade Pre '+unidadePreSelecionada); 
5701 
5702        if (objsTela.unidades.length == 0) { 
5703          if (!showOptions) 
5704            $('.ssp-container-selecione-unidade').addClass('d-none'); 
5705          $('.oferta-slick-area').empty(); 
5706          $('.prev-mobile').addClass('d-none'); 
5707          $('.next-mobile').addClass('d-none'); 
5708          //EMED remove msg registro interesse 
5709          //if(isEmed) $('.ssp-card-oferta-curso__sem-vaga-description').addClass('d-none'); 
5710        } 
5711 
5712        if (isAoVivo) { 
5713 
5714          const codigoFT = $('[name="codigoFT"]').val(); 
5715          const dataEfetivaOferta = $('[name="dataEfetivaSTR"]').val(); 
5716 
5717          var unidadesCategoryAll = ''; 
5718 
5719          $.each(objsTela.unidades, function (k, unidade) { 
5720            unidadesCategoryAll += unidade['categoryId'] + ','; 
5721          }); 
5722 
5723          //tirando ultima virgula 
5724          unidadesCategoryAll = unidadesCategoryAll.substring(0, unidadesCategoryAll.length - 1); 
5725 
5726          getOfertasAoVivo(codigoFT, dataEfetivaOferta, unidadesCategoryAll); 
5727 
5728        } else { 
5729          $('#unidades-ofertas').empty() 
5730 
5731          if (objsTela.unidades && objsTela.unidades.length) { 
5732            if (isEmed) 
5733              $('#unidades-ofertas').append($('<option value="">Selecione uma unidade</option>')) 
5734            else 
5735              $('#unidades-ofertas').append($('<option value="">Clique na unidade de interesse</option>')) 
5736 
5737          } else 
5738            $('#unidades-ofertas').append($('<option value="">Nenhum resultado encontrado</option>')) 
5739 
5740          let unidadeFounded = criarOptionUnidadesPorRegiao(objsTela.unidades) 
5741 
5742          //Dispara o evento para primeira unidade ou pela friendlyURl da unidade 
5743          if (unidadeValue) { 
5744            $('#unidades-ofertas').val(unidadeValue); 
5745            $('#unidades-ofertas').change(); 
5746          } else if (unidadeFounded) { 
5747            $('#unidades-ofertas').val(unidadeFounded['categoryId'] + "@" + unidadeFounded['codigoUnidade']); 
5748            $('#unidades-ofertas').change(); 
5749          } else if (!unidadePreSelecionada) { 
5750            $('#unidades-ofertas').change(); 
5751          } 
5752 
5753          $('.ssp-card-registro-interesse__select.unidades').empty() 
5754          $('.ssp-card-registro-interesse__select.unidades').append('<option value="" disabled selected>Selecione uma unidade</option>') 
5755          $.each(objsTela.unidadesRegistroInteresse, function (k, unidade) { 
5756 
5757            $('.ssp-card-registro-interesse__select.unidades').append('<option value="' + unidade['codigoUnidade'] + '">' + unidade['nome'] + '</option>'); 
5758          }); 
5759        } 
5760 
5761      } 
5762 
5763      function excecaoCursoGratuito(oferta) { 
5764        return $('[name="modalidadeName"]').val() == 'acoes-educ.-curta-duracao' && $('[name="tipoCurso"]').val() == 'livre' && (strToFloat(oferta.precoVendaOferta) == 0); 
5765      } 
5766 
5767 
5768      function mudarUnidade(ev) { 
5769        startOfertaParam = 0; 
5770        endOfertaParam = 25; 
5771        carregouUltimaOferta = false; 
5772 
5773        var elem = $(ev.target); 
5774        var unidades = objsTela.unidades; 
5775 
5776        //verifica se selecionou alguma unidade 
5777        if (!elem.val()) { 
5778          $('#informe-novas-turmas, .ssp-ofertas-emed__section, .ssp-ofertas__box-endereco-unidade').addClass('d-none'); 
5779 
5780          if (isEmed) 
5781            $('#ssp-section-response').addClass('d-none') 
5782 
5783          hideCardSemTurmas($('#unidades-ofertas option').length > 1) 
5784 
5785          elem.val('') 
5786          habilitarRegistroInteresse(false) 
5787          //Zera variável que controla existência de ofertas com bolsa 
5788          ofertasComBolsa = false; 
5789          controlaPaginaBolsa(); 
5790 
5791          return $.Deferred().resolve().promise(); 
5792        } 
5793 
5794        $('#informe-novas-turmas, .ssp-ofertas__box-endereco-unidade').removeClass('d-none'); 
5795        hideCardSemTurmas(true) 
5796        if (isEmed) { 
5797          $('.ssp-ofertas-emed__section').removeClass('d-none'); 
5798          $('#ssp-section-response').removeClass('d-none') 
5799          $('.ssp-card-oferta-curso__section-title').addClass('d-none'); 
5800          $('.prev-mobile, .next-mobile').addClass('d-none'); 
5801          var nomeUnidade = $('#unidades-ofertas option:selected').text(); 
5802          let tamScreen = $(window).width(); 
5803 
5804          if (tamScreen < 1024) 
5805            $('#titulo-emed').text('Turmas ' + anoTurmaEmed); 
5806          else 
5807            $('#titulo-emed').text('Turmas ' + anoTurmaEmed + ' - ' + nomeUnidade); 
5808 
5809        } 
5810 
5811        const codigoFT = $('[name="codigoFT"]').val(); 
5812        const dataEfetivaOferta = $('[name="dataEfetivaSTR"]').val(); 
5813 
5814        //colocamos dentro do option categoryId@codUnidade 
5815        splitted = elem.val().split("@"); 
5816        var categoryIdUnidade = splitted[0]; 
5817        var codUnidade = splitted[1]; 
5818        var ofertasPromise = $.Deferred().resolve().promise(); 
5819 
5820        for (var i = 0; unidades.length > i; i++) { 
5821 
5822          if (unidades[i].categoryId == categoryIdUnidade) { 
5823 
5824            var unidade = unidades[i]; 
5825 
5826            //Exibe o endereco da unidade 
5827            const urlBuscaUnidade = urlUnidadeInfoDetalhe 
5828              .replace('\{companyId\}', themeDisplay.getCompanyId()) 
5829              .replace('\{codigoUnidade\}', unidade.codigoUnidade); 
5830 
5831            $.ajax({ 
5832              url: urlBuscaUnidade, 
5833              type: 'get', 
5834              dataType: 'json', 
5835              success: function (unidadeInfo) { 
5836                if (unidadeInfo != null && typeof unidadeInfo !== 'undefined') { 
5837 
5838                  var endereco = concatSTR(unidadeInfo.enderecoUnidade, unidadeInfo.numEnderecoUnidade, ', '); 
5839                  endereco = concatSTR(endereco, unidadeInfo.complementoEnderecoUnidade, ' - '); 
5840                  endereco = concatSTR(endereco, unidadeInfo.bairroUnidade, ' - '); 
5841 
5842                  $('.ssp-ofertas__endereco-unidade').text(endereco); 
5843                  $('.ssp-ofertas__endereco-unidade').attr('href', unidadeInfo.googlemapsUnidade); 
5844                } 
5845              }, 
5846              error: function (data) { 
5847                $('.ssp-ofertas__endereco-unidade').text(''); 
5848                $('.ssp-ofertas__endereco-unidade').attr('href', '#a'); 
5849                console.log('Unidade não encontrada'); 
5850              } 
5851            }) 
5852 
5853            ofertasPromise = getOfertas(codigoFT, dataEfetivaOferta, unidades[i].categoryId); 
5854 
5855            habilitarRegistroInteresse(!!(unidades && unidades.length)); 
5856            break; 
5857          } 
5858        } 
5859 
5860        return ofertasPromise; 
5861      } 
5862 
5863      function toggleUnidadesOfertasLoading(isLoading) { 
5864        var section = $('.ssp-ofertas-emed__section'); 
5865        var selectUnidades = $('#unidades-ofertas'); 
5866        var loadingHostClass = 'ssp-ofertas-emed__loading-host'; 
5867 
5868        // O bloqueio do select permanece para todos os cursos. 
5869        selectUnidades.prop('disabled', isLoading); 
5870 
5871        // O loading visual global foi substituido por loading por card no fluxo EMED. 
5872        if (!isEmed) { 
5873          return; 
5874        } 
5875 
5876        section.removeClass('ssp-ofertas-emed--loading'); 
5877        section.find('.' + loadingHostClass).remove(); 
5878        section.attr('aria-busy', 'false'); 
5879      } 
5880 
5881      function toggleOfertaInvestimentoLoading(codigoOferta, isLoading) { 
5882        if (!isEmed || !codigoOferta) { 
5883          return; 
5884        } 
5885 
5886        var cardInvestimento = $('.codigoOferta_' + codigoOferta + ' .ssp-ofertas-emed__card-info-investimento'); 
5887        var loadingHostClass = 'ssp-ofertas-emed__card-info-investimento-loading-host'; 
5888 
5889        if (!cardInvestimento.length) { 
5890          return; 
5891        } 
5892 
5893        if (isLoading) { 
5894          cardInvestimento.attr('aria-busy', 'true'); 
5895 
5896          if (!cardInvestimento.find('.' + loadingHostClass).length) { 
5897            cardInvestimento.append('<div class="' + loadingHostClass + '" role="status" aria-live="polite"></div>'); 
5898          } 
5899 
5900          loading(cardInvestimento.find('.' + loadingHostClass)); 
5901          return; 
5902        } 
5903 
5904        cardInvestimento.find('.' + loadingHostClass).remove(); 
5905        cardInvestimento.attr('aria-busy', 'false'); 
5906      } 
5907 
5908      function hasOfertaInvestimentoButtons(codigoOferta) { 
5909        var cardInvestimento = $('.codigoOferta_' + codigoOferta + ' .ssp-ofertas-emed__card-info-investimento'); 
5910 
5911        if (!cardInvestimento.length) { 
5912          return false; 
5913        } 
5914 
5915        return cardInvestimento.find('[id^="btnComprarEmed_"], [id^="btnContadorComprar_"], [id^="btnBolsa_"], [id^="btnContadorBolsa_"]').length > 0; 
5916      } 
5917 
5918      function waitForOfertaInvestimentoButtons(codigoOferta, maxWaitMs) { 
5919        var deferred = $.Deferred(); 
5920        var waitLimit = typeof maxWaitMs === 'number' ? maxWaitMs : 4000; 
5921        var intervalMs = 100; 
5922        var elapsedMs = 0; 
5923 
5924        if (hasOfertaInvestimentoButtons(codigoOferta)) { 
5925          deferred.resolve(true); 
5926          return deferred.promise(); 
5927        } 
5928 
5929        var timer = setInterval(function () { 
5930          elapsedMs += intervalMs; 
5931 
5932          if (hasOfertaInvestimentoButtons(codigoOferta)) { 
5933            clearInterval(timer); 
5934            deferred.resolve(true); 
5935            return; 
5936          } 
5937 
5938          if (elapsedMs >= waitLimit) { 
5939            clearInterval(timer); 
5940            deferred.resolve(false); 
5941          } 
5942        }, intervalMs); 
5943 
5944        return deferred.promise(); 
5945      } 
5946 
5947      function retryRenderOfertaInvestimentoButtons(codigoOferta) { 
5948        var oferta = ofertasMap.get('' + codigoOferta) || ofertasMap.get(codigoOferta); 
5949 
5950        if (!oferta) { 
5951          return; 
5952        } 
5953 
5954        verificaBotoesEmed(oferta, true).catch(function (error) { 
5955          console.error('Erro ao atualizar botoes da oferta:', error); 
5956        }); 
5957      } 
5958 
5959      function pegarTextoCartoesAceitos(campo) { 
5960        indice = campo.indexOf(' em até '); 
5961        inicio = 0; 
5962        fim = indice; 
5963 
5964        return campo.substring(inicio, fim); 
5965      } 
5966 
5967      function pegaNumParcela(campo) { 
5968 
5969        indice = campo.indexOf('até '); 
5970        inicio = indice + 4; 
5971        fim = indice + 6; 
5972 
5973        return campo.substring(inicio, fim); 
5974 
5975      } 
5976 
5977      function pegaValorParcela(campo) { 
5978 
5979        indice = campo.indexOf('R$'); 
5980        inicio = indice + 2; 
5981        valorAmericano = campo.substring(inicio) 
5982 
5983        return formataValor(valorAmericano); 
5984 
5985      } 
5986 
5987      function montaHTMLOferta(oferta, index, codigoUnidade, posLoad) { 
5988 
5989        var retornoDiasHorarios = processaDiasHorariosOferta(oferta.horariosAllOferta); 
5990        diasSemanaHTML = ""; 
5991 
5992        for (var diaDaOferta of retornoDiasHorarios) { 
5993          diasSemanaHTML += htmlSlickAreaDiasSemana.replace('\{diasSemana\}', diaDaOferta.dias); 
5994          diasSemanaHTML = diasSemanaHTML.replace('\{horasSemana\}', diaDaOferta.horario) 
5995        } 
5996 
5997        var ofertaHTML = ""; 
5998 
5999        if (isEmed) { 
6000 
6001          ofertaHTML = htmlSlickAreaEmed(oferta); 
6002          $('[name="codUnidadeSelecionada"]').val(codigoUnidade); 
6003 
6004          if (!posLoad) $('.ssp-slick-ofertas-emed').append(ofertaHTML) 
6005          else $('.ssp-slick-ofertas-emed').slick('slickAdd', ofertaHTML); 
6006        } else { 
6007 
6008 
6009          ofertaHTML = htmlSlickArea(index, oferta, diasSemanaHTML, codigoUnidade) 
6010 
6011          if (!posLoad) 
6012            $('.oferta-slick-area').append(ofertaHTML); 
6013          else 
6014            $('.oferta-slick-area').slick('slickAdd', ofertaHTML); 
6015 
6016          ajustaTextoDiasHorarioOferta(oferta.codigoOferta); 
6017 
6018        } 
6019 
6020        if (turmasIniciadas(oferta.dataInicio)) 
6021          $("#aviso-turma-iniciada-" + index).show(); 
6022 
6023        //remove os botões/itens de compra/bolsa caso seja preciso 
6024        $('.oferta-slick-area').find('.d-none-btn').remove(); 
6025      } 
6026 
6027 
6028      //RECEBE A STRING DE HORARIOS E RETORNA UMA LISTA DE OBJETOS COM OS DIAS E HORARIOS FORMATADOS 
6029      //@horariosAllOferta String com os dias da semana em sigla seguido do horario da aula e separados por virgula EX: "Qui 12h às 13, Sex 12h às 13h"  
6030      function processaDiasHorariosOferta(horariosAllOferta) { 
6031 
6032        var dias = horariosAllOferta.trim().split(','); 
6033        let arrayDiasSemana = [{ "Seg": "Segunda" }, { "Ter": "Terça" }, { "Qua": "Quarta" }, { "Qui": "Quinta" }, { "Sex": "Sexta" }, { "Sab": "Sábado" }, { "Dom": "Domingo" }] 
6034 
6035        var arrayDia = []; 
6036        if (dias.length >= 1) { 
6037          for (var k = 0; dias.length > k; k++) { 
6038            var diasSplit = dias[k].trim().split(' '); 
6039            var diasSemana = diasSplit.shift() 
6040            var ultimaPos = diasSplit.length - 1; 
6041            var horasStr = diasSplit[0] + ' às ' + diasSplit[ultimaPos] 
6042            arrayDia.push({ horasStr, diasSemana }); 
6043          } 
6044        } 
6045 
6046        arrayDia = groupByArray(arrayDia, 'horasStr', 'diasSemana'); 
6047        arrayDia = orderByArray(arrayDia, arrayDiasSemana); 
6048 
6049        var ret = diaHorarioOfertaFormatado(arrayDia, arrayDiasSemana); 
6050        return ret; 
6051      } 
6052 
6053      //cria um array de objetos Agrupando de acordo ao campo informado como chave.  
6054      //@arr = Array multidimensional que tenha os campos key e valueAdd 
6055      //@key = campo que será chave nesse array 
6056      //@valueAdd = campo que será agrupado caso tenha a mesma informação passada no campo key 
6057      const groupByArray = (arr, key, valueAdd) => { 
6058        const initialValue = []; 
6059        const retornoValue = []; 
6060        arr.forEach((acc, cval) => { 
6061          const myAttribute = cval[key]; 
6062          acc[key] in retornoValue ? retornoValue[acc[key]].push(acc[valueAdd]) : retornoValue[acc[key]] = [acc[valueAdd]]; 
6063          return acc; 
6064        }, initialValue); 
6065        return retornoValue; 
6066      }; 
6067 
6068 
6069      //Cria um array de objetos a partir do primeiro array inserido e ordenados de acordo a ordem do segundo array informado.  
6070      //@arrayOrdena = Array de objetos que tenha os campos que precisa ser ordenados 
6071      //@ordem = array com a sequencia que queira ordenar - ex: seg, ter, qua, qua 
6072      const orderByArray = (arrayOrdena, ordem) => { 
6073 
6074        let diasSem = []; 
6075        const arrayOrdenado = []; 
6076        let controle; 
6077 
6078        //percorre cada campo existente no ordem e busca o mesmo no arrayOrdena, encontrando insere no arrayOrdenado 
6079        for (let campo of ordem) { 
6080          Object.entries(arrayOrdena).forEach(([key, value]) => { 
6081            for (let diaOferta of value) { 
6082              if (diaOferta === Object.keys(campo)[0]) { 
6083                arrayOrdenado[key] = arrayOrdena[key]; 
6084              } 
6085            } 
6086          }) 
6087        } 
6088        return arrayOrdenado; 
6089      }; 
6090 
6091      //retorna o valor de um objeto dentro de um array 
6092      //@objetoBusca = array de objetos que sera buscado o valor 
6093      //@keyBusca = nome do campo a ser buscada no objeto para pegar o seu valor 
6094      function findValueInObject(objetoBusca, keyBusca) { 
6095        var retorno = ""; 
6096        Object.entries(objetoBusca).forEach(([horario, dias]) => { 
6097          Object.entries(dias).forEach(([key, val]) => { 
6098            if (key.trim() == keyBusca.trim()) { 
6099              retorno = val; 
6100            } 
6101          }); 
6102        }); 
6103        return retorno; 
6104      } 
6105 
6106      //Recebe um objeto com valores dos dias da semana e define se sao dias seguidos ou alternados.  
6107      //@arrayComDiasDaSemana = array com os dias da semana a serem validados - exemplo ['Qua','Qui','Sex'] 
6108      //@keyBusca = nome do campo a ser buscada no objeto para pegar o seu valor 
6109      function diasSequenciaisOuAlternados(arrayComDiasDaSemana, arrayDiasDaSemana) { 
6110 
6111        let arrayValidador = []; 
6112 
6113        //cria um array com o index dos dias das semanas encontrados [0 = seg, 1 = ter ... 6 = dom] 
6114        for (let diaOferta of arrayComDiasDaSemana) { 
6115          for (let i = 0; i < arrayDiasDaSemana.length; i++) { 
6116            if (diaOferta === Object.keys(arrayDiasDaSemana[i])[0]) { 
6117              arrayValidador[i] = true; 
6118            } 
6119          } 
6120        } 
6121 
6122        let keyCompair = 99; 
6123        var sequencial = true; 
6124 
6125        //verifica quais posições foram criadas no array, e se os valores delas estão em sequencia. 
6126        for (let keyValidator of Object.keys(arrayValidador)) { 
6127          keyValidator = parseInt(keyValidator); 
6128          if (keyCompair !== 99) { 
6129            if (keyValidator === keyCompair) { 
6130              sequencial = true; 
6131            } else { 
6132              sequencial = false; 
6133              break; 
6134            } 
6135          } 
6136          keyCompair = keyValidator + 1; 
6137        } 
6138        return sequencial; 
6139      } 
6140 
6141 
6142      //Exibe as informações de dia e horario de oferta de acordo a sua estrutura 
6143      //Caso os dias sejam sequenciais exibe a primeiro e ultimo dia da semana ligados com a letra 'a' Ex: Segunda a Quinta  
6144      //Caso os dias Nao sejam sequenciais exibem todos os dias separados por virgula  Ex: Segunda, terça, sexta e domingo 
6145      //@arrayAgrupadoEOrdenado = array de objetos que sera exibido 
6146      //@arrayDiasDaSemana = array com os dias da semana, sendo chave a sigla da semana (ex: Qua) e o valor o nome esperado (ex: Quarta) 
6147      function diaHorarioOfertaFormatado(arrayAgrupadoEOrdenado, arrayDiasDaSemana) { 
6148 
6149        var stringAux = ""; 
6150        var listRetorno = []; 
6151 
6152        Object.entries(arrayAgrupadoEOrdenado).forEach(([key, value]) => { 
6153 
6154          var sequencial = diasSequenciaisOuAlternados(value, arrayDiasDaSemana); 
6155          var stringAux = ""; 
6156          var diaOferta = {}; 
6157 
6158          if (sequencial) { 
6159            switch (value.length) { 
6160              case 1: 
6161                stringAux = stringAux + findValueInObject(arrayDiasDaSemana, value[0]) + ": "; 
6162                diaOferta.dias = stringAux.charAt(0).toUpperCase() + stringAux.slice(1).toLowerCase(); // somente a primeira maiúscula 
6163                diaOferta.horario = key; 
6164                break; 
6165              case 2: 
6166                stringAux = stringAux + findValueInObject(arrayDiasDaSemana, value[0]) + " e " + findValueInObject(arrayDiasDaSemana, value[value.length - 1]) + ": "; 
6167                diaOferta.dias = stringAux.charAt(0).toUpperCase() + stringAux.slice(1).toLowerCase(); // somente a primeira maiúscula 
6168                diaOferta.horario = key; 
6169                break; 
6170              default: 
6171                stringAux = stringAux + findValueInObject(arrayDiasDaSemana, value[0]) + " a " + findValueInObject(arrayDiasDaSemana, value[value.length - 1]) + ": "; 
6172 
6173                diaOferta.dias = stringAux.charAt(0).toUpperCase() + stringAux.slice(1).toLowerCase(); // somente a primeira maiúscula 
6174                diaOferta.horario = key; 
6175                break; 
6176            } 
6177          } else { 
6178            switch (value.length) { 
6179              case 2: 
6180                stringAux = stringAux + findValueInObject(arrayDiasDaSemana, value[0]) + " e " + findValueInObject(arrayDiasDaSemana, value[value.length - 1]) + ": "; 
6181                diaOferta.dias = stringAux.charAt(0).toUpperCase() + stringAux.slice(1).toLowerCase(); // somente a primeira maiúscula 
6182                diaOferta.horario = key; 
6183                break; 
6184              default: 
6185                var ct = 0; 
6186                var stringDias = ""; 
6187                for (let v of value) { 
6188                  ct++; 
6189                  ct == value.length ? stringDias = stringDias.substring(0, stringDias.length - 2) + " e " + findValueInObject(arrayDiasDaSemana, v) : stringDias += findValueInObject(arrayDiasDaSemana, v) + ", "; 
6190                } 
6191                stringAux = stringAux + stringDias + ": "; 
6192                diaOferta.dias = stringAux.charAt(0).toUpperCase() + stringAux.slice(1).toLowerCase(); // somente a primeira maiúscula 
6193                diaOferta.horario = key; 
6194                break; 
6195            } 
6196          } 
6197 
6198          listRetorno.push(diaOferta); 
6199        }) 
6200        return listRetorno; 
6201      }; 
6202 
6203 
6204      //Distribui dia e horario com quebra de linha entre eles ou nao dependendo da resolução de tela e tamanho da string 
6205      function ajustaTextoDiasHorarioOferta(codOferta) { 
6206 
6207        var classOferta = ".codigoOferta_" + codOferta; 
6208        let oferta = $(classOferta); 
6209 
6210        let ofertaDiasSemana = $(oferta).find('*[data-dia-hora="dias-semana"]'); 
6211 
6212        let widthDevice = window.screen.width; 
6213        let tamLimDesktop = 185; 
6214 
6215        if (widthDevice <= 1024) { 
6216          tamLimDesktop = 180; 
6217        } 
6218 
6219        ofertaDiasSemana.each(function (index) { 
6220 
6221 
6222          let widthDiaSemana = $(this).width(); 
6223 
6224          let contentDiaHora = $(this).parent().parent().parent(); 
6225 
6226          if (!(widthDiaSemana <= tamLimDesktop)) { 
6227            $(this).css("display", "block"); 
6228          } 
6229 
6230          if (ofertaDiasSemana.length == parseInt(index + 1)) { 
6231            contentDiaHora.css("opacity", "1"); 
6232          } 
6233 
6234        }) 
6235      } 
6236 
6237      function getObjBtnComprar(oferta) { 
6238        let obj = {}; 
6239        obj['dataEspacoEx'] = (oferta.espacoExterno == 'true' || (isHibrido && temTextoParaFormatoHibrido)) ? 'true' : 'false'; 
6240        if ($('#manutencao-compra').val()) { 
6241          obj['classeBotao'] = 'disabled manutencao'; 
6242          obj['textoBotao'] = $('#manutencao-compra').val(); 
6243        } 
6244        else { 
6245          obj['classeBotao'] = oferta.botaoCompraOferta == 'true' ? (oferta.vagasParaCompraOferta == 'true' ? '' : 'disabled') : 'd-none-btn'; 
6246          obj['textoBotao'] = oferta.vagasParaCompraOferta == 'true' ? 'COMPRAR' : 'Vagas esgotadas para compra'; 
6247        } 
6248        return obj; 
6249      } 
6250 
6251      function getObjFormaPagto(oferta, index, tipoCurso, codigoUnidade) { 
6252 
6253        var formaPagtoObj = {}; 
6254 
6255        var regNumMaxParce = new RegExp('\{numeroMaxParcelasOferta\}', 'g'); 
6256        var regPrecMaxParce = new RegExp('\{precoVendaMaxParcelaOferta\}', 'g') 
6257 
6258        formaPagtoObj['regIndex'] = index; 
6259        formaPagtoObj['precoCheioOferta'] = formataValor(oferta.precoCheioOferta); 
6260        formaPagtoObj['textoCartoesAceitos'] = oferta.textoCartoesAceitos; 
6261 
6262        formaPagtoObj['numParcelaCartoes'] = oferta.numParcelaCartoes; 
6263        formaPagtoObj['precoParcelaCartoes'] = oferta.precoParcelaCartoes; 
6264        formaPagtoObj['numParcelaBoleto'] = oferta.numParcelaBoleto; 
6265        formaPagtoObj['precoParcelaBoleto'] = oferta.precoParcelaBoleto; 
6266        formaPagtoObj['precoVendaOferta'] = formataValor(oferta.precoVendaOferta); 
6267 
6268        formaPagtoObj['economia'] = formataValor(parseFloat(oferta.precoCheioOferta).toFixed(2) - parseFloat(oferta.precoVendaOferta).toFixed(2)); 
6269        formaPagtoObj['espacoExterno'] = oferta.espacoExterno == 'true' ? 'true' : 'false'; 
6270        formaPagtoObj['dataUnidade'] = codigoUnidade; 
6271        formaPagtoObj['dataEvento'] = oferta.codigoOferta; 
6272        formaPagtoObj['destinoCompra '] = oferta.destinoCompra; 
6273 
6274        //EMED nao restringe o botao 
6275        if (isEmed) { 
6276          let manutencao = $('#manutencao-compra').val(); 
6277          formaPagtoObj['textoBotaoComprar'] = manutencao || 'COMPRAR'; 
6278          formaPagtoObj['classeBotaoComprar'] = manutencao ? 'disabled manutencao' : ''; 
6279        } else { 
6280          let btnComprar = getObjBtnComprar(oferta); 
6281          formaPagtoObj['textoBotaoComprar'] = btnComprar.textoBotao; 
6282          formaPagtoObj['classeBotaoComprar'] = btnComprar.classeBotao; 
6283        } 
6284 
6285        formaPagtoObj['regNumMaxParce'] = oferta.numeroMaxParcelasOferta; 
6286        formaPagtoObj['regPrecMaxParce'] = formataValor(oferta.precoVendaMaxParcelaOferta); 
6287 
6288        //valores extensao - como o modal de livre e tec nao tem as classes especificas de extensao, nao há problema criar os valores abaixo para qualquer tipo de curso  
6289        formaPagtoObj['precoAVistaPadraoExt'] = formataValor(oferta.precoVendaOferta); 
6290        var precoContribuinteExtensao = (parseFloat(oferta.precoVendaOferta).toFixed(2) * 0.80).toFixed(2); 
6291        formaPagtoObj['precoContrExt'] = formataValor(precoContribuinteExtensao); 
6292        formaPagtoObj['economiaExt'] = formataValor(parseFloat(oferta.precoVendaOferta).toFixed(2) - precoContribuinteExtensao); 
6293        formaPagtoObj['precoParcelaBoletoExt'] = formataValor((precoContribuinteExtensao / oferta.numParcelaBoleto).toFixed(2)); 
6294        formaPagtoObj['precoParcelaCartoesExt'] = formataValor((precoContribuinteExtensao / oferta.numParcelaCartoes).toFixed(2)); 
6295        formaPagtoObj['precoAVistaContrExt'] = formataValor((precoContribuinteExtensao * 0.92).toFixed(2)); 
6296 
6297        return formaPagtoObj; 
6298      } 
6299 
6300      function calculaPrecoAvista(precoVendaOferta) { 
6301        return (parseFloat(precoVendaOferta).toFixed(2) * 0.92).toFixed(2); 
6302      } 
6303 
6304      function getParcelasEntradaCartao(dataInicioCurso) { 
6305 
6306        const dCurso = new Date(dataInicioCurso.split("/").reverse().join("-")); 
6307        const dHoje = new Date(); 
6308 
6309        let diffAnos = dCurso.getUTCFullYear() - dHoje.getUTCFullYear(); 
6310        let diffMeses = dCurso.getUTCMonth() - dHoje.getUTCMonth(); 
6311        diffMeses = diffAnos * 12 + diffMeses; 
6312 
6313        return (diffMeses > 4) ? 4 : ((diffMeses <= 0) ? 1 : diffMeses); 
6314 
6315      } 
6316 
6317      function createModalFormaPagto(formaPagtoObj, oferta, index) { 
6318        let temDesconto = possuiCriteriosDesconto2022(oferta.dataInicio) 
6319        temDesconto = temDesconto && !possuiMensalidadeCampanha(oferta) 
6320 
6321        result = ` 
6322        <div id="modalFormaPagto" class="ssp-modal"> 
6323          <div class="ssp-card-modal-forma-pagamento ` + (temDesconto ? 'ssp-desconto-2022' : '') + `"> 
6324            <div class="ssp-card-modal-forma-pagamento__header" style="border: 0; margin-bottom: 0 !important;"> 
6325              <h6 class="ssp-card-modal-forma-pagamento__header-title font-weight-bold" style="color:#454F63">Descontos e ` + (temDesconto ? 'pagamento' : 'parcelamento') + `</h6> 
6326              <i class="ssp-card-modal-forma-pagamento__btn-close ssp-card-modal-forma-pagamento__btn-close_` + index + `"></i> 
6327            </div> 
6328      ` 
6329          + (temDesconto ? '' : '<div class="ssp-card-oferta-curso__line-divider mt-0 mb-5 mb-md-8"></div>') + 
6330          ` 
6331            <div class="ssp-card-modal-forma-pagamento__body">               
6332      ` 
6333        if (temDesconto) { 
6334          result = result + ` 
6335             <div> 
6336                <p class="my-0"><strong>Valor com </strong> 
6337                  <span class="ssp-card-oferta-curso__valor-desconto mt-0 mb-0">50% de desconto*</span>                   
6338                </p> 
6339              </div> 
6340              <h6 class="ssp-card-oferta-curso__item-valor-investimento"><span>` + oferta.numeroMaxParcelasOferta + `x</span>R$ ` + formataValor(ajustarCasasDecimaisSemArredondar((strToFloat(oferta.precoVendaOferta) / strToFloat(oferta.numeroMaxParcelasOferta)) / 2, 2)) + `*</h6>` 
6341 
6342          if ($('[name="tipoCurso"]').val() == 'extensao') { 
6343            result = result + `<p class="modal-extensao_txteconomiza my-0">*Desconto válido para quem tem ou trabalha em empresa do setor de comércio e serviços, estudantes ou ex-estudantes de cursos técnicos no Senac ou para quem já finalizou o Ensino Médio Técnico no Senac.</p>` 
6344          } else { 
6345            result = result + `<p class="modal-extensao_txteconomiza my-0">*Desconto válido para quem tem ou trabalha em empresa do setor de comércio e serviços.</p>` 
6346          } 
6347 
6348 
6349          result = result + ` 
6350              <div class="ssp-card-oferta-curso__line-divider mb-5 mb-md-2 mt-2"></div> 
6351              <p class="my-0"><strong>Valor:</strong></p> 
6352              <h6 class="ssp-card-oferta-curso__item-valor-investimento ` + (temDesconto ? 'ssp-desconto-2022' : '') + `"><span>` + oferta.numeroMaxParcelasOferta + `x</span>R$ ` + formataValor(oferta.precoVendaMaxParcelaOferta) + `</h6> 
6353              <p class="mt-0 mb-0"><strong>Valor Total: </strong> ` + formataValor(ajustarCasasDecimaisSemArredondar(strToFloat(oferta.precoVendaOferta), 2)) + `</p> 
6354              <div class="ssp-card-oferta-curso__line-divider mt-4 mb-md-3 mb-4"></div> 
6355              <p class="my-0"><strong>Parcele e garanta mais tempo para pagar:</strong></p> 
6356        ` 
6357        } else { 
6358          if (formaPagtoObj.precoCheioOferta == formaPagtoObj.precoVendaOferta) { 
6359            result = result + ` 
6360              <p class="ssp-card-modal-forma-pagamento__valor-desconto mt-n3">R$ <span class="precoVendaOferta">` + formaPagtoObj.precoVendaOferta + `</span></p> 
6361              <p class="txt-desconto-oito">Pague à vista e <span style="color:#FC7834;font-weight:bold"> ganhe mais 8% de desconto.</span></p> 
6362              <small class="ssp-card-oferta-curso__title-item font-weight-bold" style="margin:0;font-size:16px">Se preferir, parcele e garanta muito mais tempo para pagar:</small> 
6363            </div> 
6364          ` 
6365          } else { 
6366            const textoDesc = temDesconto ? 'Valor com 30% de desconto:' : 'Valor com desconto:' 
6367 
6368            result = result + ` 
6369              <small class="ssp-card-oferta-curso__title-item font-weight-bold" style="margin:0;font-size:16px;">` + textoDesc + `</small> 
6370              <p class="ssp-card-modal-forma-pagamento__valor-cheio">R$ <span class="precoCheioOferta">` + formaPagtoObj.precoCheioOferta + `</span></p> 
6371              <p class="ssp-card-modal-forma-pagamento__valor-desconto">R$ <span class="precoVendaOferta">` + formaPagtoObj.precoVendaOferta + `</span></p> 
6372              <p class="ssp-card-modal-forma-pagamento__total-economia">Você economiza <span>R$ <span class="economia">` + formaPagtoObj.economia + `</span></span></p> 
6373              <p class="txt-desconto-oito">Pague à vista e <span style="color:#FC7834;font-weight:bold"> ganhe mais 8% de desconto.</span></p> 
6374              <small class="ssp-card-oferta-curso__title-item font-weight-bold" style="margin:0;font-size:16px">Se preferir, parcele e garanta muito mais tempo para pagar:</small> 
6375            </div> 
6376          ` 
6377          } 
6378        } 
6379 
6380        let textoParcelaCartoes, textoParcelaBoleto, textoParcelaCartaoComBoleto, textoPix, textoParcelaPixComBoleto 
6381        if (temDesconto) { 
6382          const precoParcelaCartoes = formataValor(ajustarCasasDecimaisSemArredondar(strToFloat(formaPagtoObj.precoParcelaCartoes) / 2, 2)) 
6383          const precoParcelaBoleto = formataValor(ajustarCasasDecimaisSemArredondar(strToFloat(formaPagtoObj.precoParcelaBoleto) / 2, 2)) 
6384 
6385          if (formaPagtoObj.numParcelaCartoes) 
6386            textoParcelaCartoes = `<p>Em até <span><span class="numParcelaCartoes">` + formaPagtoObj.numParcelaCartoes + `</span>x</span> sem juros</p>` 
6387 
6388          if (formaPagtoObj.numParcelaBoleto) { 
6389            textoParcelaBoleto = `<p>Em até <span><span class="numParcelaBoleto">` + formaPagtoObj.numParcelaBoleto + `</span>x</span> sem juros</p>` 
6390            textoPix = `<p>Valor total à vista com desconto</p>` 
6391            textoParcelaPixComBoleto = `<p>1ª parcela no Pix + valor restante em até <span><span class="numParcelaPixBoleto">` + (formaPagtoObj.numParcelaBoleto - 1) + `</span>x</span> sem juros no boleto bancário</p>` 
6392          } 
6393 
6394 
6395        } else { 
6396          if (formaPagtoObj.numParcelaCartoes) 
6397            textoParcelaCartoes = `<p>Em até <span><span class="numParcelaCartoes">` + formaPagtoObj.numParcelaCartoes + `</span>x de R$ <span class="precoParcelaCartoes">` + formaPagtoObj.precoParcelaCartoes + `</span></span> sem juros</p>` 
6398 
6399          if (formaPagtoObj.numParcelaBoleto) { 
6400            textoParcelaBoleto = `<p>Em até <span><span class="numParcelaBoleto">` + formaPagtoObj.numParcelaBoleto + `</span>x de R$ <span class="precoParcelaBoleto">` + formaPagtoObj.precoParcelaBoleto + `</span></span> sem juros</p>` 
6401            textoPix = `<p>Valor total à vista com desconto</p>` 
6402            textoParcelaPixComBoleto = `<p>1ª parcela no Pix + valor restante em até <span><span class="numParcelaPixBoleto">` + (formaPagtoObj.numParcelaBoleto - 1) + `</span>x</span> sem juros no boleto bancário</p>` 
6403          } 
6404        } 
6405 
6406        if (formaPagtoObj.numParcelaBoleto) { 
6407          textoParcelaCartaoComBoleto = `<p>1ª parcela em até <span><span class="numParcelaCartoes">` + getParcelasEntradaCartao(oferta.dataInicio) + `</span>x</span> sem juros no cartão + valor restante em até <span><span class="numParcelaBoleto">` + (parseInt(formaPagtoObj.numParcelaBoleto) - 1) + `</span>x</span> sem juros no boleto bancário</p>`; 
6408        } 
6409 
6410        let cardPix = (textoPix) => ` 
6411        <div class="ssp-card-modal-forma-pagamento__tipos-content align-items-start"> 
6412          <i class="fa-brands fa-pix" style="margin-right:15px;font-size:18px"></i> 
6413          <div class="ssp-card-modal-forma-pagamento__info-cartao"> 
6414              <p><strong>Pix</strong></p>` 
6415          + textoPix + 
6416          `</div> 
6417        </div>`; 
6418 
6419        let cardPixBoleto = (textoParcelaPixComBoleto) => ` 
6420          <div class="ssp-card-modal-forma-pagamento__tipos-content align-items-start mt-4"> 
6421            <div style="display:flex;gap:5px;margin-right:6px"> 
6422              <i class="fa-brands fa-pix" style="font-size:14px"></i> 
6423              <i class="fa-sharp-duotone fa-light fa-barcode" style="font-size:14px"></i> 
6424            </div> 
6425            <div class="ssp-card-modal-forma-pagamento__info-cartao"> 
6426                <p><strong>Pix + boleto bancário</strong></p>` 
6427          + textoParcelaPixComBoleto + 
6428          `</div> 
6429          </div> 
6430        `; 
6431 
6432        if (temDesconto) { 
6433          result = result + ` 
6434              <div class="ssp-card-modal-forma-pagamento__tipos">` 
6435 
6436          if (textoPix && $('[name="tipoCurso"]').val() == 'livre') 
6437            result = result + cardPix(textoPix) 
6438 
6439          if (textoParcelaBoleto) 
6440            result = result + ` 
6441                <div class="ssp-card-modal-forma-pagamento__tipos-content align-items-start"> 
6442                  <i class="ssp-card-modal-forma-pagamento__icon-boleto"></i> 
6443                  <div class="ssp-card-modal-forma-pagamento__info-cartao"> 
6444                      <p><strong>Boleto Bancário</strong></p>` 
6445              + textoParcelaBoleto + 
6446              `</div> 
6447                </div>` 
6448 
6449          if (textoParcelaCartoes) 
6450            result = result + ` 
6451                <div class="ssp-card-modal-forma-pagamento__tipos-content align-items-start mt-4"> 
6452                  <i class="ssp-card-modal-forma-pagamento__icon-credit-card"></i> 
6453                  <div class="ssp-card-modal-forma-pagamento__info-cartao"> 
6454                      <p><strong>Cartões</strong></p> 
6455                      <p>(<span class="textoCartoesAceitos">` + formaPagtoObj.textoCartoesAceitos + `</span>)</p>` 
6456              + textoParcelaCartoes + 
6457              `</div> 
6458                </div> 
6459              </div> 
6460        ` 
6461 
6462          if (textoParcelaPixComBoleto && $('[name="tipoCurso"]').val() == 'livre') 
6463            result = result + cardPixBoleto(textoParcelaPixComBoleto) 
6464 
6465 
6466          if (textoParcelaCartaoComBoleto) 
6467            result = result + ` 
6468                <div class="ssp-card-modal-forma-pagamento__tipos-content align-items-start"> 
6469                  <div style="display:flex;gap:5px;margin-right:6px"> 
6470                    <i class="fa-regular fa-credit-card" style="font-size:14px"></i> 
6471                    <i class="fa-sharp-duotone fa-light fa-barcode" style="font-size:14px"></i> 
6472                  </div> 
6473                  <div class="ssp-card-modal-forma-pagamento__info-cartao"> 
6474                      <p><strong>Cartão + boleto bancário</strong></p>` 
6475              + textoParcelaCartaoComBoleto + 
6476              `</div> 
6477                </div>` 
6478 
6479          if (textoPix && $('[name="tipoCurso"]').val() != 'livre') 
6480            result = result + cardPix(textoPix) 
6481 
6482          if (textoParcelaPixComBoleto && $('[name="tipoCurso"]').val() != 'livre') 
6483            result = result + cardPixBoleto(textoParcelaPixComBoleto) 
6484 
6485        } else { 
6486          result = result + ` 
6487              <div class="ssp-card-modal-forma-pagamento__tipos">` 
6488 
6489          if (textoPix) 
6490            result = result + cardPix(textoPix) 
6491 
6492          if (textoParcelaBoleto) 
6493            result = result + ` 
6494                <div class="ssp-card-modal-forma-pagamento__tipos-content align-items-start mt-4"> 
6495                  <i class="ssp-card-modal-forma-pagamento__icon-boleto"></i> 
6496                  <div class="ssp-card-modal-forma-pagamento__info-cartao"> 
6497                      <p><strong>Boleto Bancário</strong></p>` 
6498              + textoParcelaBoleto + 
6499              `</div> 
6500                </div> 
6501              </div> 
6502        ` 
6503 
6504          if (textoParcelaCartoes) 
6505            result = result + ` 
6506                <div class="ssp-card-modal-forma-pagamento__tipos-content align-items-start"> 
6507                  <i class="ssp-card-modal-forma-pagamento__icon-credit-card"></i> 
6508                  <div class="ssp-card-modal-forma-pagamento__info-cartao"> 
6509                      <p><strong>Cartões</strong></p> 
6510                      <p>(<span class="textoCartoesAceitos">` + formaPagtoObj.textoCartoesAceitos + `</span>)</p>` 
6511              + textoParcelaCartoes + 
6512              `</div> 
6513                </div>` 
6514 
6515          if (textoParcelaPixComBoleto) 
6516            result = result + cardPixBoleto(textoParcelaPixComBoleto) 
6517 
6518          if (textoParcelaCartaoComBoleto) 
6519            result = result + ` 
6520                <div class="ssp-card-modal-forma-pagamento__tipos-content align-items-start"> 
6521                  <i class="ssp-card-modal-forma-pagamento__icon-boleto-e-cartao fa-solid fa-money-check-dollar"></i> 
6522                  <div class="ssp-card-modal-forma-pagamento__info-cartao"> 
6523                      <p><strong>Cartão + boleto bancário</strong></p>` 
6524              + textoParcelaCartaoComBoleto + 
6525              `</div> 
6526                </div>` 
6527        } 
6528 
6529 
6530 
6531        if (temDesconto) { 
6532          result = result + ` 
6533            <p class="txt-desconto-oito my-0">Pague à vista e ganhe <span style="color:#5ACC75;font-weight:bold">8% de desconto.</span></p> 
6534        ` 
6535        } 
6536 
6537        result = result + ` 
6538            <a href="#a" class="btn btn-lg btn-success w-100" style="margin-top: 20px;font-weight:600"><span class="textoBotaoComprar">` + formaPagtoObj.textoBotaoComprar + `</span></a>` 
6539 
6540        if (temDesconto) { 
6541          result = result + ` 
6542            <a class="btn btn-primary modal-extensao-btn-conheca mt-3" href="/descontos-e-parcelamentos" target="_blank">Conheça os descontos</a> 
6543        ` 
6544        } 
6545 
6546        result = result + ` 
6547         </div> 
6548        </div> 
6549      ` 
6550 
6551        return result; 
6552      } 
6553 
6554      async function montaHTMLModalFormaPgto(oferta, index, codigoUnidade) { 
6555 
6556        var tipoCurso = $('[name="tipoCurso"]').val(); 
6557 
6558        var formaPagtoObj = getObjFormaPagto(oferta, index, tipoCurso, codigoUnidade); 
6559 
6560        var modalFormaPagto 
6561        if (tipoCurso == 'extensao' && !possuiCriteriosDesconto2022(oferta.dataInicio)) { 
6562          modalFormaPagto = $('#modalFormaPagtoExt').clone(); 
6563 
6564          $.each(formaPagtoObj, function (k, v) { 
6565            if (modalFormaPagto.find('.' + k).length > 0) 
6566              modalFormaPagto.find('.' + k).text(v); 
6567          }) 
6568        } else if (isEmed) { 
6569          modalFormaPagto = $('#modalPagtoEmed').clone(); 
6570 
6571          $.each(formaPagtoObj, function (k, v) { 
6572            if (modalFormaPagto.find('.' + k).length > 0) 
6573              modalFormaPagto.find('.' + k).text(v); 
6574          }) 
6575        } else 
6576          modalFormaPagto = $(createModalFormaPagto(formaPagtoObj, oferta, index)); 
6577 
6578        modalFormaPagto.removeAttr('id'); 
6579        modalFormaPagto.removeClass('d-none'); 
6580        modalFormaPagto.attr('id', 'myModal_' + index); 
6581 
6582        if (tipoCurso == 'extensao' && !possuiCriteriosDesconto2022(oferta.dataInicio)) { 
6583 
6584          var botoaoCompraOk = modalFormaPagto.find('.modal-extensao-aluno__btn.ok'); 
6585          botoaoCompraOk.attr('id', 'btnComprarConhecaDescontoOk_' + index); 
6586 
6587          botoaoCompraOk.attr('data-espaco-ex', formaPagtoObj.espacoExterno); 
6588          botoaoCompraOk.attr('data-unidade', formaPagtoObj.dataUnidade); 
6589          botoaoCompraOk.attr('data-evento', formaPagtoObj.dataEvento); 
6590          botoaoCompraOk.attr('data-destino-compra', formaPagtoObj.destinoCompra); 
6591          botoaoCompraOk.attr('data-index', index); 
6592          botoaoCompraOk.addClass(formaPagtoObj.classeBotaoComprar); 
6593 
6594          var botoaoCompraNot = modalFormaPagto.find('.modal-extensao-aluno__btn.not'); 
6595          botoaoCompraNot.attr('id', 'btnComprarConhecaDescontoNot_' + index); 
6596 
6597          botoaoCompraNot.attr('data-espaco-ex', formaPagtoObj.espacoExterno); 
6598          botoaoCompraNot.attr('data-unidade', formaPagtoObj.dataUnidade); 
6599          botoaoCompraNot.attr('data-evento', formaPagtoObj.dataEvento); 
6600          botoaoCompraNot.attr('data-destino-compra', formaPagtoObj.destinoCompra); 
6601          botoaoCompraNot.attr('data-index', index); 
6602          botoaoCompraNot.addClass(formaPagtoObj.classeBotaoComprar); 
6603 
6604          modalFormaPagto.find('.modal-extensao-btn-aluno-sim-nao.sim').attr('id', 'btn-aluno-sim_' + index); 
6605          modalFormaPagto.find('.modal-extensao-btn-aluno-sim-nao.nao').attr('id', 'btn-aluno-nao_' + index); 
6606 
6607          modalFormaPagto.find('.modal-extensao-voltar-icon').addClass('ssp-card-modal-forma-pagamento__btn-close_' + index); 
6608 
6609          modalFormaPagto.find('.modal-extensao-btn-conheca').attr('id', 'btnModalExtConheca_' + index); 
6610 
6611          modalFormaPagto.find('.modal-pergunta-aluno-ext').attr('id', 'modalExtAluno_' + index); 
6612 
6613          modalFormaPagto.find('.msg-alunoSim').attr('id', 'msg-alunoSim_' + index); 
6614          modalFormaPagto.find('.msg-alunoNao').attr('id', 'msg-alunoNao_' + index); 
6615 
6616          var botaoCompra = modalFormaPagto.find('.modal-extensao__btn.mt-3'); 
6617 
6618        } else { 
6619 
6620          modalFormaPagto.find('.mt-4').attr('id', 'content_boleto_' + index); 
6621          modalFormaPagto.find('.ssp-card-modal-forma-pagamento__btn-close').addClass('ssp-card-modal-forma-pagamento__btn-close_' + index); 
6622 
6623          var botaoCompra = modalFormaPagto.find('.btn.w-100'); 
6624 
6625        } 
6626 
6627        if (isEmed) { 
6628 
6629          var elementoPai = modalFormaPagto.find('.ssp-card-modal-forma-pagamento'); 
6630 
6631          //Cria botao inscreva-se ajustado ao modal 
6632          try { 
6633            var dadosAbertura = await calculaTempoAberturaBolsa(oferta.dataAberturaMatricula, oferta.horaAberturaBolsaOferta, undefined, !$('#manutencao-compra').val()); 
6634            if ($('#manutencao-compra').val()) { 
6635              textoBotao = $('#manutencao-compra').val(); 
6636              classeBotao = 'disabled manutencao'; 
6637            } else { 
6638              if (oferta.permiteListaEspera == statusEmed.ESPERA && dadosAbertura.bolsaJaAberta) { 
6639                textoBotao = 'Lista de espera'; 
6640                classeBotao = 'btn-emed-lista-espera'; 
6641              } else { 
6642                if (dadosAbertura.bolsaJaAberta || !oferta.dataAberturaMatricula || oferta.dataAberturaMatricula == '') { 
6643                  if (oferta.etapa == '0020' || oferta.etapa == '0030') { 
6644                    textoBotao = 'Lista de espera'; 
6645                    classeBotao = 'btn-emed-lista-espera'; 
6646                  } else { 
6647                    textoBotao = 'Fazer matrícula'; 
6648                    classeBotao = ''; 
6649                  } 
6650                } else { 
6651                  textoBotao = 'Matrícula em ' + formataDataAberturaBolsa(oferta.dataAberturaMatricula, oferta.horaAberturaBolsaOferta); 
6652                  classeBotao = 'disabled'; 
6653                } 
6654              } 
6655            } 
6656          } catch (error) { 
6657            console.error('Erro ao consultar abertura da matricula:', error); 
6658            textoBotao = 'Não foi possível consultar a abertura da matrícula. Recarregue a página.'; 
6659            classeBotao = 'disabled'; 
6660          } 
6661          criaBotaoInscreverEmedModal(oferta, textoBotao, classeBotao, 'btnComprarEmedModal_' + index, elementoPai, index); 
6662          preencheDadosEmedModal(oferta, modalFormaPagto); 
6663 
6664        } else { 
6665          botaoCompra.attr('id', "btnComprarFormaPgto_" + index); 
6666          botaoCompra.attr('data-espaco-ex', formaPagtoObj.espacoExterno); 
6667          botaoCompra.attr('data-unidade', formaPagtoObj.dataUnidade); 
6668          botaoCompra.attr('data-evento', formaPagtoObj.dataEvento); 
6669          botaoCompra.attr('data-destino-compra', formaPagtoObj.destinoCompra); 
6670          botaoCompra.attr('data-index', index); 
6671          botaoCompra.addClass(formaPagtoObj.classeBotaoComprar); 
6672        } 
6673 
6674        $('.oferta-slick-area_modal').append(modalFormaPagto); 
6675        $('.oferta-slick-area_modal').find('.d-none-btn').remove(); 
6676 
6677        //Evita o erro de exibição de Nan 
6678        if (oferta.numParcelaBoleto.length == 0) { 
6679          $('#content_boleto_' + index).remove(); 
6680        } 
6681      } 
6682 
6683      function verificaTerminoDia(dataInicio, dataFim) { 
6684        if (dataInicio === dataFim) { 
6685          return true; 
6686        } 
6687        return false; 
6688      } 
6689 
6690 
6691      function montaHTMLModalLocalRealizacao(oferta, index) { 
6692 
6693        // Lógica para decidir o texto (Singular ou Plural) 
6694        // Assume que oferta.dataInicio e oferta.dataFim existem 
6695        var textoTitulo = verificaTerminoDia(oferta.dataInicio, oferta.dataFim) ? 
6696          "ONDE A AULA IRÁ ACONTECER?" :     // True: Mesmo dia (Singular) 
6697          "ONDE AS AULAS VÃO ACONTECER?";    // False: Dias diferentes (Plural) 
6698 
6699        var tituloLocalRealizacao = (localLivreOnline(oferta.localEspacoExterno) && !isHibrido) ? 
6700          '<i class="fas fa-wifi icon-wifi-title__modal"></i> <h6 class="title-idioma-online__modal"> Aulas Online - ao vivo</h6>' 
6701          : '<i class="ssp-modal__local-realizacao-content__icon-wifi"></i> <i class="ssp-modal__local-realizacao-content__icon-chalkboard-teacher"></i> <h6 class="ssp-modal-local-realizacao__title">' + textoTitulo + '</h6>'; 
6702 
6703        if (textoFormatoHibrido.length > 0 && oferta.espacoExterno == "true") 
6704          textoFormatoHibrido += '</br>'; 
6705 
6706        var localRealizacaoHTMLModal = htmlModalLocalRealizacao 
6707          .replace('\{nomeUnidade\}', $('#unidades-ofertas option:selected').text()) 
6708          .replace('\{textoFormatoHibrido\}', textoFormatoHibrido) 
6709          .replace('\{localEspacoExterno\}', oferta.espacoExterno == "true" ? oferta.localEspacoExterno : "") 
6710          .replace('\{classeTextoInfoLocalRealizacao\}', (oferta.ruaEspacoExterno != "" && !isHibrido) ? "" : "d-none") 
6711          .replace('\{classeEnderecoRealizacao\}', oferta.ruaEspacoExterno != "" ? "" : "d-none") 
6712          .replace('\{ruaEspacoExterno\}', oferta.ruaEspacoExterno) 
6713          .replace('\{numeroEspacoExterno\}', oferta.numeroEspacoExterno) 
6714          .replace('\{complementoEspacoExterno\}', oferta.complementoEspacoExterno) 
6715          .replace('\{classeBairroRealizacao\}', oferta.bairroEspacoExterno != "" && oferta.ruaEspacoExterno != "" ? "" : "d-none") 
6716          .replace('\{bairroEspacoExterno\}', oferta.bairroEspacoExterno) 
6717          .replace('\{classeCidadeRealizacao\}', oferta.cidadeEspacoExterno != "" && oferta.ruaEspacoExterno != "" ? "" : "d-none") 
6718          .replace('\{cidadeEspacoExterno\}', oferta.cidadeEspacoExterno) 
6719          .replace('\{classeCepRealizacao\}', oferta.cepEspacoExterno != "" && oferta.ruaEspacoExterno != "" ? "" : "d-none") 
6720          .replace('\{cepEspacoExterno\}', oferta.cepEspacoExterno) 
6721          .replace(regIndex, index) 
6722          .replace('\{tituloLocalRealizacao\}', tituloLocalRealizacao) 
6723          .replace('\{classeEntendi\}', (localLivreOnline(oferta.localEspacoExterno)) ? "btn-modal-entendi__idioma-online" : ""); 
6724 
6725        $('.oferta-slick-area_modal').append(localRealizacaoHTMLModal); 
6726        $('.oferta-slick-area_modal').find('.d-none-btn').remove(); 
6727 
6728        if (oferta.ruaEspacoExterno == "") 
6729          $('.localEspacoExternoTexto_' + index).removeClass('ssp-modal-local-realizacao__subtitle'); 
6730      } 
6731 
6732      function montaHTMLModalAntesCompra(oferta, index, codigoUnidade) { 
6733 
6734        if (isEmed) { 
6735 
6736          $('#modalAntesCompraEmed_' + oferta.indice).remove(); 
6737          const antesCompraHTMLModal = $('#modalAntesCompraEmed').clone(); 
6738          antesCompraHTMLModal.attr('id', 'modalAntesCompraEmed_' + oferta.indice); 
6739          antesCompraHTMLModal.find('.ssp-card-modal-antes-compra__btn-close').addClass('ssp-card-modal-antes-compra__btn-close_' + oferta.indice); 
6740          antesCompraHTMLModal.find('.ssp-card-modal-selecionar-outro__btn-close').addClass('ssp-card-modal-selecionar-outro__btn-close_' + oferta.indice); 
6741          antesCompraHTMLModal.insertAfter('#modalAntesCompraEmed'); 
6742 
6743          if (oferta.etapa == '0010') { 
6744            if (oferta.permiteListaEspera == statusEmed.ESPERA) { 
6745              antesCompraHTMLModal.find('.textoEmedModalAntesCompra0010Espera').removeClass('d-none'); 
6746              antesCompraHTMLModal.find('#btnCompraLocalEmed').text('Ir para lista de espera'); 
6747            } else { 
6748              antesCompraHTMLModal.find('.textoEmedModalAntesCompra0010').removeClass('d-none'); 
6749            } 
6750          } else { 
6751            antesCompraHTMLModal.find('.textoEmedModalAntesCompra0020e0030').removeClass('d-none'); 
6752          } 
6753 
6754          const btnCompra = antesCompraHTMLModal.find('#btnCompraLocalEmed'); 
6755          btnCompra.attr('id', 'btnCompraLocalEmed_' + oferta.indice); 
6756          btnCompra.attr('offercode', oferta.codigoOferta); 
6757 
6758          btnCompra.on('click', function (ev) { 
6759            ev.preventDefault(); 
6760            execCompraEmed(oferta); 
6761          }); 
6762 
6763        } else { 
6764 
6765          var dataEfetivaFormat = formataDataComBarra($('[name="dataEfetivaSTR"]').val()); 
6766 
6767 
6768          var antesCompraHTMLModal = htmlModalAntesCompra 
6769            .replace('\{nomeUnidade\}', $('#unidades-ofertas option:selected').text()) 
6770            .replace('\{textoFormatoHibrido\}', textoFormatoHibrido) 
6771            .replace('\{localEspacoExterno\}', oferta.espacoExterno == "true" ? oferta.localEspacoExterno : "") 
6772            .replace('\{classeTextoInfoLocalRealizacao\}', (oferta.ruaEspacoExterno != "" && !isHibrido) ? "" : "d-none") 
6773            .replace('\{classeEnderecoRealizacao\}', oferta.ruaEspacoExterno != "" ? "" : "d-none") 
6774            .replace('\{ruaEspacoExterno\}', oferta.ruaEspacoExterno) 
6775            .replace('\{numeroEspacoExterno\}', oferta.numeroEspacoExterno) 
6776            .replace('\{complementoEspacoExterno\}', oferta.complementoEspacoExterno) 
6777            .replace('\{classeBairroRealizacao\}', oferta.bairroEspacoExterno != "" && oferta.ruaEspacoExterno != "" ? "" : "d-none") 
6778            .replace('\{bairroEspacoExterno\}', oferta.bairroEspacoExterno) 
6779            .replace('\{classeCidadeRealizacao\}', oferta.cidadeEspacoExterno != "" && oferta.ruaEspacoExterno != "" ? "" : "d-none") 
6780            .replace('\{cidadeEspacoExterno\}', oferta.cidadeEspacoExterno) 
6781            .replace('\{classeCepRealizacao\}', oferta.cepEspacoExterno != "" && oferta.ruaEspacoExterno != "" ? "" : "d-none") 
6782            .replace('\{cepEspacoExterno\}', oferta.cepEspacoExterno) 
6783            .replace('\{componentBuyConfirmation\}', componentBuyConfirmation(codigoUnidade, oferta, dataEfetivaFormat)) 
6784            .replace('\{linkBtnBolsa\}', linkBolsa(oferta)) 
6785            .replace(regIndex, index); 
6786 
6787          $('.oferta-slick-area_modal').append(antesCompraHTMLModal); 
6788          $('.oferta-slick-area_modal').find('.d-none-btn').remove(); 
6789        } 
6790      } 
6791 
6792      async function populaOfertas(ofertas) { 
6793 
6794        //Zera variável que controla existência de ofertas com bolsa 
6795        ofertasComBolsa = false; 
6796 
6797        objsTela.ofertas = ofertas; 
6798 
6799        if (ofertas && ofertas.length) 
6800          $('#ssp-h3-turmas').show() 
6801        else 
6802          $('#ssp-h3-turmas').hide() 
6803 
6804        if (ofertas && ofertas.length > 1) { 
6805          //remove dupl 
6806          const ofertasDistintas = []; 
6807          ofertas.forEach(oferta => { 
6808            if (ofertasDistintas.filter(dist => dist.codigoOferta == oferta.codigoOferta).length == 0) { 
6809              ofertasDistintas.push(oferta); 
6810            } 
6811          }); 
6812          ofertas = ofertasDistintas; 
6813        } 
6814 
6815        if (isEmed) { 
6816 
6817          $('.btn-filtro[value="0"]').attr('disabled', ''); 
6818          $('.ssp-slick-ofertas-emed').empty(); 
6819          // executa a class do slick slider 
6820          $('.ssp-slick-ofertas-emed').removeClass('slick-initialized slick-slider slick-dotted'); 
6821          ofertas = filtraOfertasEtapa(getEtapaSelecionadaEmed(), ofertas); 
6822 
6823        } 
6824 
6825        if (ofertas.length == 0) { 
6826 
6827          if ($('#unidades-ofertas').val() || $('#chkInscricao').prop('checked') || $('#chkBolsa').prop('checked')) 
6828            hideCardSemTurmas(false) 
6829 
6830          $('.oferta-slick-area').empty(); 
6831          $('.prev-mobile, .next-mobile').addClass('d-none'); 
6832 
6833          //Mostrar section registro interesse quando nao tiver oferta 
6834          habilitarRegistroInteresse(true); 
6835 
6836          controlaPaginaBolsa() 
6837          if (isEmed) $('.btn-filtro[value="0"]').removeAttr('disabled'); 
6838          return; 
6839        } 
6840        hideCardSemTurmas(true) 
6841        if (!isEmed) $('.prev-mobile, .next-mobile').removeClass('d-none'); 
6842        habilitarRegistroInteresse(false); 
6843 
6844        $('.oferta-slick-area').empty(); 
6845        $('.oferta-slick-area_modal').empty(); 
6846        ofertas = ofertas.sort(function (a, b) { 
6847          return ordenar(a, b, 'ordenar'); 
6848        }); 
6849        // executa a class do slick slider 
6850        $('.oferta-slick-area').removeClass('slick-initialized slick-slider slick-dotted'); 
6851 
6852        //busca o nome e codigoUnidade para o link do ecommerce 
6853        var nomeUnidade; 
6854        if (!isAoVivo) { 
6855          var selectedUnidade = $('#unidades-ofertas').val().split('@')[0]; 
6856          for (var i = 0; objsTela.unidades.length > i; i++) { 
6857            if (selectedUnidade == objsTela.unidades[i].categoryId) { 
6858              codigoUnidade = objsTela.unidades[i].codigoUnidade; 
6859              nomeUnidade = objsTela.unidades[i].nome; 
6860            } 
6861          } 
6862        } 
6863 
6864        var pendenciasRenderizacao = []; 
6865 
6866        // Montar object push - google tag manager - 2 
6867        let dadosCurso = { 
6868          //Pegar do freemarker  
6869          tituloComercial: $('[name="tituloComercial"]').val(), 
6870          tipoCurso: $('[name="nomeCategoriaTipoCurso"]').val(), 
6871          formato: $('[name="formato"]').data("formato") 
6872        } 
6873        try { 
6874          itensEcommerce = GTMUtil.criaItensEcommerceOfertas( 
6875            ofertas, $('[name="codigoFT"]').val(), dadosCurso, nomeUnidade, codigoUnidade 
6876          ); 
6877          sendEventEcommerce("view_item_list", Array.from(itensEcommerce.values())); 
6878        } catch (err) { 
6879          console.error('[sendEventEcommerce]', err); 
6880          itensEcommerce = new Map(); 
6881        } 
6882 
6883        for (var i = 0; ofertas.length > i; i++) { 
6884 
6885          var oferta = ofertas[i]; 
6886          var ofertaGratuita = excecaoCursoGratuito(oferta); 
6887 
6888          //guardando a oferta no map para chamar ajax com infos de bolsa em tempo real 
6889          oferta['indice'] = i; 
6890          ofertasMap.set(oferta.codigoOferta, oferta); 
6891 
6892          if (isAoVivo) 
6893            codigoUnidade = ofertaUnidadeMap.get(oferta.codigoOferta); 
6894 
6895          if (isEmed && oferta.etapa == '0010') { 
6896            try { 
6897              let status = await getStatusEmed(oferta); 
6898              oferta['permiteListaEspera'] = status; 
6899            } catch (err) { 
6900              console.log(err); 
6901            } 
6902          } 
6903          montaHTMLOferta(oferta, i, codigoUnidade, false); 
6904 
6905          if (!ofertaGratuita) 
6906            await montaHTMLModalFormaPgto(oferta, i, codigoUnidade); 
6907 
6908          montaHTMLModalLocalRealizacao(oferta, i); 
6909          montaHTMLModalAntesCompra(oferta, i, codigoUnidade); 
6910 
6911          if (!ofertaGratuita) { 
6912            const codigoOfertaAtual = oferta.codigoOferta; 
6913 
6914            if (isEmed) { 
6915              toggleOfertaInvestimentoLoading(codigoOfertaAtual, true); 
6916            } 
6917 
6918            var pendenciaBolsa = verificaBotaoBolsaSS(oferta); 
6919 
6920            if (isEmed) { 
6921              pendenciasRenderizacao.push( 
6922                $.Deferred(function (deferredCard) { 
6923                  $.when(pendenciaBolsa).always(function () { 
6924                    $.when(waitForOfertaInvestimentoButtons(codigoOfertaAtual)).always(function (isReady) { 
6925                      if (isReady) { 
6926                        toggleOfertaInvestimentoLoading(codigoOfertaAtual, false); 
6927                        deferredCard.resolve(); 
6928                      } else { 
6929                        retryRenderOfertaInvestimentoButtons(codigoOfertaAtual); 
6930 
6931                        $.when(waitForOfertaInvestimentoButtons(codigoOfertaAtual, 1200)).always(function () { 
6932                          toggleOfertaInvestimentoLoading(codigoOfertaAtual, false); 
6933                          deferredCard.resolve(); 
6934                        }); 
6935 
6936                        return; 
6937                      } 
6938                    }); 
6939                  }); 
6940                }).promise() 
6941              ); 
6942            } else { 
6943              pendenciasRenderizacao.push(pendenciaBolsa); 
6944            } 
6945          } 
6946 
6947          verificaCursoAprendizagem(i, oferta.codigoOferta); 
6948          verificaCursoTrampolim(i, oferta.codigoOferta); 
6949 
6950          if (!ofertaGratuita) 
6951            associaEventoBtnFormaPagamento(i); 
6952 
6953          associaEventoBtnComprar(i); 
6954 
6955          if (!ofertaGratuita) 
6956            associaEventoBtnComprarDentroFormaPgto(i); 
6957 
6958          associaEventoBtnLocalRealizacao(i); 
6959          associaEventosFecharModal(i); 
6960 
6961          if ($('[name="tipoCurso"]').val() == 'extensao') { 
6962            associaEventoBtnConheca(i); 
6963            associaEventoBtnComprarConhecaDescontoOk(i); 
6964            associaEventoBtnComprarConhecaDescontoNot(i); 
6965            associaEventoBtnAlunoNao(i); 
6966            associaEventoBtnAlunoSim(i); 
6967          } 
6968 
6969        } 
6970 
6971        if (pendenciasRenderizacao.length) { 
6972          await Promise.all(pendenciasRenderizacao) 
6973        } 
6974 
6975        if (isEmed) { 
6976          sliderOfertasEmed(); 
6977          $('.btn-filtro[value="0"]').removeAttr('disabled'); 
6978        } 
6979        else sliderOfertas(); 
6980 
6981        controlaPaginaBolsa() 
6982 
6983      } 
6984 
6985      function hideCardSemTurmas(hide) { 
6986        if (!isEmed) { 
6987          if (hide) 
6988            $('.ssp-card-oferta-curso__sem-vaga').addClass('d-none'); 
6989          else 
6990            $('.ssp-card-oferta-curso__sem-vaga').removeClass('d-none'); 
6991        } else { 
6992 
6993 
6994          if (hide || getEtapaSelecionadaEmed() == "0") { 
6995            $('.sem-vaga-emed').addClass('d-none'); 
6996          } else { 
6997            $('.sem-vaga-emed').removeClass('d-none'); 
6998            if ($('.sem-vaga-emed.emed-transferencias-space:not(.d-none)').length) return; 
6999            var tamScreen = $(window).width(); 
7000            if (tamScreen < 768) { 
7001              $('.slick-area-emed').slick({ 
7002                slidesToShow: 2, 
7003                slidesToScroll: 2, 
7004                autoplay: false, 
7005                infinite: false, 
7006                dots: false, 
7007                arrows: false, 
7008                centerPadding: 0, 
7009                centerMode: false, 
7010                responsive: [ 
7011                  { 
7012                    breakpoint: 768, 
7013                    settings: { 
7014                      slidesToShow: 1, 
7015                      slidesToScroll: 1, 
7016                      variableWidth: false, 
7017                      infinite: false, 
7018                      centerPadding: 0, 
7019                      centerMode: false, 
7020                      dots: true, 
7021                    } 
7022                  } 
7023                ] 
7024              }); 
7025            } 
7026          } 
7027        } 
7028      } 
7029 
7030      function verificaCursoAprendizagem(i, codigoOferta) { 
7031 
7032        //Esconde elementsos quando o curso é aprendizagem 
7033        if ($('[name="codigoFT"]').val() == codigoFTCursoAprendizagem) { 
7034          $('#btnComprar_' + i).remove(); 
7035          $('#container_investimento_' + i).remove(); 
7036          $('#container_forma_pgto_' + i).remove(); 
7037 
7038          var avisoAprendizagem = $('#aviso-curso-aprendizagem').clone(); 
7039          let btnFormAprendizagem = '<button class="btn btn-lg btn-success w-100 mt-3 btnModalAprendizagem" data-codigo-oferta="' + codigoOferta + '" data-modal="open-modal" style="font-size:16px;background:#1FC923;font-weight: 600;">Preencher formulário</button>' 
7040          avisoAprendizagem.removeAttr('id'); 
7041          avisoAprendizagem.removeClass('d-none'); 
7042          $('.card_oferta_' + i + ' .ssp-card-oferta-curso').append(avisoAprendizagem); 
7043          $('.card_oferta_' + i + ' .ssp-card-oferta-curso').append(btnFormAprendizagem); 
7044        } 
7045      } 
7046 
7047      function verificaCursoTrampolim(i, codOferta) { 
7048        if (ehCursoTrampolim) { 
7049          $('#btnComprar_' + i).remove(); 
7050          $('#container_investimento_' + i).remove(); 
7051          $('#container_forma_pgto_' + i).remove(); 
7052          $('.ssp-card-oferta-curso .codigoOferta_' + codOferta).hide(); 
7053 
7054          var avisoTrampolim = $('#avisoTrampolim').clone(); 
7055          avisoTrampolim.removeAttr('id'); 
7056          avisoTrampolim.removeClass('d-none'); 
7057          $('.card_oferta_' + i + ' .ssp-card-oferta-curso').append(avisoTrampolim); 
7058        } 
7059      } 
7060 
7061      async function verificaBotoesEmed(dadosOferta, verificaBolsa) { 
7062 
7063        var elementoPai = $('.codigoOferta_' + dadosOferta.codigoOferta + ' .ssp-ofertas-emed__card-info-investimento'); 
7064 
7065        if (!verificaBolsa || !dadosOferta.dataAberturaBolsaOferta) { 
7066          dadosOferta.vagasBolsaOferta = false; 
7067          dadosOferta.botaoBolsaOferta = false; 
7068        } 
7069 
7070        var dadosAberturaMatricula = await calculaTempoAberturaBolsa(dadosOferta.dataAberturaMatricula, dadosOferta.horaAberturaBolsaOferta, undefined, !$('#manutencao-compra').val()); 
7071        var dadosAberturaBolsa = await calculaTempoAberturaBolsa(dadosOferta.dataAberturaBolsaOferta, dadosOferta.horaAberturaBolsaOferta, dadosOferta.botaoBolsaOferta, dadosOferta.etapa == '0010' && dadosOferta.botaoBolsaOferta && !$('#manutencao-bolsa').val()); 
7072 
7073        // Evita duplicidade quando o fluxo assíncrono reprocessa a mesma oferta. 
7074        elementoPai.find('[id^="btnComprarEmed_"], [id^="btnContadorComprar_"], [id^="btnBolsa_"], [id^="btnContadorBolsa_"]').remove(); 
7075 
7076        //INICIO - Logica para Matricula 
7077 
7078        var textoBotaoMatricula = ''; 
7079        var exibirBotaoMatricula = true; 
7080        var classeBotaoMatricula = ''; 
7081        var htmlBotaoMatricula = ''; 
7082 
7083        if (dadosAberturaMatricula.exibirContador) { 
7084          textoBotaoMatricula = dadosAberturaMatricula.textoContador; 
7085          exibirBotaoMatricula = false; 
7086        } 
7087 
7088        //exibe o botão sem cronômetro 
7089        if (exibirBotaoMatricula) { 
7090          if ($('#manutencao-compra').val()) { 
7091            textoBotaoMatricula = $('#manutencao-compra').val(); 
7092            classeBotaoMatricula = 'disabled manutencao'; 
7093          } else { 
7094 
7095            if (dadosOferta.permiteListaEspera == statusEmed.ESPERA && dadosAberturaMatricula.bolsaJaAberta) { 
7096              textoBotaoMatricula = 'Lista de espera'; 
7097              classeBotaoMatricula = 'btn-emed-lista-espera'; 
7098            } else { 
7099              classeBotaoMatricula = ''; 
7100              if (dadosAberturaMatricula.bolsaJaAberta || !dadosOferta.dataAberturaMatricula || dadosOferta.dataAberturaMatricula == '') { 
7101                textoBotaoMatricula = 'Fazer matrícula'; 
7102 
7103                if (dadosOferta.etapa == '0020' || dadosOferta.etapa == '0030') { 
7104                  textoBotaoMatricula = 'Lista de espera'; 
7105                  classeBotaoMatricula = 'btn-emed-lista-espera'; 
7106                } 
7107              } else { 
7108                textoBotaoMatricula = 'Matrícula em ' + formataDataAberturaBolsa(dadosOferta.dataAberturaMatricula, dadosOferta.horaAberturaBolsaOferta); 
7109              } 
7110              if (!dadosAberturaMatricula.bolsaJaAberta) 
7111                classeBotaoMatricula = 'disabled'; 
7112            } 
7113          } 
7114 
7115          criaBotaoInscreverEmed(dadosOferta, textoBotaoMatricula, classeBotaoMatricula, 'btnComprarEmed_' + dadosOferta.indice, elementoPai); 
7116 
7117        } else { //exibe o cronometro para matricula 
7118 
7119          //codigoOferta como index para usar o ofertasMap 
7120          htmlBotaoMatricula = '<button id="btnContadorComprar_' + dadosOferta.indice + '" data-index="' + dadosOferta.codigoOferta + '" class="btn btn-card-investimento --inscreva-se">Matrícula em <span>' + textoBotaoMatricula + '</span></button>'; 
7121          elementoPai.append(htmlBotaoMatricula); 
7122        } 
7123 
7124        //INICIO - Logica para Botão Bolsa 
7125 
7126        var textoBotaoBolsa = ''; 
7127        var classeBotaoBolsa = ''; 
7128        var exibirBotaoBolsa = false; 
7129        var exibirContadorBolsa = false; 
7130        var htmlBotaoBolsa = ''; 
7131 
7132        //verifica se o botão de concorrer a bolsa deve aparecer 
7133        //Oferta EMED possui bolsa apenas no 1o ano 
7134        if (dadosOferta.etapa == '0010' && dadosOferta.botaoBolsaOferta && !dadosAberturaBolsa.exibirContador) { 
7135          exibirBotaoBolsa = true; 
7136          if ($('#manutencao-bolsa').val()) { 
7137            classeBotaoBolsa = 'disabled manutencao'; 
7138            textoBotaoBolsa = $('#manutencao-bolsa').val(); 
7139          } else { 
7140            if (dadosOferta.vagasBolsaOferta) { 
7141              classeBotaoBolsa = dadosAberturaBolsa.bolsaJaAberta ? '' : 'disabled'; 
7142              textoBotaoBolsa = dadosAberturaBolsa.bolsaJaAberta ? 'Bolsa de estudo' : 'Bolsa em ' + formataDataAberturaBolsa(dadosOferta.dataAberturaBolsaOferta, dadosOferta.horaAberturaBolsaOferta); 
7143            } else { 
7144              classeBotaoBolsa = 'disabled'; 
7145              textoBotaoBolsa = 'Bolsas de Estudo Esgotadas'; 
7146            } 
7147          } 
7148        } 
7149 
7150        //Verifica se o botão do cronômetro deve aparecer 
7151        if (dadosAberturaBolsa.exibirContador) { 
7152          textoBotao = dadosAberturaBolsa.textoContador; 
7153          textoBotaoBolsa = dadosAberturaBolsa.textoContador; 
7154          exibirContadorBolsa = true; 
7155          exibirBotaoBolsa = false; 
7156        } 
7157 
7158        if (exibirBotaoBolsa) { 
7159 
7160          if (!ofertasComBolsa) ofertasComBolsa = true; 
7161 
7162          criaBotaoBolsaEmed(dadosOferta, textoBotaoBolsa, classeBotaoBolsa); 
7163 
7164        } else if (exibirContadorBolsa) { 
7165 
7166          if (!ofertasComBolsa && dadosOferta.etapa == '0010') ofertasComBolsa = true; 
7167 
7168          if (dadosOferta.etapa == '0010' && dadosOferta.botaoBolsaOferta) { 
7169            htmlBotaoBolsa = '<button id="btnContadorBolsa_' + dadosOferta.indice + '" data-index="' + dadosOferta.codigoOferta + '" class="btn btn-card-investimento --bolsas">Bolsa em <span>' + textoBotaoBolsa + '</span></button>'; 
7170            elementoPai.append(htmlBotaoBolsa); 
7171          } 
7172        } 
7173 
7174      } 
7175 
7176      function criaBotaoInscreverEmedModal(oferta, textoBotao, classeBotao, idBotao, elementoPai, index) { 
7177        criaBotaoInscreverEmed(oferta, textoBotao, classeBotao, idBotao, elementoPai); 
7178        var btnInscr = elementoPai.find('#btnComprarEmedModal_' + index); 
7179        btnInscr.removeClass(btnInscr.classList); 
7180        btnInscr.addClass('btn btn-lg btn-success w-100'); 
7181        btnInscr.attr('style', 'margin-top: 20px;font-weight:600'); 
7182 
7183        //Reposiciona o botao voltar 
7184        var btnVoltar = elementoPai.find('.ssp-btn-emed__voltar-curso'); 
7185        elementoPai.find('.ssp-btn-emed__voltar-curso').remove(); 
7186        elementoPai.append(btnVoltar); 
7187        btnVoltar.addClass('ssp-btn-emed__voltar-curso_' + index); 
7188        btnVoltar.click(() => { 
7189          $('[id^="myModal_"]').each(function (index, modal) { 
7190            modal.style.display = "none"; 
7191          }) 
7192        }); 
7193      } 
7194 
7195      function preencheDadosEmedModal(oferta, $modal) { 
7196        const parcelaEntrada = 1; 
7197        $modal.find('.numParcelaCartoesBoleto').text(oferta.numeroMaxParcelasOferta - parcelaEntrada); 
7198        $modal.find('.precoParcelaCartoesBoleto').text(formataValor(oferta.precoVendaMaxParcelaOferta)); 
7199        $modal.find('.numParcelaEmedModal').text(oferta.numeroMaxParcelasOferta - parcelaEntrada); 
7200        $modal.find('.precoParcelaEmedModal').text(formataValor(oferta.precoVendaMaxParcelaOferta)); 
7201      } 
7202 
7203 
7204      function criaBotaoInscreverEmed(oferta, textoBotao, classeBotao, idBotao, elementoPai) { 
7205        if (oferta.permiteListaEspera && oferta.permiteListaEspera == statusEmed.NAO_ENCONTRADA) return; 
7206        var htmlBotao = '<button id="' + idBotao + '" data-index="' + oferta.indice + '" class="btn btn-card-investimento --inscreva-se ' + classeBotao + '"><span>' + textoBotao + '</span></button>'; 
7207        elementoPai.append(htmlBotao); 
7208 
7209        if (!classeBotao.includes('disabled')) { 
7210 
7211          elementoPai.on("click", '#' + idBotao, function (ev) { 
7212            ev.preventDefault(); 
7213            const _modal = $('#modalAntesCompraEmed_' + $(this).data('index')); 
7214            _modal.css('display', 'flex'); 
7215 
7216 
7217          }); 
7218 
7219        } 
7220 
7221      } 
7222 
7223      function criaBotaoBolsaEmed(oferta, textoBotaoBolsa, classeBotaoBolsa = "") { 
7224 
7225        var htmlBotao = '<a id="btnBolsa_' + oferta.indice + '" data-index="' + oferta.indice + '" class="btn btn-card-investimento --bolsas ' + classeBotaoBolsa + '">' + textoBotaoBolsa + '</a>'; 
7226        $('.codigoOferta_' + oferta.codigoOferta + ' .ssp-ofertas-emed__card-info-investimento').append(htmlBotao); 
7227 
7228        if (!classeBotaoBolsa.includes('disabled')) { 
7229          // Associa o evento de clique no botão de bolsa 
7230          $('#btnBolsa_' + oferta.indice).attr('href', linkBolsa(oferta)); 
7231          $('#btnBolsa_' + oferta.indice).attr('target', '_blank'); 
7232          //$('#btnBolsa_'+oferta.indice).attr('style', 'text-transform:uppercase;'); 
7233 
7234        } 
7235      } 
7236 
7237      function criaBotaoBolsa(oferta, textoBotaoBolsa, classeBotaoBolsa = "") { 
7238 
7239        const botao = $('<a>' + textoBotaoBolsa + '</a>'); 
7240        botao.attr('id', 'btnBolsa_' + oferta.indice); 
7241        botao.attr('data-index', oferta.indice); 
7242        botao.attr('class', 'btn btn-lg btn-info w-100 mt-3 ' + (classeBotaoBolsa || '')); 
7243        botao.css('font-size', '14px'); 
7244        botao.css('font-weight', '600'); 
7245        botao.css('background-color', '#004EFF'); 
7246        if (!classeBotaoBolsa.includes('disabled')) { 
7247          if (oferta.espacoExterno == 'true' || (isHibrido && temTextoParaFormatoHibrido)) { 
7248            botao.attr('data-espaco-ex', 'true'); 
7249            botao.click((ev) => { 
7250              ev.preventDefault(); 
7251              $('#btnCompraLocal_' + oferta.indice).hide(); 
7252              $('#btnBolsaLocal_' + oferta.indice).show(); 
7253              const _modal = $('#modalAntesCompra_' + oferta.indice); 
7254              _modal.css('display', 'flex'); 
7255            }); 
7256          } else { 
7257            botao.attr('href', linkBolsa(oferta)); 
7258            botao.attr('target', '_blank'); 
7259          } 
7260        } 
7261 
7262        return botao; 
7263 
7264      } 
7265 
7266      function verificaBotaoBolsaSS(oferta, codigoUnidade) { 
7267 
7268        if (!isEmed && (!oferta.dataAberturaBolsaOferta || oferta.dataAberturaBolsaOferta == '')) return; 
7269 
7270        if (!ehCursoTrampolim) { 
7271          return Promise.resolve($.ajax({ 
7272            url: getUrlConsultaBolsa(oferta), 
7273            type: 'get', 
7274            dataType: 'json', 
7275            beforeSend: function (xhr) { 
7276              xhr.setRequestHeader("Authorization", "KGG4KMW5s0CVowr7d6y6Ww=="); 
7277            }, 
7278          })) 
7279            .then(async function (infosBolsa) { 
7280 
7281 
7282              if (infosBolsa != null && typeof infosBolsa !== 'undefined') { 
7283 
7284                var codigoOfertaRetornoBolsa = infosBolsa.DATA[0].COD_EVENTO; 
7285                var retornoOfertaBolsaSenac = infosBolsa.DATA[0]; 
7286 
7287                //Sobrescreve as flags de bolsa com o retorno do serviço SS 
7288                ofertasMap.get(codigoOfertaRetornoBolsa).vagasBolsaOferta = retornoOfertaBolsaSenac.TEM_VAGA_BOLSA; 
7289                ofertasMap.get(codigoOfertaRetornoBolsa).botaoBolsaOferta = retornoOfertaBolsaSenac.BOTAO_BOLSA; 
7290 
7291                var dadosOferta = ofertasMap.get(codigoOfertaRetornoBolsa); 
7292 
7293                //EMED 
7294                if (isEmed) { 
7295                  await verificaBotoesEmed(dadosOferta, true); 
7296                  controlaPaginaBolsa(); 
7297                  return; 
7298                } 
7299 
7300                //calcula o tempo até abertura da bolsa, se houver (apenas depois das 08hrs) 
7301                var dadosAberturaBolsa = await calculaTempoAberturaBolsa(dadosOferta.dataAberturaBolsaOferta, dadosOferta.horaAberturaBolsaOferta, dadosOferta.botaoBolsaOferta, !$('#manutencao-bolsa').val()); 
7302                var textoBotaoBolsa = ''; 
7303                var classeBotaoBolsa = ''; 
7304                var textoBotaoContadorBolsa = ''; 
7305                var exibirBotaoBolsa = false; 
7306                var exibirContadorBolsa = false; 
7307 
7308                //Verifica o texto do botão de bolsa 
7309                if ($('#manutencao-bolsa').val()) textoBotaoBolsa = $('#manutencao-bolsa').val(); 
7310                else { 
7311 
7312                  if (retornoOfertaBolsaSenac.TEM_VAGA_BOLSA) { 
7313 
7314                    if (dadosAberturaBolsa.bolsaJaAberta) 
7315                      textoBotaoBolsa = "Inscrever para bolsa de estudo"; 
7316 
7317                    else 
7318                      textoBotaoBolsa = "Inscrições para bolsas a partir de " + formataDataAberturaBolsa(dadosOferta.dataAberturaBolsaOferta, dadosOferta.horaAberturaBolsaOferta); 
7319 
7320                    if (!ofertasComBolsa) { 
7321                      ofertasComBolsa = true; 
7322                    } 
7323                  } else 
7324                    textoBotaoBolsa = "Vagas esgotadas para bolsas de estudo"; 
7325                } 
7326 
7327                //verifica se o botão de concorrer a bolsa deve aparecer 
7328                if (retornoOfertaBolsaSenac.BOTAO_BOLSA && !dadosAberturaBolsa.exibirContador) { 
7329 
7330                  exibirBotaoBolsa = true; 
7331 
7332                  if (!ofertasComBolsa) ofertasComBolsa = true; 
7333 
7334                  if (retornoOfertaBolsaSenac.TEM_VAGA_BOLSA && dadosAberturaBolsa.bolsaJaAberta && !$('#manutencao-bolsa').val()) { 
7335                    classeBotaoBolsa = ''; 
7336                  } else { 
7337                    classeBotaoBolsa = 'disabled'; 
7338                  } 
7339                } 
7340 
7341                //Verifica se o botão do cronômetro deve aparecer 
7342                if (dadosAberturaBolsa.exibirContador && !$('#manutencao-bolsa').val()) { 
7343                  textoBotaoContadorBolsa = dadosAberturaBolsa.textoContador; 
7344                  exibirContadorBolsa = true; 
7345                } 
7346 
7347                if (exibirBotaoBolsa) 
7348                  $('.codigoOferta_' + codigoOfertaRetornoBolsa + ' .ssp-card-oferta-curso .ssp-container-botao-bolsa').append(criaBotaoBolsa(dadosOferta, textoBotaoBolsa, classeBotaoBolsa)) 
7349                else if (exibirContadorBolsa) 
7350                  $('.codigoOferta_' + codigoOfertaRetornoBolsa + ' .ssp-card-oferta-curso .ssp-container-botao-bolsa').append('<a id="btnContadorBolsa_' + dadosOferta.indice + '" data-index="' + dadosOferta.indice + '"  class="btn btn-lg btn-info w-100 mt-3" >Você poderá se inscrever para bolsa em <span>' + textoBotaoContadorBolsa + '</span></a>') 
7351                else { 
7352                  $('.codigoOferta_' + codigoOfertaRetornoBolsa + '.content-btn-bolsa').hide() 
7353                  $('.show-price-content.codigoOferta_' + oferta.codigoOferta + ' .ou-separator-desconto').hide() 
7354                } 
7355 
7356              } else { 
7357                //EMED 
7358                if (isEmed) { 
7359                  await verificaBotoesEmed(oferta, false); 
7360                } 
7361              } 
7362 
7363              controlaPaginaBolsa() 
7364            }, async function () { 
7365              $('.content-btn-bolsa.codigoOferta_' + oferta.codigoOferta).hide() 
7366              $('.show-price-content.codigoOferta_' + oferta.codigoOferta + ' .ou-separator-desconto').hide() 
7367 
7368              //EMED 
7369              if (isEmed) { 
7370                await verificaBotoesEmed(oferta, false); 
7371              } 
7372            }) 
7373            .catch(function (error) { 
7374              console.error('Erro ao atualizar abertura da bolsa:', error); 
7375              $('.content-btn-bolsa.codigoOferta_' + oferta.codigoOferta).hide(); 
7376            }); 
7377 
7378 
7379        } 
7380 
7381      } 
7382 
7383      function controlaPaginaBolsa() { 
7384        if (ofertasComBolsa) 
7385          $("#ssp-abrir-pagina-bolsa").removeClass("d-none") 
7386        else 
7387          $("#ssp-abrir-pagina-bolsa").addClass("d-none") 
7388      } 
7389 
7390      function associaEventoBtnFormaPagamento(i) { 
7391        var modal = document.getElementById("myModal_" + i); 
7392 
7393        var btn = document.getElementById("myBtn_" + i); 
7394 
7395        if (btn != null) { 
7396          btn.onclick = function (ev) { 
7397            event.preventDefault() 
7398 
7399            $('#modalExtAluno_' + i).addClass('d-none'); 
7400 
7401            var elem = $(ev.target); 
7402            var _modal = document.getElementById( 
7403              'myModal_' + elem.data('index')); 
7404            _modal.style.display = "block"; 
7405            $('#myModal_' + i).find('.modal-extensao_content:first-child').removeClass('d-none'); 
7406 
7407          } 
7408        } 
7409 
7410 
7411 
7412 
7413      } 
7414 
7415 
7416      function actionBtnComprar(elem) { 
7417 
7418        // Montar object push - google tag manager - 3 
7419        ofertaSelecionada = itensEcommerce.get(elem.attr('data-evento')) 
7420        sendEventEcommerce("select_item", ofertaSelecionada); 
7421        sendEventEcommerce("view_item", ofertaSelecionada); 
7422 
7423        //Verifica se deve exibir o modal com a localização 
7424        if (elem.attr('data-espaco-ex') == 'true') { 
7425          $('#btnCompraLocal_' + elem.data('index')).show(); 
7426 
7427          //Limpa onclicks para nao repetir execucao 
7428          $('#modalAntesCompra_' + elem.data('index')).off('click', '#btnCompraLocal_' + elem.data('index')) 
7429          $('#modalAntesCompra_' + elem.data('index')).on('click', '#btnCompraLocal_' + elem.data('index'), function () { 
7430            // Montar object push - google tag manager - 4 
7431            sendEventEcommerce("add_to_cart", ofertaSelecionada); 
7432            if (elem.attr('data-destino-compra') != '2') 
7433              sendEventEcommerce("begin_checkout", ofertaSelecionada); 
7434          }) 
7435          $('#btnBolsaLocal_' + elem.data('index')).hide(); 
7436          const _modal = $('#modalAntesCompra_' + elem.data('index')); 
7437          _modal.css('display', 'flex'); 
7438        } else { 
7439          var urlCompra = linkBotaoCompra.replace('\{codigoUnidade\}', elem.attr('data-unidade')).replace('\{codigoOferta\}', elem.attr('data-evento')); 
7440 
7441          if (elem.attr('data-destino-compra') == '2') { 
7442            var dataEfetivaFormat = formataDataComBarra($('[name="dataEfetivaSTR"]').val()); 
7443 
7444            addItemBackpack(elem.attr('data-evento'), '#' + elem.attr('id'), elem.attr('data-unidade'), dataEfetivaFormat); 
7445 
7446          } else { 
7447            window.open(urlCompra, '_blank'); 
7448          } 
7449        } 
7450 
7451 
7452 
7453      } 
7454 
7455      function associaEventoBtnComprar(i) { 
7456        var btnComprar = document.getElementById("btnComprar_" + i); 
7457 
7458        if (btnComprar != null && !btnComprar.classList.contains('disabled')) { 
7459          btnComprar.onclick = function (ev) { 
7460 
7461            ev.preventDefault() 
7462            var elem = $(ev.target); 
7463            actionBtnComprar(elem); 
7464 
7465          } 
7466        } 
7467      } 
7468 
7469      function associaEventoBtnComprarDentroFormaPgto(i) { 
7470        var btnComprarFormaPgto = document.getElementById("btnComprarFormaPgto_" + i); 
7471 
7472        if (btnComprarFormaPgto != null && !btnComprarFormaPgto.classList.contains('disabled')) { 
7473          btnComprarFormaPgto.onclick = function (ev) { 
7474            event.preventDefault() 
7475            var elem = $('#btnComprarFormaPgto_' + i); 
7476            actionBtnComprar(elem); 
7477          } 
7478        } 
7479      } 
7480 
7481      function associaEventoBtnComprarConhecaDescontoOk(i) { 
7482        var btnComprarConhecaDescontoOk = document.getElementById("btnComprarConhecaDescontoOk_" + i); 
7483 
7484        if (btnComprarConhecaDescontoOk != null) { 
7485          btnComprarConhecaDescontoOk.onclick = function (ev) { 
7486            event.preventDefault() 
7487            var elem = $(ev.target); 
7488            actionBtnComprar(elem); 
7489          } 
7490        } 
7491      } 
7492 
7493      function associaEventoBtnComprarConhecaDescontoNot(i) { 
7494        var btnComprarConhecaDescontoNot = document.getElementById("btnComprarConhecaDescontoNot_" + i); 
7495 
7496        if (btnComprarConhecaDescontoNot != null) { 
7497          btnComprarConhecaDescontoNot.onclick = function (ev) { 
7498            event.preventDefault() 
7499            var elem = $(ev.target); 
7500            actionBtnComprar(elem); 
7501          } 
7502        } 
7503      } 
7504 
7505      function associaEventoBtnAlunoNao(i) { 
7506        var btnAlunoNao = document.getElementById("btn-aluno-nao_" + i); 
7507 
7508        if (btnAlunoNao != null) { 
7509          btnAlunoNao.onclick = function (ev) { 
7510            event.preventDefault() 
7511            var elem = $(ev.target); 
7512            elem.addClass('modal-extensao-btn-aluno-sim-ativo'), 
7513              elem.closest('.sim').removeClass('modal-extensao-btn-aluno-sim-ativo'); 
7514            elem.parent().siblings().find('button').removeClass('modal-extensao-btn-aluno-sim-ativo') 
7515            $('#msg-alunoNao_' + i).removeClass('d-none'); 
7516            $('#msg-alunoSim_' + i).addClass('d-none'); 
7517          } 
7518        } 
7519      } 
7520 
7521      function associaEventoBtnAlunoSim(i) { 
7522        var btnAlunoSim = document.getElementById("btn-aluno-sim_" + i); 
7523 
7524        if (btnAlunoSim != null) { 
7525          btnAlunoSim.onclick = function (ev) { 
7526            event.preventDefault() 
7527            var elem = $(ev.target); 
7528            elem.addClass('modal-extensao-btn-aluno-sim-ativo'), 
7529              elem.closest('.nao').removeClass('modal-extensao-btn-aluno-sim-ativo'); 
7530            elem.parent().siblings().find('button').removeClass('modal-extensao-btn-aluno-sim-ativo') 
7531            $('#msg-alunoSim_' + i).removeClass('d-none'); 
7532            $('#msg-alunoNao_' + i).addClass('d-none'); 
7533 
7534          } 
7535        } 
7536      } 
7537 
7538      function associaEventoBtnConheca(i) { 
7539        var btnModalExtConheca = document.getElementById("btnModalExtConheca_" + i); 
7540 
7541        if (btnModalExtConheca != null) { 
7542          btnModalExtConheca.onclick = function (ev) { 
7543            event.preventDefault(); 
7544            var elem = $(ev.target); 
7545            elem.closest('.modal-extensao_content').addClass('d-none'); 
7546            $('#modalExtAluno_' + i).removeClass('d-none'); 
7547            $('#msg-alunoSim_' + i).addClass('d-none'); 
7548            $('#msg-alunoNao_' + i).addClass('d-none'); 
7549            $('#btn-aluno-sim_' + i).removeClass('modal-extensao-btn-aluno-sim-ativo'); 
7550            $('#btn-aluno-nao_' + i).removeClass('modal-extensao-btn-aluno-sim-ativo'); 
7551 
7552          } 
7553        } 
7554      } 
7555 
7556      function associaEventoBtnLocalRealizacao(i) { 
7557        var btnLocalRealizacao = document.getElementById("btnLocalRealizacao_" + i); 
7558 
7559        if (btnLocalRealizacao != null) { 
7560          btnLocalRealizacao.onclick = function (ev) { 
7561            event.preventDefault(); 
7562            var elem = $(ev.target); 
7563            var _modal = document.getElementById( 
7564              'modalLocalRealizacao_' + elem.data('index')); 
7565            _modal.style.display = "flex"; 
7566          } 
7567        } 
7568      } 
7569 
7570      function associaEventosFecharModal(i) { 
7571 
7572        var span = document.getElementsByClassName("ssp-card-modal-forma-pagamento__btn-close_" + i); 
7573        var closeModalLocalRealizacao = document.getElementsByClassName("ssp-card-modal-local-realizacao__btn-close_" + i)[0]; 
7574        var closeModalAntesCompra = document.getElementsByClassName("ssp-card-modal-antes-compra__btn-close_" + i)[0]; 
7575        var closeModalSelecionarOutro = document.getElementsByClassName("ssp-card-modal-selecionar-outro__btn-close_" + i)[0]; 
7576        var btnEntendiLocalRealizacao = document.getElementsByClassName("ssp-modal-local-realizacao__btn_" + i)[0]; 
7577        var closeModalBotaoBolsa = document.getElementById("btnBolsaLocal_" + i) 
7578 
7579        if (isEmed) { 
7580          var closeModalFormaPagamento = document.getElementsByClassName("ssp-btn-emed__voltar-curso_" + i); 
7581          for (const val of closeModalFormaPagamento) { 
7582 
7583            val.onclick = function () { 
7584              $('[id^="myModal_"]').each(function (index, modal) { 
7585                modal.style.display = "none"; 
7586              }); 
7587            } 
7588          }; 
7589        } 
7590 
7591        //event close modal 
7592        for (const val of span) { 
7593 
7594          val.onclick = function () { 
7595            $('[id^="myModal_"]').each(function (index, modal) { 
7596              modal.style.display = "none"; 
7597            }); 
7598          } 
7599        }; 
7600 
7601        closeModalLocalRealizacao.onclick = function () { 
7602 
7603          $('[id^="modalLocalRealizacao_"]').each(function (index, modal) { 
7604            modal.style.display = "none"; 
7605 
7606          }); 
7607        } 
7608 
7609        closeModalAntesCompra.onclick = function () { 
7610 
7611          $('[id^="modalAntesCompra_"], [id^="modalAntesCompraEmed_"]').each(function (index, modal) { 
7612            modal.style.display = "none"; 
7613          }); 
7614        } 
7615 
7616        closeModalSelecionarOutro.onclick = function () { 
7617 
7618          $('[id^="modalAntesCompra_"], [id^="modalAntesCompraEmed_"]').each(function (index, modal) { 
7619            modal.style.display = "none"; 
7620          }); 
7621        } 
7622 
7623        btnEntendiLocalRealizacao.onclick = function () { 
7624 
7625          $('[id^="modalLocalRealizacao_"]').each(function (index, modal) { 
7626            modal.style.display = "none"; 
7627          }); 
7628        } 
7629 
7630        if (closeModalBotaoBolsa != null) { 
7631          closeModalBotaoBolsa.onclick = function () { 
7632 
7633            $('[id^="modalAntesCompra_"], [id^="modalAntesCompraEmed_"]').each(function (index, modal) { 
7634              modal.style.display = "none"; 
7635            }); 
7636          } 
7637        } 
7638 
7639        // When the user clicks anywhere outside of the modal, close it 
7640        window.onclick = function (event) { 
7641 
7642          $('[id^="myModal_"]').each(function (index, _modal) { 
7643            if (event.target == _modal) 
7644              _modal.style.display = "none"; 
7645          }); 
7646          $('[id^="modalLocalRealizacao_"]').each(function (index, _modal) { 
7647            if (event.target == _modal) 
7648              _modal.style.display = "none"; 
7649          }); 
7650 
7651          $('[id^="modalAntesCompra_"], [id^="modalAntesCompraEmed_"]').each(function (index, _modal) { 
7652            if (event.target == _modal) 
7653              _modal.style.display = "none"; 
7654          }); 
7655        } 
7656      } 
7657 
7658      function turmasIniciadas(dataInicioCurso) { 
7659 
7660        var hoje = new Date(); 
7661        var dataInicioPartes = dataInicioCurso.split('/'); 
7662        var dataInicioCursoOferta = new Date(dataInicioPartes[2], dataInicioPartes[1] - 1, dataInicioPartes[0], hoje.getHours(), hoje.getMinutes(), hoje.getSeconds(), hoje.getMilliseconds()); 
7663 
7664        return dataInicioCursoOferta.getTime() <= hoje.getTime(); 
7665      } 
7666 
7667 
7668      function concatSTR(str1, str2, separador) { 
7669 
7670        if (str2) { 
7671 
7672          return str1 + separador + str2; 
7673        } 
7674        return str1; 
7675      } 
7676 
7677      //Formata exibicao de datas conforme especificacao GCR 
7678      function formataPeriodo(dataInicio, dataFim) { 
7679 
7680        // Se as datas são iguais, retornar apenas a data final 
7681        if (dataInicio === dataFim) { 
7682          return dataFim; 
7683        } 
7684 
7685        var dtInicioPartes = dataInicio.split('/'); 
7686        var dtFimPartes = dataFim.split('/'); 
7687 
7688        //Não exibir o número zero antes dos números e o dia 1 como 1º 
7689        var dInicioFormatada = (parseInt(dtInicioPartes[0].trim()) == 1 ? '1º' : parseInt(dtInicioPartes[0].trim())) + '/' + parseInt(dtInicioPartes[1].trim()) + '/' + dtInicioPartes[2].trim(); 
7690        var dFimFormatada = (parseInt(dtFimPartes[0].trim()) == 1 ? '1º' : parseInt(dtFimPartes[0].trim())) + '/' + parseInt(dtFimPartes[1].trim()) + '/' + dtFimPartes[2].trim(); 
7691 
7692        //Quando um curso inicia e finaliza dentro do mesmo ano: 17/2 a 25/4/2020 
7693        if (dtInicioPartes[2].trim() == dtFimPartes[2].trim()) { 
7694 
7695          dInicioFormatada = (parseInt(dtInicioPartes[0].trim()) == 1 ? '1º' : parseInt(dtInicioPartes[0].trim())) + '/' + parseInt(dtInicioPartes[1].trim()); 
7696 
7697          //Quando um curso inicia e finaliza dentro do mesmo mês: 5 a 30/4/2020 
7698          if (dtInicioPartes[1].trim() == dtFimPartes[1].trim()) 
7699            dInicioFormatada = (parseInt(dtInicioPartes[0].trim()) == 1 ? '1º' : parseInt(dtInicioPartes[0].trim())); 
7700        } 
7701 
7702        return dInicioFormatada + ' a ' + dFimFormatada; 
7703      } 
7704 
7705      //Decrementa os contadores de abertudas de bolsa 
7706      function atualizaTempoAberturasBolsas() { 
7707 
7708        var btnsContador = (isEmed) ? $('[id^="btnContadorBolsa_"], [id^="btnContadorComprar_"]') : $('[id^="btnContadorBolsa_"]'); 
7709 
7710        btnsContador.each(async function () { 
7711          try { 
7712 
7713            var index = $(this).data('index'); 
7714            var elId = $(this).attr('id'); 
7715            var btnContent = $(this).parent('.ssp-btn-group__content'); 
7716 
7717            if (isEmed) { 
7718              //EMED filtra ofertas e usa outra lista para referenciar as ofertas carregadas 
7719              var dadosAberturaBolsa = await calculaTempoAberturaBolsa((elId.indexOf('btnContadorBolsa') >= 0) ? ofertasMap.get('' + index).dataAberturaBolsaOferta : ofertasMap.get('' + index).dataAberturaMatricula, ofertasMap.get('' + index).horaAberturaBolsaOferta); 
7720            } else { 
7721              //calcula o tempo até abertura da bolsa, se houver (apenas depois das 08hrs) 
7722              var dadosAberturaBolsa = await calculaTempoAberturaBolsa(objsTela.ofertas[index].dataAberturaBolsaOferta, objsTela.ofertas[index].horaAberturaBolsaOferta, objsTela.ofertas[index].botaoBolsaOferta); 
7723            } 
7724 
7725            $(this).find('span').text(dadosAberturaBolsa.hours + ':' + dadosAberturaBolsa.minutes + ':' + dadosAberturaBolsa.seconds); 
7726 
7727            //Se esgotou o contador 
7728            if (dadosAberturaBolsa.hours == 0 && dadosAberturaBolsa.minutes == 0 && dadosAberturaBolsa.seconds == 0) { 
7729 
7730              //remove o contador 
7731              $(this).remove(); 
7732 
7733              //Habilitar inscrição EMED 
7734              if (isEmed) { 
7735                var ofertaEmed = ofertasMap.get('' + index); 
7736                var btnIndex = elId.slice(elId.indexOf('_') + 1); 
7737                var elementoPai = $('.codigoOferta_' + ofertaEmed.codigoOferta + ' .ssp-ofertas-emed__card-info-investimento'); 
7738 
7739                if (elId.indexOf('btnContadorBolsa') >= 0) { 
7740                  if ($('#manutencao-bolsa').val()) 
7741                    criaBotaoBolsaEmed(ofertaEmed, $('#manutencao-bolsa').val(), 'disabled manutencao'); 
7742                  else if (ofertaEmed.vagasBolsaOferta == true || ofertaEmed.vagasBolsaOferta == "true") 
7743                    criaBotaoBolsaEmed(ofertaEmed, 'Bolsa de estudo', ''); 
7744                  else 
7745                    criaBotaoBolsaEmed(ofertaEmed, 'Bolsas de Estudo Esgotadas', 'disabled'); 
7746                } else if (elId.indexOf('btnContadorComprar') >= 0) { 
7747 
7748                  var textoBotao, classeBotao; 
7749 
7750                  textoBotao = $('#manutencao-compra').val() || 'Fazer matrícula'; 
7751                  classeBotao = $('#manutencao-compra').val() ? 'disabled manutencao' : ''; 
7752 
7753                  //Garante a ordenação dos botoes (matricula depois bolsa) 
7754                  const botaoBolsa = document.getElementById('btnBolsa_' + btnIndex) || document.getElementById('btnContadorBolsa_' + btnIndex); 
7755 
7756                  botaoBolsa?.remove(); // Remove se existir 
7757 
7758                  criaBotaoInscreverEmed(ofertaEmed, textoBotao, classeBotao, 'btnComprarEmed_' + ofertaEmed.indice, elementoPai); 
7759 
7760                  if (botaoBolsa) { 
7761                    elementoPai.append(botaoBolsa); 
7762                  } 
7763 
7764                  //Altera o botao do modal de pagamento 
7765                  var modal = $('#myModal_' + btnIndex).find('.ssp-card-modal-forma-pagamento'); 
7766                  var btnModal = modal.find('#btnComprarEmedModal_' + btnIndex); 
7767                  if (btnModal) { 
7768                    btnModal.remove(); 
7769                    criaBotaoInscreverEmedModal(ofertaEmed, textoBotao, classeBotao, 'btnComprarEmedModal_' + btnIndex, modal, btnIndex); 
7770                    preencheDadosEmedModal(ofertaEmed, modal); 
7771                  } 
7772 
7773 
7774                } 
7775 
7776              } else { 
7777 
7778                //Checa as condições das vagas do botão de bolsa 
7779                var btnBolsaHTML = null; 
7780                if ($('#manutencao-bolsa').val()) 
7781                  btnBolsaHTML = criaBotaoBolsa(objsTela.ofertas[index], $('#manutencao-bolsa').val(), 'disabled manutencao'); 
7782                else if (objsTela.ofertas[index].vagasBolsaOferta == true || objsTela.ofertas[index].vagasBolsaOferta == "true") 
7783                  btnBolsaHTML = criaBotaoBolsa(objsTela.ofertas[index], 'Inscrever para bolsa de estudo'); 
7784                else 
7785                  btnBolsaHTML = criaBotaoBolsa(objsTela.ofertas[index], 'Vagas esgotadas para bolsas de estudo', 'disabled'); 
7786 
7787                $('.codigoOferta_' + objsTela.ofertas[index].codigoOferta + '.ssp-container-botao-bolsa').append(btnBolsaHTML); 
7788 
7789 
7790              } 
7791            } 
7792 
7793          } catch (error) { 
7794            console.error('Erro ao atualizar contador da oferta:', error); 
7795          } 
7796        }); 
7797 
7798      } 
7799 
7800      // Sincroniza com o servidor apenas quando a avaliacao preliminar permite contador. 
7801      async function calculaTempoAberturaBolsa(dataAberturaBolsa, horaAberturaBolsa, botaoBolsa, permitirContador = true) { 
7802        var dadosAberturaBolsa = calcularDadosAberturaBolsa(dataAberturaBolsa, horaAberturaBolsa, botaoBolsa, permitirContador); 
7803 
7804        if (dadosAberturaBolsa.exibirContador && !todayG) { 
7805          await loadServerDate(); 
7806          dadosAberturaBolsa = calcularDadosAberturaBolsa(dataAberturaBolsa, horaAberturaBolsa, botaoBolsa, permitirContador); 
7807        } 
7808 
7809        return dadosAberturaBolsa; 
7810      } 
7811 
7812      // Usa o horario local ate a primeira sincronizacao e o mesmo relogio em todo o calculo. 
7813      function calcularDadosAberturaBolsa(dataAberturaBolsa, horaAberturaBolsa, botaoBolsa, permitirContador) { 
7814 
7815        var dadosAberturaBolsa = { 
7816          days: '', 
7817          hours: '', 
7818          minutes: '', 
7819          seconds: '', 
7820          bolsaJaAberta: false, 
7821          exibirContador: false, 
7822          textoContador: '' 
7823        }; 
7824 
7825        if (!dataAberturaBolsa || !horaAberturaBolsa) 
7826          return dadosAberturaBolsa; 
7827 
7828        var now = todayG || new Date(); 
7829        var dia = now.getDate(); 
7830        var horarioDia = now.getHours(); 
7831 
7832        var tempoRestante = tempoRestanteAberturaBolsa(dataAberturaBolsa, horaAberturaBolsa, now); 
7833 
7834        //console.log('tempo restante '+tempoRestante); 
7835 
7836        var diaAberturaBolsa = dataAberturaBolsa.split('-')[2]; 
7837 
7838        var delta = tempoRestante / 1000; 
7839 
7840        var days = Math.floor(delta / 86400); 
7841 
7842        delta -= days * 86400; 
7843 
7844        var hours = Math.floor(delta / 3600) % 24; 
7845        delta -= hours * 3600; 
7846 
7847        var minutes = Math.floor(delta / 60) % 60; 
7848        delta -= minutes * 60; 
7849 
7850        var seconds = Math.floor(delta % 60); 
7851 
7852        //Zerar contador para data que ja passou 
7853        if (days < 0) { 
7854          dadosAberturaBolsa.days = 0; 
7855          dadosAberturaBolsa.hours = '00'; 
7856          dadosAberturaBolsa.minutes = '00'; 
7857          dadosAberturaBolsa.seconds = '00'; 
7858        } else { 
7859          dadosAberturaBolsa.days = days; 
7860          dadosAberturaBolsa.hours = hours < 10 ? '0' + hours : hours; 
7861          dadosAberturaBolsa.minutes = minutes < 10 ? '0' + minutes : minutes; 
7862          dadosAberturaBolsa.seconds = seconds < 10 ? '0' + seconds : seconds; 
7863        } 
7864 
7865        dadosAberturaBolsa.bolsaAberta = days <= 0 && hours <= 0 && minutes <= 0 && seconds <= 0; 
7866        var horaExibeContador = 8; 
7867        if (!permitirContador || (!isEmed && botaoBolsa == false)) { 
7868          dadosAberturaBolsa.exibirContador = false; 
7869        } else { 
7870          dadosAberturaBolsa.exibirContador = days == 0 && horarioDia >= horaExibeContador && !dadosAberturaBolsa.bolsaAberta && (diaAberturaBolsa == dia); 
7871          dadosAberturaBolsa.textoContador = dadosAberturaBolsa.hours + ':' + dadosAberturaBolsa.minutes + ":" + dadosAberturaBolsa.seconds; 
7872        } 
7873        dadosAberturaBolsa.bolsaJaAberta = tempoRestante < 0; 
7874 
7875        return dadosAberturaBolsa; 
7876 
7877      } 
7878 
7879      // Verifica se uma oferrta já chegou sua data de abertura 
7880      function tempoRestanteAberturaBolsa(dataAberturaBolsa, horaAberturaBolsa, now) { 
7881        // console.log(dataAberturaBolsa); 
7882        // console.log(horaAberturaBolsa); 
7883 
7884        //var today = new Date(); 
7885 
7886 
7887        //console.log( "TodayG "+ todayG); 
7888 
7889        //Precisa fazer formatação nos horários pois pode estar como 9h ou 9h30 
7890        var partesHora = horaAberturaBolsa.split('h'); 
7891 
7892        var partesHora = partesHora.filter(function (el) { 
7893          return el != ""; 
7894        }); 
7895 
7896        //formato 9h 
7897        if (partesHora.length == 1) 
7898          var aberturaBolsa = new Date(dataAberturaBolsa + 'T' + partesHora[0].trim().padStart(2, '0') + ":00"); 
7899 
7900        else { 
7901 
7902          //format 9h3 
7903          if (partesHora[1].length == 1) 
7904            var aberturaBolsa = new Date(dataAberturaBolsa + 'T' + partesHora[0].trim().padStart(2, '0') + ':' + partesHora[1] + '0'); 
7905 
7906          //formato 9h30 
7907          else 
7908            var aberturaBolsa = new Date(dataAberturaBolsa + 'T' + partesHora[0].trim().padStart(2, '0') + ':' + partesHora[1]); 
7909        } 
7910 
7911        // console.log(aberturaBolsa); 
7912        if (Number.isNaN(aberturaBolsa.getTime())) { 
7913          throw new Error('Data ou hora de abertura invalida: ' + dataAberturaBolsa + ' ' + horaAberturaBolsa); 
7914        } 
7915        return aberturaBolsa - now; 
7916      } 
7917 
7918      function formataDataAberturaBolsa(dataAberturaBolsa, horaAberturaBolsa) { 
7919        var dataPartes = dataAberturaBolsa.split('-'); 
7920 
7921        return dataPartes[2] + '/' + dataPartes[1] + ' às ' + horaAberturaBolsa.replace('h', '').trim() + ' horas'; 
7922 
7923      } 
7924 
7925      function formataValor(valor) { 
7926 
7927        if (!valor.toString().includes(".")) { 
7928          valor = parseFloat(valor).toLocaleString('pt-BR') + ",00"; 
7929        } else { 
7930          valor = parseFloat(valor).toLocaleString('pt-BR'); 
7931 
7932          if (valor.split(",").length == 2) { 
7933 
7934            if (valor.split(",")[1].length == 1) 
7935              valor += "0"; 
7936 
7937          } else 
7938            valor += ",00"; 
7939        } 
7940 
7941        return valor; 
7942      } 
7943 
7944      function ajustarCasasDecimaisSemArredondar(numero, casas) { 
7945        const str = numero + '' 
7946        const arr = str.split('.') 
7947        return parseFloat(arr[0].concat('.').concat(arr[1] ? arr[1].substring(0, casas) : '0')) 
7948      } 
7949 
7950      function possuiCriteriosDesconto2022(dt) { 
7951        return dt.substring(dt.lastIndexOf('/') + 1) >= 2022 
7952          && ( 
7953            $('[name="tipoCurso"]').val() == 'livre' 
7954            || ($('[name="tipoCurso"]').val() == 'tecnico' && $('[name="modalidades"]').val() == 'espec.-tecnica-de-nivel-medio') 
7955            || $('[name="tipoCurso"]').val() == 'extensao' 
7956          ) 
7957      } 
7958 
7959      function strToFloat(str) { 
7960        const separator = str.includes(',') ? ',' : '.' 
7961 
7962        const numArr = str.split(separator) 
7963        const inteiro = numArr[0].replaceAll('.', '').replaceAll(',', '.') 
7964        const decimal = numArr[1] ? numArr[1].replaceAll('.', '').replaceAll(',', '.') : '' 
7965        return parseFloat(inteiro.concat('.').concat(decimal ? decimal : '0')) 
7966      } 
7967 
7968      /** 
7969     * Compare date formatted as "YYYY-MM-DD" with the current date 
7970     * Return: 
7971     *  -1  if dateStr < today 
7972     *   0  if dateStr == today 
7973     *   1  if dateStr > today 
7974     */ 
7975      function compareDates(dateStr1, dateStr2) { 
7976 
7977        const convertDate = (dateStr) => { 
7978          if (typeof dateStr !== 'string') throw new TypeError('dateStr must be a string with format YYYY-MM-DD'); 
7979          const match = dateStr.match(/^(\d{4})-(\d{2})-(\d{2})$/); 
7980          if (!match) throw new Error('invalid format. Use YYYY-MM-DD'); 
7981          const [, yy, mm, dd] = match; 
7982          return Date.UTC(Number(yy), Number(mm) - 1, Number(dd)); 
7983        } 
7984 
7985        const date1 = convertDate(dateStr1); 
7986        const date2 = convertDate(dateStr2); 
7987        if (date1 < date2) return -1; 
7988        if (date1 > date2) return 1; 
7989        return 0; 
7990      } 
7991 
7992 
7993      function possuiMensalidadeCampanha(oferta) { 
7994 
7995        const dataInicio = oferta.dataInicio.split('/').reverse().join('-'); 
7996        const precoParcelaCartoes = parseFloat(oferta.precoParcelaCartoes.replace(',', '.')); 
7997        const precoParcelaBoleto = parseFloat(oferta.precoParcelaBoleto.replace(',', '.')); 
7998 
7999        if (!oferta.precoVendaMaxParcelaOferta 
8000          || (oferta.precoVendaMaxParcelaOferta != 99 && precoParcelaCartoes != 99 && precoParcelaBoleto != 99 && compareDates(dataInicio, '2025-12-31') <= 0) 
8001          || (oferta.precoVendaMaxParcelaOferta != 109 && precoParcelaCartoes != 109 && precoParcelaBoleto != 109 && compareDates(dataInicio, '2026-01-01') >= 0) 
8002        ) 
8003          return false 
8004 
8005        if ($('[name="modalidades"]').val() == 'hab.-tecnica-de-nivel-medio') 
8006          return true 
8007 
8008        if ($('[name="modalidades"]').val() == 'espec.-tecnica-de-nivel-medio') 
8009          return true 
8010 
8011        if ($('[name="modalidades"]').val() == 'qualificacao-profissional') 
8012          return true 
8013 
8014        return false 
8015      } 
8016 
8017      function htmlSlickArea(index, oferta, diasSemanaHTML, codigoUnidade) { 
8018        let temDesconto = possuiCriteriosDesconto2022(oferta.dataInicio) 
8019        temDesconto = temDesconto && !possuiMensalidadeCampanha(oferta) 
8020 
8021        // Define o texto singular ou plural 
8022        var textoHorario = verificaTerminoDia(oferta.dataInicio, oferta.dataFim) ? 
8023          "Horário e dia da aula:" : 
8024          "Horário e dias das aulas:"; 
8025 
8026        const btnLocalReal = function (oferta) { 
8027 
8028          // NOVA LÓGICA: Define o texto (Singular/Plural) 
8029          var textoOndeAcontece = verificaTerminoDia(oferta.dataInicio, oferta.dataFim) ? 
8030            "Onde a aula irá acontecer?" : 
8031            "Onde as aulas vão acontecer?"; 
8032 
8033          var btn = `<div class="container-local-realizacao ` + ((oferta.espacoExterno == 'true' || (isHibrido && temTextoParaFormatoHibrido)) ? '' : 'd-none-btn') + (localLivreOnline(oferta.localEspacoExterno) ? ' idioma-online' : '') + `">`; 
8034 
8035          btn += (localLivreOnline(oferta.localEspacoExterno)) ? 
8036            `<a id="btnLocalRealizacao_` + index + `" data-index="` + index + `" class="btn-idiomas__aula-online" href="#"> 
8037            <i class="fas fa-wifi"></i>Aulas Online - ao vivo</a>` 
8038            : `<a id="btnLocalRealizacao_` + index + `" data-index="` + index + `" class="ssp-card-oferta-curso__local-realizacao-content__title" href="#"> 
8039            <i class="fas fa-user"></i>` + textoOndeAcontece + `</a>`; 
8040 
8041          btn += `</div>`; 
8042 
8043          return btn; 
8044 
8045        } 
8046 
8047        // Card Oferta 
8048 
8049        let result = ` 
8050        <div class="slick-area__item card_oferta_` + index + ` codigoOferta_` + oferta.codigoOferta + ` ` + (temDesconto ? 'ssp-desconto-2022' : '') + `"> 
8051 
8052          <div class="ssp-card-oferta-curso"> 
8053 
8054            <div class="content-data-dias"> 
8055 
8056              <div class="ssp-card-oferta__info-turma-iniciada" id="aviso-turma-iniciada-` + index + `" style="display:none"> 
8057                <h6 style="color:white;background-color:#ff7157;border-radius: 5px;padding: 8px 0px;width: 60%;font-size: 12px;margin-top: 0;"><strong>Turma iniciada, comece já!</strong></h6> 
8058              </div> 
8059 
8060 
8061              <div> 
8062                <small class="ssp-card-oferta-curso__title-item">Período:</small> 
8063                <h6 class="ssp-card-oferta-curso__item-data-periodo item-data-periodo_` + index + `">` + formataPeriodo(oferta.dataInicio, oferta.dataFim) + `</h6> 
8064	          </div> 
8065	 
8066              <div class="content-horario-dias-semana"> 
8067	 
8068                <div class="horario"> 
8069                  <small class="ssp-card-oferta-curso__title-item">` + textoHorario + `</small> 
8070                </div> ` + 
8071 
8072          `<div class="ssp-card-oferta-curso__dia-hora_content"> 
8073                  ` + diasSemanaHTML + ` 
8074	              </div> 
8075	 
8076	          </div> 
8077	 
8078      ` + btnLocalReal(oferta); 
8079 
8080        result = result + ` 
8081        </div> 
8082      ` 
8083 
8084        if (excecaoCursoGratuito(oferta)) { 
8085          result += montaRestanteHTMLexcecaoCursoGratuito(index, oferta); 
8086          return result; 
8087        } 
8088 
8089        //Regra adicionada em 04/01/22 devido aos cursos de Garçon e Cozinheiro. Definimos como regra geral que caso botaoCompra seja falso, não faz sentido mostrar os valores 
8090        //Adicionada a validação dos preços da oferta em 07/06/2022 - Tarefa 9498 
8091        const estaSemValorOferta = oferta.botaoCompraOferta == '' 
8092          || oferta.botaoCompraOferta == 'false' 
8093          || !oferta.precoVendaOferta 
8094          || !oferta.precoCheioOferta 
8095          || !oferta.precoVendaMaxParcelaOferta 
8096          || strToFloat(oferta.precoVendaOferta) == 0 
8097          || strToFloat(oferta.precoCheioOferta) == 0 
8098          || strToFloat(oferta.precoVendaMaxParcelaOferta) == 0 
8099 
8100        //Trecho inicial do Bolsa de estudo 
8101        if ($('[name="tipoCurso"]').val() != 'extensao') { 
8102          result += `<div class="content-btn-bolsa codigoOferta_` + oferta.codigoOferta + (estaSemValorOferta ? ' pb-0' : '') + `"> 
8103                    <div class="ssp-card-oferta__info-turma-content"> 
8104                      <h6 class="ssp-card-oferta__info-turma mb-0">Bolsas de estudo</h6> 
8105                    </div> 
8106                    <div class="codigoOferta_` + oferta.codigoOferta + ` ssp-container-botao-bolsa"></div>    
8107                  </div>                
8108                ` 
8109        } 
8110 
8111        if (estaSemValorOferta) { 
8112          result = result + ` 
8113      		<div class="content-buttons hide"> 
8114			  </div> 
8115      ` 
8116          return result; 
8117        } 
8118 
8119 
8120        //Trecho final do Bolsa de estudo e inclusao de botao de expansao do "Valores para compra" 
8121        result += ` <div class="show-price-content codigoOferta_` + oferta.codigoOferta + `"> 
8122                  <div class="ou-separator-desconto">Ou</div> 
8123                  <button type="button" class="btn-show-price"> 
8124                    <p>Saiba mais sobre:</p> 
8125                    <div onclick="togglePriceCard('codigoOferta_` + oferta.codigoOferta + `')"> 
8126                      <i class="fas fa-money-bill"></i> 
8127                      <span>Valores para compra</span> 
8128                    </div> 
8129                  </button> 
8130                </div> 
8131              ` 
8132 
8133        result = result + ` 
8134          <div class="content-valores-descontos hide-price codigoOferta_` + oferta.codigoOferta + `"> 
8135        ` 
8136 
8137        if (temDesconto && !ehCursoTrampolim) { 
8138          result = result + ` 
8139            <div class="ssp-card-oferta__info-turma-content"> 
8140              <h6 class="ssp-card-oferta__info-turma">Valores para compra</h6> 
8141            </div> 
8142	 
8143            <div class="block-valor-desconto"> 
8144	          	 
8145            <div class="tag-label-desconto"> 
8146              <small class="ssp-card-oferta-curso__title-item">Valor com </small> 
8147              <span class="ssp-card-oferta-curso__valor-desconto">50% de desconto*</span> 
8148	      </div> 
8149	 
8150            <h6 class="ssp-card-oferta-curso__item-valor-investimento"><span>` + oferta.numeroMaxParcelasOferta + `x</span>R$ ` + formataValor(ajustarCasasDecimaisSemArredondar((strToFloat(oferta.precoVendaOferta) / strToFloat(oferta.numeroMaxParcelasOferta)) / 2, 2)) + `</h6> 
8151 
8152            <div class="ssp-card-oferta-curso__desconto-content"> 
8153              <p>De: <span class="ssp-card-oferta-curso__valor-antigo">R$ ` + formataValor(ajustarCasasDecimaisSemArredondar(strToFloat(oferta.precoVendaOferta), 2)) + `</span></p> 
8154              <p>Por: <span class="ssp-card-oferta-curso__valor-desconto">R$ ` + formataValor(ajustarCasasDecimaisSemArredondar(strToFloat(oferta.precoVendaOferta) / 2, 2)) + `</span></p> 
8155            </div> 
8156          ` 
8157 
8158          if ($('[name="tipoCurso"]').val() == 'extensao') { 
8159            result = result + `<p class="modal-extensao_txteconomiza my-2">* Válido para quem trabalha ou tem sua própria empresa no setor de comércio e serviços, estudantes ou ex-estudantes de cursos técnicos no Senac ou para quem já finalizou o Ensino Médio Técnico no Senac.</p></div>` 
8160          } else { 
8161            result = result + `<p class="modal-extensao_txteconomiza my-2">*Válido para quem trabalha ou tem sua própria empresa no setor de comércio e serviços.</p></div>` 
8162          } 
8163 
8164          result = result + ` 
8165          <div class="ou-separator-desconto">Ou</div> 
8166       
8167          <div class="block-valor-total"> 
8168 
8169            <small class="ssp-card-oferta-curso__title-item">Valor sem desconto:</small> 
8170 
8171            <h6 class="ssp-card-oferta-curso__item-valor-investimento"><span>` + oferta.numeroMaxParcelasOferta + `x</span>R$ ` + formataValor(oferta.precoVendaMaxParcelaOferta) + `</h6> 
8172 
8173            <div class="ssp-card-oferta-curso__desconto-content"> 
8174              <p>Valor total: <strong>R$ ` + formataValor(strToFloat(oferta.precoVendaOferta)) + `</strong></p> 
8175            </div> 
8176             
8177          </div> 
8178      ` 
8179        } else { 
8180 
8181          // itens que são diferentes entre técnico e livres comprado a extensão 
8182          if ($('[name="tipoCurso"]').val() == 'extensao') { 
8183            result = result + ` 
8184 
8185          <div class="block-valor-total"> 
8186 
8187            <div class="investimento" id="container_investimento_` + index + `"> 
8188 
8189              <small class="ssp-card-oferta-curso__title-item">Investimento:</small> 
8190 
8191              <h6 class="ssp-card-oferta-curso__item-valor-investimento"><span>` + oferta.numeroMaxParcelasOferta + `x</span>R$ ` + formataValor(ajustarCasasDecimaisSemArredondar(strToFloat(oferta.precoVendaMaxParcelaOferta))) + `</h6> 
8192 
8193              <div class="ssp-card-oferta-curso__desconto-content"> 
8194                <p>Ou: <span class="ssp-card-oferta-curso__valor-antigo text-decoration-none">R$ ` + formataValor(oferta.precoVendaOferta) + `</span> à vista</p> 
8195              </div> 
8196 
8197            </div>   
8198 
8199          </div> 
8200        ` 
8201          } else { 
8202            result = result + ` 
8203          <div class="block-valor-total"> 
8204            <div class="investimento" id="container_investimento_` + index + `"> 
8205        ` 
8206 
8207            // Não mostrar mensagem de 30% de desconto em casos especificos 
8208            if (temDesconto) { 
8209              result = result + ` 
8210              <small class="ssp-card-oferta-curso__title-item font-weight-bold">Valor com 30% de desconto:</small> 
8211          ` 
8212            } 
8213 
8214            if (oferta.precoCheioOferta == oferta.precoVendaOferta) { 
8215              result = result + ` 
8216              <small class="ssp-card-oferta-curso__title-item">Valor do curso:</small> 
8217              <h6 class="ssp-card-oferta-curso__item-valor-investimento"><span>` + oferta.numeroMaxParcelasOferta + `x</span>R$ ` + formataValor(oferta.precoVendaMaxParcelaOferta) + `</h6> 
8218 
8219              <div class="ssp-card-oferta-curso__desconto-content"> 
8220                <p>Ou <span class="ssp-card-oferta-curso__valor-antigo text-decoration-none">R$ ` + formataValor(oferta.precoVendaOferta) + `</span></p> 
8221              </div> 
8222            </div> 
8223            </div> 
8224          ` 
8225            } else { 
8226              result = result + ` 
8227              <small class="ssp-card-oferta-curso__title-item">Investimento:</small> 
8228              <h6 class="ssp-card-oferta-curso__item-valor-investimento"><span>` + oferta.numeroMaxParcelasOferta + `x</span>R$ ` + formataValor(oferta.precoVendaMaxParcelaOferta) + `</h6> 
8229 
8230              <div class="ssp-card-oferta-curso__desconto-content"> 
8231                <p>De: <span class="ssp-card-oferta-curso__valor-antigo">R$ ` + formataValor(oferta.precoCheioOferta) + `</span></p> 
8232                <p>Por: <span class="ssp-card-oferta-curso__valor-desconto">R$ ` + formataValor(oferta.precoVendaOferta) + `</span></p> 
8233              </div> 
8234            </div> 
8235            </div> 
8236          ` 
8237            } 
8238          } 
8239        } 
8240 
8241        let dataBtnComprar = getObjBtnComprar(oferta); 
8242 
8243        // itens que são diferentes entre técnico e livres comprado a extensão   
8244        result = result + ` 
8245 
8246              <div class="ssp-card-oferta-curso__formas-pagamento-content"  id="container_forma_pgto_` + index + `"> 
8247                 
8248                <span>Saiba mais sobre:</span> 
8249 
8250                <div> 
8251                  <i class="ssp-card-oferta-curso__formas-pagamento-content__icon-credit-card"></i> 
8252                  <a id="myBtn_` + index + `" data-index="` + index + `" class="ssp-card-oferta-curso__formas-pagamento-content__title" style="font-weight: 600;" href="#">` + (temDesconto ? 'Descontos e pagamento' : 'Descontos e parcelamento') + `</a> 
8253                </div> 
8254 
8255              </div> 
8256 
8257            <div class="content-buttons"> 
8258 
8259              <div class="ssp-btn-group__content botoes-oferta-container_` + index + `"> 
8260 
8261				<a href="#a" id="btnComprar_` + index + `" data-espaco-ex="` + dataBtnComprar.dataEspacoEx + `" data-unidade="` + codigoUnidade + `" data-evento="` + oferta.codigoOferta + `" data-destino-compra="` + oferta.destinoCompra + `" data-index="` + index + `"  class="btn btn-lg btn-success w-100 mt-3 ` + dataBtnComprar.classeBotao + `" style="font-size:16px;font-weight: 600;">` + dataBtnComprar.textoBotao + `</a> 
8262 
8263              </div> 
8264 
8265            </div> 
8266 
8267          </div> 
8268 
8269        </div> 
8270    ` 
8271 
8272        return result 
8273      } 
8274 
8275      function montaRestanteHTMLexcecaoCursoGratuito(index, oferta) { 
8276 
8277        let dataBtnComprarExcecao = getObjBtnComprar(oferta); 
8278        let resultModalidade = 
8279          ` 
8280	  	      <div class="content-valores-descontos hide-price codigoOferta_` + oferta.codigoOferta + `"> 
8281	  	      <div class="ssp-card-oferta__info-turma-content"> 
8282	           	 <h6 class="ssp-card-oferta__info-turma">Curso gratuito</h6> 
8283	        	  </div> 
8284	  	       <div class="block-valor-total"> 
8285	  	        <div class="investimento" id="container_investimento_` + index + `"> 
8286	  	           <h6 class="ssp-card-oferta-curso__item-valor-investimento"><span>R$ 0,00</h6> 
8287	  	        </div> 
8288	  	        </div> 
8289	  	        <div class="content-buttons"> 
8290	  	 
8291	  	          <div class="ssp-btn-group__content botoes-oferta-container_` + index + `"> 
8292	  	 
8293	  	            <a href="#a" id="btnComprar_` + index + `" data-espaco-ex="` + dataBtnComprarExcecao.dataEspacoEx + `" data-unidade="` + codigoUnidade + `" data-evento="` + oferta.codigoOferta + `" data-destino-compra="` + oferta.destinoCompra + `" data-index="` + index + `"  class="btn btn-lg btn-success w-100 mt-3 ` + dataBtnComprarExcecao.classeBotao + `" style="font-size:16px;font-weight: 600;">FAZER MATRÍCULA</a> 
8294	  	 
8295	  	          </div> 
8296	  	 
8297	  	        </div> 
8298	  	        </div> 
8299	  	        </div> 
8300	      		` 
8301          ; 
8302        return resultModalidade; 
8303 
8304      } 
8305 
8306 
8307      var htmlModalLocalRealizacao = '<div id="modalLocalRealizacao_{index}" class="ssp-modal">' 
8308      htmlModalLocalRealizacao += '<div class="ssp-modal-local-realizacao">' 
8309      htmlModalLocalRealizacao += '<div class="ssp-modal-local-realizacao__title-content">' 
8310 
8311      htmlModalLocalRealizacao += '{tituloLocalRealizacao}' 
8312 
8313      htmlModalLocalRealizacao += '<i class="ssp-card-modal-local-realizacao__btn-close_{index} ssp-card-modal-forma-pagamento__btn-close"></i>' 
8314      htmlModalLocalRealizacao += '</div>' 
8315      htmlModalLocalRealizacao += '<div class="ssp-modal-local-realizacao__texto">' 
8316      htmlModalLocalRealizacao += '<p class="{classeTextoInfoLocalRealizacao}">A unidade {nomeUnidade} realizará as aulas em outro endereço, conforme informações abaixo:</p>' 
8317      htmlModalLocalRealizacao += '<p><span class="ssp-modal-local-realizacao__subtitle localEspacoExternoTexto_{index}">{textoFormatoHibrido}{localEspacoExterno}</span></p>' 
8318      htmlModalLocalRealizacao += '<address>' 
8319      htmlModalLocalRealizacao += '<span id="endereco_realizacao_{index}" class="{classeEnderecoRealizacao}">{ruaEspacoExterno}, {numeroEspacoExterno} {complementoEspacoExterno}<br></span>' 
8320      htmlModalLocalRealizacao += '<span id="bairro_realizacao_{index}" class="{classeBairroRealizacao}">Bairro: {bairroEspacoExterno}<br></span>' 
8321      htmlModalLocalRealizacao += '<span id="cidade_realizacao_{index}" class="{classeCidadeRealizacao}">Cidade: {cidadeEspacoExterno} - SP<br></span>' 
8322      htmlModalLocalRealizacao += '<span id="cep_realizacao_{index}" class="{classeCepRealizacao}">CEP: {cepEspacoExterno}</span>' 
8323      htmlModalLocalRealizacao += '</address>' 
8324      htmlModalLocalRealizacao += '<div class="btn ssp-modal-local-realizacao__btn-content">' 
8325      htmlModalLocalRealizacao += '<a class="btn ssp-modal-local-realizacao__btn {classeEntendi} ssp-modal-local-realizacao__btn_{index}" href="#a">Entendi</a>' 
8326      htmlModalLocalRealizacao += '</div>' 
8327      htmlModalLocalRealizacao += '</div>' 
8328      htmlModalLocalRealizacao += '</div>' 
8329      htmlModalLocalRealizacao += '</div>'; 
8330 
8331      var htmlModalAntesCompra = '<div id="modalAntesCompra_{index}" class="ssp-modal">' 
8332      htmlModalAntesCompra += '<div class="ssp-modal-local-realizacao">' 
8333      htmlModalAntesCompra += '<div class="ssp-modal-local-realizacao__title-content">' 
8334      htmlModalAntesCompra += '<h6 class="ssp-modal-local-realizacao__title"> LEMBRETE IMPORTANTE!</h6>' 
8335      htmlModalAntesCompra += '<i class="ssp-card-modal-antes-compra__btn-close_{index} ssp-card-modal-forma-pagamento__btn-close"></i>' 
8336      htmlModalAntesCompra += '</div>' 
8337      htmlModalAntesCompra += '<div class="ssp-modal-local-realizacao__texto">' 
8338      htmlModalAntesCompra += '<p class="{classeTextoInfoLocalRealizacao}">A unidade {nomeUnidade} realizará as aulas em outro endereço, conforme informações abaixo:</p>' 
8339      htmlModalAntesCompra += '<p><span class="ssp-modal-local-realizacao__subtitle localEspacoExternoTexto_{index}">{textoFormatoHibrido}{localEspacoExterno}</span></p>' 
8340      htmlModalAntesCompra += '<address>' 
8341      htmlModalAntesCompra += '<span id="endereco_realizacao_{index}" class="{classeEnderecoRealizacao}">{ruaEspacoExterno}, {numeroEspacoExterno} {complementoEspacoExterno}<br></span>' 
8342      htmlModalAntesCompra += '<span id="bairro_realizacao_{index}" class="{classeBairroRealizacao}">Bairro: {bairroEspacoExterno}<br></span>' 
8343      htmlModalAntesCompra += '<span id="cidade_realizacao_{index}" class="{classeCidadeRealizacao}">Cidade: {cidadeEspacoExterno} - SP<br></span>' 
8344      htmlModalAntesCompra += '<span id="cep_realizacao_{index}" class="{classeCepRealizacao}">CEP: {cepEspacoExterno}</span>' 
8345      htmlModalAntesCompra += '</address>' 
8346      htmlModalAntesCompra += '<div class="btn ssp-modal-local-realizacao__btn-content">' 
8347      htmlModalAntesCompra += '{componentBuyConfirmation}' 
8348      htmlModalAntesCompra += '<a id="btnBolsaLocal_{index}" class="btn btn-lg btn-info w-100 mt-3" href="{linkBtnBolsa}" target="_blank" style="display:none;">OK, inscrever para bolsa</a>' 
8349      htmlModalAntesCompra += '<a class="ssp-modal-local-realizacao__btn btn btn-lg w-100 mt-3 ssp-card-modal-selecionar-outro__btn-close_{index}" href="#a" >Selecionar outra turma</a>' 
8350      htmlModalAntesCompra += '</div>' 
8351      htmlModalAntesCompra += '</div>' 
8352      htmlModalAntesCompra += '</div>' 
8353      htmlModalAntesCompra += '</div>'; 
8354 
8355      var htmlSlickAreaDiasSemana = '<div class="ssp-card-oferta-curso__dia-hora-item">' 
8356      htmlSlickAreaDiasSemana += '<p class="ssp-card-oferta-curso__dia-hora-item__dia">' 
8357      htmlSlickAreaDiasSemana += '<span data-dia-hora="dias-semana">{diasSemana}</span>' 
8358      htmlSlickAreaDiasSemana += '<span data-dia-hora="horário">{horasSemana}</span>' 
8359      htmlSlickAreaDiasSemana += '</p>' 
8360      htmlSlickAreaDiasSemana += '</div>'; 
8361 
8362 
8363      //EMED - ELEMENTOS DINAMICOS 
8364      const htmlSlickAreaEmed = function (oferta) { 
8365        var btnid = 'myBtn_' + oferta.indice; 
8366        const diasHorarios = function (oferta) { 
8367          return oferta.diasDaSemanaOferta.join(', ').toLowerCase(); 
8368 
8369        } 
8370 
8371 
8372        return ` 
8373        <div class="ssp-ofertas-emed__card codigoOferta_`+ oferta.codigoOferta + `"> 
8374   
8375        <div class="ssp-ofertas-emed__card-info-turma"> 
8376   
8377            <div class="item-content"> 
8378                <i class="fas fa-calendar-alt calendar-icon-turma"></i> 
8379                <p class="title-turma">`+ oferta.titulo + `</p> 
8380                <span class="text-default" data-info="info-turma">Alunos na turma: <strong>até `+ oferta.qtdeTotalVagas + `</strong></span> 
8381            </div> 
8382   
8383            <div class="content-previsao-inicio-termino"> 
8384   
8385                <div class="item-content"> 
8386                    <span class="text-default">Previsão de início:</span> 
8387                    <span class="text-default-lg">`+ formatarDataEmed(oferta.dataInicio, oferta.etapa, false) + `</span> 
8388                </div> 
8389   
8390                <div class="item-divisor"></div> 
8391   
8392                <div class="item-content"> 
8393                    <span class="text-default">Previsão de término:</span> 
8394                    <span class="text-default-lg">`+ formatarDataEmed(oferta.dataFim, oferta.etapa, true) + `</span> 
8395                </div> 
8396   
8397            </div> 
8398   
8399   
8400            <div class="item-divisor"></div> 
8401   
8402            <div class="item-content"> 
8403                <span class="text-default">Dias e horários das aulas:</span> 
8404                <span class="text-default-lg" style="text-transform: capitalize;">`+ diasHorarios(oferta) + `</span> 
8405                <span class="text-default-lg">`+ oferta.horaInicio.replace(':', 'h') + ' às ' + oferta.horaFimOferta.replace(':', 'h') + `</span> 
8406            </div> 
8407             
8408        </div> 
8409   
8410        <div class="ssp-ofertas-emed__card-info-investimento"> 
8411            <p class="title-investimento">Investimento anual:</p> 
8412   
8413            <div class="item-content-investimento"> 
8414                <span class="txt-parcelas">Até `+ oferta.numeroMaxParcelasOferta + `x</span> 
8415                <span class="txt-valor-parcela">R$ `+ formataValor(oferta.precoVendaMaxParcelaOferta) + `</span> 
8416            </div> 
8417   
8418            <div class="item-content-investimento"> 
8419                <p class="txt-boleto-cartao">(boleto bancário ou cartão de crédito)</p> 
8420            </div> 
8421   
8422            <div class="item-content-investimento"> 
8423                <i class="fas fa-credit-card icon-cartao-credito"></i> 
8424                <a id="`+ btnid + `" data-index="` + oferta.indice + `" href="#" class="link-descontos-parcelamentos">Descontos e Parcelamentos</a> 
8425            </div> 
8426               
8427        </div> 
8428   
8429    </div> 
8430 
8431    `; 
8432      } 
8433 
8434 
8435      async function loadCursosVocePodeGostar() { 
8436 
8437        const $section = document.getElementById('section-cursos-voce-pode-gostar'); 
8438        const $container = document.getElementById('slider-curso'); 
8439 
8440        const ok = await PortalView.Card.initCursosQuePodeGostarSection({ 
8441          sectionElement: $section, 
8442          containerElement: $container, 
8443          listId: 'swiper-cursos-gostar-list', 
8444          articleId: $('[name="articleId"]').val(), 
8445          categoryId: $('[name="idTipoCurso"]').val(), 
8446          // EMED nao possui vocabulario de temas mercadologicos consistente 
8447          // entre cursos - recomenda so por tipo de curso, como no comportamento antigo. 
8448          matchTemas: !isEmed, 
8449          limit: 12 
8450        }); 
8451 
8452        $section.classList.toggle('d-none', !ok); 
8453 
8454      } 
8455 
8456      /* 
8457       * Armazena a navegação em cookies, se habilitado 
8458       */ 
8459      $(document).on("click", ".ck-curso", function () { 
8460 
8461        //Verifica se o cookie está habilitado 
8462        if (getCookie('portalSenacCookie') != null) { 
8463 
8464          var articleId = $(this).data('ck'); 
8465          manageCookieArray('ck-cursos', articleId); 
8466 
8467        } 
8468 
8469      }); 
8470 
8471 
8472 
8473 
8474 
8475      $(function () { 
8476 
8477        if ($('#unidades-ofertas').find('option').length == 0) { 
8478 
8479          $('.ssp-container-selecione-unidade').addClass('d-none') 
8480 
8481        } 
8482 
8483      }); 
8484 
8485      function avisoNovasTurmas() { 
8486 
8487 
8488        window.event.preventDefault() 
8489 
8490        //var unidadeSelecionada = $('#select-registro-interesse').val(); 
8491        //este select tem 2 valores separados por @ -> categoryId@codUnidade 
8492        //  var unidadeSelecionada = $('#unidades-ofertas').val(); 
8493 
8494        //Código fixo quando Senac Ao Vivo 
8495        var codUnidadeSelectRegInt = (isAoVivo) ? codUnidadeSenacAoVivo : $('#unidades-ofertas').val().split("@")[1]; 
8496 
8497        //  if(codUnidadeSelectRegInt && codUnidadeSelectRegInt.length){ 
8498 
8499        //Se ja tiver logado , redireciona para o registro 
8500        if (!Liferay.ThemeDisplay.isSignedIn()) { 
8501          sspRequireAuthentication('#btn-aviso-novas-turmas'); 
8502        } else { 
8503          abrirModalRegistroInteresse(codUnidadeSelectRegInt); 
8504          verificaBtnEnviarRegistroInteresseAtivo(); 
8505        } 
8506 
8507        window.onclick = function (event) { 
8508          $('[id="modal-registro-interesse"]').each(function (index, _modal) { 
8509            if (event.target == _modal) { 
8510              $('#modal-registro-interesse').addClass('d-none'); 
8511              $("body").removeClass("overflow-hidden") 
8512            } 
8513          }); 
8514        } 
8515 
8516        //  } 
8517      } 
8518 
8519 
8520      function registroSelecionaTodosDias() { 
8521 
8522        if ($(this).hasClass('ssp-week-day-active')) { 
8523          $(this).removeClass('ssp-week-day-active') 
8524          $('.ssp-week-day').removeClass('ssp-week-day-active') 
8525        } else { 
8526          $(this).addClass('ssp-week-day-active') 
8527          $('.ssp-week-day').addClass('ssp-week-day-active') 
8528        } 
8529 
8530        verificaBtnEnviarRegistroInteresseAtivo(); 
8531      } 
8532 
8533      function registroSelecionaTodosPeriodos() { 
8534 
8535        if ($(this).is(':checked')) { 
8536          $('.ssp-card-registro-interesse__check-itens-content.periodos-registro-interesse input[type=checkbox]').prop('checked', true); 
8537        } else { 
8538          $('.ssp-card-registro-interesse__check-itens-content.periodos-registro-interesse input[type=checkbox]').prop('checked', false); 
8539        } 
8540 
8541        verificaBtnEnviarRegistroInteresseAtivo(); 
8542      } 
8543      $('.turmas-registro-interesse input[type=checkbox]').on('click', function () { 
8544        var $selecionado = $(this); 
8545        if ($selecionado.is(":checked")) { 
8546          $('.turmas-registro-interesse input[type=checkbox]').prop("checked", false); 
8547          $selecionado.prop("checked", true); 
8548        } else { 
8549          $selecionado.prop("checked", false); 
8550        } 
8551      }); 
8552      function enviarRegistroInteresse() { 
8553 
8554        if (!Liferay.ThemeDisplay.isSignedIn()) { 
8555          //Sem o cookie refaz o login 
8556          $('#modal-registro-interesse').addClass('d-none'); 
8557          $('body').removeClass('overflow-hidden'); 
8558          $('#modal-login').removeClass('d-none'); 
8559          sspRequireAuthentication('#btn-aviso-novas-turmas'); 
8560          return; 
8561        } 
8562 
8563        loadingSubmitButton('#enviar-registro-interesse-btn'); 
8564 
8565        sspGetLoggedUser().then(function (user) { 
8566 
8567          var codigoUsr = (user && user.codPessoa) ? user.codPessoa : null; 
8568 
8569          if (codigoUsr == null) { 
8570            console.log('Campo personalizado codPessoa não encontrado no usuário logado.', user); 
8571            cleanLoadingSubmitButton('#enviar-registro-interesse-btn'); 
8572            $('#modal-registro-interesse-erro').removeClass('d-none'); 
8573            return; 
8574          } 
8575 
8576          var codigoFT = $('[name="codigoFT"]').val(); 
8577 
8578          var unidades = new Set(); 
8579 
8580          var diasSemana = ''; 
8581 
8582          //Senac ao vivo nao tem opçao de dias da semana nem unidades 
8583          if (isAoVivo) { 
8584            unidades.add(codUnidadeSenacAoVivo); 
8585          } else { 
8586            $.each($('.ssp-week-day').not('#todosDias'), function (k, v) { 
8587              if ($(this).hasClass('ssp-week-day-active')) { 
8588                diasSemana += $(this).text() + ','; 
8589              } 
8590            }); 
8591 
8592            if (diasSemana.length > 0) diasSemana = diasSemana.slice(0, -1); 
8593 
8594            $.each($('.ssp-card-registro-interesse__select'), function (k, item) { 
8595 
8596              unidades.add(item.value); 
8597            }); 
8598          } 
8599 
8600 
8601          var periodos = ''; 
8602 
8603          $.each($('.periodos-registro-interesse input[type=checkbox]').not('#check-todos-periodos'), function (k, v) { 
8604            if ($(this).is(':checked')) { 
8605              periodos += $(this).val() + ','; 
8606            } 
8607          }); 
8608 
8609          var turmas = ''; 
8610 
8611          $.each($('.turmas-registro-interesse input[type=checkbox]').not('#check-todos-periodos'), function (k, v) { 
8612            if ($(this).is(':checked')) { 
8613              turmas += $(this).val() + ','; 
8614            } 
8615          }); 
8616 
8617          if (periodos.length > 0) periodos = periodos.slice(0, -1); 
8618          if (turmas.length > 0) turmas = turmas.slice(0, -1); 
8619 
8620          var usuarioNotificado = false; 
8621 
8622          unidades.forEach(function (codigoUnidade) { 
8623            var data = { 
8624              codigoFT: codigoFT, 
8625              codigo: codigoUsr, 
8626              diasSemana: diasSemana, 
8627              periodos: periodos, 
8628              turmas, turmas, 
8629              codigoUnidade: codigoUnidade, 
8630              interesseBolsa: 'N', 
8631              isEmed: isEmed ? 'S' : 'N' 
8632            }; 
8633 
8634            const url = urlRegistroInteresse; 
8635 
8636            $.ajax({ 
8637              url: url, 
8638              method: 'POST', 
8639              data: JSON.stringify(data), 
8640              headers: { 
8641                'Accept': 'application/json', 
8642                'Content-Type': 'application/json' 
8643              }, 
8644            }).done( 
8645              function (retornoData) { 
8646 
8647                var retornoData = JSON.stringify(retornoData); 
8648 
8649                if (retornoData.length > 0) { 
8650 
8651                  cleanLoadingSubmitButton('#enviar-registro-interesse-btn'); 
8652 
8653                  var retorno = JSON.parse(retornoData); 
8654 
8655                  if (retorno.status == 200 || retorno.status == 201) { 
8656 
8657                    //Evita que o usuário recebe um email para cada unidade de interesse 
8658                    if (usuarioNotificado) return; 
8659 
8660                    //Mensagem de sucesso registro interesse 
8661                    $('#modal-registro-interesse-sucesso').removeClass('d-none'); 
8662 
8663                    var prefixUrl = themeDisplay.getLayoutRelativeURL(); 
8664 
8665                    if (prefixUrl.indexOf('staging/') > 1) 
8666                      prefixUrl = prefixUrl.substring(0, prefixUrl.lastIndexOf('staging/') + 8); 
8667                    else 
8668                      prefixUrl = HOST; 
8669 
8670                    $('#btn-voltar-home').attr('href', prefixUrl); 
8671 
8672                    //Busca os dados do nome do usuário logado 
8673                    var username = user.givenName || (user.name ? user.name.split(' ')[0] : ''); 
8674 
8675                    //Prioridade para nomeSocial 
8676                    if (user.socialName && user.socialName !== 'null' && user.socialName.length > 0) { 
8677                      username = user.socialName; 
8678                    } 
8679 
8680                    username = username.replace(/['"]+/g, ''); 
8681 
8682                    var unidadesSel = getUnidadesSelecionadasRI(); 
8683 
8684                    //Disara um email para o usuário interessado              
8685                    var data = { 
8686                      emailInteressado: user.emailAddress, 
8687                      nomeInteressado: username, 
8688                      tituloCurso: $('.ssp-card-detalhe-curso__title').text(), 
8689                      unidades: unidadesSel.unidades, 
8690                      unidadesPrefix: unidadesSel.unidadesPrefix 
8691                    }; 
8692 
8693                    $.ajax({ 
8694                      url: urlRegistroInteresseEmailInteressado, 
8695                      method: 'POST', 
8696                      data: JSON.stringify(data), 
8697                      headers: { 
8698                        'Accept': 'application/json', 
8699                        'Content-Type': 'application/json' 
8700                      }, 
8701                    }).done(function (retornoData) { }); 
8702 
8703                    usuarioNotificado = true; 
8704 
8705                    window.onclick = function (event) { 
8706                      $('[id="modal-registro-interesse-sucesso"]').each(function (index, _modal) { 
8707                        if (event.target == _modal) { 
8708                          $('#modal-registro-interesse-sucesso').addClass('d-none'); 
8709                          $('#modal-registro-interesse').addClass('d-none'); 
8710                          $("body").removeClass("overflow-hidden"); 
8711                        } 
8712                      }); 
8713                    } 
8714 
8715                  } else { 
8716                    //Mensagem de erro registro interesse 
8717                    $('#modal-registro-interesse-erro').removeClass('d-none'); 
8718                  } 
8719                } else { 
8720                  //Mensagem de erro registro interesse 
8721                  $('#modal-registro-interesse-erro').removeClass('d-none'); 
8722                } 
8723              }).fail(function () { 
8724                cleanLoadingSubmitButton('#enviar-registro-interesse-btn'); 
8725                $('#modal-registro-interesse-erro').removeClass('d-none'); 
8726              }); 
8727          }); 
8728        }); // sspGetLoggedUser 
8729      } 
8730 
8731      function verificaBtnEnviarRegistroInteresseAtivo() { 
8732        var diasSemanaSelecionado = false; 
8733        var periodoSelecionado = false; 
8734        var turmaSelecionada = false; 
8735        var politicaPrivacidadeSelecionado = false; 
8736 
8737 
8738        $.each($('.periodos-registro-interesse input[type=checkbox]').not('#check-todos-periodos'), function (k, v) { 
8739          if ($(this).is(':checked')) 
8740            periodoSelecionado = true; 
8741        }); 
8742 
8743        $.each($('.turmas-registro-interesse input[type=checkbox]').not('#check-todos-periodos'), function (k, v) { 
8744          if ($(this).is(':checked')) 
8745            turmaSelecionada = true; 
8746        }); 
8747 
8748        if ($('#check-politica-privacidade').is(':checked')) politicaPrivacidadeSelecionado = true; 
8749 
8750        var ativo = true 
8751 
8752        //Caso tenha algum dos selects de unidade sem uma opção válida selecionada 
8753        if (!isAoVivo) 
8754          ativo = ativo && !Array.from($('.ssp-card-registro-interesse__select.unidades')).filter(sel => !$(sel).val()).length 
8755 
8756        ativo = ativo && periodoSelecionado && politicaPrivacidadeSelecionado; 
8757 
8758        if (!isAoVivo && !isEmed) { 
8759 
8760          $.each($('.ssp-week-day').not('#todosDias'), function (k, v) { 
8761            if ($(this).hasClass('ssp-week-day-active')) 
8762              diasSemanaSelecionado = true; 
8763          }); 
8764          ativo = ativo && diasSemanaSelecionado; 
8765 
8766        } 
8767 
8768        if (isEmed) 
8769          ativo = ativo && turmaSelecionada; 
8770 
8771        if (ativo) 
8772          $('#enviar-registro-interesse-btn').attr("disabled", false); 
8773        else 
8774          $('#enviar-registro-interesse-btn').attr("disabled", true); 
8775      } 
8776 
8777      function loadPlanoCurso() { 
8778 
8779        const urlGetPlanoCurso = urlPlanoCurso 
8780 
8781          .replace('\{codigoFT\}', $('[name="codigoFT"]').val()) 
8782          .replace('\{dataEfetiva\}', $('[name="dataEfetivaSTR"]').val()); 
8783 
8784        $.ajax({ 
8785            url:urlGetPlanoCurso, 
8786            method:'get', 
8787            crossDomain: true, 
8788            dataType: 'html', 
8789            success: function( data ) { 
8790   
8791   
8792              //Atualiza o link com o plano de curso do servi¿o (ja retorna o texto) 
8793              $('#plano-curso').append('<br/>'+data);  
8794            }, 
8795            error: function(data){ 
8796               
8797              console.log('Não existe a URL do plano de curso'); 
8798								 
8799            } 
8800         
8801          }); 
8802   } 
8803     
8804  function checkCursoTrampolim(){ 
8805    return $('[name="codigoFT"]').val() == "24493";  
8806  } 
8807   
8808  /*function verificaOfertaValida(oferta){ 
8809       
8810    if(oferta['precoCheioOferta'] == '' || oferta['precoVendaOferta'] == '' || oferta['numeroMaxParcelasOferta'] == '' || oferta['precoVendaMaxParcelaOferta']  == '') 
8811      return false; 
8812     
8813    var atual = new Date(); 
8814   
8815    var dataOfertaPartes = oferta['dataInicio'].split('/'); 
8816     
8817    var dataOferta = new Date(dataOfertaPartes[2], dataOfertaPartes[1] - 1, dataOfertaPartes[0]); 
8818     
8819    var dataLimiteMatriculaOfertaPartes = ""; 
8820    var dataLimiteMatriculaOferta = ""; 
8821     
8822    if(oferta['dtLimiteMatricula'] != ""){ 
8823    dataLimiteMatriculaOfertaPartes = oferta['dtLimiteMatricula'].split('-'); 
8824      dataLimiteMatriculaOferta = new Date(dataLimiteMatriculaOfertaPartes[0], dataLimiteMatriculaOfertaPartes[1] - 1, dataLimiteMatriculaOfertaPartes[2] ,atual.getHours(),atual.getMinutes(),atual.getSeconds(),atual.getMilliseconds());  
8825     
8826    } 
8827     
8828     
8829    //Só deve aparecer ofertas D-1 . Se ela iniciou, aparece se o campo dtLimiteMatr estiver preenchido e com data até o dia de hoje  
8830    if(dataOferta <= atual) 
8831      if(dataLimiteMatriculaOferta == "" || (dataLimiteMatriculaOferta != "" &&  atual.getTime() > dataLimiteMatriculaOferta.getTime())) 
8832        return false; 
8833     
8834    return true; 
8835  }*/ 
8836   
8837   
8838  function loadServerDate(){ 
8839    if (serverDateRequest) return serverDateRequest; 
8840 
8841    serverDateRequest = Promise.resolve($.ajax({ 
8842      url:urlGetServerT, 
8843      method:'get', 
8844      dataType: 'json', 
8845      cache: 'false', 
8846      headers: { 
8847      'Cache-Control': 'no-store, no-cache, max-age=0', 
8848      'Expires': '0', 
8849      'Pragma': 'no-cache' 
8850      }, 
8851    })).then(function (data) { 
8852      var serverDate = new Date(data.year, data.month - 1, data.day, data.hour, data.minutes, data.seconds); 
8853      if (Number.isNaN(serverDate.getTime())) { 
8854        throw new Error('Horario retornado pelo servidor invalido'); 
8855      } 
8856      todayG = serverDate; 
8857      startTimer(); 
8858    }).finally(function () { 
8859      serverDateRequest = null; 
8860    }); 
8861 
8862    return serverDateRequest; 
8863  } 
8864   
8865   function handleVisibilityChange() { 
8866     
8867     if (!document[hidden] ){ 
8868      restartTimer(); 
8869     } 
8870     
8871   } 
8872   
8873  function restartTimer(){ 
8874     
8875    if(todayG && restartTimeout == null && $('[id^="btnContadorBolsa_"], [id^="btnContadorComprar_"]').length){ 
8876      loadServerDate().catch(function (error) { 
8877        console.error('Erro ao sincronizar horario do contador:', error); 
8878      }); 
8879      restartTimeout = setTimeout(function(){ 
8880        restartTimeout = null; 
8881      }, 60000); 
8882    } 
8883     
8884  } 
8885    
8886	 function startTimer(){ 
8887		 
8888		var mSeconds = todayG.getTime(); 
8889		if(interval01 != null){ 
8890			clearInterval(interval01); 
8891		} 
8892		interval01 = setInterval(function(){ 
8893			todayG.setTime(todayG.getTime() + 1000); 
8894		}, 1000); 
8895		 
8896		if(interval15 != null){ 
8897			clearInterval(interval15); 
8898		} 
8899		interval15 = setInterval(function(){ 
8900			mSeconds = mSeconds + 15000; 
8901			todayG.setTime(mSeconds); 
8902		}, 15000); 
8903		 
8904	 } 
8905   
8906  function checkIsAoVivo(){ 
8907    isAoVivo = $("input[name='formato']").attr("data-formato") == nomeFormatoAoVivoDxp; 
8908  } 
8909   
8910   
8911  //Ao clicar na setinha next do slider, busca dinamicamente uma proxima oferta 
8912  function buscaProximaOferta(){ 
8913    //Zera variável que controla existência de ofertas com bolsa 
8914    //ofertasComBolsa = false; 
8915  	  
8916     //Verificamos se a ultima oferta já foi exibida, para evitar de fazer novas buscas 
8917     if(carregouUltimaOferta)  
8918        return; 
8919 
8920        //Fazemos o cálculo do que está sendo exibido, para verificar se existe apenas um card 'escondido'. Caso tenha apenas um, a busca deve ser executada, caso contrário não.	 
8921        var totalOfertasSlick = $('#turmas-container .slick-area__item').length; 
8922        //Pegamos o índice da oferta do meio (central) 
8923        var currentSliderIndex = parseInt($('.slick-current').attr('data-slick-index')); 
8924 
8925        var totalOfertasADireita = totalOfertasSlick - currentSliderIndex; 
8926 
8927        //Se o total de ofertas à direita for maior a 2 não precisa realizar a busca 
8928        if (totalOfertasADireita > 2) 
8929          return; 
8930 
8931        startOfertaParam = endOfertaParam; 
8932        endOfertaParam += 16; 
8933 
8934        const codigoFT = $('[name="codigoFT"]').val(); 
8935        const dataEfetivaOferta = $('[name="dataEfetivaSTR"]').val(); 
8936 
8937        var unidadeCategoryId = ''; 
8938        var unidadeCodigoSelect = ''; 
8939 
8940        if (isAoVivo) { 
8941 
8942          $.each(objsTela.unidades, function (k, unidade) { 
8943            unidadeCategoryId += unidade['categoryId'] + ','; 
8944          }); 
8945 
8946          //tirando ultima virgula 
8947          unidadeCategoryId = unidadeCategoryId.substring(0, unidadeCategoryId.length - 1); 
8948 
8949        } else { 
8950          var splitted = $('#unidades-ofertas').val().split("@"); 
8951          unidadeCategoryId = splitted[0]; 
8952          unidadeCodigoSelect = splitted[1]; 
8953        } 
8954 
8955        var params = new URLSearchParams(); 
8956        params.set('codigoFTOferta', codigoFT) 
8957        params.set('dataEfetivaOferta', dataEfetivaOferta) 
8958        params.set('categoryIds', unidadeCategoryId) 
8959        params.set('start', startOfertaParam) 
8960        params.set('end', endOfertaParam) 
8961        params.set('inscricaoAberta', $('#chkInscricao').prop('checked')) 
8962        params.set('bolsaAberta', $('#chkBolsa').prop('checked')) 
8963        params.set('cursoArticleId', $('[name="articleId"]').val() || ''); 
8964 
8965        if ($('#chkBolsa').prop('checked')) { 
8966          params.set('considerarDataBolsaFutura', true) 
8967        } 
8968 
8969        const url = urlSearchOferta + '?' + params.toString() 
8970 
8971        Promise.resolve($.ajax({ 
8972          url: url, 
8973          method: 'get', 
8974          dataType: 'json' 
8975        })).then( 
8976          async function (data) { 
8977 
8978            if (data.length > 0) { 
8979              var indiceOferta = startOfertaParam; 
8980 
8981              for (var index = 0; index < data.length; index++) { 
8982 
8983                var ofertaJSON = data[index]; 
8984                var oferta = getOfertaObjectFromJson(ofertaJSON, index); 
8985 
8986                //Verificamos se a oferta buscada já existe na tela (que ocorre quando chega na última oferta) 
8987                if ($('.codigoOferta_' + oferta.codigoOferta).length > 0) { 
8988                  console.log('Ja tem a oferta ' + oferta.codigoOferta); 
8989                  carregouUltimaOferta = true; 
8990                  break; 
8991                } 
8992 
8993                //guardo em um map a oferta e qual unidade é, para utilizar depois no populaOferta para o aoVivo                
8994                ofertaUnidadeMap.set(oferta['codigoOferta'], mapUnidadesIds.get(parseInt(ofertaJSON.unidadeCategoryIds))); 
8995 
8996                ofertasMap.set(oferta.codigoOferta, oferta); 
8997 
8998                if (isAoVivo) 
8999                  objsTela.ofertasAoVivoTodasUnidades.push(oferta); 
9000 
9001                //O indice é igual ao ultimo elemento buscado - 1 
9002                var i = indiceOferta; 
9003                oferta['indice'] = i; 
9004 
9005                if (isAoVivo) 
9006                  codigoUnidade = ofertaUnidadeMap.get(oferta.codigoOferta); 
9007                else codigoUnidade = unidadeCodigoSelect; 
9008 
9009 
9010                montaHTMLOferta(oferta, i, codigoUnidade, true); 
9011                await montaHTMLModalFormaPgto(oferta, i, codigoUnidade); 
9012 
9013                montaHTMLModalLocalRealizacao(oferta, i); 
9014                montaHTMLModalAntesCompra(oferta, i, codigoUnidade); 
9015                verificaBotaoBolsaSS(oferta); 
9016                verificaCursoAprendizagem(i, oferta.codigoOferta); 
9017                verificaCursoTrampolim(i); 
9018 
9019                associaEventoBtnFormaPagamento(i); 
9020                associaEventoBtnComprar(i); 
9021                associaEventoBtnComprarDentroFormaPgto(i); 
9022                associaEventoBtnLocalRealizacao(i); 
9023                associaEventosFecharModal(i); 
9024 
9025                if ($('[name="tipoCurso"]').val() == 'extensao') { 
9026                  associaEventoBtnConheca(i); 
9027                  associaEventoBtnComprarConhecaDescontoOk(i); 
9028                  associaEventoBtnComprarConhecaDescontoNot(i); 
9029                  associaEventoBtnAlunoNao(i); 
9030                  associaEventoBtnAlunoSim(i); 
9031 
9032                } 
9033 
9034                indiceOferta++; 
9035              } 
9036 
9037              controlaPaginaBolsa(); 
9038            } 
9039          } 
9040        ).catch(function (error) { 
9041          console.error('Erro ao carregar proximas ofertas:', error); 
9042        }); 
9043 
9044      } 
9045 
9046      function setUrlParam(key, value) { 
9047        const url = new URL(window.location.href) 
9048 
9049        if (value) 
9050          url.searchParams.set(key, value); 
9051        else 
9052          url.searchParams.delete(key); 
9053 
9054        window.history.pushState({}, '', url.toString()) 
9055      } 
9056 
9057      function selectFilter(paramkey, el) { 
9058        setUrlParam(paramkey, el.prop("checked")) 
9059        const currentUnidadeFriendlyURLSelected = $('#unidades-ofertas').find('option').filter(':selected').attr('data-unidade-friendly-url') 
9060        loadUnidades(!isAoVivo, $('[data-unidade-friendly-url="' + currentUnidadeFriendlyURLSelected + '"]').val()) 
9061 
9062        if ($('#chkInscricao').prop("checked") || $('#chkBolsa').prop("checked")) $('#msgFiltroAplicado').show() 
9063        else $('#msgFiltroAplicado').hide() 
9064      } 
9065 
9066      function defineCurrentUrl(ev) { 
9067        const currentUnidadeFriendlyURLSelected = $(ev.target).find('option').filter(':selected').attr('data-unidade-friendly-url') 
9068 
9069        const hasPathWeb = window.location.pathname.includes('/web') 
9070        const hasPathGuest = window.location.pathname.includes('/guest') 
9071 
9072        let currentPath = window.location.pathname 
9073        currentPath = hasPathWeb ? currentPath.substring(4) : currentPath 
9074        currentPath = hasPathGuest ? currentPath.substring(6) : currentPath 
9075 
9076        objsTela.unidadesRegistroInteresse.forEach(unidade => currentPath = currentPath.replace('/' + unidade.friendlyURL, '')) 
9077 
9078        currentPath = (currentUnidadeFriendlyURLSelected ? '/' + currentUnidadeFriendlyURLSelected : '') + currentPath 
9079        currentPath = hasPathGuest ? '/guest' + currentPath : currentPath 
9080        currentPath = hasPathWeb ? '/web' + currentPath : currentPath 
9081 
9082        if (keepURL()) 
9083          window.history.replaceState(window.history.state, '', currentPath + window.location.search) 
9084      } 
9085 
9086      let isKeepURL = true 
9087      /** Verifica se é para manter a URL atual. Isso deve acontecer somente ao iniciar a página #9674 */ 
9088      function keepURL() { 
9089        const aux = isKeepURL 
9090        isKeepURL = false 
9091        return !aux 
9092      } 
9093 
9094      $(document).ready(function () { 
9095 
9096        if ("${normalizedCategoryName}" == "graduacao" || "${normalizedCategoryName}" == "pos-graduacao") { 
9097          document.location.href = '/erro-404' 
9098        } 
9099 
9100        ehCursoTrampolim = checkCursoTrampolim(); 
9101        checkIsAoVivo(); 
9102        loadPlanoCurso(); 
9103        loadCursosVocePodeGostar(); 
9104        loadPoliticaPrivacidade(); 
9105 
9106        if (!isAoVivo) { 
9107          $('#unidades-ofertas').change(ev => { 
9108            if (isEmed) { 
9109              toggleUnidadesOfertasLoading(true) 
9110 
9111              try { 
9112                const request = mudarUnidade(ev) 
9113                defineCurrentUrl(ev) 
9114 
9115                $.when(request).always(function () { 
9116                  toggleUnidadesOfertasLoading(false) 
9117                }) 
9118              } catch (error) { 
9119                console.error('Erro ao carregar turmas da unidade selecionada.', error) 
9120                toggleUnidadesOfertasLoading(false) 
9121              } 
9122 
9123              return; 
9124            } 
9125 
9126            mudarUnidade(ev) 
9127            defineCurrentUrl(ev) 
9128          }); 
9129        } 
9130 
9131        const urlParams = new URLSearchParams(window.location.search) 
9132        $('#chkInscricao').prop("checked", urlParams.get('inscricao') == 'true') 
9133        $('#chkInscricao').change(ev => selectFilter('inscricao', $('#chkInscricao'))) 
9134 
9135        if ($('#chkBolsa').length) { 
9136          $('#chkBolsa').prop("checked", urlParams.get('bolsa') == 'true') 
9137          $('#chkBolsa').change(ev => selectFilter('bolsa', $('#chkBolsa'))) 
9138          loadUnidades(!isAoVivo); 
9139        } else { 
9140          selectFilter('bolsa', $('#chkBolsa')) 
9141        } 
9142 
9143        //Função para Montar breadcrumb Mobile 
9144 
9145        function breadcrumbMobile() { 
9146 
9147          const linkEl = $('.ssp-card-detalhe-curso__secunday-info-back-link'); 
9148 
9149          if ($.trim(linkEl.html()) === 'Técnico') { 
9150 
9151            linkEl.attr("href", "/cursos-tecnicos"); 
9152 
9153          } else if ($.trim(linkEl.html()) === 'Livre') { 
9154 
9155            if (isAoVivo) { 
9156              linkEl.html('Senac Online<i class="fas fa-signal-stream icon-ao-vivo" aria-hidden="true"></i>ao vivo') 
9157              linkEl.attr("href", "/cursos-livres-senac-online-ao-vivo"); 
9158            } else { 
9159              linkEl.attr("href", "/cursos-livres"); 
9160            } 
9161          } else if ($.trim(linkEl.html()) === 'Aprendizagem') { 
9162 
9163            linkEl.attr("href", "/jovem-aprendiz"); 
9164 
9165          } else if ($.trim(linkEl.html()) === 'Extensão Universitária') { 
9166 
9167            linkEl.attr("href", "/extensao-universitaria"); 
9168 
9169          } else if ($.trim(linkEl.html()) === 'Ensino Médio Técnico') { 
9170 
9171            linkEl.attr("href", "/ensino-medio-tecnico"); 
9172          } 
9173 
9174        } 
9175 
9176        breadcrumbMobile() 
9177 
9178        //Esconde elementos quando o curso é aprendizagem 
9179        if ($('[name="codigoFT"]').val() == codigoFTCursoAprendizagem) { 
9180          $('.ssp-section-novas-turmas').remove(); 
9181          $("div[class^='botoes-oferta-container_']").remove(); 
9182        } 
9183 
9184        //retira os itens de dentro do container 
9185        $('.bg-').css('background-color', '#e4e4e4') 
9186        $('.container.py-3').removeClass('container py-3') 
9187        //ajuste para versao 7.4 
9188        $('.lfr-layout-structure-item-container.container-fluid.container-fluid-max-xl').removeClass() 
9189 
9190 
9191        //Fecha modal registro de interesse 
9192 
9193        $('#btn-close-Modal-registro-interesse').click(function () { 
9194 
9195          $('#modal-registro-interesse').addClass('d-none') 
9196          $("body").removeClass("overflow-hidden") 
9197 
9198        }) 
9199 
9200        $("#modal-registro-interesse").click(function (event) { 
9201 
9202          if (event.target.id == $('#modal-registro-interesse')[0].id) { 
9203            $(this).addClass('d-none') 
9204          } 
9205 
9206        }); 
9207 
9208 
9209        //Aviso sobre interesse em turmas 
9210        $('.ssp-card-registro-interesse').on('click', '#enviar-registro-interesse-btn', enviarRegistroInteresse); 
9211        if (!isEmed) { 
9212          $('.ssp-aviso-novas-turmas__content').on('click', '#btn-aviso-novas-turmas', avisoNovasTurmas); 
9213          $('.ssp-card-registro-interesse').on('click', '#todosDias', registroSelecionaTodosDias); 
9214        } else { 
9215          $('.ssp-emed__card-slider-body').on('click', '#btnOptin', avisoNovasTurmas) 
9216        } 
9217        $('#div-campo-todos').on('change', 'input[type=checkbox]', registroSelecionaTodosPeriodos); 
9218 
9219        $('#btnLogin').click(function () { 
9220 
9221          login() 
9222 
9223        }); 
9224 
9225        $('#btn-close-loginModal').click(function () { 
9226          $('#modal-login').addClass('d-none') 
9227        }); 
9228 
9229        $('.ssp-week-day').not('#todosDias').click(function () { 
9230 
9231          $(this).toggleClass('ssp-week-day-active'); 
9232          verificaBtnEnviarRegistroInteresseAtivo(); 
9233 
9234        }); 
9235 
9236        $('#add-unidade-regsitro-interesse').click(function (e) { 
9237          var element = $('.ssp-card-registro-interesse__select.unidades').first().clone(); 
9238          element.empty(); 
9239          element.append('<option value="" disabled selected>Selecione uma unidade</option>') 
9240          $.each(objsTela.unidadesRegistroInteresse, function (k, unidade) { 
9241 
9242            if (!unidade['selecionado']) { 
9243              element.append('<option value="' + unidade['codigoUnidade'] + '">' + unidade['nome'] + '</option>'); 
9244            } 
9245 
9246          }); 
9247          element.change(changeSelectUnidades) 
9248 
9249 
9250          element.css('margin-top', '10px'); 
9251 
9252          if (element.find("option").length > 1 && $('.ssp-card-registro-interesse__select.unidades').length < objsTela.unidadesRegistroInteresse.length) { 
9253            element.attr("id", "select_" + cntSelectUnidades++) 
9254            $('#select-unidades-registro-interesse').append(element); 
9255          } 
9256 
9257          if ($('.ssp-card-registro-interesse__select.unidades').length == objsTela.unidadesRegistroInteresse.length) { 
9258            $('#add-unidade-regsitro-interesse').addClass("d-none") 
9259          } 
9260 
9261          verificaBtnEnviarRegistroInteresseAtivo(); 
9262        }); 
9263 
9264        $('#remove-unidade-regsitro-interesse').click(function (e) { 
9265 
9266          if ($('.ssp-card-registro-interesse__select').length > 1) { 
9267 
9268            var element = $('.ssp-card-registro-interesse__select').last(); 
9269 
9270            var valueSelecionado = element.val(); 
9271 
9272            $.each(objsTela.unidadesRegistroInteresse, function (k, unidade) { 
9273 
9274              if (unidade['selecionado'] && unidade['codigoUnidade'] == valueSelecionado) { 
9275                unidade['selecionado'] = false; 
9276                unidade['selectSelecionado'] = ""; 
9277              } 
9278 
9279            }); 
9280            element.val(""); 
9281            cntSelectUnidades--; 
9282            element.change() 
9283 
9284            element.remove(); 
9285          } 
9286 
9287          if ($('.ssp-card-registro-interesse__select.unidades').length < objsTela.unidadesRegistroInteresse.length) { 
9288            $('#add-unidade-regsitro-interesse').removeClass("d-none") 
9289          } 
9290 
9291          verificaBtnEnviarRegistroInteresseAtivo(); 
9292        }) 
9293 
9294        $('.ssp-card-registro-interesse__check-item').on('change', 'input[type=checkbox]', function () { 
9295          verificaBtnEnviarRegistroInteresseAtivo(); 
9296        }); 
9297 
9298        //Contador em ofertas de bolsas proximas 
9299        var cancel = setInterval(atualizaTempoAberturasBolsas, 1000); 
9300 
9301        // Manipua o breadcrumb para as regras do Senac 
9302 
9303        if ($('ol.breadcrumb').find('li:first').text().trim() == "Cursos Pai") 
9304          $('ol.breadcrumb').find('li:first').remove(); 
9305 
9306        var li = $('ol.breadcrumb').find('li:first'); 
9307 
9308        if (li.text().trim() == 'Cursos') { 
9309 
9310          var primeiro = li.clone(); 
9311          primeiro.html(htmlBreadcrumb('/', 'Cursos', 'Home')); 
9312          li.parent().prepend(primeiro); 
9313 
9314          var tipoCurso = $('.ssp-header-curso__tag-formato').text().trim(); 
9315          var tipoBreadcrumb = ''; 
9316 
9317          const isPresencialEad = (tipoCurso.toLowerCase().includes("presencial + ead")) 
9318 
9319          if (tipoCurso.includes("Cursos Livres")) { 
9320            if (isPresencialEad) { 
9321              tipoBreadcrumb = htmlBreadcrumb('/presencial-ead#cursos-livres', tipoCurso); 
9322            } else { 
9323              tipoBreadcrumb = htmlBreadcrumb( 
9324                isAoVivo ? '/cursos-livres-senac-online-ao-vivo' : '/cursos-livres', 
9325                isAoVivo ? nomeFormatoAoVivoDxp : tipoCurso); 
9326            } 
9327          } else if (tipoCurso.includes("Extensão")) { 
9328            if (isPresencialEad) { 
9329              tipoBreadcrumb = htmlBreadcrumb('/presencial-ead#extensao-universitaria', tipoCurso); 
9330            } else { 
9331              tipoBreadcrumb = htmlBreadcrumb('/extensao-universitaria', tipoCurso); 
9332            } 
9333          } else if (tipoCurso.includes("Ensino Médio Técnico")) { 
9334            if (isPresencialEad) { 
9335              tipoBreadcrumb = htmlBreadcrumb('/presencial-ead#ensino-medio-tecnico', tipoCurso); 
9336            } else { 
9337              tipoBreadcrumb = htmlBreadcrumb('/ensino-medio-tecnico', tipoCurso); 
9338            } 
9339          } else if (tipoCurso.includes("Jovem Aprendiz")) { 
9340            if (isPresencialEad) { 
9341              tipoBreadcrumb = htmlBreadcrumb('/presencial-ead#jovem-aprendiz', tipoCurso); 
9342            } else { 
9343              tipoBreadcrumb = htmlBreadcrumb('/jovem-aprendiz', tipoCurso); 
9344            } 
9345          } else { 
9346            if (isPresencialEad) { 
9347              tipoBreadcrumb = htmlBreadcrumb('/presencial-ead#cursos-tecnicos', tipoCurso); 
9348            } else { 
9349              tipoBreadcrumb = htmlBreadcrumb('/cursos-tecnicos', tipoCurso); 
9350            } 
9351          } 
9352 
9353          li.html(tipoBreadcrumb); 
9354 
9355          if ($('ol.breadcrumb').find('li').length == 4) $('ol.breadcrumb').find('li:last').remove(); 
9356 
9357        } 
9358 
9359        $('#turmas-container').on('click', 'a.slick-next', function (e) { 
9360 
9361          e.preventDefault(); 
9362          buscaProximaOferta(); 
9363 
9364        }); 
9365 
9366        $('#turmas-container').on('click', 'button.slick-dots', function () { 
9367 
9368 
9369 
9370        }); 
9371 
9372        $(".next-mobile").on("click", function (e) { 
9373          e.preventDefault(); 
9374 
9375          acoesMobileSliderOfertas("left"); 
9376        }); 
9377 
9378        $(".prev-mobile").on("click", function (e) { 
9379          e.preventDefault(); 
9380 
9381          acoesMobileSliderOfertas("right"); 
9382        }); 
9383 
9384        //ação de drag do card de ofertas no mobile 
9385        $('.oferta-slick-area').on('swipe', function (event, slick, direction) { 
9386          acoesMobileSliderOfertas(direction); 
9387        }); 
9388 
9389        loadAlternadores() 
9390        let modalFormAprendizagem = document.querySelector('#modal-form'); 
9391        if (modalFormAprendizagem) { 
9392          // Create dinamic close buttom form 
9393          let btnCloseModalForm = document.querySelector('[data-modal="close-form-modal"]'); 
9394          btnCloseModalForm.addEventListener('click', closeModalFormAprendizagem); 
9395 
9396        } 
9397 
9398        $(".oferta-slick-area").on("click", ".btnModalAprendizagem", openModalFormAprendizagem); 
9399 
9400      }); 
9401 
9402      function htmlBreadcrumb(link, title, display) { 
9403 
9404        return '<a class="breadcrumb-link" href="' + link + '" title="' + title + '"><span class="breadcrumb-text-truncate">' + (display || title) + '</span></a>'; 
9405 
9406      } 
9407 
9408      function acoesMobileSliderOfertas(direcao) { 
9409 
9410        if (direcao == "right") { 
9411          $("a.slick-prev").click(); 
9412 
9413          if ($('.slick-current').attr('data-slick-index') == "0") 
9414            $('.prev-mobile').addClass('nextPrevOpacity'); 
9415 
9416          if ($(".next-mobile").hasClass('nextPrevOpacity')) 
9417            $('.next-mobile').removeClass('nextPrevOpacity'); 
9418        } 
9419 
9420 
9421        if (direcao == "left") { 
9422          $("a.slick-next").click(); 
9423 
9424          if ($(".prev-mobile").hasClass('nextPrevOpacity')) 
9425            $('.prev-mobile').removeClass('nextPrevOpacity'); 
9426 
9427          if (carregouUltimaOferta) { 
9428            var totalCardOfertas = $('#turmas-container .slick-area__item').length; 
9429            var currentSliderIndex = parseInt($('.slick-current').attr('data-slick-index')); 
9430 
9431            //o card do meio é o último	 
9432            if (totalCardOfertas == (currentSliderIndex + 1)) 
9433              $('.next-mobile').addClass('nextPrevOpacity'); 
9434          } 
9435        } 
9436      } 
9437 
9438      //habilitar/desabilitar registro de interesse 
9439      function habilitarRegistroInteresse(habilitar) { 
9440        var sectionRI = $('#section-registro-interesse') 
9441 
9442        if (isEmed) { 
9443          sectionRI.hide() 
9444          return; 
9445        } 
9446 
9447        //Redmine #9309 - sempre irá mostrar 
9448        habilitar = true 
9449 
9450        if (habilitar) sectionRI.show() 
9451        else sectionRI.hide() 
9452      } 
9453 
9454      function abrirModalRegistroInteresse(codUnidadeSelect) { 
9455        $('#modal-registro-interesse').removeClass('d-none'); 
9456        $("body").addClass("overflow-hidden") 
9457        if (!isEmed) { 
9458          $('.ssp-card-registro-interesse__nome-curso').text($('.ssp-card-detalhe-curso__title').text()); 
9459        } else { 
9460          $(".transferencia-emed-link").find('a').attr("href", "/ensino-medio-tecnico#onde-estudar") 
9461          $('.ssp-card-registro-interesse__title-modal').text($('.ssp-card-detalhe-curso__title').text()); 
9462        } 
9463 
9464        $('.ssp-card-registro-interesse__select:not(#select_0)').remove(); 
9465        $.each(objsTela.unidadesRegistroInteresse, function (k, unidade) { 
9466          if (unidade['codigoUnidade'] == codUnidadeSelect) { 
9467            unidade['selecionado'] = true; 
9468            unidade['selectSelecionado'] = 'select_0'; 
9469          } else { 
9470            unidade['selecionado'] = false; 
9471            unidade['selectSelecionado'] = ""; 
9472          } 
9473 
9474        }); 
9475        objsTela.unidadesRegistroInteresse.sort(function (a, b) { 
9476          return ordenar(a, b, 'nome'); 
9477        }); 
9478 
9479        $('#select_0').empty(); 
9480        $('#select_0').append('<option value="" disabled>Selecione uma unidade</option>') 
9481        $.each(objsTela.unidadesRegistroInteresse, function (k, unidade) { 
9482 
9483          $('#select_0').append('<option value="' + unidade['codigoUnidade'] + '" >' + unidade['nome'] + '</option>'); 
9484 
9485        }); 
9486        $('#select_0').val(codUnidadeSelect); 
9487 
9488        if (isAoVivo) { 
9489          $('#unidades-registro-interesse, #dias-registro-interesse').addClass('d-none'); 
9490        } 
9491        if (objsTela.unidadesRegistroInteresse.length > 1) { 
9492          $('#add-unidade-regsitro-interesse').removeClass("d-none") 
9493          $('#add-unidade-regsitro-interesse').show() 
9494          $('#remove-unidade-regsitro-interesse').show() 
9495        } else { 
9496          $('#add-unidade-regsitro-interesse').hide() 
9497          $('#remove-unidade-regsitro-interesse').hide() 
9498        } 
9499      } 
9500 
9501      $('.ssp-card-registro-interesse__select.unidades').on('change', changeSelectUnidades) 
9502 
9503      function changeSelectUnidades() { 
9504        var codUnidadeSelecionada = $(this).val(); 
9505        var idSelectSelecionado = $(this).attr('id') 
9506        $.each(objsTela.unidadesRegistroInteresse, function (k, unidade) { 
9507          if (unidade['codigoUnidade'] == codUnidadeSelecionada) { 
9508            unidade['selecionado'] = true; 
9509            unidade['selectSelecionado'] = idSelectSelecionado; 
9510          } else if (unidade['selectSelecionado'] == idSelectSelecionado && unidade['selecionado']) { 
9511            unidade['selecionado'] = false; 
9512            unidade['selectSelecionado'] = ""; 
9513          } 
9514 
9515        }); 
9516 
9517        objsTela.unidadesRegistroInteresse.sort(function (a, b) { 
9518          return ordenar(a, b, 'nome'); 
9519        }); 
9520 
9521        $('.ssp-card-registro-interesse__select.unidades:not(#' + idSelectSelecionado + ')').each(function () { 
9522          var valueSelecionado = $(this).val(); 
9523          var idActualSelect = $(this).attr('id'); 
9524          $(this).empty(); 
9525          $(this).append('<option value="" disabled>Selecione uma unidade</option>') 
9526          $.each(objsTela.unidadesRegistroInteresse, function (k, unidade) { 
9527 
9528            if (unidade['selecionado'] && unidade['codigoUnidade'] == valueSelecionado) { 
9529              $("#" + idActualSelect).append('<option value="' + unidade['codigoUnidade'] + '" >' + unidade['nome'] + '</option>'); 
9530            } else if (!unidade['selecionado']) { 
9531              $("#" + idActualSelect).append('<option value="' + unidade['codigoUnidade'] + '">' + unidade['nome'] + '</option>'); 
9532            } 
9533 
9534          }); 
9535          $(this).val(valueSelecionado) 
9536        }); 
9537 
9538        verificaBtnEnviarRegistroInteresseAtivo(); 
9539      } 
9540 
9541 
9542      function ordenar(objA, objB, nomeAtributo) { 
9543        let a = (nomeAtributo) ? objA[nomeAtributo] : objA; 
9544        let b = (nomeAtributo) ? objB[nomeAtributo] : objB; 
9545 
9546        return a.toString().localeCompare(b.toString()); 
9547      } 
9548 
9549      function paramOrdem(xml) { 
9550        if (isEmed) { 
9551          var ordemPeriodo = ['MA', 'TA', 'NO']; 
9552          return $.inArray(xml.find('[name="periodoDiaOferta"]').text().trim(), ordemPeriodo); 
9553        } else { 
9554          return xml.find('[name="dataInicioOferta"]').text(); 
9555        } 
9556      } 
9557 
9558      function getEtapaSelecionadaEmed() { 
9559        var btnEtapa = $('.ssp-ofertas-emed__filtro-content .btn--filtro-ativo'); 
9560        if (!btnEtapa) return ''; 
9561        return btnEtapa.val(); 
9562      } 
9563 
9564      function filtraOfertasEtapa(etapa, ofertas) { 
9565        if (!etapa) return []; 
9566        var ofertasEtapa = []; 
9567        var turmas = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; 
9568        var periodos = { ['MA']: 'Manhã', ['TA']: 'Tarde', ['NO']: 'Noite' }; 
9569        var ultimoPeriodo = null, indexPeriodo; 
9570        ofertas = ofertas.sort(function (a, b) { 
9571          return ordenar(a, b, 'periodoDiaOferta'); 
9572        }); 
9573 
9574        $.each(ofertas, async (index, oferta) => { 
9575          if (oferta['etapa'] == etapa) { 
9576            if (oferta['periodoDiaOferta'] != ultimoPeriodo) indexPeriodo = 0; 
9577            ultimoPeriodo = oferta['periodoDiaOferta']; 
9578            oferta['titulo'] = 'Turma ' + turmas[indexPeriodo++] + ' - ' + (periodos[ultimoPeriodo] || ''); 
9579            ofertasEtapa.push(oferta); 
9580          } 
9581        }); 
9582 
9583        return ofertasEtapa; 
9584      } 
9585 
9586      function formatarDataEmed(data, etapa, isDataFim) { 
9587 
9588        try { 
9589 
9590          var splitdata = data.split('/'); 
9591          var meses = ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro']; 
9592          var mes = meses[parseInt(splitdata[1]) - 1]; 
9593 
9594          var ano = splitdata[2]; 
9595 
9596          if (isDataFim) { 
9597            ano = parseInt(splitdata[2]); 
9598          } 
9599 
9600          return mes + '/' + ano; 
9601        } catch (err) { 
9602          return data; 
9603        } 
9604 
9605      } 
9606 
9607      //EMED Mobile 
9608      function sliderOfertasEmed() { 
9609 
9610        var tamScreen = $(window).width(); 
9611        if (tamScreen < 1024) { 
9612          $('.ssp-slick-ofertas-emed').slick({ 
9613            slidesToShow: 1, 
9614            slidesToScroll: 1, 
9615            dots: false, 
9616            infinite: false, 
9617            adaptiveHeight: true, 
9618            prevArrow: '<button class="btn slick-prev" type="button"><i class="fal fa-chevron-left"></i><span class="sr-only">Anterior</span></button>', 
9619            nextArrow: '<button class="btn slick-next" type="button"><i class="fal fa-chevron-right"></i><span class="sr-only">Próximo</span></button>', 
9620            responsive: [ 
9621 
9622              { 
9623                breakpoint: 1200, 
9624                settings: { 
9625                  slidesToShow: 1, 
9626                  slidesToScroll: 1, 
9627                  prevArrow: '<button class="btn slick-prev ssp-slider-control-mobile__item-prev"><i class="fal fa-chevron-left mr-1"></i><span>Anterior</span></button>', 
9628                  nextArrow: '<button class="btn slick-next ssp-slider-control-mobile__item-next"><span>Próximo</span><i class="fal fa-chevron-right ml-1"></i></button>', 
9629 
9630                } 
9631              }, 
9632              { 
9633                breakpoint: 768, 
9634                settings: { 
9635                  slidesToShow: 1, 
9636                  slidesToScroll: 1, 
9637                  prevArrow: '<button class="btn slick-prev ssp-slider-control-mobile__item-prev"><i class="fal fa-chevron-left mr-1"></i><span>Anterior</span></button>', 
9638                  nextArrow: '<button class="btn slick-next ssp-slider-control-mobile__item-next"><span>Próximo</span><i class="fal fa-chevron-right ml-1"></i></button>', 
9639                } 
9640              } 
9641 
9642            ] 
9643 
9644          }); 
9645 
9646        } 
9647 
9648      } 
9649 
9650      function addItemBackpack(codOferta, originElemSelector, codUnidade, dataEfetiva) { 
9651 
9652        let backpackPostRequest = {}; 
9653        backpackPostRequest.codOferta = codOferta; 
9654        backpackPostRequest.codUnidade = codUnidade; 
9655        backpackPostRequest.dt_efetiva = dataEfetiva; 
9656 
9657 
9658        mochila.requestAccess(function (backpackPostRequest) { 
9659 
9660          let urlMochila = '/o/senac-backpack-services/backpack'; 
9661 
9662          if (getCookie("codMochila") != null) { 
9663            backpackPostRequest.codMochila = getCookie("codMochila"); 
9664            urlMochila = '/o/senac-backpack-services/updateBackpack'; 
9665          } 
9666          $.ajax({ 
9667            type: 'POST', 
9668            url: urlMochila, 
9669            headers: { 
9670              "Content-Type": "application/json" 
9671            }, 
9672            beforeSend: function (xhr) { 
9673              xhr.setRequestHeader("Authorization", "Bearer " + getCookie("tokenMochila")); 
9674              loadingSubmitButton(originElemSelector); 
9675              $(originElemSelector + ' .loading-icon-button').css('height', 'unset'); 
9676              if ($(window).width() < 1024) { 
9677                $(originElemSelector + ' .loading-icon-button span').css('margin-left', '10%'); 
9678              } 
9679            }, 
9680            data: JSON.stringify(backpackPostRequest) 
9681          }).done(function (data) { 
9682 
9683            let domain = ''; 
9684            if (getAmbiente() == 'hom' || getAmbiente() == 'prod') 
9685              domain = '.sp.senac.br'; 
9686 
9687            writeCookie( 
9688              'codMochila', 
9689              (getCookie("codMochila") == null) ? data.backpackCode : JSON.parse(data).backpackCode, 
9690              24, 
9691              domain 
9692            ); 
9693            addItemSuccessMochila(); 
9694 
9695          }).fail(function (xhr, status, error) { 
9696 
9697            $('#modal-backpack-error').removeClass('d-none'); 
9698 
9699          }).always(function () { 
9700 
9701            cleanLoadingSubmitButton( 
9702              originElemSelector, 
9703              originElemSelector.indexOf('backpack') > 0 ? 'OK, desejo comprar' : 'COMPRAR' 
9704            ); 
9705            $('[id^="modalAntesCompra_"]').each(function (index, modal) { 
9706              modal.style.display = "none"; 
9707            }); 
9708 
9709          }); 
9710 
9711        }, backpackPostRequest); 
9712 
9713      } 
9714 
9715      function componentBuyConfirmation(codigoUnidade, oferta, dataEfetiva) { 
9716 
9717        var comp = null; 
9718 
9719        if ((oferta.destinoCompra !== null) && oferta.destinoCompra == "2" && !excecaoCursoGratuito(oferta)) { 
9720 
9721          comp = $("<button>") 
9722            .addClass("btn btn-lg btn-success w-100 mt-3 btn-backpack") 
9723            .attr("offerCode", oferta.codigoOferta) 
9724            .attr("unitCode", codigoUnidade) 
9725            .attr("effectiveDate", dataEfetiva) 
9726            .text("OK, desejo comprar"); 
9727 
9728        } else { 
9729          var textoBotaoConfirmacao = "OK, desejo comprar"; 
9730 
9731          if (excecaoCursoGratuito(oferta)) 
9732            textoBotaoConfirmacao = "Ok, desejo fazer a matrícula"; 
9733 
9734          comp = $("<a>") 
9735            .addClass("btn btn-lg btn-success w-100 mt-3") 
9736            .text(textoBotaoConfirmacao) 
9737            .attr("href", linkBotaoCompra.replace('\{codigoUnidade\}', codigoUnidade).replace('\{codigoOferta\}', oferta.codigoOferta)) 
9738            .attr("target", "_blank"); 
9739        } 
9740 
9741        comp.attr('id', 'btnCompraLocal_' + oferta.indice); 
9742 
9743        return comp[0].outerHTML; 
9744 
9745      } 
9746 
9747      function getUnidadesSelecionadasRI() { 
9748        var unidadesRI = []; 
9749 
9750        try { 
9751 
9752          $('#select-unidades-registro-interesse').find('select').each((i, select) => { 
9753            var unidadeSel = select.selectedOptions[0].innerText; 
9754            if (!unidadesRI.includes(unidadeSel)) unidadesRI.push(unidadeSel); 
9755          }); 
9756 
9757          var unidadesExt = unidadesRI.join(', '); 
9758 
9759          const lastIndex = unidadesExt.lastIndexOf(','); 
9760 
9761          if (lastIndex > 0) unidadesExt = unidadesExt.substring(0, lastIndex) + ' ou ' + unidadesExt.substring(lastIndex + 1); 
9762 
9763          return { 
9764            'unidadesPrefix': (unidadesRI.length > 1 ? ', nas unidades ' : (unidadesRI.length == 1 ? ', na unidade ' : '')), 
9765            'unidades': unidadesExt 
9766          }; 
9767 
9768        } catch (err) { 
9769 
9770          return { 
9771            'unidadesPrefix': '', 
9772            'unidades': '' 
9773          }; 
9774 
9775        } 
9776 
9777      } 
9778 
9779 
9780 
9781 
9782      function addItemSuccessMochila() { 
9783 
9784        mochila.check(); 
9785        $('#modal-backpack-success__nome-curso').html($('.ssp-card-detalhe-curso__title').text()); 
9786        $('#modal-backpack-success').removeClass('d-none'); 
9787 
9788      } 
9789 
9790      $(document).on('click', '.btn-backpack', function (e) { 
9791 
9792        addItemBackpack(event.target.getAttribute("offerCode"), '.btn-backpack', event.target.getAttribute("unitCode"), event.target.getAttribute("effectiveDate")); 
9793 
9794      }); 
9795 
9796      $('#btn-voltar-modal-backpack-error').click(function () { 
9797        $('#modal-backpack-error').addClass('d-none'); 
9798      }); 
9799 
9800      $('#btn-voltar-modal-backpack-error').click(function () { 
9801        $('#modal-backpack-error').addClass('d-none'); 
9802      }); 
9803 
9804      $('.btn-mochila-continuar-site-success, .modal-btn-close').click(function () { 
9805        $('#modal-backpack-success').addClass('d-none'); 
9806      }); 
9807 
9808      $('.btn-mochila-finalizar-compra-success').click(function () { 
9809        // Montar object push - google tag manager - 6 
9810        sendEventEcommerce("begin_checkout", ofertaSelecionada); 
9811 
9812        window.location.href = mochila.getServiceUrl(); 
9813 
9814        //$('#modal-backpack-success').addClass('d-none'); 
9815        //$('[id^="myModal_"]').each((i,modal)=>modal.style.display = "none"); 
9816      }); 
9817 
9818      function closeModalFormAprendizagem() { 
9819        let modal = document.querySelector('#modal-form'); 
9820        modal.close(); 
9821      } 
9822 
9823 
9824      function openModalFormAprendizagem(ev) { 
9825 
9826        const $container = document.getElementById('modal-form'); 
9827        if (!$container || !$container.nodeName == 'DIALOG') return; 
9828 
9829        const ofertaSel = ofertasMap.get(ev.target.getAttribute('data-codigo-oferta')); 
9830 
9831        function getUnidadeSelecionada() { 
9832          const categoryUnidade = $('#unidades-ofertas').val().split('@')[0]; 
9833          return objsTela.unidades.find(u => u.categoryId == categoryUnidade) || {}; 
9834        } 
9835 
9836        async function request(url, { method = 'GET', headers = {}, body, beforeSend } = {}) { 
9837          const init = { method, headers, body, credentials: 'same-origin' }; 
9838          const resp = await fetch(url, init); 
9839          if (!resp.ok) throw new Error('Erro status ' + resp.status); 
9840          return resp.text(); 
9841        } 
9842 
9843        async function loadHTMLForm() { 
9844 
9845          if ($container.querySelectorAll('form').length) { 
9846            FormControl.changeCursoInfo(ofertaSel, getUnidadeSelecionada()); 
9847            return; 
9848          } 
9849 
9850          const url = Liferay.ThemeDisplay.getPortalURL().concat('/documents/d/global/html-formulario-aprendizagem'); 
9851 
9852          const formHTML = await request(url); 
9853 
9854          $container.innerHTML += formHTML; 
9855 
9856          let script = document.createElement('script'); 
9857          script.src = '/documents/d/global/js-aprendizagem-formulario'; 
9858          script.async = true; 
9859 
9860          script.onload = () => { 
9861            console.log(`script loaded successfully.`); 
9862            init(ofertaSel, getUnidadeSelecionada()); 
9863          }; 
9864 
9865          script.onerror = () => { 
9866            console.error(`Error loading script`); 
9867          }; 
9868 
9869          document.head.appendChild(script); 
9870 
9871        } 
9872 
9873        loadHTMLForm(); 
9874 
9875        $container.showModal(); 
9876 
9877      } 
9878 
9879      function addEventBolsa() { 
9880        // Mostra o preco 
9881        const btnShowPrices = document.querySelectorAll('.btn-show-price') 
9882 
9883        btnShowPrices.forEach(btnShowPrice => btnShowPrice.addEventListener('click', togglePriceCard)) 
9884 
9885        if (!$('#chkBolsa').prop('checked')) 
9886          togglePriceCard() 
9887      } 
9888 
9889      function togglePriceCard(selector) { 
9890        if (selector instanceof PointerEvent) return 
9891 
9892        if (!selector) selector = '' 
9893        else selector = '.' + selector 
9894 
9895        const btnPrices = document.querySelectorAll('.show-price-content' + selector) 
9896        const contentPrices = document.querySelectorAll('.content-valores-descontos' + selector) 
9897        const contentBtnBolsas = document.querySelectorAll('.content-btn-bolsa' + selector) 
9898 
9899        btnPrices.forEach(btnPrice => btnPrice.classList.toggle('hide')) 
9900        contentBtnBolsas.forEach(contentBtnBolsa => contentBtnBolsa.classList.toggle('modifier-content-show')) 
9901        contentPrices.forEach(contentPrice => contentPrice.classList.toggle('hide-price')) 
9902      } 
9903 
9904      function getRegiaoName(key) { 
9905        switch (key) { 
9906          case "MP": 
9907            return "Unidades mais próximas de você"; 
9908          case "C": 
9909            return "Capital"; 
9910          case "I": 
9911            return "Interior"; 
9912          case "GS": 
9913            return "Grande São Paulo e Litoral"; 
9914          default: 
9915            return "Sem Região"; 
9916        } 
9917      } 
9918 
9919      function criarOptionUnidadesPorRegiao(unidades) { 
9920        let regioes = {} 
9921        let unidadeFounded 
9922 
9923        // As duas primeiras devem ser unidades ate 20km 
9924        const unidadesProximas = PortalUtils.Geolocation.getUnidadesProximas() 
9925          .filter(u => u.distanciaAteUnidade <= 20000) 
9926          .map(uProx => unidades.find(u => u.friendlyURL == uProx.friendlyURL)) 
9927          .filter(Boolean) 
9928          .slice(0, 2); 
9929 
9930        if (unidadesProximas.length) { 
9931          const urls = Array.from(unidadesProximas.map(u => u.friendlyURL)); 
9932          unidades.filter(un => urls.includes(un.friendlyURL)) 
9933            .forEach(un => un.codRegiaoUnidade = 'MP'); 
9934        } 
9935 
9936        unidades.forEach(unidade => { 
9937          if (!regioes[unidade.codRegiaoUnidade || 'N']) 
9938            regioes[unidade.codRegiaoUnidade || 'N'] = [] 
9939 
9940          regioes[unidade.codRegiaoUnidade || 'N'].push(unidade) 
9941        }) 
9942 
9943        Array.from(['MP', 'C', 'I', 'GS', 'N']) 
9944          .filter(key => Object.keys(regioes).includes(key)) 
9945          .forEach(key => { 
9946            const unidadesDaRegiao = regioes[key] 
9947 
9948            const optionDisabled = $('<option>') 
9949            optionDisabled.attr('label', getRegiaoName(key)) 
9950            optionDisabled.text(getRegiaoName(key)); 
9951            optionDisabled.attr('disabled', true) 
9952            optionDisabled.addClass('ssp-option-group') 
9953            $('#unidades-ofertas').append(optionDisabled) 
9954 
9955            $.each(unidadesDaRegiao, function (k, unidade) { 
9956              if ($('#unidades-ofertas').find('[value="' + unidade['categoryId'] + '"]').length == 0) { 
9957                var option = $('<option>'); 
9958                option.val(unidade['categoryId'] + "@" + unidade['codigoUnidade']); 
9959                option.text(unidade['nome']); 
9960                option.attr('data-unidade-friendly-url', unidade.friendlyURL) 
9961                option.addClass('ssp-option') 
9962 
9963                $('#unidades-ofertas').append(option); 
9964 
9965                unidadeFounded = !unidadeFounded && getURLData().includes('/' + unidade.friendlyURL + '/') ? unidade : unidadeFounded 
9966              } 
9967            }) 
9968          }) 
9969 
9970        return unidadeFounded 
9971      } 
9972 
9973      function getURLData() { 
9974        return URLGeral.replace(HOST, '') 
9975      } 
9976 
9977      /** 
9978      * Copia um objeto JSON 
9979      */ 
9980      function cloneObj(original) { 
9981        return JSON.parse(JSON.stringify(original)); 
9982      } 
9983 
9984      function getUrlConsultaBolsa(oferta) { 
9985 
9986        let url = ''; 
9987        if (isAmbienteTeste()) { 
9988          if (oferta.destinoBolsa == '1') { 
9989            url = 'https://hwse.sp.senac.br/rest/wss/cursos/bolsa/v1/?COD_EVENTO=' + oferta.codigoOferta 
9990          } else { 
9991            url = 'https://hom-wse-bolsas.sp.senac.br/api/cursos/bolsa/v1/' + oferta.codigoOferta; 
9992          } 
9993        } else { 
9994          if (oferta.destinoBolsa == '1') { 
9995            url = 'https://wse.sp.senac.br/rest/wss/cursos/bolsa/v1/?COD_EVENTO=' + oferta.codigoOferta 
9996          } else { 
9997            url = 'https://wse-bolsas.sp.senac.br/api/cursos/bolsa/v1/' + oferta.codigoOferta; 
9998          } 
9999 
10000        } 
10001 
10002        return url; 
10003      } 
10004 
10005  function execCompraEmed(oferta){ 
10006 
10007      let linkInscricaoEmed = '', linkInscricaoEmedHml = ''; 
10008      if(oferta.etapa == '0010'){ 
10009        linkInscricaoEmed = 'https://autenticacao.sp.senac.br/auth/realms/institucional/protocol/openid-connect/auth?response_type=code&client_id=inscricao-educacional&redirect_uri=https%3A%2F%2Finscricao-educacional.sp.senac.br%2Fsala-espera%2F%3Foferta%3D{codOferta}&scope=openid&grant_type=authorization_code'; 
10010        linkInscricaoEmedHml = 'https://autenticacao.sp.senac.br/auth/realms/institucional/protocol/openid-connect/auth?response_type=code&client_id=inscricao-educacional&redirect_uri=https%3A%2F%2Finscricao-educacional.sp.senac.br%2Fsala-espera%2F%3Foferta%3D{codOferta}&scope=openid&grant_type=authorization_code'; 
10011      } 
10012 
10013        var ambTeste = ['localhost', 'hom', 'dev']; 
10014        var link = linkInscricaoEmed; 
10015        /* 
10016        $.each(ambTeste, function(i, a){ 
10017          if(location.hostname.indexOf(a) >= 0){ 
10018            link = linkInscricaoEmedHml; 
10019            return false; 
10020          } 
10021        }); 
10022        */ 
10023 
10024        // Montar object push - google tag manager - 3 
10025        ofertaSelecionada = itensEcommerce.get(oferta.codigoOferta) 
10026        sendEventEcommerce("select_item", ofertaSelecionada); 
10027        sendEventEcommerce("view_item", ofertaSelecionada); 
10028        sendEventEcommerce("add_to_cart", ofertaSelecionada); 
10029        sendEventEcommerce("begin_checkout", ofertaSelecionada); 
10030 
10031        var urlCompra = link.replace('\{codOferta\}', oferta.codigoOferta); 
10032        window.open(urlCompra, '_blank'); 
10033      } 
10034 
10035      function formataDataComBarra(dataInvertidaComTraco) { 
10036        return dataInvertidaComTraco.split('-').reverse().join('/'); 
10037      } 
10038 
10039 
10040      let ctrlPressed = false; 
10041      $(window).keydown(function (ev) { 
10042        if (ev.which == 17) { 
10043          ctrlPressed = true; 
10044          return false; 
10045        } 
10046        if (ev.which == 82 && ctrlPressed) { 
10047          return false; 
10048        } 
10049        return (ev.which != 116); // F5  
10050      }).keyup(function (ev) { 
10051        if (ev.which == 17) { 
10052          ctrlPressed = false; 
10053        } 
10054        return true; 
10055      }); 
10056 
10057 
10058    </script> 
10059 
10060    </#if>