Fehler bei der Verarbeitung der Vorlage.
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10153#10191#6524599" at line 8, column 17] ---- 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 bCode = qstringmap["bankercod... [in template "10153#10191#6524599" at line 8, column 1] ----
1<#assign url = themeDisplay.getURLCurrent() >
2<#assign oadURL = propsUtil.get('elan.oad.url') >
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
4<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
5<#assign url404 = '/error/404.html'>
6
7
8<#assign bCode= qstringmap["bankercode"]?first>
9<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetail','0&'+bCode)>
10<#list bData as b>
11 <#assign lc = b.locationcode >
12 <#assign rLC = b.reallocationcode >
13 <#assign mappedLC = b.mappedLocationCode >
14</#list>
15<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
16 <#assign ameriprise = true>
17<#else>
18 <#assign ameriprise = false>
19</#if>
20
21<#if mappedLC?has_content && !ameriprise>
22 <#assign lc = mappedLC >
23</#if>
24
25<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedApp','0&'+bCode)>
26<#if fiData?first?has_content>
27 <#assign fi = fiData?first>
28 <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14"))>
29 <#assign subbu_special = fi.offerId>
30 </#if>
31</#if>
32
33
34<#if lc?has_content>
35 <#assign prefix = "00000" >
36 <#assign lcWithPrefix = prefix + lc>
37 <#assign withPrefixLength = lcWithPrefix?length >
38 <#assign startHere = withPrefixLength - 5>
39 <#assign lc = lcWithPrefix?substring(startHere)>
40 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
41 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
42
43 <#assign clientProfile = clientProfileList?first>
44 <#assign partnerName = clientProfile.getMarketingNameLong()>
45 <#assign pbu = clientProfile.getPbu()>
46 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
47 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
48 <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
49 <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
50 <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\://.*")>
51 <#assign partnerUrl = 'https://' + partnerUrl>
52 </#if>
53
54 <#assign clientdata = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')>
55 <#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case>
56 <#assign cdnLogoUrl = propsUtil.get('rackspace.cdn.web.url')>
57 <script>
58 console.log('logo url', '${cdnLogoUrl}${logoFileName}');
59 </script>
60 <#if pbu == "0864054">
61 <#assign override = "berkshire">
62 <#else>
63 <#assign override = " ">
64 </#if>
65 <#-- this one should be delete for prod -->
66
67 <#assign cdnLogoUrl = "https://4f61efb10f32ceb57895-3733e103896f37259213d6ad72acbe68.ssl.cf2.rackcdn.com">
68 <#assign logoFileName = pbu + "-" + subbu + ".png">
69
70 <#assign cdnCardArtUrl = propsUtil.get('rackspace.cdn.cardart.url')>
71 <#if (subbu_special?has_content)>
72 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>
73 <script>
74 console.log('new subbu', '${subbu_special!''}');
75 </script>
76 <#else>
77 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
78 </#if>
79 <#assign temp = []>
80 <#assign consumerCards = []>
81 <#assign businessCards = []>
82 <#assign offerTypeList = []>
83 <#assign index = 0>
84 <#assign ameriprise_cards= []>
85 <#assign consumerOfferTypes =['104', '101', '103', '108', '109', '115']>
86 <#assign businessOfferTypes =['144', '128', '143', '121', '123']>
87 <#list fiCardsData as fib>
88 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
89 <#assign offerTypeList = offerTypeList + [fib.offerType]>
90 <#assign temp = temp + fiCardsData[index..index]>
91 <#if ameriprise>
92 <#if (fib.offerType == "101" || fib.offerType == "103")>
93 <#assign ameriprise_cards= ameriprise_cards + fiCardsData[index..index]>
94 </#if>
95 <#else>
96 <#if consumerOfferTypes?seq_contains(fib.offerType)>
97 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
98 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
99 <#assign businessCards = businessCards + fiCardsData[index..index]>
100 </#if>
101 </#if>
102 </#if>
103 <#assign index = index + 1>
104
105 </#list>
106 <#assign fiCardsData = temp>
107 <#if ameriprise>
108 <#assign consumerCards = ameriprise_cards?sort_by("offerType")>
109 </#if>
110
111 <#if (fiCardsData?size > 0)>
112 <#if (subbu_special?has_content)>
113 <#assign lc_used = fiCardsData?first.WebLocationCode>
114 <#else>
115 <#if ameriprise>
116 <#assign lc_used = mappedLC>
117 <#else>
118 <#assign lc_used = lc>
119 </#if>
120 </#if>
121 <#assign offerId = "">
122 <#assign sourceCode = "">
123 <#assign cardArtImage = "">
124 <#assign productUrl = "">
125 <#assign product = "">
126 <#assign preparerType = "customer">
127 <#assign apr = "">
128 <#assign cardIndex = 0>
129 <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)>
130 <#if (offerTypeList?seq_contains("108")) || (offerTypeList?seq_contains("109")) >
131 <#list consumerCards as card>
132 <#if (card.offerType=="108") || (card.offerType=="109") >
133 <#assign offerId = card.offerId>
134 <#assign sourceCode = card.sourceCode>
135 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
136 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
137 <#assign productUrl="consumer-platinum">
138 <#assign product="Platinum">
139 <#assign cardIndex = 2>
140 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
141 <#if (scrapedData?size > 0)>
142 <#list scrapedData as sItem>
143 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
144 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
145 <#break>
146 </#if>
147 </#list>
148 <script>
149 $(document).ready(function () {
150 var aprText = "${apr}";
151 if (aprText) {
152 try {
153 var matches= aprText.match(/\d+(\.\d+)?%?/g);
154 var billing_cycle = matches[1];
155 var apr_min = apr_min = matches[2];
156 var apr_max = apr_max = matches[3];
157 if (billing_cycle) {
158 $(".scraped-billing-cycle").html(billing_cycle);
159 }
160 if (apr_min) {
161 $(".scraped-apr-min").html(apr_min);
162 }
163 if (apr_max) {
164 $('.scraped-apr-max').html(apr_max);
165 }
166
167 } catch (e) {
168 console.log(e);
169 }
170 }
171 });
172 </script>
173 </#if>
174 </#if>
175 </#list>
176 <#else>
177 <#assign displayedCard = consumerCards[0]>
178 <script>
179 console.log('dispalyed card:','${displayedCard.offerType}');
180 </script>
181 <#assign offerId = displayedCard.offerId>
182 <#assign sourceCode = displayedCard.sourceCode>
183 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
184 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
185 <#if ameriprise>
186 <#if (displayedCard.offerType == "101")>
187 <#assign productUrl="ameriprise-premier-visa-signature">
188 <#assign product="Premier Visa Signature">
189 <#assign cardIndex = 0>
190 <#elseif (displayedCard.offerType == "103")>
191 <#assign productUrl = "ameriprise-visa-signature">
192 <#assign product="Visa Signature">
193 <#assign cardIndex = 1>
194 </#if>
195 <#else>
196 <#if (displayedCard.offerType == "101" || displayedCard.offerType == "103")>
197 <#assign productUrl="real-rewards">
198 <#assign product="Real Rewards">
199 <#assign cardIndex = 1>
200 <#elseif (displayedCard.offerType == "108" || displayedCard.offerType == "109")>
201 <#assign productUrl = "consumer-platinum2103">
202 <#assign product="Platinum">
203 <#assign cardIndex = 2>
204 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
205 <#if (scrapedData?size > 0)>
206 <#list scrapedData as sItem>
207 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
208 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
209 <#break>
210 </#if>
211 </#list>
212 <script>
213 $(document).ready(function () {
214 var aprText = "${apr}";
215 if (aprText) {
216 try {
217 var matches= aprText.match(/\d+(\.\d+)?%?/g);
218 var billing_cycle = matches[1];
219 var apr_min = apr_min = matches[2];
220 var apr_max = apr_max = matches[3];
221 if (billing_cycle) {
222 $(".scraped-billing-cycle").html(billing_cycle);
223 }
224 if (apr_min) {
225 $(".scraped-apr-min").html(apr_min);
226 }
227 if (apr_max) {
228 $('.scraped-apr-max').html(apr_max);
229 }
230
231 } catch (e) {
232 console.log(e);
233 }
234 }
235 });
236 </script>
237 </#if>
238 <#elseif (displayedCard.offerType == "115")>
239 <#assign productUrl = "secured">
240 <#assign product="Secured">
241 <#assign cardIndex = 3>
242 </#if>
243 </#if>
244 </#if>
245 </#if>
246 <#if (class.getData() == "landing-business" && businessCards?size > 0)>
247 <#if (offerTypeList?seq_contains("144")) >
248 <#list businessCards as card>
249 <#if (card.offerType=="144")>
250 <#assign offerId = card.offerId>
251 <#assign sourceCode = card.sourceCode>
252 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
253 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
254 <#assign productUrl="smart-business-rewards">
255 <#assign product="Smart Business Rewards">
256 <#assign cardIndex = 0>
257 </#if>
258 </#list>
259 <#else>
260 <#assign displayedCard = businessCards[0]>
261 <#assign offerId = displayedCard.offerId>
262 <#assign sourceCode = displayedCard.sourceCode>
263 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
264 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
265
266 <#if (displayedCard.offerType=="143")>
267 <#assign productUrl="business-real-rewards">
268 <#assign product="Business Real Rewards">
269 <#assign cardIndex = 0>
270 <#elseif (displayedCard.offerType=="128")>
271 <#assign productUrl = "business-cashback">
272 <#assign product="Business Cash">
273 <#assign cardIndex = 1>
274 <#elseif (displayedCard.offerType=="121")>
275 <#assign productUrl = "visa-business">
276 <#assign product="Visa Business">
277 <#assign cardIndex = 3>
278 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
279 <#if (scrapedData?size > 0)>
280 <#list scrapedData as sItem>
281 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
282 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
283 <#break>
284 </#if>
285 </#list>
286 <script>
287 $(document).ready(function () {
288 var aprText = "${apr}";
289 if (aprText) {
290 try {
291 var matches= aprText.match(/\d+(\.\d+)?%?/g);
292 var billing_cycle = matches[1];
293 var apr_min = apr_min = matches[2];
294 var apr_max = apr_max = matches[3];
295 if (billing_cycle) {
296 $(".scraped-billing-cycle").html(billing_cycle);
297 }
298 if (apr_min) {
299 $(".scraped-apr-min").html(apr_min);
300 }
301 if (apr_max) {
302 $('.scraped-apr-max').html(apr_max);
303 }
304
305 } catch (e) {
306 console.log(e);
307 }
308 }
309 });
310 </script>
311 </#if>
312 </#if>
313 </#if>
314 </#if>
315 <#if product != "">
316 <#if ameriprise>
317 <#assign card_art_alt = partnerName + " " + product + " Card">
318 <#assign rollover_text = partnerName + " " + product + " Card">
319 <#else>
320 <#assign card_art_alt = partnerName>
321 <#assign rollover_text = partnerName + " " + product + " Credit Card">
322 <#assign card_text = product + " Card">
323 </#if>
324 </#if>
325 <div class="jn-hero-container product-${productUrl} tier1-hero-${class.getData()}" title="${rollover_text!''}">
326 <div class="hero-main">
327 <div class="hero-main-logo">
328 <#if partnerUrl?has_content>
329 <a href="${partnerUrl!''}" title="${partnerName!''}"><img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''}"></a>
330 <#else>
331 <a title="${partnerName!''}"><img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''}"></a>
332 </#if>
333 </div>
334 <div class="hero-main-container">
335 <div class="hero-main-offer bg-color-white">
336 <div class="offer-header bg-color-black text-color-white text-bold">${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}</div>
337 <div class="offer-detail">
338 <div class="offer-detail-head">${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}</div>
339 <div class="offer-detail-text text-color-default">
340 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()}
341 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()}
342 </div>
343 <div class="offer-detail-cardArt">
344 <img src="${cardArtImage!''}" alt="${card_art_alt!''}" srcset="" title="${card_art_alt!''}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
345 <p>${card_text!''}</p>
346 </div>
347 <#if ameriprise>
348 <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="jn-button apply-button text-bold button-bg-color-custom text-color-white" href="javascript:void(0);" onclick="goToByScroll('product-display')">${productTitle.getSiblings()[cardIndex].ctaText.getData()}</a>
349 <#else>
350 <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&sourceCode=${sourceCode}" method="post" class="BAAForm">
351 <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
352 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea>
353 <input type="submit" data-button-name="cta-button-top" data-product-name="${productUrl!''}" title="Apply Now for ${partnerName!''} ${product!''} Credit Card"
354 class="jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" value="${productTitle.getSiblings()[cardIndex].ctaText.getData()}" disabled />
355 </form>
356 </#if>
357 </div>
358 </div>
359 </div>
360 </div>
361 </div>
362
363 </#if>
364</#if>
Fehler bei der Verarbeitung der Vorlage.
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10153#10191#6524603" at line 29, column 17] ---- 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 bCode = qstringmap["bankercod... [in template "10153#10191#6524603" at line 29, column 1] ----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
2<#assign oadURL = propsUtil.get('elan.oad.url') >
3<#assign url = themeDisplay.getURLCurrent() >
4<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
5<#assign url404 = '/error/404.html'>
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
7<#assign environment = url?replace('/index.*','','r')>
8
9
10
11<#assign text_to_apply_source = "vanity url" >
12<#if qstringmap["sms"]?has_content>
13 <#assign sms = 1 >
14 <#assign text_to_apply_source = "sms" >
15</#if>
16<#if qstringmap["qrCode"]?has_content>
17 <#assign text_to_apply_source = "qr code" >
18</#if>
19
20<#if qstringmap["ecid"]?has_content>
21 <#assign ecidExt="&ecid="+qstringmap["ecid"]?first>
22 <#assign campaignId = qstringmap["ecid"]?first >
23<#else>
24 <#assign ecidExt="">
25 <#assign campaignId = "" >
26</#if>
27<#-- check bankercode validity -->
28
29<#assign bCode= qstringmap["bankercode"]?first>
30
31<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedApp','0&'+bCode)>
32<#if fiData?first?has_content>
33 <#assign fi = fiData?first>
34 <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14"))>
35 <#assign subbu_special = fi.offerId>
36 </#if>
37</#if>
38
39<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetail','0&'+bCode)>
40<#list bData as b>
41 <#assign lc = b.locationcode >
42 <#assign bName = b.branch >
43 <#assign bPhone = b.businessphone >
44 <#assign boeid = b.oeid >
45 <#assign fName = b.firstname?trim >
46 <#assign lName = b.lastname?trim >
47 <#assign rLC = b.reallocationcode >
48 <#assign mappedLC = b.mappedLocationCode >
49</#list>
50
51<#if qstringmap["ecdma-lc"]?has_content>
52 <#assign lc_url= qstringmap["ecdma-lc"]?first>
53</#if>
54
55<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
56 <#assign ameriprise = true>
57<#else>
58 <#assign ameriprise = false>
59</#if>
60<#if mappedLC?has_content && !ameriprise>
61 <#assign lc = mappedLC >
62</#if>
63
64
65<#if lc?has_content>
66 <#assign firstNameLength = fName?length >
67 <#assign lastNameLength = lName?length >
68 <#if firstNameLength + lastNameLength > 19 >
69 <#if lastNameLength > 18 >
70 <#assign bLName = lName?substring(0,18)>
71 <#else>
72 <#assign bLName = lName>
73 </#if>
74 <#assign maxFirstName = 19 - bLName?length >
75 <#if firstNameLength > maxFirstName >
76 <#assign bFName = fName?substring(0,maxFirstName)>
77 <#else>
78 <#assign bFName = fName>
79 </#if>
80 <#else>
81 <#assign bFName = fName>
82 <#assign bLName = lName>
83 </#if>
84
85 <#assign prefix = "00000" >
86 <#assign lcWithPrefix = prefix + lc >
87 <#assign withPrefixLength = lcWithPrefix?length >
88 <#assign startHere = withPrefixLength - 5>
89 <#assign lc = lcWithPrefix?substring(startHere)>
90 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
91 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
92 <#if (clientProfileList?first?has_content)>
93 <#assign clientProfile = clientProfileList?first>
94 <#assign partnerName = clientProfile.getMarketingNameLong()>
95 <#assign pbu = clientProfile.getPbu()>
96 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
97 <#assign cdnCardArtUrl = propsUtil.get('rackspace.cdn.cardart.url')>
98 <#if (subbu_special?has_content)>
99 <script>
100 console.log("special subbu:", '${subbu_special}');
101 </script>
102 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>
103 <#else>
104 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
105 <script>
106 console.log("subbu:", '${subbu}');
107 </script>
108 </#if>
109
110 <#-- Begin: filter cards by sourceCode and offerId and remove duplicated cards-->
111 <#assign temp = []>
112 <#assign consumerCards = []>
113 <#assign businessCards = []>
114 <#assign offerTypeList = []>
115 <#assign consumerOfferTypes =['104', '101', '103', '108', '109', '115']>
116 <#assign businessOfferTypes =['144', '128', '143', '121', '123']>
117 <#assign index = 0>
118 <#list fiCardsData as fib>
119 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
120 <#assign offerTypeList = offerTypeList + [fib.offerType]>
121 <#assign temp = temp + fiCardsData[index..index]>
122 <#if consumerOfferTypes?seq_contains(fib.offerType)>
123 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
124 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
125 <#assign businessCards = businessCards + fiCardsData[index..index]>
126 </#if>
127 </#if>
128 <#assign index = index + 1>
129 </#list>
130
131
132 <#assign fiCardsData = temp>
133
134 <#if (fiCardsData?size > 0)>
135 <#if (subbu_special?has_content)>
136 <#assign lc_used = fiCardsData?first.WebLocationCode>
137 <#else>
138 <#if ameriprise>
139 <#assign lc_used = lc_url>
140 <#else>
141 <#assign lc_used = mappedLC>
142 </#if>
143 </#if>
144 </#if>
145
146 <#if (consumerCards?size > 0 || businessCards?size > 0)>
147
148 <div class="content-container content-container-main jn-consumer-content" id="product-display">
149 <#if ((consumerCards?size > 0) && (businessCards?size > 0))>
150 <nav class="jn-primary-nav two-tabs">
151 <ul>
152 <li title="${partnerName!''} - Personal products">
153 <a href="#" class="tab-nav active" id="consumerTab"><span>Personal</span></a>
154 </li>
155 <li title="${partnerName!''} - Business products">
156 <a href="#" class="tab-nav" id="businessTab"><span>Business</span></a>
157 </li>
158 </ul>
159 </nav>
160 <#else>
161 <#if (consumerCards?size > 0)>
162 <nav class="jn-primary-nav" title="${partnerName!''} - Personal products">
163 <ul>
164 <li>
165 <p class="tab-nav" id="consumerTab"><span>Personal</span></p>
166 </li>
167 </ul>
168 </nav>
169 </#if>
170 <#if (businessCards?size > 0)>
171 <nav class="jn-primary-nav" title="${partnerName!''} - Business products">
172 <ul>
173 <li>
174 <p class="tab-nav" id="businessTab"><span>Business</span></p>
175 </li>
176 </ul>
177 </nav>
178 </#if>
179 </#if>
180 <#if (consumerCards?size > 0)>
181 <div class="tab-more-wrapper">
182 <div class="jn-consumer-content-wrapper jn-tab-content active transition-start" data-id="consumerTab" title="${partnerName!''} - Personal products">
183 <#list consumerCards as fib>
184 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png" >
185 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg">
186 <#if ameriprise>
187 <#if (fib.offerType == "101")>
188 <#assign productName = "premier-visa-signature">
189 <#assign product="Premier Visa Signature">
190 <#assign cardIndex = 0>
191 <#elseif (fib.offerType == "103")>
192 <#assign productName = "visa-signature">
193 <#assign product="Visa Signature">
194 <#assign cardIndex = 1>
195 </#if>
196 <#assign titleText = consumerTitle.getSiblings()[cardIndex].Title.getData()>
197 <#assign titleText = titleText?replace('<[^>]+>','','r')>
198 <#else>
199 <#switch fib.offerType>
200 <#case "101">
201 <#assign productName = "real-rewards">
202 <#assign product="Real Rewards">
203 <#assign cardIndex = 1>
204 <#break>
205 <#case "108">
206 <#assign productName = "consumer-platinum2103">
207 <#assign product="Platinum">
208 <#assign cardIndex = 2>
209
210 <#break>
211 <#case "109">
212 <#assign productName = "consumer-platinum2103">
213 <#assign product="Platinum">
214 <#assign cardIndex = 2>
215 <#break>
216 <#case "115">
217 <#assign productName = "secured">
218 <#assign product="Secured">
219 <#assign cardIndex = 3>
220 <#break>
221 <#case "104">
222 <#assign productName = "max-cash">
223 <#assign product="Max Cash">
224 <#assign cardIndex = 0>
225 <#break>
226 <#default>
227 </#switch>
228
229 <#assign titleText = consumerTitle.getSiblings()[cardIndex].Title.getData()>
230 <#assign titleText = titleText?replace('<[^>]+>','','r')>
231
232
233 <#assign APR="">
234 <#assign AMF="">
235 <#assign BAL="">
236 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', fib.offerId + '&'+ fib.sourceCode)>
237 <#if (scrapedData?size > 0)>
238 <#list scrapedData as sItem>
239 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
240 <#assign APR = sItem.scrapedValue>
241 <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) >
242 <#assign AMF = sItem.scrapedValue>
243 <#elseif ((sItem.scrapedLabel?contains("APR for Balance Transfers")) && (sItem.scrapedValue?has_content)) >
244 <#assign BAL = sItem.scrapedValue>
245 </#if>
246 <#if (APR?has_content && AMF?has_content && BAL?has_content)>
247 <#break>
248 </#if>
249 </#list>
250 </#if>
251 </#if>
252 <#if ameriprise>
253 <#assign rollover_text = partnerName + " " + product + " " + " Card">
254 <#else>
255 <#assign rollover_text = partnerName + " " + product + " " + " Credit Card">
256 </#if>
257 <div class="jn-consumer-item item-${fib.offerType}" title="${rollover_text!''}">
258 <img src="${cardArtImage!''}" alt="${rollover_text!''}"
259 class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
260 <h4>${consumerTitle.getSiblings()[cardIndex].Title.getData()}</h4>
261 <p>${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}</p>
262 <ul class="actions">
263 <li>
264 <form action="${oadURL}?locationCode=${lc_used}&offerId=${fib.offerId}&preparerType=customer&sourceCode=${fib.sourceCode}" method="post" class="BAAForm">
265 <label for="appDataBAA-${fib.offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
266 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${fib.offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea>
267 <a class="applyNowLink apply-now-button" href="${oadURL}?locationCode=${lc_used}&offerId=${fib.offerId}&preparerType=customer&sourceCode=${fib.sourceCode}"
268 data-button-name="apply-now-link" data-product-name="${productName}"
269 title="Apply Now for ${rollover_text!''}">${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}</a>
270 </form>
271 </li>
272 <li>
273 <#if ameriprise>
274 <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc_used}${ecidExt}">${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}</a>
275 <#else>
276 <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}">${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}</a>
277 </#if>
278 </li>
279 </ul>
280 <div class="jn-additional">
281 <ul class="${fib.offerType}">
282 <#if !ameriprise>
283 <#if (fib.offerType == "104")>
284 <li class="${fib.offerType}">
285 <p>
286 <strong>APR<sup>*</sup> for Purchases: </strong>
287 ${APR!''}
288 </p>
289
290 </li>
291 <li class="${fib.offerType}">
292 <p>
293 <strong>Intro APR<sup>*</sup> for Balance Transfers: </strong>
294 ${BAL!''} <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc_used}" target="_blank">Terms & Conditions</a>
295 </p>
296 </li>
297 <#elseif (fib.offerType== "115")>
298 <li class="${fib.offerType}">
299 <p>
300 <strong>APR<sup>*</sup> for Purchases and Balance Transfers: </strong>
301 ${APR!''} <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc_used}" target="_blank">Terms & Conditions</a>
302 </p>
303 </li>
304 <#else>
305 <li class="${fib.offerType}">
306 <p>
307 <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong>
308 ${APR!''} <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc_used}" target="_blank">Terms & Conditions</a>
309 </p>
310 </li>
311 </#if>
312 </#if>
313 <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content>
314 <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo>
315 <li>${marketingInfo.getData()}</li>
316 </#list>
317 </#if>
318 <#if !ameriprise>
319 <li>
320 <p>Annual Fee: ${AMF!''} <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc_used}" target="_blank">Terms & Conditions</a></p>
321 </li>
322 </#if>
323 </ul>
324 </div>
325 </div>
326
327
328 </#list>
329 </div>
330
331 </div>
332
333 </#if>
334 <#if (businessCards?size > 0)>
335 <div class="tab-more-wrapper">
336 <div class="jn-consumer-content-wrapper jn-tab-content transition-start" data-id="businessTab" title="${partnerName!''} - Business products">
337
338 <#list businessCards as fib>
339 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">
340 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg">
341 <#switch fib.offerType>
342 <#case "144">
343 <#assign productName = "smart-business-rewards">
344 <#assign product="Smart Business Rewards">
345 <#assign cardIndex = 4>
346 <#break>
347 <#case "128">
348 <#assign productName = "business-cashback">
349 <#assign product="Business Cash">
350 <#assign cardIndex = 5>
351 <#break>
352 <#case "143">
353 <#assign productName = "business-real-rewards">
354 <#assign product="Business Real Rewards">
355 <#assign cardIndex = 6>
356 <#break>
357 <#case "121">
358 <#assign productName = "visa-business">
359 <#assign product="Business Card">
360 <#assign cardIndex = 7>
361 <#break>
362 <#default>
363 </#switch>
364 <#assign APR="">
365 <#assign AMF="">
366 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', fib.offerId + '&'+ fib.sourceCode)>
367 <#if (scrapedData?size > 0)>
368 <#list scrapedData as sItem>
369 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
370 <#assign APR = sItem.scrapedValue>
371 <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) >
372 <#assign AMF = sItem.scrapedValue>
373 </#if>
374 <#if (APR?has_content && AMF?has_content)>
375 <#break>
376 </#if>
377 </#list>
378 </#if>
379
380 <div class="jn-consumer-item item-${fib.offerType}" title="${partnerName!''} ${product!''} Credit Card">
381 <img src="${cardArtImage!''}" alt="${partnerName!''}" class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
382 <h4>${consumerTitle.getSiblings()[cardIndex].Title.getData()}</h4>
383 <p>${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}</p>
384 <ul class="actions">
385 <li>
386 <form action="${oadURL}?locationCode=${lc_used}&offerId=${fib.offerId}&preparerType=customer&sourceCode=${fib.sourceCode}" method="post" class="BAAForm">
387 <label for="appDataBAA-${fib.offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
388 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${fib.offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea>
389 <a class="applyNowLink apply-now-button"
390 href="${oadURL}?locationCode=${lc_used}&offerId=${fib.offerId}&preparerType=customer&sourceCode=${fib.sourceCode}"
391 data-button-name="apply-now-link" data-product-name="${productName}"
392 title="Apply Now for ${partnerName!''} ${product!''} Credit Card">${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}</a>
393 </form>
394 </li>
395 <li><a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}">${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}</a></li>
396 </ul>
397 <div class="jn-additional">
398 <ul>
399 <#if (fib.offerType == "144")>
400 <li>
401 <p>
402 <strong>APR<sup>*</sup> for Purchases and Balance Transfers: </strong>
403 ${APR!''}
404 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc_used}" target="_blank">Terms & Conditions</a>
405 </p>
406 </li>
407 <#else>
408 <li>
409 <p>
410 <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong>
411 ${APR!''}
412 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc_used}" target="_blank">Terms & Conditions</a>
413 </p>
414 </li>
415 </#if>
416 <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content>
417 <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo>
418 <li>${marketingInfo.getData()}</li>
419 </#list>
420 </#if>
421 <li><p>Annual Fee: ${AMF!''} <a
422 href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc_used}" target="_blank">Terms & Conditions</a></p>
423 </li>
424 </ul>
425 </div>
426 </div>
427
428 </#list>
429
430 </div>
431 </div>
432 </#if>
433 <div class="more-link" ><a href="#" role="button" aria-label="More Cards"><div class="more-text">MORE <br> CARDS </div><div class="more-caret"></div></a></div>
434 <div class="less-link"><a href="#" role="button" aria-label="Less Cards"><div class="less-caret"></div> <div class="less-text">BACK</div></a></div>
435 </div>
436 <script>
437 var consumerSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="consumerTab"]';
438 var businessSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="businessTab"]';
439 $(document).ready(function () {
440 var banker_code = "${bCode!''}";
441 var tabs=$('.tab-nav');
442 var slideDiv = $('.jn-tab-content.active');
443 var screenWidthMobile = 768;
444 var screenWidth = window.innerWidth;
445
446 if (tabs.length == 1) {
447 if ($(consumerSelector).length > 0) {
448 if(banker_code && (banker_code.indexOf("amp") == 0) && (banker_code.length > 6)) {
449 $("nav.jn-primary-nav").hide();
450 changeCardLayout(consumerSelector);
451 createMetaTag("consumer");
452 } else {
453 hideHeroAndDisclaimer('business');
454 showHeroAndDisclaimer('consumer');
455 changeCardLayout(consumerSelector);
456 renumberFootnote("consumer");
457 createMetaTag("consumer");
458 }
459 }
460 if ($(businessSelector).length > 0) {
461 $(businessSelector).addClass('active');
462 hideHeroAndDisclaimer('consumer');
463 showHeroAndDisclaimer('business');
464 changeCardLayout(businessSelector);
465 renumberFootnote("business");
466 createMetaTag("business");
467 }
468 if(screenWidth > screenWidthMobile) {
469 if ($("#consumerTab").length > 0) {
470 if ($(consumerSelector + ' .jn-consumer-item').length > 3) {
471 $('.more-link').show();
472 } else {
473 $('.more-link').hide();
474 $('.less-link').hide();
475 }
476 } else if ($("#businessTab").length > 0) {
477 if ($(businessSelector + ' .jn-consumer-item').length > 3) {
478 $('.more-link').show();
479 } else {
480 $('.more-link').hide();
481 $('.less-link').hide();
482 }
483 }
484
485 }
486 }
487 if (tabs.length == 2) {
488 renumberFootnote("consumer");
489 renumberFootnote("business");
490 createMetaTag("consumer");
491 if ($(consumerSelector + ' .jn-consumer-item').length < 3) {
492 changeCardLayout(consumerSelector);
493 }
494 if ($(businessSelector + ' .jn-consumer-item').length < 3) {
495 changeCardLayout(businessSelector);
496 }
497 if(screenWidth > screenWidthMobile) {
498 if ($(consumerSelector + ' .jn-consumer-item').length > 3) {
499 $('.more-link').show();
500 } else {
501 $('.more-link').hide();
502 $('.less-link').hide();
503 }
504 /*
505 if ($(businessSelector + ' .jn-consumer-item').length > 3) {
506 $('.more-link').show();
507 } else {
508 $('.more-link').hide();
509 $('.less-link').hide();
510 }
511 */
512
513 $(tabs).click(function(){
514 if ($(this).attr('id') === "consumerTab") {
515 if ($(consumerSelector + ' .jn-consumer-item').length > 3) {
516 slideDiv = $('.jn-tab-content.active');
517 $(slideDiv).removeClass('transition-left');
518 $('.less-link').hide();
519 $('.more-link').show();
520 } else {
521 $('.less-link').hide();
522 $('.more-link').hide();
523 }
524 }
525
526 if ($(this).attr('id') === "businessTab") {
527 if ($(businessSelector + ' .jn-consumer-item').length > 3) {
528 slideDiv = $('.jn-tab-content.active');
529 $(slideDiv).removeClass('transition-left');
530 $('.less-link').hide();
531 $('.more-link').show();
532 } else {
533 $('.less-link').hide();
534 $('.more-link').hide();
535 }
536 }
537 });
538
539 }
540 var tabsNav = document.querySelectorAll('.tab-nav');
541 togglePrimaryNav(tabsNav);
542
543 }
544 $('.more-link, .less-link').click(function(e){
545 e.preventDefault();
546 });
547 $('.more-link').click(function(){
548 slideDiv = $('.jn-tab-content.active');
549 $(slideDiv).addClass('transition-left');
550 $('.less-link').show();
551 $(this).hide();
552 });
553 $('.less-link').click(function(){
554 slideDiv = $('.jn-tab-content.active');
555 $(slideDiv).removeClass('transition-left');
556 $(this).hide();
557 $('.more-link').show();
558 });
559
560 });
561
562 // Primary Nav function
563
564 function togglePrimaryNav(elem) {
565 for (var i = 0; i < elem.length; i++) {
566 elem[i].addEventListener("click", function(e) {
567
568 var current = this,
569 allSections = document.querySelectorAll('[data-id]'),
570 section = document.querySelector("[data-id='"+ current.id +"']");
571
572 for (var a = 0; a < allSections.length; a++) {
573 allSections[a].classList.remove('active');
574 }
575 for (var c = 0; c < elem.length; c++) {
576 if (current != elem[c]) {
577 elem[c].classList.remove('active');
578 } else {
579 current.classList.add('active');
580 section.classList.add('active');
581 hideHeroAndDisclaimer('consumer');
582 hideHeroAndDisclaimer('business');
583 if(current.getAttribute('id') === "consumerTab"){
584 showHeroAndDisclaimer('consumer');
585 } else if(current.getAttribute('id') === "businessTab"){
586 showHeroAndDisclaimer('business');
587 }
588 }
589 }
590 e.preventDefault();
591 });
592 }
593 }
594
595 function renumberFootnote(type) {
596 var discriptionSelector = '.jn-consumer-content-wrapper.jn-tab-content' + '[data-id="' + type + 'Tab"]';
597 var disclaimerSelector = '.tier1-disclaimer-landing-' + type;
598 var heroSelector = '.tier1-hero-landing-' + type;
599 var numOfFootnote = $(disclaimerSelector + ' sup').length;
600 var showList = [];
601 var hideList=[];
602 for (var i = 1; i <= numOfFootnote; i++) {
603 var cssClass="tag-" + i;
604 if ($(discriptionSelector + ' sup').hasClass(cssClass) || $(heroSelector + ' sup').hasClass(cssClass)) {
605 showList.push(i);
606 } else {
607 hideList.push(i);
608 }
609 }
610 for (var i = 1; i < showList.length + 1; i++) {
611 if(showList[i-1] != i) {
612 var className="tag-" + showList[i-1];
613 $(heroSelector).find("." + className).html(i);
614 $(discriptionSelector).find("." + className).html(i);
615 $(disclaimerSelector).find("." + className).html(i);
616 }
617 }
618 for (var i = 0; i <hideList.length; i++) {
619 var cname="tag-" + hideList[i];
620 $(disclaimerSelector).find("." + cname).parent().hide();
621 }
622 }
623
624 function changeCardLayout(cssSelector) {
625 var numOfCards = $(cssSelector + ' .jn-consumer-item').length;
626 if(numOfCards == 1) {
627 $(cssSelector).addClass('one-card');
628 } else if (numOfCards == 2) {
629 $(cssSelector).addClass('two-card');
630 }
631 }
632 function hideHeroAndDisclaimer(type) {
633 try {
634 document.querySelector('.tier1-hero-landing-'+ type).classList.remove('show');
635 document.querySelector('.tier1-hero-landing-'+ type).classList.add('hide');
636 } catch (e) {
637 console.log(e);
638 }
639
640 try {
641 document.querySelector('.tier1-disclaimer-landing-'+ type).classList.remove('show');
642 document.querySelector('.tier1-disclaimer-landing-'+ type).classList.add('hide');
643 } catch (e) {
644 console.log(e);
645 }
646
647 }
648 function showHeroAndDisclaimer(type) {
649 try {
650 document.querySelector('.tier1-hero-landing-'+ type).classList.add('show');
651 document.querySelector('.tier1-hero-landing-'+ type).classList.remove('hide');
652 } catch (e) {
653 console.log(e);
654 }
655
656 try {
657 document.querySelector('.tier1-disclaimer-landing-'+ type).classList.add('show');
658 document.querySelector('.tier1-disclaimer-landing-'+ type).classList.remove('hide');
659 } catch (e) {
660 console.log(e);
661 }
662
663 }
664 function createMetaTag(type) {
665 var partnerName = "${partnerName!0}";
666 var product_name = $('.jn-hero-container .jn-button').data('product-name');
667 var metaDesc = "";
668 if (type == "consumer") {
669 if(location.pathname.indexOf("11t1m") != -1) {
670 metaDesc = "Apply Today for an Ameriprise Financial Credit Card. Earn Rewards Points worth $375 cash value when deposited into an eligible account after spending $3,000 in eligible net purchases within the first 90 days of account opening."
671 } else {
672 if(product_name == "consumer-platinum2103") {
673 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Limited Time Offer. 0% Intro APR on Purchases and Balance Transfers for 20 Billing Cycles Consolidate your Balances with the "+partnerName+" Intro APR Card.";
674 } else if(product_name == "real-rewards") {
675 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Take home 2,500 bonus points after your first purchase.";
676 } else if(product_name == "secured") {
677 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit.";
678 } else if(product_name == "max-cash") {
679 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus and 5% cash back on the two categories you select.";
680 }
681 }
682
683 } else if (type == "business") {
684 if(product_name == "business-cashback") {
685 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses.";
686 } else if(product_name == "business-real-rewards") {
687 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on.";
688 } else if(product_name == "business-visa") {
689 metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles";
690 } else if(product_name == "smart-business-rewards") {
691 metaDesc = "Apply Today for a "+partnerName+" Credit Card. More choices. More value for your business. Earn a $200 Bonus and 2x Rewards on your top 2 spend categories each month with the "+partnerName+" Credit Card.";
692 }
693 }
694 var m = document.createElement('meta');
695 m.name = 'description';
696 m.content = metaDesc;
697 document.head.appendChild(m);
698 }
699 function goToByScroll(id) {
700 var element = document.getElementById(id);
701 element.scrollIntoView(true);
702 }
703 function slideAmount(length) {
704
705 }
706
707 </script>
708 <script>
709 var reportingData = window.reportingData || {};
710 document.addEventListener('DOMContentLoaded', function() {
711 console.log('inside ready');
712 var page = location.pathname.split('/')[location.pathname.split('/').length-1];
713 var hostName = location.hostname;
714 function getDomainFromHostname(hostname) {
715 var parts = hostname.split('.');
716 return parts.length === 3 ? parts[1] : parts[0];
717 }
718 var domain = getDomainFromHostname(hostName);
719 var partnerName = "${partnerName!0}";
720 var ameriprise = '${ameriprise?string("yes", "no")}';
721 var locationCode = "${rLC!lc}";
722 var eidAmp = "";
723 if (ameriprise == "yes") {
724 var bankercode_amp = '${bCode}';
725 eidAmp = bankercode_amp.substring(3);
726 locationCode ="";
727 document.title = "Ameriprise Financial Credit Card Overview Page";
728 } else {
729 document.title = partnerName + " Credit Card Index Page";
730 }
731
732 var lc = '${lc!0}';
733
734 var regex = /\d+/g;
735 var bdNumber = "${bPhone!''}";
736 var phoneNum = bdNumber.match(regex);
737 var areaCode = "";
738 var exchangeCode = "";
739 var num = "";
740 if(phoneNum != null) {
741 phoneNum = phoneNum.join("");
742 areaCode = phoneNum.substring(0,3);
743 exchangeCode = phoneNum.substring(3,6);
744 num = phoneNum.substring(6,10);
745 }
746
747 /* update SiteCatalyst data object */
748 reportingData.current_page = "microsite:${partnerName}:" + domain + ':' + page.replace('-',' ');
749 reportingData.page_type = 'product';
750 reportingData.site_section = 'credit cards';
751 reportingData.platform = 'microsite';
752 reportingData.campaign_id = '${campaignId}';
753 reportingData.location_code = '${rLC!0}';
754 reportingData.partner_name = "${partnerName}";
755 reportingData.product = 'All Cards';
756 reportingData.text_to_apply_source = '${text_to_apply_source}';
757 reportingData.visitor_type = 'prospect';
758 reportingData.Banker_id = '${boeid}';
759 reportingData.Banker_code = '${bCode}';
760
761
762 /* SiteCatalyst pageView tracking */
763 AUI().ready(function() {
764 if (window.publisherFW) {
765 //console.log('reportingData', reportingData);
766 window.publisherFW.publishEvent("pageView", reportingData);
767 }
768 });
769
770
771 $('.jn-button').removeAttr('disabled');
772 $('.jn-button').removeClass('jn-disabled');
773
774 jQuery('.applyNowLink').on('click', function(e){
775 $(this).closest('.BAAForm').submit();
776 ga("send", {
777 hitType: "event",
778 eventAction: "ApplyNow",
779 eventCategory: "click",
780 eventLabel: "BottomButton"
781 });
782 return false;
783 });
784 jQuery(".BAAForm").on("submit", function(e){
785 e.preventDefault();
786 console.log("in custom submit");
787 var xmlData;
788 if(ameriprise == "yes") {
789 xmlData = '<?xml version="1.0"?>'+
790 "<prefillData>"+
791 "<versionNumber>1.0</versionNumber>"+
792 "<applicationData>"+
793 "<referral>" +
794 "<employeeId>" + eidAmp + "</employeeId>" +
795 "<storeNumber>"+"${bName!'0'}"+"</storeNumber>"+
796 "<divisionNumber></divisionNumber>"+
797 "</referral>" +
798 "<bankerInformation>"+
799 "<locationCode>" + locationCode + "</locationCode>"+
800 "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+
801 "<employeeID>${boeid!0}</employeeID>"+
802 "<name>" +
803 "<first>${bFName!'0'}</first>" +
804 "<last>${bLName!'0'}</last>" +
805 "</name>"+
806 "<phone>"+
807 "<areaCode>"+areaCode+"</areaCode>"+
808 "<exchange>"+exchangeCode+"</exchange>"+
809 "<number>"+num+"</number>"+
810 "</phone>"+
811 "</bankerInformation>"+
812 "</applicationData>"+
813 "</prefillData>"
814 } else {
815 xmlData = '<?xml version="1.0"?>'+
816 "<prefillData>"+
817 "<versionNumber>1.0</versionNumber>"+
818 "<applicationData>"+
819 "<bankerInformation>"+
820 "<locationCode>" + locationCode + "</locationCode>"+
821 "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+
822 "<employeeID>${boeid!0}</employeeID>"+
823 "<name>" +
824 "<first>${bFName!'0'}</first>" +
825 "<last>${bLName!'0'}</last>" +
826 "</name>"+
827 "<phone>"+
828 "<areaCode>"+areaCode+"</areaCode>"+
829 "<exchange>"+exchangeCode+"</exchange>"+
830 "<number>"+num+"</number>"+
831 "</phone>"+
832 "</bankerInformation>"+
833 "</applicationData>"+
834 "</prefillData>"
835 }
836 $(this).children(".appDataBAA").val(xmlData);
837 var buttonName = $(this).find(".apply-now-button").data("button-name");
838 var productName = $(this).find(".apply-now-button").data("product-name");
839 /* SiteCatalyst onClick tracking */
840 reportingData.apply_button = buttonName;
841 reportingData.product = productName;
842
843 if (window.publisherFW) {
844 console.log('clicked', reportingData);
845 window.publisherFW.publishEvent("onClick", reportingData);
846 }
847
848 this.submit();
849 });
850
851
852 });
853 </script>
854
855 </#if>
856 </#if>
857</#if>
Fehler bei der Verarbeitung der Vorlage.
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10153#10191#7973759" at line 5, column 17] ---- 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 bCode = qstringmap["bankercod... [in template "10153#10191#7973759" at line 5, column 1] ----
1<#assign url = themeDisplay.getURLCurrent() >
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
3<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
4
5<#assign bCode= qstringmap["bankercode"]?first>
6<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
7<#list bData as b>
8 <#assign lc = b.locationcode >
9 <#assign rLC = b.reallocationcode >
10 <#assign mappedLC = b.mappedLocationCode >
11</#list>
12<#if mappedLC?has_content && !(url?contains("11t1m"))>
13 <#assign lc = mappedLC >
14</#if>
15<#if lc?has_content>
16 <#assign prefix = "00000" >
17 <#assign lcWithPrefix = prefix + lc >
18 <#assign withPrefixLength = lcWithPrefix?length >
19 <#assign startHere = withPrefixLength - 5>
20 <#assign lc = lcWithPrefix?substring(startHere)>
21 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
22 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
23
24 <#assign clientProfile = clientProfileList?first>
25 <#assign partnerName=clientProfile.getMarketingNameLong()>
26</#if>
27<div class="content-container" title="${partnerName} - Disclaimer">
28 <div class="jn-disclaimer tier1-disclaimer-${class.getData()}">
29 ${content.getData()}
30 </div>
31</div>
Fehler bei der Verarbeitung der Vorlage.
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10153#10191#5843861" at line 8, column 17] ---- 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 bCode = qstringmap["bankercod... [in template "10153#10191#5843861" at line 8, column 1] ----
1<#assign aDateTime = .now>
2<#assign currentYear = aDateTime?string.yyyy>
3<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
4<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
5<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
6<#assign url404 = '/error/404.html'>
7
8<#assign bCode= qstringmap["bankercode"]?first>
9<#assign bCode = htmlUtil.escape(bCode)>
10<#assign bCode = htmlUtil.escapeJS(bCode)>
11
12<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetail','0&'+bCode)>
13<#list bData as b>
14 <#assign lc = b.locationcode >
15 <#assign rLC = b.reallocationcode >
16 <#assign mappedLC = b.mappedLocationCode >
17</#list>
18
19<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
20 <#assign ameriprise = true>
21<#else>
22 <#assign ameriprise = false>
23</#if>
24<#if mappedLC?has_content && !ameriprise>
25 <#assign lc = mappedLC >
26</#if>
27
28<#if lc?has_content>
29
30 <#assign prefix = "00000" >
31 <#assign lcWithPrefix = prefix + lc >
32 <#assign withPrefixLength = lcWithPrefix?length >
33 <#assign startHere = withPrefixLength - 5>
34 <#assign lc = lcWithPrefix?substring(startHere)>
35<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
36 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
37
38 <#assign clientProfile = clientProfileList?first>
39 <#assign pbu = clientProfile.getPbu()>
40 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
41 <#assign partnerName=clientProfile.getMarketingNameLong()>
42 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
43 <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
44 <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
45 <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\://.*")>
46 <#-- add protocal if missing -->
47 <#assign partnerUrl = 'https://' + partnerUrl>
48 </#if>
49 <footer class="footer bg-color-black text-color-white">
50 ${footerContent.getData()}
51 </footer>
52
53 <!-- BEGIN CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
54 <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
55 <style>
56 #opt-out-button,
57 .modal__btn.learn-more {
58 background: #0C2074;
59 border: 1px solid #0C2074;
60 color: white;
61 text-transform: uppercase;
62 text-decoration: none;
63 font-size: 16px;
64 padding: 0.5rem 2rem;
65 display: inline-block;
66 border-radius: 0;
67 }
68 #opt-out-button:hover,
69 .modal__btn.learn-more:hover {
70 color: white;
71 border-color: #2C76AF !important;
72 background-color: #2C76AF !important;
73 }
74 .modal__btn.learn-more {
75 background: white;
76 border: 1px solid #0C2074;
77 color: #0C2074;
78 }
79 #opt-out-button[disabled="true"] {
80 background-color: rgba(0,0,0,.15);
81 color: rgba(0,0,0,.45);
82 border-color: rgba(0,0,0,.25);
83 }
84 #opt-out-button:hover[disabled="true"] {
85 background-color: rgba(0,0,0,.15) !important;
86 color: rgba(0,0,0,.45) !important;
87 border-color: rgba(0,0,0,.25) !important;
88 }
89 #opt-out-button:focus {
90 outline-style: solid;
91 outline-color: white;
92 outline-offset: -3px;
93 outline-width: 1px;
94 }
95 .opt-out-link svg {
96 width: 30px;
97 height: 14px;
98 width: auto;
99 vertical-align: middle;
100 }
101 .modal__overlay {
102 position: fixed;
103 top: 0;
104 left: 0;
105 right: 0;
106 bottom: 0;
107 background: rgba(0,0,0,0.6);
108 display: flex;
109 justify-content: center;
110 align-items: center;
111 }
112
113 .modal__container {
114 background-color: #fff;
115 padding: 30px;
116 max-width: 500px;
117 max-height: 100vh;
118 border-radius: 4px;
119 overflow-y: auto;
120 box-sizing: border-box;
121 }
122
123 .modal__header {
124 display: flex;
125 justify-content: space-between;
126 align-items: center;
127 }
128
129 .modal__title {
130 margin-top: 0;
131 margin-bottom: 0;
132 font-weight: 600;
133 font-size: 20px;
134 line-height: 1.25;
135 color: #00449e;
136 box-sizing: border-box;
137 }
138
139 .modal__close {
140 background: transparent;
141 border: 1px solid white;
142 padding: 4px 8px;
143 }
144 .modal__close:hover {
145 border: 1px solid black;
146 }
147
148 .modal__header .modal__close:before { content: "\2715"; }
149
150 .modal__content {
151 margin-top: 2rem;
152 margin-bottom: 2rem;
153 line-height: 1.5;
154 }
155
156 @keyframes mmfadeIn {
157 from { opacity: 0; }
158 to { opacity: 1; }
159 }
160
161 @keyframes mmfadeOut {
162 from { opacity: 1; }
163 to { opacity: 0; }
164 }
165
166 @keyframes mmslideIn {
167 from { transform: translateY(15%); }
168 to { transform: translateY(0); }
169 }
170
171 @keyframes mmslideOut {
172 from { transform: translateY(0); }
173 to { transform: translateY(-10%); }
174 }
175
176 .micromodal-slide {
177 display: none;
178 }
179
180 .micromodal-slide.is-open {
181 display: block;
182 }
183
184 .micromodal-slide[aria-hidden="false"] .modal__overlay {
185 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
186 }
187
188 .micromodal-slide[aria-hidden="false"] .modal__container {
189 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
190 }
191
192 .micromodal-slide[aria-hidden="true"] .modal__overlay {
193 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
194 }
195
196 .micromodal-slide[aria-hidden="true"] .modal__container {
197 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
198 }
199
200 .micromodal-slide .modal__container,
201 .micromodal-slide .modal__overlay {
202 will-change: transform;
203 }
204 </style>
205
206 <div class="modal micromodal-slide" id="modal-1" aria-hidden="true">
207 <div class="modal__overlay" tabindex="-1" data-micromodal-close>
208 <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title">
209 <header class="modal__header">
210 <h2 class="modal__title" id="modal-1-title">
211 Your California privacy choices
212 </h2>
213 <button class="modal__close" aria-label="Close modal" data-micromodal-close></button>
214 </header>
215 <div class="modal__content" id="modal-1-content">
216 <div id="message-no-cookie">
217 <p>
218 We use technologies, such as cookies, that gather information on our website. That information is used for a variety of purposes, such as to understand how visitors interact with our websites, or to serve advertisements on our websites or on other websites. The use of technologies, such as cookies, constitutes a ‘share’ or ‘sale’ of personal information under the California Privacy Rights Act. You can stop the use of certain third-party tracking technologies that are not considered our service providers by clicking on “Opt-Out” below or by broadcasting the global privacy control signal.</p>
219
220 <p> </p>
221
222 <p>Note that due to technological limitations, if you visit our website from a different computer or device, or clear cookies on your browser that store your preferences, you will need to return to this screen to opt-out and/or rebroadcast the signal. You can find a description of the types of tracking technologies, and your options with respect to those technologies, by clicking “Learn more” below.</p>
223 </div>
224 <div id="message-with-cookie">
225 <p>You have successfully opted-out.</p>
226 </div>
227 </div>
228 <div class="modal__footer">
229 <a href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank" class="modal__btn learn-more" aria-label="Learn more">Learn More</a>
230 <button id="opt-out-button" class="modal__btn modal__btn-primary" aria-label="Opt Out and Close modal" onclick="window.californiaOptOut()">Opt Out</button>
231 </div>
232 </div>
233 </div>
234 </div>
235 <!-- END CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
236 <script>
237 const fdicNode = document.querySelector('.footer .fdic');
238 </script>
239 <script>
240 const copyrightNode = document.querySelector('.footer .copyright');
241 if (copyrightNode) {
242 copyrightNode.innerHTML = '<sup>©</sup> Elan Financial Services ' + ${currentYear};
243 }
244
245 </script>
246 <#if url?contains("11t1m")>
247 <script>
248 copyrightNode.classList.add("ecdma-footer-client-name-copyright");
249 fdicNode.innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>';
250 </script>
251 <#else>
252 <script>
253 copyrightNode.classList.add("ecdma-footer-client-name-copyright");
254 fdicNode.innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>';
255 var newNode = document.createElement("div");
256 newNode.classList.add("member-agreement");
257 newNode.innerHTML='<a class="text-color-white" href="https://online1.elancard.com/oad/cmas.controller?locationCode=${lc!0}&preparerType=customer&isNewRequest=false" target="_blank">Cardmember Agreements</a>';
258 var parent = fdicNode.parentNode;
259 parent.insertBefore(newNode, fdicNode);
260 </script>
261 </#if>
262
263 <#if partnerUrl?has_content>
264 <script>
265 document.querySelector('.copyright .homelink').innerHTML="<a class='text-color-white' href='${partnerUrl!''}' title='${partnerName!''}' target='_blank'>Home</a>";
266 </script>
267 </#if>
268
269 <script>
270 /* BEGIN CALIFORNIA OPT-OUT MODAL TRIGGER */
271 fdicNode.insertAdjacentHTML('afterend', '<div style="display: inline-block; margin-left: 100px;"><a href="javascript:void(0);" class="opt-out-link text-color-white" data-micromodal-trigger="modal-1">Your California privacy choices <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve"><path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" fill-rule="evenodd" clip-rule="evenodd" fill="#fff"/><path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" fill-rule="evenodd" clip-rule="evenodd" fill="#06f"/><path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" fill="#fff"/><path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" fill="#06f"/></svg></a></div>');
272 /* END CALIFORNIA OPT-OUT MODAL TRIGGER */
273 </script>
274 <!-- BEGIN CALIFORNIA OPT-OUT MODAL LOGIC -->
275
276 <script>
277 window.getCookieDomain = function() {
278 var hostname = window.location.hostname.split(".");
279 return hostname && hostname.slice(hostname.length - 2).join(".");
280 }
281 window.setToOptOut = function() {
282 if (window.getCookie('privacy_optout')) {
283 document.getElementById('message-no-cookie').style.display = 'none';
284 document.getElementById('message-with-cookie').style.display = 'block';
285 document.getElementById('opt-out-button').setAttribute('disabled', true)
286 } else {
287 document.getElementById('message-no-cookie').style.display = 'block';
288 document.getElementById('message-with-cookie').style.display = 'none';
289 }
290 }
291 window.getCookie = function(name) {
292 var value = '; ' + document.cookie;
293 var parts = value.split('; ' + name + '=');
294 if (parts.length === 2) return parts.pop().split(';').shift();
295 }
296 window.californiaOptOut = function() {
297 if (!window.getCookie('privacy_optout')) {
298 document.cookie = 'privacy_optout=1; path=/; domain=' + window.getCookieDomain() + '; expires=Thu, 31 Dec 2099 00:00:00 GMT;';
299 try {
300 if (window.CustomEvent) {
301 window.dispatchEvent(new CustomEvent('privacy_optout'));
302 } else {
303 var privacyOptoutEvent = document.createEvent('Event');
304 privacyOptoutEvent.initEvent('privacy_optout', true, true);
305 window.dispatchEvent(privacyOptoutEvent);
306 }
307 window.setToOptOut();
308 } catch (err) {
309 console.error(err);
310 }
311 }
312 }
313 MicroModal.init({
314 onShow: window.setToOptOut
315 });
316 AUI().ready(function() {
317 // user browser setting for Global Privacy Control to opt out of sharing information with third parties
318 const isBrowserGpcOptOut = navigator.globalPrivacyControl;
319 if(isBrowserGpcOptOut === true) {
320 window.californiaOptOut();
321 }
322 });
323 </script>
324 <!-- END CALIFORNIA OPT-OUT MODAL LOGIC -->
325
326</#if>