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