An error occurred while processing the template.
The following has evaluated to null or missing:
==> cpCatalogEntry [in template "49724393377863#35335#5420685" at line 55, column 26]
----
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: cpDefinitionId = cpCatalogEntry.getCP... [in template "49724393377863#35335#5420685" at line 55, column 9]
----
1<#assign
2 defaultImgMap = {
3 "Default": {
4 "image": "/documents/d/guest/default_logo.png",
5 "color": "gray"
6 },
7 "Livestream": {
8 "image": "/documents/d/guest/icon-desktop-svg",
9 "color": "purple"
10 },
11 "Recorded":{
12 "image": "/documents/d/guest/icon-play",
13 "color": "red"
14 },
15 "In Person":{
16 "image": "/documents/d/guest/icon-persons",
17 "color": "green"
18 },
19 "Download": {
20 "image": "/documents/d/guest/icon-download-black",
21 "color": "border-color"
22 },
23 "Self-paced": {
24 "image": "/documents/d/guest/icon-mouse-white",
25 "color": "black"
26 },
27 "Bank subscription": {
28 "image": "/documents/d/guest/icon-bank",
29 "color": "blue"
30 }
31 }
32/>
33
34<!--Parent Assignment-->
35<#setting url_escaping_charset='UTF-8'>
36<#assign
37 commerceContext = renderRequest.getAttribute("COMMERCE_CONTEXT")
38 account = commerceContext.getAccountEntry()
39 accountId = account.getAccountEntryId()
40 chanelId = commerceContext.getCommerceChannelId()
41
42 attendenceWebinarStructuredContentId = 1087266
43 attendenceSeminarStructuredContentId = 237233
44 cpeWebinarStructuredContentId = 237244
45 cpeSeminarStructuredContentId = 1087351
46 cpePersonStructuredContentId = 1087403
47 cocStructuredContentId = 237255
48 policyStructuredContentId = 237266
49 recordingStructuredContentId = 1087301
50 videoStructuredContentId = 1087312
51 nasbaStructuredContentId = 1087327
52/>
53
54<#assign
55 cpDefinitionId = cpCatalogEntry.getCPDefinitionId()
56 productId = cpCatalogEntry.getCProductId()
57 productName = cpCatalogEntry.getName()
58 productShortDescription = cpCatalogEntry.getShortDescription()
59 productDescription = cpCatalogEntry.getDescription()
60 friendlyURL = cpContentHelper.getFriendlyURL(cpCatalogEntry, themeDisplay)
61 defaultImageURL = cpContentHelper.getDefaultImageFileURL(accountId, cpDefinitionId)
62 defaultImageFileVersion = cpContentHelper.getCPDefinitionImageFileVersion(cpDefinitionId, request)
63 productDetail = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/${chanelId}/products/${productId}?accountId=${accountId}&nestedFields=categories,productSpecifications")
64 defaultImageURL = productDetail.urlImage?replace('https://localhost', '')
65 fileEntryIdAttr = 'data-fileentryid="' + defaultImageFileVersion.fileEntryId + '"'
66 specifications = productDetail.productSpecifications
67 customFields = productDetail.customFields
68 productCategories = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/${chanelId}/products/${productId}/categories?pageSize=100")
69 categories = productCategories.items
70 extRefCode = productDetail.externalReferenceCode
71 filterValue = extRefCode?url
72 url = "/c/agendas/?fields=informationRawText,information,startTime,endTime&filter=r_productAgendaItem_CPDefinitionERC%20eq%20%27${filterValue}%27&sort=startTime"
73 agendaData = restClient.get(url)
74 productsku= restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/${chanelId}/products/${productId}/skus?pageSize=40")
75 productOptions= restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/${chanelId}/products/${productId}/product-options?pageSize=40")
76
77 attendenceWebinar= restClient.get("/headless-delivery/v1.0/structured-contents/${attendenceWebinarStructuredContentId}")
78 attendenceSeminar= restClient.get("/headless-delivery/v1.0/structured-contents/${attendenceSeminarStructuredContentId}")
79 cpeWebinar= restClient.get("/headless-delivery/v1.0/structured-contents/${cpeWebinarStructuredContentId}")
80 cpeSeminar= restClient.get("/headless-delivery/v1.0/structured-contents/${cpeSeminarStructuredContentId}")
81 cpePerson= restClient.get("/headless-delivery/v1.0/structured-contents/${cpePersonStructuredContentId}")
82 coc= restClient.get("/headless-delivery/v1.0/structured-contents/${cocStructuredContentId}")
83 policy= restClient.get("/headless-delivery/v1.0/structured-contents/${policyStructuredContentId}")
84 recording= restClient.get("/headless-delivery/v1.0/structured-contents/${recordingStructuredContentId}")
85 video= restClient.get("/headless-delivery/v1.0/structured-contents/${videoStructuredContentId}")
86 nasba= restClient.get("/headless-delivery/v1.0/structured-contents/${nasbaStructuredContentId}")
87
88 filter = "productId eq ${productId}"
89 encodedFilter = filter?url
90 contentMappingURL = "/c/productcontentlinks/?filter=" + encodedFilter
91 contentMapping = restClient.get(contentMappingURL)
92 infoObj = {}
93 tags = productDetail.tags
94 featuredSpecificationKeys = ["fit", "weight", "material"]
95 eventTypeName = ""
96 startDate = ""
97 startTime = ""
98 endDate = ""
99 endTime = ""
100 deliverymethodArray = [{"id": "", "value": ""}]
101 audiencemethodArray = [{"id": "", "value": ""}]
102 nasbadeliverymethodArray = [{"id": "", "value": ""}]
103 locationAddress = ""
104 hasSkus = "false"
105/>
106
107<!-- SKU Area -->
108 <#assign priceFormatted = ""/>
109 <#assign displayMapValue = {} />
110 <#assign displayMapName = {} />
111 <#assign defaultSKUKey = ''/>
112 <#assign dropdownKeys = ["nonmember:live","nonmember:ondemand","nonmember:live-ondemand"] />
113 <#assign memberdropdownKeys = ["icba-member:live","icba-member:ondemand","icba-member:live-ondemand"] />
114 <#assign tableColumnNames = [] />
115 <#assign tableRowNames = [] />
116 <#assign numberOfOptions = 0 />
117 <#assign priceList = [] />
118
119 <!-- Create Option Map for multiple option products-->
120<#assign productOptionMap = {"unlimited-webinar-pass:live": "",
121"unlimited-webinar-pass:ondemand": "",
122"unlimited-webinar-pass:live-ondemand": "",
123"nonmember:live": "",
124"nonmember:ondemand": "",
125"nonmember:live-ondemand": "",
126"icba-member:live": "",
127"icba-member:ondemand": "",
128"icba-member:live-ondemand": "",
129"bank-director-program-subscriber:live": "",
130"bank-director-program-subscriber:ondemand": "",
131"bank-director-program-subscriber:live-ondemand": "",
132"icba-bank-director-program-subscriber:live": "",
133"icba-bank-director-program-subscriber:ondemand": "",
134"icba-bank-director-program-subscriber:live-ondemand": ""} />
135
136<!-- Create Option Map for single Option products-->
137<#assign productOptionMapSingle = {"unlimited-webinar-pass": "",
138"nonmember": "",
139"icba-member": "",
140"bank-director-program-subscriber": "",
141"icba-bank-director-program-subscriber": "",
142"nonbanker": ""} />
143
144<#assign productskuJson = jsonFactoryUtil.createJSONObject(productsku)/>
145 <#if productskuJson?has_content && productskuJson.has("items")>
146 <#assign itemsArray = productskuJson.getJSONArray("items")/>
147<#if itemsArray?has_content && itemsArray.length() gt 0>
148 <#assign hasSkus = "true">
149 <#list 0..itemsArray.length() - 1 as index>
150 <#if itemsArray.getJSONObject(index)?has_content>
151 <#assign item = itemsArray.getJSONObject(index) />
152 <#assign price = item.price.priceFormatted>
153 <#assign ccustomFields = item.getJSONArray("customFields") />
154 <#assign urlValue = ""/>
155 <#if ccustomFields?has_content>
156 <#list 0..ccustomFields.length() - 1 as j>
157 <#assign ccustomField = ccustomFields.getJSONObject(j) />
158 <#assign urlValue = ccustomField.getJSONObject("customValue").getString("data")/>
159 </#list>
160 </#if>
161 <#assign skuOptions = item.getJSONArray("skuOptions") />
162 <#if skuOptions?has_content>
163 <#assign nameKey = "" />
164 <#assign numberOfOptions = skuOptions.length() />
165 <#if skuOptions.length() != 1 >
166 <!-- Handle Product with Multiple Options to create matrix table -->
167 <#list 0..skuOptions.length() - 1 as i>
168 <#assign skuOption = skuOptions.getJSONObject(i) />
169 <#assign skuOptionKey = skuOption.getString("skuOptionKey") />
170 <#if skuOptionKey == "registration-options">
171 <#assign skuOptionValueKey = skuOption.skuOptionValueKey />
172 <#list 0..skuOptions.length() - 1 as j>
173 <#assign subskuOption = skuOptions.getJSONObject(j) />
174 <#assign subskuOptionKey = subskuOption.skuOptionKey />
175 <#if subskuOptionKey != skuOptionKey>
176 <#assign displayName = subskuOption.skuOptionValueNames?remove_beginning('["')?remove_ending('"]') />
177 <#assign rowdisplayName = skuOption.skuOptionValueNames?remove_beginning('["')?remove_ending('"]') />
178 <#if !tableRowNames?seq_contains(rowdisplayName) >
179 <#assign tableRowNames = tableRowNames + [rowdisplayName] />
180 </#if>
181 <#if !tableColumnNames?seq_contains(displayName) >
182 <#assign tableColumnNames = tableColumnNames + [displayName] />
183 </#if>
184 <#assign priceList = priceList + [price] />
185 <#assign skukey = skuOptionValueKey + ":" + subskuOption.skuOptionValueKey />
186 <#assign productOptionMap = productOptionMap + { skukey: price }>
187 <#assign displayName = subskuOption.skuOptionValueNames?remove_beginning('["')?remove_ending('"]') />
188 <#assign displayMapValue += {skukey:urlValue} />
189 <#assign displayMapName += {skukey:displayName} />
190 <#assign defaultSKUKey = skukey/>
191 </#if>
192 </#list>
193
194 </#if>
195 </#list>
196 <!-- Handle products with a single SKU -->
197 <#else>
198 <#if !tableColumnNames?seq_contains("Price") >
199 <#assign tableColumnNames = tableColumnNames + ["Price"] />
200 </#if>
201 <#list 0..skuOptions.length() - 1 as i>
202 <#assign skuOption = skuOptions.getJSONObject(i) />
203 <#assign skuOptionKey = skuOption.getString("skuOptionKey") />
204 <#assign skuOptionValueKey = skuOption.skuOptionValueKey />
205 <#assign rowdisplayName = skuOption.skuOptionValueNames?remove_beginning('["')?remove_ending('"]') />
206 <#if !tableRowNames?seq_contains(rowdisplayName) >
207 <#assign tableRowNames = tableRowNames + [rowdisplayName] />
208 </#if>
209 <#assign priceList = priceList + [price] />
210 <#assign skukey = skuOptionValueKey />
211 <#assign displayMapValue += {skukey:urlValue} />
212 <#assign displayMapName += {skukey:rowdisplayName} />
213 <#assign defaultSKUKey = skukey/>
214 <#assign productOptionMapSingle = productOptionMapSingle + { skukey: price }>
215 </#list>
216 </#if>
217 </#if>
218 </#if>
219 </#list>
220 </#if>
221</#if>
222
223<!-- Category area-->
224<#assign isInstitute = "false" />
225<#assign isSeminar = "false" />
226<#assign isForum = "false" />
227<#assign isLivestream = "false" />
228<#assign isOnlineCourse = "false" />
229<#assign isInPerson = "false" />
230<!-- Predefine all needed variables so they persist across scopes -->
231<#assign start = "", end = "", startDateStr = "", endDateStr = "", startTime = "", endTime = "", year = "", dateDisplay = "", timeDisplay = "", locationDisplay = "" />
232<#assign isWebinar = "false" />
233<#assign isEvent = "false" />
234<#assign isPerson = "false" />
235<#assign isPriceTypeFree = "false" />
236<#assign isPriceTypeSubs = "false" />
237<#assign isPriceTypeMB = "false" />
238
239
240<!-- Ends -->
241<#if categories?has_content>
242 <#list categories as category>
243 <#if category.vocabulary?replace(' ', '') = 'deliverymethod'>
244 <#assign deliverymethodArray += [{"id": category.id, "value": category.name}] />
245 <#elseif category.vocabulary?replace(' ', '') = 'icbaaudience'>
246 <#assign audiencemethodArray += [{"id": category.id, "value": category.name}] />
247 <#elseif category.vocabulary?replace(' ', '') = 'nasbadeliverymethod'>
248 <#assign nasbadeliverymethodArray += [{"id": category.id, "value": category.name}] />
249 <#else>
250 <#assign infoObj = infoObj + {category.vocabulary?replace(' ', ''): {"id": category.id, "value": category.name}} />
251 </#if>
252 </#list>
253 <#assign infoObj = infoObj + {"deliverymethod": deliverymethodArray} />
254 <#assign infoObj = infoObj + {"icbaaudience": audiencemethodArray} />
255 <#assign infoObj = infoObj + {"nasbadeliverymethod": nasbadeliverymethodArray} />
256</#if>
257
258<#list customFields as customField>
259 <!-- ${customField.name} -->
260 <#assign infoObj = infoObj + {(customField.name): customField.customValue.data} />
261</#list>
262
263<#if categories?has_content>
264 <#list categories as category>
265 <#if category.vocabulary = 'price type' && category.name == "Free">
266 <#assign isPriceTypeFree = "true" />
267 </#if>
268 <#if category.vocabulary = 'price type' && category.name == "Subscription">
269 <#assign isPriceTypeSubs = "true" />
270 </#if>
271 <#if category.vocabulary = 'price type' && category.name == "Member Benefit">
272 <#assign isPriceTypeMB = "true" />
273 </#if>
274 <#if category.vocabulary = 'delivery method' && category.name = 'In Person'>
275 <#assign isInPerson = "true" />
276 </#if>
277 <#if category.vocabulary = 'delivery method' && category.name = 'Livestream'>
278 <#if infoObj["Event End Date"]?has_content>
279 <#assign end = infoObj["Event End Date"]?datetime("yyyy-MM-dd'T'HH:mm:ss'Z'") />
280 <#assign today = .now?datetime> <!-- Today's date without time -->
281 <#assign showLiveStream = end < today />
282 <!-- Ensure 'end' is valid before performing the comparison -->
283 <#if !showLiveStream>
284 <#assign isLivestream = "true" />
285 </#if>
286 </#if>
287 </#if>
288 <#if category.vocabulary = 'event type' && category.name = 'Institute'>
289 <#assign isInstitute = "true" />
290 </#if>
291
292 <#if category.vocabulary = 'event type' && category.name = 'Seminar'>
293 <#assign isSeminar = "true" />
294 </#if>
295 <#if category.vocabulary = 'product type' && category.name = 'Webinar'>
296 <#assign isWebinar = "true" />
297 </#if>
298 <#if category.vocabulary = 'product type' && category.name = "Online Course">
299 <#assign isOnlineCourse = "true" />
300 </#if>
301 <#if category.vocabulary = 'product type' && category.name == "Event">
302 <#assign isEvent = "true" />
303 </#if>
304 <#if category.vocabulary = 'event type'>
305 <#assign eventTypeName = category.name />
306 </#if>
307 </#list>
308</#if>
309
310<#if isWebinar == "true">
311
312<div class="education-details-sec">
313 <div class="product-main-info">
314 <div class="top-row">
315
316 <#if infoObj.deliverymethod??>
317 <div class="education-card-categories">
318 <#list infoObj.deliverymethod as format>
319 <#if format.value != "">
320 <#if format.value == "Livestream">
321 <#if isLivestream == "true">
322 <span class="category">
323 <img src="${defaultImgMap[format.value]['image']}" alt="" class="category-img bg-${defaultImgMap[format.value]['color']}" />
324 <span class="category-name">${format.value}</span>
325 </span>
326 </#if>
327 <#else>
328 <span class="category">
329 <img src="${defaultImgMap[format.value]['image']}" alt="" class="category-img bg-${defaultImgMap[format.value]['color']}" />
330 <span class="category-name">${format.value}</span>
331 </span>
332 </#if>
333 </#if>
334 </#list>
335 </div>
336 </#if>
337 <!-- Only display certificate if -->
338 <#if isInstitute == "true">
339 <div class="certification-info">
340 <span class="certification-info-text">Earn Professional Certification</span>
341 <div class="certification-info-img"><i class="certification-info-img"></i></div>
342 </div>
343 </#if>
344 </div>
345 <h1 class="product-title product-title-name header-xl">${productName} I'm a Webinar</h1>
346 <#if infoObj.deliverymethod??>
347 <#list infoObj.deliverymethod as format>
348 <#if format.value != "">
349 <#if format.value == "In Person">
350 <#assign isPerson = "true"/>
351 </#if>
352 </#if>
353 </#list>
354 </#if>
355 <#if isOnlineCourse == "true" || isWebinar == "true" || isPerson == "true" || isEvent == "true">
356 <div class="meta-info">
357 <#-- Parse date and time -->
358 <#if infoObj["Event Start Date"]?has_content>
359
360 <#assign start = infoObj["Event Start Date"]?datetime("yyyy-MM-dd'T'HH:mm:ss'Z'")/>
361 <#assign startDateStr = start?string("MMM d")/>
362 <#assign year = start?string("yyyy")/>
363 <#assign startTime = start?string("h:mm") + " " + start?string("a")?lower_case/>
364 </#if>
365
366 <#if infoObj["Event End Date"]?has_content>
367 <#assign end = infoObj["Event End Date"]?datetime("yyyy-MM-dd'T'HH:mm:ss'Z'")/>
368 <#assign endDateStr = end?string("MMM d")/>
369 <#assign endTime = end?string("h:mm") + " " + end?string("a")?lower_case/>
370 </#if>
371 <ul>
372 <#if isWebinar == "true" || isEvent == "true">
373 <#if isLivestream == "true" || isPerson == "true">
374 <#if start?has_content && end?has_content>
375 <#if start?string("yyyyMMdd") == end?string("yyyyMMdd")>
376 <#assign dateDisplay = startDateStr + ", " + year/>
377 <#assign timeDisplay = startTime + "–" + endTime/>
378 <#else>
379 <#assign dateDisplay = startDateStr + "–" + endDateStr + ", " + year/>
380 <#assign timeDisplay = startTime/>
381 </#if>
382
383 </#if>
384 <li>${dateDisplay}</li>
385 <#if isWebinar == "true">
386 <li> | </li>
387 <li>${timeDisplay} <#if infoObj["Time Zone"]?? && infoObj["Time Zone"]?has_content>${infoObj["Time Zone"]?first}</#if></li>
388 </#if>
389 <li> | </li>
390 </#if>
391
392 </#if>
393 <#if isInPerson = "true">
394 <#if infoObj["Location City"]?has_content || infoObj["Location State"]?has_content>
395 <li>
396 </#if>
397 <#if infoObj["Location City"]?has_content>${infoObj["Location City"]}</#if>
398 <#if infoObj["Location State"]?has_content>, ${infoObj["Location State"]}</#if>
399 <#if infoObj["Location City"]?has_content || infoObj["Location State"]?has_content>
400 </li>
401 <li> | </li>
402 </#if>
403 </#if>
404 <#if isWebinar == "true">
405
406 <li class="fw-700">Webinar</li>
407 </#if>
408 <#if isOnlineCourse == "true">
409 <li class="fw-700">Online Course</li>
410 </#if>
411 <#if isEvent = "true">
412 <li class="fw-700">${eventTypeName}</li>
413 </#if>
414 <#if infoObj["CPE Credits"]?has_content>
415 <li> | </li>
416 <li class="credits-info">
417 <div class="education-card-credits">
418 CPE Credits: ${infoObj["CPE Credits"]}
419 </div>
420 </li>
421 </#if>
422 </ul>
423 </div>
424 </#if>
425
426 <div class="product-summary" aria-hidden="true">
427 ${productDescription}
428 </div>
429 <#if productDescription?has_content>
430 <a href="#" class="btn btn-link read-more-btn">Read More</a>
431 </#if>
432
433<!-- Populate Learning Format Dropdown if Webinar with Multiple Options -->
434 <#if displayMapValue?has_content && dropdownKeys?? && numberOfOptions gt 1 >
435 <#if isWebinar == "true" && !infoObj["Alternate URL"]?has_content>
436 <div class="product-delivery-wrapper">
437 <label for="delivery-method" class="label">Learning Format</label>
438 <select class="form-control" id="delivery-method">
439 <option value="">Select Learning Format</option>
440
441 <#if tableRowNames?seq_contains("ICBA Member")>
442 <#list memberdropdownKeys as k>
443 <#if displayMapValue[k]?? && displayMapName[k]??>
444 <option value="${displayMapValue[k]}">${displayMapName[k]}</option>
445 </#if>
446 </#list>
447 <#elseif tableRowNames?seq_contains("Non-Member")>
448 <#list dropdownKeys as k>
449 <#if displayMapValue[k]?? && displayMapName[k]??>
450 <option value="${displayMapValue[k]}">${displayMapName[k]}</option>
451 </#if>
452 </#list>
453
454 </#if>
455 </select>
456 </div>
457 </#if>
458 </#if>
459 <div class="product-delivery-ctas">
460 <#if hasSkus == "true">
461 <!-- Check if Alt Reg Button text is set -->
462 <#if !infoObj["Alternate Text"]?has_content>
463 <#if isWebinar == "true" || isEvent == "true">
464 <button id="productRegistrationBtn" class="btn btn-lg btn-primary btn-arrow-right w-100" onclick="navigateToRegistration()">Register Now</button>
465 <#elseif isPriceTypeSubs == "true">
466 <button id="productRegistrationBtn" class="btn btn-lg btn-primary btn-arrow-right w-100" onclick="navigateToRegistration()">Subscribe Now</button>
467 <#elseif isPriceTypeMB == "true" || isPriceTypeFree == "Free">
468 <button id="productRegistrationBtn" class="btn btn-lg btn-primary btn-arrow-right w-100" onclick="navigateToRegistration()">Access Now</button>
469 <#else>
470 <button id="productRegistrationBtn" class="btn btn-lg btn-primary btn-arrow-right w-100" onclick="navigateToRegistration()">Buy Now</button>
471 </#if>
472 <#if isSeminar = "true" || isInstitute = "true">
473 <button class="btn btn-lg btn-link icon-pdf w-100" onclick="navigateToRegForm()">Printable Registration Form</button>
474 </#if>
475 <#else>
476 <#if infoObj["Alternate Text"]?has_content>
477 <button id="productRegistrationBtn" class="btn btn-lg btn-primary btn-arrow-right w-100" onclick="navigateToRegistration()">${infoObj["Alternate Text"]}</button>
478 </#if>
479 <#if isSeminar = "true" || isInstitute = "true">
480 <button class="btn btn-lg btn-link icon-pdf w-100" onclick="navigateToRegForm()">Printable Registration Form</button>
481 </#if>
482 </#if>
483
484 <!-- Check if an Alternate URL is set and use that URL -->
485 <#if infoObj["Alternate URL"]?has_content>
486 <#assign displayMapValue = displayMapValue + {defaultSKUKey: infoObj["Alternate URL"]}>
487 </#if>
488 <#else>
489 <!-- Check if hubspot form should be displayed -->
490 <#if infoObj["Alternate URL"]?has_content>
491 <#assign displayMapValue = displayMapValue + {defaultSKUKey: infoObj["Alternate URL"]}>
492 <#if !infoObj["Alternate Text"]?has_content>
493 <button id="productRegistrationBtn" class="btn btn-lg btn-primary btn-arrow-right w-100" onclick="navigateToRegistration()">Register Now</button>
494 <#else>
495 <button id="productRegistrationBtn" class="btn btn-lg btn-primary btn-arrow-right w-100" onclick="navigateToRegistration()">${infoObj["Alternate Text"]}</button>
496 </#if>
497 <#else>
498 <div class="hubspot-form-wrap">
499 <p><strong>
500 This event is not currently available, please provide your contact information if you wish to be notified when it becomes available.
501 </strong></p>
502 <script>
503 hbspt.forms.create({
504 portalId: "5005401",
505 formId: "0865c866-46eb-4be6-944a-fb19a76a7a68",
506 });
507 window.addEventListener('hs-form-event:on-ready', function(event) {
508 HubSpotFormsV4.getFormFromEvent(event).setFieldValue('0-1/hidden_event_url', window.location.href);
509 });
510 </script>
511 </div>
512 </#if>
513 </#if>
514 </div>
515 </div>
516 <!-- Agenda -->
517 <#if isWebinar == "true" || isEvent == "true">
518 <#if infoObj["AgendaId"]?has_content>
519<#assign agendaString = infoObj["AgendaId"]?string/>
520<@liferay_journal["journal-article"]
521 articleId="${agendaString}"
522 ddmTemplateKey="728470"
523 groupId=45248
524 />
525</#if>
526 </#if>
527 <!-- Pricing -->
528 <#if isPriceTypeFree != "true" && (priceList?? && (priceList?size > 0))>
529 <div class="product-info-wrapper product-pricing-info">
530 <h2 class="product-info-title"><button type="button" data-bs-toggle="collapse"
531 data-bs-target="#pricing-div" role="button" aria-expanded="true"
532 aria-controls="pricing-div">Pricing</button></h2>
533 <div class="product-info-div collapse show" id="pricing-div">
534 <div class="table-responsive">
535 <#assign columnSize = tableColumnNames?size />
536 <#assign tableRowIndex = 0 />
537 <#if numberOfOptions == 2>
538 <table class="table custom-table">
539 <thead>
540 <tr>
541 <th>Audience</th>
542 <th>Live </th>
543 <th>Recorded </th>
544 <th>Live + Recorded </th>
545 </tr>
546 </thead>
547 <tbody>
548 <tr>
549 <td>
550 <h3>ICBA Member</h3>
551 </td>
552 <td>${productOptionMap["icba-member:live"]}</td>
553 <td>${productOptionMap["icba-member:ondemand"]}</td>
554 <td>${productOptionMap["icba-member:live-ondemand"]}</td>
555 </tr>
556
557 <tr>
558 <td>
559 <h3>Non-Member</h3>
560 </td>
561 <td>${productOptionMap["nonmember:live"]}</td>
562 <td>${productOptionMap["nonmember:ondemand"]}</td>
563 <td>${productOptionMap["nonmember:live-ondemand"]}</td>
564 </tr>
565
566 <tr>
567 <td>
568 <h3>Unlimited Webinar Pass</h3>
569 </td>
570 <td>${productOptionMap["unlimited-webinar-pass:live"]}</td>
571 <td>${productOptionMap["unlimited-webinar-pass:ondemand"]}</td>
572 <td>${productOptionMap["unlimited-webinar-pass:live-ondemand"]}</td>
573 </tr>
574 </tbody>
575
576 </table>
577 <#else>
578 <table class="table custom-table">
579 <thead>
580 <tr>
581 <th>Audience</th>
582 <#list tableColumnNames as columnName >
583 <th> ${columnName} <!--<i class="icon-info"></i>--></th>
584 </#list>
585 </tr>
586 </thead>
587 <tbody>
588 <#if priceList?? && (priceList?size > 0) >
589 <#if tableRowNames?seq_contains("ICBA Member")>
590 <tr>
591 <td>
592 <h3>ICBA Member</h3>
593 </td>
594 <td>
595 ${productOptionMapSingle["icba-member"]}
596 </td>
597 </tr>
598 </#if>
599 <#if tableRowNames?seq_contains("Non-Member")>
600 <tr>
601 <td>
602 <h3>Non-Member</h3>
603 </td>
604 <td>
605 ${productOptionMapSingle["nonmember"]}
606 </td>
607 </tr>
608 </#if>
609 <#if tableRowNames?seq_contains("Non-Banker*")>
610 <tr>
611 <td>
612 <h3>Non-Banker*</h3>
613 </td>
614 <td>
615 ${productOptionMapSingle["nonbanker"]}
616 </td>
617 </tr>
618 </#if>
619 <#if tableRowNames?seq_contains("ICBA Bank Director Program Subscriber")>
620 <tr>
621 <td>
622 <h3>ICBA Bank Director Program Subscriber</h3>
623 </td>
624 <td>
625 ${productOptionMapSingle["icba-bank-director-program-subscriber"]}
626 </td>
627 </tr>
628 </#if>
629 <#if tableRowNames?seq_contains("Unlimited Webinar Pass")>
630 <tr>
631 <td>
632 <h3>Unlimited Webinar Pass</h3>
633 </td>
634 <td>
635 ${productOptionMapSingle["unlimited-webinar-pass"]}
636 </td>
637 </tr>
638 </#if>
639
640 <#list tableRowNames as row>
641 <#if row != "ICBA Bank Director Program Subscriber" &&
642 row != "ICBA Member" &&
643 row != "Non-Member" &&
644 row != "Non-Banker*" &&
645 row != "Unlimited Webinar Pass" >
646 <tr>
647 <td>
648 <h3>${row}</h3>
649 </td>
650
651 <td>
652 ${priceList[tableRowIndex]}
653 </td>
654
655 </tr>
656 </#if>
657 <#assign tableRowIndex++/>
658 </#list>
659 </#if>
660 </tbody>
661 </table>
662 </#if>
663 </div>
664 <#if isForum = "true">
665 <div class="mb-20">
666 <a class="btn btn-link icon-pdf btn-arrow-right" href="/documents/d/asset-library-45247/icba-education-registration-form">Printable Registration Form</a>
667 <a class="btn btn-link btn-arrow-right" href="https://myicba.icba.org/eweb/dynamicpage.aspx?webcode=CSCBundles&Action=Add&cst_key=00000000-0000-0000-0000-000000000000&ObjectKeyFrom=1A83491A-9853-4C87-86A4-F7D95601C2E2&DoNotSave=Yes&DoNotAdd=Yes&ParentObject=CentralizedOrderEntry&ParentDataObject=Order%20Entry%20Bundle&key=271A2B6B-EE9F-4ACD-BB61-B9B9076B0BA2">Register for all four of the 2025 Bank
668 Director Forums</a>
669 </div>
670 </#if>
671
672 <div class="disclaimer">
673 <#if isSeminar = "true" || isInstitute = "true" || isWebinar = "true">
674 <!-- <p>
675 <#if tableRowNames?seq_contains("Non-Banker*")>* Attendance may be subject to ICBA approval. </#if>
676 <br/>For attendance and cancellation policies see Disclaimers
677 </p>
678-->
679 <p>
680 *Attendance may be subject to ICBA approval.
681 <br/>For attendance and cancellation policies see Disclaimers
682 </p>
683 </#if>
684 </div>
685 </div>
686 </div>
687 </#if>
688 <!-- Location -->
689 <#if isInPerson == "true">
690 <div class="product-info-wrapper product-location-info">
691 <h2 class="product-info-title"><button type="button" data-bs-toggle="collapse"
692 data-bs-target="#location-div" role="button" aria-expanded="true"
693 aria-controls="location-div">Location</button></h2>
694 <div class="product-info-div collapse show" id="location-div">
695 <div class="row">
696 <#assign columnTwo = 'col-md-12' />
697 <#if infoObj["Location Image"]?has_content>
698 <#assign columnTwo = 'col-md-8' />
699 <div class="col-md-4">
700 <div class="location-image">
701 <div class="slider-carousel-wrapper" data-slick-slider-wrapper="true">
702 <div data-slick-slider="true" data-infinite="false" data-slides-to-show="1"
703 data-slides-to-scroll="1" data-fade="true">
704 <div>
705 <img src="${infoObj["Location Image"]}" alt="" class="img-fluid" />
706 </div>
707 </div>
708 </div>
709 </div>
710 </div>
711 </#if>
712 <div class="${columnTwo}">
713 <h3 class="location-title">
714 <#if infoObj["Location Name"]?has_content>
715 ${infoObj["Location Name"]}
716 </#if>
717 </h3>
718 <p class="location-address">
719 <#if infoObj["Location Address"]?has_content>
720 ${infoObj["Location Address"]}
721 </#if>
722 <#if infoObj["Location City"]?has_content>
723 ${infoObj["Location City"]}
724 </#if>
725 <#if infoObj["Location State"]?has_content>
726 ${infoObj["Location State"]}
727 </#if>
728 </p>
729 <p class="location-summary">
730 <#if infoObj["Location Description"]?has_content>
731 ${infoObj["Location Description"]}
732 </#if>
733 </p>
734
735
736
737 </div>
738 </div>
739 <div class="mt-3">
740 <#if infoObj["Booking Link"]?has_content>
741 <a href="${infoObj["Booking Link"]}" class="btn btn-primary btn-lg btn-arrow-right" target="_blank">ICBA Booking Link</a>
742 </#if>
743 </div>
744
745 <div class="disclaimer">
746 <p>
747 <#if infoObj["Location Disclaimer"]?has_content>
748 ${infoObj["Location Disclaimer"]}
749 </#if>
750 </p>
751 </div>
752 </div>
753 </div>
754 </#if>
755 <!-- End -->
756 <!-- Who should Attend -->
757 <#if isWebinar == "true" || isEvent == "true">
758 <div class="product-info-wrapper product-attendees-info">
759 <h2 class="product-info-title"><button type="button" data-bs-toggle="collapse"
760 data-bs-target="#attendees-div" role="button" aria-expanded="true"
761 aria-controls="attendees-div">Who Should Participate</button></h2>
762 <div class="product-info-div collapse show" id="attendees-div">
763 <div class="table-responsive">
764 <table class="table custom-table">
765 <tbody>
766 <tr>
767 <td>
768 <p><strong>Who should attend: </strong></p>
769 </td>
770 <td>
771 <#if infoObj.icbaaudience?? && infoObj.icbaaudience?size gt 0>
772 <#assign formatList = []>
773 <#list infoObj.icbaaudience as format>
774 <#if format.value?has_content>
775 <#assign formatList += [format.value]>
776 </#if>
777 </#list>
778 ${formatList?join(", ")}
779 </#if>
780 </td>
781 </tr>
782 <tr>
783 <td>
784 <p><strong>Prerequisites:</strong></p>
785 </td>
786 <td>
787 <#if infoObj["Prerequisites"]?has_content>
788 <p>${infoObj["Prerequisites"]}</p>
789 </#if>
790 </td>
791 </tr>
792 <tr>
793 <td>
794 <p><strong>Advanced Preparation:</strong></p>
795 </td>
796 <td>
797 <#if infoObj["Advanced Preparation"]?has_content>
798 <p>${infoObj["Advanced Preparation"]}</p>
799 </#if>
800 </td>
801 </tr>
802 <tr>
803 <td>
804 <p><strong>Program Level:</strong></p>
805 </td>
806 <td>
807 <#if infoObj["Program Level"]?has_content>
808 <p>${infoObj["Program Level"]}</p>
809 </#if>
810 </td>
811 </tr>
812 <tr>
813 <td>
814 <p><strong>Field of Study:</strong></p>
815 </td>
816 <td>
817 <#if infoObj["Field of Study"]?has_content>
818 <p>${infoObj["Field of Study"]}</p>
819 </#if>
820 </td>
821 </tr>
822 <tr>
823 <td>
824 <p><strong>Delivery Method:</strong></p>
825 </td>
826 <td>
827 <#if infoObj.nasbadeliverymethod?? && infoObj.nasbadeliverymethod?size gt 0>
828 <#assign formatList = []>
829 <#list infoObj.nasbadeliverymethod as format>
830 <#if format.value?has_content>
831 <#assign formatList += [format.value]>
832 </#if>
833 </#list>
834 ${formatList?join(", ")}
835 </#if>
836 </td>
837 </tr>
838 <tr>
839 <td>
840 <p><strong>Continuing Professional<br />Education (CPE) Credit Hours:</strong></p>
841 </td>
842 <td>
843 <#if infoObj["CPE Credits"]?has_content>
844 <p>${infoObj["CPE Credits"]} hrs</p>
845 </#if>
846 </td>
847 </tr>
848 </tbody>
849 </table>
850 </div>
851 </div>
852 </div>
853 </#if>
854
855 <!-- Instructor -->
856<#if isWebinar == "true" || isEvent == "true">
857 <#if infoObj["InstructorId"]?has_content>
858 <div class="product-info-wrapper product-instructors-info">
859 <h2 class="product-info-title"><button type="button" data-bs-toggle="collapse"
860 data-bs-target="#instructors-div" role="button" aria-expanded="true"
861 aria-controls="instructors-div">Instructors</button></h2>
862 <div class="product-info-div collapse show" id="instructors-div">
863 <div class="row">
864 <!-- Article Structure Type -->
865 <#assign instructorString = infoObj["InstructorId"]?string/>
866 <#assign instructorIdList = instructorString?split(",")/>
867 <#list instructorIdList as iid>
868 <div class="col-md-6">
869 <@liferay_journal["journal-article"]
870 articleId="${iid}"
871 ddmTemplateKey="716972"
872 groupId=45248
873 />
874 </div>
875 </#list>
876 </div>
877 </div>
878 </div>
879 </#if>
880 </#if>
881 <!--End-->
882 <!-- Disclaimers -->
883 <#if isWebinar == "true" || isEvent == "true" || isPerson == "true">
884 <div class="product-info-wrapper product-disclaimers-info">
885 <h2 class="product-info-title">
886 <button type="button" data-bs-toggle="collapse" data-bs-target="#disclaimers-div" role="button" aria-expanded="true" aria-controls="disclaimers-div">Disclaimers</button>
887 </h2>
888 <div class="product-info-div collapse show" id="disclaimers-div">
889 <h3>Attendance and Cancellation Policy</h3>
890 <#-- Loop through contentFields to get the "content" field -->
891 <#if isSeminar == "true" || isInstitute == "true">
892 <#list attendenceSeminar.contentFields as field>
893 <#if field.name == "content">
894 ${htmlUtil.unescape(field.contentFieldValue.data)}
895 </#if>
896 </#list>
897 </#if>
898 <#if isWebinar == "true">
899 <#list attendenceWebinar.contentFields as field>
900 <#if field.name == "content">
901 ${htmlUtil.unescape(field.contentFieldValue.data)}
902 </#if>
903 </#list>
904 </#if>
905
906 <hr />
907
908 <h3>Continuing Professional Education Credit (CPE) Requirements</h3>
909 <#if isSeminar == "true" || isInstitute == "true" && isPerson=="false">
910 <#list cpeSeminar.contentFields as cpefield>
911 <#if cpefield.name == "content">
912 ${htmlUtil.unescape(cpefield.contentFieldValue.data)}
913 </#if>
914 </#list>
915 </#if>
916 <#if isWebinar == "true">
917 <#list cpeWebinar.contentFields as cpefield>
918 <#if cpefield.name == "content">
919 ${htmlUtil.unescape(cpefield.contentFieldValue.data)}
920 </#if>
921 </#list>
922 </#if>
923 <#if isPerson == "true">
924 <#list cpePerson.contentFields as cpefield>
925 <#if cpefield.name == "content">
926 ${htmlUtil.unescape(cpefield.contentFieldValue.data)}
927 </#if>
928 </#list>
929 </#if>
930 <hr />
931
932 <h3>${coc.title}</h3>
933 <#list coc.contentFields as cocfield>
934 <#if cocfield.name == "content">
935 ${htmlUtil.unescape(cocfield.contentFieldValue.data)}
936 </#if>
937 </#list>
938 <a href="/code-of-conduct">Read Full Policy</a>
939
940 <hr />
941
942 <h3>${policy.title}</h3>
943 <#list policy.contentFields as policyfield>
944 <#if policyfield.name == "content">
945 ${htmlUtil.unescape(policyfield.contentFieldValue.data)}
946 </#if>
947 </#list>
948 <hr />
949
950 <h3>${recording.title}</h3>
951 <#list recording.contentFields as recordingfield>
952 <#if recordingfield.name == "content">
953 ${htmlUtil.unescape(recordingfield.contentFieldValue.data)}
954 </#if>
955 </#list>
956 <hr />
957
958 <h3>${video.title}</h3>
959 <#list video.contentFields as videofield>
960 <#if videofield.name == "content">
961 ${htmlUtil.unescape(videofield.contentFieldValue.data)}
962 </#if>
963 </#list>
964 <hr />
965
966 <h3>${nasba.title}</h3>
967 <#list nasba.contentFields as nasbafield>
968 <#if nasbafield.name == "content">
969 ${htmlUtil.unescape(nasbafield.contentFieldValue.data)}
970 </#if>
971 </#list>
972 </div>
973 </div>
974 </#if>
975 </div>
976
977<#else>
978 <div class="education-details-sec">
979 <div class="product-main-info">
980 <div class="top-row">
981
982 <#if infoObj.deliverymethod??>
983 <div class="education-card-categories">
984 <#list infoObj.deliverymethod as format>
985 <#if format.value != "">
986 <#if format.value == "Livestream">
987 <#if isLivestream == "true">
988 <span class="category">
989 <img src="${defaultImgMap[format.value]['image']}" alt="" class="category-img bg-${defaultImgMap[format.value]['color']}" />
990 <span class="category-name">${format.value}</span>
991 </span>
992 </#if>
993 <#else>
994 <span class="category">
995 <img src="${defaultImgMap[format.value]['image']}" alt="" class="category-img bg-${defaultImgMap[format.value]['color']}" />
996 <span class="category-name">${format.value}</span>
997 </span>
998 </#if>
999 </#if>
1000 </#list>
1001 </div>
1002 </#if>
1003 <!-- Only display certificate if -->
1004 <#if isInstitute == "true">
1005 <div class="certification-info">
1006 <span class="certification-info-text">Earn Professional Certification</span>
1007 <div class="certification-info-img"><i class="certification-info-img"></i></div>
1008 </div>
1009 </#if>
1010 </div>
1011 <h1 class="product-title product-title-name header-xl">${productName}</h1>
1012 <#if infoObj.deliverymethod??>
1013 <#list infoObj.deliverymethod as format>
1014 <#if format.value != "">
1015 <#if format.value == "In Person">
1016 <#assign isPerson = "true"/>
1017 </#if>
1018 </#if>
1019 </#list>
1020 </#if>
1021 <#if isOnlineCourse == "true" || isWebinar == "true" || isPerson == "true" || isEvent == "true">
1022 <div class="meta-info">
1023 <#-- Parse date and time -->
1024 <#if infoObj["Event Start Date"]?has_content>
1025
1026
1027
1028
1029
1030 <#assign start = infoObj["Event Start Date"]?datetime("yyyy-MM-dd'T'HH:mm:ss'Z'")/>
1031 <#assign startDateStr = start?string("MMM d")/>
1032 <#assign year = start?string("yyyy")/>
1033 <#assign startTime = start?string("h:mm") + " " + start?string("a")?lower_case/>
1034 </#if>
1035
1036 <#if infoObj["Event End Date"]?has_content>
1037 <#assign end = infoObj["Event End Date"]?datetime("yyyy-MM-dd'T'HH:mm:ss'Z'")/>
1038 <#assign endDateStr = end?string("MMM d")/>
1039 <#assign endTime = end?string("h:mm") + " " + end?string("a")?lower_case/>
1040 </#if>
1041 <ul>
1042 <#if isWebinar == "true" || isEvent == "true">
1043 <#if isLivestream == "true" || isPerson == "true">
1044 <#if start?has_content && end?has_content>
1045 <#if start?string("yyyyMMdd") == end?string("yyyyMMdd")>
1046 <#assign dateDisplay = startDateStr + ", " + year/>
1047 <#assign timeDisplay = startTime + "–" + endTime/>
1048 <#else>
1049 <#assign dateDisplay = startDateStr + "–" + endDateStr + ", " + year/>
1050 <#assign timeDisplay = startTime/>
1051 </#if>
1052
1053 </#if>
1054 <li>${dateDisplay}</li>
1055 <#if isWebinar == "true">
1056 <li> | </li>
1057 <li>${timeDisplay} <#if infoObj["Time Zone"]?? && infoObj["Time Zone"]?has_content>${infoObj["Time Zone"]?first}</#if></li>
1058 </#if>
1059 <li> | </li>
1060 </#if>
1061
1062 </#if>
1063 <#if isInPerson = "true">
1064 <#if infoObj["Location City"]?has_content || infoObj["Location State"]?has_content>
1065 <li>
1066 </#if>
1067 <#if infoObj["Location City"]?has_content>${infoObj["Location City"]}</#if>
1068 <#if infoObj["Location State"]?has_content>, ${infoObj["Location State"]}</#if>
1069 <#if infoObj["Location City"]?has_content || infoObj["Location State"]?has_content>
1070 </li>
1071 <li> | </li>
1072 </#if>
1073 </#if>
1074 <#if isWebinar == "true">
1075
1076 <li class="fw-700">Webinar</li>
1077 </#if>
1078 <#if isOnlineCourse == "true">
1079 <li class="fw-700">Online Course</li>
1080 </#if>
1081 <#if isEvent = "true">
1082 <li class="fw-700">${eventTypeName}</li>
1083 </#if>
1084 <#if infoObj["CPE Credits"]?has_content>
1085 <li> | </li>
1086 <li class="credits-info">
1087 <div class="education-card-credits">
1088 CPE Credits: ${infoObj["CPE Credits"]}
1089 </div>
1090 </li>
1091 </#if>
1092 </ul>
1093 </div>
1094 </#if>
1095
1096 <div class="product-summary" aria-hidden="true">
1097 ${productDescription}
1098 </div>
1099 <#if productDescription?has_content>
1100 <a href="#" class="btn btn-link read-more-btn">Read More</a>
1101 </#if>
1102
1103<!-- Populate Learning Format Dropdown if Webinar with Multiple Options -->
1104 <#if displayMapValue?has_content && dropdownKeys?? && numberOfOptions gt 1 >
1105 <#if isWebinar == "true" && !infoObj["Alternate URL"]?has_content>
1106 <div class="product-delivery-wrapper">
1107 <label for="delivery-method" class="label">Learning Format</label>
1108 <select class="form-control" id="delivery-method">
1109 <option value="">Select Learning Format</option>
1110
1111 <#if tableRowNames?seq_contains("ICBA Member")>
1112 <#list memberdropdownKeys as k>
1113 <#if displayMapValue[k]?? && displayMapName[k]??>
1114 <option value="${displayMapValue[k]}">${displayMapName[k]}</option>
1115 </#if>
1116 </#list>
1117 <#elseif tableRowNames?seq_contains("Non-Member")>
1118 <#list dropdownKeys as k>
1119 <#if displayMapValue[k]?? && displayMapName[k]??>
1120 <option value="${displayMapValue[k]}">${displayMapName[k]}</option>
1121 </#if>
1122 </#list>
1123
1124 </#if>
1125 </select>
1126 </div>
1127 </#if>
1128 </#if>
1129 <div class="product-delivery-ctas">
1130 <#if hasSkus == "true">
1131 <!-- Check if Alt Reg Button text is set -->
1132 <#if !infoObj["Alternate Text"]?has_content>
1133 <#if isWebinar == "true" || isEvent == "true">
1134 <button id="productRegistrationBtn" class="btn btn-lg btn-primary btn-arrow-right w-100" onclick="navigateToRegistration()">Register Now</button>
1135 <#elseif isPriceTypeSubs == "true">
1136 <button id="productRegistrationBtn" class="btn btn-lg btn-primary btn-arrow-right w-100" onclick="navigateToRegistration()">Subscribe Now</button>
1137 <#elseif isPriceTypeMB == "true" || isPriceTypeFree == "Free">
1138 <button id="productRegistrationBtn" class="btn btn-lg btn-primary btn-arrow-right w-100" onclick="navigateToRegistration()">Access Now</button>
1139 <#else>
1140 <button id="productRegistrationBtn" class="btn btn-lg btn-primary btn-arrow-right w-100" onclick="navigateToRegistration()">Buy Now</button>
1141 </#if>
1142 <#if isSeminar = "true" || isInstitute = "true">
1143 <button class="btn btn-lg btn-link icon-pdf w-100" onclick="navigateToRegForm()">Printable Registration Form</button>
1144 </#if>
1145 <#else>
1146 <#if infoObj["Alternate Text"]?has_content>
1147 <button id="productRegistrationBtn" class="btn btn-lg btn-primary btn-arrow-right w-100" onclick="navigateToRegistration()">${infoObj["Alternate Text"]}</button>
1148 </#if>
1149 <#if isSeminar = "true" || isInstitute = "true">
1150 <button class="btn btn-lg btn-link icon-pdf w-100" onclick="navigateToRegForm()">Printable Registration Form</button>
1151 </#if>
1152 </#if>
1153
1154 <!-- Check if an Alternate URL is set and use that URL -->
1155 <#if infoObj["Alternate URL"]?has_content>
1156 <#assign displayMapValue = displayMapValue + {defaultSKUKey: infoObj["Alternate URL"]}>
1157 </#if>
1158 <#else>
1159 <!-- Check if hubspot form should be displayed -->
1160 <#if infoObj["Alternate URL"]?has_content>
1161 <#assign displayMapValue = displayMapValue + {defaultSKUKey: infoObj["Alternate URL"]}>
1162 <#if !infoObj["Alternate Text"]?has_content>
1163 <button id="productRegistrationBtn" class="btn btn-lg btn-primary btn-arrow-right w-100" onclick="navigateToRegistration()">Register Now</button>
1164 <#else>
1165 <button id="productRegistrationBtn" class="btn btn-lg btn-primary btn-arrow-right w-100" onclick="navigateToRegistration()">${infoObj["Alternate Text"]}</button>
1166 </#if>
1167 <#else>
1168 <div class="hubspot-form-wrap">
1169 <p><strong>
1170 This event is not currently available, please provide your contact information if you wish to be notified when it becomes available.
1171 </strong></p>
1172 <script>
1173 hbspt.forms.create({
1174 portalId: "5005401",
1175 formId: "0865c866-46eb-4be6-944a-fb19a76a7a68",
1176 });
1177 window.addEventListener('hs-form-event:on-ready', function(event) {
1178 HubSpotFormsV4.getFormFromEvent(event).setFieldValue('0-1/hidden_event_url', window.location.href);
1179 });
1180 </script>
1181 </div>
1182 </#if>
1183 </#if>
1184 </div>
1185 </div>
1186 <!-- Agenda -->
1187 <#if isWebinar == "true" || isEvent == "true">
1188 <#if infoObj["AgendaId"]?has_content>
1189<#assign agendaString = infoObj["AgendaId"]?string/>
1190<@liferay_journal["journal-article"]
1191 articleId="${agendaString}"
1192 ddmTemplateKey="728470"
1193 groupId=45248
1194 />
1195</#if>
1196 </#if>
1197 <!-- Pricing -->
1198 <#if isPriceTypeFree != "true" && (priceList?? && (priceList?size > 0))>
1199 <div class="product-info-wrapper product-pricing-info">
1200 <h2 class="product-info-title"><button type="button" data-bs-toggle="collapse"
1201 data-bs-target="#pricing-div" role="button" aria-expanded="true"
1202 aria-controls="pricing-div">Pricing</button></h2>
1203 <div class="product-info-div collapse show" id="pricing-div">
1204 <div class="table-responsive">
1205 <#assign columnSize = tableColumnNames?size />
1206 <#assign tableRowIndex = 0 />
1207 <#if numberOfOptions == 2>
1208 <table class="table custom-table">
1209 <thead>
1210 <tr>
1211 <th>Audience</th>
1212 <th>Live </th>
1213 <th>Recorded </th>
1214 <th>Live + Recorded </th>
1215 </tr>
1216 </thead>
1217 <tbody>
1218 <tr>
1219 <td>
1220 <h3>ICBA Member</h3>
1221 </td>
1222 <td>${productOptionMap["icba-member:live"]}</td>
1223 <td>${productOptionMap["icba-member:ondemand"]}</td>
1224 <td>${productOptionMap["icba-member:live-ondemand"]}</td>
1225 </tr>
1226
1227 <tr>
1228 <td>
1229 <h3>Non-Member</h3>
1230 </td>
1231 <td>${productOptionMap["nonmember:live"]}</td>
1232 <td>${productOptionMap["nonmember:ondemand"]}</td>
1233 <td>${productOptionMap["nonmember:live-ondemand"]}</td>
1234 </tr>
1235
1236 <tr>
1237 <td>
1238 <h3>Unlimited Webinar Pass</h3>
1239 </td>
1240 <td>${productOptionMap["unlimited-webinar-pass:live"]}</td>
1241 <td>${productOptionMap["unlimited-webinar-pass:ondemand"]}</td>
1242 <td>${productOptionMap["unlimited-webinar-pass:live-ondemand"]}</td>
1243 </tr>
1244 </tbody>
1245
1246 </table>
1247 <#else>
1248 <table class="table custom-table">
1249 <thead>
1250 <tr>
1251 <th>Audience</th>
1252 <#list tableColumnNames as columnName >
1253 <th> ${columnName} <!--<i class="icon-info"></i>--></th>
1254 </#list>
1255 </tr>
1256 </thead>
1257 <tbody>
1258 <#if priceList?? && (priceList?size > 0) >
1259 <#if tableRowNames?seq_contains("ICBA Member")>
1260 <tr>
1261 <td>
1262 <h3>ICBA Member</h3>
1263 </td>
1264 <td>
1265 ${productOptionMapSingle["icba-member"]}
1266 </td>
1267 </tr>
1268 </#if>
1269 <#if tableRowNames?seq_contains("Non-Member")>
1270 <tr>
1271 <td>
1272 <h3>Non-Member</h3>
1273 </td>
1274 <td>
1275 ${productOptionMapSingle["nonmember"]}
1276 </td>
1277 </tr>
1278 </#if>
1279 <#if tableRowNames?seq_contains("Non-Banker*")>
1280 <tr>
1281 <td>
1282 <h3>Non-Banker*</h3>
1283 </td>
1284 <td>
1285 ${productOptionMapSingle["nonbanker"]}
1286 </td>
1287 </tr>
1288 </#if>
1289 <#if tableRowNames?seq_contains("ICBA Bank Director Program Subscriber")>
1290 <tr>
1291 <td>
1292 <h3>ICBA Bank Director Program Subscriber</h3>
1293 </td>
1294 <td>
1295 ${productOptionMapSingle["icba-bank-director-program-subscriber"]}
1296 </td>
1297 </tr>
1298 </#if>
1299 <#if tableRowNames?seq_contains("Unlimited Webinar Pass")>
1300 <tr>
1301 <td>
1302 <h3>Unlimited Webinar Pass</h3>
1303 </td>
1304 <td>
1305 ${productOptionMapSingle["unlimited-webinar-pass"]}
1306 </td>
1307 </tr>
1308 </#if>
1309
1310 <#list tableRowNames as row>
1311 <#if row != "ICBA Bank Director Program Subscriber" &&
1312 row != "ICBA Member" &&
1313 row != "Non-Member" &&
1314 row != "Non-Banker*" &&
1315 row != "Unlimited Webinar Pass" >
1316 <tr>
1317 <td>
1318 <h3>${row}</h3>
1319 </td>
1320
1321 <td>
1322 ${priceList[tableRowIndex]}
1323 </td>
1324
1325 </tr>
1326 </#if>
1327 <#assign tableRowIndex++/>
1328 </#list>
1329 </#if>
1330 </tbody>
1331 </table>
1332 </#if>
1333 </div>
1334 <#if isForum = "true">
1335 <div class="mb-20">
1336 <a class="btn btn-link icon-pdf btn-arrow-right" href="/documents/d/asset-library-45247/icba-education-registration-form">Printable Registration Form</a>
1337 <a class="btn btn-link btn-arrow-right" href="https://myicba.icba.org/eweb/dynamicpage.aspx?webcode=CSCBundles&Action=Add&cst_key=00000000-0000-0000-0000-000000000000&ObjectKeyFrom=1A83491A-9853-4C87-86A4-F7D95601C2E2&DoNotSave=Yes&DoNotAdd=Yes&ParentObject=CentralizedOrderEntry&ParentDataObject=Order%20Entry%20Bundle&key=271A2B6B-EE9F-4ACD-BB61-B9B9076B0BA2">Register for all four of the 2025 Bank
1338 Director Forums</a>
1339 </div>
1340 </#if>
1341
1342 <div class="disclaimer">
1343 <#if isSeminar = "true" || isInstitute = "true" || isWebinar = "true">
1344 <!-- <p>
1345 <#if tableRowNames?seq_contains("Non-Banker*")>* Attendance may be subject to ICBA approval. </#if>
1346 <br/>For attendance and cancellation policies see Disclaimers
1347 </p>
1348-->
1349 <p>
1350 *Attendance may be subject to ICBA approval.
1351 <br/>For attendance and cancellation policies see Disclaimers
1352 </p>
1353 </#if>
1354 </div>
1355 </div>
1356 </div>
1357 </#if>
1358 <!-- Location -->
1359 <#if isInPerson == "true">
1360 <div class="product-info-wrapper product-location-info">
1361 <h2 class="product-info-title"><button type="button" data-bs-toggle="collapse"
1362 data-bs-target="#location-div" role="button" aria-expanded="true"
1363 aria-controls="location-div">Location</button></h2>
1364 <div class="product-info-div collapse show" id="location-div">
1365 <div class="row">
1366 <#assign columnTwo = 'col-md-12' />
1367 <#if infoObj["Location Image"]?has_content>
1368 <#assign columnTwo = 'col-md-8' />
1369 <div class="col-md-4">
1370 <div class="location-image">
1371 <div class="slider-carousel-wrapper" data-slick-slider-wrapper="true">
1372 <div data-slick-slider="true" data-infinite="false" data-slides-to-show="1"
1373 data-slides-to-scroll="1" data-fade="true">
1374 <div>
1375 <img src="${infoObj["Location Image"]}" alt="" class="img-fluid" />
1376 </div>
1377 </div>
1378 </div>
1379 </div>
1380 </div>
1381 </#if>
1382 <div class="${columnTwo}">
1383 <h3 class="location-title">
1384 <#if infoObj["Location Name"]?has_content>
1385 ${infoObj["Location Name"]}
1386 </#if>
1387 </h3>
1388 <p class="location-address">
1389 <#if infoObj["Location Address"]?has_content>
1390 ${infoObj["Location Address"]}
1391 </#if>
1392 <#if infoObj["Location City"]?has_content>
1393 ${infoObj["Location City"]}
1394 </#if>
1395 <#if infoObj["Location State"]?has_content>
1396 ${infoObj["Location State"]}
1397 </#if>
1398 </p>
1399 <p class="location-summary">
1400 <#if infoObj["Location Description"]?has_content>
1401 ${infoObj["Location Description"]}
1402 </#if>
1403 </p>
1404
1405
1406
1407 </div>
1408 </div>
1409 <div class="mt-3">
1410 <#if infoObj["Booking Link"]?has_content>
1411 <a href="${infoObj["Booking Link"]}" class="btn btn-primary btn-lg btn-arrow-right" target="_blank">ICBA Booking Link</a>
1412 </#if>
1413 </div>
1414
1415 <div class="disclaimer">
1416 <p>
1417 <#if infoObj["Location Disclaimer"]?has_content>
1418 ${infoObj["Location Disclaimer"]}
1419 </#if>
1420 </p>
1421 </div>
1422 </div>
1423 </div>
1424 </#if>
1425 <!-- End -->
1426 <!-- Who should Attend -->
1427 <#if isWebinar == "true" || isEvent == "true">
1428 <div class="product-info-wrapper product-attendees-info">
1429 <h2 class="product-info-title"><button type="button" data-bs-toggle="collapse"
1430 data-bs-target="#attendees-div" role="button" aria-expanded="true"
1431 aria-controls="attendees-div">Who Should Participate</button></h2>
1432 <div class="product-info-div collapse show" id="attendees-div">
1433 <div class="table-responsive">
1434 <table class="table custom-table">
1435 <tbody>
1436 <tr>
1437 <td>
1438 <p><strong>Who should attend: </strong></p>
1439 </td>
1440 <td>
1441 <#if infoObj.icbaaudience?? && infoObj.icbaaudience?size gt 0>
1442 <#assign formatList = []>
1443 <#list infoObj.icbaaudience as format>
1444 <#if format.value?has_content>
1445 <#assign formatList += [format.value]>
1446 </#if>
1447 </#list>
1448 ${formatList?join(", ")}
1449 </#if>
1450 </td>
1451 </tr>
1452 <tr>
1453 <td>
1454 <p><strong>Prerequisites:</strong></p>
1455 </td>
1456 <td>
1457 <#if infoObj["Prerequisites"]?has_content>
1458 <p>${infoObj["Prerequisites"]}</p>
1459 </#if>
1460 </td>
1461 </tr>
1462 <tr>
1463 <td>
1464 <p><strong>Advanced Preparation:</strong></p>
1465 </td>
1466 <td>
1467 <#if infoObj["Advanced Preparation"]?has_content>
1468 <p>${infoObj["Advanced Preparation"]}</p>
1469 </#if>
1470 </td>
1471 </tr>
1472 <tr>
1473 <td>
1474 <p><strong>Program Level:</strong></p>
1475 </td>
1476 <td>
1477 <#if infoObj["Program Level"]?has_content>
1478 <p>${infoObj["Program Level"]}</p>
1479 </#if>
1480 </td>
1481 </tr>
1482 <tr>
1483 <td>
1484 <p><strong>Field of Study:</strong></p>
1485 </td>
1486 <td>
1487 <#if infoObj["Field of Study"]?has_content>
1488 <p>${infoObj["Field of Study"]}</p>
1489 </#if>
1490 </td>
1491 </tr>
1492 <tr>
1493 <td>
1494 <p><strong>Delivery Method:</strong></p>
1495 </td>
1496 <td>
1497 <#if infoObj.nasbadeliverymethod?? && infoObj.nasbadeliverymethod?size gt 0>
1498 <#assign formatList = []>
1499 <#list infoObj.nasbadeliverymethod as format>
1500 <#if format.value?has_content>
1501 <#assign formatList += [format.value]>
1502 </#if>
1503 </#list>
1504 ${formatList?join(", ")}
1505 </#if>
1506 </td>
1507 </tr>
1508 <tr>
1509 <td>
1510 <p><strong>Continuing Professional<br />Education (CPE) Credit Hours:</strong></p>
1511 </td>
1512 <td>
1513 <#if infoObj["CPE Credits"]?has_content>
1514 <p>${infoObj["CPE Credits"]} hrs</p>
1515 </#if>
1516 </td>
1517 </tr>
1518 </tbody>
1519 </table>
1520 </div>
1521 </div>
1522 </div>
1523 </#if>
1524
1525 <!-- Instructor -->
1526<#if isWebinar == "true" || isEvent == "true">
1527 <#if infoObj["InstructorId"]?has_content>
1528 <div class="product-info-wrapper product-instructors-info">
1529 <h2 class="product-info-title"><button type="button" data-bs-toggle="collapse"
1530 data-bs-target="#instructors-div" role="button" aria-expanded="true"
1531 aria-controls="instructors-div">Instructors</button></h2>
1532 <div class="product-info-div collapse show" id="instructors-div">
1533 <div class="row">
1534 <!-- Article Structure Type -->
1535 <#assign instructorString = infoObj["InstructorId"]?string/>
1536 <#assign instructorIdList = instructorString?split(",")/>
1537 <#list instructorIdList as iid>
1538 <div class="col-md-6">
1539 <@liferay_journal["journal-article"]
1540 articleId="${iid}"
1541 ddmTemplateKey="716972"
1542 groupId=45248
1543 />
1544 </div>
1545 </#list>
1546 </div>
1547 </div>
1548 </div>
1549 </#if>
1550 </#if>
1551 <!--End-->
1552 <!-- Disclaimers -->
1553 <#if isWebinar == "true" || isEvent == "true" || isPerson == "true">
1554 <div class="product-info-wrapper product-disclaimers-info">
1555 <h2 class="product-info-title">
1556 <button type="button" data-bs-toggle="collapse" data-bs-target="#disclaimers-div" role="button" aria-expanded="true" aria-controls="disclaimers-div">Disclaimers</button>
1557 </h2>
1558 <div class="product-info-div collapse show" id="disclaimers-div">
1559 <h3>Attendance and Cancellation Policy</h3>
1560 <#-- Loop through contentFields to get the "content" field -->
1561 <#if isSeminar == "true" || isInstitute == "true">
1562 <#list attendenceSeminar.contentFields as field>
1563 <#if field.name == "content">
1564 ${htmlUtil.unescape(field.contentFieldValue.data)}
1565 </#if>
1566 </#list>
1567 </#if>
1568 <#if isWebinar == "true">
1569 <#list attendenceWebinar.contentFields as field>
1570 <#if field.name == "content">
1571 ${htmlUtil.unescape(field.contentFieldValue.data)}
1572 </#if>
1573 </#list>
1574 </#if>
1575
1576 <hr />
1577
1578 <h3>Continuing Professional Education Credit (CPE) Requirements</h3>
1579 <#if isSeminar == "true" || isInstitute == "true" && isPerson=="false">
1580 <#list cpeSeminar.contentFields as cpefield>
1581 <#if cpefield.name == "content">
1582 ${htmlUtil.unescape(cpefield.contentFieldValue.data)}
1583 </#if>
1584 </#list>
1585 </#if>
1586 <#if isWebinar == "true">
1587 <#list cpeWebinar.contentFields as cpefield>
1588 <#if cpefield.name == "content">
1589 ${htmlUtil.unescape(cpefield.contentFieldValue.data)}
1590 </#if>
1591 </#list>
1592 </#if>
1593 <#if isPerson == "true">
1594 <#list cpePerson.contentFields as cpefield>
1595 <#if cpefield.name == "content">
1596 ${htmlUtil.unescape(cpefield.contentFieldValue.data)}
1597 </#if>
1598 </#list>
1599 </#if>
1600 <hr />
1601
1602 <h3>${coc.title}</h3>
1603 <#list coc.contentFields as cocfield>
1604 <#if cocfield.name == "content">
1605 ${htmlUtil.unescape(cocfield.contentFieldValue.data)}
1606 </#if>
1607 </#list>
1608 <a href="/code-of-conduct">Read Full Policy</a>
1609
1610 <hr />
1611
1612 <h3>${policy.title}</h3>
1613 <#list policy.contentFields as policyfield>
1614 <#if policyfield.name == "content">
1615 ${htmlUtil.unescape(policyfield.contentFieldValue.data)}
1616 </#if>
1617 </#list>
1618 <hr />
1619
1620 <h3>${recording.title}</h3>
1621 <#list recording.contentFields as recordingfield>
1622 <#if recordingfield.name == "content">
1623 ${htmlUtil.unescape(recordingfield.contentFieldValue.data)}
1624 </#if>
1625 </#list>
1626 <hr />
1627
1628 <h3>${video.title}</h3>
1629 <#list video.contentFields as videofield>
1630 <#if videofield.name == "content">
1631 ${htmlUtil.unescape(videofield.contentFieldValue.data)}
1632 </#if>
1633 </#list>
1634 <hr />
1635
1636 <h3>${nasba.title}</h3>
1637 <#list nasba.contentFields as nasbafield>
1638 <#if nasbafield.name == "content">
1639 ${htmlUtil.unescape(nasbafield.contentFieldValue.data)}
1640 </#if>
1641 </#list>
1642 </div>
1643 </div>
1644 </#if>
1645 </div>
1646</#if>
1647
1648
1649
1650 <!-- End -->
1651<#if hasSkus == "true" || infoObj["Alternate URL"]?has_content>
1652 <script>
1653 function navigateToRegistration(){
1654 var defaultURL = '${displayMapValue[defaultSKUKey]}';
1655
1656 var deliveryMethod = document.getElementById("delivery-method");
1657 if(deliveryMethod){
1658 defaultURL = deliveryMethod.value;
1659 }
1660 window.location.href = defaultURL;
1661 }
1662 </script>
1663</#if>
1664<!-- Handle Registration Form button click -->
1665<script>
1666 function navigateToRegForm(){
1667
1668 window.open('/documents/d/asset-library-45247/icba-education-registration-form', '_blank');
1669 }
1670 </script>
1671
1672<#if isWebinar == "true" && numberOfOptions gt 1 && !infoObj["Alternate URL"]?has_content>
1673<script>
1674
1675 const delveryMethodSelect = document.getElementById('delivery-method');
1676 const registrationButton = document.getElementById('productRegistrationBtn');
1677 registrationButton.classList.add("disabled");
1678 if(delveryMethodSelect){
1679 delveryMethodSelect.onchange = function() {
1680 const selectedValue = delveryMethodSelect.value;
1681
1682 if(selectedValue){
1683 registrationButton.classList.remove("disabled");
1684 } else {
1685 registrationButton.classList.add("disabled");
1686 }
1687 }
1688 };
1689
1690</script>
1691</#if>