Publicador de Conteúdos e Mídias

Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> themeDisplay.getURLCurrent()?split("/")[2]  [in template "20102#20129#23798944" at line 349, column 41]

----
Tip: It's the final [] step that caused this error, not those before it.
----
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: #assign friendlyURLTipoCurso = themeD...  [in template "20102#20129#23798944" in function "getTipoCursoFirendlyUrl" at line 349, column 9]
----
1<#-- 
2Name: Unidade - Tipos de Curso 
3Type: Asset Publisher Widget Template 
4Path: ROOT/assets/unidades-tipos-de-curso/widget-templates/unidades_tipos_de_curso.html 
5--> 
6<#assign prefix = "ssp" /> 
7<#assign companyId = themeDisplay.getCompanyId() /> 
8<#assign siteGroupId = themeDisplay.getSiteGroupId() /> 
9<#assign friendlyUrlTipoCurso = getTipoCursoFirendlyUrl() /> 
10<#assign friendlyUrlUnidade = getUnidadeFirendlyUrl() /> 
11 
12<#assign categoryId = 0 /> 
13 
14<#if friendlyUrlTipoCurso?contains("livre") ||  friendlyUrlTipoCurso?contains("extensao")> 
15    
16    <#assign friendlyUrlTemaFirst = getTemaFirstLevelFriendly() /> 
17    <#assign friendlyUrlTemaSecond = getTemaSecondLevelFriendly() /> 
18    <#assign friendlyUrlTemaThird = getTemaThirdLevelFriendly() /> 
19     
20    <#if friendlyUrlTipoCurso?contains("livre") >  
21        <#assign tipoCurso = "Livre" /> 
22    <#else> 
23        <#assign tipoCurso = "Extensão" /> 
24    </#if>   
25<#-- cursos tecnicos nao tem 2o e 3o nivel de temas conforme prototipo GCR --> 
26<#elseif  friendlyUrlTipoCurso?contains("tecnico")> 
27    <#assign tipoCurso = "Técnico" /> 
28    <#assign friendlyUrlTemaFirst = getTemaFirstLevelFriendly() /> 
29    <#assign friendlyUrlTemaSecond = "#erro#" /> 
30    <#assign friendlyUrlTemaThird = "#erro#" /> 
31 
32<#else>  
33</#if> 
34 
35<#assign groupService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService") /> 
36<#assign groupObj = groupService.fetchFriendlyURLGroup(companyId, "/"+friendlyUrlUnidade) /> 
37<#assign groupIdUnidade = groupObj.getGroupId() /> 
38 
39        <#assign journal = getJournalArticle(groupIdUnidade) > 
40        <#if !journal?contains("#erro#")> 
41             <#assign groupIdUnidade = groupId /> 
42             <#assign journalArticleUnidade = journal> 
43            <#assign document = saxReaderUtil.read(journalArticleUnidade.getContent()) /> 
44            <#assign rootElement = document.getRootElement() /> 
45             
46                <#-- Get fields --> 
47 
48                     <#--  Nome da unidade  --> 
49                    <#assign xPathSelector_nomeUnidadeParaBreadCrumb = saxReaderUtil.createXPath("dynamic-element[@field-reference='nomeUnidade']")> 
50                    <#assign nomeUnidadeParaBreadCrumb = xPathSelector_nomeUnidadeParaBreadCrumb.selectSingleNode(rootElement).getStringValue()> 
51 
52                    <#--  Nome da unidade  --> 
53                    <#assign xPathSelector_nome = saxReaderUtil.createXPath("dynamic-element[@field-reference='nomeUsualUnidade']")> 
54                    <#assign nomeUnidade = xPathSelector_nome.selectSingleNode(rootElement).getStringValue()> 
55 
56                    <#assign xPathSelector_codigoUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='codigoUnidade']")> 
57                    <#assign codigoUnidade = xPathSelector_codigoUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
58                     
59                        <#if nomeUnidade?? > 
60                            <#assign nome = nomeUnidade > 
61                            <#else> 
62                            <#assign nome = "" > 
63                        </#if> 
64 
65                <#--  Endereço 1  --> 
66 
67                        <#--  Rua  --> 
68                        <#assign xPathSelector_enderecoUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='enderecoUnidade']")> 
69                        <#assign enderecoUnidade = xPathSelector_enderecoUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
70 
71                            <#if enderecoUnidade?? > 
72                                <#assign endereco = enderecoUnidade > 
73                                <#else> 
74                                <#assign endereco = "" > 
75                            </#if> 
76 
77                        <#--  número  --> 
78                        <#assign xPathSelector_numEnderecoUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='numEnderecoUnidade']")> 
79                        <#assign numeroUnidade = xPathSelector_numEnderecoUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
80 
81                            <#if numeroUnidade?? > 
82                                <#assign numero = numeroUnidade > 
83                                <#else> 
84                                <#assign numero = "" > 
85                            </#if> 
86 
87                        <#--  Bairro  --> 
88                        <#assign xPathSelector_bairroUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='bairroUnidade']")> 
89                        <#assign bairroUnidade = xPathSelector_bairroUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
90 
91                            <#if bairroUnidade?? > 
92                                <#assign bairro = bairroUnidade > 
93                                <#else> 
94                                <#assign bairro = "" > 
95                            </#if> 
96                         
97                        <#--  Cidade  --> 
98                        <#assign xPathSelector_cidadeUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='cidadeUnidade']")> 
99                        <#assign cidadeUnidade = xPathSelector_cidadeUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
100 
101                            <#if cidadeUnidade?? > 
102                                <#assign cidade = cidadeUnidade > 
103                                <#else> 
104                                <#assign cidade = "" > 
105                            </#if> 
106 
107                        <#--  Cep  --> 
108                        <#assign xPathSelector_cepUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='cepUnidade']")> 
109                        <#assign cepUnidade = xPathSelector_cepUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
110 
111                            <#if cepUnidade?? > 
112                                <#assign cep = cepUnidade > 
113                                <#else> 
114                                <#assign cep = "" > 
115                            </#if>  
116 
117            <#-- Fim endereço 1 -->   
118 
119            <#--  Endereço 2  --> 
120 
121                        <#--  Rua  --> 
122                        <#assign xPathSelector_enderecoUnidade2 = saxReaderUtil.createXPath("dynamic-element[@field-reference='enderecoUnidade2']")> 
123                        <#assign enderecoUnidade2 = xPathSelector_enderecoUnidade2.selectSingleNode(rootElement).getStringValue()?trim> 
124 
125                            <#if enderecoUnidade2?? > 
126                                <#assign endereco2 = enderecoUnidade2 > 
127                                <#else> 
128                                <#assign endereco2 = "" > 
129                            </#if> 
130 
131                        <#--  número  --> 
132                        <#assign xPathSelector_numeroUnidade2 = saxReaderUtil.createXPath("dynamic-element[@field-reference='numeroUnidade2']")> 
133                        <#assign numeroUnidade2 = xPathSelector_numeroUnidade2.selectSingleNode(rootElement).getStringValue()?trim> 
134 
135                            <#if numeroUnidade2?? > 
136                                <#assign numero2 = numeroUnidade2 > 
137                                <#else> 
138                                <#assign numero2 = "" > 
139                            </#if> 
140 
141                        <#--  Bairro  --> 
142                        <#assign xPathSelector_bairroUnidade2 = saxReaderUtil.createXPath("dynamic-element[@field-reference='bairroUnidade2']")> 
143                        <#assign bairroUnidade2 = xPathSelector_bairroUnidade2.selectSingleNode(rootElement).getStringValue()?trim> 
144 
145                            <#if bairroUnidade2?? > 
146                                <#assign bairro2 = bairroUnidade2 > 
147                                <#else> 
148                                <#assign bairro2 = "" > 
149                            </#if> 
150                         
151                        <#--  Cidade  --> 
152                        <#assign xPathSelector_cidadeUnidade2 = saxReaderUtil.createXPath("dynamic-element[@field-reference='cidadeUnidade2']")> 
153                        <#assign cidadeUnidade2 = xPathSelector_cidadeUnidade2.selectSingleNode(rootElement).getStringValue()?trim> 
154 
155                            <#if cidadeUnidade2?? > 
156                                <#assign cidade2 = cidadeUnidade2 > 
157                                <#else> 
158                                <#assign cidade2 = "" > 
159                            </#if> 
160 
161                        <#--  Cep  --> 
162                        <#assign xPathSelector_cepUnidade2 = saxReaderUtil.createXPath("dynamic-element[@field-reference='cepUnidade2']")> 
163                        <#assign cepUnidade2 = xPathSelector_cepUnidade2.selectSingleNode(rootElement).getStringValue()?trim> 
164 
165                            <#if cepUnidade2?? > 
166                                <#assign cep2 = cepUnidade2 > 
167                                <#else> 
168                                <#assign cep2 = "" > 
169                            </#if>  
170 
171            <#-- Fim endereço 2 --> 
172 
173 
174 
175                        <#--  Horário  --> 
176                        <#assign xPathSelector_horarioUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='horarioUnidade']")> 
177                        <#assign horarioUnidade = xPathSelector_horarioUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
178 
179                            <#if horarioUnidade?? > 
180                                <#assign horario = horarioUnidade > 
181                                <#else> 
182                                <#assign horario = "" > 
183                            </#if> 
184 
185                        <#--  DDD  --> 
186                        <#assign xPathSelector_dddUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='dddTelefoneUnidade']")> 
187                        <#assign dddUnidade = xPathSelector_dddUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
188 
189                            <#if dddUnidade?? > 
190                                <#assign ddd = dddUnidade > 
191                                <#else> 
192                                <#assign ddd = "" > 
193                            </#if> 
194 
195                        <#--  telefone  --> 
196                        <#assign xPathSelector_telefoneUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='telefoneUnidade']")> 
197                        <#assign telefoneUnidade = xPathSelector_telefoneUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
198 
199                            <#if telefoneUnidade?? > 
200                                <#assign telefone = telefoneUnidade > 
201                                <#else> 
202                                <#assign telefone = "" > 
203                            </#if>                         
204 
205                        <#--  UF  --> 
206                        <#assign xPathSelector_ufUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='ufUnidade']")> 
207                        <#assign ufUnidade = xPathSelector_ufUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
208 
209                            <#if ufUnidade?? > 
210                                <#assign UF = ufUnidade > 
211                                <#else> 
212                                <#assign UF = "" > 
213                            </#if> 
214 
215                        <#-- Estacionamento --> 
216                        <#assign xPathSelector_estacionamento = saxReaderUtil.createXPath("dynamic-element[@field-reference='estacionamentoUnidade']")> 
217                        <#assign estacionamentoUnidade = xPathSelector_estacionamento.selectSingleNode(rootElement).getStringValue()>  
218 
219                            <#if estacionamentoUnidade?? > 
220                                <#assign estacionamento = estacionamentoUnidade > 
221                                <#else> 
222                                <#assign estacionamento = "" > 
223                            </#if> 
224 
225                         <#-- Estacionamento Unidade 2 --> 
226                        <#assign xPathSelector_estacionamento2 = saxReaderUtil.createXPath("dynamic-element[@field-reference='estacionamentoUnidade2']")> 
227                        <#assign estacionamentoUnidade2 = xPathSelector_estacionamento2.selectSingleNode(rootElement).getStringValue()>  
228 
229                            <#if estacionamentoUnidade2?? > 
230                                <#assign estacionamento2 = estacionamentoUnidade2 > 
231                                <#else> 
232                                <#assign estacionamento2 = "" > 
233                            </#if>          
234 
235                        <#--  Facebook  --> 
236                        <#assign xPathSelector_facebookUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='facebookUnidade']")> 
237                        <#assign facebookUnidade = xPathSelector_facebookUnidade.selectSingleNode(rootElement).getStringValue()> 
238 
239                            <#if facebookUnidade?? > 
240                                <#assign facebook = facebookUnidade > 
241                                <#else> 
242                                <#assign facebook = "" > 
243                            </#if> 
244 
245                        <#--  Instagram  --> 
246                        <#assign xPathSelector_instagramUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='instagramUnidade']")> 
247                        <#assign instagramUnidade = xPathSelector_instagramUnidade.selectSingleNode(rootElement).getStringValue()> 
248 
249                            <#if instagramUnidade?? > 
250                                <#assign instagram = instagramUnidade > 
251                                <#else> 
252                                <#assign instagram = "" > 
253                            </#if> 
254 
255                        <#--  Maps  --> 
256                        <#assign xPathSelector_googlemapsUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='googlemapsUnidade']")> 
257                        <#assign googlemapsUnidade = xPathSelector_googlemapsUnidade.selectSingleNode(rootElement).getStringValue()?trim> 
258 
259                            <#if googlemapsUnidade?? > 
260                                <#assign googlemaps = googlemapsUnidade > 
261                                <#else> 
262                                <#assign googlemaps = "" > 
263                            </#if> 
264 
265                        <#assign  hasMaps = (googlemaps?trim?length > 0) > 
266 
267                         
268 
269                        <#--  Waze  --> 
270                        <#assign xPathSelector_wazeUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='wazeUnidade']")> 
271                        <#assign wazeUnidade = xPathSelector_wazeUnidade.selectSingleNode(rootElement).getStringValue()> 
272 
273                            <#if wazeUnidade?? > 
274                                <#assign waze = wazeUnidade > 
275                                <#else> 
276                                <#assign waze = "" > 
277                            </#if> 
278                                 
279                    <#--  Imagem  --> 
280 
281                    <#assign imagem = getImagemURL('imagemUnidade')> 
282                    <#assign imagem2 = getImagemURL('imagemUnidade2')>   
283                     
284                    <#--  Estação próxima  -->                     
285					<#assign xPathSelector_estacaoProxima = saxReaderUtil.createXPath("dynamic-element[@field-reference='estacaoProxima']")> 
286		 
287					<#assign estacaoProxima = xPathSelector_estacaoProxima.selectSingleNode(rootElement).getStringValue()> 
288		 
289					<#assign  hasEstacaoProxima = (estacaoProxima?trim?length > 0) > 
290                     
291            </#if> 
292 
293    <#function getImagemURL fieldName> 
294 
295        <#assign xPathSelector = saxReaderUtil.createXPath("dynamic-element[@field-reference='${fieldName}']")> 
296     
297        <#assign imagemStr = xPathSelector.selectSingleNode(rootElement).getStringValue()> 
298     
299        <#if imagemStr?contains("classPK") > 
300            <#assign 
301                imagemJson = jsonFactoryUtil.createJSONObject(imagemStr) 
302                imagemId = getterUtil.getInteger(imagemJson.get('fileEntryId')) 
303                dl = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService") 
304                dlURLHelper = serviceLocator.findService("com.liferay.document.library.util.DLURLHelper") 
305                fileEntry = dl.getFileEntry(imagemId) 
306                imagemURL = dlURLHelper.getImagePreviewURL(fileEntry, themeDisplay) 
307                imagem = { 
308                    "alt" : imagemJson.get('alt'), 
309                    "url" : imagemURL 
310                }  
311            /> 
312            <#return imagem> 
313        </#if> 
314         
315        <#return {"alt":"", "url":""}> 
316     
317    </#function> 
318 
319 <#function getJournalArticle groupId> 
320    <#assign journalArticleService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
321    <#assign friendlyURL = getUnidadeFirendlyUrl()> 
322    
323    <#attempt> 
324   
325      <#if !friendlyURL?contains("fragment_collections") > 
326         
327        <#return journalArticleService.getArticleByUrlTitle(groupId,friendlyURL)> 
328         
329      </#if> 
330       
331    <#recover> 
332         
333      <#return '#erro#'> 
334    </#attempt> 
335 </#function> 
336 
337 <#function getUnidadeFirendlyUrl > 
338     <#assign friendly = themeDisplay.getURLCurrent()?split("/")[1]?split("?")?first /> 
339     <#if friendly?contains("web") > 
340    	 <#assign friendly = themeDisplay.getURLCurrent()?split("/")[3]?split("?")?first> 
341    </#if> 
342     
343    <#return friendly /> 
344     
345 </#function> 
346      
347 <#function getTipoCursoFirendlyUrl > 
348     
349 	<#assign friendlyURLTipoCurso = themeDisplay.getURLCurrent()?split("/")[2]?split("?")?first /> 
350    <#if friendlyURLTipoCurso?contains("guest") > 
351        <#assign friendlyURLTipoCurso = themeDisplay.getURLCurrent()?split("/")[4]?split("?")?first> 
352  </#if> 
353         
354    <#return friendlyURLTipoCurso /> 
355     
356 </#function> 
357      
358 <#function getTemaFirstLevelFriendly > 
359     <#attempt> 
360        <#assign friendly = themeDisplay.getURLCurrent()?split("/")[1]?split("?")?first /> 
361         <#if !friendly?contains("web") > 
362             <#if themeDisplay.getURLCurrent()?split("/")?size gt 3 > 
363                <#assign friendly = themeDisplay.getURLCurrent()?split("/")[3]?split("?")?first /> 
364            <#else> 
365                <#assign friendly = "" /> 
366            </#if>   
367                 
368        <#else> 
369            <#if themeDisplay.getURLCurrent()?split("/")?size gt 5 > 
370                <#assign friendly = themeDisplay.getURLCurrent()?split("/")[5]?split("?")?first> 
371             <#else> 
372                <#assign friendly = "" /> 
373            </#if> 
374         </#if> 
375              
376        <#return friendly /> 
377    <#recover> 
378        <#return '#erro#'> 
379    </#attempt> 
380     
381</#function>  
382 
383 <#function getTemaSecondLevelFriendly > 
384     <#attempt> 
385         <#assign friendly = themeDisplay.getURLCurrent()?split("/")[1]?split("?")?first /> 
386         
387         <#if !friendly?contains("web") > 
388             <#if themeDisplay.getURLCurrent()?split("/")?size gt 4 > 
389                <#assign friendly = themeDisplay.getURLCurrent()?split("/")[4]?split("?")?first /> 
390             <#else> 
391                <#assign friendly = "" /> 
392            </#if>       
393        <#else> 
394             <#if themeDisplay.getURLCurrent()?split("/")?size gt 6 > 
395                 <#assign friendly = themeDisplay.getURLCurrent()?split("/")[6]?split("?")?first> 
396            <#else> 
397                <#assign friendly = "" /> 
398            </#if>    
399        </#if> 
400     
401        <#return friendly /> 
402    <#recover> 
403        <#return '#erro#'> 
404    </#attempt> 
405     
406</#function>  
407  
408 <#function getTemaThirdLevelFriendly > 
409     <#attempt> 
410         <#assign friendly = themeDisplay.getURLCurrent()?split("/")[1]?split("?")?first /> 
411          
412         <#if !friendly?contains("web") > 
413            <#if themeDisplay.getURLCurrent()?split("/")?size gt 5 > 
414                <#assign friendly = themeDisplay.getURLCurrent()?split("/")[5]?split("?")?first /> 
415            <#else> 
416                <#assign friendly = "" /> 
417            </#if>   
418        <#else> 
419            <#if themeDisplay.getURLCurrent()?split("/")?size gt 7 > 
420                <#assign friendly = themeDisplay.getURLCurrent()?split("/")[7]?split("?")?first> 
421            <#else> 
422                <#assign friendly = "" /> 
423            </#if>   
424        </#if> 
425            <#return friendly /> 
426    <#recover> 
427        <#return '#erro#'> 
428    </#attempt> 
429     
430</#function>  
431 
432<style> 
433 
434.stop-scrolling { 
435    height: 100%; 
436    overflow: hidden; 
437
438 
439/*Header Unidade*/ 
440 
441.ssp-header-unidade__content-info-body{ 
442    padding-top:30px; 
443
444 
445.ssp-header-unidade__atendimento-container > p > a { 
446    color:white!important; 
447
448 
449.ssp-header-unidade__atendimento-container > p > a:hover { 
450    color:white!important; 
451    font-weight: normal!important; 
452
453 
454.creditoFotoMob{ 
455 
456    margin: 0 auto; 
457    background: #FFF7D6; 
458    font-family: 'Montserrat'; 
459    font-size: 14px; 
460    line-height: 1.6em; 
461    border-radius: 3px; 
462    max-width: 240px; 
463    height: auto; 
464    color: #4F596F; 
465    padding: 5px; 
466    position: relative;     
467    float: right;     
468    top: 70%; 
469    max-height: 40px; 
470    font-weight: 500; 
471    right: 15%; 
472    flex-wrap: unset; 
473
474 
475.creditoFotoMob:after{ /*Triangulo*/ 
476    content: ""; 
477    width: 0; 
478    height: 0; 
479    position: absolute; 
480    border-left: 10px solid transparent; 
481    border-right: 10px solid transparent; 
482    /*Faz seta "apontar para baixo. Definir o valor como 'top' fará ela "apontar para cima" */ 
483    /*Aqui entra a cor da "aba" do balão */ 
484    border-bottom: 10px solid #FFF7D6; 
485    top: -9px; /*localização. Experimente alterar para 'bottom'*/ 
486    left: 20%; 
487
488.tooltip-inner { 
489    max-width: 230px; 
490    padding: 0.75rem 0.75rem; 
491    color: #4F596F; 
492    text-align: center; 
493    background-color: #FFF7D6; 
494    border-radius: 0.3125rem; 
495
496.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before { 
497    top: 0; 
498    border-width: 0.4rem 0.4rem 0; 
499    border-top-color: #FFF7D6; 
500
501.ssp-header-title-bloco { 
502    font-size: 20px; 
503    font-weight: 600; 
504
505 
506.ssp:not(.liferay-instance) .ssp-header-unidade__imagem-box-imagem{ 
507    height:100%; 
508
509/*#slider { 
510    width: 80%; 
511    max-width: 500px; 
512    height: 25vw; 
513    max-height: 150px; 
514 
515    position: relative; 
516}*/ 
517 
518#slider .ssp-header-unidade__imagem-box-imagem{ 
519    opacity: 0; 
520    position: absolute; 
521    /*width: 100%; 
522    height: 100%;*/ 
523    object-fit: cover; 
524    transition: opacity 2000ms; 
525
526 
527#slider .ssp-header-unidade__imagem-box-imagem.selected {  
528    opacity: 1; 
529
530 
531@media only screen and (max-width: 1024px) { 
532     
533#slider .ssp-header-unidade__imagem-box-imagem{  
534    margin-top: -240px; 
535    height: 248px; 
536 
537
538 .ssp-header-unidade__container-info { 
539    margin-top: 240px!important; 
540
541 
542
543 
544 @media only screen and (max-width: 768px){ 
545 
546  .ssp:not(.liferay-instance) .ssp-header-unidade__imagem-box-imagem{ 
547    height:228px; 
548
549  .ssp-header-title-bloco { 
550    font-size: 14px;     
551}    
552 
553  .creditoFotoMob{ 
554    font-size: 9px!important; 
555    max-width: 161px!important; 
556    max-height: 30px!important; 
557    padding: 8.5px 9.5px!important; 
558    line-height: 0.6em!important; 
559     
560
561}  
562 
563/* Final Header Unidade*/ 
564 
565.btn-nivel-livre-ead{ 
566        background-color: #ff9057; 
567        border-color: #ff9057; 
568        box-shadow: none; 
569
570 
571    .icon-ao-vivo{ 
572    font-size:12px; 
573    margin:0 3px; 
574
575 
576 
577.subtema-ativo{ 
578 
579    color:#fcc080!important; 
580
581 
582.separador-subtemas{ 
583    width:100% !important; 
584    margin-top: -1em !important; 
585    margin-bottom: 2.25rem!important; 
586
587 
588.bg-nivel-extensao { 
589    background-color: #3ECCA6 !important; } 
590    a.bg-nivel-extensao:hover, a.bg-nivel-extensao:focus, 
591    button.bg-nivel-extensao:hover, 
592    button.bg-nivel-extensao:focus { 
593    background-color: #3ECCA6 !important; } 
594     
595 
596/*novo forma de exibir o menu de areas*/ 
597 
598.ssp:not(.liferay-instance) .ssp-section-tema__container-menu-item .tema { 
599	font-size: 15px; 
600	color: #454F63; 
601
602 
603 
604 
605.ssp:not(.liferay-instance) .ssp-section-tema__container-menu { 
606    flex-wrap: wrap; 
607
608 
609.tema i{ 
610	margin-right: 8px; 
611
612     
613 
614</style> 
615 
616<#if tipoCurso == "Livre"> 
617 
618    <style> 
619    .ssp:not(.liferay-instance) .ativo{ 
620      background-color: #FF9057!important; 
621      color:white!important; 
622      font-weight: 600!important; 
623
624     
625    .tema-ativo{ 
626      background-color: #FF9057!important; 
627      color:white!important; 
628      font-weight: 600!important; 
629
630 
631		.ssp:not(.liferay-instance) .ssp-section-tema__container-menu-item .tema:hover { 
632			background-color: #FF9057; 
633			color: white; 
634			font-weight: 600 !important; 
635
636		.subtema.btn-nivel-3.subtema-ativo { 
637			background: #FF9057!important; 
638			color: white!important; 
639			border-color: #FF9057!important; 
640
641    </style> 
642 
643<#elseif tipoCurso == "Técnico"> 
644 
645 
646    <style> 
647/* curso tecnico */    
648    .ssp:not(.liferay-instance) .ativo{ 
649      background-color: #F7BD23!important; 
650      color:white!important; 
651      font-weight: 600!important; 
652
653     
654    .tema-ativo{ 
655      background-color: #F7BD23!important; 
656      color:white!important; 
657      font-weight: 600!important; 
658
659 
660		.ssp:not(.liferay-instance) .ssp-section-tema__container-menu-item .tema:hover { 
661			background-color: #F7BD23; 
662			color: white; 
663			font-weight: 600 !important; 
664
665		.subtema.btn-nivel-3.subtema-ativo { 
666			background: #F7BD23!important; 
667			color: white!important; 
668			border-color: #F7BD23!important; 
669
670    </style> 
671 
672<#else> 
673 
674    <style> 
675/* curso extensao */ 
676    .ssp:not(.liferay-instance) .ativo{ 
677      background-color: #3ECCA6!important; 
678      color:white!important; 
679      font-weight: 600!important; 
680
681     
682    .tema-ativo{ 
683      background-color: #3ECCA6!important; 
684      color:white!important; 
685      font-weight: 600!important; 
686
687 
688		.ssp:not(.liferay-instance) .ssp-section-tema__container-menu-item .tema:hover { 
689			background-color: #3ECCA6; 
690			color: white; 
691			font-weight: 600 !important; 
692
693		.subtema.btn-nivel-3.subtema-ativo { 
694			background: #3ECCA6!important; 
695			color: white!important; 
696			border-color: #3ECCA6!important; 
697
698    </style> 
699 
700</#if> 
701 
702<style> 
703 
704/* css para link no nome da unidade */ 
705 
706.ssp-header-unidade__title a{ 
707     
708    text-decoration: none!important; 
709    font-family: Montserrat; 
710    font-size: 44px; 
711    max-width: 440px; 
712    font-weight: 600!important; 
713    line-height: 1.23; 
714    text-align: left; 
715    color: white; 
716
717 
718.ssp-section-tema__subtitle-curso-section { 
719 
720    margin-left: 40px!important; 
721 
722
723 
724.ssp-page-busca__section-resultado__ver-todos{ 
725    margin-right: 40px!important; 
726
727 
728.submenu-tema-ativo{ 
729  background-color: #34495e!important; 
730  color:white!important; 
731  font-weight: 600!important; 
732
733 
734.submenu-tema-ativo-hover{ 
735  background-color: #34495e!important; 
736  color:white!important; 
737  font-size:50px; 
738  font-weight: 600!important; 
739
740 
741.slider-curso>.slick-area__item{ 
742 
743width:100%; 
744     
745
746 
747.custom-card-curso-tema{ 
748  
749 height:288px!important;  
750   
751
752 
753@media only screen and (max-width: 768px){ 
754     
755  .ssp:not(.liferay-instance) .custom-card-curso-tema { 
756      width: 100% !important; 
757      height:auto!important; 
758
759   
760   
761  .ssp-page-busca__section-resultado__ver-todos { 
762    display:none; 
763
764   
765  .filtroInscBolsa{ 
766    display:none!important; 
767
768   
769
770   
771.ssp:not(.liferay-instance) .ssp-container__cursos-sem-slick { 
772    display: flex; 
773    justify-content: center; 
774    flex-wrap: wrap; 
775
776 
777/*Novas funcionalidades*/ 
778    #filtro-temas-nivel-3{ 
779        padding-bottom: 2em; 
780
781     
782 .switch { 
783          position: relative; 
784          display: inline-block; 
785          width: 63px; 
786          height: 31.5px; 
787          margin: 0; 
788
789         
790        .switch input {  
791          opacity: 0; 
792          width: 0; 
793          height: 0; 
794
795         
796        .slider { 
797          position: absolute; 
798          cursor: pointer; 
799          top: 0; 
800          left: 0; 
801          right: 0; 
802          bottom: 0; 
803          background-color: #454F63; 
804          -webkit-transition: .4s; 
805          transition: .4s; 
806
807         
808        .slider:before { 
809          position: absolute; 
810          content: ""; 
811          height: 21px; 
812          width: 21px; 
813          left: 7px; 
814          bottom: 5.5px; 
815          background-color: #454F63; 
816          -webkit-transition: .4s; 
817          transition: .4s; 
818
819         
820        input:checked + .slider { 
821          background-color: #2967F4; 
822
823         
824        input:focus + .slider { 
825          box-shadow: 0 0 1px #2967F4; 
826
827         
828        input:checked + .slider:before { 
829          -webkit-transform: translateX(26px); 
830          -ms-transform: translateX(26px); 
831          transform: translateX(26px); 
832
833         
834        /* Rounded sliders */ 
835        .slider.round { 
836          border-radius: 35px; 
837
838         
839        .slider.round:before { 
840          border-radius: 50%; 
841
842 
843        /* content filter */ 
844 
845        .ssp-slider-check__container{ 
846 
847            display: flex; 
848            justify-content: flex-end; 
849 
850
851 
852 
853     
854     .ssp-slider-check__content-itens{ 
855 
856            display: flex; 
857            width: 800px!important; 
858         
859            justify-content: flex-end!important; 
860             
861
862         
863         .ssp-slider-check__content-item{ 
864 
865            display: flex; 
866            align-items: center; 
867            padding: 0 20px; 
868
869         
870        
871        .ssp-slider-check__label{ 
872 
873            font-family: Montserrat; 
874            color: #78849E; 
875            font-size: 16px; 
876            padding-left: 10px; 
877            font-weight: 600; 
878 
879
880         
881        .ssp-section-tema__container-menu { 
882            padding-bottom: 15px; 
883
884 
885        .ssp-section-tema__subtitle-desconto{ 
886            display: block; 
887            font-size: 30px; 
888
889 
890        @media only screen and (max-width: 1024px) { 
891 
892            .ssp-section-tema__subtitle-desconto{ 
893                font-size: 19px; 
894
895 
896            .ssp-header-unidade__title a{ 
897                 
898                font-size: 24px; 
899
900 
901            .ssp-section-tema__subtitle-curso-section { 
902 
903                margin-left: 0px!important; 
904 
905
906 
907            #filtro-ativo-nivel-2{ 
908                justify-content: center; 
909
910 
911            .ssp-slider-check__label{ 
912 
913                font-size: 11px; 
914 
915
916 
917            .tema-slick-area { 
918     
919                display: flex; 
920                align-items: center; 
921                justify-content: flex-start; 
922                font-size: 0; 
923                flex-wrap: wrap; 
924
925 
926            /* custom  itens */ 
927             
928             
929            .ssp-unidade-temas__label-filtre-por{ 
930                font-size: 15px!important; 
931                padding-left: 5px!important; 
932
933            
934 
935            .ssp-section-tema__container-menu { 
936                height: auto!important; 
937
938 
939            .tema-slick-area-mobile { 
940                display: flex; 
941                align-items: center; 
942                justify-content: center; 
943                font-size: 0; 
944                flex-wrap: wrap; 
945
946 
947            .ssp-section-tema__container-submenu-nivel3 { 
948 
949                justify-content: center; 
950
951             
952             .ssp-slider-check__container{ 
953                padding-top:10px!important; 
954
955      }      
956</style> 
957 
958<#if tipoCurso == "Livre" || tipoCurso == "Extensão"> 
959 
960    <style>     
961        @media only screen and (max-width: 768px){      
962            .tema-ativo::after{ 
963                font-family: "Font Awesome 5 Free";  
964                font-weight: 900;  
965                content: "\f00d"; 
966                font-size: 12px; 
967                margin: 0 5px; 
968
969
970    </style>             
971</#if> 
972<style> 
973        @media only screen and (max-width: 768px){      
974            .subtema-ativo::after{ 
975                font-family: "Font Awesome 5 Free";  
976                font-weight: 900;  
977                content: "\f00d"; 
978                font-size: 12px; 
979                margin: 0 5px; 
980
981             
982            .ssp:not(.liferay-instance) .ssp-page-busca__section-resultado__ver-todos-mobile { 
983                font-family: Montserrat; 
984                font-size: 16px; 
985                font-weight: 600; 
986                line-height: 1.21; 
987                color: #78849e; 
988                text-decoration: none !important; 
989                transition: 0.3s; 
990                text-align: center !important; 
991                 padding-left: 7em; 
992
993             
994            .ssp:not(.liferay-instance) .ssp-page-busca__section-resultado__ver-todos-mobile::after { 
995                font-family: FontAwesome; 
996                font-weight: 900; 
997                content: '\f054'; 
998                font-size: 12px; 
999                margin-left: 5px; 
1000
1001 
1002
1003 
1004        /* Custom css para unidades */ 
1005 
1006        .ssp-unidade-temas__label-filtre-por{ 
1007 
1008            font-family: Montserrat; 
1009            font-size: 20px; 
1010            font-weight: 600; 
1011            padding: 15px; 
1012            padding-left: 30px; 
1013            color: #78849E; 
1014 
1015
1016 
1017        .ssp-section-tema__container-submenu-nivel3 .btn-nivel-3 { 
1018            margin: 15px 10px; 
1019           
1020
1021 
1022 
1023        .ssp-line-nivel-divisor { 
1024            width: 100%; 
1025            height: 1px; 
1026            background: #78849E; 
1027            margin: 15px 0; 
1028
1029 
1030     .ssp-header-unidade__content-info{ 
1031            z-index: 0!important; 
1032
1033 
1034        .ssp-btn-tema-mobile--active{ 
1035            background-color: #FE9057!important; 
1036            color: white!important; 
1037
1038 
1039        .ssp-btn-tema-mobile--active::after{ 
1040            font-family: "Font Awesome 5 Free";  
1041            font-weight: 900;  
1042            content: "\f00d"; 
1043            font-size: 12px; 
1044            margin: 0 5px; 
1045
1046 
1047        .ssp-btn-subtema-mobile--active{ 
1048            background-color: #78849E!important; 
1049            color: white!important; 
1050
1051         
1052        
1053 
1054        /* Botão Visualizar mais */ 
1055 
1056        .ssp-btn__visualizar-mais-content{ 
1057            display: flex; 
1058            flex-wrap: nowrap; 
1059            align-items: center; 
1060            justify-content: center; 
1061
1062 
1063        .ssp-btn__visualizar-mais{ 
1064            cursor: pointer; 
1065            font-size: 14px; 
1066
1067         
1068        #visualizar-mais{ 
1069            font-family:montserrat; 
1070
1071         
1072        .tema{ 
1073            box-shadow: none !important; 
1074
1075        .separador-subtemas{ 
1076            margin:10px 0px 30px 0px!important; 
1077
1078         
1079        .py-5{ 
1080            padding-bottom: 0px!important; 
1081            padding-top: 5px!important; 
1082
1083         
1084        .ssp-section-tema__title{ 
1085            margin: 40px 0px 25px 0px!important; 
1086
1087@media only screen and (min-width: 1025px){ 
1088    .ssp-section-tema__container-submenu-nivel3 .btn-nivel-3 { 
1089        margin-bottom: 20px!important; 
1090
1091     
1092    .filtroTextoMobile{ 
1093        display: none; 
1094
1095}    
1096 
1097/* novo botao ver todos os cursos */ 
1098 
1099.ver-todos-cursos-link{ 
1100    color: #78849E!important; 
1101
1102 
1103.ver-todos-cursos-link:hover{ 
1104    color: #515A6B!important; 
1105
1106 
1107.ver-todos-cursos-link:hover p{ 
1108    color: #515A6B!important; 
1109
1110 
1111.custom-card-curso-tema{ 
1112  
1113 height:282px!important;  
1114   
1115
1116 
1117.container-fluid .row{ 
1118    margin: 0 !important; 
1119
1120 
1121 
1122.container-fluid .col-md-12{ 
1123    padding: 0 !important; 
1124
1125 
1126.ver-todos-no-click{ 
1127    text-decoration: none !important; 
1128    pointer-events: none !important; 
1129
1130 
1131.slick-area__item.card-curso-nivel-2 .custom-card-curso-tema__title{ 
1132    height: 70px; 
1133
1134 
1135#slider .ssp-header-unidade__imagem-box-imagem img{ 
1136    position: absolute; 
1137    width: 100%; 
1138    height: 100%; 
1139    object-fit: cover; 
1140
1141 
1142/* Transporte próximo */ 
1143 
1144.ssp:not(.liferay-instance) .ssp-header-unidade__estacionamento { 
1145    display:block; 
1146    padding-top: 5px; 
1147
1148 
1149.ssp:not(.liferay-instance) .ssp-header-unidade__endereco-container { 
1150    display: flex; 
1151    align-items: center; 
1152    justify-content: space-between; 
1153    flex-flow: column; 
1154    align-items: flex-start; 
1155    gap: 15px; 
1156
1157 
1158.ssp:not(.liferay-instance) .ssp-header-unidade__estacionamento a{ 
1159    color:white; 
1160
1161 
1162.ssp:not(.liferay-instance) .ssp-header-unidade__estacionamento a:hover{ 
1163    font-weight:normal!important; 
1164
1165 
1166.ssp:not(.liferay-instance) .ssp-header-unidade__estacionamento p{ 
1167    display:inline-block; 
1168    margin: 0; 
1169
1170 
1171.ssp:not(.liferay-instance) .ssp-header-unidade__endereco { 
1172    max-width: 100%; 
1173
1174 
1175@media only screen and (max-width: 768px){ 
1176 
1177    .ssp:not(.liferay-instance) .ssp-header-unidade__container-info .container { 
1178        padding: 0; 
1179
1180 
1181    .ssp:not(.liferay-instance) .ssp-header-unidade__estacionamento p{ 
1182        display:inline; 
1183        font-size: 13px; 
1184
1185
1186     
1187 
1188/* Alteracoes para 10019 */ 
1189.ssp:not(.liferay-instance) .ssp-section-tema__container-submenu-nivel3 .btn-nivel-3 { 
1190  font-weight: 600; 
1191  color: #454F63; 
1192
1193#filtro-temas-nivel-2 .subtema.subtema-ativo:not(.todos){ 
1194  margin: 0 auto 30px auto!important; 
1195
1196#filtro-temas-nivel-2 .btn-nivel-3{ 
1197  display: inline-flex; 
1198  height: 40.061px; 
1199  padding: 16.868px; 
1200  justify-content: center; 
1201  align-items: center; 
1202  gap: 16.868px; 
1203  flex-shrink: 0; 
1204  border-radius: 8px; 
1205  border: 1.054px solid #C3CAD9; 
1206
1207.tema-ativo::after{ 
1208  font-family: "Font Awesome 5 Free";  
1209  font-weight: 900;  
1210  content: "\f00d"; 
1211  font-size: 12px; 
1212  margin: 0 5px; 
1213}   
1214.subtema-ativo:not(.subtema-ativo.todos)::after{ 
1215  font-family: "Font Awesome 5 Free";  
1216  font-weight: 900;  
1217  content: "\f00d"; 
1218  font-size: 12px; 
1219  margin: 0 5px; 
1220
1221#filtro-temas-nivel-3{ 
1222	margin-bottom: 20px; 
1223
1224#filtro-temas-nivel-3 a:not(.todos, .subtema-ativo)::after{ 
1225	content: "+"; 
1226  padding-left: 10px; 
1227  font-size: 16px; 
1228
1229.ssp:not(.liferay-instance) .ssp-section-tema__title{ 
1230	color: #78849E; 
1231  text-align: center; 
1232  font-family: Montserrat; 
1233  font-size: 32px; 
1234  font-style: normal; 
1235  font-weight: 600; 
1236  line-height: normal; 
1237
1238.ssp:not(.liferay-instance) .ssp-section-tema__title.selected { 
1239  font-size: 24px; 
1240  font-weight: 400; 
1241
1242.ssp:not(.liferay-instance) .ssp-section-tema__title::after { 
1243  display: none!important; 
1244
1245.ssp-title-filtrar-mais { 
1246  color: #454F63; 
1247  font-family: Montserrat; 
1248  font-size: 20px; 
1249  font-style: normal; 
1250  font-weight: 600; 
1251  line-height: normal; 
1252  margin-top: 58px; 
1253  margin-bottom: 24px; 
1254  margin-left: 10px; 
1255
1256#filtro-temas-nivel-3 .subtema { 
1257  border-radius: 32px; 
1258  border: 1.054px solid #C3CAD9; 
1259  display: flex; 
1260  height: 32px; 
1261  padding: 16.868px 16px; 
1262  justify-content: center; 
1263  align-items: center; 
1264  gap: 12px; 
1265  color: var(--boto, #636C7E); 
1266  text-align: center; 
1267  font-family: Montserrat; 
1268  font-size: 16px; 
1269  font-style: normal; 
1270  font-weight: 600; 
1271  line-height: normal; 
1272
1273.ssp-divider { 
1274  content: " "; 
1275  display: block; 
1276  background-color: #78849E; 
1277  width: 127px; 
1278  height: 3px; 
1279  margin: 25px auto 50px; 
1280
1281.ssp-section-tema__container-menu-item:has(.tema-ativo) { 
1282  margin-left: auto; 
1283  margin-right: auto; 
1284
1285 
1286@media only screen and (max-width: 1024px) { 
1287  .ssp-title-filtrar-mais { 
1288    color: #454F63; 
1289    font-family: Montserrat; 
1290    font-size: 18px; 
1291    font-style: normal; 
1292    font-weight: 600; 
1293    line-height: normal; 
1294    margin-top: 48px; 
1295    margin-bottom: 40px; 
1296    margin-left: 0px; 
1297
1298  .ssp:not(.liferay-instance) .ssp-section-tema__title { 
1299    color: #78849E; 
1300    text-align: center; 
1301    font-family: Montserrat; 
1302    font-size: 21px; 
1303    font-style: normal; 
1304    font-weight: 700; 
1305    line-height: normal; 
1306
1307 
1308  .ssp:not(.liferay-instance) .ssp-section-tema__title.selected { 
1309    font-size: 16px; 
1310    font-weight: 400; 
1311
1312 
1313  .ssp-divider { 
1314    margin: 0px auto 30px; 
1315
1316
1317 
1318.ssp:not(.liferay-instance) .ssp-card-curso, .ssp:not(.liferay-instance) .ssp-card-todos-cursos{ 
1319 
1320box-shadow: 0 0 15px rgba(0, 0, 0, 0.20); 
1321 
1322
1323</style>      
1324      
1325      
1326<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")> 
1327<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")> 
1328<#assign groupId = themeDisplay.getSiteGroupId()> 
1329 
1330<#assign vocabularyTemaMercadologico = assetVocabularyLocalService.getGroupVocabulary(groupId, "Tema(Mercadológico)")> 
1331 
1332<input type="hidden" id="ssp-vocabulary-id-tema-mercadologico" value="${vocabularyTemaMercadologico.getVocabularyId()}"> 
1333      
1334      
1335<#--  Header da Unidade  --> 
1336 
1337 
1338<section style="position:relative;"> 
1339    <div class="ssp-header-unidade__imagem-box">     
1340        <div class="ssp-header-unidade__imagem-box-box-linha"></div> 
1341 
1342        <div class="ssp-header-unidade__imagem-box-box-linha2"></div> 
1343 
1344        <div id="slider">      
1345 
1346            <div class="ssp-header-unidade__imagem-box-imagem selected">  
1347 
1348                <img src="${imagem.url}" loading="lazy" <#if imagem.alt?length != 0> alt="${imagem.alt}"</#if> >  
1349               
1350            </div> 
1351        
1352            <#if endereco2?length != 0> 
1353 
1354                <div class="ssp-header-unidade__imagem-box-imagem"> 
1355                    <img src="${imagem2.url}" loading="lazy" <#if imagem2.alt?length != 0> alt="${imagem2.alt}"</#if> >   
1356                </div>  
1357 
1358            </#if>     
1359                         
1360                 
1361        </div> 
1362        <!--div class="ssp-header-unidade__imagem-box-imagem" style="background-image: url(img/bg-fale-com-gente.jpg)"></div--> 
1363 
1364        <#--  dados de compartilhamento  --> 
1365        <@liferay_util["html-top"]> 
1366            <meta name="image" property="og:image" content="${imagem.url}"> 
1367            <meta property="og:image:width" content="1024"> 
1368        </@> 
1369        <#--  dados de compartilhamento  --> 
1370     
1371        <#if tipoCurso == "Livre" > 
1372            <div class="ssp-header-tema__tag-tipo-curso"></div> 
1373        <#elseif tipoCurso == "Técnico"> 
1374            <!-- Tag de Tipo de Curso --> 
1375            <div class="ssp-header-tema__tag-tipo-curso bg-nivel-tecnico"></div> 
1376             
1377        <#else> 
1378            <!-- Tag de Extensão --> 
1379            <div class="ssp-header-tema__tag-tipo-curso bg-nivel-extensao"></div> 
1380             
1381        </#if> 
1382        <div class="ssp-header-unidade__container-info"> 
1383 
1384            <div class="container"> 
1385 
1386                <div class="ssp-header-unidade__content-info" style="height: auto;"> 
1387 
1388                    <div class="ssp-header-unidade__content-info-container"> 
1389 
1390                        <div> 
1391 
1392                            <div> 
1393                                <small class="ssp-header-unidade__subtitle">Senac</small> 
1394                            </div> 
1395 
1396                            <div class="ssp-header-unidade__title-container"> 
1397 
1398                                <div> 
1399 
1400                                    <h1 class="ssp-header-unidade__title"> 
1401					<a href="https://www.sp.senac.br/${friendlyUrlUnidade}"> 
1402                                            ${nome} 
1403                                        </a>     
1404                                    </h1> 
1405                                     
1406 
1407                                </div> 
1408                                 
1409                                <#-- o código da unidade é usado para referência de unidade no --> 
1410                                <span id="codUnidadeReferencia" class="d-none">${codigoUnidade}</span> 
1411                                <span id="friendlyUnidade" class="d-none">${friendlyUrlUnidade}</span> 
1412                                <span id="friendlyTipoCurso" class="d-none">${friendlyUrlTipoCurso}</span> 
1413                                <span id="nomeUnidadeParaBreadCrumb" class="d-none">${nomeUnidadeParaBreadCrumb}</span> 
1414                                 
1415                                <#if friendlyUrlTipoCurso?contains("livre")> 
1416                                    <span id="tipoCursoText" class="d-none">Livre</span> 
1417                                <#elseif friendlyUrlTipoCurso?contains("tecnico")> 
1418                                    <span id="tipoCursoText" class="d-none">Técnico</span> 
1419                                <#else> 
1420                                     <span id="tipoCursoText" class="d-none">Extensão</span>     
1421                               </#if> 
1422                                <#if friendlyUrlTemaFirst?contains("#erro#")> 
1423                                    <span id="friendlyTemaNv1" class="d-none"></span> 
1424                                 <#else> 
1425                                    <span id="friendlyTemaNv1" class="d-none">${friendlyUrlTemaFirst}</span> 
1426                               </#if> 
1427                                <#if friendlyUrlTemaSecond?contains("#erro#")> 
1428                                    <span id="friendlyTemaNv2" class="d-none"></span> 
1429                                <#else> 
1430                                  <span id="friendlyTemaNv2" class="d-none">${friendlyUrlTemaSecond}</span> 
1431                               </#if> 
1432                               <#if friendlyUrlTemaThird?contains("#erro#")> 
1433                                    <span id="friendlyTemaNv3" class="d-none"></span> 
1434                                 <#else> 
1435                                     <span id="friendlyTemaNv3" class="d-none">${friendlyUrlTemaThird}</span> 
1436                               </#if> 
1437                                
1438                            </div> 
1439 
1440                        </div> 
1441 
1442                        <div class="ssp-header-unidade__endereco-container"> 
1443 
1444                            <div class="d-flex flex-wrap"> 
1445                                 
1446                                <div> 
1447                                 
1448                                    <#if endereco2?length != 0> 
1449                                        <span class="ssp-header-title-bloco">Bloco I</span><br> 
1450                                    </#if> 
1451 
1452                                    <address class="ssp-header-unidade__endereco"> 
1453                                        ${endereco}, ${numero}<br>  
1454                                        ${bairro}, ${cidade} - ${UF}, ${cep} 
1455                                    </address> 
1456 
1457                                    <span class="ssp-header-unidade__estacionamento"> 
1458 
1459                                    <i class="fas fa-car"></i> 
1460 
1461                                        <#if estacionamento?contains("true")> 
1462                                            <strong>Possui estacionamento?</strong> Sim 
1463                                            <#else> 
1464                                            <strong>Possui estacionamento?</strong> Não 
1465                                        </#if> 
1466 
1467                                    </span> 
1468                                </div> 
1469 
1470                                <#if endereco2?length != 0> 
1471 
1472                                    <div class="pt-5"> 
1473                                        <span class="ssp-header-title-bloco">Bloco II</span><br> 
1474                                        <address class="ssp-header-unidade__endereco"> 
1475                                            ${endereco2}, ${numero2}<br>  
1476                                            ${bairro2}, ${cidade2}, ${cep2} 
1477                                        </address> 
1478                                        <span class="ssp-header-unidade__estacionamento"> 
1479                                            <i class="fas fa-car"></i> 
1480 
1481                                                <#if estacionamento2?contains("true")> 
1482                                                    <strong>Possui estacionamento?</strong> Sim 
1483                                                    <#else> 
1484                                                    <strong>Possui estacionamento?</strong> Não 
1485                                                </#if> 
1486 
1487                                        </span> 
1488                                    </div> 
1489 
1490								</#if> 
1491 
1492								<#if hasEstacaoProxima> 
1493                                            
1494									<span class="ssp-header-unidade__estacionamento"> 
1495										<i class="fa-solid fa-train-subway" aria-hidden="true"></i> 
1496										<strong>Estação mais próxima:</strong> 
1497										${estacaoProxima} 
1498									</span> 
1499 
1500                                </#if> 
1501 
1502                            </div>   
1503 
1504                            <div class="ssp-header-unidade__content-info-maps"> 
1505 
1506 
1507                                <a class="btn btn-nivel border-white ssp-header-unidade__btn" href="${googlemaps}" target="_blank"> 
1508                                    <i class="fas fa-map-marker-alt mr-2 ssp-header-unidade__btn-icon"></i>Google Maps 
1509                                </a> 
1510 
1511                                <a class="btn btn-nivel border-white ml-2  d-sm-inline-block d-md-none d-lg-none d-xl-none ssp-header-unidade__btn" href="${waze}" target="_blank"> 
1512                                    <i class="fab fa-waze mr-2 ssp-header-unidade__btn-icon"></i>Waze 
1513                                </a> 
1514 
1515                            </div>                         
1516                             
1517                        </div> 
1518 
1519                    </div> 
1520 
1521                    <div class="ssp-header-unidade__content-info-body"> 
1522 
1523                        <div class="ssp-header-unidade__atendimento-container"> 
1524                            <p><strong>Atendimento:</strong></p> 
1525                            <p>${horario}</p> 
1526                        </div> 
1527                         
1528                    </div> 
1529 
1530                     
1531            </div> 
1532             
1533        </div> 
1534 
1535        </div>  
1536                     
1537    </div> 
1538         
1539 
1540<script> 
1541     
1542    if ( $.trim($('.ssp-header-unidade__title').html()) === 'Santo Amaro'){ 
1543 
1544    $('.ssp-header-unidade__subtitle').html('Centro Universitário Senac') 
1545 
1546    } else if ( $.trim($('.ssp-header-unidade__title').html()) === 'Campos do Jordão'){ 
1547 
1548        $('.ssp-header-unidade__subtitle').html('Centro Universitário Senac') 
1549 
1550    } else if ( $.trim($('.ssp-header-unidade__title').html()) === 'Águas de São Pedro'){ 
1551 
1552        $('.ssp-header-unidade__subtitle').html('Centro Universitário Senac') 
1553 
1554
1555 
1556//Animação de Crédito da imagem 
1557 
1558$(document).ready(function(){       
1559    let larguraTela = $(window).width(); 
1560 
1561    if(larguraTela < 1024){ 
1562 
1563        animateCreditImage() 
1564 
1565        $(window).scroll(function() { 
1566            ScrollPagina() 
1567        }); 
1568 
1569    }else{ 
1570 
1571        $(".ssp-header-unidade__imagem-box-imagem" ).mouseover(function() { 
1572            $(".creditoFotoMob").removeClass('d-none') 
1573         
1574        });   
1575 
1576        $(".ssp-header-unidade__imagem-box-imagem" ).mouseout(function() { 
1577                $(".creditoFotoMob").addClass('d-none') 
1578                 
1579        });  
1580 
1581
1582 
1583    //verifica posição do Top 
1584 
1585    function ScrollPagina(){ 
1586 
1587        let scrollPage = $(window).scrollTop(); 
1588 
1589        if(scrollPage == 0){ 
1590 
1591            animateCreditImage() 
1592 
1593
1594
1595 
1596    function animateCreditImage(){ 
1597 
1598        $( ".creditoFotoMob" ).removeClass('d-none').fadeIn( 200 ).delay( 2500 ).fadeOut( 5000 ); 
1599 
1600
1601 
1602    //anima Slider fotos unidades de 
1603 
1604    let time = 5000, 
1605        currentImageIndex = 0, 
1606        images = document 
1607                    .querySelectorAll("#slider .ssp-header-unidade__imagem-box-imagem") 
1608        max = images.length; 
1609 
1610    function nextImage() { 
1611 
1612        images[currentImageIndex] 
1613            .classList.remove("selected") 
1614 
1615        currentImageIndex++ 
1616 
1617        if(currentImageIndex >= max) 
1618            currentImageIndex = 0 
1619 
1620        images[currentImageIndex] 
1621            .classList.add("selected") 
1622
1623 
1624    function start() { 
1625 
1626        let enderecos = document.querySelectorAll('address'); 
1627 
1628        if(enderecos.length >= 2){     
1629 
1630            setInterval(() => { 
1631                // troca de image 
1632                nextImage() 
1633            }, time) 
1634
1635        
1636
1637 
1638    window.addEventListener("load", start) 
1639 
1640});  
1641     
1642</script> 
1643     
1644 
1645     
1646</section> 
1647 
1648<!--  Fim Header Unidade --> 
1649 
1650 
1651      
1652<#--  Conteúdo dinâmico que carrega os temas, subtemas e cursos  --> 
1653 
1654<section> 
1655 
1656    <div> 
1657 
1658        <h2 class="ssp-section-tema__title" data-section="title"> 
1659          Qual a sua área de interesse? 
1660        </h2> 
1661 
1662        <div class="ssp-divider"></div> 
1663 
1664        <div class="container"> 
1665 
1666            <div id="temas" class="ssp-section-tema__container-menu"> 
1667 
1668                <div class="ssp-section-tema__container-menu-item"> 
1669					<a href="#a" class="tema todos" data-nvl="0"> 
1670						<i class="fa-solid fa-dice-d6"></i> 
1671						Todos 
1672					</a> 
1673                </div> 
1674 
1675            </div> 
1676 
1677            <!-- Botão Visualizar Mais --> 
1678 
1679            <div class="ssp-btn__visualizar-mais-content d-md-none d-lg-none d-xl-none"> 
1680 
1681                <p id="visualizar-mais" class="ssp-btn__visualizar-mais">Visualizar mais</p> 
1682 
1683                <i class="fas fa-chevron-down mx-2 visualizar-mais-seta" style="font-size: 14px;"></i> 
1684                 
1685            </div> 
1686 
1687            <!-- filtros ativos para Mobile --> 
1688 
1689            <div id="filtro-ativo" class="tema-slick-area-mobile py-2"> 
1690 
1691                <!-- filtro nivel 1 --> 
1692                <div id="filtro-ativo-nivel-1" class="ssp-section-tema__container-menu-item mega-menu"> 
1693                     
1694                </div> 
1695 
1696                <div id="filtro-ativo-nivel-2" class="container ssp-section-tema__container-submenu-nivel3"> 
1697                             
1698                </div> 
1699 
1700            </div> 
1701 
1702        </div> 
1703 
1704    </div> 
1705 
1706</section> 
1707 
1708<section  id="tema-nivel2-container"> 
1709     
1710    <div id="tema-atual"> 
1711      <h2 class="ssp-section-tema__title"></h2> 
1712      <div class="ssp-divider"></div> 
1713    </div> 
1714         
1715    <#--   
1716    <div id="subtemas-lista-mobile" 
1717        class="container d-none ssp-section-tema__container-submenu-nivel3"></div>  --> 
1718 
1719    <div id="filtro-temas-nivel-2" class="container ssp-section-tema__container-submenu-nivel3 d-none"></div> 
1720     
1721    <div id="filtro-temas-nivel-3" class="container ssp-section-tema__container-submenu-nivel3 d-none"></div> 
1722 
1723</section> 
1724 
1725<section id="cursos-por-categoria-container" 
1726    style="padding-bottom:30px"> 
1727 
1728    <section class="py-5"> 
1729 
1730        <div class="container"> 
1731            <!-- <hr class="filtroInscBolsa"> --> 
1732            <div class="filtroTextoMobile">  
1733                <span style="font-family: 'Montserrat';font-size: 15px;font-weight: 600;color: #454F63;" > Filtrar por:</span>  
1734            </div> 
1735            <div class="ssp-slider-check__container" style="padding: 20px 0px;" id="container-filtros"> 
1736                <div class="ssp-slider-check__content-itens"> 
1737 
1738					<div class="ssp-slider-check__content-item">	 
1739		 
1740						<label id="inscricao-aberta" class="switch">	 
1741							<input id="chkInscricao" type="checkbox">	 
1742							<span class="slider round"></span>	 
1743						</label>	 
1744						 
1745						<span class="ssp-slider-check__label">Comprar agora</span> 
1746							 
1747                    </div> 
1748                    
1749                <#if tipoCurso == "Livre" || tipoCurso == "Técnico">     
1750				 
1751                    <div class="ssp-slider-check__content-item"> 
1752     
1753                        <label id="bolsas-estudo" class="switch"> 
1754                            <input id="chkBolsa" type="checkbox"> 
1755                            <span class="slider azul round"></span> 
1756                        </label> 
1757             
1758                        <span class="ssp-slider-check__label">Bolsas de estudo</span> 
1759     
1760                    </div> 
1761                </#if> 
1762                </div>     
1763 
1764            </div> 
1765 
1766            <!-- <hr class="filtroInscBolsa"> --> 
1767        </div> 
1768         
1769    </section> 
1770 
1771    <div style="padding-bottom: 30px;"> 
1772 
1773      <section id="cursos-por-subtema-container" class="container d-none"> 
1774     
1775        <!--h2 id="subtema-atual" class="ssp-section-tema__title-subtema"></h2--> 
1776         
1777        <div id="subsubtemas-lista"   class="ssp-section-tema__container-submenu-nivel3"></div> 
1778         
1779        <div id="curso-sem-slick" class="ssp-container__cursos-sem-slick"></div> 
1780         
1781         
1782      </section> 
1783     
1784    </div> 
1785 
1786    <div id="filtroSemCurso" class="ssp-bolsa-formulario__card-aviso-atencao d-none container text-left" style="width: 100%;"> 
1787                     
1788        <i class="fas fa-exclamation-circle ssp-bolsa-formulario__card-aviso-atencao-icon" aria-hidden="true"></i> 
1789     
1790        <div class="ssp-bolsa-formulario__card-aviso-texto"><p>Sem cursos para o filtro selecionado</p> 
1791        </div> 
1792     
1793     </div> 
1794     
1795     
1796</section> 
1797 
1798 
1799<#-- Template para card de cursos por categoria --> 
1800<section id="cursos-por-categoria-template" 
1801    class="cursos-por-categoria ssp-section container d-none"> 
1802 
1803 
1804    <div class="ssp-page-busca__section-resultado-container" 
1805        id="container-slider-cursos-livres"> 
1806 
1807        <a href="#a" data-nvl="" data-tema="" 
1808        class="ver-todos-cursos-link d-none-mobile"> 
1809    <p 
1810        class="ssp-page-busca__section-resultado__title-outros tema-nome ssp-section-tema__subtitle-curso-section"></p></a> 
1811         
1812    </div> 
1813 
1814    <div class="slider-curso" style="display: flex;"></div> 
1815 
1816</section> 
1817 
1818<#--  Estrutura com botões de tipos de curso -  os únicos que precisam ser dinâmicos são Livre e Técnico  --> 
1819 
1820<section class="ssp-section ssp-section-lg-top"> 
1821 
1822 
1823    <div class="container text-left"> 
1824 
1825        <h2 class="ssp-section-title"> 
1826            <lfr-editable id="title" type="rich-text"> 
1827                Cursos oferecidos 
1828            </lfr-editable> 
1829        </h2> 
1830     
1831        <div class="ssp-btns-horizontal-area"> 
1832 
1833            <#function getCategorias primaryKey> 
1834   
1835            <#assign categoryService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
1836            <#attempt> 
1837           
1838                <#return categoryService.getCategories("com.liferay.journal.model.JournalArticle", primaryKey)> 
1839           
1840            <#recover> 
1841               
1842              <#return '#erro#'> 
1843            </#attempt> 
1844          </#function> 
1845 
1846            <#assign  
1847             
1848 
1849                categoriesList = getCategorias(journal.getResourcePrimKey())  
1850                normalizer = serviceLocator.findService("com.liferay.portal.kernel.util.FriendlyURLNormalizer")  
1851                vocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") 
1852                vocabularies = vocabularyLocalService.getAssetVocabularies(-1,-1) 
1853                 
1854            /> 
1855 
1856 
1857            <#list vocabularies as vocabulary > 
1858            <#if vocabulary.getName() == 'Unidades'> 
1859                 
1860                <#assign  
1861                    xPathSelector_nomeUsualUnidade = saxReaderUtil.createXPath("dynamic-element[@field-reference='nomeUsualUnidade']") 
1862                      nomeUsual = xPathSelector_nomeUsualUnidade.selectSingleNode(rootElement).getStringValue() 
1863                      categories = vocabulary.getCategories() 
1864
1865                <#list categories as category> 
1866                    <#if  category.getName()?trim == nomeUsual?trim> 
1867                         
1868                        <#assign categoryId = category.getCategoryId() > 
1869                    </#if> 
1870                </#list> 
1871            </#if> 
1872        </#list> 
1873 
1874 
1875 
1876        <#-- Prefixo EAD--> 
1877        <#assign xPathSelector_urlEAD = saxReaderUtil.createXPath("dynamic-element[@field-reference='prefixourlead']")> 
1878        <#assign prefixoURLEAD = xPathSelector_urlEAD.selectSingleNode(rootElement).getStringValue()> 
1879 
1880        <#assign  hasPrefixoUrlEad = (prefixoURLEAD?trim?length > 0) > 
1881 
1882 
1883            <#list categoriesList![] as category> 
1884  
1885                <#assign vocabularyName = vocabularyLocalService.getVocabulary(category.getVocabularyId()).getTitle("pt-br")?trim /> 
1886  
1887                <#if normalizer.normalize(vocabularyName) == "tipo-de-curso"> 
1888                    <#assign normalizedCategoryName = normalizer.normalize(category.getName()) /> 
1889                     
1890                    <#if category.getName() == "Livre EAD"> 
1891                    <a href="#" data-categoryId="${category.getCategoryId()}" class="btn btn-nivel btn-nivel-${normalizedCategoryName}">Senac Online<i class="fas fa-signal-stream icon-ao-vivo" aria-hidden="true"></i>ao vivo</a> 
1892                    <#else> 
1893                        <a href="#" data-categoryId="${category.getCategoryId()}" class="btn btn-nivel btn-nivel-${normalizedCategoryName}">${category.getName()}</a> 
1894                    </#if> 
1895                     
1896 
1897                </#if> 
1898  
1899            </#list> 
1900 
1901            <#-- Verifica se a unidade oferta curso de Idiomas--> 
1902 
1903                <<#list categoriesList![] as category> 
1904 
1905                    <#assign vocabularyName = vocabularyLocalService.getVocabulary(category.getVocabularyId()).getTitle("pt-br")?trim /> 
1906 
1907                    <#if normalizer.normalize(vocabularyName) == "tema-mercadologico-">  
1908 
1909                        <#assign normalizedCategoryName = normalizer.normalize(category.getName()) /> 
1910 
1911                        <#if category.getName() == "Idiomas"> 
1912                                <a href="#" data-categoryId="${category.getCategoryId()}" class="btn btn-nivel btn-nivel-${normalizedCategoryName}">${category.getName()}</a> 
1913                            <#else> 
1914                        </#if> 
1915 
1916                    </#if> 
1917 
1918                </#list>  
1919 
1920            <#-- Verifica se a unidade oferta curso livre--> 
1921 
1922             
1923            <#if hasPrefixoUrlEad > 
1924 
1925                <a href="${prefixoURLEAD}" target="_blank" class="btn btn-nivel btn-nivel-ead">EAD</a> 
1926 
1927            </#if> 
1928     
1929 
1930    </div> 
1931 
1932    </div> 
1933 
1934 
1935</section> 
1936  
1937 <script> 
1938 
1939const isMobile = $(window).width() <= 1024 
1940 
1941var temas = []; 
1942var subtemasStorage = new Map(); 
1943var activeCategory = 'all'; 
1944var activeCategoryLevel = 0; 
1945var limit = 2; 
1946var offset = 0; 
1947var todosText = ''; 
1948var limitTodosCursos = 16; 
1949var offsetTodosCursos = 0; 
1950var groupId = 0; 
1951var tipoCursoNome = "${tipoCurso}"; 
1952var categoryIdTipoCurso = 0; 
1953var tipoCursoNomeBreadCrumb = ""; 
1954var cookieName = ""; 
1955var tam = $(window).width(); 
1956var urlUnidade = ""; 
1957var urlTipoCurso = "";  
1958var categoryIdUnidade = ""; 
1959var urlTemasStorage = new Map(); 
1960var urlTemaNv1 = ""; 
1961var urlTemaNv2 = ""; 
1962var urlTemaNv3 = ""; 
1963let urlParamTemaNv3 = '' 
1964var acessoDireto = 0; 
1965var categoryIdTemaNv1 = ""; 
1966var categoryIdTemaNv2 = ""; 
1967var categoryIdTemaNv3 = ""; 
1968const HOST = window.location.origin; 
1969var filtrarInscricoesAbertas = 0; 
1970var filtrarBolsaEstudo = 0; 
1971var activeModeloExibicao = 1; 
1972var limitCursos = isMobile ? 4 : 11; 
1973var cliqueFiltroMobile = 0; 
1974var carregandoMais = false; 
1975var urlCursosPorTipoCursoETemaComFiltrosBolsaECompra = "/o/senac-content-services/cursosPorCategoriasComFiltrosBolsaECompra/{groupId}/{filtrarInscricoesAbertas}/{filtrarBolsaEstudo}/{considerarUnidade}/{start}/{end}?categoryIds={categoriaTemaId}&categoryIds={tipoCurso}" 
1976var urlSearchTipoCurso = '/o/senac-content-services/idTipoCursoPorNome/{groupId}/{tipoCursoNome}'; 
1977var cardVerTodosTipoCursoClass = '' 
1978let categorias = [] 
1979let categoryWithoutCourse = [] 
1980let friendlyUrlUnidade = '' 
1981 
1982$(document).ready(function(){   
1983    init() 
1984 
1985    //Associa eventos 
1986    $(document).on("click", ".ver-todos-cursos-link", verTodosCursos); 
1987    $(document).on("click", ".card-ver-todos-cursos-link", verTodosCursos); 
1988}) 
1989 
1990function montaBreadCrumb(){ 
1991    var breadCrumb = $(".breadcrumb"); 
1992    var nomeUnidade = $("#nomeUnidadeParaBreadCrumb").text().trim(); 
1993     
1994    breadCrumb.empty(); 
1995     
1996    //Home 
1997    breadCrumb.append('<li class="breadcrumb-item"><a class="breadcrumb-link" href="/" title="Home"><span class="breadcrumb-text-truncate">Home</span></a></li>'); 
1998     
1999    //Unidades 
2000    breadCrumb.append('<li class="breadcrumb-item"><a class="breadcrumb-link" href="/unidades" title="Unidades"><span class="breadcrumb-text-truncate">Unidades</span></a></li>'); 
2001     
2002    //Unidade 
2003    breadCrumb.append('<li class="breadcrumb-item"><a class="breadcrumb-link" href="/'+getFriendlyUrlUnidade()+'" title="'+nomeUnidade+'"><span class="breadcrumb-text-truncate">'+nomeUnidade+'</span></a></li>'); 
2004     
2005    //Tipo de Curso 
2006    breadCrumb.append('<li class="breadcrumb-item"><a class="breadcrumb-link" href="/'+getFriendlyUrlUnidade()+'/'+getUrlTipoCurso()+'" title="'+tipoCursoNomeBreadCrumb+'"><span class="breadcrumb-text-truncate">'+tipoCursoNomeBreadCrumb+'</span></a></li>'); 
2007     
2008
2009 
2010function carregaLinkTodosBotoesModalidades(){ 
2011 
2012$( document ).ready(function() { 
2013     
2014    var friendlyUrlUnidade = $("#friendlyUnidade").text().trim(); 
2015 
2016    // extensão 
2017    if (($('.ssp-btns-horizontal-area').find('.btn-nivel-extensao'))){ 
2018        var urlExt = "/"+friendlyUrlUnidade+ "/extensao-universitaria"; 
2019          
2020        if(friendlyUrlUnidade == "senac-tatuape-luis-americano" || friendlyUrlUnidade == "centro-universitario-senac-campos-do-jordao")  
2021            urlExt = "/busca?q=*&tipo-curso="+$('.ssp-btns-horizontal-area').find('.btn-nivel-extensao').data('categoryid')+"&unidade="+${categoryId}+'#c'; 
2022              
2023        $('.ssp-btns-horizontal-area').find('.btn-nivel-extensao').attr("href", urlExt); 
2024        //$('.ssp-btns-horizontal-area').find('.btn-nivel-extensao').attr("href", "https://www.sp.senac.br/jsp/default.jsp?template=1588.dwt&testeira=725&type=X&unit=NONE&sub=") 
2025 
2026
2027 
2028    // Ensino Médio 
2029    if (($('.ssp-btns-horizontal-area').find('.btn-nivel-ensino-medio-tecnico'))){ 
2030 
2031       
2032        var urlEmed = "/"+friendlyUrlUnidade+ "/ensino-medio-tecnico"; 
2033        $('.ssp-btns-horizontal-area').find('.btn-nivel-ensino-medio-tecnico').attr("href", urlEmed); 
2034 
2035 
2036
2037 
2038 
2039    // Graduação 
2040    if (($('.ssp-btns-horizontal-area').find('.btn-nivel-graduacao'))){ 
2041         
2042        var urlGraduacao = "/"+friendlyUrlUnidade+ "/graduacao"; 
2043 
2044        $('.ssp-btns-horizontal-area').find('.btn-nivel-graduacao').attr("href", urlGraduacao); 
2045         
2046
2047 
2048    // Pos-Graduação 
2049    if (($('.ssp-btns-horizontal-area').find('.btn-nivel-pos-graduacao'))){ 
2050 
2051        $('.ssp-btns-horizontal-area').find('.btn-nivel-pos-graduacao').attr({ 
2052            href: "/"+friendlyUrlUnidade+ "/pos-graduacao", 
2053            target: "_blank" 
2054        }) 
2055 
2056
2057 
2058    // livre 
2059    if (($('.ssp-btns-horizontal-area').find('.btn-nivel-livre'))){ 
2060             
2061        var urlLiv = "/"+friendlyUrlUnidade+ "/cursos-livres"; 
2062         
2063        //Solucao temporaria, ate o proxy estiver correto 
2064        if(friendlyUrlUnidade == "senac-tatuape-luis-americano" || friendlyUrlUnidade == "centro-universitario-senac-campos-do-jordao")  
2065            urlLiv = "/busca?q=*&tipo-curso="+$('.ssp-btns-horizontal-area').find('.btn-nivel-livre').data('categoryid')+"&unidade="+${categoryId}+'#c'; 
2066         
2067            $('.ssp-btns-horizontal-area').find('.btn-nivel-livre').attr("href", urlLiv); 
2068 
2069
2070     
2071     // livre Ao vivo 
2072     if (($('.ssp-btns-horizontal-area').find('.btn-nivel-livre-ead'))){ 
2073 
2074        $('.ssp-btns-horizontal-area').find('.btn-nivel-livre-ead').attr({ 
2075          href : "https://www.sp.senac.br/cursos-livres-senac-online-ao-vivo" 
2076        }) 
2077 
2078
2079 
2080    // Regra para Botão de Idiomas 
2081 
2082    if( 
2083 
2084        $('#codUnidadeReferencia').text() === "137" ||  
2085        $('#codUnidadeReferencia').text() === "123" ||  
2086        $('#codUnidadeReferencia').text() === "23" ||  
2087        $('#codUnidadeReferencia').text() === "58" ||  
2088        $('#codUnidadeReferencia').text() === "32" ||  
2089        $('#codUnidadeReferencia').text() === "62" && $('.ssp-btns-horizontal-area').find('.btn-nivel-idiomas') 
2090         
2091    ) { 
2092 
2093        var urlIdi = "/"+friendlyUrlUnidade+ "/cursos-livres/idiomas"; 
2094 
2095        $('.ssp-btns-horizontal-area').find('.btn-nivel-idiomas').attr("href", urlIdi); 
2096 
2097    }else{ 
2098        $('.ssp-btns-horizontal-area').find('.btn-nivel-idiomas').addClass("d-none") 
2099
2100 
2101    // Técnicos 
2102    if (($('.ssp-btns-horizontal-area').find('.btn-nivel-tecnico'))){ 
2103 
2104        var urlTec = "/"+friendlyUrlUnidade+ "/cursos-tecnicos"; 
2105         
2106    //Solucao temporaria, ate o proxy estiver correto 
2107    if(friendlyUrlUnidade == "senac-tatuape-luis-americano" || friendlyUrlUnidade == "centro-universitario-senac-campos-do-jordao")  
2108        urlTec = "/busca?q=*&tipo-curso="+$('.ssp-btns-horizontal-area').find('.btn-nivel-tecnico').data('categoryid')+"&unidade="+${categoryId}+'#c'; 
2109     
2110        $(this).find('.btn-nivel-tecnico').attr("href", urlTec); 
2111 
2112
2113 
2114    // Jovem Aprendiz 
2115    if (($('.ssp-btns-horizontal-area').find('.btn-nivel-jovem-aprendiz'))){ 
2116 
2117        $(this).find('.btn-nivel-jovem-aprendiz').attr({ 
2118            href: "/jovem-aprendiz", 
2119        }) 
2120 
2121
2122  }); 
2123
2124 
2125function carregaLinkBotoesLivreETecnico(){ 
2126 
2127  urlUnidade = $("#friendlyUnidade").text().trim(); 
2128  urlTipoCurso = $("#friendlyTipoCurso").text().trim();  
2129       
2130  $.ajax({ 
2131      url : '/o/senac-content-services/url-tipos-de-curso/'+groupId, 
2132      type : 'get', 
2133      dataType: 'json', 
2134  }).done(function(res) { 
2135      $(res).each(function(key , value){ 
2136          if(value.name == 'tecnico'){ 
2137              //botao livre 
2138              $("#linkTecnico").attr('href', "/"+urlUnidade+"/"+value.friendlyURL); 
2139          }else 
2140              if(value.name == 'livre'){ 
2141                  $("#linkLivre").attr('href', "/"+urlUnidade+"/"+ value.friendlyURL); 
2142
2143      });       
2144  }); 
2145
2146 
2147 
2148// Botao para filtro de cursos com inscricoes abertas e bolsas 
2149$('#inscricao-aberta input, #bolsas-estudo input').click(function(){ 
2150   
2151  //Atualiza as variaveis globais dos dois filtros 
2152  $("#inscricao-aberta input").is(":checked") == true ? filtrarInscricoesAbertas = 1 : filtrarInscricoesAbertas = 0; 
2153  $("#bolsas-estudo input").is(":checked") == true ? filtrarBolsaEstudo = 1 : filtrarBolsaEstudo = 0; 
2154   
2155  //Refaz a busca com os filtros atualizados 
2156  switch(getCurrentLevel()){ 
2157    case 1: 
2158    case 2:       
2159      //Verifica se esta exibindo todos ou algum tema 
2160      var botaoTodos = $('.todos'); 
2161       
2162      if(botaoTodos.hasClass('ativo') || botaoTodos.hasClass('tema-ativo'))  
2163          $('.todos:first').trigger('click'); 
2164       
2165      //Se estiver ativo um tema, verifica se possui ativo um subtema 
2166      else 
2167        //Verifica o nivel do tema clicado 
2168        $('.subtema-ativo:not(.todos)').length == 0 ? $('.subtema-ativo.todos').trigger('click') : $('.subtema-ativo:first').trigger('click', [$(this)]); 
2169        break; 
2170 
2171    case 3: 
2172      if($('#filtro-temas-nivel-3 .subtema-ativo:not(.todos)').length) { 
2173        const preSelecteds = [] 
2174        document.querySelectorAll('#filtro-temas-nivel-3 .subtema-ativo:not(.todos)') 
2175        .forEach(el => { 
2176          preSelecteds.push(el) 
2177          el.classList.remove('subtema-ativo') 
2178        }) 
2179 
2180        preSelecteds.forEach(async el => await clickTema(el.getAttribute('data-tema'))) 
2181      } else { 
2182        const el = $('#filtro-temas-nivel-3 .todos') 
2183        el.trigger('click') 
2184
2185      break; 
2186
2187}) 
2188 
2189//carrega url com tema clicado 
2190function atualizaUrlBrowser(urlTema,nivel){ 
2191	var path = window.location.pathname; 
2192	var urlFinal = ""; 
2193	 
2194	if(path.indexOf('staging') > 1){ 
2195		urlFinal = "/web/guest-staging"; 
2196	}else 
2197		if(path.indexOf('guest') > 1){ 
2198			urlFinal = "/web/guest"; 
2199
2200 
2201  const pathnames = window.location.pathname.split('/').filter(str => !!str) 
2202	urlFinal += '/' + pathnames[0] + '/' + pathnames[1] 
2203	 
2204	//se for todos os cursos a url fica so /unidade/tipo-curso 
2205	if(nivel > 0){ 
2206    const urlParams = new URLSearchParams(window.location.search); 
2207 
2208		switch(nivel){ 
2209		 
2210			case 1: 
2211				urlTemaNv1 = urlTema; 
2212				urlFinal += "/"+urlTemaNv1; 
2213			break; 
2214			 
2215			case 2: 
2216				urlTemaNv2 = urlTema; 
2217        		urlFinal += tipoCursoNome != "Técnico" ? "/"+urlTemaNv1+"/"+urlTemaNv2 : "/"+urlTemaNv1;				 
2218			break; 
2219			 
2220			case 3: 
2221        		urlTemaNv3 = urlTema; 
2222        		 
2223        		if(tipoCursoNome != "Técnico" ) 
2224        			urlParams.set('q', urlTemaNv3) 
2225 
2226        		urlFinal += tipoCursoNome != "Técnico" ? "/"+urlTemaNv1+"/"+urlTemaNv2: "/"+urlTemaNv1;					 
2227			break; 
2228		 
2229
2230 
2231    	urlFinal += (urlParams.toString() ? '?' + urlParams.toString() : '') 
2232		 
2233	}	 
2234	 
2235	urlFinal = new URL(window.location.origin + urlFinal); 
2236	  if($("#inscricao-aberta input").is(":checked")){ 
2237	    urlFinal.searchParams.set("inscricao", true); 
2238	  }  
2239	  if($("#bolsas-estudo input").is(":checked")){ 
2240	    urlFinal.searchParams.set("bolsa", true); 
2241	  }  
2242	  window.history.pushState('', 'Categoria JavaScript', decodeURIComponent(urlFinal.toString())) 
2243
2244 
2245function getUrlTipoCurso(){ 
2246	return $('#friendlyTipoCurso').text().trim(); 
2247
2248 
2249function buscaFriendlyUrlTemaEAtualizaBrowser(temaId, nivelClicado){ 
2250	 
2251	var friendlyUrlTema = urlTemasStorage.get(temaId); 
2252	 
2253  if(typeof  friendlyUrlTema === "undefined"){ 
2254    //se ainda nao tem no map, busco via ajax e armazeno no map a url do tema clicado para nao precisar buscar novamente 
2255		$.ajax({ 
2256      url : '/o/senac-content-services/friendlyUrlPorCategoria/'+temaId, 
2257			type : 'get', 
2258			dataType: 'json', 
2259      async: false 
2260		}).done(function(res) { 
2261       
2262      urlTemasStorage.set(temaId,res.url); 
2263			friendlyUrlTema = res.url 
2264 
2265		}) 
2266
2267 
2268  if(nivelClicado == 3){ 
2269    let params = '' 
2270 
2271    document.querySelectorAll("#filtro-temas-nivel-3 a.subtema-ativo") 
2272    .forEach(a => { 
2273      const friendlyUrl = urlTemasStorage.get(parseInt(a.getAttribute('data-tema'))) 
2274      params = (params ? params + ',' : '') + friendlyUrl 
2275    }) 
2276 
2277    atualizaUrlBrowser(params,nivelClicado); 
2278	} else { 
2279    atualizaUrlBrowser(friendlyUrlTema,nivelClicado); 
2280
2281     
2282
2283 
2284let isAcessoDireto = false 
2285//verifica se usuario acessou direto pelas urls dos temas e carrega os temas para dar sequencia 
2286async function verificaAcessoDiretoELoadTema(){ 
2287  isAcessoDireto = true 
2288  urlTemaNv1 = $("#friendlyTemaNv1").text().trim(); 
2289  urlTemaNv2 = $("#friendlyTemaNv2").text().trim(); 
2290  urlTemaNv3 = $("#friendlyTemaNv3").text().trim(); 
2291 
2292  const urlParamsTemaNv3 = new URLSearchParams(window.location.search); 
2293  urlParamTemaNv3 = urlParamsTemaNv3.get('q'); 
2294 
2295  carregaTemas() 
2296 
2297  let nivel1CategoryId 
2298  let nivel2CategoryId 
2299  let nivel3CategoryId 
2300 
2301  if(urlTemaNv1) {     
2302    getSubtemas(urlTemaNv1) 
2303    .done(categories => { 
2304      nivel1CategoryId = categories[0].categoryId 
2305      clickTema(nivel1CategoryId) 
2306    }) 
2307
2308 
2309  if(urlTemaNv2){ 
2310    getSubtemas(urlTemaNv2, nivel1CategoryId) 
2311    .done(categories => { 
2312      nivel2CategoryId = categories[0].categoryId 
2313      clickTema(nivel2CategoryId) 
2314    }) 
2315
2316 
2317  if(urlParamTemaNv3) { 
2318    const params = urlParamTemaNv3.split(',') 
2319 
2320    for (let index = 0; index < params.length; index++) { 
2321      const url = params[index]; 
2322 
2323      const categories = await getSubtemas(url, nivel2CategoryId) 
2324       
2325      await clickTema(categories[0].categoryId) 
2326
2327
2328 
2329  isAcessoDireto = false 
2330
2331 
2332function getFriendlyUrlUnidade() { 
2333  return $("#friendlyUnidade").text().trim() 
2334
2335 
2336/* Prepara a montagem inicial da página */ 
2337async function init() { 
2338  var tipoCursoText = $('#tipoCursoText').text().trim(); 
2339 
2340  if(tipoCursoText == "Livre"){ 
2341      tipoCursoNomeBreadCrumb = "Cursos Livres"; 
2342      tipoCursoNome = "Livre"; 
2343      cookieName = "ck-cursos-livre";  
2344      cardVerTodosTipoCursoClass = "livre" 
2345   
2346  }else if(tipoCursoText == "Técnico"){ 
2347      tipoCursoNomeBreadCrumb = "Cursos Técnicos"; 
2348      tipoCursoNome = "Técnico"; 
2349      cookieName = "ck-cursos-tecnico"; 
2350      cardVerTodosTipoCursoClass = "tecnico" 
2351   
2352  }else if(tipoCursoText == "Extensão"){ 
2353      tipoCursoNomeBreadCrumb = "Extensão Universitária"; 
2354      tipoCursoNome = "Extensão"; 
2355      cookieName = "ck-cursos-extensao"; 
2356      cardVerTodosTipoCursoClass = "extensao" 
2357
2358 
2359  montaBreadCrumb() 
2360 
2361  friendlyUrlUnidade = getFriendlyUrlUnidade() 
2362   
2363  const categories = await getSubtemas(friendlyUrlUnidade) 
2364  categoryIdUnidade = categories[0].categoryId 
2365 
2366	urlTipoCurso = getUrlTipoCurso(); 
2367	 
2368	groupId = Liferay.ThemeDisplay.getScopeGroupId(); 
2369	 
2370	$('#tema-atual h2').text(""); 
2371  $('#tema-atual').hide(); 
2372	 
2373	todosText = $('#tema-atual h2').text(); 
2374	 
2375		//Preenche o id do tipo de curso e a modalidade 
2376		var url = urlSearchTipoCurso 
2377		    .replace('{groupId}', groupId) 
2378		    .replace('{tipoCursoNome}', tipoCursoNome); 
2379		     
2380		$.ajax({ 
2381		    url : url, 
2382		    type : 'get', 
2383        async: false 
2384		}).done(function(categoryIdTipoCursoResponse) { 
2385		     
2386		    categoryIdTipoCurso = categoryIdTipoCursoResponse; 
2387		     
2388		}); 
2389 
2390	carregarCategorias() 
2391  verificaFiltroInscricaoBolsaEToggle() 
2392	verificaAcessoDiretoELoadTema() 
2393  visualizarMais() 
2394  hideVisualizarMais() 
2395 
2396  if(isMobile) { 
2397    visualizarMenos() 
2398    showVisualizarMais() 
2399
2400
2401 
2402function verificaFiltroInscricaoBolsaEToggle() { 
2403  const urlParams = new URLSearchParams(window.location.search) 
2404  $('#chkInscricao').prop("checked", urlParams.get('inscricao') == 'true') 
2405  $('#chkInscricao').prop("checked") ? filtrarInscricoesAbertas = 1 : filtrarInscricoesAbertas = 0 
2406  $('#chkInscricao').change(ev => selectFilter('inscricao', $('#chkInscricao')) ) 
2407   
2408  if($('#chkBolsa').length) { 
2409    $('#chkBolsa').prop("checked", urlParams.get('bolsa') == 'true') 
2410    $('#chkBolsa').prop("checked") ? filtrarBolsaEstudo = 1 : filtrarBolsaEstudo = 0 
2411    $('#chkBolsa').change(ev => selectFilter('bolsa', $('#chkBolsa')) )     
2412
2413
2414 
2415function carregarCategorias() { 
2416	if(!categorias.length) { 
2417		const searchParams = new URLSearchParams({ 
2418			companyId: themeDisplay.getCompanyId(), 
2419			groupIds: themeDisplay.getScopeGroupId(), 
2420			parentCategoryIds: 0, 
2421			vocabularyIds: document.querySelector('#ssp-vocabulary-id-tema-mercadologico').value 
2422		}) 
2423 
2424		$.ajax({ 
2425			url : '/o/senac-category-services/categories?' + searchParams.toString(), 
2426			method : 'get', 
2427			async: false 
2428		}) 
2429		.done(data => categorias = data) 
2430		.fail(err => console.error(err)) 
2431
2432
2433 
2434function selectFilter(paramkey, el) { 
2435  setUrlParam(paramkey, el.prop("checked"))   
2436
2437 
2438function setUrlParam(key, value) { 
2439  const url = new URL(window.location.href) 
2440  if(value) 
2441   	url.searchParams.set(key, value); 
2442  else 
2443	url.searchParams.set(key, false) 
2444  window.history.pushState({}, '', decodeURIComponent(url.toString())) 
2445
2446	 
2447$(document).on("click", '.ssp-btn__visualizar-mais-content', toggleVisualizarMais) 
2448 
2449function visualizarMenos() { 
2450  const itensTema = $('#temas').children(); 
2451  const itensExibidos = 6; 
2452 
2453  if(isMobile) 
2454    itensTema.slice(itensExibidos).hide(); 
2455 
2456  $('#visualizar-mais').text('Visualizar mais'); 
2457  $('#visualizar-mais').parent().find('i').removeClass('fa-chevron-up'); 
2458  $('#visualizar-mais').parent().find('i').addClass('fa-chevron-down'); 
2459
2460 
2461function visualizarMais() { 
2462  const itensTema = $('#temas').children(); 
2463  const itensExibidos = 6; 
2464 
2465  if(isMobile) 
2466    itensTema.slice(itensExibidos).show(); 
2467     
2468  $('#visualizar-mais').text('Visualizar menos'); 
2469  $('#visualizar-mais').parent().find('i').removeClass('fa-chevron-down'); 
2470  $('#visualizar-mais').parent().find('i').addClass('fa-chevron-up'); 
2471
2472 
2473function toggleVisualizarMais(){   
2474  if( $('#visualizar-mais').text() === "Visualizar mais" ) 
2475    visualizarMais()					 
2476  else 
2477    visualizarMenos()   
2478
2479 
2480function showVisualizarMais() { 
2481  $('.ssp-btn__visualizar-mais-content').show() 
2482
2483 
2484function hideVisualizarMais() { 
2485  $('.ssp-btn__visualizar-mais-content').hide() 
2486
2487 
2488/* Carrega os subtemas ou cursos ao clicar no tema */ 
2489let lastClicked 
2490$(".container").on( 
2491		"click", 
2492		".tema", 
2493		function() { 
2494      const categoriaId = $(this).data('tema'); 
2495      const isEqualTema = lastClicked == categoriaId 
2496      lastClicked = categoriaId 
2497 
2498      const isTodos = this.classList.contains('todos') 
2499       
2500      activeCategoryLevel = $(this).data('nvl'); 
2501      limit = 2; 
2502			offset = 0;			 
2503			limitTodosCursos = 16; 
2504			offsetTodosCursos = 0; 
2505 
2506      $('#filtro-temas-nivel-2').empty() 
2507			$('#filtro-temas-nivel-3').empty() 
2508 
2509      hideVisualizarMais() 
2510      $('.tema').removeClass('ativo'); 
2511      $('.tema').removeClass('tema-ativo') 
2512      $('.ssp-section-tema__container-menu-item').show() 
2513 
2514      document.querySelector('.ssp-divider').classList.add('d-none') 
2515 
2516      document.querySelector('[data-section="title"]').classList.remove('selected') 
2517 
2518      if(isTodos){ 
2519        document.querySelector('[data-section="title"]').innerHTML = 'Qual a sua área de interesse?' 
2520        document.querySelector('.ssp-divider').classList.remove('d-none') 
2521 
2522        showVisualizarMais() 
2523				atualizaUrlBrowser(0,0); 
2524				$('.todos').addClass('ativo'); 
2525 
2526        if(isMobile) { 
2527          visualizarMenos() 
2528          showVisualizarMais() 
2529
2530      } else { 
2531        document.querySelector('[data-section="title"]').innerHTML = 'Você selecionou:' 
2532        $('.ssp-section-tema__container-menu-item').hide() 
2533        $('.ssp-section-tema__container-menu-item').has(this).show() 
2534 
2535        if(isEqualTema) { 
2536          removeFiltersLevel1() 
2537          return 
2538        } else 
2539          $(this).addClass('tema-ativo') 
2540 
2541        $.ajax( 
2542
2543							url : '/o/senac-content-services/category/' 
2544									+ $(this).data('tema'), 
2545							type : 'get' 
2546						}).done(function(category) { 
2547	 
2548					activeCategory = JSON.parse(category); 
2549					 
2550					cleanElements(); 
2551 
2552					displayCursosPorTema(); 
2553					 
2554					displaySubTemasLista(); 
2555 
2556          buscaFriendlyUrlTemaEAtualizaBrowser(categoriaId,1); 
2557				}); 
2558				         
2559        if(!this.classList.contains('todos')) { 
2560					hideOthersLevel1(this) 
2561
2562
2563
2564); 
2565 
2566/* Quando clica em Ver Todos cursos de um tema */ 
2567function verTodosCursos(){ 
2568	 
2569	//Scrool top 
2570	$('html, body').animate({ 
2571        scrollTop: $("#temas").offset().top 
2572    }, -1000); 
2573	 
2574	 
2575	var tema = $(this).data('tema'); 
2576	activeCategoryLevel = $(this).data('nvl'); 
2577	 
2578	if(activeCategoryLevel == 1) 
2579		buscaFriendlyUrlTemaEAtualizaBrowser(tema,activeCategoryLevel); 
2580 
2581	// Verifica o elemento, adiciona a classe ativo e remove dos seus primos 
2582	$('.todos').removeClass('ativo'); 
2583	 
2584	limit = 2; 
2585	offset = 0; 
2586 
2587	$.ajax({ 
2588		url : '/o/senac-content-services/category/'+ tema, 
2589		type : 'get' 
2590	}).done(function(category) { 
2591 
2592		activeCategory = JSON.parse(category); 
2593		 
2594		switch(activeCategoryLevel){ 
2595			case 1: 
2596				$('.tema').removeClass('tema-ativo'); 
2597				$('.tema[data-tema="'+activeCategory.categoryId+'"]').not('.slick-cloned').each(function(){ 
2598					if(!$(this).parent().hasClass('slick-cloned')){	 
2599						var botaoTemaVerTodos = $(this); 
2600						botaoTemaVerTodos.trigger('click'); 
2601
2602				}); 
2603				 
2604				break; 
2605			case 2: 
2606					 
2607				var botaoTemaVerTodosNv2 = $('.subtema[data-tema="'+activeCategory.categoryId+'"]'); 
2608				botaoTemaVerTodosNv2.trigger('click'); 
2609				 
2610				break; 
2611			case 3: 
2612				var botaoTemaVerTodosNv3 = $('.subtema[data-tema="'+activeCategory.categoryId+'"]'); 
2613				botaoTemaVerTodosNv3.trigger('click'); 
2614				 
2615				break; 
2616
2617			 
2618		 
2619	}); 
2620
2621	 
2622function defaultSubtema(el, temaIds) {   
2623  limit = 2; 
2624  offset = 0; 
2625  limitTodosCursos = 16; 
2626  offsetTodosCursos = 0; 
2627   
2628  $('#cursos-por-subtema-container').find('#curso-sem-slick').empty(); 
2629 
2630  activeCategoryLevel = $(el).data('nvl'); 
2631 
2632  if(!acessoDireto) 
2633    buscaFriendlyUrlTemaEAtualizaBrowser($(el).data('tema'),activeCategoryLevel); 
2634     
2635  cleanElements(); 
2636     
2637  const categories = [] 
2638  temaIds.forEach(id => { 
2639    $.ajax({ 
2640      url : '/o/senac-content-services/category/' + id, 
2641      type : 'get', 
2642      async: false 
2643    }) 
2644    .done((category) => { 
2645      activeCategory = JSON.parse(category) 
2646      categories.push(activeCategory) 
2647    }) 
2648  }); 
2649 
2650  displayCursosPorTema(categories) 
2651
2652 
2653// evento de click nos subtemas 
2654$("#filtro-temas-nivel-2") 
2655.on("click", ".subtema", function(ev, trigger) { 
2656   
2657  $(this).siblings('.todos').removeClass("subtema-ativo") 
2658 
2659  if(this.classList.contains('todos') || (this.classList.contains('subtema-ativo') && !trigger)) { 
2660    removeFiltersLevel2() 
2661    return 
2662  } else { 
2663    hideOthersLevel2(this) 
2664    this.classList.add('subtema-ativo') 
2665
2666 
2667  defaultSubtema(this, [$(this).data('tema')]) 
2668}) 
2669 
2670$("#filtro-temas-nivel-3") 
2671.on("click", ".subtema", function(ev) {   
2672   
2673  $(this).siblings('.todos').removeClass("subtema-ativo") 
2674 
2675  if(this.classList.contains('todos')) { 
2676    removeFiltersLevel3() 
2677    return 
2678
2679   
2680  const isActived = this.classList.contains('subtema-ativo') 
2681  if(isActived) 
2682    this.classList.remove('subtema-ativo') 
2683  else 
2684    this.classList.add('subtema-ativo') 
2685   
2686 
2687  const anyActive = !!document.querySelector("#filtro-temas-nivel-3 a.subtema-ativo") 
2688  if(!anyActive) 
2689    removeFiltersLevel3() 
2690 
2691  const temaIds = [] 
2692  document.querySelectorAll("#filtro-temas-nivel-3 a.subtema-ativo:not(.todos)") 
2693  .forEach(a => temaIds.push(a.getAttribute('data-tema'))) 
2694 
2695  defaultSubtema(this, temaIds) 
2696}) 
2697 
2698/* Click no botao todos */ 
2699$(".container").on("click", ".todos:not(.subtema.todos)", function() { 
2700	 
2701	atualizaUrlBrowser(0); 
2702	 
2703	activeCategory = 'all'; 
2704	activeCategoryLevel = $(this).data('nvl'); 
2705	offset = 0; 
2706 
2707	/* Limpa dados de subtemas que possam ter sido criados na navegação */ 
2708	cleanElements(); 
2709 
2710  $('#tema-atual').show() 
2711	$('#tema-atual h2').text(todosText); 
2712	 
2713	// Esconde a div com subtemas 
2714	$('#filtro-temas-nivel-2').empty(); 
2715	$('#filtro-temas-nivel-2').addClass('d-none'); 
2716 
2717	displayCursosPorTema(); 
2718 
2719}); 
2720 
2721/* Limpa a tela para exibição de novos cursos */ 
2722function cleanElements() { 
2723 
2724	$('#subtemas-lista').empty(); 
2725		 
2726	$('#cursos-por-categoria-container .cursos-por-categoria').remove(); 
2727	$('#subtema-atual').empty(); 
2728	$('#cursos-por-subtema-container #subsubtemas-lista').empty(); 
2729	$('#cursos-por-subtema-container .ssp-card-curso').remove(); 
2730	 
2731	$('#cursos-por-categoria-container').removeClass('d-none'); 
2732	$('#cursos-por-subtema-container').addClass('d-none'); 
2733
2734 
2735/* 
2736 * Armazena a navegação em cookies, se habilitado 
2737 */ 
2738$(document).on("click", ".ck-curso", function() { 
2739	 
2740	//Verifica se os alternadores estao selecionados e manipula o link do curso de acordo a eles. 
2741	urlFinal = new URL(window.location.origin + $(this).attr('href')); 
2742	let filtroInscricaoBolsa = false; 
2743	 
2744    if($("#inscricao-aberta input").is(":checked")){ 
2745      urlFinal.searchParams.set("inscricao", true); 
2746      filtroInscricaoBolsa = true; 
2747    }  
2748    if($("#bolsas-estudo input").is(":checked")){ 
2749      urlFinal.searchParams.set("bolsa", true); 
2750      filtroInscricaoBolsa = true; 
2751    }  
2752    $(this).attr('href', urlFinal.pathname + (filtroInscricaoBolsa ? "?"+urlFinal.searchParams : "")) 
2753	 
2754 
2755	//Verifica se o cookie está habilitado 
2756    if(getCookie('portalSenacCookie') != null){ 
2757    	 
2758		var articleId = $(this).data('ck'); 
2759		manageCookieArray(cookieName, articleId); 
2760		manageCookieArray('ck-cursos', articleId); 
2761
2762 
2763}); 
2764 
2765/* 
2766 * Exibe os cursos por tema, dependendo do nivel 
2767 */ 
2768function displayCursosPorTema(categories) {   
2769	hideMensagemSemCurso(); 
2770 
2771	// Verifica o nivel 
2772	switch (activeCategoryLevel) { 
2773 
2774	case 0: // exibe todos 
2775    $('#tema-atual').hide() 
2776		limit = 2; 
2777 
2778		$.each(temas.slice(offset, limit + offset), function(k, t) { 
2779			 
2780			if($('#cursos-por-categoria-'+t.categoryId).length == 0){ 
2781				var template = $('#cursos-por-categoria-template').clone(); 
2782				template.prop('id', 'cursos-por-categoria-'+t.categoryId); 
2783				template.removeClass('d-none'); 
2784				$('#cursos-por-categoria-container').append(template); 
2785
2786			 
2787			$.ajax( 
2788
2789						url : '/o/senac-content-services/category/' 
2790								+ t.categoryId, 
2791						type : 'get', 
2792            async: false 
2793					}).done(function(category) { 
2794						 
2795						var dadosCategoria = JSON.parse(category); 
2796						 
2797						//monta as divs para cada tcategoria 
2798						var templatePorCategoria = $('#cursos-por-categoria-'+dadosCategoria.categoryId); 
2799						templatePorCategoria.find('.tema-nome').text(dadosCategoria.name); 
2800						templatePorCategoria.find('.ver-todos-cursos-link').attr('data-nvl', 1); 
2801						templatePorCategoria.find('.ver-todos-cursos-link').attr('data-tema', dadosCategoria.categoryId); 
2802						templatePorCategoria.removeClass('d-none'); 
2803 
2804						cursosPorCategoriaModelo1(dadosCategoria); 
2805 
2806			}); 
2807		}); 
2808		 
2809		// Esconde botao carregar mais, se  necessário 
2810		 
2811		$('.section-carregar-mais').remove(); 
2812		 
2813		if (temas.length > limit + offset) 
2814			$('#cursos-por-categoria-container').append('<section style="padding: 30px 0; width:100%" class="section-carregar-mais"><div class="container"><a href="#a" class="ssp-section-tema__btn-ver-mais" id="carregar-mais" style="visibility:hidden"> Carregar mais unidades </a></div></section>'); 
2815			 
2816		break; 
2817 
2818	case 1: 
2819		limit = 2; 
2820 
2821		$('#tema-atual h2').text("O que você quer aprender nessa área?"); 
2822    $('#tema-atual').show() 
2823		 
2824		// Exibe os cursos dos subtemas do tema clicado percorrendo a lista de 
2825		// subtemas do tema clicado 
2826		if(subtemasStorage.get(activeCategory.categoryId) && subtemasStorage.get(activeCategory.categoryId).length > 0){ 
2827			 
2828			$.each(subtemasStorage.get(activeCategory.categoryId).slice(offset, 
2829					limit + offset), function(k, t) { 
2830				 
2831				if($('#cursos-por-categoria-'+t.categoryId).length == 0){ 
2832					var template = $('#cursos-por-categoria-template').clone(); 
2833					template.prop('id', 'cursos-por-categoria-'+t.categoryId); 
2834	 
2835					template.removeClass('d-none'); 
2836					 
2837					$('#cursos-por-categoria-container').append(template); 
2838
2839				 
2840				$.ajax( 
2841
2842							url : '/o/senac-content-services/category/' 
2843									+ t.categoryId, 
2844							type : 'get', 
2845            async: false 
2846						}).done(function(category) { 
2847							 
2848							var dadosCategoria = JSON.parse(category); 
2849							 
2850							//monta as divs para cada tcategoria 
2851							var templatePorCategoria = $('#cursos-por-categoria-'+dadosCategoria.categoryId); 
2852							templatePorCategoria.find('.tema-nome').text(dadosCategoria.name); 
2853							templatePorCategoria.find('.ver-todos-cursos-link').attr('data-nvl', 2); 
2854							templatePorCategoria.find('.ver-todos-cursos-link').attr('data-tema', dadosCategoria.categoryId); 
2855							templatePorCategoria.removeClass('d-none'); 
2856 
2857							cursosPorCategoriaModelo1(dadosCategoria); 
2858	 
2859				}); 
2860			}); 
2861			 
2862			// Esconde botao carregar mais, se  necessário 
2863			$('.section-carregar-mais').remove(); 
2864			 
2865			if (subtemasStorage.get(activeCategory.categoryId).length > limit + offset) 
2866				$('#cursos-por-categoria-container').append('<section style="padding: 30px 0; width:100%" class="section-carregar-mais"><div class="container"><a href="#a" class="ssp-section-tema__btn-ver-mais" id="carregar-mais" style="visibility:hidden"> Carregar mais unidades </a></div></section>'); 
2867			 
2868		}else{ 
2869			//Se nao tiver subtema, exibe o modelo 2 
2870			cursosPorCategoriaModelo2(); 
2871
2872 
2873		break; 
2874 
2875	case 2: // exibe cursos do nivel 2 
2876		limitTodosCursos = 16; 
2877		cursosPorCategoriaModelo2(); 
2878		break; 
2879		 
2880	case 3: 
2881		cursosPorCategoriaModelo3(categories); 
2882		break; 
2883
2884   
2885
2886 
2887/* 
2888 * Faz a exibição dos cursos quando se carrega a tela ou clica em 'Todos' 
2889 */ 
2890function cursosPorCategoriaModelo1(category) { 
2891 
2892	activeModeloExibicao = 1; 
2893  categoryWithoutCourse = [] 
2894  hideMensagemSemCurso() 
2895 
2896	var urlFinal = '/o/senac-content-services/cursosPorCategoriasComFiltrosBolsaECompra/' 
2897                + groupId + '/'  
2898                + filtrarInscricoesAbertas +'/' 
2899                + filtrarBolsaEstudo 
2900                + '/1/' 
2901                + '0/' 
2902                + limitCursos 
2903                + '?' 
2904                + 'categoryIds='+ category.categoryId + '&'  
2905                + 'categoryIds='+ categoryIdTipoCurso+ '&' 
2906                + 'categoryIds='+ categoryIdUnidade 
2907 
2908 
2909 
2910
2911			.ajax( 
2912
2913						url : urlFinal, 
2914						type : 'get', 
2915						beforeSend: function () { 
2916							loading('#cursos-por-categoria-'+category.categoryId+' .slider-curso'); 
2917
2918					}) 
2919			.done( 
2920					function(cursosPorCategoria) { 
2921 
2922						enableScroll(true); 
2923 
2924						cursosPorCategoria = JSON.parse(cursosPorCategoria); 
2925						 
2926						var totalCursos = cursosPorCategoria.total; 
2927						 
2928						//Se nao retornou cursos, deve esconder a div da categoria 
2929						if(totalCursos == 0){ 
2930							$('#cursos-por-categoria-'+category.categoryId).html(''); 
2931							 
2932							//essa classe tirar todo o padding da div, escondendo ela 
2933							$('#cursos-por-categoria-'+category.categoryId).removeClass('ssp-section'); 
2934							 
2935							if(isMobile){ 
2936								var $element = document.getElementById('cursos-por-categoria-container'); 
2937								var _elementPos = $element.offsetTop + 100; 
2938								var _scrollDown = _elementPos + (filtrarInscricoesAbertas == 1 || filtrarBolsaEstudo == 1 ? 300 : 1); 
2939								window.scrollTo(window.scrollX || window.pageXOffset, _scrollDown);//carrega os cursos 
2940								setTimeout(()=> window.scrollTo(window.scrollX || window.pageXOffset, _elementPos), 500);//mostra o primeiro 
2941								 
2942							}else{ 
2943								var _scrollDown = (window.scrollY || window.pageYOffset) + (filtrarInscricoesAbertas == 1 || filtrarBolsaEstudo == 1 ? 20 : 1); 
2944								window.scrollTo(window.scrollX || window.pageXOffset, _scrollDown); 
2945
2946            				updateMensagemSemCurso(); 
2947				      		return; 
2948						}else{ 
2949						 
2950							if(!$('#cursos-por-categoria-'+category.categoryId).hasClass('ssp-section')) 
2951								$('#cursos-por-categoria-'+category.categoryId).addClass('ssp-section'); 
2952								 
2953
2954						 
2955						var articles = []; 
2956			      		 
2957			      		 $.each(cursosPorCategoria.cursos, function(k, c){ 
2958			      			articles.push(c.articleId); 
2959			      		 }); 
2960			      		  
2961						    
2962			      		//Verifica a situação dos botoes de inscrições e bolsa 
2963						  $.ajax({ 
2964						        url :  '/o/senac-content-services/verificaBotoesInscricaoEBolsaPorUnidade/'+groupId+'/'+articles.join(',')+'/'+categoryIdUnidade, 
2965						        type : 'get', 
2966                    async: false 
2967						    })  
2968						    .done(function(infoBotoes){ 
2969						    	 
2970						    	enableScroll(true); 
2971						    	 
2972						    	if(infoBotoes.length > 0) { 
2973						    		 
2974									infoBotoes = JSON.parse(infoBotoes); 
2975 
2976									var template = $('#cursos-por-categoria-'+category.categoryId); 
2977									 
2978									$('#cursos-por-categoria-'+category.categoryId+' .slider-curso').empty(); 
2979 
2980									$.each(cursosPorCategoria.cursos, async function(k, curso) { 
2981										 
2982										var itemCurso = buildCardCurso(curso, infoBotoes, isMobile) 
2983										 
2984										template.append(itemCurso); 
2985			 
2986										template.find('.slider-curso').append(itemCurso); 
2987			 
2988									}); 
2989 
2990									updateMensagemSemCurso(); 
2991			 
2992									// chama o slider por categoria 
2993									if (isMobile){ 
2994										template.find('.slider-curso').css({"flex-wrap":"wrap"}); 
2995										 
2996										if($('.ssp-page-busca__section-resultado__ver-todos-mobile[data-tema="'+category.categoryId+'"]').length == 0){ 
2997											 
2998											//Exibe o link ver todos 
2999											//Adicionava o botão ver todos. Possível adição do código do card novo! 
3000											if(totalCursos > 4){ 
3001											template.find('.slider-curso').append('<a data-nvl="'+(activeCategoryLevel+1)+'" data-tema="'+category.categoryId+'" class="ssp-card-todos-cursos livre card-ver-todos-cursos-link" ><p>Conferir todos <br>os <span>cursos</span></p><i class="far fa-arrow-right"></i></a>') 
3002											} else { 
3003											$(".ver-todos-cursos-link[data-tema='"+category.categoryId+"']").addClass("ver-todos-no-click"); 
3004											}	 
3005
3006									}else{ 
3007										template.find('.slider-curso').addClass( 
3008											'slick-area slick-area--md-bleed slider-container slider-id-' 
3009													+ category.categoryId); 
3010										if(totalCursos > 11){ 
3011											template.find('.slider-curso').append('<a data-nvl="'+(activeCategoryLevel+1)+'" data-tema="'+category.categoryId+'" class="ssp-card-todos-cursos livre card-ver-todos-cursos-link" ><p>Conferir todos <br>os <span>cursos</span></p><i class="far fa-arrow-right"></i></a>')			 
3012										} else { 
3013											$(".ver-todos-cursos-link[data-tema='"+category.categoryId+"']").addClass("ver-todos-no-click"); 
3014
3015 
3016										$('.slider-id-' + category.categoryId).removeClass('slick-initialized') 
3017										sliderCurso('.slider-id-' + category.categoryId); 
3018
3019						    	}  
3020						    }) 
3021					}) 
3022 
3023			.fail(function(jqXHR, textStatus, msg) { 
3024				// alert(msg); 
3025			}) 
3026
3027 
3028/* 
3029 * Faz a exibição dos cursos quando se clica em temas nivel 2 
3030 */ 
3031function cursosPorCategoriaModelo2() { 
3032	 
3033	activeModeloExibicao = 2; 
3034  categoryWithoutCourse = [] 
3035  hideMensagemSemCurso() 
3036 
3037  $('#tema-atual').hide() 
3038	$("#tema-atual h2").html(''); 
3039	 
3040	// Busca os filhos (3 nivel) 
3041	$.ajax({ 
3042		url : '/o/senac-unidade-services/subtemasPorTipoCursoETemaEUnidade/'+ groupId+ '/'+ activeCategory.categoryId+ '/'+ tipoCursoNome+'/'+categoryIdUnidade, 
3043		type : 'get', 
3044		data : {} 
3045		}).done(function(subtemas) { 
3046			 
3047			enableScroll(true); 
3048 
3049			subtemas = JSON.parse(subtemas); 
3050			 
3051      let subsubtemaLista = '' ;  
3052       
3053			if(subtemas.length > 0) { 
3054				subsubtemaLista = '<h3 class="ssp-title-filtrar-mais">Filtrar mais:</h3>'; 
3055        const btnTodos = '<a href="#a" '  
3056        + ' class="subtema btn-nivel-3 subtema-ativo todos" ' 
3057				+ '" data-nvl="2" >' 
3058				+ 'Todos' 
3059				+ '</a>' 
3060       
3061        subsubtemaLista += btnTodos 
3062
3063 
3064			$.each(subtemas, function(k, v) { 
3065				subsubtemaLista += '<a href="#a" class="subtema btn-nivel-3" data-tema="' 
3066						+ v.categoryId 
3067						+ '" data-nvl="3" >' 
3068						+ v.name 
3069						+ '</a>'; 
3070			}); 
3071 
3072      const containerSubTemaLista = document.createElement('div') 
3073      containerSubTemaLista.classList.add('row') 
3074      containerSubTemaLista.innerHTML = subsubtemaLista 
3075			$('#filtro-temas-nivel-3').html(containerSubTemaLista.outerHTML); 
3076			 
3077			if(subtemas.length > 0)  
3078				$('#filtro-temas-nivel-3').removeClass('d-none'); 
3079			else{ 
3080				cursosPorCategoriaModelo3(); 
3081				return; 
3082
3083				 
3084			// Exibe os cursos dos subtemas do tema clicado percorrendo a lista de 
3085			// subtemas do tema clicado 
3086			if(subtemas.length > 0){ 
3087				 
3088				$.each(subtemas.slice(offset, limit + offset), function(k, t) { 
3089					 
3090					if($('#cursos-por-categoria-'+t.categoryId).length == 0){ 
3091						var template = $('#cursos-por-categoria-template').clone(); 
3092						template.prop('id', 'cursos-por-categoria-'+t.categoryId); 
3093 
3094						template.removeClass('d-none'); 
3095						 
3096						$('#cursos-por-categoria-container').append(template); 
3097
3098		 
3099					$.ajax( 
3100
3101								url : '/o/senac-content-services/category/' 
3102										+ t.categoryId, 
3103								type : 'get', 
3104                async: false 
3105							}).done(function(category) { 
3106								 
3107								var dadosCategoria = JSON.parse(category); 
3108								 
3109								//monta as divs para cada tcategoria 
3110								var templatePorCategoria = $('#cursos-por-categoria-'+dadosCategoria.categoryId); 
3111								templatePorCategoria.find('.tema-nome').text(dadosCategoria.name); 
3112								templatePorCategoria.find('.ver-todos-cursos-link').attr('data-nvl', 3); 
3113								templatePorCategoria.find('.ver-todos-cursos-link').attr('data-tema', dadosCategoria.categoryId); 
3114								templatePorCategoria.removeClass('d-none'); 
3115 
3116								cursosPorCategoriaModelo1(dadosCategoria); 
3117		 
3118					}); 
3119				}); 
3120				 
3121				// Esconde botao carregar mais, se  necessario 
3122				$('.section-carregar-mais').remove(); 
3123				 
3124				if (subtemas.length > limit + offset) 
3125					$('#cursos-por-categoria-container').append('<section style="padding: 30px 0; width:100%" class="section-carregar-mais"><div class="container"><a href="#a" class="ssp-section-tema__btn-ver-mais" id="carregar-mais" style="visibility:hidden"> Carregar mais unidades </a></div></section>'); 
3126				 
3127			}else{ 
3128				//Se nao tiver subtema, exibe o modelo 3 
3129				cursosPorCategoriaModelo3(); 
3130
3131				 
3132	}) 
3133	 
3134
3135 
3136async function getCursosByCategory(category) { 
3137  if(activeCategory == 'all') 
3138    return [] 
3139 
3140  var urlFinal = '/o/senac-content-services/cursosPorCategoriasComFiltrosBolsaECompra/' 
3141                + groupId + '/'  
3142                + filtrarInscricoesAbertas +'/' 
3143                + filtrarBolsaEstudo 
3144                + '/1/' 
3145                + offsetTodosCursos +'/' 
3146                + (limitTodosCursos + offsetTodosCursos) 
3147                + '?' 
3148                + 'categoryIds='+ category.categoryId + '&'  
3149                + 'categoryIds='+ categoryIdTipoCurso+ '&' 
3150                + 'categoryIds='+ categoryIdUnidade 
3151 
3152    return new Promise((resolve) => { 
3153      $.ajax({ 
3154        url : urlFinal, 
3155        type : 'get', 
3156        data : {}, 
3157        async: false, 
3158        beforeSend: function () { 
3159          var totalItens = $('#curso-sem-slick .slick-area__item').length; 
3160          if(totalItens > 0){ 
3161            $('#curso-sem-slick .slick-area__item').each(function(){ 
3162              if(!$.trim($(this).html()).length) 
3163                $(this).remove(); 
3164            }) 
3165
3166
3167      }) 
3168      .done((data) => resolve(JSON.parse(data).cursos)) 
3169    }) 
3170
3171/* 
3172 * Faz a exibição dos cursos quando se clica em temas nivel 3 
3173 */ 
3174async function cursosPorCategoriaModelo3(categories) {   
3175	activeModeloExibicao = 3; 
3176  categoryWithoutCourse = [] 
3177  hideMensagemSemCurso() 
3178 
3179	//Se já estiver carregando não deixa juntar várias chamadas 
3180	if($('#loading-todos-cursos').length > 0) return; 
3181	 
3182	//Loading 
3183	$('#cursos-por-categoria-container').append('<div id="loading-todos-cursos" style="width:100%; text-align:center">'+ 
3184	'<div class="ssp-loader-content">'+ 
3185	'<div class="ssp-loader"></div>'+ 
3186	'<p class="ssp-loader-text">Carregando...</p>'+ 
3187	'</div>'+ 
3188	'</div>'); 
3189  $("#tema-atual").hide() 
3190	$("#tema-atual h2").html(''); 
3191	   
3192  categories = categories && categories.length ? categories : [activeCategory] 
3193   
3194  const cursosPorSubtema = [] 
3195  var templateContainer = $('#cursos-por-subtema-container'); 
3196  templateContainer.find('#curso-sem-slick').empty(); 
3197 
3198  for (let index = 0; index < categories.length; index++) { 
3199    const category = categories[index]; 
3200     
3201    const cursosEncontrados = await getCursosByCategory(category) 
3202     
3203    if(!cursosEncontrados || !cursosEncontrados.length) 
3204      categoryWithoutCourse.push(category) 
3205 
3206    cursosEncontrados.forEach(cEncontrado => { 
3207      if(!cursosPorSubtema.filter(c => c.articleId == cEncontrado.articleId).length) 
3208	  		cursosPorSubtema.push(cEncontrado) 
3209    })     
3210
3211               
3212  $('.ssp-loader-content').parent().remove(); 
3213   
3214  if(!cursosPorSubtema.length) { 
3215	  updateMensagemSemCurso() 
3216    enableScroll(true) 
3217    return 
3218
3219 
3220  var totalCursos = cursosPorSubtema.total;   
3221  var articles = []; 
3222         
3223  $.each(cursosPorSubtema, function(k, c){ 
3224    articles.push(c.articleId); 
3225  }); 
3226   
3227  //Verifica a situação dos botoes de inscrições e bolsa 
3228  $.ajax({ 
3229    url :  '/o/senac-content-services/verificaBotoesInscricaoEBolsaPorUnidade/'+groupId+'/'+articles.join(',')+'/'+categoryIdUnidade, 
3230    type : 'get', 
3231    async: false 
3232  })  
3233  .done(async function(infoBotoes){ 
3234           
3235    if(infoBotoes.length > 0) { 
3236       
3237      infoBotoes = JSON.parse(infoBotoes); 
3238 
3239      for (let index = 0; index < cursosPorSubtema.length; index++) { 
3240        const curso = cursosPorSubtema[index]; 
3241         
3242        var itemCurso = buildCardCurso(curso, infoBotoes, isMobile) 
3243         
3244        itemCurso.addClass('card-curso-nivel-2'); 
3245 
3246        // procura a div criada e adiciona os cursos 
3247        templateContainer.find('#curso-sem-slick').append(itemCurso); 
3248
3249       
3250      templateContainer.removeClass('d-none'); 
3251         
3252      var totalCursosExibicao = $('#curso-sem-slick .slick-area__item').length; 
3253       
3254      // Esconde botao carregar mais, se  necessário 
3255      $('.section-carregar-mais').remove(); 
3256       
3257      if (totalCursosExibicao < totalCursos)  
3258        $('#cursos-por-subtema-container').append('<section style="padding: 30px 0; width:100%" class="section-carregar-mais"><div class="container"><a href="#a" class="ssp-section-tema__btn-ver-mais" id="carregar-mais" style="visibility:hidden"> Carregar mais unidades </a></div></section>'); 
3259
3260 
3261  }) 
3262 
3263  enableScroll(true) 
3264
3265 
3266function montaTextoTipoCursoParaCard(curso){ 
3267	 
3268	var tipoCursoNomeFinal = curso.tipoCursoNome + " ¿ " + curso.formatos[0].name;	                 			  
3269 
3270	if(curso.tipoCursoNome == "Livre") 
3271		tipoCursoNomeFinal = "Livre"; 
3272		//tipoCursoNomeFinal = "Curso " + curso.tipoCursoNome + " ¿ " + curso.formatos[0].name; 
3273	 
3274	return tipoCursoNomeFinal; 
3275
3276 
3277//ao final de todos os ajax, se não houver curso na pag por causa dos filtros, exibimos mensagem de nenhum curso 
3278$(document).ajaxStop(function () { 
3279  $(".card-curso-nivel-2").each(function () { 
3280    if($(this).children().length == 0) 
3281      $(this).remove() 
3282  }); 
3283});	 
3284 
3285function hideMensagemSemCurso() { 
3286	const $msg = $("#filtroSemCurso"); 
3287	if(!$msg.hasClass('d-none')) $msg.addClass('d-none'); 
3288
3289function updateMensagemSemCurso() { 
3290	 
3291	if($(".slick-area__item").not('.cursos-recentes-card').not('.d-none').length > 0 || $('#curso-sem-slick .slick-area__item').length > 0){ 
3292		hideMensagemSemCurso(); 
3293		return; 
3294
3295 
3296	let htmlSemCurso = '' 
3297	 
3298	switch (getCurrentLevel()) { 
3299	case 1: 
3300	case 2: 
3301		htmlSemCurso = getTextoSemCurso(filtrarBolsaEstudo,filtrarInscricoesAbertas,activeCategory.name) 
3302		$(".ssp-bolsa-formulario__card-aviso-texto").html(htmlSemCurso); 
3303		break; 
3304 
3305	case 3: 
3306		categoryWithoutCourse 
3307		.forEach(category => { 
3308		const el = document.querySelector('[data-tema="' + category.categoryId + '"]') 
3309		if(el) { 
3310			const temaName = el.text 
3311			htmlSemCurso += getTextoSemCurso(filtrarBolsaEstudo, filtrarInscricoesAbertas, temaName) 
3312
3313		}) 
3314		if(!htmlSemCurso) 
3315		htmlSemCurso = getTextoSemCurso(filtrarBolsaEstudo,filtrarInscricoesAbertas,activeCategory.name) 
3316 
3317		$(".ssp-bolsa-formulario__card-aviso-texto").html(htmlSemCurso); 
3318		break; 
3319 
3320	default: 
3321		break; 
3322
3323	 
3324	if(htmlSemCurso){ 
3325		$("#filtroSemCurso").removeClass("d-none"); 
3326
3327
3328 
3329function getTextoSemCurso(filtroBolsa,filtroInsc,temaNome){ 
3330	 
3331	temaNome = typeof temaNome === "undefined" ? '' : 'de '+temaNome; 
3332	 
3333	if(filtroBolsa && filtroInsc) 
3334		return "<p>No momento, estamos sem cursos <strong><span id='nomeTemaSemCurso'>"+temaNome+"</span></strong> disponíveis para compra e com bolsas de estudo.<br>Selecione outras áreas para consultar bolsas ou <a href='https://www.sp.senac.br/bolsas-de-estudo'>confira bolsas disponíveis em diferentes cursos.</a></p>"; 
3335	else if(filtroBolsa) 
3336		return "<p>No momento, estamos sem cursos <strong><span id='nomeTemaSemCurso'>"+temaNome+"</span></strong> com bolsas de estudo.<br>Selecione outras áreas para consultar bolsas ou <a href='https://www.sp.senac.br/bolsas-de-estudo'>confira bolsas disponíveis em diferentes cursos.</a></p>";	 
3337	else if(filtroInsc) 
3338		return "<p>No momento, estamos sem cursos <strong><span id='nomeTemaSemCurso'>"+temaNome+"</span></strong> disponíveis para compra."; 
3339 
3340  return '' 
3341
3342 
3343/* 
3344 * Monta a lista de temas de curso livre no header da página 
3345 */ 
3346 
3347function carregaTemas() { 
3348 
3349
3350			.ajax( 
3351
3352						url : '/o/senac-unidade-services/temasPorTipoCursoEUnidade/'+groupId+'/'+tipoCursoNome+'/'+categoryIdUnidade, 
3353						type : 'get', 
3354            async: false 
3355					}) 
3356			.done( 
3357					function(temasLista) { 
3358            if(typeof temasLista != 'object') 
3359						  temasLista = JSON.parse(temasLista); 
3360 
3361						var temasObj = $('#temas'); 
3362 
3363
3364								.each( 
3365										temasLista, 
3366										function(k, tema) { 
3367											const icon = (categorias.filter(cat => cat.categoryId == tema.categoryId)[0] || {properties: {}}).properties.icon 
3368											temasObj 
3369													.append('<div class="ssp-section-tema__container-menu-item mega-menu"><a href="#a" class="tema" data-nvl="1" data-tema="' 
3370															+ tema.categoryId 
3371															+ '">' 
3372															+ '<i class="' + icon + '"></i>' 
3373															+ tema.name 
3374															+ '</a></div>'); 
3375 
3376											// Armazena os subtemas deste tema 
3377
3378													.ajax( 
3379
3380																url : '/o/senac-unidade-services/subtemasPorTipoCursoETemaEUnidade/'+ groupId+ '/'+ tema.categoryId+ '/'+ tipoCursoNome+'/'+categoryIdUnidade, 
3381																type : 'get', 
3382																data : {}, 
3383                                async: false 
3384															}) 
3385													.done( 
3386															function(subtemas) { 
3387																subtemasStorage 
3388																		.set( 
3389																				tema.categoryId, 
3390																				JSON 
3391																						.parse(subtemas)); 
3392 
3393															}); 
3394										}); 
3395 
3396						temas = temasLista; 
3397										 
3398						displayCursosPorTema(); 
3399 
3400						$('.todos').addClass('ativo'); 
3401  
3402					}).fail(function(jqXHR, textStatus, msg) { 
3403				// alert(msg); 
3404			}); 
3405
3406 
3407/* 
3408 * Exibe a lista de subtemas no mouse over do tema 
3409 */ 
3410function displaySubTemasLista(categoryId) { 
3411	$('#filtro-temas-nivel-2').empty(); 
3412	$('#filtro-temas-nivel-2').removeClass('d-none'); 
3413	 
3414  const btnTodos = $('<a href="#a" '  
3415        + ' class="subtema btn-nivel-3 subtema-ativo todos" ' 
3416				+ '" data-nvl="2" >' 
3417				+ 'Todos' 
3418				+ '</a>') 
3419 
3420  $('#filtro-temas-nivel-2').append(btnTodos); 
3421 
3422  if(!subtemasStorage.get(activeCategory.categoryId) || !subtemasStorage.get(activeCategory.categoryId).length) 
3423    $('#filtro-temas-nivel-2 .subtema-ativo.todos').hide() 
3424         
3425	$.each(subtemasStorage.get(activeCategory.categoryId), function(k, t) { 
3426		$('#filtro-temas-nivel-2').append('<a href="#a" class="subtema btn-nivel-3" data-tema="' 
3427				+ t.categoryId 
3428				+ '" data-nvl="2" >' 
3429				+ t.name 
3430				+ '</a>'); 
3431	}); 
3432
3433 
3434//Carregar mais 
3435$(window).scroll(function() { 
3436	 
3437	var element = document.querySelector('#carregar-mais'); 
3438	 
3439	if(element != null && !carregandoMais){ 
3440		var position = element.getBoundingClientRect(); 
3441	 
3442		// carregar maios 
3443		if(position.top >= 0 && position.bottom <= window.innerHeight) { 
3444			// enableScroll(false); 
3445			var qtCardsSubTema = $('#cursos-por-subtema-container .ssp-card-curso').not('.d-none').length; 
3446			if(qtCardsSubTema > 0){ 
3447				offsetTodosCursos = qtCardsSubTema; 
3448				$('.section-carregar-mais').remove(); 
3449			}else{ 
3450				offset = $('.cursos-por-categoria').not('.d-none').length; 
3451
3452 
3453      const urlParamsTemaNv3 = new URLSearchParams(window.location.search); 
3454      urlParamTemaNv3 = urlParamsTemaNv3.get('q'); 
3455 
3456      if(!urlParamTemaNv3) 
3457			  displayCursosPorTema();			 
3458
3459
3460	 
3461}); 
3462 
3463function enableScroll(enable) { 
3464    if(enable === false) document.body.classList.add("stop-scrolling") 
3465    else document.body.classList.remove("stop-scrolling"); 
3466    carregandoMais = !enable; 
3467
3468 
3469function hideOthersLevel1(elementShow){ 
3470  document.querySelectorAll('#temas .ssp-section-tema__container-menu-item a') 
3471  .forEach(a => a != elementShow ? a.classList.add('d-none') : undefined) 
3472
3473 
3474function hideOthersLevel2(elementShow){ 
3475	document.querySelectorAll('#filtro-temas-nivel-2 a') 
3476	.forEach(a => a != elementShow ? a.classList.add('d-none') : undefined) 
3477
3478 
3479function hideOthersLevel3(elementShow){ 
3480	document.querySelectorAll('#filtro-temas-nivel-3 a') 
3481	.forEach(a => a != elementShow ? a.classList.add('d-none') : undefined) 
3482
3483 
3484function showAllLevel1(){ 
3485  document.querySelectorAll('#temas .ssp-section-tema__container-menu-item a') 
3486  .forEach(btn => { 
3487    btn.classList.remove('d-none') 
3488    btn.classList.remove('ativo') 
3489    btn.classList.remove('tema-ativo') 
3490  }) 
3491
3492 
3493function showAllLevel2(){ 
3494  document.querySelectorAll('#filtro-temas-nivel-2 a') 
3495  .forEach(btn => { 
3496    btn.classList.remove('d-none') 
3497    btn.classList.remove('subtema-ativo') 
3498  }) 
3499
3500 
3501function showAllLevel3(){ 
3502  document.querySelectorAll('#filtro-temas-nivel-3 a') 
3503  .forEach(btn => { 
3504    btn.classList.remove('d-none') 
3505    btn.classList.remove('subtema-ativo') 
3506  }) 
3507
3508 
3509function removeFiltersLevel1() { 
3510  showAllLevel1() 
3511 
3512  const btnActived = document.querySelector('#temas .ssp-section-tema__container-menu-item .todos') 
3513  btnActived.click() 
3514
3515 
3516function removeFiltersLevel2() { 
3517  const btnActived = document.querySelector('#temas .tema-ativo') 
3518  btnActived.click() 
3519 
3520  new Promise(() => btnActived.click()) 
3521
3522 
3523function removeFiltersLevel3() { 
3524  const btnActivedNivel2 = document.querySelector('#filtro-temas-nivel-2 .subtema-ativo:not(.todos)') 
3525  const temaNivel2 = btnActivedNivel2.getAttribute('data-tema') 
3526 
3527  removeFiltersLevel2() 
3528 
3529  const intervalNível2 = setInterval(() => { 
3530    const btn = document.querySelector('[data-tema="' + temaNivel2 + '"]') 
3531 
3532    if(btn) { 
3533      btn.click() 
3534      $('.ssp-loader-content').parent().remove(); 
3535      clearInterval(intervalNível2) 
3536
3537  }, 200); 
3538
3539 
3540function clickTema(categoryId) { 
3541  return new Promise(resolve => { 
3542    const interval = setInterval(() => { 
3543      const el = document.querySelector('[data-tema="' + categoryId + '"]') 
3544   
3545      if(el) { 
3546        el.click() 
3547        clearInterval(interval) 
3548        resolve() 
3549
3550    }, 200); 
3551  }) 
3552
3553 
3554function getSubtemas(categoryFriendlyUrl, parentCategoryId) { 
3555  return $.ajax({ 
3556    url : '/o/senac-unidade-services/categoriaPorFriendlyURL/'+categoryFriendlyUrl+"/"+(parentCategoryId || 0), 
3557    type : 'get', 
3558    dataType: 'json', 
3559    async: false 
3560  }) 
3561
3562 
3563function getCategoriesIdNivel3Actived() { 
3564  const categories = [] 
3565 
3566  document.querySelectorAll("#filtro-temas-nivel-3 a.subtema-ativo") 
3567  .forEach(a => categories.push(parseInt(a.getAttribute('data-tema')))) 
3568 
3569  return categories 
3570
3571 
3572function getCurrentLevel() { 
3573  let level = 1 
3574   
3575  if(document.querySelector('#temas .tema-ativo')) 
3576    level = 1 
3577 
3578  if(document.querySelector('#filtro-temas-nivel-2 .subtema-ativo')) 
3579    level = 2 
3580   
3581  if(document.querySelector('#filtro-temas-nivel-3 .subtema-ativo')) 
3582    level = 3 
3583 
3584  return level 
3585
3586 
3587 
3588</script>