PageSourceSearch

https://www.commerzbank.pl/portal/media/system/js/lib_head.js

js commerzbank.pl collected 2026-10-05 02:46:22 UTC 48,532 bytes, 1,291 lines download raw bytes

vendor: 16,980 bytes, lines 1-571
1/*!*
2 * project: digitalstrategie / msb
3 * release: 48
4 * build-date: 15.12.2016 / 16:00
5 */
6
7/* Modernizr 2.6.2 (Custom Build) | MIT & BSD
8 * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
9 */
10;
11
12
13
14window.Modernizr = (function( window, document, undefined ) {
15
16    var version = '2.6.2',
17
18    Modernizr = {},
19
20    enableClasses = true,
21
22    docElement = document.documentElement,
23
24    mod = 'modernizr',
25    modElem = document.createElement(mod),
26    mStyle = modElem.style,
27
28    inputElem  = document.createElement('input')  ,
29
30    smile = ':)',
31
32    toString = {}.toString,
33
34    prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),
35
36
37
38    omPrefixes = 'Webkit Moz O ms',
39
40    cssomPrefixes = omPrefixes.split(' '),
41
42    domPrefixes = omPrefixes.toLowerCase().split(' '),
43
44    ns = {'svg': 'http://www.w3.org/2000/svg'},
45
46    tests = {},
47    inputs = {},
48    attrs = {},
49
50    classes = [],
51
52    slice = classes.slice,
53
54    featureName, 
55
56
57    injectElementWithStyles = function( rule, callback, nodes, testnames ) {
58
59      var style, ret, node, docOverflow,
60          div = document.createElement('div'),
61                body = document.body,
62                fakeBody = body || document.createElement('body');
63
64      if ( parseInt(nodes, 10) ) {
65                      while ( nodes-- ) {
66              node = document.createElement('div');
67              node.id = testnames ? testnames[nodes] : mod + (nodes + 1);
68              div.appendChild(node);
69          }
70      }
71
72                style = ['&#173;','<style id="s', mod, '">', rule, '</style>'].join('');
73      div.id = mod;
74          (body ? div : fakeBody).innerHTML += style;
75      fakeBody.appendChild(div);
76      if ( !body ) {
77                fakeBody.style.background = '';
78                fakeBody.style.overflow = 'hidden';
79          docOverflow = docElement.style.overflow;
80          docElement.style.overflow = 'hidden';
81          docElement.appendChild(fakeBody);
82      }
83
84      ret = callback(div, rule);
85        if ( !body ) {
86          fakeBody.parentNode.removeChild(fakeBody);
87          docElement.style.overflow = docOverflow;
88      } else {
89          div.parentNode.removeChild(div);
90      }
91
92      return !!ret;
93
94    },
95
96
97
98    isEventSupported = (function() {
99
100      var TAGNAMES = {
101        'select': 'input', 'change': 'input',
102        'submit': 'form', 'reset': 'form',
103        'error': 'img', 'load': 'img', 'abort': 'img'
104      };
105
106      function isEventSupported( eventName, element ) {
107
108        element = element || document.createElement(TAGNAMES[eventName] || 'div');
109        eventName = 'on' + eventName;
110
111            var isSupported = eventName in element;
112
113        if ( !isSupported ) {
114                if ( !element.setAttribute ) {
115            element = document.createElement('div');
116          }
117          if ( element.setAttribute && element.removeAttribute ) {
118            element.setAttribute(eventName, '');
119            isSupported = is(element[eventName], 'function');
120
121                    if ( !is(element[eventName], 'undefined') ) {
122              element[eventName] = undefined;
123            }
124            element.removeAttribute(eventName);
125          }
126        }
127
128        element = null;
129        return isSupported;
130      }
131      return isEventSupported;
132    })(),
133
134
135    _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;
136
137    if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {
138      hasOwnProp = function (object, property) {
139        return _hasOwnProperty.call(object, property);
140      };
141    }
142    else {
143      hasOwnProp = function (object, property) { 
144        return ((property in object) && is(object.constructor.prototype[property], 'undefined'));
145      };
146    }
147
148
149    if (!Function.prototype.bind) {
150      Function.prototype.bind = function bind(that) {
151
152        var target = this;
153
154        if (typeof target != "function") {
155            throw new TypeError();
156        }
157
158        var args = slice.call(arguments, 1),
159            bound = function () {
160
161            if (this instanceof bound) {
162
163              var F = function(){};
164              F.prototype = target.prototype;
165              var self = new F();
166
167              var result = target.apply(
168                  self,
169                  args.concat(slice.call(arguments))
170              );
171              if (Object(result) === result) {
172                  return result;
173              }
174              return self;
175
176            } else {
177
178              return target.apply(
179                  that,
180                  args.concat(slice.call(arguments))
181              );
182
183            }
184
185        };
186
187        return bound;
188      };
189    }
190
191    function setCss( str ) {
192        mStyle.cssText = str;
193    }
194
195    function setCssAll( str1, str2 ) {
196        return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));
197    }
198
199    function is( obj, type ) {
200        return typeof obj === type;
201    }
202
203    function contains( str, substr ) {
204        return !!~('' + str).indexOf(substr);
205    }
206
207    function testProps( props, prefixed ) {
208        for ( var i in props ) {
209            var prop = props[i];
210            if ( !contains(prop, "-") && mStyle[prop] !== undefined ) {
211                return prefixed == 'pfx' ? prop : true;
212            }
213        }
214        return false;
215    }
216
217    function testDOMProps( props, obj, elem ) {
218        for ( var i in props ) {
219            var item = obj[props[i]];
220            if ( item !== undefined) {
221
222                            if (elem === false) return props[i];
223
224                            if (is(item, 'function')){
225                                return item.bind(elem || obj);
226                }
227
228                            return item;
229            }
230        }
231        return false;
232    }
233
234    function testPropsAll( prop, prefixed, elem ) {
235
236        var ucProp  = prop.charAt(0).toUpperCase() + prop.slice(1),
237            props   = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');
238
239            if(is(prefixed, "string") || is(prefixed, "undefined")) {
240          return testProps(props, prefixed);
241
242            } else {
243          props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');
244          return testDOMProps(props, prefixed, elem);
245        }
246    }    tests['flexbox'] = function() {
247      return testPropsAll('flexWrap');
248    };    tests['canvas'] = function() {
249        var elem = document.createElement('canvas');
250        return !!(elem.getContext && elem.getContext('2d'));
251    };
252
253    tests['canvastext'] = function() {
254        return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));
255    };
256
257
258
259    tests['webgl'] = function() {
260        return !!window.WebGLRenderingContext;
261    };
262
263
264    tests['touch'] = function() {
265        var bool;
266
267        if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
268          bool = true;
269        } else {
270          injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {
271            bool = node.offsetTop === 9;
272          });
273        }
274
275        return bool;
276    };
277
278
279
280    tests['geolocation'] = function() {
281        return 'geolocation' in navigator;
282    };
283
284
285    tests['postmessage'] = function() {
286      return !!window.postMessage;
287    };
288
289
290    tests['websqldatabase'] = function() {
291      return !!window.openDatabase;
292    };
293
294    tests['indexedDB'] = function() {
295      return !!testPropsAll("indexedDB", window);
296    };
297
298    tests['hashchange'] = function() {
299      return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7);
300    };
301
302    tests['history'] = function() {
303      return !!(window.history && history.pushState);
304    };
305
306    tests['draganddrop'] = function() {
307        var div = document.createElement('div');
308        return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);
309    };
310
311    tests['websockets'] = function() {
312        return 'WebSocket' in window || 'MozWebSocket' in window;
313    };
314
315
316    tests['rgba'] = function() {
317        setCss('background-color:rgba(150,255,150,.5)');
318
319        return contains(mStyle.backgroundColor, 'rgba');
320    };
321
322    tests['hsla'] = function() {
323            setCss('background-color:hsla(120,40%,100%,.5)');
324
325        return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla');
326    };
327
328    tests['multiplebgs'] = function() {
329                setCss('background:url(https://),url(https://),red url(https://)');
330
331            return (/(url\s*\(.*?){3}/).test(mStyle.background);
332    };    tests['backgroundsize'] = function() {
333        return testPropsAll('backgroundSize');
334    };
335
336    tests['borderimage'] = function() {
337        return testPropsAll('borderImage');
338    };
339
340
341
342    tests['borderradius'] = function() {
343        return testPropsAll('borderRadius');
344    };
345
346    tests['boxshadow'] = function() {
347        return testPropsAll('boxShadow');
348    };
349
350    tests['textshadow'] = function() {
351        return document.createElement('div').style.textShadow === '';
352    };
353
354
355    tests['opacity'] = function() {
356                setCssAll('opacity:.55');
357
358                    return (/^0.55$/).test(mStyle.opacity);
359    };
360
361
362    tests['cssanimations'] = function() {
363        return testPropsAll('animationName');
364    };
365
366
367    tests['csscolumns'] = function() {
368        return testPropsAll('columnCount');
369    };
370
371
372    tests['cssgradients'] = function() {
373        var str1 = 'background-image:',
374            str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',
375            str3 = 'linear-gradient(left top,#9f9, white);';
376
377        setCss(
378                       (str1 + '-webkit- '.split(' ').join(str2 + str1) +
379                       prefixes.join(str3 + str1)).slice(0, -str1.length)
380        );
381
382        return contains(mStyle.backgroundImage, 'gradient');
383    };
384
385
386    tests['cssreflections'] = function() {
387        return testPropsAll('boxReflect');
388    };
389
390
391    tests['csstransforms'] = function() {
392        return !!testPropsAll('transform');
393    };
394
395
396    tests['csstransforms3d'] = function() {
397
398        var ret = !!testPropsAll('perspective');
399
400                        if ( ret && 'webkitPerspective' in docElement.style ) {
401
402                      injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) {
403            ret = node.offsetLeft === 9 && node.offsetHeight === 3;
404          });
405        }
406        return ret;
407    };
408
409
410    tests['csstransitions'] = function() {
411        return testPropsAll('transition');
412    };
413
414
415
416    tests['fontface'] = function() {
417        var bool;
418
419        injectElementWithStyles('@font-face {font-family:"font";src:url("https://")}', function( node, rule ) {
420          var style = document.getElementById('smodernizr'),
421              sheet = style.sheet || style.styleSheet,
422              cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';
423
424          bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;
425        });
426
427        return bool;
428    };
429
430    tests['generatedcontent'] = function() {
431        var bool;
432
433        injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:"',smile,'";visibility:hidden;font:3px/1 a}'].join(''), function( node ) {
434          bool = node.offsetHeight >= 3;
435        });
436
437        return bool;
438    };
439    tests['video'] = function() {
440        var elem = document.createElement('video'),
441            bool = false;
442
443            try {
444            if ( bool = !!elem.canPlayType ) {
445                bool      = new Boolean(bool);
446                bool.ogg  = elem.canPlayType('video/ogg; codecs="theora"')      .replace(/^no$/,'');
447
448                            bool.h264 = elem.canPlayType('video/mp4; codecs="avc1.42E01E"') .replace(/^no$/,'');
449
450                bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,'');
451            }
452
453        } catch(e) { }
454
455        return bool;
456    };
457
458    tests['audio'] = function() {
459        var elem = document.createElement('audio'),
460            bool = false;
461
462        try {
463            if ( bool = !!elem.canPlayType ) {
464                bool      = new Boolean(bool);
465                bool.ogg  = elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,'');
466                bool.mp3  = elem.canPlayType('audio/mpeg;')               .replace(/^no$/,'');
467
468                                                    bool.wav  = elem.canPlayType('audio/wav; codecs="1"')     .replace(/^no$/,'');
469                bool.m4a  = ( elem.canPlayType('audio/x-m4a;')            ||
470                              elem.canPlayType('audio/aac;'))             .replace(/^no$/,'');
471            }
472        } catch(e) { }
473
474        return bool;
475    };
476
477
478    tests['localstorage'] = function() {
479        try {
480            localStorage.setItem(mod, mod);
481            localStorage.removeItem(mod);
482            return true;
483        } catch(e) {
484            return false;
485        }
486    };
487
488    tests['sessionstorage'] = function() {
489        try {
490            sessionStorage.setItem(mod, mod);
491            sessionStorage.removeItem(mod);
492            return true;
493        } catch(e) {
494            return false;
495        }
496    };
497
498
499    tests['webworkers'] = function() {
500        return !!window.Worker;
501    };
502
503
504    tests['applicationcache'] = function() {
505        return !!window.applicationCache;
506    };
507
508
509    tests['svg'] = function() {
510        return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect;
511    };
512
513    tests['inlinesvg'] = function() {
514      var div = document.createElement('div');
515      div.innerHTML = '<svg/>';
516      return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;
517    };
518
519    tests['smil'] = function() {
520        return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate')));
521    };
522
523
524    tests['svgclippaths'] = function() {
525        return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath')));
526    };
527
528    function webforms() {
529                                            Modernizr['input'] = (function( props ) {
530            for ( var i = 0, len = props.length; i < len; i++ ) {
531                attrs[ props[i] ] = !!(props[i] in inputElem);
532            }
533            if (attrs.list){
534                                  attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);
535            }
536            return attrs;
537        })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));
538                            Modernizr['inputtypes'] = (function(props) {
539
540            for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {
541
542                inputElem.setAttribute('type', inputElemType = props[i]);
543                bool = inputElem.type !== 'text';
544
545                                                    if ( bool ) {
546
547                    inputElem.value         = smile;
548                    inputElem.style.cssText = 'position:absolute;visibility:hidden;';
549
550                    if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {
551
552                      docElement.appendChild(inputElem);
553                      defaultView = document.defaultView;
554
555                                        bool =  defaultView.getComputedStyle &&
556                              defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&
557                                                                                  (inputElem.offsetHeight !== 0);
558
559                      docElement.removeChild(inputElem);
560
561                    } else if ( /^(search|tel)$/.test(inputElemType) ){
562                                                                                    } else if ( /^(url|email)$/.test(inputElemType) ) {
563                                        bool = inputElem.checkValidity && inputElem.checkValidity() === false;
564
565                    } else {
566                                        bool = inputElem.value != smile;
567                    }
568                }
569
570                inputs[ props[i] ] = !!bool;
571            }
572            return inputs;
573        })('search tel url email datetime date month week time datetime-local number range color'.split(' '));
574        }
575    for ( var feature in tests ) {
576        if ( hasOwnProp(tests, feature) ) {
577                                    featureName  = feature.toLowerCase();
578            Modernizr[featureName] = tests[feature]();
579
580            classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);
581        }
582    }
583
584    Modernizr.input || webforms();
585
586
587     Modernizr.addTest = function ( feature, test ) {
588       if ( typeof feature == 'object' ) {
589         for ( var key in feature ) {
590           if ( hasOwnProp( feature, key ) ) {
591             Modernizr.addTest( key, feature[ key ] );
592           }
593         }
594       } else {
595
596         feature = feature.toLowerCase();
597
598         if ( Modernizr[feature] !== undefined ) {
599                                              return Modernizr;
600         }
601
602         test = typeof test == 'function' ? test() : test;
603
604         if (typeof enableClasses !== "undefined" && enableClasses) {
605           docElement.className += ' ' + (test ? '' : 'no-') + feature;
606         }
607         Modernizr[feature] = test;
608
609       }
610
611       return Modernizr; 
612     };
613
614
615    setCss('');
616    modElem = inputElem = null;
617
618
619    Modernizr._version      = version;
620
621    Modernizr._prefixes     = prefixes;
622    Modernizr._domPrefixes  = domPrefixes;
623    Modernizr._cssomPrefixes  = cssomPrefixes;
624
625
626    Modernizr.hasEvent      = isEventSupported;
627
628    Modernizr.testProp      = function(prop){
629        return testProps([prop]);
630    };
631
632    Modernizr.testAllProps  = testPropsAll;
633
634
635    Modernizr.testStyles    = injectElementWithStyles;
636    Modernizr.prefixed      = function(prop, obj, elem){
637      if(!obj) {
638        return testPropsAll(prop, 'pfx');
639      } else {
640            return testPropsAll(prop, obj, elem);
641      }
642    };
643
644
645    docElement.className = docElement.className.replace(/(^|\s)no-js(\s|$)/, '$1$2') +
646
647                                                    (enableClasses ? ' js ' + classes.join(' ') : '');
648
649    return Modernizr;
650
651})(this, this.document);
652/*yepnope1.5.4|WTFPL*/
653(function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}})(this,document);
654Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0));};
655;;
656var mrm = {
657	mod: {},
658	conf: {
659		adaptiveImage: {}
660	},
661	util: {},	
662	connector: {},
663	$: jQuery
664};
665
666// mapping the mrm object to cfs globally - TODO: probably we'll rename that one later
667var cfs = mrm;;
668/*!
669 * jQuery Smart Banner
670 * Copyright (c) 2012 Arnold Daniels <[email protected]>
671 * Based on 'jQuery Smart Web App Banner' by Kurt Zenisek @ kzeni.com
672 */
673!function ($) {
674    var SmartBanner = function (options) {
675        this.origHtmlMargin = parseFloat($('html').css('margin-top')) // Get the original margin-top of the HTML element so we can take that into account
676        this.options = $.extend({}, $.smartbanner.defaults, options)
677
678        var standalone = navigator.standalone // Check if it's already a standalone web app or running within a webui view of an app (not mobile safari)
679          , UA = navigator.userAgent
680
681        // Detect banner type (iOS or Android)
682        if (this.options.force) {
683            this.type = this.options.force
684        } else if (UA.match(/Windows Phone 8/i) != null && UA.match(/Touch/i) !== null) {
685            this.type = 'windows'
686        } else if (UA.match(/iPhone|iPod/i) != null || (UA.match(/iPad/) && this.options.iOSUniversalApp)) {
687            if (UA.match(/Safari/i) != null &&
688               (UA.match(/CriOS/i) != null ||
689               window.Number(UA.substr(UA.indexOf('OS ') + 3, 3).replace('_', '.')) < 6)) this.type = 'ios' // Check webview and native smart banner support (iOS 6+)
690        } else if (UA.match(/\bSilk\/(.*\bMobile Safari\b)?/) || UA.match(/\bKF\w/) || UA.match('Kindle Fire')) {
691            this.type = 'kindle'
692        } else if (UA.match(/Android/i) != null) {
693            this.type = 'android'
694        }
695
696        // Don't show banner if device isn't iOS or Android, website is loaded in app or user dismissed banner
697        if (!this.type || standalone || this.getCookie('sb-closed') || this.getCookie('sb-installed')) {
698            return
699        }
700
701        // Calculate scale
702        this.scale = this.options.scale == 'auto' ? $(window).width() / window.screen.width : this.options.scale
703        if (this.scale < 1) this.scale = 1
704
705        // Get info from meta data
706        var meta = $(this.type == 'android' ? 'meta[name="google-play-app"]' :
707            this.type == 'ios' ? 'meta[name="apple-itunes-app"]' :
708            this.type == 'kindle' ? 'meta[name="kindle-fire-app"]' : 'meta[name="msApplication-ID"]');
709        if (meta.length == 0) return
710
711        // For Windows Store apps, get the PackageFamilyName for protocol launch
712        if (this.type == 'windows') {
713            this.appId = $('meta[name="msApplication-PackageFamilyName"]').attr('content');
714        } else {
715            // Try to pull the appId out of the meta tag and store the result
716            var parsedMetaContent = /app-id=([^\s,]+)/.exec(meta.attr('content'));
717
718            if(parsedMetaContent) {
719              this.appId = parsedMetaContent[1];
720            } else {
721              return;
722            }
723        }
724
725        this.title = this.options.title ? this.options.title : meta.data('title') || $('title').text().replace(/\s*[|\-·].*$/, '')
726        this.author = this.options.author ? this.options.author : meta.data('author') || ($('meta[name="author"]').length ? $('meta[name="author"]').attr('content') : window.location.hostname)
727        this.iconUrl = meta.data('icon-url');
728        this.price = meta.data('price');
729
730        // Create banner
731        this.create()
732        this.show()
733        this.listen()
734    }
735
736    SmartBanner.prototype = {
737
738        constructor: SmartBanner
739
740      , create: function() {
741            var iconURL
742              , link=(this.options.url ? this.options.url : (this.type == 'windows' ? 'ms-windows-store:navigate?appid=' : (this.type == 'android' ? 'market://details?id=' : (this.type == 'kindle' ? 'amzn://apps/android?asin=' : 'https://itunes.apple.com/' + this.options.appStoreLanguage + '/app/id'))) + this.appId)
743              , price = this.price || this.options.price
744              , inStore=price ? price + ' - ' + (this.type == 'android' ? this.options.inGooglePlay : this.type == 'kindle' ? this.options.inAmazonAppStore : this.type == 'ios' ? this.options.inAppStore : this.options.inWindowsStore) : ''
745              , gloss=this.options.iconGloss === null ? (this.type=='ios') : this.options.iconGloss
746
747            if (this.type == 'android' && this.options.GooglePlayParams) {
748              link = link + '&referrer=' + this.options.GooglePlayParams;
749            }
750
751            var banner = '<div id="smartbanner" class="'+this.type+'"><div class="sb-container"><a href="#" class="sb-close">&times;</a><span class="sb-icon"></span><div class="sb-info"><strong>'+this.title+'</strong><span>'+this.author+'</span><span>'+inStore+'</span></div><a href="'+link+'" class="sb-button"><span>'+this.options.button+'</span></a></div></div>';
752            (this.options.layer) ? $(this.options.appendToSelector).append(banner) : $(this.options.appendToSelector).prepend(banner);
753
754            if (this.options.icon) {
755                iconURL = this.options.icon
756            } else if(this.iconUrl) {
757                iconURL = this.iconUrl;
758            } else if ($('link[rel="apple-touch-icon-precomposed"]').length > 0) {
759                iconURL = $('link[rel="apple-touch-icon-precomposed"]').attr('href')
760                if (this.options.iconGloss === null) gloss = false
761            } else if ($('link[rel="apple-touch-icon"]').length > 0) {
762                iconURL = $('link[rel="apple-touch-icon"]').attr('href')
763            } else if ($('meta[name="msApplication-TileImage"]').length > 0) {
764              iconURL = $('meta[name="msApplication-TileImage"]').attr('content')
765            } else if ($('meta[name="msapplication-TileImage"]').length > 0) { /* redundant because ms docs show two case usages */
766              iconURL = $('meta[name="msapplication-TileImage"]').attr('content')
767            }
768
769            if (iconURL) {
770                $('#smartbanner .sb-icon').css('background-image','url('+iconURL+')')
771                if (gloss) $('#smartbanner .sb-icon').addClass('gloss')
772            } else{
773                $('#smartbanner').addClass('no-icon')
774            }
775
776            this.bannerHeight = $('#smartbanner').outerHeight() + 2
777
778            if (this.scale > 1) {
779                $('#smartbanner')
780                    .css('top', parseFloat($('#smartbanner').css('top')) * this.scale)
781                    .css('height', parseFloat($('#smartbanner').css('height')) * this.scale)
782                    .hide()
783                $('#smartbanner .sb-container')
784                    .css('-webkit-transform', 'scale('+this.scale+')')
785                    .css('-msie-transform', 'scale('+this.scale+')')
786                    .css('-moz-transform', 'scale('+this.scale+')')
787                    .css('width', $(window).width() / this.scale)
788            }
789            $('#smartbanner').css('position', (this.options.layer) ? 'absolute' : 'static')
790        }
791
792      , listen: function () {
793            $('#smartbanner .sb-close').on('click',$.proxy(this.close, this))
794            $('#smartbanner .sb-button').on('click',$.proxy(this.install, this))
795        }
796
797      , show: function(callback) {
798            var banner = $('#smartbanner');
799            banner.stop();
800
801            if (this.options.layer) {
802                banner.animate({top: 0, display: 'block'}, this.options.speedIn).addClass('shown').show();
803                $(this.pushSelector).animate({paddingTop: this.origHtmlMargin + (this.bannerHeight * this.scale)}, this.options.speedIn, 'swing', callback);
804            } else {
805                if ($.support.transition) {
806                    banner.animate({top:0},this.options.speedIn).addClass('shown');
807                    var transitionCallback = function() {
808                        $('html').removeClass('sb-animation');
809                        if (callback) {
810                            callback();
811                        }
812                    };
813                    $(this.pushSelector).addClass('sb-animation').one($.support.transition.end, transitionCallback).emulateTransitionEnd(this.options.speedIn).css('margin-top', this.origHtmlMargin+(this.bannerHeight*this.scale));
814                } else {
815                    banner.slideDown(this.options.speedIn).addClass('shown');
816                }
817            }
818        }
819
820      , hide: function(callback) {
821            var banner = $('#smartbanner');
822            banner.stop();
823
824            if (this.options.layer) {
825                banner.animate({top: -1 * this.bannerHeight * this.scale, display: 'block'}, this.options.speedIn).removeClass('shown');
826                $(this.pushSelector).animate({paddingTop: this.origHtmlMargin}, this.options.speedIn, 'swing', callback);
827            } else {
828                if ($.support.transition) {
829                    if ( this.type !== 'android' )
830                      banner.css('top', -1*this.bannerHeight*this.scale).removeClass('shown');
831                    else
832                      banner.css({display:'none'}).removeClass('shown');
833                    var transitionCallback = function() {
834                        $('html').removeClass('sb-animation');
835                        if (callback) {
836                            callback();
837                        }
838                    };
839                    $(this.pushSelector).addClass('sb-animation').one($.support.transition.end, transitionCallback).emulateTransitionEnd(this.options.speedOut).css('margin-top', this.origHtmlMargin);
840                } else {
841                    banner.slideUp(this.options.speedOut).removeClass('shown');
842                }
843            }
844        }
845
846      , close: function(e) {
847            e.preventDefault()
848            this.hide()
849            this.setCookie('sb-closed','true',this.options.daysHidden);
850        }
851
852      , install: function(e) {
853			if (this.options.hideOnInstall) {
854				this.hide()
855			}
856            this.setCookie('sb-installed','true',this.options.daysReminder)
857        }
858
859      , setCookie: function(name, value, exdays) {
860            var exdate = new Date()
861            exdate.setDate(exdate.getDate()+exdays)
862            value=encodeURI(value)+((exdays==null)?'':'; expires='+exdate.toUTCString())
863            document.cookie=name+'='+value+'; path=/;'
864        }
865
866      , getCookie: function(name) {
867            var i,x,y,ARRcookies = document.cookie.split(";")
868            for(i=0;i<ARRcookies.length;i++) {
869                x = ARRcookies[i].substr(0,ARRcookies[i].indexOf("="))
870                y = ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1)
871                x = x.replace(/^\s+|\s+$/g,"")
872                if (x==name) {
873                    return decodeURI(y)
874                }
875            }
876            return null
877        }
878
879      // Demo only
880      , switchType: function() {
881          var that = this
882
883          this.hide(function () {
884              that.type = that.type == 'android' ? 'ios' : 'android'
885              var meta = $(that.type == 'android' ? 'meta[name="google-play-app"]' : 'meta[name="apple-itunes-app"]').attr('content')
886              that.appId = /app-id=([^\s,]+)/.exec(meta)[1]
887
888              $('#smartbanner').detach()
889              that.create()
890              that.show()
891          })
892      }
893    }
894
895    $.smartbanner = function (option) {
896        var $window = $(window)
897        , data = $window.data('smartbanner')
898        , options = typeof option == 'object' && option
899        if (!data) $window.data('smartbanner', (data = new SmartBanner(options)))
900        if (typeof option == 'string') data[option]()
901    }
902
903    // override these globally if you like (they are all optional)
904    $.smartbanner.defaults = {
905        title: null, // What the title of the app should be in the banner (defaults to <title>)
906        author: null, // What the author of the app should be in the banner (defaults to <meta name="author"> or hostname)
907        price: 'FREE', // Price of the app
908        appStoreLanguage: 'us', // Language code for App Store
909        inAppStore: 'On the App Store', // Text of price for iOS
910        inGooglePlay: 'In Google Play', // Text of price for Android
911        inAmazonAppStore: 'In the Amazon Appstore',
912        inWindowsStore: 'In the Windows Store', //Text of price for Windows
913        GooglePlayParams: null, // Aditional parameters for the market
914        icon: null, // The URL of the icon (defaults to <meta name="apple-touch-icon">)
915        iconGloss: null, // Force gloss effect for iOS even for precomposed
916        button: 'VIEW', // Text for the install button
917        url: null, // The URL for the button. Keep null if you want the button to link to the app store.
918        scale: 'auto', // Scale based on viewport size (set to 1 to disable)
919        speedIn: 300, // Show animation speed of the banner
920        speedOut: 400, // Close animation speed of the banner
921        daysHidden: 15, // Duration to hide the banner after being closed (0 = always show banner)
922        daysReminder: 90, // Duration to hide the banner after "VIEW" is clicked *separate from when the close button is clicked* (0 = always show banner)
923        force: null, // Choose 'ios', 'android' or 'windows'. Don't do a browser check, just always show this banner
924        hideOnInstall: true, // Hide the banner after "VIEW" is clicked.
925        layer: false, // Display as overlay layer or slide down the page
926        iOSUniversalApp: true, // If the iOS App is a universal app for both iPad and iPhone, display Smart Banner to iPad users, too.
927        appendToSelector: 'body', //Append the banner to a specific selector
928		pushSelector: 'html' // What element is going to push the site content down; this is where the banner append animation will start.
929    }
930
931    $.smartbanner.Constructor = SmartBanner;
932
933
934    // ============================================================
935    // Bootstrap transition
936    // Copyright 2011-2014 Twitter, Inc.
937    // Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
938
939    function transitionEnd() {
940        var el = document.createElement('smartbanner')
941
942        var transEndEventNames = {
943            WebkitTransition: 'webkitTransitionEnd',
944            MozTransition: 'transitionend',
945            OTransition: 'oTransitionEnd otransitionend',
946            transition: 'transitionend'
947        }
948
949        for (var name in transEndEventNames) {
950            if (el.style[name] !== undefined) {
951                return {end: transEndEventNames[name]}
952            }
953        }
954
955        return false // explicit for ie8 (  ._.)
956    }
957
958    if ($.support.transition !== undefined)
959        return  // Prevent conflict with Twitter Bootstrap
960
961    // http://blog.alexmaccaw.com/css-transitions
962    $.fn.emulateTransitionEnd = function(duration) {
963        var called = false, $el = this
964        $(this).one($.support.transition.end, function() {
965            called = true
966        })
967        var callback = function() {
968            if (!called) $($el).trigger($.support.transition.end)
969        }
970        setTimeout(callback, duration)
971        return this
972    }
973
974    $(function() {
975        $.support.transition = transitionEnd()
976    })
977    // ============================================================
978
979}(window.jQuery);
980;
981mrm.util.adaptiveImage = {
982
983	selectImage: function(id) {
984
985		if (!id) {
986			return;
987		}
988
989		var windowWidth = jQuery(window).width(); // viewport
990		var $imgDiv 	= jQuery('#' + id); // div.adaptive-image
991		var col 		= $imgDiv.closest('.col'); // get col size
992		var mod 		= $imgDiv.closest('.mod'); // get teaser type
993		var imageIndex  = '';
994		var ratio 		= '';
995
996		// define ratio
997		if ($imgDiv.hasClass('img-width-small')) {
998			ratio = 'small';
999		}
1000		if ($imgDiv.hasClass('img-width-medium')) {
1001			ratio = 'medium';
1002		}
1003		if ($imgDiv.hasClass('img-width-large')) {
1004			ratio = 'large';
1005		}
1006
1007		// check viewport/col/ratio and apply appropriate image
1008		if (mod.hasClass('mod-DcrmFormat01')) {
1009
1010			// 21:9
1011			if (
1012				windowWidth > 999 &&  !(col.hasClass('col-lg-6')) || 
1013				windowWidth > 799 && windowWidth < 1000 && (col.hasClass('col-lg-4')) || 
1014				windowWidth < 600
1015			) {
1016				for (var i = 0; i < mrm.conf.adaptiveImage[id].length; i++) {
1017					if (mrm.conf.adaptiveImage[id][i]['key'] === 'sonderformat_21:9') {
1018						imageIndex = i;
1019					}
1020				}
1021
1022			// 3:4 image ratio = small
1023			} else if (
1024				windowWidth > 999 && (col.hasClass('col-lg-6')) || 
1025				windowWidth > 799 && windowWidth < 1000 && !(col.hasClass('col-lg-4')) || 
1026				windowWidth < 800 && (col.hasClass('col-lg-12'))
1027			) {
1028				for (var i = 0; i < mrm.conf.adaptiveImage[id].length; i++) {
1029					if (mrm.conf.adaptiveImage[id][i]['key'] === 'sonderformat_3:4') {
1030						imageIndex = i;
1031					}
1032				}
1033
1034			// 1:1
1035			} else {
1036				for (var i = 0; i < mrm.conf.adaptiveImage[id].length; i++) {
1037					if (mrm.conf.adaptiveImage[id][i]['key'] === 'sonderformat_1:1') {
1038						imageIndex = i;
1039					}
1040				}
1041			}
1042
1043			// update <img/>
1044			mrm.util.adaptiveImage.updateImage(id, imageIndex);
1045		}
1046
1047		// check viewport/col/ratio and apply appropriate image
1048		if (!(mod.hasClass('mod-DcrmFormat01')) && !(mod.hasClass('mod-Teaser01')) || mod.hasClass('mod-Buehne') ) {
1049
1050			// 21:9
1051			if (windowWidth < 800 &&  !(col.hasClass('col-lg-12')) && mod.hasClass('mod-Teaser02') || 
1052					windowWidth < 800 &&  mod.hasClass('mod-Teaser03') || 
1053					windowWidth < 800 &&  mod.hasClass('mod-Buehne') || 
1054					windowWidth < 1000 && (col.hasClass('col-lg-6')) && ratio == 'medium' || 
1055					windowWidth < 600 && col.hasClass('col-lg-12')) {
1056				for (var i = 0; i < mrm.conf.adaptiveImage[id].length; i++) {
1057					if (mrm.conf.adaptiveImage[id][i]['key'] === 'sonderformat_21:9') {
1058						imageIndex = i;
1059					}
1060				}
1061
1062			// 3:4 image ratio = medium
1063			} else if (ratio == 'medium' && windowWidth < 1000 &&  !(col.hasClass('col-lg-6'))) {
1064				for (var i = 0; i < mrm.conf.adaptiveImage[id].length; i++) {
1065					if (mrm.conf.adaptiveImage[id][i]['key'] === 'sonderformat_3:4') {
1066						imageIndex = i;
1067					}
1068				}
1069
1070			// 3:4 image ratio = small
1071			} else if (ratio == 'small' && windowWidth < 1000) {
1072				for (var i = 0; i < mrm.conf.adaptiveImage[id].length; i++) {
1073					if (mrm.conf.adaptiveImage[id][i]['key'] === 'sonderformat_3:4') {
1074						imageIndex = i;
1075					}
1076				}
1077
1078			// bestChoice of default image (they differ in size only)
1079			} else {
1080				var minPossible 	= 50001;
1081				var currentWidth 	= $imgDiv.width();
1082				imageIndex 			= 2;
1083				var possible		= jQuery.grep(mrm.conf.adaptiveImage[id], function(n, i) {
1084
1085					if (n.key == 'default' && n.imgWidth >= currentWidth) {
1086
1087						// get best choice
1088						if (minPossible >= n.imgWidth) {
1089							minPossible = n.imgWidth;
1090							imageIndex = i;
1091						}
1092					}
1093				});
1094			}
1095
1096			// update <img/>
1097			mrm.util.adaptiveImage.updateImage(id, imageIndex);
1098
1099		// mod-Teaser01: bestChoice of default image (they differ in size only)
1100		} else if (!(mod.hasClass('mod-DcrmFormat01'))
1101			) {
1102			var minPossible 	= 50001;
1103			var currentWidth 	= $imgDiv.width();
1104			imageIndex 			= 2;
1105			var possible		= jQuery.grep(mrm.conf.adaptiveImage[id], function(n, i) {
1106
1107				if (n.key == 'default' && n.imgWidth >= currentWidth) {
1108
1109					// get best choice
1110					if (minPossible >= n.imgWidth) {
1111						minPossible = n.imgWidth;
1112						imageIndex = i;
1113					}
1114				}
1115			});
1116
1117			// update <img/>
1118			mrm.util.adaptiveImage.updateImage(id, imageIndex);
1119		}
1120
1121		// promotion: check viewport and apply appropriate image
1122		if (mod.hasClass('mod-Promotion') && mod.hasClass('pr-01')) {
1123
1124			// 1:1
1125			if (windowWidth < 600) {
1126				for (var i = 0; i < mrm.conf.adaptiveImage[id].length; i++) {
1127					if (mrm.conf.adaptiveImage[id][i]['key'] === 'sonderformat_1:1') {
1128						imageIndex = i;
1129					}
1130				}
1131
1132			// bestChoice of default image (they differ in size only)
1133			} else {
1134				var minPossible 	= 50001;
1135				var currentWidth 	= $imgDiv.width();
1136				imageIndex 			= 2;
1137				var possible		= jQuery.grep(mrm.conf.adaptiveImage[id], function(n, i) {
1138
1139					if (n.key == 'default' && n.imgWidth >= currentWidth) {
1140
1141						// get best choice
1142						if (minPossible >= n.imgWidth) {
1143							minPossible = n.imgWidth;
1144							imageIndex = i;
1145						}
1146					}
1147				});
1148			}
1149
1150			// update <img/>
1151			mrm.util.adaptiveImage.updateImage(id, imageIndex);
1152		}
1153	},
1154
1155	updateImage: function(id, index) {
1156		var attached = true;
1157		var $img = jQuery('#'+id).find('img');
1158		var data = mrm.conf.adaptiveImage[id][index];
1159
1160		if( !$img.length ) {
1161			attached = false;
1162			$img = jQuery( '<img/>' );
1163		}
1164
1165		$img
1166			.attr( {
1167				/*alt: 	data.imgAlt,
1168				title: 	data.imgTitle,*/
1169				width: 	data.imgWidth,
1170				height: data.imgHeight,
1171				src: 	data.url
1172			} );
1173
1174		if( !attached ) {
1175			$img.appendTo('#' + id);
1176		}
1177	}
1178
1179}
1180;
1181/* define namespace */
1182var cSmartBanner = cSmartBanner || {};
1183
1184
1185
1186  
1187var smartbannerParameter = {
1188"7210987_cbknowledgeloungeapp" : {
1189}
1190,
1191"7210987_cb_deutschland" : {
1192"de" :
1193{
1194"bannerDaysHidden" : 90,
1195"bannerDaysReminder" : 90,
1196"appStoreLanguage" : "de",
1197"appPrice" : "Gratis",
1198"appAuthor" : "Commerzbank AG",
1199"appStoreLanguage" : "de",
1200"iTunesStoreName" : "App Store",
1201"appTitle" : "Commerzbank AG",
1202"androidStoreName" : "Google Play Store",
1203"buttonText" : "downloaden",
1204"androidPhoneTitle" : "Commerzbank Cash Management App", "androidPhoneIcon" : "/portal/media/system/images/smartbanner/Icon_CM_App.png",
1205"androidTabTitle" : "",
1206"androidTabIcon" : ""
1207}
1208,
1209"en" :
1210{
1211"bannerDaysHidden" : 90,
1212"bannerDaysReminder" : 90,
1213"appStoreLanguage" : "en",
1214"appPrice" : "Free",
1215"appAuthor" : "Commerzbank AG",
1216"appStoreLanguage" : "en",
1217"iTunesStoreName" : "App Store",
1218"appTitle" : "Commerzbank AG",
1219"androidStoreName" : "Play Store",
1220"buttonText" : "download now",
1221"androidPhoneTitle" : "Commerzbank Cash Management App", "androidPhoneIcon" : "/portal/media/system/images/smartbanner/Icon_CM_App.png",
1222"androidTabTitle" : "Commerzbank Tablet Banking",
1223"androidTabIcon" : "/portal/media/system/images/smartbanner/android_tablet_app_icon.png"
1224}
1225}
1226}
1227  
1228  /* default locale */
1229  var actualLang = "de";
1230  if( jQuery('html').attr('lang') ) {
1231    actualLang = jQuery('html').attr('lang').substring(0, 2).toLowerCase();
1232   }
1233   /* ipad banner */
1234   window.setBannerTags = (function( window, document, undefined ) {
1235    /* ua iphone is default and will be rendered directly via framework properties from cif, therefore only ipad is relevant.. */
1236    var userAgent = navigator.userAgent.toLowerCase();
1237    var isIpad = userAgent.search("ipad") != -1;
1238    if (smartbannerParameter != undefined  && (isIpad || (userAgent.search("android") != -1 && userAgent.search("mobile") == -1))){
1239      /* get ios or android store meta tag.. */
1240      var metaTag = isIpad ? jQuery("meta[name=apple-itunes-app]") : jQuery("meta[name=google-play-app]");
1241      /* if smartbanner configuration exists and ios/android meta tag exists */
1242      if(metaTag != undefined){
1243        /* get the section id from the meta tag to identify the right smartbanner configuration */
1244        var configurationSectionId = metaTag.attr("data-smartbanner-id");
1245        /* extract the app-id */
1246        if(configurationSectionId != undefined && smartbannerParameter[configurationSectionId] != undefined && smartbannerParameter[configurationSectionId][actualLang] != undefined){
1247          var appId = smartbannerParameter[configurationSectionId][actualLang][isIpad?'iTunesTabContentVal':'androidTabID'];        
1248          /* check if the app-id is part of the smartbanner configuration */
1249          if(appId != undefined){
1250            metaTag.attr("content", appId);
1251          }
1252        }
1253      }
1254    }
1255  })(this, this.document);
1256
1257  /* initialize smartbanner */
1258  jQuery(function() {
1259    // if smartbanner configuration exists and we got an phone/tablet..
1260    var userAgent = navigator.userAgent.toLowerCase();
1261    var mobile = (/iphone|ipad|ipod|android|blackberry|mini|windows\sce|palm/i.test(userAgent));
1262    var isIOS = userAgent.search("ipad") != -1 || userAgent.search("iphone") != -1;
1263    var metaTag = isIOS ? jQuery("meta[name=apple-itunes-app]") : jQuery("meta[name=google-play-app]");
1264    if (mobile && smartbannerParameter != undefined && metaTag != undefined){
1265      var configurationSectionId = metaTag.attr("data-smartbanner-id");
1266      if(smartbannerParameter[configurationSectionId] != undefined && smartbannerParameter[configurationSectionId][actualLang] != undefined){
1267        /* initialize the smartbanner with the CMS configuration */
1268        var bannerParameter = smartbannerParameter[configurationSectionId][actualLang];
1269        /* use the author instead of an title for iOS, will be overwritten for android.. */
1270        appTitle = bannerParameter['appAuthor'];
1271        var appIcon;
1272        if(!isIOS){
1273          appTitle = userAgent.search("mobile") == -1 ? bannerParameter['androidTabTitle'] : bannerParameter['androidPhoneTitle']
1274          appIcon = userAgent.search("mobile") == -1 ? bannerParameter['androidTabIcon'] : bannerParameter['androidPhoneIcon']
1275        }
1276        jQuery.smartbanner({
1277          title             : appTitle,
1278          author            : bannerParameter['appAuthor'],
1279          appStoreLanguage  : bannerParameter['appStoreLanguage'],
1280          icon              : appIcon,
1281          daysHidden        : bannerParameter['bannerDaysHidden'],
1282          daysReminder      : bannerParameter['bannerDaysReminder'],
1283          inAppStore        : bannerParameter['iTunesStoreName'],
1284          inGooglePlay      : bannerParameter['androidStoreName'],
1285          price             : bannerParameter['appPrice'],
1286          button            : bannerParameter['buttonText']
1287        });
1288      }
1289    }
1290  });
1291  

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.