{"data":{"html":"\n    \n<div class=\"tko-hometeaser tko-yellow-box\">\n    \n<form novalidate data-bam-form=\"accheck\" class=\"tko-form\" action=\"\" method=\"post\">\n    <input type=\"hidden\" value=\"submit\" name=\"form1693465b4027bcf9c9f31caac125460d\"><input type=\"hidden\" value=\"yes\" name=\"c24api_transfertype_dsl\"><input type=\"hidden\" value=\"yes\" name=\"c24api_transfertype_cable\"><input type=\"hidden\" value=\"yes\" name=\"c24api_transfertype_lte\"><input type=\"hidden\" value=\"yes\" name=\"c24api_transfertype_satellite\"><input type=\"hidden\" value=\"\" name=\"c24api_areacode\"><input type=\"hidden\" value=\"yes\" name=\"c24api_phoneflatrate\"><input type=\"hidden\" value=\"no\" name=\"c24api_multimedia\">\n    <div class=\"tko-form-row\">\n        <fieldset class=\"tko-acheck-form\">\n            <div class=\"tko-acheck-wrapper\">\n                <div class=\"tko-form-row-element\">\n                    \n<div class=\"tko-input-wrapper\">\n    <input id=\"text_id14_84_0\" placeholder=\"PLZ oder Ort\"\n           class=\"tko-textinput\" name=\"c24api_ac_zipcity\" value=\"\" type=\"text\" data-bam-form-resettable-default-value=1 data-bam-form-default-value=\"\" data-bam-form-submitted-value=\"\" data-bam-event-focus=\"hide-error|suggestFocus|checkErrors\" data-bam-event-change=\"hide-error\" data-bam-event-keydown=\"suggestKeydown\" data-bam-event-input=\"suggestInput\" data-bam-event-blur=\"suggestBlur\" autocomplete=\"new-password\" data-bam-suggest=\"{&quot;thread&quot;:&quot;zipCity&quot;,&quot;action&quot;:&quot;zipCity&quot;,&quot;nextField&quot;:&quot;c24api_ac_street&quot;,&quot;clearFields&quot;:[&quot;c24api_ac_street&quot;,&quot;c24api_ac_streetnumber&quot;],&quot;toggleFields&quot;:[&quot;c24api_ac_street&quot;]}\" data-bam-form-validate-after-ms=\"200\" data-bam-error-target=\"text_id14_84_0\">\n    <label class=\"tko-moving-label\" for=\"text_id14_84_0\">PLZ oder Ort<\/label>\n    <div  data-bam-error-unicorn=\"text_id14_84_0\"><\/div>\n<\/div>\n                <\/div>\n                <div class=\"tko-form-row-element\">\n                    \n<div class=\"tko-input-wrapper\">\n    <input id=\"text_id86_30_1\" placeholder=\"Stra\u00dfe\"\n           class=\"tko-textinput\" name=\"c24api_ac_street\" value=\"\" type=\"text\" data-bam-form-resettable-default-value=1 data-bam-form-default-value=\"\" data-bam-form-submitted-value=\"\" data-bam-event-focus=\"hide-error|suggestFocus|checkErrors\" data-bam-event-change=\"hide-error\" data-bam-event-keydown=\"suggestKeydown\" data-bam-event-input=\"suggestInput\" data-bam-event-blur=\"suggestBlur\" readonly autocomplete=\"new-password\" data-bam-suggest=\"{&quot;thread&quot;:&quot;zipCity&quot;,&quot;action&quot;:&quot;street&quot;,&quot;shaddowText&quot;:&quot;Stra\\u00dfe&quot;,&quot;nextField&quot;:&quot;c24api_ac_streetnumber&quot;,&quot;clearFields&quot;:[&quot;c24api_ac_streetnumber&quot;],&quot;toggleFields&quot;:[&quot;c24api_ac_streetnumber&quot;],&quot;additionalFieldData&quot;:{&quot;c24api_ac_zipcity&quot;:&quot;c24api_ac_zipcity&quot;}}\" data-bam-form-validate-after-ms=\"200\" data-bam-error-target=\"text_id86_30_1\">\n    <label class=\"tko-moving-label\" for=\"text_id86_30_1\">Stra\u00dfe<\/label>\n    <div  data-bam-error-unicorn=\"text_id86_30_1\"><\/div>\n<\/div>\n                <\/div>\n                <div class=\"tko-form-row-element\">\n                    \n<div class=\"tko-input-wrapper\">\n    <input id=\"text_id9_15_2\" placeholder=\"Nr.\"\n           class=\"tko-textinput\" name=\"c24api_ac_streetnumber\" value=\"\" type=\"text\" data-bam-form-resettable-default-value=1 data-bam-form-default-value=\"\" data-bam-form-submitted-value=\"\" data-bam-event-focus=\"hide-error|checkErrors\" data-bam-event-change=\"hide-error\" readonly autocomplete=\"new-password\" data-bam-error-target=\"text_id9_15_2\">\n    <label class=\"tko-moving-label\" for=\"text_id9_15_2\">Hausnr.<\/label>\n    <div  data-bam-error-unicorn=\"text_id9_15_2\"><\/div>\n<\/div>\n                <\/div>\n            <\/div>\n            <div class=\"tko-button-wrapper\">\n                \n<button name=\"\" type=\"submit\" class=\"tko-button \" autocomplete=\"new-password\" >\n    Tarife vergleichen    <\/button>\n            <\/div>\n        <\/fieldset>\n    <\/div>\n    <div class=\"tko-error-container\"><\/div>\n<\/form>\n\n<div data-suggestlayer=\"{&quot;hasValidEntry&quot;:false}\">\n    <a href=\"javascript:void(0);\"><\/a>\n<\/div>\n<\/div>\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"display: none\">\n\n            <\/svg>\n    ","css":"\n        [data-bam-event-click=\"tooltip-close\"] *,[data-bamtip-trigger-click] *,[data-bamtip-trigger] *{pointer-events:none;}[data-bamtip-trigger-click].active svg,[data-bamtip-trigger].active svg{fill:#005ea8;}.tko-content-section{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;width:100%;}.tko-trustelements .tko-subheadline,.tko-content-section .tko-subheadline{border-bottom:0.0625rem solid #dcdcdc;font-weight:bold;padding-bottom:0.625rem;margin-top:0;margin-bottom:1.875rem;width:100%;}.tko-subheadline-small,.tko-subheadline{width:100%;font-size:1.125rem;color:#333;font-weight:bold;border-bottom:0.0625rem solid #dcdcdc;padding-bottom:0.625rem;margin:0 0 1.875rem 0;}.tko-subheadline-small{font-size:1rem;}.tko-clearfix:after{clear:both;content:\"\";display:block;height:0;line-height:0;visibility:hidden;}.tko-page-wrapper{width:100%;max-width:1280px;min-width:994px;margin:0 auto;position:relative;}.tko-small-page-wrapper{width:994px;margin:0 auto;}.tko-content-elements-headline{text-align:center;font-size:1.4375rem;color:#333;font-weight:bold;margin:0 0 2.8125rem 0;line-height:normal;}.tko-white-fullsize-background-wrapper{background-color:#fff;border-top:0.0625rem solid #dcdcdc;}.tko-grey-background-wrapper{background-color:#f4f4f4;padding:1.5625rem 0;}.tko-margin-bottom-65{margin-bottom:4.0625rem;}.tko-margin-top-65{margin-top:4.0625rem;}.tko-margin-bottom-20{margin-bottom:1.25rem;}.tko-resultlist-teaser{display:flex;justify-content:space-between;}.tko-resultlist-wrapper{display:flex;justify-content:space-between;width:100%;max-width:1280px;min-width:994px;margin:0.9375rem auto 0;}.tko-result-container{width:78.470824949698%;min-width:780px;}.tko-tooltip-trigger{height:0.9375rem;width:0.9375rem;}[data-bamtip-trigger]:not([data-bamtip-trigger-click]){cursor:help;}[data-bamtip-trigger-click]{cursor:pointer;}.tko-further-link{text-align:right;}.tko-further-link > a{font-size:0.6875rem;}.tko-underlined-headline{font-size:0.9375rem;font-weight:normal;padding-bottom:0.5rem;margin:0 0 1.25rem 0;border-bottom:0.0625rem solid #dcdcdc;}[data-bam-error-unicorn]{color:#c82d2d;font-size:0.6875rem;position:absolute;white-space:nowrap;}[data-bam-tpl-if=false]{display:none !important;}.tko-content-left{float:left;width:calc(59% -  1.25rem );min-height:3.125rem;}.tko-content-right{float:right;width:calc(40% -  1.25rem );min-height:18.75rem;}.tko-toggle-arrow.active{transform:rotate(180deg);}[data-bam-event-click-partialhash],[data-bam-event-click]{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.tko-form-row-element .tko-button{margin-top:1.875rem;}.tko-hide{display:none !important;}.tko-highlight-text-blue{color:#005ea8;}.tko-text-hover-underline:hover{text-decoration:underline;}.tko-grayscale{filter:grayscale(100%);}[data-bam-element-identifier=\"serviceHotlineOrder\"]{display:none;}@media all and (max-width: 1350px){.tko-page-wrapper{padding:0 0.9375rem;}body.ie11 .tko-young-teaser .tko-teaser-badges{left:0.9375rem;}}@media all and (max-width: 1321px){.tko-resultlist-wrapper,.tko-resultlist-teaser{padding:0 0.75rem;}}\n        .tko-hometeaser,.tko-hometeaser *,.tko-hometeaser *:before,.tko-hometeaser *:after,[data-suggestlayer],[data-suggestlayer] *,[data-suggestlayer] *:before,[data-suggestlayer] *:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}.tko-hometeaser,.tko-hometeaser *,[data-suggestlayer],[data-suggestlayer] *{font-family:Verdana, Arial, sans-serif;}.tko-hometeaser form,.tko-hometeaser fieldset{border:none;margin:0;padding:0;list-style:none;}.tko-hometeaser input,.tko-hometeaser select,.tko-hometeaser textarea{font-size:0.8125rem;border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;}.tko-hometeaser label{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}\n.tko-yellow-box{min-width:55.9375rem;}.tko-yellow-box .tko-form-row{background-color:#ffbb1c;border-radius:0.25rem;padding:0.375rem;position:relative;display:flex;}.tko-yellow-box .tko-form-row [data-bam-error-unicorn]{font-size:0.75rem;bottom:-1.5rem;}.tko-yellow-box .tko-button-wrapper{width:15.625rem;}.tko-yellow-box .tko-button{margin-top:0;height:3.75rem;}.tko-yellow-box .tko-button,.tko-yellow-box .tko-button *{font-family:Arial, Helvetica, sans-serif;}.tko-yellow-box .tko-input-wrapper{background-color:#fff;border-radius:0.1875rem;position:relative;width:100%;}.tko-yellow-box .tko-input-wrapper > label{display:flex;justify-content:space-between;padding-left:0.625rem;padding-top:0.3125rem;font-size:0.8125rem;line-height:normal;z-index:1;position:absolute;width:100%;top:0;color:#333;}.tko-yellow-box .tko-input-wrapper > label span{display:flex;}.tko-yellow-box .tko-input-wrapper .tko-textinput{border-radius:0.1875rem;padding-top:1.25rem;min-height:3.75rem;max-height:3.75rem;font-size:1rem;outline:none;height:auto;border-color:transparent;color:#333;}.tko-yellow-box .tko-input-wrapper .tko-textinput.tko-error-field{border-color:#c82d2d;}.tko-yellow-box .tko-input-wrapper .tko-textinput.tko-error-field + label{color:#c82d2d;}.tko-yellow-box .tko-input-wrapper .tko-textinput[readonly]{background-color:#fff;}.tko-yellow-box .tko-input-wrapper .tko-textinput[readonly]::placeholder{color:#969696;}.tko-acheck-form,.tko-acheck-wrapper{display:flex;flex-grow:1;}.tko-form-row-element{padding-right:0.375rem;flex-grow:1;}.tko-form-row-element:last-of-type{flex:0 1 auto;min-width:5.625rem;max-width:8.125rem;}.tko-error-container{background-color:rgba(255,255,255,0.7);height:1.4375rem;border-bottom-right-radius:0.25rem;border-bottom-left-radius:0.25rem;display:none;}\n.tko-textinput{border:0.0625rem solid #b4b4b4;height:2.5rem;padding:0 0.625rem;width:100%;background-color:#fff;text-overflow:ellipsis;position:relative;}.tko-textinput:hover{border-color:#575757;}.tko-textinput:focus{border-color:#005ea8;}.tko-textinput:focus::-webkit-input-placeholder{color:#dcdcdc;}.tko-textinput:focus::placeholder{color:#dcdcdc;}.tko-textinput.error{border-color:#c82d2d;}.tko-textinput[readonly]{background-color:#f4f4f4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.tko-textinput[readonly]:active{border-color:#575757;}.tko-input-error{color:#c82d2d;}.tko-valid-field-svg{display:none;}.tko-error-field{border-color:#c82d2d;}.tko-error-field:hover{border-color:#c82d2d;}.tko-device-tablet .tko-textinput:hover,.tko-output-tablet .tko-textinput:hover{border-color:#005ea8;}\n.tko-button{position:relative;background-color:#0271c2;color:#fff;min-height:2.5rem;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;max-width:25rem;border-radius:0.1875rem;padding:0.5rem 0;text-align:center;line-height:normal;font-weight:bold;margin:0;font-family:Arial, Helvetica, sans-serif;cursor:pointer;font-size:1rem;}.tko-button:hover{background-color:#015fa4;}.tko-button:active{background-color:#015fa4;}.tko-button:disabled{background-color:#dcdcdc;}.tko-button .tko-spinner{position:absolute;margin-left:0.4375rem;}.tko-secondary-button{background-color:#fff;color:#333;border:0.0625rem solid #ccc;}.tko-secondary-button:hover{background-color:#fafafa;color:#333;}.tko-secondary-button span{font-size:1rem;}.tko-secondary-button .tko-spinner{position:absolute;top:0.25rem;}#c24-content .tko-button-anchor.tko-secondary-button:hover{color:#333;}.tko-not-available-button{background-color:#b4b4b4;color:#fff;}.tko-not-available-button:hover{background-color:#b4b4b4;}\n[data-suggestlayer]{padding:0.4375rem;list-style:none;border-right:0.0625rem;border-bottom:0.0625rem;border-left:0.0625rem;border-top:0;border-top:0.0625rem;border-radius:0.1875rem;border-color:#dcdcdc;border-style:solid;background-color:#fff;position:absolute;z-index:1002;margin:0;display:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}[data-suggestlayer] a{text-decoration:none;padding:0.8125rem 0.3125rem;display:block;color:inherit;}.tko-suggest-selected{background-color:#eee;}\n\n        .tko-fill-black {\n    fill: #000;\n}\n\n.tko-fill-white {\n    fill: #fff;\n}\n\n.tko-fill-check-blue {\n    fill: #005ea8;\n}\n\n.tko-fill-check-new-blue {\n    fill: #063773;\n}\n\n.tko-fill-grey {\n    fill: #b4b4b4;\n}\n\n.tko-fill-light-grey {\n    fill: #cdcdcd;\n}\n\n.tko-fill-dark-grey {\n    fill: #999;\n}\n\n.tko-fill-darker-grey {\n    fill: #575757;\n}\n\n.tko-fill-red {\n    fill: #e30613;\n}\n\n.tko-fill-green {\n    fill: #7ab51d;\n}\n\n.tko-fill-dark-green {\n    fill: #008300;\n}\n\n.tko-fill-yellow {\n    fill: #f6b800;\n}\n\n.tko-fill-orange {\n    fill: #f07c00;\n}\n\n.tko-fill-gratbar-font-color {\n    fill: #005c61;\n}\n\n.tko-fill-light-black {\n    fill: #333333;\n}\n        ","js":"\n        ;(function() {\n            BamAppVars = {\"deviceoutput\":\"desktop\",\"devicetype\":\"desktop\",\"tid1\":\"CH24_T_B1\",\"gtm\\\/areaId\":\"vergleichsergebnis.html\",\"sessionId\":\"429b50032c3f71d788009062cb78d115\",\"submittedFormViaUrl\":\"\",\"env\":{\"isProduction\":true,\"isTesting\":false,\"isDevelopment\":false,\"isDebug\":false},\"unifiedLogin\":{\"env\":\"prod\",\"product\":\"dsl\",\"socialLoginClosingUrl\":\"https:\\\/\\\/www.check24.de\\\/dsl\\\/ext\\\/services\\\/sociallogin\\\/?backlink=https%3A%2F%2Fwww.check24.de%2Fdsl%2Fext%2Fholding%2Fhometeaser%2F%3Frand%3D0.08755877796212208%26requestedView%3DlastSearches\",\"socialLoginCallbackUrl\":\"https:\\\/\\\/www.check24.de\\\/dsl\\\/ext\\\/holding\\\/hometeaser\\\/?rand=0.08755877796212208&requestedView=lastSearches\",\"socialLoginBaseUrl\":\"https:\\\/\\\/kundenbereich.check24.de\\\/\"},\"chatty\":{\"isActive\":true,\"jsConfig\":\"{\\\"isActive\\\":true,\\\"deviceoutput\\\":\\\"desktop\\\",\\\"default\\\":{\\\"chattyVersion\\\":\\\"2024-2-24\\\",\\\"env\\\":\\\"prod\\\",\\\"onDemand\\\":true,\\\"type\\\":\\\"chatty\\\",\\\"name\\\":\\\"dslChattyDefault\\\",\\\"deviceoutput\\\":\\\"desktop\\\",\\\"contact\\\":{\\\"layer\\\":{\\\"img\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/dsl\\\\\\\/filestore\\\\\\\/img\\\\\\\/chatty.svg\\\",\\\"name\\\":\\\"Sophie\\\",\\\"title\\\":\\\"Schnelle Hilfe, 24\\\\\\\/7\\\",\\\"subtitle\\\":\\\"Ihre digitale Internet-Assistentin.\\\",\\\"openChatText\\\":\\\"Chat starten\\\",\\\"contactLink\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/unternehmen\\\\\\\/kontakt\\\\\\\/?sec=dsl\\\"},\\\"button\\\":{\\\"img\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/dsl\\\\\\\/filestore\\\\\\\/img\\\\\\\/chatty.svg\\\"}},\\\"chatbot\\\":{\\\"env\\\":\\\"prod\\\",\\\"deviceoutput\\\":\\\"desktop\\\",\\\"forceNewSession\\\":true,\\\"activeStateSticky\\\":true,\\\"contact\\\":{\\\"layer\\\":{\\\"active\\\":false},\\\"button\\\":{\\\"active\\\":false}},\\\"client\\\":{\\\"controlServerAddress\\\":\\\"https:\\\\\\\/\\\\\\\/api.chat.check24.de\\\",\\\"chatFlowName\\\":\\\"dsl.dsl_chatbot\\\",\\\"chatFlowRelease\\\":\\\"active\\\",\\\"chatFlowEntry\\\":\\\"start\\\",\\\"presentationType\\\":\\\"dialog\\\",\\\"sheetState\\\":\\\"full\\\",\\\"clientDetails\\\":[]}}},\\\"activity\\\":{\\\"chattyVersion\\\":\\\"2024-2-24\\\",\\\"env\\\":\\\"prod\\\",\\\"onDemand\\\":true,\\\"type\\\":\\\"chatty\\\",\\\"name\\\":\\\"dslChattyActivity\\\",\\\"deviceoutput\\\":\\\"desktop\\\",\\\"contact\\\":{\\\"layer\\\":{\\\"img\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/dsl\\\\\\\/filestore\\\\\\\/img\\\\\\\/chatty.svg\\\",\\\"name\\\":\\\"Sophie\\\",\\\"title\\\":\\\"Schnelle Hilfe, 24\\\\\\\/7\\\",\\\"subtitle\\\":\\\"Ihre digitale Internet-Assistentin.\\\",\\\"openChatText\\\":\\\"Chat starten\\\",\\\"contactLink\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/unternehmen\\\\\\\/kontakt\\\\\\\/?sec=dsl\\\"},\\\"button\\\":{\\\"img\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/dsl\\\\\\\/filestore\\\\\\\/img\\\\\\\/chatty.svg\\\"}},\\\"chatbot\\\":{\\\"env\\\":\\\"prod\\\",\\\"deviceoutput\\\":\\\"desktop\\\",\\\"forceNewSession\\\":true,\\\"activeStateSticky\\\":true,\\\"contact\\\":{\\\"layer\\\":{\\\"active\\\":false},\\\"button\\\":{\\\"active\\\":false}},\\\"client\\\":{\\\"controlServerAddress\\\":\\\"https:\\\\\\\/\\\\\\\/api.chat.check24.de\\\",\\\"chatFlowName\\\":\\\"dsl.dsl_chatbot\\\",\\\"chatFlowRelease\\\":\\\"active\\\",\\\"chatFlowEntry\\\":\\\"start_activity\\\",\\\"presentationType\\\":\\\"dialog\\\",\\\"sheetState\\\":\\\"full\\\",\\\"clientDetails\\\":[]}}},\\\"message\\\":{\\\"chattyVersion\\\":\\\"2024-2-24\\\",\\\"env\\\":\\\"prod\\\",\\\"onDemand\\\":true,\\\"type\\\":\\\"chatty\\\",\\\"name\\\":\\\"dslChattyMessage\\\",\\\"deviceoutput\\\":\\\"desktop\\\",\\\"contact\\\":{\\\"layer\\\":{\\\"img\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/dsl\\\\\\\/filestore\\\\\\\/img\\\\\\\/chatty.svg\\\",\\\"name\\\":\\\"Sophie\\\",\\\"title\\\":\\\"Schnelle Hilfe, 24\\\\\\\/7\\\",\\\"subtitle\\\":\\\"Ihre digitale Internet-Assistentin.\\\",\\\"openChatText\\\":\\\"Chat starten\\\",\\\"contactLink\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/unternehmen\\\\\\\/kontakt\\\\\\\/?sec=dsl\\\"},\\\"button\\\":{\\\"img\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/dsl\\\\\\\/filestore\\\\\\\/img\\\\\\\/chatty.svg\\\"}},\\\"chatbot\\\":{\\\"env\\\":\\\"prod\\\",\\\"deviceoutput\\\":\\\"desktop\\\",\\\"forceNewSession\\\":true,\\\"activeStateSticky\\\":true,\\\"contact\\\":{\\\"layer\\\":{\\\"active\\\":false},\\\"button\\\":{\\\"active\\\":false}},\\\"client\\\":{\\\"controlServerAddress\\\":\\\"https:\\\\\\\/\\\\\\\/api.chat.check24.de\\\",\\\"chatFlowName\\\":\\\"dsl.dsl_chatbot\\\",\\\"chatFlowRelease\\\":\\\"active\\\",\\\"chatFlowEntry\\\":\\\"start_message\\\",\\\"presentationType\\\":\\\"dialog\\\",\\\"sheetState\\\":\\\"full\\\",\\\"clientDetails\\\":[]}}},\\\"callback\\\":{\\\"chattyVersion\\\":\\\"2024-2-24\\\",\\\"env\\\":\\\"prod\\\",\\\"onDemand\\\":true,\\\"type\\\":\\\"chatty\\\",\\\"name\\\":\\\"dslChattyCallback\\\",\\\"deviceoutput\\\":\\\"desktop\\\",\\\"contact\\\":{\\\"layer\\\":{\\\"img\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/dsl\\\\\\\/filestore\\\\\\\/img\\\\\\\/chatty.svg\\\",\\\"name\\\":\\\"Sophie\\\",\\\"title\\\":\\\"Schnelle Hilfe, 24\\\\\\\/7\\\",\\\"subtitle\\\":\\\"Ihre digitale Internet-Assistentin.\\\",\\\"openChatText\\\":\\\"Chat starten\\\",\\\"contactLink\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/unternehmen\\\\\\\/kontakt\\\\\\\/?sec=dsl\\\"},\\\"button\\\":{\\\"img\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/dsl\\\\\\\/filestore\\\\\\\/img\\\\\\\/chatty.svg\\\"}},\\\"chatbot\\\":{\\\"env\\\":\\\"prod\\\",\\\"deviceoutput\\\":\\\"desktop\\\",\\\"forceNewSession\\\":true,\\\"activeStateSticky\\\":true,\\\"contact\\\":{\\\"layer\\\":{\\\"active\\\":false},\\\"button\\\":{\\\"active\\\":false}},\\\"client\\\":{\\\"controlServerAddress\\\":\\\"https:\\\\\\\/\\\\\\\/api.chat.check24.de\\\",\\\"chatFlowName\\\":\\\"dsl.dsl_chatbot\\\",\\\"chatFlowRelease\\\":\\\"active\\\",\\\"chatFlowEntry\\\":\\\"start_callback\\\",\\\"presentationType\\\":\\\"dialog\\\",\\\"sheetState\\\":\\\"full\\\",\\\"clientDetails\\\":[]}}},\\\"handInLater\\\":{\\\"chattyVersion\\\":\\\"2024-2-24\\\",\\\"env\\\":\\\"prod\\\",\\\"onDemand\\\":true,\\\"type\\\":\\\"chatty\\\",\\\"name\\\":\\\"dslChattyHandInLater\\\",\\\"deviceoutput\\\":\\\"desktop\\\",\\\"contact\\\":{\\\"layer\\\":{\\\"img\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/dsl\\\\\\\/filestore\\\\\\\/img\\\\\\\/chatty.svg\\\",\\\"name\\\":\\\"Sophie\\\",\\\"title\\\":\\\"Schnelle Hilfe, 24\\\\\\\/7\\\",\\\"subtitle\\\":\\\"Ihre digitale Internet-Assistentin.\\\",\\\"openChatText\\\":\\\"Chat starten\\\",\\\"contactLink\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/unternehmen\\\\\\\/kontakt\\\\\\\/?sec=dsl\\\"},\\\"button\\\":{\\\"img\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/dsl\\\\\\\/filestore\\\\\\\/img\\\\\\\/chatty.svg\\\"}},\\\"chatbot\\\":{\\\"env\\\":\\\"prod\\\",\\\"deviceoutput\\\":\\\"desktop\\\",\\\"forceNewSession\\\":true,\\\"activeStateSticky\\\":true,\\\"contact\\\":{\\\"layer\\\":{\\\"active\\\":false},\\\"button\\\":{\\\"active\\\":false}},\\\"client\\\":{\\\"controlServerAddress\\\":\\\"https:\\\\\\\/\\\\\\\/api.chat.check24.de\\\",\\\"chatFlowName\\\":\\\"dsl.dsl_chatbot\\\",\\\"chatFlowRelease\\\":\\\"active\\\",\\\"chatFlowEntry\\\":\\\"start_missing\\\",\\\"presentationType\\\":\\\"dialog\\\",\\\"sheetState\\\":\\\"full\\\",\\\"clientDetails\\\":[]}}},\\\"sales\\\":{\\\"chattyVersion\\\":\\\"2024-2-24\\\",\\\"env\\\":\\\"prod\\\",\\\"onDemand\\\":true,\\\"type\\\":\\\"chatty\\\",\\\"name\\\":\\\"dslChattySales\\\",\\\"deviceoutput\\\":\\\"desktop\\\",\\\"contact\\\":{\\\"layer\\\":{\\\"img\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/dsl\\\\\\\/filestore\\\\\\\/img\\\\\\\/chatty.svg\\\",\\\"name\\\":\\\"Sophie\\\",\\\"title\\\":\\\"Schnelle Hilfe, 24\\\\\\\/7\\\",\\\"subtitle\\\":\\\"Ihre digitale Internet-Assistentin.\\\",\\\"openChatText\\\":\\\"Chat starten\\\",\\\"contactLink\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/unternehmen\\\\\\\/kontakt\\\\\\\/?sec=dsl\\\"},\\\"button\\\":{\\\"img\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/dsl\\\\\\\/filestore\\\\\\\/img\\\\\\\/chatty.svg\\\"}},\\\"chatbot\\\":{\\\"env\\\":\\\"prod\\\",\\\"deviceoutput\\\":\\\"desktop\\\",\\\"forceNewSession\\\":true,\\\"activeStateSticky\\\":true,\\\"contact\\\":{\\\"layer\\\":{\\\"active\\\":false},\\\"button\\\":{\\\"active\\\":false}},\\\"client\\\":{\\\"controlServerAddress\\\":\\\"https:\\\\\\\/\\\\\\\/api.chat.check24.de\\\",\\\"chatFlowName\\\":\\\"dsl.dsl_chatbot\\\",\\\"chatFlowRelease\\\":\\\"active\\\",\\\"chatFlowEntry\\\":\\\"start_sales_tariff\\\",\\\"presentationType\\\":\\\"dialog\\\",\\\"sheetState\\\":\\\"full\\\",\\\"clientDetails\\\":[]}}},\\\"router\\\":{\\\"chattyVersion\\\":\\\"2024-2-24\\\",\\\"env\\\":\\\"prod\\\",\\\"onDemand\\\":true,\\\"type\\\":\\\"chatty\\\",\\\"name\\\":\\\"dslChattyRouter\\\",\\\"deviceoutput\\\":\\\"desktop\\\",\\\"contact\\\":{\\\"layer\\\":{\\\"img\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/dsl\\\\\\\/filestore\\\\\\\/img\\\\\\\/chatty.svg\\\",\\\"name\\\":\\\"Sophie\\\",\\\"title\\\":\\\"Schnelle Hilfe, 24\\\\\\\/7\\\",\\\"subtitle\\\":\\\"Ihre digitale Internet-Assistentin.\\\",\\\"openChatText\\\":\\\"Chat starten\\\",\\\"contactLink\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/unternehmen\\\\\\\/kontakt\\\\\\\/?sec=dsl\\\"},\\\"button\\\":{\\\"img\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/dsl\\\\\\\/filestore\\\\\\\/img\\\\\\\/chatty.svg\\\"}},\\\"chatbot\\\":{\\\"env\\\":\\\"prod\\\",\\\"deviceoutput\\\":\\\"desktop\\\",\\\"forceNewSession\\\":true,\\\"activeStateSticky\\\":true,\\\"contact\\\":{\\\"layer\\\":{\\\"active\\\":false},\\\"button\\\":{\\\"active\\\":false}},\\\"client\\\":{\\\"controlServerAddress\\\":\\\"https:\\\\\\\/\\\\\\\/api.chat.check24.de\\\",\\\"chatFlowName\\\":\\\"dsl.dsl_chatbot\\\",\\\"chatFlowRelease\\\":\\\"active\\\",\\\"chatFlowEntry\\\":\\\"start_router_compatibility\\\",\\\"presentationType\\\":\\\"dialog\\\",\\\"sheetState\\\":\\\"full\\\",\\\"clientDetails\\\":[]}}},\\\"resultpage\\\":{\\\"chattyVersion\\\":\\\"2024-2-24\\\",\\\"env\\\":\\\"prod\\\",\\\"onDemand\\\":true,\\\"type\\\":\\\"chatty\\\",\\\"name\\\":\\\"dslChattyResultpage\\\",\\\"deviceoutput\\\":\\\"desktop\\\",\\\"contact\\\":{\\\"layer\\\":{\\\"img\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/dsl\\\\\\\/filestore\\\\\\\/img\\\\\\\/chatty.svg\\\",\\\"name\\\":\\\"Sophie\\\",\\\"title\\\":\\\"Schnelle Hilfe, 24\\\\\\\/7\\\",\\\"subtitle\\\":\\\"Ihre digitale Internet-Assistentin.\\\",\\\"openChatText\\\":\\\"Chat starten\\\",\\\"contactLink\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/unternehmen\\\\\\\/kontakt\\\\\\\/?sec=dsl\\\"},\\\"button\\\":{\\\"img\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/dsl\\\\\\\/filestore\\\\\\\/img\\\\\\\/chatty.svg\\\"}},\\\"chatbot\\\":{\\\"env\\\":\\\"prod\\\",\\\"deviceoutput\\\":\\\"desktop\\\",\\\"forceNewSession\\\":true,\\\"activeStateSticky\\\":true,\\\"contact\\\":{\\\"layer\\\":{\\\"active\\\":false},\\\"button\\\":{\\\"active\\\":false}},\\\"client\\\":{\\\"controlServerAddress\\\":\\\"https:\\\\\\\/\\\\\\\/api.chat.check24.de\\\",\\\"chatFlowName\\\":\\\"dsl.dsl_chatbot\\\",\\\"chatFlowRelease\\\":\\\"active\\\",\\\"chatFlowEntry\\\":\\\"start_resultpage\\\",\\\"presentationType\\\":\\\"dialog\\\",\\\"sheetState\\\":\\\"full\\\",\\\"clientDetails\\\":[]}}},\\\"cashbackBankData\\\":{\\\"chattyVersion\\\":\\\"2024-2-24\\\",\\\"env\\\":\\\"prod\\\",\\\"onDemand\\\":true,\\\"type\\\":\\\"chatty\\\",\\\"name\\\":\\\"dslChattyCashbackBankData\\\",\\\"deviceoutput\\\":\\\"desktop\\\",\\\"contact\\\":{\\\"layer\\\":{\\\"img\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/dsl\\\\\\\/filestore\\\\\\\/img\\\\\\\/chatty.svg\\\",\\\"name\\\":\\\"Sophie\\\",\\\"title\\\":\\\"Schnelle Hilfe, 24\\\\\\\/7\\\",\\\"subtitle\\\":\\\"Ihre digitale Internet-Assistentin.\\\",\\\"openChatText\\\":\\\"Chat starten\\\",\\\"contactLink\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/unternehmen\\\\\\\/kontakt\\\\\\\/?sec=dsl\\\"},\\\"button\\\":{\\\"img\\\":\\\"https:\\\\\\\/\\\\\\\/www.check24.de\\\\\\\/dsl\\\\\\\/filestore\\\\\\\/img\\\\\\\/chatty.svg\\\"}},\\\"chatbot\\\":{\\\"env\\\":\\\"prod\\\",\\\"deviceoutput\\\":\\\"desktop\\\",\\\"forceNewSession\\\":true,\\\"activeStateSticky\\\":true,\\\"contact\\\":{\\\"layer\\\":{\\\"active\\\":false},\\\"button\\\":{\\\"active\\\":false}},\\\"client\\\":{\\\"controlServerAddress\\\":\\\"https:\\\\\\\/\\\\\\\/api.chat.check24.de\\\",\\\"chatFlowName\\\":\\\"dsl.dsl_chatbot\\\",\\\"chatFlowRelease\\\":\\\"active\\\",\\\"chatFlowEntry\\\":\\\"start_cashback_bankdata\\\",\\\"presentationType\\\":\\\"dialog\\\",\\\"sheetState\\\":\\\"full\\\",\\\"clientDetails\\\":[]}}}}\"},\"cookieDomain\":\".check24.de\",\"currentReleaseTag\":\"r20241217-111402\",\"isLoggedIn\":false,\"threadLoaderPath\":\"\\\/dsl\\\/ext\\\/holding\\\/hometeaser\\\/\"};\n\nfunction requireBamService(requiredService, callback) {\n    requireBamService.stack = requireBamService.stack || {};\n    requireBamService.stack[requiredService] = requireBamService.stack[requiredService] || [];\n    requireBamService.stack[requiredService].push(callback);\n}\n\n\/**\n * Only on dev loaded, for production empty functions\n *\n * @type {{warn: BamConsole.warn, log: BamConsole.log, error: BamConsole.error, info: BamConsole.info}}\n *\/\nBamConsole = (function() {\n    return {\n        log: function() {\n            console.log(arguments)\n        },\n        error: function() {\n            console.error(arguments);\n        },\n        info: function() {\n            console.info(arguments);\n        },\n        warn: function() {\n            console.warn(arguments);\n        }\n    }\n})();\nvar BamElementStorage = (function() {\r\n\r\n    var _storageStack = {};\r\n\r\n    function elementStorageManager(element) {\r\n        elementStorageManager.uuid = elementStorageManager.uuid || 0;\r\n\r\n        if (!element._bamstoreuuid) {\r\n            element._bamstoreuuid = \"bt\" + (++elementStorageManager.uuid);\r\n        }\r\n\r\n        if (!_storageStack[element._bamstoreuuid]) {\r\n            _storageStack[element._bamstoreuuid] = new BamStorage();\r\n        }\r\n\r\n        return _storageStack[element._bamstoreuuid];\r\n    }\r\n\r\n    function BamStorage() {\r\n        var _stack = {};\r\n        this.get = function(k) {\r\n            return _stack[k];\r\n        };\r\n\r\n        this.set = function(k, v) {\r\n            _stack[k] = v;\r\n            return this;\r\n        };\r\n    }\r\n\r\n    return elementStorageManager;\r\n})();\r\nvar BamHistory = (function() {\n\n    function _injectHistoryData() {\n\n    }\n\n    function _createHistoryData() {\n        return {};\n    }\n\n    function BamHistory() {\n\n    }\n\n    \/**\n     * @type {{redirect: (function(string): BamHistory), replace: (function(string): BamHistory), push: (function(): BamHistory)}}\n     *\/\n    BamHistory.prototype = {\n        \/**\n         * @param {string} url\n         * @returns {BamHistory}\n         *\/\n        push: function(url) {\n            history.pushState(_createHistoryData(\"push\"), \"\", url);\n            return this;\n        },\n        \/**\n         * @param {string} url\n         * @returns {BamHistory}\n         *\/\n        replace: function(url) {\n            history.replaceState(_createHistoryData(\"replace\"), \"\", url);\n            return this;\n        },\n        \/**\n         * @param {string} url\n         * @returns {BamHistory}\n         *\/\n        redirect: function(url) {\n            if (!url) {\n                _injectHistoryData(\"reload\");\n                locationReload();\n            } else {\n                _injectHistoryData(\"redirect\");\n                location.href = url;\n            }\n            return this;\n        }\n    };\n\n    return new BamHistory;\n})();\nBamMessageBroker = (function() {\n\n\n    function Dispatcher(elementBinding) {\n        this._needElementBinding = !!elementBinding;\n        this._listenerStack = {};\n        this._elementStack = {};\n        this._timeShiftStack = {};\n        this._waitForListener = {};\n        this._onceStack = {};\n    }\n\n    Dispatcher.prototype = {\n        _listenerStack: null,\n        _elementStack: null,\n        _timeShiftStack: null,\n        _waitForListener: null,\n        _onceStack: null,\n        _needElementBinding: false,\n        _executeDelay: 500, \/\/ in ms\n        \/**\n         * Register a function that should executed when a listener is registered to to the dispatcher\n         * this function will executed instantly when the listener is registered.\n         *\n         * @param {string} listenerName\n         * @param {function} callbackFunction\n         * @returns {Dispatcher}\n         *\/\n        waitForListenerRegistration: function(listenerName, callbackFunction) {\n            if (this._listenerStack.hasOwnProperty(listenerName) === true) {\n                callbackFunction();\n                return this;\n            } else if (this._waitForListener.hasOwnProperty(listenerName) === false) {\n                this._waitForListener[listenerName] = [];\n            }\n\n            this._waitForListener[listenerName].push(callbackFunction);\n            return this;\n\n        },\n\n        \/**\n         * Alias for on\n         * @returns {Dispatcher}\n         *\/\n        addListener: function() {\n            this.on.apply(this, arguments);\n            return this;\n        },\n\n        \/**\n         * If Global Dispatcher or element binding is enabled third parameter must be a\n         * HTMLElement, if not element binding is active the third parameter is the context for execute\n         * the callback, if nit given context will set to null,\n         *\n         * You can add parameters who should apply apply to the callback execution\n         *\n         * @param {string} listenerName\n         * @param {function} callbackFunction\n         * @returns {Dispatcher}\n         *\/\n        on: function(listenerName, callbackFunction) {\n            var data = this._ensureData.apply(this, arguments);\n            if (data === false) {\n                return this;\n            }\n            data.callback = callbackFunction;\n\n            if (!this._listenerStack.hasOwnProperty(listenerName)) {\n                this._listenerStack[listenerName] = [];\n                if (this._needElementBinding === true) {\n                    this._elementStack[listenerName] = [];\n                }\n            }\n\n            if (this._isCallbackRegistered(this._listenerStack[listenerName], data) !== -1) {\n                BamConsole.error(\"Double listener registration, check your code\", arguments);\n                return this;\n            }\n\n            if (this._needElementBinding === true) {\n                this._elementStack[listenerName].push(data.element);\n                delete data.element;\n            }\n\n            this._listenerStack[listenerName].push(data);\n            this._executeWaitForListener(listenerName)\n                ._executeAndClearTimeShiftStack(listenerName, callbackFunction, data);\n\n            return this;\n        },\n\n        \/**\n         * Once do not support an element binding, while callback is only called once\n         *\n         * @param {string} listenerName\n         * @param {function} callbackFunction\n         * @param thisArg\n         * @returns {Dispatcher}\n         *\/\n        once: function(listenerName, callbackFunction, thisArg) {\n            var elementState = this._needElementBinding,\n                data;\n            this._needElementBinding = false;\n            data = this._ensureData.apply(this, arguments);\n            this._needElementBinding = elementState;\n\n            if (data === false) {\n                return this;\n            }\n\n            data.callback = callbackFunction;\n\n            if (!this._onceStack.hasOwnProperty(listenerName)) {\n                this._onceStack[listenerName] = [];\n            }\n\n            if (this._isCallbackRegistered(this._onceStack[listenerName], data) !== -1) {\n                BamConsole.error(\"Double listener registration in once stack, check your code\", arguments);\n                return this;\n            }\n\n            this._onceStack[listenerName].push(data);\n            this._executeWaitForListener(listenerName)\n                ._executeAndClearTimeShiftStack(listenerName, callbackFunction, data);\n\n            return this;\n        },\n\n        \/**\n         * Alias for off\n         * @returns {Dispatcher}\n         *\/\n        removeListener: function() {\n            this.off.apply(this, arguments);\n            return this;\n        },\n\n\n        \/**\n         * Alias for emit\n         *\/\n        send: function() {\n            this.emit.apply(this, arguments);\n            return this;\n        },\n\n        \/**\n         * Emit a event on the Dispatcher\n         *\n         * @param {string} listenerName\n         * @returns {Dispatcher}\n         *\/\n        emit: function(listenerName) {\n            var arg = [].slice.call(arguments, 1),\n                rebuildElementStack = [],\n                rebuildListenerStack = [],\n                listenerStack = this._listenerStack[listenerName],\n                onceStack = this._onceStack[listenerName],\n                elementStack = this._elementStack[listenerName],\n                params;\n\n            this._timeShiftStack[Date.now()] = {\n                listener: listenerName,\n                arg: arg,\n            };\n\n            if (listenerStack) {\n                for (var i = 0; i < listenerStack.length; i++) {\n                    if (this._needElementBinding === true && !document.body.contains(elementStack[i])) {\n                        BamConsole.info(\"Remove listener, because element not longer exists\", listenerName);\n                        continue;\n                    }\n\n                    params = listenerStack[i].params.concat(arg);\n                    if (this._executeCallback(listenerStack[i].callback, listenerStack[i].context, params) === false) {\n                        continue\n                    }\n\n                    if (this._needElementBinding === true) {\n                        rebuildElementStack.push(elementStack[i]);\n                    }\n\n                    rebuildListenerStack.push(listenerStack[i]);\n                }\n\n\n                if (this._needElementBinding === true) {\n                    this._elementStack[listenerName] = rebuildElementStack;\n                }\n\n                this._listenerStack[listenerName] = rebuildListenerStack;\n            }\n\n            if (onceStack) {\n                for (var i = 0; i < onceStack.length; i++) {\n                    params = onceStack[i].params.concat(arg);\n                    this._executeCallback(onceStack[i].callback, onceStack[i].context, params);\n                }\n\n                delete this._onceStack[listenerName];\n            }\n            return this;\n        },\n\n        \/**\n         * A async version of the emit\n         *\n         * @returns {Dispatcher}\n         *\/\n        asyncEmit: function() {\n            var self = this,\n                params = arguments;\n\n            setTimeout(function() {\n                self.emit.apply(self, params);\n            }, 0);\n\n            return this;\n        },\n\n        \/**\n         * Execute that wait that callbacks have registered\n         *\n         * @param {string} listenerName\n         * @returns {Dispatcher}\n         * @private\n         *\/\n        _executeWaitForListener: function(listenerName) {\n            if (this._waitForListener.hasOwnProperty(listenerName) === false) {\n                return this;\n            }\n            var stack = this._waitForListener[listenerName];\n            for (var i = 0; i < stack.length; i++) {\n                try {\n                    stack[i]();\n                } catch (e) {\n                    BamConsole.error(\"Wait for listener callback for\" + listenerName + \" fails\");\n                }\n            }\n            delete this._waitForListener[listenerName];\n            return this;\n        },\n\n        _isCallbackRegistered: function(stack, data) {\n            var index = -1,\n                i = 0;\n\n            \/**\n             * need while ie11 do not support findIndex()\n             *\/\n            while (index === -1 && i < stack.length) {\n                if (stack[i].callback === data.callback && stack[i].context === data.context) {\n                    index = i;\n                }\n                ++i;\n\n            }\n            return index;\n        },\n\n        _ensureData: function() {\n            var data = {};\n\n            if (this._needElementBinding === true) {\n                data.element = arguments[2];\n                data.context = arguments[3] || null;\n                data.params = [].slice.call(arguments, 4);\n\n                if (!data.element) {\n                    data.element = document.body;\n                    \/\/ BamConsole.warn(\"MessageBroker: Add listener without element binding is deprecated and will be removed in feature releases, listener:\", arguments[0]);\n                }\n\n                if (!(data.element instanceof HTMLElement)) {\n                    BamConsole.error(\"Element must be a instance of HTMLElement\");\n                    return false;\n                }\n            } else {\n                data.context = arguments[2] || null;\n                data.params = [].slice.call(arguments, 3);\n            }\n\n            return data;\n        },\n\n\n        _executeCallback: function(callback, context, params) {\n            try {\n                callback.apply(context, params);\n            } catch (e) {\n                BamConsole.error(e);\n                return false;\n            }\n\n            return true;\n        },\n\n        _executeAndClearTimeShiftStack: function(listenerName, callback, data) {\n            var toDelete = Date.now() - this._executeDelay;\n\n            for (var key in this._timeShiftStack) {\n                if (key < toDelete) {\n                    delete this._timeShiftStack[key];\n                } else if (this._timeShiftStack[key].listener === listenerName) {\n                    var param = data.params.concat(this._timeShiftStack[key].arg);\n                    this._executeCallback(callback, data.context, param);\n                    delete this._onceStack[listenerName];\n                }\n            }\n\n\n        },\n\n        \/**\n         * Remove a listener from the once ond listener stack\n         *\n         * @param {string} listenerName\n         * @param {function} callback\n         * @param thisArg\n         * @returns {Dispatcher}\n         *\/\n        off: function(listenerName, callback, thisArg) {\n            var data = {\n                    context: thisArg,\n                    callback: callback,\n                },\n                onceIndex = -1,\n                listenerIndex = -1;\n            if (this._onceStack.hasOwnProperty(listenerName) === true) {\n                onceIndex = this._isCallbackRegistered(this._onceStack[listenerName], data);\n            }\n\n            if (this._listenerStack.hasOwnProperty(listenerName) === true) {\n                listenerIndex = this._isCallbackRegistered(this._listenerStack[listenerName], data);\n            }\n\n            if (onceIndex !== -1) {\n                this._onceStack[listenerName].splice(onceIndex, 1);\n            }\n\n            if (listenerIndex !== -1) {\n                this._listenerStack[listenerName].splice(listenerIndex, 1);\n            }\n\n            return this;\n        }\n\n    };\n\n\n    var dispatcherStack = {};\n    window.BamDispatcher = function() {\n        return {\n            get: function(stack, elementBinding) {\n                var dispatcher = new Dispatcher(elementBinding);\n                if (stack && !dispatcherStack[stack]) {\n                    dispatcherStack[stack] = dispatcher;\n                } else if (stack && dispatcherStack[stack]) {\n                    dispatcher = dispatcherStack[stack];\n                }\n                return dispatcher;\n            }\n        }\n    };\n\n    return new Dispatcher(true);\n})();\nfunction BamPromise() {\n\n    var _doneCb,\n        _committed = false,\n        _committedArguments = [];\n    _check = _check.bind(this);\n\n    this.done = function(fn) {\n        _doneCb = fn;\n        _check();\n    };\n\n    this.reset = function () {\n        _committedArguments = [];\n        _doneCb = undefined;\n        _committed = false;\n    };\n    this.commit = function() {\n        _committed = true;\n        _committedArguments = [].slice.call(arguments, 0);\n        _check();\n    };\n    function _check() {\n        if (!_committed || !_doneCb) {\n            return;\n        }\n        _doneCb.apply(window, _committedArguments);\n        this.reset();\n    }\n}\nwindow.BamSelector = (function () {\n    \"use strict\";\n\n    function Storage(keyprefix) {\n        Storage.cnt = Storage.cnt || 0;\n        Storage.cnt++;\n        var uuid = \"bamStorage_\" + Storage.cnt.toString() + \"_\" + (new Date).getTime().toString() + Math.random().toString().replace(\".\", \"\");\n        return function (element, k, v) {\n\n            if (typeof element[uuid] !== \"object\") {\n                element[uuid] = {};\n                if (element.dataset) {\n                    $.each(element.dataset, function (k, v) {\n                        var sub = v.substr(0, 1);\n                        if (sub === \"{\" || sub === \"[\") {\n                            try {\n                                v = JSON.parse(v);\n                            } catch (Error) {\n                            }\n                        }\n                        element[uuid][k] = v;\n                    });\n                }\n            }\n\n            if (undefined === k) {\n                return element[uuid];\n            }\n            if (undefined === v) {\n                return element[uuid][k];\n            }\n\n            element[uuid][k] = v;\n            return $(element);\n        }\n    }\n\n    var __internalData = new Storage(),\n        __internalEventData = new Storage(\"events\"),\n\n        $ = function (selector) {\n\n            var elements = [];\n\n            if (selector instanceof String) {\n                selector = selector.toString();\n            }\n\n            if (typeof selector === \"string\") {\n                selector = selector.trim();\n                if (selector.substr(0, 1) === \"<\") {\n                    var range = document.createRange();\n\n                    switch (selector.substr(0, 5)) {\n                        case \"<td\/>\" :\n                            elements = [document.createElement(\"td\")];\n                            break;\n                        case \"<tr\/>\" :\n                            elements = [document.createElement(\"tr\")];\n                            break;\n                        case \"<th\/>\" :\n                            elements = [document.createElement(\"th\")];\n                            break;\n                        default:\n                            var frag = range.createContextualFragment(selector);\n                            if (typeof frag.children === \"undefined\") {\n                                frag = frag.childNodes; \/\/ IE11\n                            } else  {\n                                frag = frag.children;\n                            }\n                            elements = Array.from(frag);\n                    }\n\n                } else {\n                    elements = Array.from(document.querySelectorAll(selector));\n                }\n            } else if (true === selector instanceof HTMLElement) {\n                elements.push(selector);\n            } else if (true === selector instanceof BamSelector) {\n                return selector;\n            } else if (Array.isArray(selector)) {\n                elements = selector;\n            } else if (selector instanceof NodeList) {\n                elements = Array.prototype.slice.call(selector);\n            } else if (typeof selector === \"object\") {\n                elements.push(selector);\n            }\n\n            return new BamSelector.prototype.init(elements);\n        };\n    $.prototype = Object.create(Array.prototype);\n    $.fn = $.prototype;\n    $.fn.constructor = $;\n\n    $.fn.addClass = function (cssClass) {\n    cssClass = cssClass.split(\" \");\n    var i, max = cssClass.length;\n\n    if (undefined === cssClass) {\n        return this;\n    }\n    $.each(this, function () {\n\n        for (i = 0; i < max; i++) {\n            this.classList.add(cssClass[i]);\n        }\n    });\n    return this;\n};\n$.fn.append = function (element) {\n    var that = this[0];\n    $(element).each(function () {\n        that.appendChild($(this)[0]);\n    });\n    return this;\n};\n$.fn.attr = function (attr, val) {\n    if (typeof val === \"undefined\") {\n        return this[0].getAttribute(attr);\n    }\n    $.each(this, function () {\n        this.setAttribute(attr, val);\n    });\n    return this;\n};\n$.fn.children = function (ident) {\n    var ele = [];\n    $.each(this, function () {\n\n        if (ident !== undefined) {\n            Array.prototype.forEach.call(this.children, function (child) {\n                if (child.nodeType !== 1 || !child.matches(ident)) {\n                    return;\n                }\n                ele.push(child);\n            });\n        } else {\n            ele = ele.concat(Array.from(this.children));\n        }\n    });\n    return $(ele);\n};\n$.fn.contains = function(element) {\n\n    if (!this[0]) {\n        return false;\n    }\n  \n    if (element instanceof BamSelector) {\n        element = element[0];\n    }\n\n    return this[0].contains(element);\n};\n$.fn.css = function (k, v) {\n\n    if (k === undefined) {\n        throw new Error;\n    }\n\n    if (typeof k === \"object\") {\n        var that = this;\n        $.each(k, function (k, v) {\n            that.css(k, v);\n        });\n        return this;\n    }\n    if (v === undefined) {\n        return this[0].style[k];\n    }\n    this.each(function () {\n        this.style[k] = v;\n    });\n\n    return this;\n};\n$.data = new Storage();\n$.fn.data = function (k, v) {\n    return $.data(this[0], k, v);\n};\n$.each = function (input, callback) {\n    \"use strict\";\n    var continueMap = true,\n        keys = Object.keys(input),\n        dataLength = keys.length,\n        dataLastIndex = dataLength - 1,\n        lastKey = keys[dataLastIndex],\n        preparedInput = {};\n\n    keys.map(function (key) {\n\n        var value = input[key];\n\n        if (!callback) {\n            preparedInput[key] = value;\n            return;\n        }\n\n        var info = {\n            \"isLast\": lastKey === key\n        };\n\n        if (continueMap === false) {\n            return;\n        }\n\n        continueMap = callback.call(value, key, value, info);\n    });\n\n    return callback ? input : preparedInput;\n};\n$.fn.each = (function ($) {\n    return function (callback) {\n        return $.each(this, callback);\n    };\n})($);\n$.fn.eq = function (index) {\n    var e = this[index];\n    return new $(e === undefined ? [] : [e]);\n};\n$.extend = function (object1, object2) {\n    $.each(object2, function (k, v) {\n        object1[k] = v;\n    });\n    return object1;\n};\n$.fn.find = function (selector) {\n    var ele = [];\n    $.each(this, function () {\n\n        if (this.nodeType !== 1) {\n            return;\n        }\n        \n        ele = ele.concat(Array.prototype.slice.call(this.querySelectorAll(selector)));\n    });\n    return $(ele);\n};\n\n$.fn.get = function (index) {\n    if (arguments.length === 0) {\n        return Array.from(this);\n    }\n\n    return this[index] || undefined;\n\n};\n$.fn.hasClass = function (cssClass) {\n    if (!this[0]) {\n        return false;\n    }\n    return this[0].classList.contains(cssClass);\n};\n$.fn.hide = function () {\n    this.each(function () {\n        if (this.style) {\n            this.style.display = \"none\";\n        }\n    });\n    return this;\n};\n$.fn.html = function (html) {\n    var length = this.length;\n    if (arguments.length === 0) {\n        return length > 0 ? this[0].innerHTML : undefined;\n    }\n    this.each(function () {\n        this.innerHTML = html;\n    });\n    return this;\n};\n$.fn.init = function (element) {\n    Array.call(this);\n    Object.defineProperty(this, \"length\", {\n        enumerable: false,\n        writable: true\n    });\n\n    if (undefined !== element) {\n        this.push.apply(this, element);\n    }\n    return this;\n};\n$.fn.init.prototype = $.fn;\n$.fn.insertAfter = function (v) {\n    var ele = v, i, max, parent;\n    if (v instanceof BamSelector) {\n        ele = v[0];\n    }\n\n    parent = ele.parentNode;\n\n    for (i = 0, max = this.length; i < max; i++) {\n        parent.insertBefore(this[i], ele);\n    }\n    return this;\n};\n$.fn.off = function (event, selector, callback) {\n\n    if (typeof selector !== \"string\") {\n        callback = selector;\n        selector = null;\n    } else if (selector === \"body\") {\n        selector = null;\n    }\n\n\n    var i, iMax,\n        j, jMax,\n        k, kMax,\n        l, lMax, namespaces,\n        events = event.split(\" \"),\n        element;\n\n    for (i = 0, iMax = events.length; i < iMax; i++) {\n\n        namespaces = events[i].split(\".\");\n        event = namespaces.shift();\n\n        for (j = 0, jMax = this.length; j < jMax; j++) {\n\n            element = this[j];\n\n            var intData = __internalEventData(element, \"events\") || [];\n\n            for (k = 0, kMax = intData.length; k < kMax; k++) {\n\n                if (intData[k] === null) {\n                    continue;\n                }\n\n                if (selector !== null && selector !== intData[k].s) {\n                    continue;\n                }\n\n                if (event === \"\") {\n                    event = intData[k].e;\n                } else if (event !== intData[k].e) {\n                    continue;\n                }\n\n                if (namespaces.length > 0) {\n\n                    var match;\n                    for (l = 0, lMax = namespaces.length; l < lMax; l++) {\n                        if ((match = intData[k].ns.indexOf(namespaces[j])) > -1) {\n                            break;\n                        }\n                    }\n\n                    if (match === -1) {\n                        continue;\n                    }\n                }\n\n                element.removeEventListener(event, intData[k].lc);\n                intData[k] = null;\n            }\n            __internalEventData(element, \"events\", intData);\n        }\n    }\n\n    return this;\n};\n$.fn.offset = function () {\n\n    var doc = document.documentElement,\n        pageOffsetY = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0),\n        pageOffsetX = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0),\n        calcObject = this[0].getBoundingClientRect();\n\n    return {\n        \"top\": calcObject.top + pageOffsetY,\n        \"left\": calcObject.left + pageOffsetX\n    };\n};\n$.fn.on = function (event, selector, callback) {\n\n    if (typeof selector !== \"string\") {\n        callback = selector;\n        selector = null;\n    } else if (selector === \"body\") {\n        selector = null;\n    }\n\n    var i, iMax, namespaces,\n        j, jMax,\n        events = event.split(\" \"),\n        element;\n\n    for (i = 0, iMax = events.length; i < iMax; i++) {\n\n        namespaces = events[i].split(\".\");\n        event = namespaces.shift();\n\n        for (j = 0, jMax = this.length; j < jMax; j++) {\n            namespaces = events[i].split(\".\");\n            namespaces.shift();\n            var dataRow = {\n                \"e\": event,\n                \"s\": selector,\n                \"c\": callback,\n                \"ns\": namespaces,\n                \"lc\": function (e) {\n                    var target = e.target || e.srcElement;\n                    if (selector !== null && !target.matches(selector)) {\n                        return;\n                    }\n\n                    callback.call(target, e);\n                }\n            };\n\n            element = this[j];\n            element.addEventListener(event, dataRow.lc);\n            var intData = __internalEventData(element, \"events\") || [];\n            intData.push(dataRow);\n            __internalEventData(element, \"events\", intData);\n        }\n    }\n    return this;\n};\n$.fn.parent = function () {\n    var matchedElements = [];\n\n    this.forEach(function (value) {\n        matchedElements.push(value.parentNode);\n    });\n    return $(matchedElements);\n};\n$.fn.parents = function (selector) {\n    var matchedElements = [],\n        element = this[0].parentNode;\n\n    while (element && element.nodeType !== 9) {\n\n        if (element.nodeType === 1) {\n\n            if (\n                selector && (\n                    element.nodeName.toLowerCase() === selector.toLowerCase() ||\n                    element.id === selector.replace('#','') ||\n                    element.classList.contains(selector.replace('.',''))\n                )\n            ) {\n                return $(element);\n            }\n\n            if (selector === undefined) {\n                matchedElements.push(element);\n            }\n\n        }\n\n        element = element.parentNode;\n\n    }\n    return $(matchedElements);\n};$.fn.prepend = function (element) {\n    var that = this[0];\n    var childrenCnt = 0;\n    $(element).forEach(function (t,k) {\n        that.insertBefore(t, that.children[k]);\n    });\n    return this;\n};\n$.fn.remove = function (attr) {\n    $.each(this, function () {\n        this.remove();\n    });\n};\n$.fn.removeAttr = function (attr) {\n    $.each(this, function () {\n        this.removeAttribute(attr);\n    });\n};\n$.fn.removeClass = function (cssClass) {\n    $.each(this, function () {\n        this.classList.remove(cssClass);\n    });\n    return this;\n};\n$.fn.replaceWith = function (element) {\n    $.each(this, function () {\n        this.replaceWith($(element)[0]);\n    });\n    return this;\n};\n$.fn.show = function () {\n    this.each(function () {\n        if (this.style) {\n            if (window.getComputedStyle(this).display === \"none\") {\n                this.style.display = \"\";\n                if (window.getComputedStyle(this).display === \"none\") {\n                    this.style.display = \"block\";\n\n                }\n            }\n        }\n    });\n    return this;\n};\n$.fn.text = function (text) {\n    var length = this.length;\n    if (arguments.length === 0) {\n        return length > 0 ? this[0].innerHTML : undefined;\n    }\n    this.each(function () {\n        this.innerText = text;\n    });\n    return this;\n};\n$.fn.toggle = function (val) {\n    return val ? this.show() : this.hide();\n};\n$.fn.val = function (val) {\n\n    if (arguments.length === 0) {\n        if (this[0]) {\n            return this[0].value;\n        }\n        return;\n    }\n\n    $.each(this, function () {\n        this.value = val;\n    });\n\n    return this;\n};\n\n\n    return $;\n})();\n\/**\n * BamResponse\n * @param {XMLHttpRequest} response\n * @constructor\n *\/\nfunction BamResponse(response) {\n    this._response = response;\n    this._status = 0;\n\n    try {\n        if (response.responseType !== \"json\") {\n            this._json = JSON.parse(response.response);\n        } else {\n            this._json = response.response;\n        }\n        if (!isNaN(this._json.status) && this._json.message !== undefined && this._json.data !== undefined) {\n            this._status = this._json.status;\n            this._json = this._json.data;\n        } else {\n            this._status = this._response.status;\n        }\n    } catch (Error) {\n        this._json = {};\n        console.error(Error, response.response);\n    }\n}\n\n\/**\n * @type {{isError: BamResponse.isError, getData: BamResponse.getData, isValid: BamResponse.isValid}}\n *\/\nBamResponse.prototype = {\n\n    \/**\n     * @return {boolean}\n     *\/\n    isError: function() {\n        return !this.isValid();\n    },\n\n    \/**\n     * @param {string} key\n     * @return {{}}\n     *\/\n    getData: function(key) {\n\n        if (key) {\n            var keys = key.split(\"\/\");\n\n            var tmp = this._json;\n            for (var i = 0, max = keys.length; i < max; i++) {\n\n                var cKey = keys[i];\n\n                if (undefined === tmp || undefined === tmp[cKey]) {\n                    return undefined;\n                }\n\n                tmp = tmp[cKey];\n            }\n\n            return tmp;\n        }\n\n        return this._json;\n    },\n\n    \/**\n     * @return {Array}\n     *\/\n    getErrors: function() {\n        return this.getData(\"errors\");\n    },\n    \/**\n     * @return {boolean}\n     *\/\n    isValid: function() {\n        return this._status === 200;\n    }\n};\n\nfunction BamAjax(pMethod, threadName) {\n    var mMethod = pMethod.toUpperCase();\n    var doneHandle = new function() {\n\n        var\n            \/**\n             * @type {Function}\n             *\/\n            isDone = null,\n            \/**\n             * @type {Function}\n             *\/\n            doneFn;\n\n        \/**\n         * Then\n         * @param {function} fn\n         *\/\n        this.then = function(fn) {\n            doneFn = fn;\n            if (isDone) {\n                isDone.call(this, doneFn);\n                isDone = null;\n            }\n        };\n\n        \/**\n         * @param {function} fn\n         * @returns {doneHandle}\n         *\/\n        this.finish = function(fn) {\n            isDone = fn;\n\n            if (doneFn) {\n                isDone.call(this, doneFn);\n                isDone = null;\n            }\n\n            return this;\n        };\n    };\n    var mData = {};\n    var xhrInstance;\n\n    this.isRunning = function() {\n        return !!xhrInstance;\n    };\n    this.abort = function() {\n        if (xhrInstance) {\n            xhrInstance.abort();\n            xhrInstance = null;\n        }\n        return this;\n    };\n    this.setMethod = function(pMethod) {\n        mMethod = pMethod.toUpperCase();\n        return this;\n    };\n    this.getData = function() {\n        return mData;\n    };\n    this.setData = function(pData) {\n        mData = pData;\n        return this;\n    };\n\n    \/**\n     * Done\n     * @param {function} callback\n     * @returns {BamAjax}\n     *\/\n    this.done = function(callback) {\n        doneHandle.then(callback);\n        return this;\n    };\n\n    this.doRequest = function() {\n\n        var responseV2Request = false;\n        if (threadName.substr(0, 3) === \"V2.\") {\n            threadName = threadName.substr(3);\n            responseV2Request = true;\n        }\n\n        var self = this;\n        var url = window.location.pathname;\n\n        if (BamAppVars.threadLoaderPath) {\n            url = BamAppVars.threadLoaderPath;\n        }\n\n        if (BamAppVars.env.isDebug) {\n            url += \"_to_json_\/\" + threadName;\n        }\n\n        if (window.location.search === \"\") {\n            url += \"?\";\n        } else {\n            url += window.location.search + \"&\";\n        }\n\n        url += \"rand=\" + Math.random();\n\n        if (mMethod === \"GET\") {\n            url += \"&\" + bamSerialize(mData);\n        }\n\n        xhrInstance = new XMLHttpRequest;\n        var sendData = null;\n\n        if (BamAppVars.threadHost) {\n            url = BamAppVars.threadHost + url;\n        }\n\n        xhrInstance.open(mMethod, url, true);\n        xhrInstance.withCredentials = true;\n        xhrInstance.responseType = \"json\";\n        xhrInstance.setRequestHeader(\"X-Load-Thread\", threadName);\n        xhrInstance.setRequestHeader(\"X-Load-Content\", \"content\");\n        xhrInstance.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n\n        if (mMethod === \"POST\") {\n            xhrInstance.setRequestHeader(\"Content-type\", \"application\/x-www-form-urlencoded\");\n            sendData = bamSerialize(mData);\n        }\n\n        xhrInstance.onloadend = function(data) {\n\n            if (!data.target) {\n                return;\n            }\n\n            if (data.target.status === 0) {\n                return;\n            }\n\n            var response,\n                jsonResponse = data.target.response;\n\n            if (responseV2Request) {\n                response = new BamResponse(data.target)\n            } else {\n\n                try {\n\n                    if (data.target.responseType !== \"json\") {\n                        jsonResponse = response = JSON.parse(data.target.response);\n                    } else {\n                        response = data.target.response;\n                    }\n                } catch (Error) {\n                    console.error(Error, response.response);\n                    response = {};\n                    \/\/ if (BamIsDebugMode) {\n                    \/\/ $(\"body\").html(data.target.response);\n                    \/\/ }\n                }\n\n            }\n\n            if (xhrInstance.getResponseHeader(\"x-update-view\") === \"true\") {\n                whenAppStarts(function() {\n                    (new BamViewUpdater()).updateFromXHR(jsonResponse._view);\n                });\n            }\n\n            doneHandle.finish(function(resolve) {\n                resolve.call(self, response);\n            });\n            xhrInstance = null;\n        };\n\n        xhrInstance.send(sendData);\n        return this;\n    }\n}\n\n\/**\n * Thread\n * @param {string} pName Name of th thread\n * @constructor\n *\/\nfunction BamThread(pName) {\n    \"use strict\";\n\n    var mName = pName;\n    var doneFn = [];\n    var ajax;\n\n    \/**\n     * Get name\n     * @returns {string}\n     *\/\n    this.getName = function() {\n        return mName;\n    };\n\n    \/**\n     * Run\n     * @returns {BamAjax}\n     *\/\n    this.run = function(data, method) {\n\n        if (ajax) {\n            ajax.abort();\n        }\n\n        method = method || \"GET\";\n        ajax = new BamAjax(method, mName);\n\n        if (data) {\n            ajax.setData(data);\n        }\n        ajax.doRequest();\n        return ajax;\n    };\n\n    this.isRunning = function() {\n        if (ajax) {\n            return ajax.isRunning();\n        }\n\n        return false;\n    };\n\n    \/**\n     * Add done\n     * @param {Function} fn Callback function\n     * @returns {BamThread}\n     *\/\n    this.done = function(fn) {\n\n        doneFn.push(fn);\n\n        if (ajax) {\n            ajax.done(function(response) {\n                doneFn.forEach(function(callback) {\n                    callback.call(ajax, response);\n                });\n                doneFn = [];\n            });\n        }\n        return this;\n    };\n}\n\nwindow.BamThread = BamThread;\nwindow.BamThreadLoader = new function() {\n    \"use strict\";\n\n    var threadStack = {};\n\n    return function(threadName) {\n        var thread = threadStack[threadName] || (threadStack[threadName] = new BamThread(threadName));\n        return thread;\n    };\n};\n\nBamThreadLoader.GET = \"GET\";\nBamThreadLoader.POST = \"POST\";\nvar BamViewUpdater = (function() {\n\n    function BamViewUpdater() {\n\n    }\n\n    \/**\n     * @type {{updateHTML: (function(Object): BamViewUpdater), updateLocation: (function(Object): BamViewUpdater), updateFromXHR: (function(Object): BamViewUpdater), updateDataSrc: (function(Object): BamViewUpdater)}}\n     *\/\n    BamViewUpdater.prototype = {\n        \/**\n         * Update from xhr\n         * @param {Object} viewData\n         * @returns {BamViewUpdater}\n         *\/\n        updateFromXHR: function(viewData) {\n\n            if (!viewData) {\n                return;\n            }\n\n            var that = this;\n            if (viewData._dataSrc) {\n\n                DataSrc.HTMLUpdated(function() {\n                    viewData._dataSrc && that.updateDataSrc(viewData._dataSrc);\n                });\n            }\n            viewData._location && this.updateLocation(viewData._location);\n            viewData._html && this.updateHTML(viewData._html);\n\n            var hasHtmlUpdates = false;\n            if (viewData._html) {\n                hasHtmlUpdates = this.updateHTML(viewData._html);\n            }\n\n            if (viewData._dataSrc && !hasHtmlUpdates) {\n                DataSrc.HTMLUpdated();\n            }\n            return this;\n        },\n        \/**\n         * Update data src\n         * @param {Object} data\n         * @returns {boolean}\n         *\/\n        updateHTML: function(data) {\n            var selectors, i, iMax, hasUpdates = false;\n\n            if (data.replace) {\n                selectors = Object.keys(data.replace);\n                for (i = 0, iMax = selectors.length; i < iMax; i++) {\n                    document.querySelectorAll(selectors[i]).forEach(function(value) {\n                        hasUpdates = true;\n                        value.outerHTML = data.replace[selectors[i]];\n                    });\n                }\n            }\n            if (data.append) {\n                selectors = Object.keys(data.append);\n                for (i = 0, iMax = selectors.length; i < iMax; i++) {\n                    document.querySelectorAll(selectors[i]).forEach(function(value) {\n\n                        var newHtml = data.append[selectors[i]];\n                        if (!(newHtml instanceof Array)) {\n                            newHtml = [newHtml];\n                        }\n                        newHtml.forEach(function(newHtml) {\n                            var tmp = document.createElement(\"div\");\n                            tmp.innerHTML = newHtml;\n                            hasUpdates = true;\n                            Array.from(tmp.childNodes).forEach(function(child) {\n                                value.append(child);\n                            });\n                        });\n                    });\n                }\n            }\n\n            return hasUpdates;\n        },\n        \/**\n         * Update data src\n         * @param {Object} data\n         * @returns {BamViewUpdater}\n         *\/\n        updateDataSrc: function(data) {\n            var keys = Object.keys(data), i, iMax;\n            for (i = 0, iMax = keys.length; i < iMax; i++) {\n                DataSrc.get(keys[i]).fill(data[keys[i]]).update();\n            }\n            return this;\n        },\n        \/**\n         * Update location\n         * @param {Object} locationData\n         * @returns {BamViewUpdater}\n         *\/\n        updateLocation: function(locationData) {\n            if (locationData.url) {\n\n                if (locationData.type === \"push\") {\n                    BamHistory.push(locationData.url);\n                } else if (locationData.type === \"replace\") {\n                    BamHistory.replace(locationData.url);\n                } else if (locationData.type === \"redirect\") {\n                    BamHistory.redirect(locationData.url);\n                }\n            }\n            return this;\n        }\n    };\n    return BamViewUpdater;\n})();\nfunction bamSerialize(inputData) {\n    if (typeof inputData === \"string\") {\n        return inputData;\n    }\n\n    inputData = _prepareMultiObjectToOneDimensionArray(inputData);\n\n    for (var i = 0, result = [], max = inputData.length; i < max; i++) {\n        result.push(encodeURIComponent(inputData[i][0]) + \"=\" + encodeURIComponent(inputData[i][1]));\n    }\n\n    return result.join(\"&\");\n\n}\n\nfunction _prepareMultiObjectToOneDimensionArray(inputData, nameArray, preparedResult) {\n\n    preparedResult = preparedResult || [];\n    nameArray = nameArray || [];\n\n    var keys = [],\n        isArray = false,\n        i, j, iMax,\n        value, name, nameArrayCopy;\n\n    if (inputData instanceof Array) {\n        isArray = true;\n        iMax = inputData.length;\n    } else if (inputData instanceof Object) {\n        keys = Object.keys(inputData);\n        iMax = keys.length;\n    }\n\n    for (i = 0; i < iMax; i++) {\n\n        nameArrayCopy = Array.from(nameArray);\n\n        if (isArray) {\n            value = inputData[i];\n            nameArrayCopy.push(i);\n        } else {\n            value = inputData[keys[i]];\n            nameArrayCopy.push(keys[i]);\n        }\n\n        if (value instanceof Object) {\n            _prepareMultiObjectToOneDimensionArray(value, Array.from(nameArrayCopy), preparedResult);\n            continue;\n        }\n\n        name = nameArrayCopy.shift();\n\n        if (nameArrayCopy.length > 0) {\n            name += \"[\" + nameArrayCopy.join(\"][\") + \"]\";\n        }\n\n        preparedResult.push([name, value]);\n    }\n\n    return preparedResult;\n}\n\n\/**\n *\n * @param {HTMLElement} field\n * @param {Object} data\n * @returns {*}\n *\/\nfunction bamInjectFieldDataToArray(field, data) {\n\n    var i1 = 0,\n        i, iMax,\n        j, jMax,\n        i2 = 0,\n        max2, dataReference,\n        nameKeys, key, value, option, fieldName,\n        addDataIsArray, keysAddData,\n        additionalSubmitData;\n\n    if (undefined === field.value && field.dataset && field.dataset.value) {\n        value = field.dataset.value;\n    } else {\n        value = field.value;\n    }\n\n    if (field.dataset && field.dataset.bamAdditionalSubmitData) {\n        additionalSubmitData = JSON.parse(field.dataset.bamAdditionalSubmitData);\n        addDataIsArray = additionalSubmitData instanceof Array;\n        if (addDataIsArray) {\n            iMax = additionalSubmitData.length;\n        } else {\n            keysAddData = Object.keys(additionalSubmitData);\n            iMax = keysAddData.length;\n        }\n\n        for (i = 0; i < iMax; i++) {\n            if (addDataIsArray) {\n                key = i;\n            } else {\n                key = keysAddData[i];\n            }\n\n            bamInjectFieldDataToArray({\n                \"name\": key,\n                \"value\": additionalSubmitData[key]\n            }, data);\n        }\n    }\n    if (field.type === \"radio\" && !field.checked) {\n        return data;\n    }\n\n    if (field.type === \"checkbox\" && !field.checked) {\n\n        if (field.dataset.bamFormUnchecked) {\n            value = field.dataset.bamFormUnchecked;\n        } else {\n            return data;\n        }\n    }\n\n    var tmpData = [];\n    var fName = field.name || field.dataset.name;\n\n    if (field.type === \"select-multiple\") {\n        for (j = 0, jMax = field.options.length; j < jMax; j++) {\n            option = field.options[j];\n            if (option.selected) {\n                tmpData.push([fName, option.value]);\n            }\n        }\n    } else {\n        tmpData.push([fName, value]);\n    }\n\n    for (var x = 0; x < tmpData.length; x++) {\n\n        fieldName = tmpData[x][0];\n        value = tmpData[x][1];\n        nameKeys = fieldName.split(\"[\");\n        dataReference = data;\n\n        for (i2 = 0, max2 = nameKeys.length; i2 < max2; i2++) {\n\n            key = nameKeys[i2].trim();\n\n            if (i2 > 0) {\n                key = key.substring(0, key.length - 1).trim();\n            } else {\n                key = key.replace(\/ \/g, \"_\");\n            }\n\n            key = bamDetermineKeyForObject(dataReference, key);\n\n            if (undefined === dataReference[key]) {\n                dataReference[key] = {};\n            }\n\n            if (i2 === max2 - 1) {\n                dataReference[key] = value;\n            } else {\n                dataReference = dataReference[key];\n            }\n        }\n    }\n\n    return data;\n}\n\n\/**\n *\n * @param {HTMLFormElement} form\n * @returns {Array}\n *\/\nfunction bamFormToArray(form) {\n\n    var i1 = 0,\n        j, jMax,\n        i2 = 0,\n        field,\n        elements,\n        max1, max2, data = {}, dataReference,\n        nameKeys, key, value, option, fieldName;\n\n    if (form instanceof Array) {\n        elements = form;\n    } else {\n        elements = form.elements;\n    }\n\n    max1 = elements.length;\n\n    for (i1 = 0; i1 < max1; i1++) {\n        field = elements[i1];\n\n        if (field.dataset.name && field.dataset.type === \"submit\" && undefined !== field.dataset.checked) {\n            data = bamInjectFieldDataToArray({\n                \"name\": field.dataset.name,\n                \"value\": field.dataset.value\n            }, data);\n\n            continue;\n        }\n\n        if (!field.name\n            || field.disabled ||\n            [\"file\", \"reset\", \"submit\", \"button\"].indexOf(field.type) > 0) {\n            continue;\n        }\n\n        data = bamInjectFieldDataToArray(field, data);\n    }\n    return _checkArrayCast(data);\n}\n\n\/**\n * @param data\n * @returns {Array|*|*}\n * @private\n *\/\nfunction _checkArrayCast(data) {\n\n    if (!(data instanceof Object)) {\n        return data;\n    }\n\n    var forcedArray = [], key, i, max, keys = Object.keys(data);\n\n    for (i = 0, max = keys.length; i < max; i++) {\n\n        data[keys[i]] = _checkArrayCast(data[keys[i]]);\n        key = parseInt(keys[i]);\n\n        if (isNaN(key)) {\n            forcedArray = null;\n            continue;\n        }\n\n        if (null !== forcedArray) {\n            forcedArray[key] = data[key];\n        }\n\n    }\n\n    return forcedArray || data;\n}\n\nfunction bamDetermineKeyForObject(dataObject, key) {\n\n    if (key !== \"\") {\n        return key;\n    }\n\n    var objectKeys = Object.keys(dataObject),\n        maxKeyValue = -1, i, max, tmp;\n\n    for (i = 0, max = objectKeys.length; i < max; i++) {\n        tmp = parseInt(objectKeys[i]);\n        maxKeyValue = Math.max(maxKeyValue, isNaN(tmp) ? -1 : tmp);\n    }\n\n    return maxKeyValue + 1;\n}\n\nfunction afterAppDataLoaded(callback) {\n    appStartCallback(afterAppDataLoaded, callback);\n}\n\nfunction whenClassesLoaded(callback) {\n    appStartCallback(whenClassesLoaded, callback);\n}\n\nfunction afterViewJsExecute(callback) {\n    appStartCallback(afterViewJsExecute, callback);\n}\nfunction whenAppStarts(callback) {\n    appStartCallback(whenAppStarts, callback);\n}\n\nfunction appStartCallback(executeMethod, callback) {\n\n    executeMethod.stack = executeMethod.stack || [];\n\n    if (callback) {\n        executeMethod.stack.push(callback);\n\n        if (!executeMethod.executed) {\n            return;\n        }\n    }\n\n    executeMethod.stack.map(function (fn) {\n        fn();\n    });\n    executeMethod.executed = true;\n    executeMethod.stack = [];\n}\n\/\/ Pollyfill for Microsoft Internet Explorer 11 from Mdn\n\/\/ https:\/\/developer.mozilla.org\/de\/docs\/Web\/API\/Element\/matches\nif (!Element.prototype.matches) {\n    Element.prototype.matches = Element.prototype.msMatchesSelector;\n}\n\/\/ Production steps of ECMA-262, Edition 6, 22.1.2.1\n\/\/ https:\/\/developer.mozilla.org\/de\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Array\/from\nif (!Array.from) {\n    Array.from = (function() {\n        var toStr = Object.prototype.toString;\n        var isCallable = function(fn) {\n            return typeof fn === 'function' || toStr.call(fn) === '[object Function]';\n        };\n        var toInteger = function(value) {\n            var number = Number(value);\n            if (isNaN(number)) {\n                return 0;\n            }\n            if (number === 0 || !isFinite(number)) {\n                return number;\n            }\n            return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));\n        };\n        var maxSafeInteger = Math.pow(2, 53) - 1;\n        var toLength = function(value) {\n            var len = toInteger(value);\n            return Math.min(Math.max(len, 0), maxSafeInteger);\n        };\n\n        \/\/ The length property of the from method is 1.\n        return function from(arrayLike\/*, mapFn, thisArg *\/) {\n            \/\/ 1. Let C be the this value.\n            var C = this;\n\n            \/\/ 2. Let items be ToObject(arrayLike).\n            var items = Object(arrayLike);\n\n            \/\/ 3. ReturnIfAbrupt(items).\n            if (arrayLike == null) {\n                throw new TypeError('Array.from requires an array-like object - not null or undefined');\n            }\n\n            \/\/ 4. If mapfn is undefined, then let mapping be false.\n            var mapFn = arguments.length > 1 ? arguments[1] : void undefined;\n            var T;\n            if (typeof mapFn !== 'undefined') {\n                \/\/ 5. else\n                \/\/ 5. a If IsCallable(mapfn) is false, throw a TypeError exception.\n                if (!isCallable(mapFn)) {\n                    throw new TypeError('Array.from: when provided, the second argument must be a function');\n                }\n\n                \/\/ 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined.\n                if (arguments.length > 2) {\n                    T = arguments[2];\n                }\n            }\n\n            \/\/ 10. Let lenValue be Get(items, \"length\").\n            \/\/ 11. Let len be ToLength(lenValue).\n            var len = toLength(items.length);\n\n            \/\/ 13. If IsConstructor(C) is true, then\n            \/\/ 13. a. Let A be the result of calling the [[Construct]] internal method\n            \/\/ of C with an argument list containing the single item len.\n            \/\/ 14. a. Else, Let A be ArrayCreate(len).\n            var A = isCallable(C) ? Object(new C(len)) : new Array(len);\n\n            \/\/ 16. Let k be 0.\n            var k = 0;\n            \/\/ 17. Repeat, while k < len\u2026 (also steps a - h)\n            var kValue;\n            while (k < len) {\n                kValue = items[k];\n                if (mapFn) {\n                    A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);\n                } else {\n                    A[k] = kValue;\n                }\n                k += 1;\n            }\n            \/\/ 18. Let putStatus be Put(A, \"length\", len, true).\n            A.length = len;\n            \/\/ 20. Return A.\n            return A;\n        };\n    }());\n}\n\n\/*\n * classList.js: Cross-browser full element.classList implementation.\n * 1.2.20171210\n *\n * By Eli Grey, http:\/\/eligrey.com\n * License: Dedicated to the public domain.\n *   See https:\/\/github.com\/eligrey\/classList.js\/blob\/master\/LICENSE.md\n *\/\n\n\/*global self, document, DOMException *\/\n\n\/*! @source http:\/\/purl.eligrey.com\/github\/classList.js\/blob\/master\/classList.js *\/\n\nif (\"document\" in self) {\n\n\/\/ Full polyfill for browsers with no classList support\n\/\/ Including IE < Edge missing SVGElement.classList\n    if (\n        !(\"classList\" in document.createElement(\"_\"))\n        || document.createElementNS\n        && !(\"classList\" in document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\", \"g\"))\n    ) {\n\n        (function(view) {\n\n            \"use strict\";\n\n            if (!('Element' in view)) return;\n\n            var\n                classListProp = \"classList\"\n                , protoProp = \"prototype\"\n                , elemCtrProto = view.Element[protoProp]\n                , objCtr = Object\n                , strTrim = String[protoProp].trim || function() {\n                    return this.replace(\/^\\s+|\\s+$\/g, \"\");\n                }\n                , arrIndexOf = Array[protoProp].indexOf || function(item) {\n                    var\n                        i = 0\n                        , len = this.length\n                    ;\n                    for (; i < len; i++) {\n                        if (i in this && this[i] === item) {\n                            return i;\n                        }\n                    }\n                    return -1;\n                }\n                \/\/ Vendors: please allow content code to instantiate DOMExceptions\n                , DOMEx = function(type, message) {\n                    this.name = type;\n                    this.code = DOMException[type];\n                    this.message = message;\n                }\n                , checkTokenAndGetIndex = function(classList, token) {\n                    if (token === \"\") {\n                        throw new DOMEx(\n                            \"SYNTAX_ERR\"\n                            , \"The token must not be empty.\"\n                        );\n                    }\n                    if (\/\\s\/.test(token)) {\n                        throw new DOMEx(\n                            \"INVALID_CHARACTER_ERR\"\n                            , \"The token must not contain space characters.\"\n                        );\n                    }\n                    return arrIndexOf.call(classList, token);\n                }\n                , ClassList = function(elem) {\n                    var\n                        trimmedClasses = strTrim.call(elem.getAttribute(\"class\") || \"\")\n                        , classes = trimmedClasses ? trimmedClasses.split(\/\\s+\/) : []\n                        , i = 0\n                        , len = classes.length\n                    ;\n                    for (; i < len; i++) {\n                        this.push(classes[i]);\n                    }\n                    this._updateClassName = function() {\n                        elem.setAttribute(\"class\", this.toString());\n                    };\n                }\n                , classListProto = ClassList[protoProp] = []\n                , classListGetter = function() {\n                    return new ClassList(this);\n                }\n            ;\n\/\/ Most DOMException implementations don't allow calling DOMException's toString()\n\/\/ on non-DOMExceptions. Error's toString() is sufficient here.\n            DOMEx[protoProp] = Error[protoProp];\n            classListProto.item = function(i) {\n                return this[i] || null;\n            };\n            classListProto.contains = function(token) {\n                return ~checkTokenAndGetIndex(this, token + \"\");\n            };\n            classListProto.add = function() {\n                var\n                    tokens = arguments\n                    , i = 0\n                    , l = tokens.length\n                    , token\n                    , updated = false\n                ;\n                do {\n                    token = tokens[i] + \"\";\n                    if (!~checkTokenAndGetIndex(this, token)) {\n                        this.push(token);\n                        updated = true;\n                    }\n                }\n                while (++i < l);\n\n                if (updated) {\n                    this._updateClassName();\n                }\n            };\n            classListProto.remove = function() {\n                var\n                    tokens = arguments\n                    , i = 0\n                    , l = tokens.length\n                    , token\n                    , updated = false\n                    , index\n                ;\n                do {\n                    token = tokens[i] + \"\";\n                    index = checkTokenAndGetIndex(this, token);\n                    while (~index) {\n                        this.splice(index, 1);\n                        updated = true;\n                        index = checkTokenAndGetIndex(this, token);\n                    }\n                }\n                while (++i < l);\n\n                if (updated) {\n                    this._updateClassName();\n                }\n            };\n            classListProto.toggle = function(token, force) {\n                var\n                    result = this.contains(token)\n                    , method = result ?\n                    force !== true && \"remove\"\n                    :\n                    force !== false && \"add\"\n                ;\n\n                if (method) {\n                    this[method](token);\n                }\n\n                if (force === true || force === false) {\n                    return force;\n                } else {\n                    return !result;\n                }\n            };\n            classListProto.replace = function(token, replacement_token) {\n                var index = checkTokenAndGetIndex(token + \"\");\n                if (~index) {\n                    this.splice(index, 1, replacement_token);\n                    this._updateClassName();\n                }\n            }\n            classListProto.toString = function() {\n                return this.join(\" \");\n            };\n\n            if (objCtr.defineProperty) {\n                var classListPropDesc = {\n                    get: classListGetter\n                    , enumerable: true\n                    , configurable: true\n                };\n                try {\n                    objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n                } catch (ex) { \/\/ IE 8 doesn't support enumerable:true\n                    \/\/ adding undefined to fight this issue https:\/\/github.com\/eligrey\/classList.js\/issues\/36\n                    \/\/ modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected\n                    if (ex.number === undefined || ex.number === -0x7FF5EC54) {\n                        classListPropDesc.enumerable = false;\n                        objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n                    }\n                }\n            } else if (objCtr[protoProp].__defineGetter__) {\n                elemCtrProto.__defineGetter__(classListProp, classListGetter);\n            }\n\n        }(self));\n\n    }\n\n\/\/ There is full or partial native classList support, so just check if we need\n\/\/ to normalize the add\/remove and toggle APIs.\n\n    (function() {\n        \"use strict\";\n\n        var testElement = document.createElement(\"_\");\n\n        testElement.classList.add(\"c1\", \"c2\");\n\n        \/\/ Polyfill for IE 10\/11 and Firefox <26, where classList.add and\n        \/\/ classList.remove exist but support only one argument at a time.\n        if (!testElement.classList.contains(\"c2\")) {\n            var createMethod = function(method) {\n                var original = DOMTokenList.prototype[method];\n\n                DOMTokenList.prototype[method] = function(token) {\n                    var i, len = arguments.length;\n\n                    for (i = 0; i < len; i++) {\n                        token = arguments[i];\n                        original.call(this, token);\n                    }\n                };\n            };\n            createMethod('add');\n            createMethod('remove');\n        }\n\n        testElement.classList.toggle(\"c3\", false);\n\n        \/\/ Polyfill for IE 10 and Firefox <24, where classList.toggle does not\n        \/\/ support the second argument.\n        if (testElement.classList.contains(\"c3\")) {\n            var _toggle = DOMTokenList.prototype.toggle;\n\n            DOMTokenList.prototype.toggle = function(token, force) {\n                if (1 in arguments && !this.contains(token) === !force) {\n                    return force;\n                } else {\n                    return _toggle.call(this, token);\n                }\n            };\n\n        }\n\n        \/\/ replace() polyfill\n        if (!(\"replace\" in document.createElement(\"_\").classList)) {\n            DOMTokenList.prototype.replace = function(token, replacement_token) {\n                var\n                    tokens = this.toString().split(\" \")\n                    , index = tokens.indexOf(token + \"\")\n                ;\n                if (~index) {\n                    tokens = tokens.slice(index);\n                    this.remove.apply(this, tokens);\n                    this.add(replacement_token);\n                    this.add.apply(this, tokens.slice(1));\n                }\n            }\n        }\n\n        testElement = null;\n    }());\n\n}\n\n\/\/ Create Element.remove() function if not exist\nif (!('remove' in Element.prototype)) {\n\n    Element.prototype.remove = function() {\n        if (this.parentNode) {\n            this.parentNode.removeChild(this);\n        }\n    };\n}\n\n(function() {\n    var cnt = 0,\n        interval = setInterval(function() {\n\n            if (cnt++ > 10) {\n                clearInterval(interval);\n            }\n\n            if (!document.body) {\n                return;\n            }\n\n            clearInterval(interval);\n\n            if (document.body.classList.contains(\"edge\") || document.body.classList.contains(\"ie11\")) {\n\n                window.getIE11CSSPath = function(el) {\n\n                    if (!(el instanceof Element)) {\n                        return;\n                    }\n\n                    var path = [];\n\n                    while (el.nodeType === Node.ELEMENT_NODE) {\n\n                        var selector = el.nodeName.toLowerCase();\n\n                        if (el.id) {\n\n                            selector += '#' + el.id;\n                            path.unshift(selector);\n                            break;\n\n                        } else {\n\n                            var sib = el, nth = 1;\n\n                            while (sib = sib.previousElementSibling) {\n\n                                if (sib.nodeName.toLowerCase() === selector) {\n                                    nth++;\n                                }\n                            }\n\n                            if (nth !== 1) {\n                                selector += \":nth-of-type(\" + nth + \")\";\n                            }\n                        }\n\n                        path.unshift(selector);\n\n                        el = el.parentNode;\n\n                    }\n\n                    return path.join(\" > \");\n                }\n\n            }\n        }, 100);\n\n})();\nif (!Element.prototype.replaceWith) {\n    Element.prototype.replaceWith = function replaceWith(replace) {\n        if (this.parentNode) {\n            this.parentNode.replaceChild(replace, this);\n        }\n    };\n}\n\n\/\/ Source: https:\/\/github.com\/jserz\/js_piece\/blob\/master\/DOM\/ParentNode\/prepend()\/prepend().md\n(function(arr) {\n    arr.forEach(function(item) {\n        if (item.hasOwnProperty('prepend')) {\n            return;\n        }\n        Object.defineProperty(item, 'prepend', {\n            configurable: true,\n            enumerable: true,\n            writable: true,\n            value: function prepend() {\n                var argArr = Array.prototype.slice.call(arguments),\n                    docFrag = document.createDocumentFragment();\n\n                argArr.forEach(function(argItem) {\n                    var isNode = argItem instanceof Node;\n                    docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem)));\n                });\n\n                this.insertBefore(docFrag, this.firstChild);\n            }\n        });\n    });\n})([Element.prototype, Document.prototype, DocumentFragment.prototype]);\n\n\/\/from: https:\/\/github.com\/jserz\/js_piece\/blob\/master\/DOM\/ChildNode\/after()\/after().md\n(function(arr) {\n    arr.forEach(function(item) {\n        if (item.hasOwnProperty('after')) {\n            return;\n        }\n        Object.defineProperty(item, 'after', {\n            configurable: true,\n            enumerable: true,\n            writable: true,\n            value: function after() {\n                var argArr = Array.prototype.slice.call(arguments),\n                    docFrag = document.createDocumentFragment();\n\n                argArr.forEach(function(argItem) {\n                    var isNode = argItem instanceof Node;\n                    docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem)));\n                });\n\n                this.parentNode.insertBefore(docFrag, this.nextSibling);\n            }\n        });\n    });\n})([Element.prototype, CharacterData.prototype, DocumentType.prototype]);\n\nif (!NodeList.prototype.forEach) {\n    NodeList.prototype.forEach = function() {\n        Array.from(this).forEach.apply(this, arguments);\n    };\n}\nif (!HTMLElement.prototype.append) {\n    HTMLElement.prototype.append = function(child) {\n        if (child instanceof HTMLElement) {\n            this.appendChild(child);\n        }\n        return this\n    }\n}\n\nif (!Array.prototype.find) {\n    Object.defineProperty(Array.prototype, \"find\", {\n        enumerable: false,\n        value: function(predicate) {\n            if (this == null) {\n                throw new TypeError('Array.prototype.find called on null or undefined');\n            }\n            if (typeof predicate !== 'function') {\n                throw new TypeError('predicate must be a function');\n            }\n            var list = Object(this);\n            var length = list.length >>> 0;\n            var thisArg = arguments[1];\n            var value;\n\n            for (var i = 0; i < length; i++) {\n                value = list[i];\n                if (predicate.call(thisArg, value, i, list)) {\n                    return value;\n                }\n            }\n            return undefined;\n        }\n    });\n}\n\nif (typeof Object.assign != 'function') {\n    \/\/ Must be writable: true, enumerable: false, configurable: true\n    Object.defineProperty(Object, \"assign\", {\n        value: function assign(target, varArgs) { \/\/ .length of function is 2\n            'use strict';\n            if (target == null) { \/\/ TypeError if undefined or null\n                throw new TypeError('Cannot convert undefined or null to object');\n            }\n\n            var to = Object(target);\n\n            for (var index = 1; index < arguments.length; index++) {\n                var nextSource = arguments[index];\n\n                if (nextSource != null) { \/\/ Skip over if undefined or null\n                    for (var nextKey in nextSource) {\n                        \/\/ Avoid bugs when hasOwnProperty is shadowed\n                        if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n                            to[nextKey] = nextSource[nextKey];\n                        }\n                    }\n                }\n            }\n            return to;\n        },\n        writable: true,\n        configurable: true\n    });\n}\n\n(function () {\n    \"use strict\";\n\n    window.BamService = new function () {\n\n        var registeredService = {};\n        var serviceInstances = {};\n        return {\n\n            \"register\": function (name, fn) {\n\n                registeredService[name] = fn;\n\n                if (requireBamService.stack && requireBamService.stack[name]) {\n                    var tmp = requireBamService.stack[name];\n                    delete requireBamService.stack[name];\n                    tmp.forEach(function (val) {\n                        val();\n                    })\n                }\n\n                return this;\n            },\n            \"create\": function (name) {\n\n                if (typeof registeredService[name] === \"undefined\") {\n                    throw \"BamService: no registration for \" + name;\n                }\n\n                return new registeredService[name];\n            },\n            \"set\": function (name, fn) {\n                serviceInstances[name] = fn;\n                return this;\n            },\n            \"get\": function (name, fn) {\n\n                if (typeof serviceInstances[name] === \"undefined\") {\n                    this.set(name, this.create(name));\n                }\n\n                return serviceInstances[name];\n            }\n        }\n    };\n})();\nfunction SsoUser() {\n\n    var firstName = null,\n        lastName = null,\n        email = null,\n        loginPhone = null,\n        loginStatus = null,\n        pointAccount = false,\n        pointPlanId = 0,\n        pointValue = 0,\n        bestSsoData = null,\n        ssoId = 0;\n\n    return {\n        \"getWireframeSalutation\": function () {\n\n            if (this.isLoggedIn() || this.isExpired()) {\n                if (firstName && lastName) {\n                    return firstName + \" \" + lastName;\n                }\n                return \"Hallo!\";\n            }\n\n            return \"\";\n        },\n        \"getPointPlanId\": function () {\n            return pointPlanId;\n        },\n        \"getPointValue\": function () {\n            return pointValue;\n        },\n        \"isPointAccount\": function () {\n            return pointAccount;\n        },\n        \"getLoginStatus\": function () {\n            return loginStatus;\n        },\n\n        \"reset\": function () {\n            firstName = null;\n            lastName = null;\n            email = null;\n            loginPhone = null;\n            pointAccount = false,\n            pointPlanId = 0,\n            pointValue = 0,\n            loginStatus = null;\n            bestSsoData = null;\n            ssoId = 0;\n        },\n        \"setLoginStatus\": function (pLoginStatus) {\n            this.reset();\n            loginStatus = pLoginStatus;\n            return this;\n        },\n        \"isExpired\": function () {\n            return \"expired\" === loginStatus;\n        },\n        \"isLoggedOut\": function () {\n            return \"logout\" === loginStatus;\n        },\n        \"expire\": function () {\n            this.setLoginStatus(\"expired\");\n            return this;\n        },\n        \"login\": function () {\n            this.setLoginStatus(\"login\");\n            return this;\n        },\n        \"logout\": function () {\n            this.setLoginStatus(\"logout\");\n            return this;\n        },\n        \"isLoggedIn\": function () {\n            return \"login\" === loginStatus;\n        },\n        \"fill\": function (data) {\n\n            if (typeof data === 'undefined') return; \/\/ dev fix me\n\n            loginStatus = data.loginStatus || loginStatus;\n            firstName = data.firstname || firstName;\n            lastName = data.surname || lastName;\n            email = data.email || \"\";\n            loginPhone = data.loginPhone || \"\";\n            pointPlanId = data.pointPlan || 0;\n            pointValue = data.pointValue || 0;\n            pointAccount = data.pointsAccount === true;\n            ssoId = data.id || 0;\n            return this;\n        },\n        \"getFirstname\": function () {\n            return firstName\n        },\n        \"setFirstname\": function (pFirstname) {\n            firstName = pFirstname;\n            return this;\n        },\n        \"getLastname\": function () {\n            return lastName\n        },\n        \"setLastname\": function (pLastname) {\n            lastName = pLastname;\n            return this;\n        },\n        \"getEmail\": function () {\n            return email\n        },\n        \"setEmail\": function (pEmail) {\n            email = pEmail;\n            return this;\n        },\n        \"getLoginPhone\": function () {\n            return loginPhone\n        },\n        \"getBestSsoData\": function () {\n            return bestSsoData;\n        },\n        \"setBestSsoData\": function (value) {\n            bestSsoData = value;\n            return this;\n        }\n    }\n}\n\n(function (BamService) {\n    BamService.register(\"SsoUser\", SsoUser);\n})(BamService);\n\nconst C24Internet = {};\n\nC24Internet.UserHandler = (() => {\n    const guest = \"guest\";\n    const user = \"user\";\n    const expired = \"expired\";\n    let userData;\n\n    const getAllElementsByStatus = (status) => {\n        return document.querySelectorAll(`[class*='customer-${status}'], [id$='${status}']`);\n    }\n\n    const handleDOM = (hideStatusElements, showStatusElements) => {\n        hideStatusElements.forEach((status) => {\n            getAllElementsByStatus(status).forEach((element) => {\n                element.style.display = \"none\";\n            });\n        });\n        getAllElementsByStatus(showStatusElements).forEach((element) => {\n            element.style.display = \"block\";\n        });\n    }\n    const setSalutation = (status) => {\n        let statusElements = document.querySelector(`.c24-customer-${status} .c24-customer-hover`);\n        if (statusElements) {\n            statusElements.innerHTML = BamService.get(\"SsoUser\").getWireframeSalutation();\n        }\n    }\n    const showGuest = () => {\n        const hideStatusElements = [\n            user, expired\n        ];\n        handleDOM(hideStatusElements, guest);\n    }\n    const showUser = (ssoUserData) => {\n        const hideStatusElements = [\n            guest, expired\n        ];\n        userData = ssoUserData;\n        handleDOM(hideStatusElements, user);\n        setSalutation(user);\n    }\n    const showExpired = (ssoUserData) => {\n        const hideStatusElements = [\n            guest, user\n        ];\n        userData = ssoUserData;\n        handleDOM(hideStatusElements, expired);\n        setSalutation(expired);\n    }\n    return {\n        showGuest,\n        showUser,\n        showExpired\n    }\n})();\n\nBamThreadLoader(\"Bpm\/Get\").run({\"checkSso\":true}, \"GET\");\n\n\n            \nvar DataSrc=function(){\"use strict\";var _textNodesById=[],_nodeCnt=0;function _extractTextNodes(nodeList,dataSrcInstance){(nodeList=nodeList instanceof HTMLElement?nodeList.childNodes:nodeList).forEach&&nodeList.forEach(function(value){var vars;3===value.nodeType?(vars=value.textContent.match(\/{{.+?}}\/g))&&(value.textContentOrigin=value.textContent,value._bamIdent||(value._bamIdent=\"_\"+ ++_nodeCnt+Math.random().toString(32)),_textNodesById[value._bamIdent]=value,vars.forEach(function(varName){varName=varName.substring(2,varName.length-2),dataSrcInstance._textNodeVarToIdMap[value._bamIdent]=dataSrcInstance._textNodeVarToIdMap[value._bamIdent]||[],dataSrcInstance._textNodeVarToIdMap[varName]instanceof Array||(dataSrcInstance._textNodeVarToIdMap[varName]=[]),-1===dataSrcInstance._textNodeVarToIdMap[varName].indexOf(value._bamIdent)&&dataSrcInstance._textNodeVarToIdMap[varName].push(value._bamIdent),dataSrcInstance._textNodes[varName]=dataSrcInstance._textNodes[varName]||[],dataSrcInstance._textNodes[varName].push(value)})):_extractTextNodes(value,dataSrcInstance)})}function DataSrc(){if(!(this instanceof DataSrc))return DataSrc.get.apply(this,arguments);this._textNodes={},this._textNodeVarToIdMap={}}return DataSrc.HTMLUpdated=function(){arguments.length?DataSrc.HTMLUpdated._fn=arguments[0]:(DataSrc.HTMLUpdated._fn&&DataSrc.HTMLUpdated._fn(),DataSrc.HTMLUpdated._fn=null)},DataSrc.prototype={_init:function(name){var that=this;this._tpl=document.querySelectorAll('[data-datasrc=\"'+name+'\"]'),Array.from(this._tpl).forEach(function(tpl){new MutationObserver(function(mutations){var mapped=[];mutations.forEach(function(mutation){-1===mapped.indexOf(mutation.target)&&mapped.push(mutation.target)}),_extractTextNodes(mapped,that),that.update(),DataSrc.HTMLUpdated()}).observe(tpl,{childList:!0,subtree:!0})}),_extractTextNodes(this._tpl,this),this._data={},this._name=name},set:function(key,value){return this._data[key]=value,this},get:function(key){return void 0===key?this._data:this._data[key]},fill:function(data){var that=this;return Object.keys(data).forEach(function(key){that._data[key]=data[key]}),this},getTextNodes:function(varName){var textNodes=[];return this._textNodeVarToIdMap[varName].forEach(function(tpl){textNodes.push(_textNodesById[tpl])}),textNodes},update:function(){var that=this,neededTemplates={};Object.keys(this._data).forEach(function(varName){(that._textNodeVarToIdMap[varName]||[]).forEach(function(tpl){neededTemplates[tpl]||(_textNodesById[tpl].textContentTmp=_textNodesById[tpl].textContentOrigin,neededTemplates[tpl]={node:_textNodesById[tpl],vars:{}}),neededTemplates[tpl].vars[varName]=!0})});var updatedVars={};return Object.keys(neededTemplates).forEach(function(templateId){Object.keys(neededTemplates[templateId].vars).forEach(function(varname){var regex=new RegExp(\"{{\"+varname+\"}}\",\"g\");updatedVars[\"_ds.\"+that._name+\".\"+varname]=that._data[varname],neededTemplates[templateId].node.textContentTmp=neededTemplates[templateId].node.textContentTmp.replace(regex,that._data[varname])}),neededTemplates[templateId].node.textContent!==neededTemplates[templateId].node.textContentTmp&&(neededTemplates[templateId].node.textContent=neededTemplates[templateId].node.textContentTmp)}),Object.keys(updatedVars).length&&BamService.get(\"VisibilityManager\").addData(updatedVars).check(),this}},DataSrc.get=function(name){return BamSingletonInstance(DataSrc,name,name)},DataSrc}();window.BamSingletonInstance=function(){var _stack={};function BamSingletonInstance(classAsCallable,identifier){return identifier=classAsCallable.constructor.name+\"|\"+classAsCallable.prototype.constructor.name+\"|\"+identifier,_stack[identifier]||(_stack[identifier]=new classAsCallable,_stack[identifier]._init&&_stack[identifier]._init.apply(_stack[identifier],Array.from(arguments).slice(2))),_stack[identifier]}return BamSingletonInstance.kill=function(identifier){for(var key in _stack)if(_stack[key]===identifier){delete _stack[key];break}},BamSingletonInstance}(),window.BamListener=function(){var _counter=0,_eventHandleStorage={};function EventHandle(bamListener,_eventType){var _namespace=_eventType.split(\".\"),_eventType=_namespace[0],_namespace=_namespace[1]||\"_general\";this._fullname=_eventType+\".\"+_namespace,this._namespace=_namespace,this._type=_eventType,(this._listener=bamListener)._stack[this._fullname]?this._data=bamListener._stack[this._fullname]:this._data={fn:null,bound:!1},bamListener._stack[this._fullname]=this._data}function prepareHandle(bamListener,eventName){return _eventHandleStorage[eventName]||(_eventHandleStorage[eventName]=new EventHandle(bamListener,eventName))}function BamListener(domObject){if(!(this instanceof BamListener)){var id=domObject._bamUuid||(domObject._bamUuid=\"_\"+ ++_counter+Math.random().toString(36).substr(2,9)+Math.random().toString(36).substr(2,9));return BamSingletonInstance(BamListener,id).setDomObject(domObject)}this._domObject=null,this._stack={}}return EventHandle.prototype.isBound=function(){return this._data.bound},EventHandle.prototype.remove=function(){this._listener._domObject.removeEventListener(this._type,this._data.fn),this._data.bound=!1},EventHandle.prototype.add=function(){return!!this._data.fn&&(this._listener._domObject.addEventListener(this._type,this._data.fn),this._data.bound=!0)},EventHandle.prototype.getCallback=function(){return this._data.fn},EventHandle.prototype.setCallback=function(callback){this._data.fn=callback},BamListener.prototype.setDomObject=function(domObject){return this._domObject=domObject,this},BamListener.prototype.addOnce=function(eventHandle,callback){eventHandle=prepareHandle(this,eventHandle);return eventHandle.isBound()?(console.log(\"already bound\"),!1):(eventHandle.setCallback(callback),eventHandle.add())},BamListener.prototype.restore=function(eventHandle){eventHandle=prepareHandle(this,eventHandle);return!!eventHandle.getCallback()&&(!eventHandle.isBound()&&eventHandle.add())},BamListener.prototype.remove=function(eventHandle){eventHandle=prepareHandle(this,eventHandle);return!!eventHandle.isBound()&&(eventHandle.remove(),!0)},BamListener}();var BamCalender=function($){\"use strict\";var svgTriangle=\"<svg width='12' height='10' class='tko-select-arrow tko-fill-grey'><use xmlns:xlink='http:\/\/www.w3.org\/1999\/xlink' xlink:href='#triangle'><\/use><\/svg>\",svgCta='<svg width=\"9\" height=\"18\" fill=\"#999999\"><use xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" xlink:href=\"#arrow-cta\"><\/use><\/svg>',days=[\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\",\"So\"],months=[\"Januar\",\"Februar\",\"M\u00e4rz\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"],bamCalendarBodyClose=\"click.bamCalendarBodyClose touchend.bamCalendarBodyClose\";return function(HTMLElement,options){var $monthSelect,$yearSelect,$table,$field,$parentContainer,optionMinDate,optionMaxDate,disabledDays,optionInitDate,closeCallback,disabled,disabledLabels,i,max,init=!1,initBodyClick=!1;function showCalender(){!1===init&&(function(){$yearSelect=createElement(\"select\",\"select\").on(\"change\",function(){prepareUpdateTable()}),$monthSelect=createElement(\"select\",\"select\").on(\"change\",function(){prepareUpdateTable()}),$parentContainer=createElement(\"div\",\"dp\");var i,max,$yearSelectContainer=createElement(\"div\",\"dp-select\").append([svgTriangle,$yearSelect]),$monthSelectContainer=createElement(\"div\",\"dp-select\").append([svgTriangle,$monthSelect]),$ctaPreviousMonth=createElement(\"a\").append(createElement(svgCta,\"dp-arrow-left\")).on(\"click\",function(){prepareUpdateTable(-1)}),$ctaNextMonth=createElement(\"<a\/>\").append(createElement(svgCta,\"dp-arrow-right\")).on(\"click\",function(){prepareUpdateTable(1)}),abortButton=createElement('<a><svg width=\"12\" height=\"12\" fill=\"#999999\"><use xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" xlink:href=\"#close-x\"><\/use><\/svg>Abbrechen<\/a>').on(\"click\",closeCalender),okButton=createElement('<a><svg id=\"check\" viewBox=\"-429 241.9 19.3 15.1\" width=\"16\" height=\"16\"><path d=\"M-413 242l-9.1 9.1-4.2-4.2-3 3 7.2 7.2L-410 245l-3-3z\"><\/path><\/svg>\u00dcbernehmen<\/a><\/div>').on(\"click\",closeCalender);for(i=optionMinDate.getFullYear();i<=optionMaxDate.getFullYear();i++)$yearSelect.append(createElement(\"option\").val(i).text(i));for(i=0,max=months.length;i<max;i++)$monthSelect.append(createElement(\"option\").val(i).text(months[i]));$table=createElement(\"table\",\"dp-table\"),$parentContainer.append([createElement(\"div\",\"dp-head\").append([$ctaPreviousMonth,$yearSelectContainer,$monthSelectContainer,$ctaNextMonth]),$table,createElement(\"div\",\"dp-footer\").append([abortButton,okButton])]).insertAfter($field).on(\"click\",\"td\",function(){$(this).hasClass(\"disabled\")||($table.find(\"td.active\").removeClass(\"active\"),$(this).addClass(\"active\"),$field.val(new Date($(this).data(\"date\")).rsFormat(\"d.m.Y\")),closeCalender())})}(),init=!0),updateTable((function(date){if(date&&(tmp=date.match(\/^(\\d{1,2})\\.(\\d{1,2})\\.(\\d{2,4})$\/))){var tmp=new Date(tmp[3]+\"-\"+tmp[2]+\"-\"+tmp[1]);return\"Invalid Date\"===tmp.toString()?new Date:tmp}}($field.val())||optionInitDate).toString()),$parentContainer.show(),$(document).off(bamCalendarBodyClose).on(bamCalendarBodyClose,function(e){return!0===initBodyClick?$parentContainer.contains(e.target)||$($field[0]).contains(e.target)?void 0:void closeCalender():void(initBodyClick=!0)})}function closeCalender(){closeCallback&&closeCallback(),$(document).off(bamCalendarBodyClose),initBodyClick=!1,$parentContainer.hide()}function updateTable(startDateForStructure){(startDateForStructure=new Date(startDateForStructure)).setHours(1,0,0,0),optionMaxDate<startDateForStructure?startDateForStructure=new Date(optionMaxDate):startDateForStructure<optionMinDate&&(startDateForStructure=new Date(optionMinDate));var initializeYear=startDateForStructure.getFullYear(),initializeMonth=startDateForStructure.getMonth();$yearSelect.val(initializeYear),$monthSelect.val(initializeMonth);var j,date,dateTimeString=startDateForStructure.rsFormat(\"Y-m-d\"),addClass=\"\";startDateForStructure.setDate(0),startDateForStructure.setDate(startDateForStructure.getDate()-function(day){0===day&&(day=7);return--day}(startDateForStructure.getDay())),$table.children().remove();for(var formattedDate,isDisabled,titleText,row=$(\"<tr\/>\"),i=0,max=days.length;i<max;i++)row.append($(\"<th\/>\").text(days[i]));for($table.append(row),i=0;i<6;i++){for(row=$(\"<tr\/>\"),j=0;j<7;j++)date=startDateForStructure.getDate(),addClass=initializeMonth===(isDisabled=startDateForStructure.getMonth())?\"now\":isDisabled<initializeMonth?\"prev\":\"next\",formattedDate=startDateForStructure.rsFormat(\"Y-m-d\"),titleText=\"\",isDisabled=disabled&&-1!==disabled.indexOf(formattedDate)||disabledDays&&-1!==disabledDays.indexOf(j),disabled&&disabledLabels&&disabledLabels[formattedDate]&&(titleText=disabledLabels[formattedDate]),(isDisabled||ie11DateComparisonMilisecondsFixer(startDateForStructure.getTime())<ie11DateComparisonMilisecondsFixer(optionMinDate.getTime())||ie11DateComparisonMilisecondsFixer(startDateForStructure.getTime())>ie11DateComparisonMilisecondsFixer(optionMaxDate.getTime()))&&(addClass+=\" disabled\"),dateTimeString===startDateForStructure.rsFormat(\"Y-m-d\")&&(addClass+=\" active\"),row.append($(\"<td\/>\").attr(\"title\",titleText).data(\"date\",startDateForStructure.toString()).addClass(addClass).text(date)),startDateForStructure.setDate(date+1);$table.append(row)}}function ie11DateComparisonMilisecondsFixer(value){return 1e3*parseInt(value\/1e3)}function createElement(ele,addClass){return\"<\"!==ele.substr(0,1)&&(ele=\"<\"+ele+\"\/>\"),ele=$(ele),addClass&&ele.addClass(\"tko-\"+addClass),ele}function prepareUpdateTable(monthOffset){var now=new Date;now.setDate(1),now.setFullYear($yearSelect.val()),now.setMonth(parseInt($monthSelect.val())+(monthOffset||0)),updateTable(now.toString())}$field=HTMLElement,optionInitDate=options.initDate,optionMinDate=options.minDate,optionMaxDate=options.maxDate,disabledDays=options.disabledDays,closeCallback=options.closeCallback,options.disabled&&(!1===Array.isArray(options.disabled)?(disabled=[],disabledLabels={},$.each(options.disabled,function(k){if(Array.isArray(this))for(disabled=disabled.concat(this),i=0,max=this.length;i<max;i++)disabledLabels[this[i]]=k;else disabledLabels[this]=k,disabled.push(this)})):disabled=options.disabled),\"string\"==typeof optionInitDate?optionInitDate=new Date(optionInitDate):void 0===optionInitDate&&(optionInitDate=new Date),\"string\"==typeof optionMinDate?optionMinDate=new Date(optionMinDate):void 0===optionMinDate&&(optionMinDate=new Date),\"string\"==typeof optionMaxDate?optionMaxDate=new Date(optionMaxDate):void 0===optionMaxDate&&(optionMaxDate=new Date),options.opener&&options.opener.off(\"click.bamcalendar\").on(\"click.bamcalendar\",showCalender),$field.off(\"focus.bamcalendar\").on(\"focus.bamcalendar\",showCalender)}}(BamSelector);BamSelector.fn.bamCalender=function(options){new BamCalender(this,options||{})},Date.rsCreate=function(date){var match;return date&&(match=date.match(\/^(\\d{1,2})\\.(\\d{1,2})\\.(\\d{2,4})$\/))?new Date(match[3]+\"-\"+match[2]+\"-\"+match[1]):new Date},Date.prototype.rsFormat=function(){var map={Y:\"getFullYear\",y:\"getYear\",m:\"getMonth\",n:\"getMonth\",d:\"getDate\"};return function(formatString){for(var fn,currentChar,val,text=\"\",i=0,max=(formatString=formatString.split(\"\")).length;i<max;i++)if(currentChar=formatString[i],fn=map[currentChar]){if(val=this[fn](),isNaN(val))return null;switch(currentChar){case\"n\":val++;break;case\"m\":val=++val<10?\"0\"+val.toString():val;break;case\"d\":val=val<10?\"0\"+val.toString():val}text+=val.toString()}else text+=currentChar;return text}}();function BamSententialLogicParser(){\"use strict\";var __inputData,debug=\"\";function __compare(data,key,compareSetup){if(-1===Object.keys(data).indexOf(key))return!1;var compareValue,i,operator,result,debugTmp,valueBetweenMax=null,sourceValue=data[key],isBetween=!1,isLength=!1,isMustNot=!1,compareSetupPrepared=[];if(!Array.isArray(compareSetup))return debug+=key+\" = \"+(compareValue=compareSetup),compareSetup===sourceValue;for(compareSetup=Array.from(compareSetup),i=0;i<compareSetup.length;i++)switch(compareSetup[i]){case\"between\":isBetween=!0;break;case\"not\":isMustNot=!0;break;case\"length\":isLength=!0;break;default:compareSetupPrepared.push(compareSetup[i])}if(compareSetup=compareSetupPrepared,isBetween&&(valueBetweenMax=compareSetup.pop()),compareValue=compareSetup.pop(),operator=isBetween?\"between\":0<compareSetup.length?compareSetup.shift():\"=\",isLength&&(sourceValue=sourceValue.toString().length),0!==compareSetup.length)throw new Error(\"invalid syntax. too many operators: \"+JSON.stringify(compareSetup));switch(operator){case\"between\":debugTmp=key+\" >= \"+compareValue+\" and \"+key+\" <= \"+valueBetweenMax,result=compareValue<=sourceValue&&sourceValue<=valueBetweenMax;break;case\">=\":debugTmp=key+\" >= \"+compareValue,result=compareValue<=sourceValue;break;case\">\":debugTmp=key+\" > \"+compareValue,result=compareValue<sourceValue;break;case\"<=\":debugTmp=key+\" <= \"+compareValue,result=sourceValue<=compareValue;break;case\"<\":debugTmp=key+\" < \"+compareValue,result=sourceValue<compareValue;break;case\"=\":debugTmp=key+\" = \"+compareValue,result=sourceValue===compareValue;break;case\"!=\":debugTmp=key+\" != \"+compareValue,result=sourceValue!==compareValue;break;default:throw new Error('unsopported operator \"'+operator+'\"')}return isMustNot&&(debugTmp=\"!(\"+debugTmp+\")\",result=!result),debug+=\" \"+debugTmp,result}this.getDebug=function(){return debug},this.setInputData=function(inputData){return __inputData=inputData,this},this.getResultForRule=function(ruleSet){return debug=\"\",function __parse(data,ruleSet){var count,operator,isStringRule0,isStringRule1,i,max,results=[];debug+=\"(\";if(!Array.isArray(ruleSet))throw new Error(\"Syntax Error\");for(i=0,max=ruleSet.length;i<max;i++){if(operator=ruleSet[i],count=operator.length,isStringRule0=\"string\"==typeof operator[0],isStringRule1=\"string\"==typeof operator[1],0===count)throw new Error(\"Invalid Syntax. Empty Ruleset\");if(2===count&&!isStringRule0&&isStringRule1)results.push(__parse(data,operator[0]));else{if(!1==isStringRule0){results.push(__parse(data,operator));continue}results.push(__compare(data,operator[0],operator[1]))}if(2!==count||!isStringRule0){if(count<2&&3<count)throw new Error;if(3===count&&i===max-1)throw new Error(\"Unexpected operator at the ResultsetEnd (\"+operator.join(\",\")+\")\");if(operator=operator.pop(),-1===[\"and\",\"or\"].indexOf(operator))throw new Error('invalid operator given (\"'+operator+'\")');if(debug+=\" \"+operator+\" \",\"and\"!==operator){if(-1===results.indexOf(!1))return!0;results=[]}}}debug+=\")\";return-1===results.indexOf(!1)}(__inputData,ruleSet)}}var BamTip=function(window,document){function _checkIsCoordinatesInElement(coordinates,y2){var domRect,x2=0,y1=0;(y2=(y2=y2 instanceof BamTipTrigger||y2 instanceof BamTipContentContainer?y2.getElement():y2)[0]?y2[0]:y2).getClientRects().length&&(domRect=y2.getBoundingClientRect(),x1=y2.ownerDocument.defaultView,y1=domRect.top+x1.pageYOffset,x2=domRect.left+x1.pageXOffset);var x1=x2,x2=x1+y2.offsetWidth,y1=y1,y2=y1+y2.offsetHeight;return coordinates.x>=x1&&coordinates.x<=x2&&coordinates.y>=y1&&coordinates.y<=y2}window.BamTipBuildCallback={};var elementStorageManager=BamElementStorage;function BamTipTrigger(element){this._element=element,this._isClickTrigger=void 0!==element.dataset.bamtipTriggerClick,this._isMouseOverTrigger=void 0!==element.dataset.bamtipTrigger,this._last=null,this._mergedOptions=null}function PositionData(best,left,top,whiteSpace,nosePosition){return{nosePosition:function(){return nosePosition},top:function(){return top},left:function(){return left},best:function(){return best},inWhiteSpace:function(coordinates){return whiteSpace.cursorIn(coordinates.x,coordinates.y)}}}function PositioningTip(options){return function(flipBehavior,content){flipBehavior instanceof BamTipTrigger&&(flipBehavior=flipBehavior.getElement());var i,max,check,possibleCheck,_nose_=new ContentArrow(content),PosBottomData=document.documentElement,docLeft=window.pageXOffset,docTop=window.pageYOffset,PosTopData=PosBottomData.offsetWidth,docRight=docLeft+PosTopData,docBottom=window.innerHeight+docTop,triggerLeft=(PosBottomData=flipBehavior.getBoundingClientRect()).left+docLeft,triggerWidth=flipBehavior.offsetWidth,triggerRight=triggerLeft+triggerWidth,triggerTop=PosBottomData.top+docTop,triggerHeight=flipBehavior.offsetHeight,triggerBottom=triggerTop+triggerHeight,triggerCenter=triggerWidth\/2+triggerLeft,contentHeight=content.getElement().offsetHeight,contentWidth=content.getElement().offsetWidth,WhiteSpace=function(options){return function(minX,maxX,minY,maxY){return{cursorIn:function(x,y){return!!options.interactive&&(minX<=x&&x<=maxX&&minY<=y&&y<=maxY)}}}}(options),PosTopData=function(){var best,outerTop=triggerTop-10-contentHeight,outerLeft=triggerCenter-contentWidth\/2,outerRight=outerLeft+contentWidth;if(!1==docTop<=outerTop)return!1;outerLeft<docLeft?outerLeft=docLeft:docRight<outerRight?outerLeft=docRight-contentWidth:best=!0;var leftPos=outerLeft<triggerLeft?outerLeft:triggerLeft;return new PositionData(best,outerLeft,outerTop,new WhiteSpace(outerLeft<triggerLeft?outerLeft:triggerLeft,triggerRight<outerRight?outerRight:triggerRight,outerTop+contentHeight,triggerBottom),new function(){this.left=(triggerLeft-leftPos+(triggerWidth\/2-7)).toString()+\"px\",this.top=contentHeight.toString()+\"px\",this.bottom=\"-5px\",this.top=\"auto\",this.right=\"auto\",this.transform=\"rotate(45deg)\"})}(),PosBottomData=function(){var best,outerBottom=triggerBottom+10+contentHeight,outerLeft=triggerCenter-contentWidth\/2,outerRight=outerLeft+contentWidth;if(!1==outerBottom<=docBottom)return!1;outerLeft<docLeft?outerLeft=docLeft:docRight<outerRight?outerLeft=docRight-contentWidth:best=!0;var leftPos=outerLeft<triggerLeft?outerLeft:triggerLeft;return new PositionData(best,outerLeft,triggerBottom+10,new WhiteSpace(outerLeft<triggerLeft?outerLeft:triggerLeft,triggerRight<outerRight?outerRight:triggerRight,triggerTop,outerBottom-contentHeight),new function(){this.left=(triggerLeft-leftPos+(triggerWidth\/2-7)).toString()+\"px\",this.top=contentHeight.toString()+\"px\",this.bottom=\"auto\",this.right=\"auto\",this.top=\"-5px\",this.transform=\"rotate(225deg)\"})}(),flipBehavior=function(){var best,outerLeft=triggerLeft-10-contentWidth,outerTop=triggerTop+(triggerHeight-contentHeight)\/2,outerBottom=outerTop+contentHeight+10;if(!1==docLeft<=outerLeft)return!1;outerTop<docTop?outerTop=docTop+10:docBottom<outerBottom?outerTop=docBottom-10-contentHeight:best=!0;var topPos=outerTop<triggerTop?outerTop:triggerTop;return new PositionData(best,outerLeft,outerTop,new WhiteSpace(outerLeft+contentWidth,triggerLeft,outerTop<triggerTop?outerTop:triggerTop,triggerBottom<outerBottom?outerBottom:triggerBottom),new function(){this.right=\"-5px\",this.left=\"auto\",this.top=(triggerTop-topPos+(triggerHeight\/2-8)).toString()+\"px\",this.bottom=\"auto\",this.transform=\"rotate(315deg)\"})}(),checkStack={top:PosTopData,right:function(){var best,outerLeft=triggerRight+10,outerTop=triggerTop-(contentHeight-triggerHeight)\/2,outerBottom=outerTop+10+contentHeight;if(!1==triggerRight+10+contentWidth<=docRight)return!1;outerTop<docTop?outerTop=docTop:docBottom<outerBottom?outerTop=docBottom-10-contentHeight:best=!0;var topPos=outerTop<triggerTop?outerTop:triggerTop;return new PositionData(best,outerLeft,outerTop,new WhiteSpace(triggerLeft,outerLeft,outerTop<triggerTop?outerTop:triggerTop,triggerBottom<outerBottom?outerBottom:triggerBottom),new function(){this.left=\"-5px\",this.right=0,this.top=(triggerTop-topPos+(triggerHeight\/2-8)).toString()+\"px\",this.bottom=\"auto\",this.transform=\"rotate(135deg)\"})}(),bottom:PosBottomData,left:flipBehavior},posStack=Object.keys(checkStack),flipBehavior=options.flipBehavior,preferBestPlacement=options.preferBestPlacement;for(\"counterClockwise\"===flipBehavior&&(checkStack=checkStack.reverse()),max=(posStack=options.placement!==posStack[i=0]?posStack.splice(posStack.indexOf(options.placement)).concat(posStack):posStack).length;i<max;i++)if(check=checkStack[posStack[i]],!possibleCheck&&check&&(possibleCheck=check),check&&(!preferBestPlacement||check.best())){possibleCheck=check;break}if(possibleCheck)return function(content,contentArrow,check){content.getElement().style.top=check.top().toString()+\"px\",content.getElement().style.left=check.left().toString()+\"px\",content.getTrigger()&&content.getTrigger().getOptions().arrow?contentArrow.setPosition(check.nosePosition()):contentArrow.hide()}(content,_nose_,possibleCheck),possibleCheck}}BamTipTrigger.getLast=function(){return BamTipTrigger.getLast._trigger},BamTipTrigger.get=function(element){var storage=elementStorageManager(element),trigger=storage.get(\"trigger\");if(!trigger)for(;;){if(!element)return;if(element.dataset&&(element.dataset.bamtipTrigger||element.dataset.bamtipTriggerClick)){trigger=new BamTipTrigger(element),storage.set(\"trigger\",trigger),trigger.setLast(BamTipTrigger.get._lastTrigger);break}element=element.parentElement}return trigger&&(BamTipTrigger.get._lastTriggerReal&&BamTipTrigger.get.lastTriggerReal!==trigger&&(trigger._lastReal=BamTipTrigger.get.lastTriggerReal),BamTipTrigger.get.lastTriggerReal=trigger,BamTipTrigger.get._lastTrigger&&BamTipTrigger.get._lastTrigger!==trigger&&(BamTipTrigger.getLast._trigger=BamTipTrigger.get._lastTrigger,trigger.setLast(BamTipTrigger.get._lastTrigger)),BamTipTrigger.get._lastTrigger=trigger),trigger},BamTipTrigger.prototype.setLast=function(trigger){return this._last=trigger,this},BamTipTrigger.prototype.getOptions=function(){if(!this._mergedOptions){var mergedOptions={},globalOptions=BamTipContentContainer.options(),_element=this.getElement(),triggerOptions=_element.dataset.bamtipConfig||null;try{triggerOptions=JSON.parse(triggerOptions)}catch(Error){console.error(\"Invalid trigger configuration!\"),console.log(_element),triggerOptions=null}triggerOptions?[].forEach.call(Object.keys(globalOptions),function(k){triggerOptions.hasOwnProperty(k)?mergedOptions[k]=triggerOptions[k]:mergedOptions[k]=globalOptions[k]}):mergedOptions=globalOptions,this._mergedOptions=mergedOptions}return this._mergedOptions},BamTipTrigger.prototype.getElement=function(){return this._element},BamTipTrigger._buildLayerHTMLPromise=null,BamTipTrigger.prototype.startDelayed=function(){this._last&&this._last.reset(),this._startInProgress&&clearTimeout(this._startInProgress);var options=this.getOptions(),targetElement=this.getTarget(),_trigger=this;this._startInProgress=setTimeout(function(){var buildCb;null!==targetElement&&(BamTipContentContainer.get().configureOpener(options,targetElement),BamTipContentContainer.get().setTrigger(_trigger),\"helptext\"===options.mode?(targetElement.dataset.bamHelptext=!0,new ContentArrow(BamTipContentContainer.get()).setPosition({top:_trigger.getElement().offsetTop.toString()+\"px\"}),_trigger.getElement().classList.add(\"active\")):(BamTipContentContainer.get().html(targetElement.innerHTML),buildCb=_trigger.getElement().dataset.bamtipBuildcallback,BamTipTrigger._buildLayerHTMLPromise&&BamTipTrigger._buildLayerHTMLPromise.reset(),buildCb&&((BamTipTrigger._buildLayerHTMLPromise=new BamPromise).done(function(callback){\"function\"==typeof callback&&callback()}),BamTipBuildCallback[buildCb](BamTipTrigger._buildLayerHTMLPromise,BamTipContentContainer.get()))),BamTipContentContainer.get().show(),BamTipContentContainer.get().doPositioning())},this.getOptions().openDelay)},BamTipTrigger.prototype.reset=function(){this._startInProgress&&(clearTimeout(this._startInProgress),this._startInProgress=null)},BamTipTrigger.prototype.getTarget=function(){var targetSelector=this.getElement(),target=targetSelector.dataset.bamtipTrigger||targetSelector.dataset.bamtipTriggerClick,targetSelector=\"[data-bamtip-content\";return\"\"!==target&&(targetSelector+='=\"'+target+'\"'),document.querySelector(targetSelector+=\"]\")},BamTipTrigger.prototype.isClick=function(){return this._isClickTrigger},BamTipTrigger.prototype.isMouseOver=function(){return this._isMouseOverTrigger};var Opener=(OpenerAbstract.prototype.stop=function(){if(this._interval)return clearInterval(this._interval),this._interval=null,this._promise=null,this},OpenerAbstract.prototype.getPromise=function(){return this._promise},OpenerAbstract.prototype.inProgress=function(){return null!==this._interval},(OpenerFadeIn.prototype=OpenerAbstract.prototype).constructor=OpenerFadeIn,(OpenerFadeOut.prototype=OpenerAbstract.prototype).constructor=OpenerFadeOut,function(elemet){this.fadeOut=new OpenerFadeOut(elemet),this.fadeIn=new OpenerFadeIn(elemet),this.element=elemet});function OpenerFadeOut(element){this._interval=null,this.start=function(duration){this.inProgress()&&this.stop();var promise=new BamPromise,self=this,_opStepInt=20\/duration,opacityCurrentValue=element.style.opacity;return duration?(\"\"!==opacityCurrentValue?opacityCurrentValue=parseFloat(opacityCurrentValue):(opacityCurrentValue=0,element.style.display.opacity=0),opacityCurrentValue<=0?(element.style.display=\"none\",promise.commit(),promise):(this._interval=setInterval(function(){opacityCurrentValue-=_opStepInt,(element.style.opacity=opacityCurrentValue)<0&&(self.stop(),element.style.display=\"none\",promise.commit())},20),this._promise=promise)):(element.style.opacity=0,element.style.display=\"none\",promise.commit(),promise)}}function OpenerFadeIn(element){this._interval=null,this._promise=null,this.start=function(duration){this.inProgress()&&this.stop();var promise=new BamPromise,self=this,_opStepInt=20\/duration;if(!duration)return element.style.opacity=1,element.style.display=\"block\",promise;var opacityCurrentValue=\"\"!==(opacityCurrentValue=element.style.opacity)?parseFloat(opacityCurrentValue):0;return element.style.opacity=opacityCurrentValue,element.style.display=\"block\",1<=opacityCurrentValue?(promise.commit(),promise):(this._interval=setInterval(function(){opacityCurrentValue+=_opStepInt,1<=(element.style.opacity=opacityCurrentValue)&&(self.stop(),promise.commit())},20),this._promise=promise)}}function OpenerAbstract(element){this._interval=null}function LastEvent(event){this._event=event,this._isClose=!1,this._isExplicitClose=!1,this._isTrigger=!1,this._triggerElement=null}function BamTipContentContainer(){var contentContainer=document.createElement(\"div\");contentContainer.setAttribute(\"data-bamtip-content\",\"\"),contentContainer.style.display=\"none\",contentContainer.style.opacity=0,document.querySelector(\"body\").appendChild(contentContainer),this._containerHTMLElement=contentContainer}function ContentArrow(content){this._element=content.getElement().querySelector(\".tko-tt-nose\")}function _bindEvents(){var TouchEvent=function(){var _touchEventInProgress,__client={endClientX:0,endClientY:0},clientX=0,clientY=0,TouchEvent={inProgress:function(){return _touchEventInProgress},move:function(e){__client.endClientX=e.touches[0].clientX,__client.endClientY=e.touches[0].clientY},start:function(e){_touchEventInProgress=!0,clientX=e.touches[0].clientX,clientY=e.touches[0].clientY,__client.endClientX=e.touches[0].clientX,__client.endClientY=e.touches[0].clientY},end:function(e){_touchEventInProgress=!1},isTouch:function(e){return!_touchEventInProgress&&!(clientX>__client.endClientX+15||clientX<__client.endClientX-15||clientY>__client.endClientY+15||clientY<__client.endClientY-15)}};return TouchEvent}();function _doClick(e){var event=LastEvent.detect(e);if(event.isClose())BamTipContentContainer.get().close(!1),e.preventDefault();else if(event.isTrigger()){if(e.stopPropagation(),e.preventDefault(),BamTipContentContainer.get().isVisible()){if(BamTipContentContainer.get().getTrigger()===event.getTrigger())return\"default\"===BamTipContentContainer.get().getTrigger().getOptions().mode&&BamTipContentContainer.get().close(),void e.preventDefault();BamTipContentContainer.get().close(!0)}event.getTrigger().startDelayed()}else BamTipContentContainer.get().isVisible()&&!BamTipContentContainer.get().getElement().contains(e.target||e.srcElement)&&\"default\"===BamTipContentContainer.get().getTrigger().getOptions().mode&&BamTipContentContainer.get().close()}window.addEventListener(\"touchstart\",TouchEvent.start),window.addEventListener(\"touchmove\",TouchEvent.move),window.addEventListener(\"touchend\",function(e){TouchEvent.end(e),TouchEvent.isTouch(e)&&_doClick(e)}),window.addEventListener(\"mouseover\",function(_trigger){var event;TouchEvent.inProgress()||((event=LastEvent.detect(_trigger)).isTrigger()?!(_trigger=event.getTrigger()).isClick()&&_trigger.isMouseOver()&&(LastEvent.last(event),BamTipContentContainer.get().isVisible()&&BamTipContentContainer.get().getTrigger()&&BamTipContentContainer.get().getTrigger()===_trigger||_trigger.startDelayed()):BamTipTrigger.get.lastTriggerReal&&BamTipTrigger.get.lastTriggerReal.reset())}),window.addEventListener(\"mousemove\",function(opener){if(!TouchEvent.inProgress())if(BamTipContentContainer.get().isHidden())BamTipTrigger.getLast()&&BamTipTrigger.getLast().reset();else if(!BamTipContentContainer.get().getTrigger().isClick()){var last={x:opener.clientX+window.pageXOffset,y:opener.clientY+window.pageYOffset},opener=BamTipContentContainer.get().getOpener();if(BamTipContentContainer.get().getPosition()&&BamTipContentContainer.get().getPosition().inWhiteSpace(last))opener.fadeOut.inProgress()&&(opener.fadeOut.stop(),opener.fadeIn.start(0));else if(!0!==_checkIsCoordinatesInElement(last,BamTipContentContainer.get().getTrigger())){if(!0===_checkIsCoordinatesInElement(last,BamTipContentContainer.get())){last=LastEvent.last();return last&&last.isExplicitClose()?void 0:void(opener.fadeOut.inProgress()&&(opener.fadeOut.stop(),opener.fadeIn.start(0)))}opener.fadeOut.inProgress()||BamTipContentContainer.get().close(!1)}else opener.fadeOut.inProgress()&&(opener.fadeOut.stop(),opener.fadeIn.start(0))}}),window.addEventListener(\"click\",function(e){TouchEvent.inProgress()||_doClick(e)})}LastEvent.prototype.isTrigger=function(){return this._isTrigger},LastEvent.prototype.getTrigger=function(){return this._triggerElement?BamTipTrigger.get(this._triggerElement):null},LastEvent.prototype.isClose=function(){return this._isClose},LastEvent.prototype.isExplicitClose=function(){return this._isExplicitClose},LastEvent.last=function(event){if(!arguments.length)return LastEvent.last._event;LastEvent.last._event=event},LastEvent.detect=function(triggerElement){var _event=new LastEvent(triggerElement),target=_event._event.target||_event._event.srcElement;return _event._isTrigger=target.matches(\"[data-bamtip-trigger-click]\")||target.matches(\"[data-bamtip-trigger]\"),_event._isTrigger&&(_event._triggerElement=target),_event._isTrigger||(\"tooltip-close\"===target.dataset.bamEventClick?(_event._isClose=!0,_event._isExplicitClose=!0):BamTipContentContainer.get().getElement().contains(target)||(!(triggerElement=BamTipContentContainer.get().getTrigger())||((triggerElement=triggerElement.getElement()).matches(\"[data-bamtip-trigger-click]\")||triggerElement.matches(\"[data-bamtip-trigger]\"))&&triggerElement.contains(target)&&(_event._isClose=!0))),_event._isExplicitClose&&LastEvent.last(_event),_event},BamTipContentContainer.prototype.getElement=function(){return this.getOpener().element},BamTipContentContainer.prototype.configureOpener=function(options,targetElement){var opener=this.getOpener();\"helptext\"===options.mode?opener.element!==targetElement&&((opener=elementStorageManager(targetElement).get(\"opener\"))||(opener=new Opener(targetElement),elementStorageManager(this._containerHTMLElement).set(\"opener\",opener))):opener.element!==this._containerHTMLElement&&elementStorageManager(this._containerHTMLElement).set(\"opener\",elementStorageManager(this._containerHTMLElement).get(\"opener_backup\"))},BamTipContentContainer.prototype.getTrigger=function(){return elementStorageManager(this._containerHTMLElement).get(\"trigger\")},BamTipContentContainer.prototype.setTrigger=function(trigger){return elementStorageManager(this._containerHTMLElement).set(\"trigger\",trigger),this},BamTipContentContainer.prototype.getPosition=function(){return elementStorageManager(this._containerHTMLElement).get(\"Position\")},BamTipContentContainer.prototype.setPosition=function(position){return elementStorageManager(this._containerHTMLElement).set(\"Position\",position),this},BamTipContentContainer.prototype.isVisible=function(){return\"none\"!==this.getOpener().element.style.display},BamTipContentContainer.prototype.isHidden=function(){return!this.isVisible()},BamTipContentContainer.prototype.getOptions=function(){var tmp=this.getTrigger();return tmp?tmp.getOptions():BamTipContentContainer.options()||{}},BamTipContentContainer.prototype.html=function(html){return this._containerHTMLElement.innerHTML=html,this},BamTipContentContainer.prototype.getOpener=function(){var _opener=elementStorageManager(this._containerHTMLElement).get(\"opener\");return _opener||(_opener=new Opener(this._containerHTMLElement),elementStorageManager(this._containerHTMLElement).set(\"opener\",_opener),elementStorageManager(this._containerHTMLElement).set(\"opener_backup\",_opener)),_opener},BamTipContentContainer.prototype.doPositioning=function(){var positioningTip=this.getTrigger().getOptions();\"default\"===positioningTip.mode&&(positioningTip=new PositioningTip(positioningTip),this.setPosition(positioningTip(this.getTrigger(),this)))},BamTipContentContainer.prototype.show=function(){var duration=0,_options=this.getOptions(),_opener=this.getOpener();return _opener.fadeOut.inProgress()&&_opener.fadeOut.stop(),_opener.fadeIn.inProgress()?_opener.fadeIn.getPromise():(\"fade\"===_options.animation&&(duration=_options.animationDurationOpen),_opener.fadeIn.start(duration))},BamTipContentContainer.prototype.close=function(immediately){var duration=0,_opener=this.getOpener(),_options=this.getOptions();return _options&&\"helptext\"===_options.mode&&this.getTrigger()._element.classList.remove(\"active\"),_opener.fadeIn.inProgress()&&_opener.fadeIn.stop(),immediately||\"fade\"!==_options.animation||(duration=_options.animationDurationClose),_opener.fadeOut.start(duration)},BamTipContentContainer.get=function(){return BamTipContentContainer.get._instance||(BamTipContentContainer.get._instance=new BamTipContentContainer),BamTipContentContainer.get._instance},BamTipContentContainer.options=function(options){var _opt;return void 0!==options&&((_opt={interactive:options.interactive,interactiveBorder:options.interactiveBorder||0,flipBehavior:options.flipBehavior||\"clockwise\",preferBestPlacement:!!options.preferBestPlacement,placement:options.placement||\"top\",animation:options.animation||\"show\",arrow:void 0===options.arrow||!!options.arrow,mode:options.mode||\"default\",animationDuration:void 0===options.animationDuration?50:options.animationDuration,openDelay:void 0===options.openDelay?90:parseInt(options.openDelay)}).animationDurationOpen=void 0===options.animationDurationOpen?_opt.animationDuration:parseInt(options.animationDurationOpen),_opt.animationDurationClose=void 0===options.animationDurationClose?_opt.animationDuration:parseInt(options.animationDurationClose),BamTipContentContainer.options._globalOptions=_opt),BamTipContentContainer.options._globalOptions},ContentArrow.prototype.setPosition=function(nosePos){var self=this;[].forEach.call(Object.keys(nosePos),function(t){self._element.style[t]=nosePos[t]})},ContentArrow.prototype.hide=function(){this._element.style.display=\"none\"};var BamTip={initialize:function(globalOptions){BamTip.initialize=new Function,_bindEvents(),BamTipContentContainer.options(globalOptions)},__destruct:function(){BamTipContentContainer.get().close(!0)}};return BamTip}(window,document);\"use strict\";function BamElement(selector,parentElement){selector='[data-bam-element-identifier=\"'+selector+'\"]';return parentElement instanceof BamSelector?parentElement.find(selector):BamSelector(selector)}function BamTemplate(tplName){if(!1==this instanceof BamTemplate)return new BamTemplate(tplName);this._parsedContent=null,this._parsedInstance=null,this._templateName=tplName}BamTemplate.prototype.getTemplateHtml=function(){return void 0===BamTemplate._loadedTemplates[this._templateName]&&(BamTemplate._loadedTemplates[this._templateName]=BamSelector('[data-bam-tpl=\"'+this._templateName+'\"]').get(0).innerHTML),BamTemplate._loadedTemplates[this._templateName]},BamTemplate._loadedTemplates={},BamTemplate.prototype.getParsedContent=function(val){return this._parsedContent||this.fill(val||{}),this._parsedContent},BamTemplate.prototype.getParsedInstance=function(val){return this._parsedContent||this.fill(val||{}),this._parsedInstance},BamTemplate.prototype.getRawContent=function(){return this.getTemplateHtml()},BamTemplate.prototype.fill=function(key,value){\"object\"!=typeof key&&((parentContainer={})[key]=value,key=parentContainer);var parentContainer=function fillRecursive(templateHtml,data,keyprefix){return\"\"!==keyprefix&&(keyprefix+=\"\/\"),BamSelector.each(data,function(key,value){var regex,tmpValue;if(null!==(value=void 0!==value&&value)&&\"object\"==typeof value&&0==value instanceof String){try{tmpValue=Array.isArray(value)?0<value.length:0<Object.keys(value).length}catch(e){tmpValue=\"\"}return regex=new RegExp(\"{{\"+keyprefix+key+\"}}\",\"g\"),void(templateHtml=fillRecursive(templateHtml=templateHtml.replace(regex,tmpValue),value,keyprefix+key))}regex=new RegExp(\"{{\"+keyprefix+key+\"}}\",\"g\"),templateHtml=templateHtml.replace(regex,value)}),templateHtml}(parentContainer=this.getTemplateHtml(),key,\"\"),parsedElement=BamSelector(parentContainer),parentContainer=BamSelector(\"<div\/>\");return parentContainer.append(parsedElement),parentContainer.find('[data-bam-tpl-if-not=\"true\"],[data-bam-tpl-if^=\"{{\"],[data-bam-tpl-if=\"false\"]').remove(),BamSelector.each(key,function(k,v){parsedElement.find('[data-bam-tpl-var=\"'+k+'\"]').html(v)}),this._parsedInstance=parentContainer.children(),this._parsedContent=parentContainer.get(0).innerHTML,this};var BamView={fill:function(key,value){var tmp;\"object\"!=typeof key&&((tmp={})[key]=value,key=tmp),BamSelector.each(key,function(key,value){BamSelector('[data-bam-tpl-var=\"'+key+'\"]').html(value)})},goTo:function(path){var url=(new TkoRs.URL).load();url.getQuery().removeAll(),url.setPath(path),window.location.href=url.toString()}};window.addEventListener(\"pageshow\",function(e){BamService.get(\"ButtonSpinner\").stopAll()});!function(window){\"use strict\";var windowLocation=window.location;function rsEach(input,callback){var continueMap=!0,keys=Object.keys(input),lastKey=keys[keys.length-1];keys.map(function(key){\"length\"!==key?!1!==continueMap&&(continueMap=callback(key,input[key],{isLast:lastKey===key})):console.error(\"key 'length' match in rsEach\")})}function rsEmpty(input){var typeofInput=typeof input;if(null===input||\"undefined\"==typeofInput)return!0;if(\"string\"!=typeofInput)return input<=0;input=input.split(\"\");for(var emptyChars=[0,\"0\",\" \",\"\"],i=0;i<input.length;i++)if(-1===emptyChars.indexOf(input[i]))return!1;return!0}window.rsEach=rsEach,Array.prototype.rsDiff||Object.defineProperty(Array.prototype,\"rsDiff\",{enumerable:!1,value:function(b){return this.filter(function(i){return b.indexOf(i)<0})}}),Array.prototype.rsFilterEmpty||Object.defineProperty(Array.prototype,\"rsFilterEmpty\",{enumerable:!1,value:function(){return this.filter(function(n){return\"\"!=n})}}),Array.prototype.rsFilterDuplicate||Object.defineProperty(Array.prototype,\"rsFilterDuplicate\",{enumerable:!1,value:function(){return this.filter(function(val,index,self){return self.indexOf(val)===index})}}),String.prototype.startsWith||Object.defineProperty(String.prototype,\"startsWith\",{enumerable:!1,configurable:!1,writable:!1,value:function(searchString,position){return this.indexOf(searchString,position=position||0)===position}}),String.prototype.ucFirst=function(){return this.charAt(0).toUpperCase()+this.slice(1)},String.prototype.htmlspecialchars||Object.defineProperty(String.prototype,\"htmlspecialchars\",{enumerable:!1,configurable:!1,writable:!1,value:function(){var specialChars={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#039;\"};return this.replace(\/[&<>\"']\/g,function(match){return specialChars[match]})}}),window.rsEmpty=rsEmpty,window.Rs=new function(){function Interval(pName,pCode,pDelay,pTtl){var interval,timeout,name=pName,delay=pDelay,code=pCode,ttl=pTtl;this.getName=function(){return name},this.setTtl=function(pTtl){return ttl=pTtl,this},this.getTtl=function(){return ttl},this.setCode=function(pCode){return code=pCode,this},this.getCode=function(){return code},this.start=function(){var that;return this.isRunning()&&this.stop(),interval=setInterval(code,delay,this),ttl&&(that=this,timeout=setTimeout(function(){that.stop()},ttl)),this},this.stop=function(){return interval=clearInterval(interval),timeout=clearTimeout(timeout),this},this.isRunning=function(){return 0<interval},this.setTimeout=function(pTimeout){return delay=pTimeout,this.isRunning()&&this.restart(),this},this.restart=function(){return this.stop(),this.start(),this}}this.Interval=Interval,this.IntervalHandler=new function(){var intervalViewStack={};return{exists:function(name){return void 0!==intervalViewStack[name]},get:function(name){return intervalViewStack[name]},add:function(name,callback,intervalTime,ttl){this.exists(name)||(intervalViewStack[name]=new Interval(name,callback,intervalTime,ttl).start())},drop:function(){Object.keys(intervalViewStack).map(function(k){intervalViewStack[k].stop()}),intervalViewStack={}}}};var IntervalCallback=new function(){var functionStack=[],functionStackLength=0,register=function(){new Interval(\"rs.event.handler\",function(){for(var i=0;i<functionStackLength;i++)functionStack[i]()},100).start();register=!1};return function(fn){return register&&register(),functionStack.push(fn),functionStackLength++,this}};function Observer(code){var currentValue,currentValueCompare,originValue=code(),changeFn=[],changeFnLength=0,originValueCompare=JSON.stringify(originValue),parent=this,stopped=!1;this.change=function(fn){return\"function\"==typeof fn&&(changeFn.push(fn),changeFnLength=changeFn.length),this},this.setStop=function(){return stopped=!0,this},new IntervalCallback(function(){if(currentValue=code(),currentValueCompare=JSON.stringify(currentValue),!1===stopped&&currentValueCompare!==originValueCompare)for(var i=0;i<changeFnLength;i++)changeFn[i](parent,{newValue:currentValue,oldValue:originValue});stopped=!1,originValueCompare=currentValueCompare,originValue=currentValue})}Observer.register=function(name,code){ObserverContainer.exists(name)||ObserverContainer.register(name,new Observer(code))},Observer.change=function(name,code){ObserverContainer.functionExists(name,code)||ObserverContainer.change(name,code)},this.Observer=Observer;var ObserverContainer=new function(){var stack={},fnStack={};return{register:function(name,Observer){stack[name]=Observer},change:function(name,fn){stack[name].change(fn),fnStack[name]=fnStack[name]||{},fnStack[name][fn.toString()]=!0},exists:function(name){return void 0!==stack[name]},functionExists:function(name,code){return fnStack[name]&&fnStack[name][code.toString()]}}};this.ObserverContainer=ObserverContainer;var LocationPartialHash=new function(){var hashArray=getHashArray();function getHashArray(){var results={};return rsEach(window.location.hash.split(\"#\"),function(key,value){return 1===(value=value.split(\"=\")).length?\"\"===value[0]?void 0:void(results[value[0]]=!0):void(results[value[0]]=value[1])}),results}!1===ObserverContainer.exists(\"hash\")&&Observer.register(\"hash\",function(){return windowLocation.hash}),ObserverContainer.change(\"hash\",function(){hashArray=getHashArray()});var hashTriggerElement={};return{get:function(hash){return hashArray[hash]},refresh:function(){return hashArray=getHashArray(),this},exists:function(getHash){var tmp=getHash.split(\"=\");getHash=tmp[0];getHash=this.get(getHash);return 1===tmp.length?void 0!==getHash:getHash===tmp[1]},toString:function(){var returnResult=[];return rsEach(hashArray,function(tmp,v){!0!==v&&(tmp+=\"=\"+v),returnResult.push(tmp)}),\"#\"+returnResult.join(\"#\")},remove:function(hash,autoPush){return hash=hash.split(\"=\")[0],autoPush=0===arguments.length||!!autoPush,delete hashArray[hash],autoPush&&this.push(),this},getLastTriggerElement:function(hash){var preparedHash=hash.split(\"=\")[0],last=hashTriggerElement[hash]||hashTriggerElement[preparedHash];return hashTriggerElement[hash]=null,hashTriggerElement[preparedHash]=null,last},push:function(hash,triggerElement){var keyValue,key,value;return 0<arguments.length&&(key=(keyValue=hash.split(\"=\"))[0],value=!0,1<keyValue.length&&(value=keyValue[1]),triggerElement&&hashArray[key]!==value&&(hashTriggerElement[key]=triggerElement,hashTriggerElement[hash]=triggerElement),hashArray[key]=value),windowLocation.hash=this.toString(),this}}};function RsURLParams(parameters){var stack={};!function(parameters){\"?\"===parameters[0]&&(parameters=parameters.substring(1));if(!rsEmpty(parameters)){parameters=parameters.split(\"&\");for(var i=0,max=parameters.length;i<max;i++){var tmp=parameters[i].split(\"=\"),key=tmp[0],value=tmp[1],subKeys=key.match(new RegExp(\"\\\\[[0-9a-z]{0,}\\\\]\",\"gi\"));if(null!==subKeys?(key=key.split(\"[\")[0],stack[key]=stack[key]||{}):stack[key]=value,null!==subKeys)for(var reference=stack[key],j=0,maxJ=subKeys.length;j<maxJ;j++){var subKey=subKeys[j].substring(1,subKeys[j].length-1),tmpParamLength=Object.keys(reference).length;\"\"===subKey&&(subKey=tmpParamLength);try{var tmpKey=parseInt(subKey);!1===isNaN(tmpKey)&&(subKey=tmpKey)}catch(Error){}j===maxJ-1?reference[subKey]=value:(\"object\"!=typeof reference[subKey]&&(reference[subKey]={}),reference=reference[subKey])}}}}(parameters),this.set=function(key,value){return stack[key]=value,this},this.del=function(key){return delete stack[key],this},this.get=function(name){return void 0===name?stack:stack[name]},this.exists=function(name){return stack.hasOwnProperty(name)},this.remove=function(parameter){return delete stack[parameter],this},this.removeAll=function(){return stack={},this},this.toString=function(includeQuestionmark){var result=function convertToString(data,neededKeys,dataAsString){if(neededKeys=neededKeys||[],dataAsString=dataAsString||\"\",\"object\"!=typeof data)return dataAsString+=\"&\"+neededKeys[0],1<neededKeys.length&&(dataAsString+=\"[\"+neededKeys.splice(1).join(\"][\")+\"]\"),dataAsString+=\"=\"+data;for(var i=0,keys=Object.keys(data),max=keys.length;i<max;i++){var additionalKeys=neededKeys.slice(0);additionalKeys.push(keys[i]),dataAsString=convertToString(data[keys[i]],additionalKeys,dataAsString)}return dataAsString}(stack).substring(1);return result=\"\"!==result&&includeQuestionmark?\"?\"+result:result}}function RsURLHash(hash){var stack=[[],[]];!function(hash){for(var hashExploded=hash.split(\"#\"),i=0,max=hashExploded.length;i<max;i++){var keyExists=hashExploded[i].split(\"=\"),key=keyExists[0],value=keyExists[1];rsEmpty(key)||(-1===(keyExists=stack[0].indexOf(key))?(stack[0].push(key),stack[1].push(value)):stack[1][keyExists]=value)}}(hash),this.exists=function(hash){return-1<stack[0].indexOf(hash.split(\"=\")[0])},this.remove=function(hash){for(var hashExploded=hash.split(\"#\"),i=0,max=hashExploded.length;i<max;i++){var keyExists=hashExploded[i].split(\"=\")[0],keyExists=stack[0].indexOf(keyExists);-1<keyExists&&(delete stack[0][keyExists],delete stack[1][keyExists])}return this},this.removeAll=function(){return stack=[[],[]],this},this.toString=function(){for(var hashString=\"\",i=0,max=stack[0].length;i<max;i++)rsEmpty(stack[0][i])||(hashString+=\"#\"+stack[0][i],void 0!==stack[1][i]&&(hashString+=\"=\"+stack[1][i]));return hashString}}this.URLParams=RsURLParams,this.URL=function(url){var protocol,host,pathname,hash,search,mHashInstance=null,mQueryInstance=null,windowLocation=window.location;url=url||window.location,this.reset=function(){return mQueryInstance=mHashInstance=null,search=hash=pathname=host=protocol=void 0,this},this.getPath=function(){return pathname},this.setPath=function(path){return pathname=path,this},this.load=function(){return this.reset(),protocol=windowLocation.protocol.replace(\":\",\"\"),host=windowLocation.host,pathname=windowLocation.pathname,hash=windowLocation.hash,windowLocation.port,windowLocation.reload,search=windowLocation.search,this},this.toString=function(){return protocol+\":\/\/\"+host+pathname+this.getQuery().toString(!0)+this.getHash().toString()},this.getHash=function(){return mHashInstance=null===mHashInstance?new RsURLHash(hash):mHashInstance},this.getQuery=function(){return mQueryInstance=null===mQueryInstance?new RsURLParams(search):mQueryInstance}},this.URLHash=RsURLHash,Observer.register(\"url\",function(){return windowLocation.toString()}),Observer.register(\"hash\",function(){return windowLocation.hash}),Observer.register(\"path\",function(){return windowLocation.pathname}),this.Observer.PartialHash=new function(){var storage={},oldPartialHash=windowLocation.hash.split(\"#\").rsFilterEmpty();return!1===ObserverContainer.exists(\"hash\")&&Observer.register(\"hash\",function(){return windowLocation.hash}),Observer.change(\"hash\",function(Observer,dataArray){for(var lastTrigger={},dataArray=dataArray.newValue.split(\"#\").rsFilterEmpty(),changedHashesGrouped=[oldPartialHash.rsDiff(dataArray),dataArray.rsDiff(oldPartialHash)],triggerChangedKey={},k=0;k<2;k++)for(var changedHashes=changedHashesGrouped[k],i=0,iMax=changedHashes.length;i<iMax;i++){var j,jMax,hash=changedHashes[i],preparedHashValue=hash.split(\"=\"),preparedHashKey=preparedHashValue[0],preparedHashValue=0===k?null:preparedHashValue[1];if(preparedHashKey!==hash&&void 0!==storage[preparedHashKey]&&(triggerChangedKey[preparedHashKey]=preparedHashValue),void 0!==storage[hash])for(j=0,jMax=storage[hash].length;j<jMax;j++)\"function\"==typeof storage[hash][i]&&(void 0===lastTrigger[k]&&(lastTrigger[hash]=LocationPartialHash.getLastTriggerElement(hash),lastTrigger[preparedHashKey]=lastTrigger[hash]),storage[hash][i](1===k,lastTrigger[k]))}rsEach(triggerChangedKey,function(k,v){void 0===lastTrigger[k]&&(lastTrigger[k]=LocationPartialHash.getLastTriggerElement(k));for(var i=0,max=storage[k].length;i<max;i++)\"function\"==typeof storage[k][i]&&storage[k][i](v,lastTrigger[k])}),lastTrigger={},oldPartialHash=dataArray}),{change:function(hash,code){void 0===storage[hash]&&(storage[hash]=[]),storage[hash].push(code)}}},this.Location={PartialHash:LocationPartialHash},this.isDefined=new function(){var definedStack={},checkStack=[];return new IntervalCallback(function(){for(var i=0,max=checkStack.length;i<max;i++)!function(variables){for(var i=0,max=variables.length;i<max;i++){var variableStack=window,variable=variables[i].split(\".\");if(!0!==definedStack[variables[i]]){for(var j=0,jMax=variable.length;j<jMax;j++){var currentProp=variable[j];if(null===variableStack||void 0===variableStack[currentProp])return!1;variableStack=variableStack[currentProp]}definedStack[variables[i]]=!0}}return!0}(checkStack[i][0])||(checkStack[i][1](),delete checkStack[i]);checkStack=checkStack.rsFilterEmpty()}),function(variables,callbackFn){checkStack.push([variables=\"string\"==typeof variables?[variables]:variables,callbackFn])}}}}(window);!function(){function ButtonSpinnerService(){this._startedSpinner=[];var that=this,origin=BamForm.prototype.call;BamForm.prototype.call=function(type){return\"done\"===type&&that.stopAll(),origin.apply(this,arguments)}}function ButtonSpinner(service,element){this._element=element,this._service=service}ButtonSpinner.prototype={stop:function(){var index=this._element.querySelector('[data-bam-element-identifier=\"buttonRaquo\"]'),spinnerElement=this._element.querySelector(\".tko-spinner\");spinnerElement&&spinnerElement.classList.add(\"tko-hide\"),index&&(index.style.color=\"white\");index=this._service._startedSpinner.indexOf(this._element);-1<index&&delete this._service._startedSpinner[index]},start:function(){var raquoElement=this._element.querySelector('[data-bam-element-identifier=\"buttonRaquo\"]'),spinnerElement=this._element.querySelector(\".tko-spinner\");spinnerElement&&spinnerElement.classList.remove(\"tko-hide\"),raquoElement&&(raquoElement.style.color=\"transparent\"),-1===this._service._startedSpinner.indexOf(this._element)&&this._service._startedSpinner.push(this._element)}},ButtonSpinnerService.prototype={getFromElement:function(element){return element._btnspin||(element._btnspin=new ButtonSpinner(this,element))},stopAll:function(){for(var i=0,iMax=this._startedSpinner.length;i<iMax;i++){var ele=this._startedSpinner[i];ele&&ele._btnspin&&ele._btnspin.stop()}}},BamService.register(\"ButtonSpinner\",ButtonSpinnerService)}();BamService.register(\"CalculationParameter\",function(){var mId,mPageSize,mAcId,mAcKey,mAreacode,mFilledData,mDownstream;return{fill:function(data){return mDownstream=(mFilledData=data).downstream,this},getFilledData:function(){return mFilledData},setId:function(pId){return mId=pId,this},getId:function(){return mId},setPageSize:function(pPageSize){return mPageSize=pPageSize,this},getPageSize:function(){return mPageSize},setAcId:function(pAcId){return mAcId=pAcId,this},getAcId:function(){return mAcId},setAcKey:function(pAcKey){return mAcKey=pAcKey,this},getAcKey:function(){return mAcKey},getAreacode:function(){return mAreacode},setAreacode:function(pAreacode){return mAreacode=pAreacode,this},getDownstream:function(){return mDownstream},setDownstream:function(pDownstream){return mDownstream=pDownstream,this}}});BamService.register(\"ChattyConfig\",function(){var config=JSON.parse(BamAppVars.chatty.jsConfig);function configKeyExists(key){return config.hasOwnProperty(key)}return{hasConfig:function(){return void 0!==config},setConfig:function(appVarsConfig){return config=appVarsConfig,this},isActive:function(){return config.isActive},getConfig:function(){return config.jsConfig},openChatty:function(configName){configKeyExists(configName)&&Check24.loader.openChatbot(config[configName])},setContactLayer:function(configName){configKeyExists(configName)&&Check24.loader.setContactLayer(config[configName],!0)},addChatbotButton:function(configName){configKeyExists(configName)&&Check24.loader.addChatbotButton(config[configName],!0)},refreshConfig:function(){BamThreadLoader.run(\"chatty_config_update\",{leadId:BamStaticStorage.get(\"appData\").leadData.leadId}).done(function(response){config=JSON.parse(response.data.chatty)})}}}),BamService.get(\"ChattyConfig\");!function(){var ele;navigator.cookieEnabled||((ele=document.querySelector(\".tko-cookie-overlayer\")).style.display=\"block\",setTimeout(function(){document.querySelector(\".c24-page\").style.marginTop=ele.getBoundingClientRect().height+\"px\"},50))}();BamService.register(\"CookieConsent\",function(){for(var cookie,tmp=document.cookie.split(\";\"),cookieConsent=\"f\",i=0,max=tmp.length;i<max;i++)if(\"c24consent\"===(cookie=tmp[i].split(\"=\",2))[0].trim()){cookieConsent=cookie[1];break}return window.addEventListener(\"c24consent\",function(c24consent){c24consent&&c24consent.detail&&c24consent.detail.c24consent.match(\/^[maf]{1,3}$\/)&&(cookieConsent=c24consent.detail.c24consent,BamMessageBroker.send(\"CookieConsentChange\"))}),\"string\"!=typeof cookieConsent&&(cookieConsent=\"f\"),{isMarketing:function(){return-1!==cookieConsent.indexOf(\"m\")},isFunctional:function(){return!0},isAnalytics:function(){return-1!==cookieConsent.indexOf(\"a\")}}});function CookieDropHipster(){var _cookieDropSetup={},_droppedCookieUrls=[];function _dropCookie(url){BamService.get(\"CookieConsent\").isMarketing()&&-1===_droppedCookieUrls.indexOf(url.toString())&&(document.createElement(\"img\").src=url,_droppedCookieUrls.push(url))}return{init:function(responseData){return responseData.hasOwnProperty(\"cookieDropUrls\")&&(_cookieDropSetup=responseData.cookieDropUrls),this},dropCookieByLocation:function(location){if(!1===_cookieDropSetup.hasOwnProperty(location))return this;for(var keys=Object.keys(_cookieDropSetup[location]),i=0;i<keys.length;i++)_dropCookie(_cookieDropSetup[location][keys[i]]);return this},dropByLocationAndTariffVersion:function(location,tariffVersionId){var tariffVersionKey=\"tariffVersionId_\"+tariffVersionId;if(!1===_cookieDropSetup.hasOwnProperty(location)||!1===_cookieDropSetup[location].hasOwnProperty(tariffVersionKey)||!(_cookieDropSetup[location][tariffVersionKey]instanceof Array))return this;for(var i=0;i<_cookieDropSetup[location][tariffVersionKey].length;i++)_dropCookie(_cookieDropSetup[location][tariffVersionKey][i])},getCookieDropSetup:function(){return _cookieDropSetup},getDroppedCookies:function(){return _droppedCookieUrls}}}BamService.register(\"CookieDropHipster\",CookieDropHipster);try{BamService.get(\"GoogleAnalytics\")}catch(Error){BamService.register(\"GoogleAnalytics\",function(){function gtag(){dataLayer.push(arguments)}function initialize(){!function(document){new BamWorker(function(){var lastScript=document.getElementsByTagName(\"script\")[0],newScript=document.createElement(\"script\");newScript.async=!0,newScript.src=\"\/\/www.googletagmanager.com\/gtag\/js?id=UA-96866496-2\",lastScript.parentNode.insertBefore(newScript,lastScript),gtag(\"js\",new Date),gtag(\"config\",\"UA-96866496-2\",{anonymize_ip:!0})}).run()}((window,document))}return window.dataLayer=window.dataLayer||[],BamMessageBroker.addListener(\"CookieConsentChange\",function(){BamService.get(\"CookieConsent\").isAnalytics()&&initialize()}),BamService.get(\"CookieConsent\").isAnalytics()&&initialize(),gtag})}BamService.register(\"GoogleTagManager\",function(){var initialized=!1,tagManagerLoaded=!1;function initialize(){var object={cpid:24,tid:BamAppVars.tid1,areaid:BamAppVars[\"gtm\/areaId\"],devicetype:BamAppVars.devicetype,deviceoutput:BamAppVars.deviceoutput};BamAppVars.cctTracking&&(object.adgt1=BamAppVars.cctTracking),window.dataLayer=[object],function(window,document){new BamWorker(function(){window.dataLayer=window.dataLayer||[],window.dataLayer.push({\"gtm.start\":(new Date).getTime(),event:\"gtm.js\"});var f=document.getElementsByTagName(\"script\")[0],j=document.createElement(\"script\");(pushedTag=j).async=!0,j.src=\"\/\/www.googletagmanager.com\/gtm.js?id=GTM-W42B75\",f.parentNode.insertBefore(j,f)}).run()}(window,document)}return window.dataLayer=[],{push:function(data){if(tagManagerLoaded)return window.dataLayer.push(data),this;var that=this;return setTimeout(function(){that.push(data)},60),this},handle:function(){var check;!1===initialized&&(initialized=!0,initialize(),check=setInterval(function(){\"object\"==typeof window.google_tag_manager&&(tagManagerLoaded=!0,clearInterval(check))},50))}}});!function(){var count=0,configurable=[\"navigationClass\",\"indexNavigationItemClass\",\"indexNavigationActiveClass\",\"topOffset\",\"stickyClass\",\"bottomMargin\"];function IndexOfContents(element,options){this._element=element,[].findIndex&&(this._setOptions(options),!0!==this._isInitialized()&&(\"complete\"!==document.readyState?document.addEventListener(\"DOMContentLoaded\",this._init.bind(this)):this._init()))}IndexOfContents.prototype={_el:null,_eventsInit:!1,_initializedData:\"indexOfContents\",_navigationClass:\"tko-index-of-contents\",_indexNavigation:null,_indexNavigationItemClass:\"tko-index-item\",_indexNavigationActiveClass:\"index-active\",_noIndex:\"noIndex\",_breakPoints:null,_wrapperClass:\"tko-page-wrapper\",_navigationVisible:!1,_navigationSpacer:40,_topOffset:20,_stickyOffset:0,_resizeTimer:null,_mutationTimer:null,_debounceTime:200,_scrollAnimation:\"smooth\",_stickyClass:\"tko-stuck-on-top\",_bottomMargin:40,_hasScrollAnimation:null,_init:function(){this._scrollCallback=this._scrollCallback.bind(this),this._observerCallback=this._observerCallback.bind(this),this._navigationCallBack=this._navigationCallBack.bind(this),this._reInit=this._reInit.bind(this),window.addEventListener(\"resize\",this._resizeCallback.bind(this),{passive:!0}),this._setBreakPoints()._navigationVisibleState()._navigationPosition()._handleEvents();for(var element=this._element;element.previousSibling;)3!==(element=element.previousSibling).nodeType&&\"SCRIPT\"!==element.tagName&&this._indexSectionObserver(element);return this.isInit=!0,this},_setOptions:function(options){if(!options)return this;for(var i=0;i<configurable.length;i++)options[configurable[i]]&&(this[\"_\"+configurable[i]]=options[configurable[i]]);return this},_setActiveBreakTop:function(){return this._activatedBreakTop=this._element.getBoundingClientRect().top+window.scrollY,this},_reInit:function(){return this._setActiveBreakTop(),this._activeBreakBottom=null,this._navigationVisibleState(),!1===this._navigationVisible?this._handleEvents():(!1===this._eventsInit&&this._handleEvents(),this._getBottomOffset(),this._setBreakPoints()._navigationPosition()._scrollCallback()),this},_indexSectionObserver:function(element){return new MutationObserver(this._observerCallback).observe(element,{attributes:!0,childList:!0,subtree:!0}),this},_observerCallback:function(mutations){for(var execute=!1,i=0;i<mutations.length;i++)if(\"childList\"!==mutations[i].type){if(\"attributes\"===mutations[i].type&&!mutations[i].target.dataset.ignoreIndexContent){if(!mutations[i].target.dataset.indexContentObserve){if(mutations[i].target.classList.toString().match(\/slider\/)){mutations[i].target.dataset.ignoreIndexContent=\"true\";continue}mutations[i].target.dataset.indexContentObserve=\"true\"}if(mutations[i].target.dataset.stickyObserveElement||mutations[i].target.classList.contains(\"tko-stuck-on-top\")){var form=mutations[i].target;if(!form.dataset.stickyObserveElement){form.dataset.stickyObserveElement=\"true\";form=form.querySelector(\"form\");if(!this._stickyElement&&mutations[i].target.classList.contains(\"tko-stuck-on-top\")&&(this._stickyElement=mutations[i].target),form)for(var children=form.children,i=0;i<children.length;i++)children[i].dataset.stickyObserveElement=\"true\"}this._stickyOffset=this._stickyElement.offsetHeight,execute=!0}execute=!0}}else execute=!0;return!0===execute&&(clearTimeout(this._mutationTimer),this._mutationTimer=setTimeout(this._reInit,this._debounceTime)),this},_resizeCallback:function(){return clearTimeout(this._resizeTimer),this._indexNavigation.style.visibility=\"hidden\",this._indexNavigation.style.width=\"\",this._resizeTimer=setTimeout(this._reInit,this._debounceTime),this},_isInitialized:function(){return!!this._element.dataset[this._initializedData]||(this._element.dataset[this._initializedData]=count.toString(),this._setActiveBreakTop(),++count,!1)},_getTopOffset:function(){return this._topOffset+this._stickyOffset},_getBottomOffset:function(){return this._activeBreakBottom||(this._activeBreakBottom=this._activatedBreakTop+this._element.offsetHeight-this._indexNavigation.offsetHeight-this._getTopOffset()-this._bottomMargin),this._activeBreakBottom},_setBreakPoints:function(){this._breakPoints=[];var sections=this._getIndexContentSections();if(!this._indexNavigationElements.length)return this;for(var indexItemHeight,baseHeight=(indexItemHeight=this._indexNavigationElements[0].offsetHeight)\/2,i=0;i<sections.length;i++)this._breakPoints.push(sections[i]-baseHeight-indexItemHeight*i);return this._initialIndexNavigationItems(),this},_initialIndexNavigationItems:function(){this._activeNavigationItem||(this._activeNavigationItem=0),this._indexNavigationElements[this._activeNavigationItem].classList.add(this._indexNavigationActiveClass);for(var i=0;i<this._indexNavigationElements.length;i++)this._indexNavigationElements[i].dataset.itemIndex=i;return this},_navigationCallBack:function(event){for(var scrollY,self,element=event.target;element!==this._indexNavigation;){if(element.dataset.itemIndex){null===this._hasScrollAnimation&&(scrollY=window.scrollY),null===this._hasScrollAnimation||!0===this._hasScrollAnimation?(window.scrollBy({top:this._breakPoints[element.dataset.itemIndex]-this._getTopOffset()+5-window.scrollY,left:0,behavior:this._scrollAnimation}),null===this._hasScrollAnimation&&(self=this,setTimeout(function(){window.scrollY===scrollY?(self._hasScrollAnimation=!1,self._navigationCallBack(event)):self._hasScrollAnimation=!0},200))):window.scrollBy(0,this._breakPoints[element.dataset.itemIndex]-this._getTopOffset()+5-window.scrollY);break}element=element.parentNode}return this},_getIndexContentSections:function(){for(var children=this._element.children,tmp=[],i=0;i<children.length;i++)children[i].dataset[this._noIndex]?children[i].classList.contains(this._navigationClass)?(this._indexNavigation=children[i],this._indexNavigationElements=this._indexNavigation.querySelectorAll(\".\"+this._indexNavigationItemClass)):this._indexSectionObserver(children[i]):(this._indexSectionObserver(children[i]),tmp.push(children[i].offsetTop+this._activatedBreakTop));return tmp},_handleEvents:function(){return this._indexNavigation?!1===this._navigationVisible?(document.removeEventListener(\"scroll\",this._scrollCallback),this._indexNavigation.removeEventListener(\"click\",this._navigationCallBack),this._indexNavigation.style.visibility=\"hidden\",this._activeBreakBottom=null,this._eventsInit=!1):(this._eventsInit=!0,document.addEventListener(\"scroll\",this._scrollCallback,{passive:!0}),this._indexNavigation.addEventListener(\"click\",this._navigationCallBack,{passive:!0})):this._eventsInit=!1,this},_scrollCallback:function(){return this._navigationPosition()._setIndexNavigationActive(),this},_setIndexNavigationActive:function(){if(!this._indexNavigationElements.length)return this;for(var index=0;index<this._breakPoints.length&&!(this._breakPoints[index]-this._getTopOffset()>scrollY);index++);return 0<index&&--index,index!==this._activeNavigationItem&&this._indexNavigationElements[index]&&(this._indexNavigationElements[this._activeNavigationItem].classList.remove(this._indexNavigationActiveClass),this._activeNavigationItem=index,this._indexNavigationElements[index].classList.add(this._indexNavigationActiveClass)),this},_navigationVisibleState:function(){var windowWidth=window.innerWidth,size=this._element.querySelector(\".\"+this._wrapperClass);return size||(this._navigationVisible=!1),(size=(windowWidth-size.offsetWidth)\/2)>this._indexNavigation.offsetWidth+this._navigationSpacer||this._indexNavigation.offsetWidth+this._navigationSpacer-size<1&&!0===this.isInit?(this._navigationVisible=!0,this._indexNavigation.style.width=size-this._navigationSpacer+\"px\",this._indexNavigation.style.visibility=\"visible\"):(this._navigationVisible=!1,this._indexNavigation.style.visibility=\"hidden\"),this},_navigationPosition:function(){return this._activatedBreakTop-this._getTopOffset()>window.scrollY?(this._indexNavigation.style.position=\"absolute\",this._indexNavigation.style.top=0,this._indexNavigation.style.bottom=\"\"):this._activatedBreakTop-this._getTopOffset()<window.scrollY&&window.scrollY<this._getBottomOffset()?(this._indexNavigation.style.position=\"fixed\",this._indexNavigation.style.top=this._getTopOffset()+\"px\",this._indexNavigation.style.bottom=\"\"):window.scrollY>this._getBottomOffset()&&(this._indexNavigation.style.position=\"absolute\",this._indexNavigation.style.top=\"\",this._indexNavigation.style.bottom=this._bottomMargin+\"px\"),this}},BamService.register(\"IndexOfContents\",function(){return{init:function(element,options){new IndexOfContents(element,options)}}})}();!function(){function PpsRender(){var _elementStack=[];function appendToLeadContent(ident,ele){ele=BamTemplate(ident).getParsedInstance(ele||{});return _elementStack.push(ele),BamElement(\"ppsPersonalLeadBox\").append(ele),ele}this.renderMainFrame=function(ele){var id,cnt=ele.getLeadCount();id=\"ppsMainFrame\",ele={ppsPersonalLeadsCount:cnt?\" (\"+cnt+\")\":\"\",headline:ele.getHeadline(),hasCompareLeadData:ele.hasCompareData()&&ele.hasLeadData(),hideLeadInitial:ele.hasCompareData()?\"tko-hide-leadbox\":\"\"},ele=BamTemplate(id).getParsedInstance(ele||{}),_elementStack.push(ele),BamElement(id).append(ele)},this.renderTabCompare=function(response){response.getTabCompareData().forEach(function(ele){var tpl=\"lead\"===ele._type_?\"dropoutTile\":\"compareTile\";ele=ele,ele=BamTemplate(tpl).getParsedInstance(ele||{}),_elementStack.push(ele),BamElement(\"ppsPersonalCompareBox\").append(ele)})},this.renderTabLeadContent=function(response){response.getTabLeadData().forEach(function(val){var ele=appendToLeadContent(\"ppsLeadTile\",val).find(\".tko-right-column .tko-button-wrapper\");val.actionItem&&ele.append(BamTemplate(\"ppsActionItem\").getParsedInstance(val.actionItem))})},this.renderFurtherLink=function(response){appendToLeadContent(\"ppsFurtherLeadsLink\",{furtherLeadsLink:response.getFurtherLeadsLink()})},this.destroy=function(){_elementStack.forEach(function(value){value.remove()}),BamService.get(\"personalStartpage\").setIndicators(!1)},this.showVerticalLogin=function(showLogin){var ele,verticalLoginWrapper;!1!==showLogin&&(showLogin=!0),0!==BamSelector('[data-bam-tpl=\"vertLoginElement\"]').length&&(ele=BamTemplate(\"vertLoginElement\").getParsedInstance(),0!==(verticalLoginWrapper=BamElement(\"verticalLoginWrapper\")).length&&\"\"===verticalLoginWrapper.get(0).innerHTML&&(_elementStack.push(ele),verticalLoginWrapper.prepend(ele),document.querySelector('[data-bam-element-identifier=\"verticalLoginWrapper\"]').style.minHeight=\"0\"),showLogin?verticalLoginWrapper.show():verticalLoginWrapper.hide())}}function ResponseParser(_data){var _countLeads=(_data=(_data=(_data=!_data||\"Object\"!==_data.constructor.name&&\"[object Object]\"!==_data.toString()?{}:_data).data||{}).personalProductStartpage||{}).countLeads||0,_dataTabCompare=_data.tabCompare||[],_dataTabLeads=(_data.tabLeads,_data.tabLeads||[]),_furtherLeadsLink=_data.furtherLeadsLink||\"\",_headline=_data.tabCompareTitle||\"\";this.hasData=function(){return this.hasCompareData()||this.hasLeadData()},this.getTabCompareData=function(){return _dataTabCompare},this.getTabLeadData=function(){return _dataTabLeads},this.hasCompareData=function(){return 0<this.getTabCompareData().length},this.hasLeadData=function(){return 0<this.getTabLeadData().length},this.dropCompareData=function(){_dataTabCompare=[]},this.getLeadCount=function(){return _countLeads},this.getFurtherLeadsLink=function(){return _furtherLeadsLink},this.getHeadline=function(){return _headline}}function PersonalStartpage(){this._response=null,this._renderer=null}function Teaser(){this._elementStack=[]}PersonalStartpage.prototype.getRenderer=function(){return this._renderer||(this._renderer=new PpsRender),this._renderer},PersonalStartpage.prototype.getResponse=function(){return this._response},PersonalStartpage.prototype.initializeView=function(){var messageContainer;this.getRenderer().destroy(),this.getResponse().hasData()?this.buildView():!1===BamService.get(\"SsoUser\").isLoggedIn()&&(this.getRenderer().showVerticalLogin(!0),messageContainer=document.querySelector(\".tko-vert-login-text\"),BamService.get(\"SsoUser\").isExpired()&&(messageContainer.innerText=messageContainer.dataset.bamComebackText))},PersonalStartpage.prototype.buildView=function(){var renderer=this.getRenderer();renderer.destroy();var response=this.getResponse(),user=BamService.get(\"SsoUser\");renderer.renderMainFrame(response),this.setIndicators(!0),response.hasCompareData()&&(renderer.renderTabCompare(response),!1===user.isLoggedIn()&&renderer.showVerticalLogin(!0)),response.hasLeadData()&&renderer.renderTabLeadContent(response)},PersonalStartpage.prototype.setIndicators=function(ppsActive){var yellowBox=document.querySelector(\".tko-yellow-box\"),stickyHeadline=document.querySelector(\".tko-sticky-headline\"),ppsTeaser=BamElement(\"ppsTeaser\")[0];yellowBox&&yellowBox.classList.toggle(\"tko-pps-active\",ppsActive),stickyHeadline&&(stickyHeadline.style.display=ppsActive?\"none\":\"block\"),ppsTeaser&&ppsTeaser.parentElement.classList.toggle(\"tko-pps-teaser\",ppsActive),BamService.get(\"VisibilityManager\").addData({\"_ds.defaultWording\":!ppsActive,\"_ds.ppssWording\":ppsActive}).check()},PersonalStartpage.prototype.setResponse=function(response){this._response=new ResponseParser(response)},PersonalStartpage.prototype.init=function(response){this.setResponse(response),this.initializeView()},BamService.register(\"personalStartpage\",PersonalStartpage),Teaser.prototype.init=function(response){this._response=response,this.buildView()},Teaser.prototype.getDefaultElements=function(){return $(\".tko-dsl-page-text-content h1, .tko-dsl-page-text-content .tko-teaser-subheadline\")},Teaser.prototype.buildView=function(mode){var ele;this._elementStack.forEach(function(value){value.remove()}),this._response.hasData()?(ele={welcomeBack:\"\",userName:\"\"},BamService.get(\"SsoUser\").isLoggedIn()&&(ele.welcomeBack=\"&nbsp;zur\u00fcck\",null!==BamService.get(\"SsoUser\").getFirstname()&&null!==BamService.get(\"SsoUser\").getLastname()&&(ele.userName=\", \"+BamService.get(\"SsoUser\").getFirstname()+\"&nbsp;\"+BamService.get(\"SsoUser\").getLastname())),this.getDefaultElements().hide(),ele=BamTemplate(\"ppsTeaser\").fill(ele).getParsedInstance(),this._elementStack.push(ele),BamElement(\"ppsTeaser\").length&&(BamElement(\"ppsTeaser\").append(ele),BamMessageBroker.send(\"outerContentChange\"))):this.getDefaultElements().show()},BamService.register(\"PpsTeaser\",Teaser),BamMessageBroker.addListener(\"ssoLoginThreadDone\",function(){BamService.get(\"personalStartpage\").getRenderer().showVerticalLogin(!1===BamService.get(\"SsoUser\").isLoggedIn())}),BamService.get(\"personalStartpage\").getRenderer().showVerticalLogin(!BamAppVars.isLoggedIn)}();BamService.register(\"PopupManager\",function(){var mIgnoreList=[];return{addToIgnoreList:function(popup){return mIgnoreList.push(popup),this},getIgnoreList:function(){return mIgnoreList}}});function PopupJs(){var activePopup,stack={},enabled=!0;function getLayer(id){return void 0===id?$(\"[data-bam-popup-layer]\"):$(\"[data-bam-popup-layer=\"+id+\"]\")}function PopUp(popupId){var content,enabled=null,isOpen=!1,blockHideByOuterEvent=!1,callbackStack={onClose:[],onLoad:[]};this.reset=function(){enabled=null,!(blockHideByOuterEvent=isOpen=!1)===this.layerExists()&&getLayer(popupId).eq(0).remove()},this.getLayer=function(){return!1===this.layerExists()?this.createLayer():getLayer(popupId).eq(0)},this.showLayer=function(){var layerDimensions=this.getLayer();if(layerDimensions.length){var layer=layerDimensions[0];isOpen=!0,layer.style.display=\"block\";layerDimensions=layer.offsetHeight;return layerDimensions<=window.innerHeight?(layer.style.top=\"50%\",layer.style.transform=\"translateY(-\"+Math.round(layerDimensions\/2)+\"px)\"):(layer.style.height=window.innerHeight+\"px\",layer.style.overflowY=\"scroll\",layer.style.overflowX=\"hidden\"),this}},this.layerExists=function(){return 0<getLayer(popupId).length},this.getContent=function(){var popup;return content||(popup=$('[data-popup-id=\"'+popupId+'\"]'),content=\"SCRIPT\"===popup[0].nodeName?$(popup[0].innerHTML):popup.children().clone(),popup.remove()),content.clone()},this.onClose=function(fn){return callbackStack.onClose.push(fn),this},this.setEnabled=function(value){return enabled=value,this},this.setBlockHideByOuterEvent=function(){return blockHideByOuterEvent=!0,this},this.isBlockHideByOuterEvent=function(){return blockHideByOuterEvent},this.getEnabled=function(){return enabled},this.handleClose=function(fn){if(!1===isOpen)return this;for(var i=0,max=callbackStack.onClose.length;i<max;i++)callbackStack.onClose[i].call(this);return isOpen=!1,this},this.createLayer=function(content){var $layer=content||\"popupLayer\",content=this.getContent();if(0===content.length)return console.info('Popup: no content for id \"'+popupId+'\" found. Check if Content contains HTML!'),null;content=$(\"<div\/>\").append(content).html(),($layer=BamTemplate($layer).getParsedInstance()).attr(\"data-bam-popup-layer\",popupId),$layer.find(\".tko-popup-content\").html(content),BamSelector(\"body\").append($layer);for(var i=0,max=callbackStack.onLoad.length;i<max;i++)callbackStack.onLoad[i].call(this);return $layer},this.start=function(){return BamService.get(\"LoadingPopup\").start(),this},this.stop=function(){return BamService.get(\"LoadingPopup\").stop(),this},this.onLoad=function(fn){return callbackStack.onLoad.push(fn),this},this.isOpen=function(){return isOpen}}return{onLoad:function(popupId,fn){return this.load(popupId).onLoad(fn),this},setEnabled:function(value){return enabled=value,this},show:function(ident,pushHash){var popup=this.load(ident);return(enabled||!0===popup.getEnabled())&&null!==popup.getLayer()&&($(\"#c24m-page-blocking-layer\").css(\"position\",\"fixed\").show(),$(\".c24-blocking-layer\").css(\"position\",\"fixed\").show(),popup.showLayer(),pushHash&&TkoRs.Location.PartialHash.push(\"popup=\"+ident)),this},reset:function(ident){return stack[ident]&&stack[ident].reset(),this},load:function(ident){return void 0===stack[activePopup=ident]&&(stack[ident]=new PopUp(ident)),stack[ident]},hide:function(ident){var loadedPopUp=this.load(activePopup);return!enabled&&!0!==loadedPopUp.getEnabled()||ident&&activePopup!==ident||(loadedPopUp.handleClose(),getLayer().hide(),$(\"#c24m-page-blocking-layer\").hide(),$(\".c24-blocking-layer\").hide()),this},hideByOuterEvent:function(){var loadedPopUp=this.load(activePopup);return!enabled&&!0!==loadedPopUp.getEnabled()||loadedPopUp.isBlockHideByOuterEvent()?this:this.hide()},dropLayer:function(layerId){return enabled&&getLayer(layerId).remove(),this},getActivePopup:function(){return void 0!==activePopup?this.load(activePopup):null}}}BamService.register(\"Popup\",PopupJs);BamService.register(\"BamSlider\",function(){Math.trunc||(Math.trunc=function(v){return(v=+v)-v%1||(isFinite(v)&&0!==v?v<0?-0:0:v)});var stack={},count=0,config={slidesToShow:1,slidesToScroll:1,dots:!1,infinitely:!1,speed:500,autoplay:!1,autoplaySpeed:2e3,arrows:!0,swipe:!0,itemMargin:10,arrowsOutside:!0,dotNavigation:!1,itemsClass:\"tko-slider-item\",slidesWrapperClass:\"tko-slider-slides\",slideTrackClass:\"tko-slider-track\",arrowWrapperClass:\"tko-slider-arrow\",arrowLeftClass:\"tko-slider-arrow-left\",arrowRightClass:\"tko-slider-arrow-right\",arrowLeft:'<svg width=\"10\" height=\"36\" class=\"tko-fill-light-grey\"><use xlink:href=\"#arrow-slider\"><\/use><\/svg>',arrowRight:'<svg width=\"10\" height=\"36\" class=\"tko-fill-light-grey\"><use xlink:href=\"#arrow-slider\"><\/use><\/svg>',dotElement:\"div\",dotClass:\"tko-slider-dot\",dotActiveClass:\"tko-slider-dot-active\",dotWrapper:\"\"};function BamSlider(el,config){if(el)return this._el=el,!0===this._isInit()?stack[this._el.dataset.slider]:(config=config||(this._el.dataset.config||{}),this._ensureBindings()._createConfig(config)._setElements()._setSlideItems()._addDots()._addDuplicateItems()._addArrows()._setSlidesWidth()._setItemsWidth()._autoPlay()._enableSwipe()._slideObserver(),window.addEventListener(\"resize\",this._resize),this);console.error(\"no element given stop create slider\")}return BamSlider.prototype={_config:null,_items:null,_sliderPos:0,_itemsCount:0,_firstItem:0,_duplicateClass:\"tko-slider-duplicate\",_dots:null,_autoplay:null,_currentPosition:0,_maxRight:0,_takeOverDelay:30,_dotWrapperClass:\"tko-slider-dots\",_dotWrapperElement:\"div\",_resizeBounce:null,_animationProgress:!1,_dragSlidePreload:!1,_dotNavigationClass:\"tko-slider-dots-nav\",_hasObserver:window.hasOwnProperty(\"IntersectionObserver\"),_observes:!1,_observerOptions:null,_isInit:function(){return!!this._el.classList.contains(\"tko-js-init-slider\")||(this._el.classList.add(\"tko-js-init-slider\"),this._el.dataset.slider=\"slider\"+count,stack[\"slider\"+count]=this,++count,!1)},_ensureBindings:function(){return this._autoPlay=this._autoPlay.bind(this),this._stopAutoplay=this._stopAutoplay.bind(this),this._startAutoplay=this._startAutoplay.bind(this),this.slideRight=this.slideRight.bind(this),this.slideLeft=this.slideLeft.bind(this),this._resize=this._resize.bind(this),this._setSlidesWidth=this._setSlidesWidth.bind(this),this._observerAutoplayCb=this._observerAutoplayCb.bind(this),this._slideObserverCallback=this._slideObserverCallback.bind(this),this._moveSliderByUserInteraction=this._moveSliderByUserInteraction.bind(this),this._stopSliderUserInteraction=this._stopSliderUserInteraction.bind(this),this._touchEndCb=this._touchEndCb.bind(this),this._startTouchCb=this._startTouchCb.bind(this),this._startDragCb=this._startDragCb.bind(this),this._touchMoveCb=this._touchMoveCb.bind(this),this._autoplayCb=this._autoplayCb.bind(this),this},_createConfig:function(customConfig){for(var key in this._config={},config)customConfig.hasOwnProperty(key)?typeof config[key]!=typeof customConfig[key]?this._config[key]=\"boolean\"==typeof config[key]?\"true\"===customConfig[key]:\"number\"==typeof config[key]?Number(customConfig[key]):customConfig[key]:this._config[key]=customConfig[key]:this._config[key]=config[key];return this},_slideObserver:function(){if(!1===this._hasObserver)return this._loadAllImages(),this;this._preloadObserver=new IntersectionObserver(this._slideObserverCallback,{root:this._el,rootMargin:\"0px\",threshold:.1});for(var i=0;i<this._itemsCount;i++)!0===this._config.infinitely&&i<this._config.slidesToShow?this._loadImages(this._items[i]):this._preloadObserver.observe(this._items[i]);return this},_slideObserverCallback:function(entries){for(var last,i=0;i<entries.length;i++)0!=entries[i].intersectionRatio&&(this._loadImages(entries[i].target),this._preloadObserver.unobserve(entries[i].target),last=entries[i].target);for(i=0;i<this._config.slidesToScroll&&last;i++)last=last.nextSibling,this._loadImages(last);return this},_resize:function(){clearTimeout(this._resizeBounce);var self=this;return this._resizeBounce=setTimeout(function(){self._setSlidesWidth()._setItemsWidth(!0)},200),this},_setElements:function(){return this._slideTrack=this._el.querySelector(\".\"+this._config.slideTrackClass),this._el.querySelector(\".\"+this._config.slidesWrapperClass),this._mainSliderWrapper=this._el.querySelector(\".\"+this._config.slidesWrapperClass),this},_autoPlay:function(){return!0===this._config.autoplay&&(this._hasObserver&&!1===this._observes?new IntersectionObserver(this._observerAutoplayCb,{root:null,rootMargin:\"0px\",threshold:[0,1]}).observe(this._el):this._startAutoplay()),this},_observerAutoplayCb:function(entries){return entries[0].intersectionRatio<=.1?this._stopAutoplay():.95<=entries[0].intersectionRatio&&this._startAutoplay(),this},_startAutoplay:function(){return this._config.speed>this._config.autoplaySpeed&&(this._config.autoplaySpeed=this._config.speed+this._config.autoplaySpeed),clearInterval(this._autoplay),this._autoplay=setInterval(this._autoplayCb,this._config.autoplaySpeed),this._el.addEventListener(\"mouseenter\",this._stopAutoplay,{passive:!0,once:!0}),this},_autoplayCb:function(){return this.slideRight(!0),this},startAutoplay:function(){return this._config.autoplay=!0,this._startAutoplay(),this},stopAutoplay:function(){return clearInterval(this._autoplay),this._el.removeEventListener(\"mouseleave\",this._startAutoplay,{passive:!0,once:!0}),this},_stopAutoplay:function(){return clearInterval(this._autoplay),this._el.addEventListener(\"mouseleave\",this._startAutoplay,{passive:!0,once:!0}),this},_enableSwipe:function(){return!1===this._config.swipe||(this._slideTrack.addEventListener(\"touchstart\",this._startTouchCb,!1),this._slideTrack.addEventListener(\"mousedown\",this._startDragCb,!1)),this},_startTouchCb:function(e){return this._slideTrack.addEventListener(\"touchend\",this._touchEndCb,!1),this._slideTrack.addEventListener(\"touchmove\",this._touchMoveCb,!1),this._startDragCb(e.targetTouches[0],!0),this},_touchMoveCb:function(e){return this._moveSliderByUserInteraction(e.targetTouches[0],!0),this},_touchEndCb:function(e){return this._slideTrack.removeEventListener(\"touchend\",this._touchEndCb,!1),this._slideTrack.removeEventListener(\"touchmove\",this._touchMoveCb,!1),this._stopSliderUserInteraction(e.changedTouches[0]),this},_startDragCb:function(e,isTouch){return!isTouch&&e.button&&0!==e.button||(this.stopAutoplay(),this._dragEndPos=(this._itemsCount-this._config.slidesToShow)*(this._itemWidth+10),this._dragStartPos=this._sliderPos*(this._itemWidth+this._config.itemMargin),this._moveStart=e.clientX,document.addEventListener(\"mousemove\",this._moveSliderByUserInteraction,{passive:!0}),document.addEventListener(\"mouseup\",this._stopSliderUserInteraction,{passive:!0})),this},_stopSliderUserInteraction:function(itemsToSlide){var trunc=itemsToSlide.clientX-this._moveStart,itemsToSlide=trunc\/((this._itemWidth+this._config.itemMargin)*this._config.slidesToScroll\/3);return document.removeEventListener(\"mousemove\",this._moveSliderByUserInteraction,{passive:!0}),document.removeEventListener(\"mouseup\",this._stopSliderUserInteraction,{passive:!0}),Math.abs(itemsToSlide)<1?this._setTransform(!1,!1):1<itemsToSlide&&itemsToSlide<4?this.slideLeft():-4<itemsToSlide&&itemsToSlide<-1?this.slideRight():(itemsToSlide=trunc\/((this._itemWidth+this._config.itemMargin)*this._config.slidesToScroll),trunc=Math.trunc(itemsToSlide),.33<Math.abs(itemsToSlide)-Math.abs(trunc)?itemsToSlide<0?this._sliderPos+=Math.abs(Math.floor(itemsToSlide))*this._config.slidesToScroll:this._sliderPos-=Math.ceil(itemsToSlide)*this._config.slidesToScroll:itemsToSlide<0?this._sliderPos+=Math.abs(Math.ceil(itemsToSlide))*this._config.slidesToScroll:this._sliderPos-=Math.floor(itemsToSlide)*this._config.slidesToScroll,!1===this._config.infinitely&&(this._sliderPos>=this._itemsCount-1?this._sliderPos=this._itemsCount-1:this._sliderPos>=this._itemsCount&&(this._sliderPos=this._itemsCount-this._config.slidesToShow)),this._setTransform(!1,!1)),this._animationProgress=!1,this},_moveSliderByUserInteraction:function(e){var pos=this._dragStartPos+(this._moveStart-e.clientX);if(!1===this._config.infinitely){if(pos<=0)return this._sliderPos=0,this._setTransform(!1,!1),this._moveStart=e.clientX,this;if(pos>this._dragEndPos)return this._sliderPos=this._itemsCount-this._config.slidesToShow,this._setTransform(!1,!1),this._moveStart=e.clientX,this;this._showArrows()}else{if(pos<=0)return this._sliderPos=this._itemsCount-2*this._config.slidesToShow,this._setTrackTransform(),this._dragStartPos=this._sliderPos*(this._itemWidth+this._config.itemMargin),this._moveStart=e.clientX,this;if(pos>this._dragEndPos)return this._sliderPos=this._config.slidesToShow,this._setTrackTransform(),this._dragStartPos=this._config.slidesToShow*(this._itemWidth+this._config.itemMargin),this._moveStart=e.clientX,this}return this._slideTrack.style.transform=\"translate3d(-\"+pos+\"px, 0px, 0px)\",this},_loadAllImages:function(){for(var i=0;i<this._itemsCount;i++)this._loadImages(this._items[i]);return this},_addDots:function(){if(!1===this._config.dots)return this;var dot,count=this._itemsCount\/this._config.slidesToScroll-(this._config.slidesToShow-this._config.slidesToScroll);this._dots=document.createElement(this._dotWrapperElement),this._dots.classList.add(this._dotWrapperClass),!0===this._config.infinitely&&(count=this._itemsCount\/this._config.slidesToScroll);for(var i=0;i<count;i++)(dot=document.createElement(this._config.dotElement)).classList.add(this._config.dotClass),dot.dataset.target=i*this._config.slidesToScroll,0===i&&dot.classList.add(this._config.dotActiveClass),!0===this._config.dotNavigation&&dot.classList.add(this._dotNavigationClass),this._dots.insertAdjacentElement(\"beforeend\",dot);return\"\"===this._config.dotWrapper?this._el.insertAdjacentElement(\"beforeend\",this._dots):this._addDotsExternal(),!0===this._config.dotNavigation&&this._activateDotNavigation(),this},_addDotsExternal:function(){var wrapper=this._config.dotWrapper;return\"string\"==typeof this._config.dotWrapper?wrapper=document.querySelector(this._config.dotWrapper):Array.isArray(this._config.dotWrapper)&&(wrapper=this._config.dotWrapper[0]),wrapper instanceof HTMLElement?wrapper.insertAdjacentElement(\"beforeend\",this._dots):console.error(\"Dot wrapper is not a valid element\"),this},_activateDotNavigation:function(){return this._dotNavigationCb=this._dotNavigationCb.bind(this),this._dots.addEventListener(\"click\",this._dotNavigationCb,{passive:!0}),this},_dotNavigationCb:function(e){if(!0===this._animationProgress)return this;this.stopAutoplay();for(var el=e.target;el!==this._dots;)el=el.classList.contains(this._config.dotClass)?((this._animationProgress=!0)===this._config.infinitely?this._sliderPos=Number(el.dataset.target)+this._config.slidesToShow:this._sliderPos=Number(el.dataset.target),this._setTransform(!1,!1),this._dots):el.parentNode;return this},_setSlideItems:function(){this._items=Array.prototype.slice.call(this._el.querySelectorAll(\".\"+this._config.itemsClass)),this._itemsCount=this._items.length;for(var i=0;i<this._itemsCount;i++)this._items[i].dataset.slideIndex=i;return this},_loadImages:function(element){if(!element||\"#text\"===element.nodeName)return this;for(var images=element.querySelectorAll(\"img[data-slider-src]\"),i=0;i<images.length;i++)images[i].dataset.wasProccessed||(images[i].src=images[i].dataset.sliderSrc,images[i].setAttribute(\"draggable\",!1),images[i].style.pointerEvents=\"none\",delete images[i].dataset.sliderSrc,images[i].dataset.wasProccessed=\"true\");return this},_addDuplicateItems:function(){if(!1===this._config.infinitely)return this;var tmp,i,copy=this._items.slice(0),end=this._items.length-1-this._config.slidesToShow;if(this._items.length<1)return this;for(i=this._items.length-1;end<i;i--)(tmp=this._items[i].cloneNode(!0)).classList.add(this._duplicateClass),this._slideTrack.insertAdjacentElement(\"afterbegin\",tmp),copy.unshift(tmp);for(i=0;i<this._config.slidesToShow;i++)(tmp=this._items[i].cloneNode(!0)).classList.add(this._duplicateClass),this._slideTrack.insertAdjacentElement(\"beforeend\",tmp),copy.push(tmp);return this._items=copy,this._itemsCount=this._items.length,this},_addArrows:function(){return!1===this._config.arrows||this._itemsCount<=this._config.slidesToShow||(this._leftArrow=document.createElement(\"div\"),this._rightArrow=document.createElement(\"div\"),this._leftArrow.classList.add(this._config.arrowWrapperClass),this._leftArrow.classList.add(this._config.arrowLeftClass),this._rightArrow.classList.add(this._config.arrowWrapperClass),this._rightArrow.classList.add(this._config.arrowRightClass),this._leftArrow.insertAdjacentHTML(\"afterbegin\",this._config.arrowLeft),this._rightArrow.insertAdjacentHTML(\"afterbegin\",this._config.arrowRight),this._leftArrow.addEventListener(\"click\",this.slideLeft),this._rightArrow.addEventListener(\"click\",this.slideRight),this._el.insertAdjacentElement(\"afterbegin\",this._leftArrow),this._el.insertAdjacentElement(\"beforeend\",this._rightArrow),!1===this._config.infinitely&&this._hideLeftArrow()),this},_setSlidesWidth:function(){return this._sliderViewWidth=this._el.offsetWidth,this._leftArrow&&!0===this._config.arrowsOutside&&(this._sliderViewWidth-=this._leftArrow.offsetWidth+this._rightArrow.offsetWidth,this._mainSliderWrapper.style.marginLeft=this._leftArrow.offsetWidth+\"px\"),this._mainSliderWrapper.style.opacity=1,this._mainSliderWrapper.style.width=this._sliderViewWidth+\"px\",this},_setTrackBasicStyles:function(){return this._slideTrack.style.width=(this._itemWidth+this._config.itemMargin)*this._itemsCount+\"px\",this._slideTrack.style.transitionTimingFunction=\"linear\",this._slideTrack.style.transitionDuration=\"0ms\",this},_setItemsWidth:function(isResize){this._itemWidth=this._sliderViewWidth\/(this._itemsCount<this._config.slidesToShow?this._itemsCount:this._config.slidesToShow)-this._config.itemMargin,this._setTrackBasicStyles();for(var i=0;i<this._items.length;i++)this._items[i].style.width=this._itemWidth+\"px\",this._items[i].style.margin=\"0 \"+this._config.itemMargin\/2+\"px\";return!0===this._config.infinitely&&(isResize||(this._sliderPos=this._config.slidesToShow),this._currentPosition=this._itemWidth*this._sliderPos,this._setTrackTransform()),this._maxRight=this._itemWidth*(this._itemsCount-this._config.slidesToShow),this},slideRight:function(toFirst){if(!0===this._animationProgress)return this;!0!==toFirst&&this.stopAutoplay(),this._sliderPos=this._sliderPos+this._config.slidesToScroll;toFirst=!1;return this._sliderPos+this._config.slidesToShow>=this._itemsCount&&!1===this._config.infinitely?this._sliderPos=this._itemsCount-this._config.slidesToShow:!0===this._config.infinitely&&this._sliderPos+this._config.slidesToShow===this._itemsCount&&(toFirst=!0),this._showArrows()._setTransform(toFirst,!1),this},slideLeft:function(){if(!0===this._animationProgress)return this;this.stopAutoplay();var toLast=!1;return this._sliderPos=this._sliderPos-this._config.slidesToScroll,this._sliderPos>=this._itemsCount&&!1===this._config.infinitely?this._sliderPos=0:0===this._sliderPos&&!0===this._config.infinitely&&(toLast=!0),this._showArrows()._setTransform(!1,toLast),this},_setTransform:function(toFirst,toLast){var self=this;return this._animationProgress=!0,this._slideTrack.style.transitionDuration=this._config.speed+\"ms\",this._setTrackTransform(),!0===this._config.dots&&this._activateDots(),setTimeout(function(){self._slideTrack.style.transitionDuration=\"0ms\",!0===toFirst?(self._sliderPos=self._config.slidesToShow,self._setTrackTransform()):!0===toLast&&(self._sliderPos=self._itemsCount-2*self._config.slidesToShow,self._setTrackTransform()),self._animationProgress=!1},this._config.speed+this._takeOverDelay),this},_activateDots:function(){var dot=Math.abs(this._sliderPos);if(!this._items[dot])return this;this._setDotInactive(),!0===this._config.infinitely&&(dot=this._items[dot].dataset.slideIndex);dot=this._dots.querySelector('[data-target=\"'+dot+'\"]');return dot&&dot.classList.add(\"tko-slider-dot-active\"),this},_setDotInactive:function(){var active=this._dots.querySelector(\".tko-slider-dot-active\");return active&&active.classList.remove(\"tko-slider-dot-active\"),this},_setTrackTransform:function(){return!1===this._config.infinitely&&!0===this._config.arrows&&(0===this._sliderPos?this._hideLeftArrow():this._sliderPos===this._itemsCount-this._config.slidesToShow?this._hideRightArrow():this._showArrows()),this._currentPosition=(this._itemWidth+this._config.itemMargin)*this._sliderPos,this._slideTrack.style.transform=\"translate3d(-\"+this._currentPosition+\"px, 0px, 0px)\",this},_showArrows:function(){return this._leftArrow&&(this._leftArrow.style.visibility=\"\",this._rightArrow.style.visibility=\"\"),this},_hideLeftArrow:function(){return!0!==this._config.infinitely&&this._leftArrow&&(this._leftArrow.style.visibility=\"hidden\",this._rightArrow.style.visibility=\"\"),this},_hideRightArrow:function(){return!0!==this._config.infinitely&&this._leftArrow&&(this._rightArrow.style.visibility=\"hidden\",this._leftArrow.style.visibility=\"\"),this}},{init:function(el,config){var slider,result=!1;if(el instanceof HTMLElement)result={slideRight:(slider=new BamSlider(el,config)).slideRight,slideLeft:slider.slideLeft,autoplayStart:slider.startAutoplay,autoplayStop:slider.stopAutoplay};else if(el.length)for(var result=[],i=0;i<el.length;i++)el[i]instanceof HTMLElement&&(slider=new BamSlider(el[i],config),result.push({slideRight:slider.slideRight,slideLeft:slider.slideLeft,autoplayStart:slider.startAutoplay,autoplayStop:slider.stopAutoplay}));return result},initAgain:function(el){var result=!1;return result=el instanceof HTMLElement?{resize:new BamSlider(el)._resize()}:result}}});function SuggestionJs(){var $inputField,value,fieldConfig,clientY,mFillFieldsCallback,ajaxInstance=null,listId=\"[data-suggestlayer]\",$list=$(listId),focusNextFieldTimeout=null,onFocusTimeout=null;function selectItemAndFill($element){getSuggestSelectedItem().removeClass(\"tko-suggest-selected\"),$element.addClass(\"tko-suggest-selected\"),fillFieldsOnPage(),focusNextField($(\"[name=\"+$list.data(\"fieldName\")+\"]\"))}function appendToBody(){var $tmp,$body=$(\"body\");$body.children(\"[data-suggestlayer]\").length||($tmp=$($list[0]).detach(),$(listId).remove(),$body.append($tmp))}function getSuggestSelectedItem(){return $(\".tko-suggest-selected\")}function clearFields(data){data&&rsEach(data,function(k,v){getInputField(v).val(\"\")})}function deactivateFields(data){data&&rsEach(data,function(k,v){var $field=getInputField(v),dataBamSuggest=$field.data(\"bamSuggest\");$field.prop(\"readonly\",!0),BamMessageBroker.send(\"suggestionServiceDeactivatedField\",v),dataBamSuggest&&(dataBamSuggest.toggleFields&&deactivateFields(dataBamSuggest.toggleFields),dataBamSuggest.shaddowText&&dataBamSuggest.shaddowText.inactive&&$field.attr(\"placeholder\",dataBamSuggest.shaddowText.inactive))})}function focusNextField($this){hasFocusNextField($this)&&(clearTimeout(focusNextFieldTimeout),focusNextFieldTimeout=setTimeout(function(){var $tmpField=$this.parents(\"form\").find('input[name=\"'+$this.data(\"bamSuggest\").nextField+'\"]');$tmpField.prop(\"readonly\")&&$tmpField.prop(\"readonly\",!1),$tmpField.focus()},100))}function hasFocusNextField($this){return $this.data(\"bamSuggest\")&&void 0!==$this.data(\"bamSuggest\").nextField}function getInputField(v){return $(\"[name=\"+v+\"]\")}function fillFieldsOnPage(){var data=getSuggestSelectedItem().data(\"suggestionEntry\");null!=data&&$.each(data,function($tmpField,fieldValue){$tmpField=$('input[name=\"'+$tmpField+'\"]');void 0!==fieldValue&&(fieldValue=fieldValue.trim()),$tmpField.val(fieldValue),BamEvent.call(\"hide-error\",{},$tmpField),mFillFieldsCallback&&mFillFieldsCallback($tmpField)}),clearSuggestlist()}function fillFocusedAutocompleteField(){var data=getSuggestSelectedItem().data(\"suggestionEntry\");void 0!==data&&$.each(data,function(fieldName,fieldValue){void 0!==fieldValue&&(fieldValue=fieldValue.trim()),$('input[name=\"'+fieldName+'\"]').val(fieldValue)})}function clearSuggestlist(){$list.data(\"suggestlayer\").hasValidEntry=!1,$list.hide().children().remove(),$list.data(\"suggestlayer\").hasValidEntry=!1,$list.hide().data(\"fieldName\",void 0),$(document).off(\"click.suggestionlayer\",\"body\")}function isNotDesktopTouchDevice(){return\"ontouchstart\"in window&&!$(\"body\").hasClass(\"tko-device-desktop\")}return appendToBody(),BamEvent.register(\"suggestInput\",TkoRs.Debounce(function(event,element){1<$(listId).length&&appendToBody();var data;document.body.classList.contains(\"ie11\")&&(new TkoRs.URL).load().getQuery().exists(\"_submit\")?console.info(\"prevent IE11 input event on autosubmit\"):(value=($inputField=element).val(),function(fieldName){$list.data(\"fieldName\",fieldName)}($inputField.prop(\"name\")),function(data){fieldConfig=data}($inputField.data(\"bamSuggest\")),$list.css({left:$inputField.offset().left,top:$inputField.offset().top+$inputField.outerHeight()+6,width:$inputField.outerWidth()}),data={query:value,action:fieldConfig.action,thread:fieldConfig.thread,fieldName:$inputField.prop(\"name\")},void 0!==fieldConfig.additionalFieldData&&$.each(fieldConfig.additionalFieldData,function(ajaxKey,fieldName){data[ajaxKey]=getInputField(fieldName).val()}),2<=value.length?element.data(\"insertedSuggestionItemViaTabShift\")?element.data(\"insertedSuggestionItemViaTabShift\",!1):(null!==ajaxInstance&&ajaxInstance.abort(),(ajaxInstance=BamThreadLoader(\"Autocomplete\").run(data)).done(function(result){var response=result.data.autocomplete;404!==result.status&&void 0!==response.list&&!0===$inputField.is(\":visible\")?function(response){$list.html(function(result){var html=\"\";return result.forEach(function(item,index){var attr=' data-suggestion-entry=\"'+item.fillFields+'\"';attr+=' data-bam-event-mouseenter=\"suggestListMouseEnter\"',isNotDesktopTouchDevice()?(attr+=' data-bam-event-touchstart=\"detectTouchStart\"',attr+=' data-bam-event-touchend=\"detectTouchEnd\"'):attr+=' data-bam-event-touchend-mouseup=\"suggestListClick\"',0===index&&(attr+=' class=\"tko-suggest-selected\"'),html+=\"<a \"+attr+\">\"+item.listItem+\"<\/a>\"}),html}(response)),$list.data(\"suggestlayer\").hasValidEntry=!0,$list.data(\"suggestlayer\").hasValidEntry&&($list.show(),$(document).on(\"click.suggestionlayer\",\"body\",function(e){$(e.target).parents(\"[data-suggestlayer]\").length||(fillFieldsOnPage(),clearSuggestlist())}))}(response.list):clearSuggestlist()})):value.length<2&&(clearSuggestlist(),clearFields(element.data(\"bamSuggest\").clearFields),deactivateFields(element.data(\"bamSuggest\").toggleFields)))},300)),BamEvent.register(\"suggestKeydown\",function(event,element){var keycode=event.keyCode||event.which,tabShift=9===keycode&&!event.originalEvent.shiftKey;({13:1,40:1,38:1}[keycode]||tabShift)&&(13===keycode||tabShift?((13===keycode||tabShift&&hasFocusNextField(element))&&event.preventDefault(),element.data(\"insertedSuggestionItemViaTabShift\",!0),fillFieldsOnPage(),focusNextField(element)):38===keycode?(event.preventDefault(),function(){var $current=getSuggestSelectedItem();0<$current.siblings().length&&($current.removeClass(\"tko-suggest-selected\"),($current.is(\":first-child\")?$(\"[data-suggestion-entry]:last-child\"):$current.prev()).addClass(\"tko-suggest-selected\"))}(),fillFocusedAutocompleteField()):40===keycode&&(event.preventDefault(),function(){var $current=getSuggestSelectedItem();0<$current.siblings().length&&($current.removeClass(\"tko-suggest-selected\"),($current.is(\":last-child\")?$(\"[data-suggestion-entry]:first-child\"):$current.next()).addClass(\"tko-suggest-selected\"))}(),fillFocusedAutocompleteField()))}),BamEvent.register(\"suggestFocus\",function(event,element){$inputField=element,clearTimeout(onFocusTimeout),onFocusTimeout=setTimeout(function(){0===$inputField.val().length&&(clearFields($inputField.data(\"bamSuggest\").clearFields),deactivateFields($inputField.data(\"bamSuggest\").toggleFields))},100)}),BamEvent.register(\"suggestBlur\",function(event,element){(0<element.val().length?function(data){data&&rsEach(data,function(k,v){var $field=getInputField(v);$field.prop(\"readonly\",!1),BamMessageBroker.send(\"suggestionServiceActivatedField\",v),$field.data(\"bamSuggest\")&&$field.data(\"bamSuggest\").shaddowText&&$field.attr(\"placeholder\",$field.data(\"bamSuggest\").shaddowText.active)})}:deactivateFields)(element.data(\"bamSuggest\").toggleFields)}),BamEvent.register(\"suggestListMouseEnter\",function(event,$element){getSuggestSelectedItem().removeClass(\"tko-suggest-selected\"),$element.addClass(\"tko-suggest-selected\")}),BamEvent.register(\"suggestListClick\",function(event,$element){event.stopPropagation(),!1===isNotDesktopTouchDevice()&&event.preventDefault(),selectItemAndFill($element)}),isNotDesktopTouchDevice()&&(BamEvent.register(\"detectTouchStart\",function(event){clientY=event.originalEvent.touches[0].clientY}),BamEvent.register(\"detectTouchEnd\",function(event,$element){var deltaY=event.originalEvent.changedTouches[0].clientY-clientY;event.preventDefault(),Math.abs(deltaY)<20&&selectItemAndFill($element)})),{setFillFieldsCallback:function(fn){return mFillFieldsCallback=fn,this},__destruct:function(){return clearSuggestlist(),this}}}BamService.register(\"SuggestionJs\",SuggestionJs);BamService.register(\"UnifiedLogin\",function(){return{saveState:function(data){BamThreadLoader(\"Sso\/UnifiedLogin\").run({data:encodeURIComponent(JSON.stringify(data))}).done(function(response){var redirectPath;\"loggedin\"!==data.STATE&&!data.STATE.match(\/^[a-f0-9]{32}$\/i)||((redirectPath=(new TkoRs.URL).load()).getQuery().set(\"points\",data.USERPOINTS),redirectPath=redirectPath.toString(),BamThreadLoader(\"Sso\").run(),BamHistory.replace(redirectPath),locationReload())})}}}),BamService.get(\"UnifiedLogin\");!function(){function VisibilityManager(){this._data={}}VisibilityManager.prototype.addData=function(data){var keys,that;return Object.assign?Object.assign(this._data,data):(keys=Object.keys(data),that=this,keys.forEach(function(key){that._data[key]=data[key]})),this},VisibilityManager.prototype.getData=function(){return this._data},VisibilityManager.prototype.check=function(){var parser=new BamSententialLogicParser;return parser.setInputData(this.getData()),document.querySelectorAll(\"[data-bam-rowvisibility]\").forEach(function(ele){parser.getResultForRule(JSON.parse(ele.dataset.bamRowvisibility))?\"\"!==ele.style.display&&(ele.style.display=\"\"):\"none\"!==ele.style.display&&(ele.style.display=\"none\")}),this},BamService.register(\"VisibilityManager\",VisibilityManager)}();!function(window,navigator){var workerExists;try{workerExists=\"function\"==typeof Blob}catch(Error){workerExists=!1}workerExists&&-1<navigator.userAgent.indexOf(\"Google Page Speed Insights\")||-1<navigator.userAgent.indexOf(\"Chrome-Lighthouse\")?window.BamWorker=function(){return{run:function(){}}}:window.BamWorker=workerExists?function(callbackFunction){var blob=new Blob([\"(\",function(){self.onmessage=function(e){self.postMessage(e.data)}}.toString(),\")()\"],{type:\"text\/javascript\"}),workerInstance=new Worker(URL.createObjectURL(blob));return workerInstance.onmessage=function(e){callbackFunction(e.data)},{run:function(data){workerInstance.postMessage(data)}}}:function(callbackFunction){return{run:function(data){callbackFunction(data)}}}}(window,navigator);var rsTimeOut=function(){var _stack={};return function(key,fn,time){clearTimeout(_stack[key]),_stack[key]=setTimeout(fn,time)}}(),BamForm=function(){var _originFormData={};function _changeCallback(event){BamService.get(\"VisibilityManager\").addData(BamForm(event.target).toArray()),BamService.get(\"VisibilityManager\").check()}function _Iterator(entryCnt){var _i=0;this.isLast=function(){return entryCnt-1===_i},this.next=function(){_i++}}function _each(inputData,fn){for(var keys,val,key,inputIsArray=inputData instanceof Array,iMax=(inputIsArray?inputData:keys=Object.keys(inputData)).length,iterator=new _Iterator(iMax),i=0;i<iMax;i++)val=inputData[key=inputIsArray?i:keys[i]],fn.call(iterator,key,val),iterator.next()}document.querySelectorAll(\"[data-bam-form]\").forEach(function(value){value.dataset.bamForm&&(_originFormData[value.dataset.bamForm]=bamFormToArray(value),BamService.get(\"VisibilityManager\").addData(_originFormData[value.dataset.bamForm]),value._bamFormChange||(value.addEventListener(\"change\",_changeCallback),value._bamFormChange=1))}),BamService.get(\"VisibilityManager\").check(),document.addEventListener(\"click\",function(ev){for(var submitElement,element=ev.target;element&&9!==element.nodeType;){if(1===element.nodeType&&((\"submit\"===element.type||element.dataset&&\"submit\"===element.dataset.type)&&(submitElement=element),element.dataset&&element.dataset.bamBindForm))return void(submitElement&&function(ev,submitElement,form){ev.stopPropagation(),ev.preventDefault();form=BamForm(form.dataset.bamBindForm);_doFormXHRSubmit(form,bamInjectFieldDataToArray(submitElement,form.toArray()))}(ev,submitElement,element));element=element.parentNode}});var formFillHelper={fillValues:function(element,newData){_fill(_createNameMap(element),newData)},fillSubmittedValues:function(element,newData){!function _fillSubmitted(nameMap,newData){_each(nameMap,function(key,field){var newFieldData;void 0!==newData?(newFieldData=newData[key],\"object\"!=typeof field||field instanceof HTMLElement?!field.name||field.disabled||0<[\"file\",\"reset\",\"submit\",\"button\"].indexOf(field.type)||(void 0!==newFieldData?\"radio\"===field.type?field._radioGroup&&_each(field._radioGroup,function(key,element){element.dataset.bamFormSubmittedValue=newFieldData}):field.dataset.bamFormSubmittedValue=newFieldData:delete field.dataset.bamFormSubmittedValue):_fillSubmitted(field,newFieldData)):delete field.dataset.bamFormSubmittedValue})}(_createNameMap(element),newData)}};function _fill(nameMap,newData){var field;_each(newData,function(key,newFieldData){nameMap[key]?\"object\"!=typeof newFieldData?!(field=nameMap[key]).name||field.disabled||0<[\"file\",\"reset\",\"submit\",\"button\"].indexOf(field.type)||(\"checkbox\"===field.type?(\"boolean\"!=typeof newFieldData&&(newFieldData=field.value===newFieldData),field.checked=newFieldData):\"radio\"===field.type?field._radioGroup&&_each(field._radioGroup,function(key,element){element.checked=newFieldData===element.value}):(field.value=newFieldData,\"\"!==field.value&&(field.readOnly=!1))):function(tmpData,htmlElementArray){if(tmpData instanceof Array){var i,j,jMax,option,preparedData=[],referenceSelect=null,iMax=tmpData.length;if(0!==iMax){for(i=0;i<iMax;i++){if(!(htmlElementArray[i]instanceof HTMLSelectElement)||\"select-multiple\"!==htmlElementArray[i].type)return;if((referenceSelect=null===referenceSelect?htmlElementArray[i]:referenceSelect)!==htmlElementArray[i])return;preparedData.push(tmpData[i].toString())}for(j=0,jMax=referenceSelect.options.length;j<jMax;j++)(option=referenceSelect.options[j]).selected=-1<preparedData.indexOf(option.value);return 1}}}(newFieldData,nameMap[key])||_fill(nameMap[key],newFieldData):console.info(\"UNDEFINED KEY \"+key)})}function _createNameMap(form){for(var j,jMax,field,max2,dataReference,nameKeys,fieldName,i1=0,i2=0,elements=_getAllFormElements(form),max1=elements.length,data={},i1=0;i1<max1;i1++)if(!(!(field=elements[i1]).name||field.disabled||0<[\"file\",\"reset\",\"submit\",\"button\"].indexOf(field.type))){var value=field,tmpData=[];if(\"select-multiple\"===field.type)for(j=0,jMax=field.options.length;j<jMax;j++)field.options[j],tmpData.push([field.name,value]);else tmpData.push([field.name,value]);for(var x=0;x<tmpData.length;x++)for(fieldName=tmpData[x][0],value=tmpData[x][1],dataReference=data,i2=0,max2=(nameKeys=fieldName.split(\"[\")).length;i2<max2;i2++){var radioRef,key=nameKeys[i2].trim();key=0<i2?key.substring(0,key.length-1).trim():key.replace(\/ \/g,\"_\"),key=bamDetermineKeyForObject(dataReference,key),i2===max2-1?(\"radio\"===value.type&&(-1===(radioRef=dataReference[key]&&\"radio\"===dataReference[key].type?dataReference[key]._radioGroup||[]:value._radioGroup||[]).indexOf(value)&&radioRef.push(value),value._radioGroup=radioRef),dataReference[key]=value):(void 0===dataReference[key]&&(dataReference[key]={}),dataReference=dataReference[key])}}return data}var _fillForm=formFillHelper.fillValues;function _getAllFormElements(form){var i,maps=[],bindings=BamForm(form).getBindings(),iMax=bindings.length;for(maps.push(Array.from(form.elements)),i=0;i<iMax;i++)maps.push([bindings[i]],Array.from(bindings[i].querySelectorAll('input,select,textarea,[data-name][data-checked][data-type=\"submit\"]')));return maps.concat.apply([],maps)}function _globalSubmitCallback(ev){void 0!==ev.target.dataset.bamForm&&(ev.preventDefault(),BamForm(ev.target).submit())}function _doFormXHRSubmit(form,submitData){!0!==form._submitInProgress&&(form._submitInProgress=!0,form.call(\"submit\",submitData),BamThreadLoader(\"V2.FormValidate\").run(submitData,\"POST\").done(BamForm.handleXhrResponse(form,submitData)))}function _submitCallback(form){\"form\"===form.target.nodeName.toLowerCase()&&(form.stopPropagation(),form.preventDefault(),_doFormXHRSubmit(form=BamForm(this),form.toArray()))}function BamForm(name){if(!(this instanceof BamForm)){if(name instanceof HTMLElement)if(\"form\"!==name.nodeName.toLowerCase())if(name._bamForm)name=name._bamForm;else for(var parent=name.parentNode;parent&&9!==parent.nodeType;){if(1===parent.nodeType&&\"form\"===parent.nodeName.toLowerCase()){name._bamForm=parent.dataset.bamForm,name=parent.dataset.bamForm;break}parent=parent.parentNode}else name=name.dataset.bamForm;return BamSingletonInstance(BamForm,name,name)}this._fields={},this._name=\"\",this._fnStack={},this._viewErrorHandle=null,this._submitInProgress=!1}return BamForm.handleXhrResponse=function(form,submitData){return function(response){var errorSuccessCallbackResult,data;form._submitInProgress=!1,form.call(\"done\",response),(response=new FormResponse(response)).isError()&&(errorSuccessCallbackResult=form.call(\"error\",response)),response.isValid()&&response.hasSessionStorageData()&&(data=response.getSessionStorageData(),BamParameterSessionStorage.handleFormResponseObject(data)),response.isValid()&&(formFillHelper.fillSubmittedValues(form.getObject(),submitData),errorSuccessCallbackResult=form.call(\"success\",response)),!1!==errorSuccessCallbackResult&&form.getViewErrorHandle().displayOrHideErrors(response),response.hasRedirectTarget()&&(window.location.href=response.getRedirectTarget())}},BamForm.prototype={exists:function(){return null!==document.querySelector('[data-bam-form=\"'+this._name+'\"]')},getObject:function(){var ele=document.querySelector('[data-bam-form=\"'+this._name+'\"]');if(null!==ele)return ele._bamForm||(ele._bamForm=1,ele.addEventListener(\"submit\",_submitCallback)),ele._bamFormChange||(ele.addEventListener(\"change\",_changeCallback),ele._bamFormChange=1),ele;console.error(\"Form \"+this._name+\" not exists\")},getBindings:function(){return document.querySelectorAll('[data-bam-bind-form=\"'+this._name+'\"]')},_init:function(name){return this._name=name,document.querySelector('[data-bam-form=\"'+this._name+'\"]')&&void 0===_originFormData[name]&&(_originFormData[name]=this.toArray()),this},serialize:function(){return bamSerialize(this.toArray())},toArray:function(){return bamFormToArray(_getAllFormElements(this.getObject()))},resetUserInput:function(){this.fill(_originFormData[this.getName()])},fill:function(data){_fillForm(this.getObject(),data)},resetToDefaults:function(){return function(form){for(var field,i=0,elements=_getAllFormElements(form),max1=elements.length,i=0;i<max1;i++)!(field=elements[i]).name||field.disabled||0<[\"file\",\"reset\",\"submit\",\"button\"].indexOf(field.type)||\"1\"!==field.dataset.bamFormResettableDefaultValue||(\"radio\"===field.type||\"checkbox\"===field.type?field.checked=field.value===field.dataset.bamFormDefaultValue:field.value=field.dataset.bamFormDefaultValue)}(this.getObject()),this},resetToBPM:function(){throw new Error(\"implement me\")},getData:function(){return this.toArray()},getField:function(fieldName){var field;return this._fields[fieldName]||(null===(field=this.getObject().querySelector('[name=\"'+fieldName+'\"]'))&&(field=this.getObject().querySelector('[data-name=\"'+fieldName+'\"]')),this._fields[fieldName]=new BamFormField(this,field)),this._fields[fieldName]},submit:function(){var that=this;setTimeout(function(){var submitEvent=document.createEvent(\"Event\");submitEvent.initEvent(\"submit\",!1,!0),that.getObject().dispatchEvent(submitEvent)})},getRadio:function(name,value){return this.getObject().querySelector('[name=\"'+name+'\"][value=\"'+value+'\"]')},getRadios:function(name){return this.getObject().querySelectorAll('[name=\"'+name+'\"]')},getIdentifier:function(){return this.getObject().querySelector('input[type=\"hidden\"][value=\"submit\"]').name},partialSubmit:function(fieldName,ajax){if(!this._submitInProgress){var identifier=this.getIdentifier();if((ajax=ajax||{})[fieldName]=this.getField(fieldName).getValue(),ajax[identifier]=\"submit\",!(ajax[identifier+\"partial\"]=\"yes\")!==this.call(\"beforeSubmit.partial\")){var form=this,ajax=BamThreadLoader(\"V2.FormValidate\").run(bamSerialize(ajax),\"POST\");return form.call(\"submit.partial\"),ajax.done(function(response){form.call(\"done.partial\",response),!1!==((response=new FormResponse(response)).isError()?form.call(\"error.partial\",response):form.call(\"success.partial\",response))&&form.getViewErrorHandle().displayOrHideErrors(response,!1)}),!1}}},onDone:function(fn){return 0<arguments.length?this.on(\"done\",fn):this.call(\"done\",fn)},onDonePartialSubmit:function(fn){return 0<arguments.length?this.on(\"done.partial\",fn):this.call(\"done.partial\",fn)},onSubmit:function(fn){return 0<arguments.length?this.on(\"submit\",fn):this.call(\"submit\",fn)},onSuccess:function(fn){return 0<arguments.length?this.on(\"success\",fn):this.call(\"success\",fn)},onSuccessPartialSubmit:function(fn){var type=\"success.partial\";return 0<arguments.length?this.on(type,fn):this.call(type,fn)},onError:function(fn){return 0<arguments.length?this.on(\"error\",fn):this.call(\"error\",fn)},onErrorPartialSubmit:function(fn){var type=\"error.partial\";return 0<arguments.length?this.on(type,fn):this.call(type,fn)},getName:function(){return this._name},hasChanges:function(){return JSON.stringify(_originFormData[this.getName()])!==JSON.stringify(this.toArray())},on:function(type,fn){return this._fnStack[type]||(this._fnStack[type]=[]),this._fnStack[type].push(fn),this},call:function(type){\"success\"===type&&(_originFormData[this.getName()]=this.toArray());var returnValue,that=this,arg=Array.from(arguments).slice(1);return this._fnStack[type]&&this._fnStack[type].map(function(fn){!1===fn.apply(that,arg)&&(returnValue=!1)}),returnValue},getViewErrorHandle:function(){return this._viewErrorHandle||(this._viewErrorHandle=new BamFormErrorHandle(this))}},BamForm.bindSubmit=function(){BamForm.bindSubmit=new Function,document.addEventListener(\"submit\",_globalSubmitCallback)},BamForm.toArray=function(element){var form;return element instanceof HTMLFormElement||((form=document.createElement(\"form\")).append(element.cloneNode(!0)),element=form),bamFormToArray(element)},BamForm}();var BamFormErrorHandle=function(){function _getRadioGroup(element){for(var parent=element.parentNode;parent&&9!==parent.nodeType;){if(1===parent.nodeType&&parent.classList.contains(\"tko-radio-group\"))return parent;parent=parent.parentNode}return null}function BamFormErrorHandle(form){this._form=form}return BamFormErrorHandle.prototype={displayOrHideErrors:function(response,autoScroll){var fieldsData=response.getFieldData(),that=this;void 0!==fieldsData&&Object.keys(fieldsData).forEach(function(errorField){var fieldData=fieldsData[errorField],field=that._form.getField(errorField);void 0!==fieldData.data&&field.setValue(fieldData.data);var radioGroup,errorField=field.getErrorTarget();errorField&&(fieldData.error?(errorField.innerText=fieldData.msg,errorField.style.display=\"block\",field.getObject().classList.remove(\"tko-valid-field\"),field.getObject().classList.add(\"tko-error-field\"),field.getObject().classList.contains(\"tko-radio\")?((radioGroup=_getRadioGroup(field.getObject())).parentElement.classList.add(\"tko-radiobutton-wrapper-error\"),Array.from(radioGroup.querySelectorAll(\".tko-radio-wrapper\")).forEach(function(radioField){radioField.classList.remove(\"tko-valid-field\"),radioField.classList.add(\"tko-error-field\"),radioField.querySelector(\".tko-radio\").classList.add(\"tko-error-field\")})):(field.getObject().classList.add(\"tko-error-field\"),field.getObject().classList.remove(\"tko-valid-field\"))):(errorField.innerText=\"\",errorField.style.display=\"none\",field.getObject().classList.remove(\"tko-error-field\"),\"\"!==field.getObject().val&&field.getObject().classList.add(\"tko-valid-field\"),field.getObject().classList.contains(\"tko-radio\")?((radioGroup=_getRadioGroup(field.getObject())).parentElement.classList.remove(\"tko-radiobutton-wrapper-error\"),Array.from(radioGroup.querySelectorAll(\".tko-radio-wrapper\")).forEach(function(radioField){radioField.classList.remove(\"tko-error-field\"),radioField.classList.add(\"tko-valid-field\")})):field.getObject().classList.remove(\"tko-error-field\")))})}},BamFormErrorHandle}();var BamFormField=function(){function BamFormField(form,fieldElement){this._form=form,this._field=fieldElement}return BamFormField.prototype={setChecked:function(val){return this._field.checked=val,this},getObject:function(){return this._field},setValue:function(value){this._field.value=value},getValue:function(){return this._field.value},getErrorTargetName:function(){return this._field.dataset.bamErrorTarget||this._field.id},getErrorTarget:function(){return this._form.getObject().querySelector('[data-bam-error-unicorn=\"'+this.getErrorTargetName()+'\"]')}},BamFormField}();var FormResponse=function(){function FormResponse(response){this._response=response}return FormResponse.prototype={_forceVaild:null,setValid:function(val){this._forceVaild=val},isSubmitted:function(){return void 0!==this._response.form&&void 0!==this._response.form.error},isError:function(){return null!==this._forceVaild?this._forceVaild:this._response.isError()||!0===this._response.getData(\"form\/error\")},isValid:function(){return null!==this._forceVaild?this._forceVaild:this._response.isValid()&&!0!==this._response.getData(\"form\/error\")},getFieldData:function(fieldName){var key=\"fields\";return void 0!==fieldName&&(key+=\"\/\"+fieldName),this._response.getData(key)},getErrorFields:function(){return this._response.getErrors()},loadThreads:function(){return this._response.getData(\"loadThreads\")},hasRedirectTarget:function(){var target=this._response.getData(\"redirectTarget\");return null!==target&&\"\"!==target&&void 0!==target},getRedirectTarget:function(){return this._response.getData(\"redirectTarget\")},hasSessionStorageData:function(){var data=this._response.getData(\"formValidSessionStorageCallback\");return null!=data&&\"\"!==data},getSessionStorageData:function(){return this._response.getData(\"formValidSessionStorageCallback\")}},FormResponse}();\n            \n            BamService.register(\"GoogleAnalytics\",function(){return new Function});\n            BamAppVars.deactivateTracking = true;\n            whenClassesLoaded();\n\n            function appStart() {\n                whenAppStarts();\n                BamForm.bindSubmit();\n\n                Check24.setDomain(BamAppVars.cookieDomain.substr(1)),function(){\"use strict\";BamTip.initialize({flipBehavior:\"clockwise\",animation:\"fade\",animationDuration:250,preferBestPlacement:!0,interactive:!0,arrow:!0,distance:15})}(),function(window,$){window.BamEvent=new function(){var stack={};return{unbindView:function(){return $(document).off(\".view\"),this},unbindMain:function(){return $(document).off(\".main\"),this},register:function(name,cb){return stack[name]=cb,this},bindView:function(event,instance,cb){return $(document).on(event+\".view\",instance,cb),this},bindMain:function(event,instance,cb){return $(document).on(event+\".main\",instance,cb),this},call:function(name,event,object){if(!stack[name])throw new Error(\"BamEvent \"+name+\" not exists!!\");return stack[name](event,object)}}};for(var events=[\"click\",\"input\",\"blur\",\"change\",\"focus\",\"keydown\",\"keypress\",\"keyup\",\"mousedown\",\"mouseup\",\"touchend\",\"touchstart\",\"touchstart mousedown\",\"touchend mouseup\",\"submit\",\"mouseenter\",\"mouseleave\",\"mousemove\",\"paste\",\"mouseover\"],i=0,count=events.length;i<count;i++)!function(ev){var evBam=ev.replace(\" \",\"-\");$(document).on(ev,\"[data-bam-event-\"+evBam+\"]\",function(event){var callback=$(this).data(\"bamEvent\"+evBam.ucFirst()).split(\"|\").rsFilterEmpty(),element=$(this);rsEach(callback,function(k,result){if(\"preventDefault\"!==result){result=BamEvent.call(result,event,element);return(!result||!result.stop)&&void 0}event.preventDefault()})}).on(ev,\"[data-bam-event-\"+evBam+\"-partialhash]\",function(event){var hash=$(this).data(\"bamEvent\"+evBam.ucFirst()+\"Partialhash\");TkoRs.Location.PartialHash.push(hash,$(this))})}(events[i])}(window,$),function($){var attribute=\"data-bam-tpl-if\";$.fn.bamShow=function(){return $(this).attr(attribute,\"true\")},$.fn.bamHide=function(){return $(this).attr(attribute,\"false\")},$.fn.bamToggle=function(){return $(this).attr(attribute,\"true\"===$(this).attr(attribute)?\"false\":\"true\")}}(jQuery),BamEvent.register(\"hide-error\",function(event,element){var errorUnicornTarget;element.hasClass(\"tko-error-field\")&&(element.removeClass(\"tko-error-field\"),void 0===(errorUnicornTarget=element.data(\"bamErrorTarget\"))?(element.parents(\".tko-form-row-element\").find(\"[data-bam-error-unicorn]\").hide(),element.parents(\".tko-form-row\").find(\"[data-bam-error-unicorn]\").hide(),element.parents(\".tko-helptext-trigger\").find(\"[data-bam-error-unicorn]\").hide()):(element.parents(\".tko-form-row-element\").find('[data-bam-error-unicorn=\"'+errorUnicornTarget+'\"]').hide(),element.parents(\".tko-form-row\").find('[data-bam-error-unicorn=\"'+errorUnicornTarget+'\"]').hide(),element.parents(\".tko-helptext-trigger\").find('[data-bam-error-unicorn=\"'+errorUnicornTarget+'\"]').hide()),element.hasClass(\"tko-radio\")?(element.closest(\".tko-radio-group\").find(\".tko-error-field\").removeClass(\"tko-error-field\"),element.closest(\".tko-radiobutton-wrapper\").removeClass(\"tko-radiobutton-wrapper-error\")):element.hasClass(\"tko-select\")?element.parents(\".tko-select-wrapper\").removeClass(\"tko-error-field\"):element.hasClass(\"tko-checkbox\")&&element.parents(\".tko-checkbox-wrapper\").removeClass(\"tko-error-field\"))}),function(){function typeTelDateRestriction(event){var regexObj=new RegExp(\"[0-9]|\\\\ |,|\\\\.|\\\\+|\\\\-|\\\\\/|Backspace|Tab|Shift|Escape|Delete|Del|Home|End|Insert|PageUp|PageDown|Enter|Pause|(Up|Down|Left|Right)|Arrow(Up|Down|Left|Right)|F[1-9][1-2]?\");if(event.key&&!event.ctrlKey&&!event.metaKey&&!1===regexObj.test(event.key))return event.preventDefault(),!1}BamEvent.register(\"typeTelRestriction\",typeTelDateRestriction).register(\"typeDateRestriction\",typeTelDateRestriction)}(BamEvent),window.TkoRs.Debounce=function(fn,time,doNow){var timeout;return function(){var context=this,args=arguments,callNow=doNow&&!timeout;clearTimeout(timeout),timeout=setTimeout(function(){timeout=null,doNow||fn.apply(context,args)},time),callNow&&fn.apply(context,args)}},function(){var config={c24api_areacode:function(event,element){return\"change\"===event.type}};config.c24api_areacode=function(event){return\"focusout\"===event.type};var validationEvents=\"blur.bamAvNs click.bamAvNs input.bamAvNs change.bamAvNs\",formElements=\"[data-bam-form] [data-bam-error-target]\";$(document).off(validationEvents,formElements).on(validationEvents,formElements,function(event){var form=BamSelector(this).parents(\"form\"),timeout=event.currentTarget.dataset.bamFormValidateAfterMs||0;TkoRs.Debounce(function(event,conf,that){BamService.get(\"VisibilityManager\").check();var addData,name=that.name,conf=conf[name];conf&&(addData=conf(event,that))&&(\"object\"!=typeof addData&&(addData={}),BamForm(form[0]).partialSubmit(name,addData))},timeout)(event,config,this)}),whenClassesLoaded(function(){var tracking=!0;!0===(tracking=BamAppVars&&!0===BamAppVars.deactivateTracking?!1:tracking)&&(BamService.get(\"GoogleTagManager\").handle(),BamService.get(\"GoogleAnalytics\"),BamThreadLoader(\"Tracking\/Main\").run({type:\"visit\"}),BamThreadLoader(\"Tracking\/Generaltracking\").run().done(function(e){var debug=BamAppVars.env.isDebug;if(e.message&&\"match\"===e.message){var rawHtmlData=\"\",production=BamAppVars.env.isProduction;debug&&(console.info(\"Generaltracking URLs\"),console.info(\"Env production \"+(production?\"yes\":\"no\")));for(var i=0,max=e.data.gt.length;i<max;i++){var url=function(data){var url=\"https:\/\/asset42.check24.de\/gif\/pid\/24\/product\/dsl\/sid\/\"+BamAppVars.sessionId+\"\/tid\/\"+BamAppVars.tid1+\"\/deviceoutput\/\"+BamAppVars.deviceoutput;return data.siteId&&(url+=\"\/site_id\/\"+data.siteId),data.areaId&&(url+=\"\/area_id\/\"+data.areaId),data.actionId&&(url+=\"\/action_id\/\"+data.actionId),url+=\"\/info.gif\"}(e.data.gt[i]);debug&&console.info(url),rawHtmlData+='<img src=\"'+url+'\">'}debug&&console.info(\"Generaltracking End\"),production&&(document.createElement(\"div\").innerHTML=rawHtmlData)}else debug&&console.info(\"No gt pixel found\")}))})}();\nBamWireframe={handleGratbar:function(){},on:function(){}};\n\n                BamThreadLoader(\"DeviceDetection\").run().done(function(response){if(200===response.status&&response.data&&response.data.cssClass){var homeTeaserWrapper=document.querySelector(\".tko-hometeaser\");if(null!==homeTeaserWrapper)for(var cssClasses=response.data.cssClass.split(\" \"),i=0;i<cssClasses.length;i++)\"\"!==cssClasses[i]&&homeTeaserWrapper.classList.add(cssClasses[i])}});\n!function(){BamThreadLoader(\"Bpm\/Get\").done(function(response){response.data&&response.data.prefill&&BamForm(\"accheck\").fill(response.data.prefill)});const errorBox=document.querySelector(\".tko-error-container\"),yellowBox=document.querySelector(\".tko-form-row\");BamForm(\"accheck\").onError(function(){errorBox.style=\"display: block;\",yellowBox.style=\"border-radius: 0;\"}).onSuccess(function(){errorBox.style=\"display: none;\",yellowBox.style=\"border-radius: 4px;\"}),BamEvent.register(\"checkErrors\",function(){var formErrorMessages=BamForm(\"accheck\").getObject().querySelectorAll(\"[data-bam-error-unicorn]\"),errorCount=0;formErrorMessages.forEach(function(element,index){\"block\"===element.style.display&&errorCount++}),0===errorCount&&(errorBox.style=\"display: none;\",yellowBox.style=\"border-radius: 4px;\")})}();\nBamEvent.register(\"clear-input\",function(event,element){event.preventDefault(),element.children().css(\"visibility\",\"hidden\"),element.prev().val(\"\").focus()}).register(\"input-focus-show-x\",function(event,element){\"\"!==element.val()?element.next().children().css(\"visibility\",\"visible\"):element.next().children().css(\"visibility\",\"hidden\")}).register(\"input-blur-hide-x\",function(event,element){element.next().children().css(\"visibility\",\"hidden\")}).register(\"show-delete-x-after-input\",function(event,element){\"\"!==element.val()?element.next().children().css(\"visibility\",\"visible\"):element.next().children().css(\"visibility\",\"hidden\")});\nBamEvent.register(\"clear-input\",function(event,element){event.preventDefault(),element.children().css(\"visibility\",\"hidden\"),element.prev().val(\"\").focus()}).register(\"input-focus-show-x\",function(event,element){\"\"!==element.val()?element.next().children().css(\"visibility\",\"visible\"):element.next().children().css(\"visibility\",\"hidden\")}).register(\"input-blur-hide-x\",function(event,element){element.next().children().css(\"visibility\",\"hidden\")}).register(\"show-delete-x-after-input\",function(event,element){\"\"!==element.val()?element.next().children().css(\"visibility\",\"visible\"):element.next().children().css(\"visibility\",\"hidden\")});\nBamEvent.register(\"clear-input\",function(event,element){event.preventDefault(),element.children().css(\"visibility\",\"hidden\"),element.prev().val(\"\").focus()}).register(\"input-focus-show-x\",function(event,element){\"\"!==element.val()?element.next().children().css(\"visibility\",\"visible\"):element.next().children().css(\"visibility\",\"hidden\")}).register(\"input-blur-hide-x\",function(event,element){element.next().children().css(\"visibility\",\"hidden\")}).register(\"show-delete-x-after-input\",function(event,element){\"\"!==element.val()?element.next().children().css(\"visibility\",\"visible\"):element.next().children().css(\"visibility\",\"hidden\")});\nBamEvent.register(\"button-spinner\",function(event,element){element.bamButtonSpinnerStart()});\nBamService.get(\"SuggestionJs\");\n                afterViewJsExecute();\n            }\n\n            var appStartInterval = setInterval(function() {\n\n                if (typeof window.Check24 !== \"undefined\" && typeof window.$ !== \"undefined\") {\n                    clearInterval(appStartInterval);\n                    appStart()\n                }\n            }, 100);\n\n            var jqueryInterval = setInterval(function() {\n\n                if (typeof window.$ !== \"undefined\") {\n                    $.fn.closeSelect=function(){this[0].style.display=\"none\";var that=this[0];setTimeout(function(){that.style.display=\"block\"},10)},$.fn.isVisibleInViewport=function(fullVisibility){if(!1===this.is(\":visible\"))return!1;fullVisibility=void 0===fullVisibility||fullVisibility;var rightIsVisible=this.offset(),topIsVisible=rightIsVisible.top,bottom=rightIsVisible.top+this.outerHeight(),leftIsVisible=rightIsVisible.left,right=rightIsVisible.left+this.outerWidth(),topPos=$(window).scrollTop(),bottomIsVisible=topPos+$(window).height(),leftPos=$(window).scrollLeft(),rightIsVisible=leftPos+$(window).width(),topIsVisible=topPos<=topIsVisible&&topIsVisible<=bottomIsVisible,bottomIsVisible=topPos<=bottom&&bottom<=bottomIsVisible,leftIsVisible=leftPos<=leftIsVisible&&leftIsVisible<=rightIsVisible,rightIsVisible=leftPos<=right&&right<=rightIsVisible;return fullVisibility?topIsVisible&&bottomIsVisible&&leftIsVisible&&rightIsVisible:(topIsVisible||bottomIsVisible)&&(leftIsVisible||rightIsVisible)},$.fn.scrollTo=function(options){(options=options||{}).duration=options.duration||0,options.offset=options.offset||0,options.center=!!options.center;var windowHeight=-1*options.offset;if(0===this.length)return this;var additionalOffset,scrollPos=0;return this[0]!==window&&this[0]!==document&&(scrollPos=this.offset().top),scrollPos+=windowHeight,!options.center||(additionalOffset=this.outerHeight())<(windowHeight=$(window).outerHeight())&&((additionalOffset=windowHeight\/2-additionalOffset\/2)>options.offset&&(scrollPos-=additionalOffset-options.offset)),$(\"html, body\").animate({scrollTop:scrollPos},options.duration),this},$.fn.centerVertical=function(_minTop,refTop,recalcParentElementPorsition){var _innerHeight=window.innerHeight,_result=_innerHeight\/2;if(!_minTop)return this[0].style.top=_result.toString()+\"px\",this;refTop=refTop||0,recalcParentElementPorsition=recalcParentElementPorsition||!1,_minTop._bamCachedBoundingRect&&!recalcParentElementPorsition||(_refBottom=_minTop.getBoundingClientRect(),_minTop._bamCachedBoundingRect={top:_refBottom.top+window.pageYOffset,bottom:_refBottom.bottom+window.pageYOffset,left:_refBottom.left+window.pageXOffset,right:_refBottom.right+window.pageXOffset,width:_refBottom.width});var _refBottom=_minTop._bamCachedBoundingRect.bottom-window.pageYOffset,_minTop=_minTop._bamCachedBoundingRect.top-window.pageYOffset;return _refBottom<_innerHeight?(_result=_refBottom\/2,(_refBottom=_refBottom-this.height()\/2-refTop)<_result&&(_result=_refBottom)):0<_minTop&&((_result=(_innerHeight-_minTop)\/2+_minTop)<(refTop=_minTop+this.height()\/2+refTop)&&(_result=refTop)),this[0].style.top=_result.toString()+\"px\",this},$.fn.centerHorizontal=function(parentHTMLElement,_minLeftPosition){var _innerWidth=window.innerWidth,_result=_innerWidth\/2;if(!parentHTMLElement)return this[0].style.left=_result.toString()+\"px\",this;_minLeftPosition=_minLeftPosition||0;var _maxLeftPosition,_offsetRight,_parentWidth=parentHTMLElement.offsetWidth,_minLeft=parentHTMLElement.offsetLeft-window.pageXOffset;return _minLeft<0?(_offsetRight=window.pageXOffset+_innerWidth-(parentHTMLElement.offsetLeft+_parentWidth),(_maxLeftPosition=parentHTMLElement.offsetLeft-window.pageXOffset+_parentWidth-this.width()\/2-_minLeftPosition)<(_result=0<_offsetRight?(_innerWidth-_offsetRight)\/2:_result)&&(_result=_maxLeftPosition)):_innerWidth<_minLeft+_parentWidth?(_result=_minLeft+(_parentWidth-(_minLeft+_parentWidth-_innerWidth))\/2)<(_minLeftPosition=parentHTMLElement.offsetLeft-window.pageXOffset+this.width()\/2+_minLeftPosition)&&(_result=_minLeftPosition):_result=_minLeft+_parentWidth\/2,this[0].style.left=_result.toString()+\"px\",this};$.fn.bamButtonSpinnerStop=function(){\"use strict\";$.each(this,function(){BamService.get(\"ButtonSpinner\").getFromElement(this).stop()})},$.fn.bamButtonSpinnerStart=function(){\"use strict\";$.each(this,function(){BamService.get(\"ButtonSpinner\").getFromElement(this).start()})};                    clearInterval(jqueryInterval);\n                }\n            }, 100);\n        })();\n        "}}