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