PageSourceSearch

https://kaksplus.fi/plussalaisuus/

html kaksplus.fi collected 2026-09-24 09:48:12 UTC 201,618 bytes, 3,608 lines download raw bytes

1<!DOCTYPE html>
2<html lang="fi" class="no-js">
3<head>
4  <meta charset="UTF-8">
5<meta http-equiv="content-type" content="text/html; charset=utf-8">
6<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=2.0, user-scalable=yes">
7<meta name="format-detection" content="telephone=no">
8<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
9
10<meta name="apple-mobile-web-app-status-bar-style" content="#000000">
11<link rel="icon" type="image/png" sizes="16x16" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/Favicon-16x16.png">
12<link rel="icon" type="image/png" sizes="32x32" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/Favicon-32x32.png">
13<link rel="icon" type="image/png" sizes="96x96" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/Favicon-96x96.png">
14<link rel="apple-touch-icon" sizes="57x57" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/img/apple-icon-57.png">
15<link rel="apple-touch-icon" sizes="60x60" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/img/apple-icon-60.png">
16<link rel="apple-touch-icon" sizes="72x72" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/img/apple-icon-72.png">
17<link rel="apple-touch-icon" sizes="76x76" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/img/apple-icon-76.png">
18<link rel="apple-touch-icon" sizes="114x114" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/img/apple-icon-114.png">
19<link rel="apple-touch-icon" sizes="120x120" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/img/apple-icon-120.png">
20<link rel="apple-touch-icon" sizes="144x144" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/img/apple-icon-144.png">
21<link rel="apple-touch-icon" sizes="152x152" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/img/apple-icon-152.png">
22<link rel="apple-touch-icon" sizes="180x180" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/img/apple-icon-180.png">
23<meta name="theme-color" content="#ffffff"><!-- core preconnect scripts --><link rel="preconnect" href="https://ads.pubmatic.com" crossorigin="anonymous"><link rel="preconnect" href="https://storage.googleapis.com" crossorigin="anonymous"><link rel="preconnect" href="https://www.googletagmanager.com" crossorigin="anonymous"><link rel="preconnect" href="https://www.google-analytics.com" crossorigin="anonymous"><link rel="preconnect" href="https://www.googletagservices.com" crossorigin="anonymous"><link rel="preconnect" href="https://s3-eu-west-1.amazonaws.com" crossorigin="anonymous"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"><link rel="preconnect" href="https://use.typekit.net/" crossorigin="anonymous"><link rel="preconnect" href="https://kaksplus.lekane.net" crossorigin="anonymous"><link rel="preconnect" href="https://as.otavamedia.fi" crossorigin="anonymous"><!-- end of the core preconnect scripts --><!-- Critical css not found --><meta name="viewport" content="width=device-width, initial-scale=1.0">
24<!-- core preload --><link rel="preload" href="https://kaksplus.fi/wp-content/mu-plugins/om-core/dist/main.min.css?ver=1765885391" as="style"><link rel="preload" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/dist/singular.min.css?ver=1790138531" as="style"><link rel="preload" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/icons/css/fontello.css" as="style"><link rel="preload" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/dist/main.min.css?ver=1790138531" as="style"><link rel="preload" href="https://kaksplus.fi/wp-content/mu-plugins/om-core/assets/js/vendor/jquery-3.5.1.min.js?ver=3.5.1" as="script"><link rel="preload" href="https://kaksplus.fi/wp-content/mu-plugins/om-core/assets/js/vendor/webfontloader.js?ver=1.6.28" as="script"><link rel="preload" href="https://kaksplus.fi/wp-content/mu-plugins/om-core/dist/index.js?ver=1765885391" as="script"><!-- end of the core preload --><meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1">
25
26	<!-- This site is optimized with the Yoast SEO Premium plugin v24.7 (Yoast SEO v26.9) - https://yoast.com/product/yoast-seo-premium-wordpress/ -->
27	<title>Kirjaudu Plussalaisiin - Kaksplus.fi</title>
28	<meta name="description" content="Liity Kaksplussan Plussalaiset-palveluun! Ilmainen palvelu tarjoaa sinulle lapsesi iÃ
28¤n mukaan personoituja sisältöjä ja mahtavia etuja.">
29	<link rel="canonical" href="https://kaksplus.fi/plussalaisuus/">
30	<meta property="og:locale" content="fi_FI">
31	<meta property="og:type" content="article">
32	<meta property="og:title" content="Kirjaudu Plussalaisiin">
33	<meta property="og:description" content="Liity Kaksplussan Plussalaiset-palveluun! Ilmainen palvelu tarjoaa sinulle lapsesi iän mukaan personoituja sisältöjä ja mahtavia etuja.">
34	<meta property="og:url" content="https://kaksplus.fi/plussalaisuus/">
35	<meta property="og:site_name" content="Kaksplus.fi">
36	<meta property="article:publisher" content="https://www.facebook.com/kaksplusfi/">
37	<meta property="article:modified_time" content="2024-06-06T13:06:44+00:00">
38	<meta property="og:image" content="https://kaksplus.fi/wp-content/uploads/2024/04/vauva-10-kk-2.jpg">
39	<meta property="og:image:width" content="1200">
40	<meta property="og:image:height" content="800">
41	<meta property="og:image:type" content="image/jpeg">
42	<meta name="twitter:card" content="summary_large_image">
43	<meta name="twitter:site" content="@Kaksplus">
44	<meta name="twitter:label1" content="Est. reading time">
45	<meta name="twitter:data1" content="2 minuuttia">
46	
46<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://kaksplus.fi/plussalaisuus/","url":"https://kaksplus.fi/plussalaisuus/","name":"Kirjaudu Plussalaisiin - Kaksplus.fi","isPartOf":{"@id":"https://kaksplus.fi/#website"},"primaryImageOfPage":{"@id":"https://kaksplus.fi/plussalaisuus/#primaryimage"},"image":{"@id":"https://kaksplus.fi/plussalaisuus/#primaryimage"},"thumbnailUrl":"https://kaksplus.fi/wp-content/uploads/2024/04/vauva-10-kk-2.jpg","datePublished":"2024-05-28T14:17:58+00:00","dateModified":"2024-06-06T13:06:44+00:00","description":"Liity Kaksplussan Plussalaiset-palveluun! Ilmainen palvelu tarjoaa sinulle lapsesi iän mukaan personoituja sisältöjä ja mahtavia etuja.","breadcrumb":{"@id":"https://kaksplus.fi/plussalaisuus/#breadcrumb"},"inLanguage":"fi","potentialAction":[{"@type":"ReadAction","target":["https://kaksplus.fi/plussalaisuus/"]}]},{"@type":"ImageObject","inLanguage":"fi","@id":"https://kaksplus.fi/plussalaisuus/#primaryimage","url":"https://kaksplus.fi/wp-content/uploads/2024/04/vauva-10-kk-2.jpg","contentUrl":"https://kaksplus.fi/wp-content/uploads/2024/04/vauva-10-kk-2.jpg","width":1200,"height":800,"caption":"vauva 10 kk"},{"@type":"BreadcrumbList","@id":"https://kaksplus.fi/plussalaisuus/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Kaksplus","item":"https://kaksplus.fi/"},{"@type":"ListItem","position":2,"name":"Kirjaudu Plussalaisiin"}]},{"@type":"WebSite","@id":"https://kaksplus.fi/#website","url":"https://kaksplus.fi/","name":"Kaksplus.fi","description":"","publisher":{"@id":"https://kaksplus.fi/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://kaksplus.fi/haku/?q={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fi"},{"@type":"Organization","@id":"https://kaksplus.fi/#organization","name":"Kaksplus","url":"https://kaksplus.fi/","logo":{"@type":"ImageObject","inLanguage":"fi","@id":"https://kaksplus.fi/#/schema/logo/image/","url":"https://kaksplus.fi/wp-content/uploads/2019/08/logo_kaksplus.png","contentUrl":"https://kaksplus.fi/wp-content/uploads/2019/08/logo_kaksplus.png","width":622,"height":107,"caption":"Kaksplus"},"image":{"@id":"https://kaksplus.fi/#/schema/logo/image/"},"sameAs":["https://www.facebook.com/kaksplusfi/","https://x.com/Kaksplus","https://www.instagram.com/kaksplus/?hl=fi","https://www.linkedin.com/company/kaksplus/","https://www.youtube.com/channel/UCkavhgLRRuluXUosdqyDXLg"]}]}</script>
46
47	<!-- / Yoast SEO Premium plugin. -->
48
49
50<link rel="dns-prefetch" href="//code.jquery.com">
51<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://kaksplus.fi/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fkaksplus.fi%2Fplussalaisuus%2F">
52<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://kaksplus.fi/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fkaksplus.fi%2Fplussalaisuus%2F&#038;format=xml">
53<style id="wp-img-auto-sizes-contain-inline-css" type="text/css">
54img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
55/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
56</style>
57<link rel="stylesheet" id="wp-block-library-css" href="https://kaksplus.fi/wp-includes/css/dist/block-library/style.min.css?ver=6.9.9" type="text/css" media="print" onload="this.media='all';this.onload=null;">
58<noscript><link rel="stylesheet" id="wp-block-library-css" href="https://kaksplus.fi/wp-includes/css/dist/block-library/style.min.css?ver=6.9.9" type="text/css" media="all">
59</noscript><style id="wp-block-library-inline-css" type="text/css">
60/*wp_block_styles_on_demand_placeholder:6ab4ebc26ecab*/
61/*# sourceURL=wp-block-library-inline-css */
62</style>
63<style id="classic-theme-styles-inline-css" type="text/css">
64/*! This file is auto-generated */
65.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
66/*# sourceURL=/wp-includes/css/classic-themes.min.css */
67</style>
68<link rel="stylesheet" id="om-core-styles-css" href="https://kaksplus.fi/wp-content/mu-plugins/om-core/dist/main.min.css?ver=1765885391" type="text/css" media="all">
69<link rel="stylesheet" id="photoswipe-css-css" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/scss/vendor/photoswipe.min.css?ver=4.1.2" type="text/css" media="print" onload="this.media='all';this.onload=null;">
70<noscript><link rel="stylesheet" id="photoswipe-css-css" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/scss/vendor/photoswipe.min.css?ver=4.1.2" type="text/css" media="all">
71</noscript><link rel="stylesheet" id="photoswipe-skin-css-css" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/scss/vendor/default-skin/photoswipe-skin.min.css?ver=4.1.2" type="text/css" media="print" onload="this.media='all';this.onload=null;">
72<noscript><link rel="stylesheet" id="photoswipe-skin-css-css" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/scss/vendor/default-skin/photoswipe-skin.min.css?ver=4.1.2" type="text/css" media="all">
73</noscript><link rel="stylesheet" id="om-kaksplus-singular-css" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/dist/singular.min.css?ver=1790138531" type="text/css" media="print" onload="this.media='all';this.onload=null;">
74<noscript><link rel="stylesheet" id="om-kaksplus-singular-css" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/dist/singular.min.css?ver=1790138531" type="text/css" media="all">
75</noscript><link rel="stylesheet" id="fontello-css-css" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/icons/css/fontello.css" type="text/css" media="print" onload="this.media='all';this.onload=null;">
76<noscript><link rel="stylesheet" id="fontello-css-css" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/icons/css/fontello.css" type="text/css" media="all">
77</noscript><link rel="stylesheet" id="om-kaksplus-style-css" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/dist/main.min.css?ver=1790138531" type="text/css" media="all">
78<link rel="stylesheet" id="om-footer-css" href="https://kaksplus.fi/wp-content/plugins/om-footer/assets/css/om-footer.css?ver=1.1.0" type="text/css" media="print" onload="this.media='all';this.onload=null;">
79<noscript><link rel="stylesheet" id="om-footer-css" href="https://kaksplus.fi/wp-content/plugins/om-footer/assets/css/om-footer.css?ver=1.1.0" type="text/css" media="all">
80</noscript><link rel="stylesheet" id="om-plussalaiset-styles-main-css" href="https://kaksplus.fi/wp-content/plugins/om-kaksplus-plussalaiset-wp-plugin/dist/main.min.css?ver=1.1.0" type="text/css" media="print" onload="this.media='all';this.onload=null;">
81<noscript><link rel="stylesheet" id="om-plussalaiset-styles-main-css" href="https://kaksplus.fi/wp-content/plugins/om-kaksplus-plussalaiset-wp-plugin/dist/main.min.css?ver=1.1.0" type="text/css" media="all">
82</noscript><link rel="stylesheet" id="om-piano-recommendation-styles-css" href="https://kaksplus.fi/wp-content/plugins/om-piano-recommendation-wp-plugin/assets/style.css?ver=1.0.0" type="text/css" media="print" onload="this.media='all';this.onload=null;">
83<noscript><link rel="stylesheet" id="om-piano-recommendation-styles-css" href="https://kaksplus.fi/wp-content/plugins/om-piano-recommendation-wp-plugin/assets/style.css?ver=1.0.0" type="text/css" media="all">
84</noscript><link rel="stylesheet" id="style_login_widget-css" href="https://kaksplus.fi/wp-content/plugins/miniorange-oauth-oidc-single-sign-on-multi/resources/css/style_login_widget.css?ver=6.9.9" type="text/css" media="print" onload="this.media='all';this.onload=null;">
85<noscript><link rel="stylesheet" id="style_login_widget-css" href="https://kaksplus.fi/wp-content/plugins/miniorange-oauth-oidc-single-sign-on-multi/resources/css/style_login_widget.css?ver=6.9.9" type="text/css" media="all">
86</noscript>    
86<script type="text/javascript" id="om-website-analytics">
87      analyticsEvent = function() {};
88      analyticsSocial = function() {};
89      analyticsVPV = function() {};
90      analyticsClearVPV = function() {};
91      analyticsForm = function() {};
92      window.dataLayer = window.dataLayer || [];
93      dataLayer.push({"PageType":"Sivu","PaidUser":false,"UserLevel":1,"RequiredAccessLevel":1,"PaidContent":false,"PaywallState":"Open","Tags":"","externalMetadata":[]});
94    </script>
vendor: 1 bytes, line 94
94
95<script type="text/javascript" src="https://kaksplus.fi/wp-content/mu-plugins/om-core/assets/js/vendor/jquery-3.5.1.min.js?ver=3.5.1" id="jquery-js"></script>
vendor: 1 bytes, line 95
95
96<script type="text/javascript" src="https://kaksplus.fi/wp-content/plugins/om-preact-components/dist/main.js?ver=1776147292" id="om-preact-components-js"></script>
96
97<link rel="https://api.w.org/" href="https://kaksplus.fi/wp-json/"><link rel="alternate" title="JSON" type="application/json" href="https://kaksplus.fi/wp-json/wp/v2/pages/159019"><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://kaksplus.fi/xmlrpc.php?rsd">
98<meta name="generator" content="WordPress 6.9.9">
99<link rel="shortlink" href="https://kaksplus.fi/?p=159019">
100<!-- Head tag start, do not remove -->
101
102<!-- // kaksplus.fi -->
103
104<script type="text/javascript">
105	const timerStart = Date.now();
106	var useAdvantage = useAdvantage ||location.href.includes('?testadvantage1');
107</script>
107
108
109<meta name="facebook-domain-verification" content="3x0jcj5b7fhg2pgu1tvafm4rzok4fo">
110
111<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
111
112<script src="https://storage.googleapis.com/om-gravito-cmp/om_gravito_stubScriptTag.js"></script>
112
113
114<script>
115
116	function waitForElement(selector) {
117		return new Promise(function(resolve, reject) {
118			var element = document.querySelector(selector);
119			if(element) {
120				resolve(element);
121				return;
122			}
123			var observer = new MutationObserver(function(mutations) {
124				mutations.forEach(function(mutation) {
125					var nodes = Array.from(mutation.addedNodes);
126					for(var node of nodes) {
127						if(node.matches && node.matches(selector)) {
128							observer.disconnect();
129							resolve(node);
130							return;
131						}
132					};
133				});
134			});
135			observer.observe(document.documentElement, { childList: true, subtree: true });
136		});
137	}
138
139	var cmpRnd = Math.floor(Math.random() * 999999);
140	if (location.href.indexOf('testcmp=1') > -1) {
141		waitForElement("body").then(function(element) {
142			(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
143			e.src='http'+('https:'===location.protocol?'s://':'://')+'digitiimi.otavamedia.fi/testi/cmp/otavaScript_stacks_purettu.js?' + cmpRnd;
144			t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
145		});
146	} else {
147		waitForElement("body").then(function(element) {
148			(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
149			e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript.js';
150			t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
151		});
152	}
153
154</script>
154
155
156
157<!-- Gravito CMP start-->
158<!--script src="https://storage.googleapis.com/om-gravito-cmp/om_gravito_stubScriptTag.js"></script-->
159<!--script async src="https://storage.googleapis.com/om-gravito-cmp/otavaScript.js"></script-->
160<!-- Gravito CMP end-->
161
162<script async="async" src="https://macro.adnami.io/macro/spec/adsm.macro.18ee5e86-167c-4557-b65d-dc50158fff2e.js"></script>
162
163<script async src="https://target.digitalaudience.io/bakery/scripts/da.js"></script>
163
164
165<script type="text/javascript">
166
167
168	//console.time("daBake");
169
170/*
171	(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
172	e.src='http'+('https:'===location.protocol?'s://':'://')+'d24rtvkqjwgutp.cloudfront.net/srv/frb_kaksplus_fi.js';
173	t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
174*/
175	window._omLeiki = {scriptIsAdded: 1, cache: []};
176
177	var dfpDebug = false;
178	if (document.location.href.indexOf("dfpdebug=1") > -1 || dfpDebug) {
179		dfpDebug = true;
180	}
181	var testSRA = true;
182	if (document.location.href.indexOf("testsra=1") > -1 || testSRA) {
183		testSRA = true;
184	}
185
186	// Async load of cx.js
187	(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
188	e.src='http'+('https:'===location.protocol?'s://s':'://')+'cdn.cxense.com/cx.js';
189	t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
190
191	var cxContextualIds = [], cxSegmentIds = [];
192	var contextualIds = [];
193
194	var cX = cX || {options: {tcf20: true}}; cX.callQueue = cX.callQueue || [];
195	if (dfpDebug) {console.log('cXsegmentIds1: ' + cxSegmentIds)}
196
197/*
198	__tcfapi("addEventListener", 2, function (TCData) {
199		if (dfpDebug) {console.log('Got an answer from TCData...')}
200		if (TCData.tcString && "cmpuishown" === TCData.eventStatus || 'tcloaded' === TCData.eventStatus || 'useractioncomplete' === TCData.eventStatus) {
201			if (dfpDebug) {console.log('Via __tcfapi cX loaded: ' + cX.loaded)}
202			cX.getSegments('f1ab28b7c9202ce3defa8bb2979a88f90c7a5ab2', function(segments) {
203				cX.Array.forEach(segments, function (cxTypedSegment, index) {
204					if (cxTypedSegment.type == 'contextual') {
205						cxContextualIds.push(cxTypedSegment.id);
206					} else if (cxTypedSegment.type == 'traffic') {
207						cxSegmentIds.push(cxTypedSegment.id);
208					}
209				});
210				initDFP(cxSegmentIds);
211			});
212		}
213	});
214*/
215
216	checkCMPConditions(tcstring_decoded, [1,3,4], [], [412], []).then(result => {
217		if (result) {
218			if (dfpDebug) {console.log("Consents met: PIANO IS GOOD TO GO...")}
219			if (dfpDebug) {console.log("cX can load via tcstring...")}
220
221/*
222			cX.callQueue.push(['getSegments', {persistedQueryId: "f1ab28b7c9202ce3defa8bb2979a88f90c7a5ab2", callback: function(segments) {
223				if(typeof window.localStorage === 'object' && typeof window.localStorage.getItem === 'function') {
224					cX.Array.forEach(segments, function (cxTypedSegment, index) {
225						if (cxTypedSegment.type == 'contextual') {
226							cxContextualIds.push(cxTypedSegment.id);
227						} else if (cxTypedSegment.type == 'traffic') {
228							cxSegmentIds.push(cxTypedSegment.id);
229						}
230					});
231					localStorage.setItem("_cX_segmentInfo", cxSegmentIds.join(","));
232					initDFP(cxSegmentIds);
233				}
234			}}]);
235*/
236
237			var checkCxLoaded = setInterval(() => {
238				if (cX.loaded) {
239					clearInterval(checkCxLoaded);
240					if (dfpDebug) {console.log("cX is loaded!")}
241					cX.getSegments('f1ab28b7c9202ce3defa8bb2979a88f90c7a5ab2', function(segments) {
242						cX.Array.forEach(segments, function (cxTypedSegment, index) {
243							if (cxTypedSegment.type == 'contextual') {
244								cxContextualIds.push(cxTypedSegment.id);
245							} else if (cxTypedSegment.type == 'traffic') {
246								cxSegmentIds.push(cxTypedSegment.id);
247							}
248						});
249						if(typeof window.localStorage === 'object' && typeof window.localStorage.getItem === 'function') {
250							localStorage.setItem("_cX_segmentInfo", cxSegmentIds.join(","));
251						}
252						//waitForVariable("adslotsDefined").then(() => {
253						//	if (dfpDebug) {console.log("adslots has been defined...")}
254						//	initDFP(cxSegmentIds);
255						//});
256						initDFP(cxSegmentIds);
257					});
258				}
259			}, 100);
260
261		} else {
262
263			if (dfpDebug) {console.log("Consents NOT met: CAN NOT USE PIANO!!!")}
264			__tcfapi("addEventListener", 2, function (TCData) {
265				if (dfpDebug) {console.log('Got an answer from TCData...')}
266				if (TCData.tcString && "cmpuishown" === TCData.eventStatus || 'tcloaded' === TCData.eventStatus || 'useractioncomplete' === TCData.eventStatus) {
267					initDFP(cxSegmentIds);
268				}
269			});
270
271		}
272	});
273
274/*
275	var contextualIds = [];
276	var cX = cX || { options: { tcf20: true } }; cX.callQueue = cX.callQueue || [];
277	cX.callQueue.push(['invoke', function() {
278		__tcfapi("addEventListener", 2, function (TCData) {
279			if (dfpDebug) {console.log('Got an answer from TCData...')}
280			if (TCData.tcString && "cmpuishown" === TCData.eventStatus || 'tcloaded' === TCData.eventStatus || 'useractioncomplete' === TCData.eventStatus) {
281				if (dfpDebug) {console.log('Calling cX.getUserSegmentIds after CMP ready...')}
282				cX.getUserSegmentIds({persistedQueryId:'ddee45f92e46c9d916ef93a53159afc1fe9f5f7b', callback:initDFP});
283				if (dfpDebug) {console.log('Received cX.getUserSegmentIds and calling initDFP()...')}
284				console.log('cXsegmentIds3: ' + cXsegmentIds);
285			}
286		});
287	}]);
288*/
289/*
290	var cX = cX || {}; cX.callQueue = cX.callQueue || [];
291	cX.callQueue.push(['invoke', function() {
292		if (dfpDebug) {console.log('Calling cX.getUserSegmentIds...')}
293		cX.getUserSegmentIds({persistedQueryId:'ddee45f92e46c9d916ef93a53159afc1fe9f5f7b', callback:initDFP});
294		if (dfpDebug) {console.log('Received cX.getUserSegmentIds and calling initDFP()...')}
295	}]);
296*/
297
298	var rnd = Math.floor(Math.random() * 50);
299
300	if (document.location.href.indexOf("ntp=2") > -1) {
301		console.log('Testataan 3rdp:tä...');
302		var url = window.location.href;
303		console.log('Current url: ' + url);
304		if (url.indexOf("?ntp=2") > -1) {url = url.replace("?ntp=2", "?ntp=1");}
305		console.log('New url: ' + url);
306		location.href = url;
307	}
308
309	var adsmtag = adsmtag || {};
310	adsmtag.cmd = adsmtag.cmd || [];
311
312	var adLocation = 'content';
313	if (adLocation == '') {adLocation = 'other'}
314	var hideAllAds = false;
315	var showAds = true;
316	var takeOver = false;
317	var fpaShown = false;
318	var userdpbjs = false;
319	var hb_setup = 'owpbjs';
320	var targetingValue = '';
321	var articleCategory = '', articleCategories = '', recipeTheme = '', articleTags = '', articleSection = '';
322	var engageA = document.cookie.match('(^|;) ?engage_basicA=([^;]*)(;|$)') ? document.cookie.match('(^|;) ?engage_basicA=([^;]*)(;|$)')[2] : 0;
323	var engageB = document.cookie.match('(^|;) ?engage_basicB=([^;]*)(;|$)') ? document.cookie.match('(^|;) ?engage_basicB=([^;]*)(;|$)')[2] : 0;
324	var useHBM = true;
325	if (location.href.indexOf('usehbm=false') > -1) {
326		useHBM = false;
327		console.log('HBM not in use!!!');
328	}
329
330	jQuery(document).ready(function() {
331		waitForElement("body").then(function(element) {
332			if (showAds && !hideAllAds && (jQuery('body').hasClass('single-post') || jQuery('body').hasClass('article-type_erikoistaitto'))) {
333
334				var normalArticle = jQuery('body').hasClass('single-post') ? true : false;
335				var specialArticle = jQuery('body').hasClass('article-type_erikoistaitto') ? true : false;
336
337				if (specialArticle) {
338					jQuery('.content__body > p').eq(2).before('<div class=\"section ad-mob_description mob-1_1\"><div id=\"dfp__mob-1_1\">
338<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__mob-1_1\");}<\/script><\/div><\/div>');
339					jQuery('.content__body > p').eq(10).before('<div class=\"mob-2 section ad-mob_description\"><div id=\"dfp__mob-2_1\">
339<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__mob-2_1\");}<\/script><\/div><\/div>');
340				} else {
341					waitForElement("#dfp__mob-1_1").then(function(element) {
342						if (dfpDebug) {console.log('Siirretään artikkelin mob-1 -paikka...');}
343						if (navigator.userAgent.match(/Android/i)) {
344							//jQuery('.content__body > p').eq(3).before(jQuery('.mob-1.section').removeClass('section'));
345						} else {
346							//jQuery('.content__body > p').eq(2).before(jQuery('.mob-1.section').removeClass('section'));
347						}
348					});
349				}
350				if (dfpDebug) {console.log('Body classes: ' + jQuery("body").attr("class"))}
351
352			}
353		});
354	});
355
356	if (window.dataLayer) {
357		dataLayer.forEach(function (dataLayerItem) {
358			if (dataLayerItem['PrimaryCategory'] !== '' && dataLayerItem['PrimaryCategory'] !== undefined) {
359				articleCategory = dataLayerItem['PrimaryCategory'].toLowerCase().replace(/, /g, ',');
360				if (dfpDebug) {console.log('ArticleCategory: ' + articleCategory);}
361			};
362			if (dataLayerItem['Categories'] !== '' && dataLayerItem['Categories'] !== undefined) {
363				articleCategories = dataLayerItem['Categories'].toLowerCase().replace(/, /g, ',');
364				if (dfpDebug) {console.log('Categories: ' + articleCategories);}
365			};
366			if (dataLayerItem['Tags'] !== '' && dataLayerItem['Tags'] !== undefined) {
367				articleTags = dataLayerItem['Tags'].toLowerCase().replace(/, /g, ',');
368				if (dfpDebug) {console.log('Tags: ' + articleTags);}
369			};
370			if (dataLayerItem['Section'] !== '' && dataLayerItem['Section'] !== undefined) {
371				articleSection = dataLayerItem['Section'].toLowerCase().replace(/, /g, ',');
372				if (dfpDebug) {console.log('ArticleSection: ' + articleSection);}
373			};
374			if (dataLayerItem['RecipeTheme'] !== '' && dataLayerItem['RecipeTheme'] !== undefined) {
375				recipeTheme = dataLayerItem['RecipeTheme'].toLowerCase().replace(/, /g, ',');
376				if (dfpDebug) {console.log('RecipeTheme: ' + recipeTheme);}
377			};
378		});
379		if(articleCategory.indexOf("raskaus") > -1 || articleCategories.indexOf("raskaus") > -1 || articleTags.indexOf("raskaus") > -1) {
380			takeOver = true;
381			targetingValue = 'raskaanaolevat';
382		}
383		if(articleCategory.toLowerCase().indexOf("haaveissa vauva") > -1 || articleCategories.toLowerCase().indexOf("haaveissa vauva") > -1 || articleTags.toLowerCase().indexOf("haaveissa vauva") > -1) {
384			takeOver = true;
385			targetingValue = 'vauvahaaveilijat';
386		}
387	} else {
388		console.error('DataLayer is not defined.')
389	}
390
391	function getLeikiContextual() {
392
393		if (!window.dataLayer) {
394			console.error('LeikiSmartProfiles: dataLayer is not defined.')
395			return;
396		}
397
398		var SmartProfiles = {};
399		var FilteredKeywords = [];
400		var dataLayerKey = 'LeikiSmartProfiles';
401		var keywordFilters = {
402			aste_helsinki: {
403				relevance: 2,
404				reversedSlotsLeft: 5,
405			},
406			iabtier1: {
407				relevance: 20,
408				reversedSlotsLeft: 5,
409			}
410		}
411
412		// Find correct object by key from dataLayer.
413		dataLayer.forEach(function (dataLayerItem) {
414			// If dataLayer item have object named by dataLayerKey
415			// eg. datalayer.LeikiSmartProfiles
416			if (dataLayerItem[dataLayerKey]) {
417				SmartProfiles = dataLayerItem[dataLayerKey];
418			};
419		});
420
421		// First get all object keys of SmartProfiles. Keys are SmartProfile classifications.
422		// Then go through all the classifications
423		Object.keys(SmartProfiles).forEach(function (classification) {
424			// Use only keywordFilters classifications
425			if (classification in keywordFilters) {
426				// Go throug all classification objects. In object we have array of keywords.
427				SmartProfiles[classification].forEach(function (keyword) {
428					// Filter out all keywords what doesn't meat minium relevance level
429					var isMeaningful = keywordFilters[classification].relevance < keyword.relevance;
430					if (isMeaningful && keywordFilters[classification].reversedSlotsLeft > 0) {
431						keywordFilters[classification].reversedSlotsLeft--;
432						FilteredKeywords.push(keyword.ID);
433					}
434				});
435			}
436		});
437
438		// Convert array to string. Keywords are separated by , by default
439		return FilteredKeywords.length > 0 ? FilteredKeywords.join() : null;
440
441	}
442
443	var leiki_contextual = getLeikiContextual();
444
445	var NeuwoTags = {};
446	var dataLayerKey = 'NeuwoTags';
447	var categoryRelevance = '0.5', tagScore = '0.5';
448
449	dataLayer.forEach(function(dataLayerItem) {
450		if (dataLayerItem[dataLayerKey]) {
451			NeuwoTags = dataLayerItem[dataLayerKey];
452		};
453	});
454
455	if (Object.keys(NeuwoTags).length > 0 && NeuwoTags.constructor === Object && !('message' in NeuwoTags)) {
456
457		var ntBrandSafety = NeuwoTags.brand_safety.BS_indication;
458		var ntBrandSafetyScore = NeuwoTags.brand_safety.BS_score;
459		var ntIAB1 = NeuwoTags.marketing_categories.iab_tier_1;
460		var ntIAB2 = NeuwoTags.marketing_categories.iab_tier_2;
461		var ntCategory = ntIAB1.sort(function (a, b) {return b.relevance - a.relevance}).filter(category => category.relevance > categoryRelevance).map(category => category.ID).join() + ',' + ntIAB2.sort(function (a, b) {return b.relevance - a.relevance}).filter(category => category.relevance > categoryRelevance).map(category => category.ID).join();
462		var ntTags = NeuwoTags.tags.sort(function (a, b) {return b.score - a.score}).filter(tag => tag.score > tagScore).map(tag => tag.value).join();
463		var ntSegment = NeuwoTags.smart_tags.map(tag => tag.ID).join();
464
465	}
466
467	var ntp = 0;
468	if (document.location.href.indexOf("ntp=testi") > -1) {ntp = 1;}
469
470	//if(cmpGetCookie('fullpagead') != 1 && rnd >= 30 && !hideAllAds && ntp == 0) {
471	//if (cmpGetCookie('fullpagead') != 1 && document.location.href.indexOf("fpa=1") > -1) {
472	//	console.log('Näytetään fullpagead...');
473	//	var fpa = document.createElement('script'); fpa.type = 'text/javascript'; fpa.async = true;
474	//	fpa.src = 'https://as.otavamedia.fi/ad/kaksplus/?siteid=4&ntp=' + ntp + '&rnd=' + rnd + '&cb='+Math.floor((Math.random() * 9999999) + 1000000);
475	//	var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(fpa, s);
476	//	fpaShown = true;
477	//}
478/*
479	if(ntp == 1) {
480		console.log('Näytetään fullpagead...');
481		var fpa = document.createElement('script'); fpa.type = 'text/javascript'; fpa.async = true;
482		fpa.src = 'https://as.otavamedia.fi/testi/ad/kaksplus/?siteid=4&ntp=' + ntp + '&rnd=' + rnd + '&cb='+Math.floor((Math.random() * 9999999) + 1000000) + '&url=' + location.href;
483		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(fpa, s);
484		fpaShown = true;
485	}
486*/
487	navigator.browserSpecs = (function(){
488		var ua = navigator.userAgent, tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
489		if(/trident/i.test(M[1])){
490			tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
491			return {name:'IE',version:(tem[1] || '')};
492		}
493		if(M[1] === 'Chrome'){
494			tem = ua.match(/\b(OPR|Edge)\/(\d+)/);
495			if(tem != null) return {name:tem[1].replace('OPR', 'Opera'),version:tem[2]};
496		}
497		M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
498		if((tem = ua.match(/version\/(\d+)/i))!= null) {M.splice(1, 1, tem[1]);}
499		return {name:M[0], version:M[1]};
500	})();
501
502	var deviceType = {
503		isMobile:function(){
504			return (navigator.userAgent.match(/iPhone|iPad|iPod|Android|BlackBerry|Opera Mini|IEMobile/i) != null);
505		},
506		isDesktop:function(){
507			return (navigator.userAgent.match(/iPhone|iPad|iPod|Android|BlackBerry|Opera Mini|IEMobile/i) == null);
508		}
509	}
510
511	if (dfpDebug) {console.log('UserAgent: ' + navigator.userAgent);}
512	if (deviceType.isDesktop()) {
513		if (navigator.browserSpecs.name == 'Chrome' && navigator.browserSpecs.version < 50) {
514			showAds = false;
515			if (dfpDebug) {console.log('Testataan, mainokset estetty.');}
516			if (dfpDebug) {console.log('Selain: ' + navigator.browserSpecs.name + ' ' + navigator.browserSpecs.version);}
517		}
518	}
519
520	var deliveryType = '';
521
522	checkCMPConditions(tcstring_decoded, [1,3,4], [2,7,9,10], [], [755]).then(result => {
523		if (result) {
524			if (dfpDebug) {console.log("Consent met: GAM IS ALLOWED TO SERVE personalized ads...")}
525			//googletag.pubads().setTargeting("deliveryType", "normal");
526			deliveryType = 'normal';
527		} else {
528			checkCMPConditions(tcstring_decoded, [1], [2,7,9,10], [], [755]).then(result => {
529				if (result) {
530					if (dfpDebug) {console.log("Consent met: GAM IS ALLOWED TO SERVE Non-personalized ads...")}
531					//googletag.pubads().setTargeting("deliveryType", "npa");
532					deliveryType = 'npa';
533				} else {
534					checkCMPConditions(tcstring_decoded, [], [2,7,9,10], [], [755]).then(result => {
535						if (result) {
536							if (dfpDebug) {console.log("Consent met: GAM IS ALLOWED TO SERVE Limited ads...")}
537							//googletag.pubads().setTargeting("deliveryType", "lads");
538							deliveryType = 'lads';
539							useHBM = false;
540						} else {
541							if (dfpDebug) {console.log("Consent not met: GAM IS ALLOWED TO SERVE TAD...")}
542							//googletag.pubads().setTargeting("deliveryType", "tad");
543							deliveryType = 'tad';
544							useHBM = false;
545						}
546					});
547				}
548			});
549		}
550	});
551
552	var dfpConfig = {"location":"content","serviceName":"kaksplus","slots":["desk-1","desk-2","desk-3","in-text","rectangle-1","rectangle-2","rectangle-3","topad-desk","mob-1","mob-2","mob-3","topad-mob","interstitial","custom-ad1","native-card-1","native-card-2","native-card-3","native-list-1"],"serviceStarted":""};
553	//var dfpConfig = {"location":"content","serviceName":"kaksplus","slots":["desk-1","desk-2","in-text","rectangle-1","rectangle-2","rectangle-3","mob-1","mob-2","mob-3","custom-ad1","native-card-1","native-card-2","native-card-3","native-list-1"],"serviceStarted":""};
554
555	var googletag = googletag || {};
556	googletag.cmd = googletag.cmd || [];
557
558	window.dfp = {
559		location: 'content',
560		serviceName: 'kaksplus',
561		visibility: (document.documentElement.clientWidth >= 1024 ? 'desktop' : 'mobile'),
562		isAndroid: (navigator.userAgent.match(/Android/i) ? true : false),
563		networkcode: '135812570',
564		initialized: false,
565		definedAds: {},
566		lazyload: true,
567		enableAsync: true,
568
569		// Sizes: array of sizes. If no sizes are defined, it is assumed that the ad unit is an out-of-place ad
570		// Visibility options: desktop, mobile, all
571		slots: {
572			// Top Ads 1-2 (header.php)
573			'desk-1': {
574				sizes: [[1, 2],[2, 2],[728, 90],[980, 120],[980, 400],[980, 552],[980, 600]],
575				visibility: 'desktop'
576			},
577			'desk-2': {
578				sizes: [[1, 2],[2, 2],[620, 891],[728, 90],[970, 550],[970, 570],[980, 120],[980, 400],[980, 552]],
579				visibility: 'desktop'
580			},
581			'desk-3': {
582				sizes: [[1, 2],[2, 2],[620, 891],[728, 90],[980, 120],[980, 400],[980, 552]],
583				visibility: 'desktop'
584			},
585			'in-text': {
586				sizes: [[300, 250],[300, 300],[468, 400],[560, 400],[600, 600],[620, 891],['fluid']],
587				visibility: 'desktop'
588			},
589			// Box Ads 1-2 (widget)
590			'rectangle-1': {
591				sizes: [[300, 250],[300, 300],['fluid']],
592				visibility: 'desktop'
593			},
594			'rectangle-2': {
595				sizes: [[300, 250],[300, 300],[300, 431],[300, 600],['fluid']],
596				visibility: 'desktop'
597			},
598			'rectangle-3': {
599				sizes: [[300, 250],[300, 300],['fluid']],
600				visibility: 'desktop'
601			},
602			'topad-desk': {
603				sizes: [[1, 2],[970, 970]],
604				visibility: 'desktop'
605			},
606			// Mobile Top Ad (header.php)
607			'mob-1': {
608				sizes: [[320, 600],[320, 320],[300, 600],[300, 431],[300, 300],[300, 250],[300, 150],['fluid']],
609				visibility: 'mobile'
610			},
611			// Mob Ad 2 (widget or includes/ad-middle.php)
612			'mob-2': {
613				sizes: [[320, 600],[320, 320],[300, 600],[300, 431],[300, 300],[300, 250],[300, 240],[300, 150],['fluid']],
614				visibility: 'mobile'
615			},
616			// Mob Ad 3 (widget or includes/ad-middle.php)
617			'mob-3': {
618				sizes: [[320, 600],[320, 320],[300, 600],[300, 431],[300, 300],[300, 250],[300, 150],['fluid']],
619				visibility: 'mobile'
620			},
621			'custom-ad1': {
622				sizes: [[300, 150]],
623				visibility: 'mobile'
624			},
625			'topad-mob': {
626				sizes: [[1, 2], [300, 220], [300,250],[300, 300],[300, 600]],
627				visibility: 'mobile'
628			},
629			'interstitial': {
630				sizes: [1, 1],
631				visibility: 'all'
632			},
633			'native-card-1': {
634				sizes: [[1, 1], ['fluid']],
635				visibility: 'all'
636			},
637			'native-card-2': {
638				sizes: [[1, 1], ['fluid']],
639				visibility: 'all'
640			},
641			'native-card-3': {
642				sizes: [[1, 1], ['fluid']],
643				visibility: 'all'
644			},
645			'native-list-1': {
646				sizes: [[1, 1], ['fluid']],
647				visibility: 'all'
648			},
649			'native-card-programmatic': {
650				sizes: [[1, 1], ['fluid']],
651				visibility: 'all'
652			}
653		},
654
655		pbConfig: {
656			desktop: {
657				script: "https://otava-cdn.relevant-digital.com/static/tags/5e4c4c2c53ca952a90fa7e6d.js",
658				configId: {
659					frontpage: "60a376916576279b06bf0e0e",
660					content: "60a376b62665adc933bf0e0f",
661					blogs: "60a376e4b62ef2754dbf0e10"
662				}
663			},
664			mobile: {
665				script: "https://otava-cdn.relevant-digital.com/static/tags/5e4c4c2c53ca952a90fa7e05.js",
666				configId: {
667					frontpage: "60a377158b01a53c9dbf0e12",
668					content: "60a377238446dd04a4bf0e13",
669					blogs: "60a3772e99644d1c1fbf0e14"
670				}
671			}
672		},
673
674		registerAdslots: function (activeSlots) {
675			// Unlike the name indicates, this actually removes the adslots that weren't defined.
676			for (adslot in this.slots) {
677				if (activeSlots.indexOf(adslot) < 0) {
678					delete this.slots[adslot];
679				}
680			}
681		},
682
683		displayAdslot: function (id) {
684
685			//if (!this.initialized) this.init();
686
687			var that = this;
688			var parts = id.split('__');
689			parts = parts[1].split('_');
690
691			var slotName = parts[0];
692
693			if (testSRA) {
694				//if (!(slotName.includes('native'))) {
695				//	return;
696				//}
697				return;
698			}
699
700			// Checking that the native adslot is known and visibility matches
701			if (slotName.includes('native') && this.slots.hasOwnProperty(slotName)) {
702
703				googletag.cmd.push(function () {
704					that.defineNative(id, slotName);
705					googletag.display(id);
706				});
707
708			} else {
709
710				// Checking that the adslot is known and visibility matches
711				if (this.slots.hasOwnProperty(slotName) && ["all", this.visibility].indexOf(this.slots[slotName]['visibility'] || 'all') >= 0) {
712					googletag.cmd.push(function () {
713						var slot = that.defineSlot(slotName, id);
714						googletag.display(id);
715					});
716				}
717			}
718		},
719
720		displayAdslotInfinite: function (id) {
721
722			//if (!this.initialized) this.init();
723
724			var that = this;
725			var parts = id.split('__');
726			parts = parts[1].split('_');
727
728			var slotName = parts[0];
729
730			// Checking that the native adslot is known and visibility matches
731			if (slotName.includes('native') && slotName.indexOf('native-card-2') == -1 && this.slots.hasOwnProperty(slotName)) {
732
733				googletag.cmd.push(function () {
734					var slot = that.defineNative(id, slotName);
735					googletag.display(id);
736					//googletag.pubads().updateCorrelator();
737					//googletag.pubads().refresh([slot]);
738					googletag.pubads().refresh([slot], {changeCorrelator: false});
739				});
740
741			} else {
742
743				if (slotName.indexOf('native-card-2') == -1 && this.slots.hasOwnProperty(slotName)) {
744
745					// Checking that the adslot is known and visibility matches
746					if (this.slots.hasOwnProperty(slotName) && ["all", this.visibility].indexOf(this.slots[slotName]['visibility'] || 'all') >= 0) {
747						googletag.cmd.push(function () {
748							var slot = that.defineSlot(slotName, id);
749							googletag.display(id);
750							//googletag.pubads().refresh([slot]);
751							googletag.pubads().refresh([slot], {changeCorrelator: false});
752						});
753					}
754				}
755			}
756
757		},
758
759		defineSlot: function (slotName, id) {
760
761			var id = id || 'dfp__' + slotName;
762			var path = this.networkcode + '/' + dfpConfig.serviceName + '/' + dfpConfig.location + '/' + slotName;
763			if (slotName == 'interstitial' || slotName.includes('topad-')) {
764				path = this.networkcode + '/' + dfpConfig.serviceName + '/content/' + slotName;
765			}
766			this.definedAds[id] = true;
767
768			if (typeof this.slots[slotName]['sizes'] !== 'undefined') {
769				return googletag.defineSlot(path, this.slots[slotName]['sizes'], id).addService(googletag.pubads()).setTargeting('adslotid', id.replace('dfp__',''));
770			} else {
771				return googletag.defineOutOfPageSlot(path, id).addService(googletag.pubads());
772			}
773
774		},
775
776		displayNative: function(id) {
777
778			//if (!this.initialized) this.init();
779
780			var that = this;
781			var parts = id.split('__');
782			parts = parts[1].split('_');
783
784			var slotName = parts[0];
785
786			// Checking that the adslot is known and visibility matches
787			if (this.slots.hasOwnProperty(slotName)) {
788				googletag.cmd.push(function () {
789					that.defineNative(id, slotName);
790					googletag.display(id);
791				});
792			}
793
794		},
795
796		defineNative: function(opt_div, slotName) {
797			var opt_div = opt_div || 'dfp__' + slotName;
798			var adUnitPath = this.networkcode + '/kaksplus/native/' + slotName;
799			this.definedAds[opt_div] = true;
800			//return googletag.defineSlot(adUnitPath, 'fluid', opt_div).addService(googletag.pubads());
801			return googletag.defineSlot(adUnitPath, this.slots[slotName]['sizes'], opt_div).addService(googletag.pubads()).setTargeting('adslotid', opt_div.replace('dfp__',''));
802		},
803
804		init: function (cXsegmentIds) {
805
806			//if (dfpDebug) {console.log('Initin segmentit: ' + cXsegmentIds)}
807
808			var that = this;
809
810			if (!dfpConfig.hasOwnProperty('serviceName')) {
811				console.log('DFP service name not set');
812				return;
813			}
814
815			this.registerAdslots(dfpConfig.slots);
816
817			if (!dfpConfig.serviceStarted) {
818
819				googletag.cmd.push(function () {
820
821					if (dfpDebug) {
822						googletag.pubads().addEventListener('slotRenderEnded', function(event) {
823							var slot = event.slot;
824							console.group('Slot', slot.getSlotElementId(), 'finished rendering.');
825							console.log('Advertiser ID:', event.advertiserId);
826							console.log('Campaign ID: ', event.campaignId);
827							console.log('Creative ID: ', event.creativeId);
828							console.log('Is empty?:', event.isEmpty);
829							console.log('Line Item ID:', event.lineItemId);
830							console.log('Size:', event.size);
831							console.log('Source Agnostic Creative ID:', event.sourceAgnosticCreativeId);
832							console.log('Source Agnostic Line Item ID:', event.sourceAgnosticLineItemId);
833							console.groupEnd();
834						});
835
836					}
837
838					if (window.dfp.visibility == 'mobile') {
839
840						//googletag.pubads().addEventListener('slotRenderEnded', function(event) {
841						//	if (event.slot.getSlotElementId().indexOf('dfp__native') > -1) {
842						//		if (event.isEmpty) {
843						//			//if (dfpDebug) {console.log('Poistettiin tyhjä ad unit natiivinostoista: ' + '#' + event.slot.getSlotElementId())}
844						//			//jQuery('#' + event.slot.getSlotElementId()).parent('div').remove();
845						//		}
846						//	}
847						//});
848
849/*
850						googletag.pubads().addEventListener('slotRenderEnded', function(event) {
851							if (event.slot.getSlotElementId().indexOf('dfp__mob') > -1 && event.slot.getSlotElementId().indexOf('_111') == -1) {
852								var origAdSlotId = event.slot.getSlotElementId();
853								var adPath = 'kaksplus';
854								if (event.isEmpty) {
855									var newAdSlotId = origAdSlotId.replace("-","_") + '_111';
856									var adSlotName = origAdSlotId.substr(origAdSlotId.indexOf("__")+2);
857									adSlotName = adSlotName.substr(0, adSlotName.indexOf("_"));
858									if (dfpDebug) {console.log('adSlotName: ' + adSlotName)};
859									if (dfpDebug) {console.log('Creating new adslot: ' + '#' + origAdSlotId)};
860									jQuery('#' + origAdSlotId).after('<div id="' + newAdSlotId + '" class="' + adSlotName + '-article">
860<script>var ' + newAdSlotId + '; googletag.cmd.push(function(){' + newAdSlotId + ' = googletag.defineSlot("/135812570/'+ adPath +'/' + adLocation + '/' + adSlotName + '", [[300,250],[300,300],[300,431],[300,600],[320,320]], "' + newAdSlotId + '").addService(googletag.pubads()).setTargeting("adslotid", "' + origAdSlotId.replace("dfp__","") + '-111")});googletag.cmd.push(function() {googletag.display("' + newAdSlotId + '")});<\/script><\/div>');
861									relevantDigital.cmd.push(function() {
862										relevantDigital.loadPrebid({configId: pbjsConf, manageAdserver: false, collapseEmptyDivs: true, collapseBeforeAdFetch: false, noGpt: true, allowedDivIds: [newAdSlotId], noSlotReload: true});
863											if (dfpDebug) {console.log('Requesting new ad to: #' + newAdSlotId)};
864									});
865								} else {
866									if (dfpDebug) {console.log('Ad slot ' + origAdSlotId + ' was not empty...')};
867								}
868							}
869						});
870*/
871
872					}
873
874					googletag.pubads().addEventListener('slotRenderEnded', function(event) {
875
876						if (event.slot.getSlotElementId().indexOf('dfp__native-card-1') > -1) {
877							if (event.isEmpty) {
878
879								if (adLocation == 'frontpage') {
880									if (jQuery('#' + event.slot.getSlotElementId()).closest('ul').siblings('header').find('h2').text().indexOf('Kaupallinen') > -1) {
881										if (document.documentElement.clientWidth >= 768) {
882											var nativeSlotLength = jQuery('#' + event.slot.getSlotElementId()).closest('ul').find('li').length;
883											jQuery('#' + event.slot.getSlotElementId()).closest('ul').addClass('grid--' + (nativeSlotLength-1) + '').removeClass('grid--' + nativeSlotLength + '');
884										}
885										jQuery('#' + event.slot.getSlotElementId()).parent('li').remove();
886										if (dfpDebug) {console.log('Poistettiin etusivun tyhjä ad unit natiivinostoista: ' + '#' + event.slot.getSlotElementId())}
887									}
888								} else {
889									if (jQuery('#' + event.slot.getSlotElementId()).closest('section').find('h2').text().indexOf('Kaupallinen') > -1) {
890										if (document.documentElement.clientWidth >= 768) {
891											var nativeSlotLength = jQuery('#' + event.slot.getSlotElementId()).closest('section > div').find('div.grid__item').length;
892											jQuery('#' + event.slot.getSlotElementId()).closest('section > div').addClass('grid--' + (nativeSlotLength-1) + '').removeClass('grid--' + nativeSlotLength + '');
893										}
894										jQuery('#' + event.slot.getSlotElementId()).parent('div').remove();
895										if (dfpDebug) {console.log('Poistettiin tyhjä ad unit natiivinostoista: ' + '#' + event.slot.getSlotElementId())}
896									}
897								}
898
899							}
900						}
901
902						if (event.slot.getSlotElementId().indexOf('dfp__native-list-1') > -1) {
903							if (event.isEmpty) {
904								jQuery('#' + event.slot.getSlotElementId()).closest('li').remove();
905							}
906						}
907
908						if (event.slot.getSlotElementId().indexOf('dfp__interstitial') > -1) {
909							if (event.isEmpty) {
910								if (dfpDebug) {console.log('Fpa is empty, calling webinterstitial...')}
911								window.canRunWebInterstitial = true;
912							} else {
913								if (dfpDebug) {console.log('BBW: preventing sticky player when fpa was shown...')}
914								window.bluebillywig = window.bluebillywig || {};
915								window.bluebillywig.cmd = window.bluebillywig.cmd || [];
916								//window.bluebillywig.cmd.push(function($$api) {
917								//	//const originalStickyMode = $$api.getPlayoutData().stickyMode;
918								//	$$api.updatePlayout({stickyMode: 'none'});
919								//	//$$api.updatePlayout({stickyMode: originalStickyMode});
920								//});
921								window.bluebillywig.cmd.push({
922									playerId: '/p/inarticle/a/kaksplus',
923									callback: function($$api) {
924										$$api.updatePlayout({stickyMode: 'none'});
925									}
926								});
927							}
928						}
929
930					})
931
932					// Adding some targeting parameters for adOps
933					googletag.pubads().setTargeting('url_domain', window.location.host)
934					googletag.pubads().setTargeting('url_path', window.location.pathname)
935					googletag.pubads().setTargeting('url_params', window.location.search.substring(1));
936
937					if (rnd >= 0) {hb_setup = 'pbjs';}
938					googletag.pubads().setTargeting("hb_setup", hb_setup);
939
940					if (engageA != 0 && engageA.length >= 1) {
941						googletag.pubads().setTargeting("Age", engageA);
942						if (dfpDebug) {console.log('EngageA found: ' + engageA)}
943					}
944					if (engageB != 0 && engageB.length >= 1) {
945						googletag.pubads().setTargeting("Gender", engageB);
946						if (dfpDebug) {console.log('EngageB found: ' + engageB)}
947					}
948
949					var m = document.cookie.match(/frosmo_keywords=.([^;$]+)/);
950					if(m != null &&  m.length) {
951						googletag.pubads().setTargeting("frosmo", m[1].split("."))
952					}
953
954					if (leiki_contextual !== null && leiki_contextual !== 'undefined') {
955						if (dfpDebug) {console.log('leiki_contextual_api success:' + leiki_contextual);}
956						googletag.pubads().setTargeting("leiki_contextual", leiki_contextual);
957					}
958
959					if (ntBrandSafety != undefined && ntBrandSafety != '') {
960						googletag.pubads().setTargeting("ctxBrandSafety", ntBrandSafety.toLowerCase());
961						if (dfpDebug) {console.log('Targeting for ctxBrandSafety: ' + ntBrandSafety.toLowerCase());}
962					}
963					if (ntCategory != undefined && ntCategory != '') {
964						googletag.pubads().setTargeting("ctxCategory", ntCategory.toLowerCase());
965						if (dfpDebug) {console.log('Targeting for ctxCategory: ' + ntCategory.toLowerCase());}
966					}
967					if (ntTags != undefined && ntTags != '') {
968						googletag.pubads().setTargeting("ctxTag", ntTags.toLowerCase());
969						if (dfpDebug) {console.log('Targeting for ctxTag: ' + ntTags.toLowerCase());}
970					}
971					if (ntSegment != undefined && ntSegment != '') {
972						googletag.pubads().setTargeting("ctxSegment", ntSegment.toLowerCase());
973						if (dfpDebug) {console.log('Targeting for ctxSegment: ' + ntSegment.toLowerCase());}
974					}
975
976					if (window.dataLayer) {
977
978						//articleCategory = google_tag_manager["GTM-M9ZRBWJQ"].dataLayer.get('PrimaryCategory');
979						//articleCategories = google_tag_manager["GTM-M9ZRBWJQ"].dataLayer.get('Categories');
980						//recipeTheme = google_tag_manager["GTM-M9ZRBWJQ"].dataLayer.get('RecipeTheme');
981						//articleTags = google_tag_manager["GTM-M9ZRBWJQ"].dataLayer.get('Tags');
982
983						if (articleCategory != undefined && articleCategory != '') {
984							googletag.pubads().setTargeting("articlecategory", articleCategory.toLowerCase());
985							if (dfpDebug) {console.log('Targeting for articlecategory: ' + articleCategory.toLowerCase());}
986						}
987						if (articleCategories != undefined && articleCategories != '') {
988							googletag.pubads().setTargeting("articlecategories", articleCategories.toLowerCase());
989							if (dfpDebug) {console.log('Targeting for articlecategories: ' + articleCategories.toLowerCase());}
990						}
991						if (articleSection != undefined && articleSection != '') {
992							googletag.pubads().setTargeting("articlesection", articleSection.toLowerCase());
993							if (dfpDebug) {console.log('Targeting for articlesection: ' + articleSection.toLowerCase());}
994						}
995						if (recipeTheme != undefined && recipeTheme != '') {
996							googletag.pubads().setTargeting("recipetheme", recipeTheme.toLowerCase().replace(/, /g, ','));
997							if (dfpDebug) {console.log('Targeting for recipetheme: ' + recipeTheme.toLowerCase().replace(/, /g, ','));}
998						} else if (articleTags != undefined && articleTags != '') {
999							googletag.pubads().setTargeting("articlekeywords", articleTags.toLowerCase().replace(/, /g, ','));
1000							if (dfpDebug) {console.log('Targeting for articlekeywords: ' + articleTags.toLowerCase().replace(/, /g, ','));}
1001						}
1002						if (takeOver && targetingValue != '') {
1003							googletag.pubads().setTargeting("haltuunotto", targetingValue);
1004						}
1005
1006					} else {
1007						console.error('DataLayer not ready for targeting...')
1008					}
1009
1010
1011					if (cXsegmentIds !== null && cXsegmentIds !== undefined) {
1012
1013						var regexPattern = new RegExp("(\\b8nfapah6uu5t\\b|\\b8o1gwyxui6y1\\b)");
1014						if (!regexPattern.test(cXsegmentIds)) {
1015							cXsegmentIds = (Array.isArray(cXsegmentIds) && cXsegmentIds.length === 0) ? '8o1gwyxui6y1,aavib3epzfey' : (cXsegmentIds !== '' ? cXsegmentIds + ',8o1gwyxui6y1,aavib3epzfey' : cXsegmentIds);
1016							if (dfpDebug) {console.log('Additional DFP setTargeting CxSegments: "8o1gwyxui6y1,aavib3epzfey"')}
1017						}
1018						var regexPattern = new RegExp("(\\b8nqech16gyaq\\b)");
1019						if (!regexPattern.test(cXsegmentIds)) {
1020							cXsegmentIds = cXsegmentIds + (cXsegmentIds !== '' ? ',' : '') + '8nqech16gyaq';
1021							if (dfpDebug) {console.log('Additional DFP setTargeting CxSegments: "8nqech16gyaq"')}
1022						}
1023						var regexPattern = new RegExp("(\\b8o1h8hno13z9\\b)");
1024						if (!regexPattern.test(cXsegmentIds)) {
1025							cXsegmentIds = cXsegmentIds + (cXsegmentIds !== '' ? ',' : '') + '8o1h8hno13z9';
1026							if (dfpDebug) {console.log('Additional DFP setTargeting CxSegments: "8o1h8hno13z9"')}
1027						}
1028
1029						if (dfpDebug) {console.log('DFP setTargeting CxSegments: ' + cXsegmentIds)}
1030						googletag.pubads().setTargeting("CxSegments", cXsegmentIds);
1031
1032					}
1033
1034/*					if (dfpDebug) {console.log('Calling cX.getSegments...')}
1035					cX.getSegments('f1ab28b7c9202ce3defa8bb2979a88f90c7a5ab2', function(segments) {
1036						cX.Array.forEach(segments, function (cxTypedSegment, index) {
1037							if (cxTypedSegment.type == 'contextual') {
1038								contextualIds.push(cxTypedSegment.id);
1039							}
1040						});
1041						if (dfpDebug) {console.log('Setting targeting fo cX.getSegments: ' + contextualIds.join())}
1042						googletag.pubads().setTargeting("CxContext", contextualIds.join());
1043					});
1044*/
1045					googletag.pubads().setTargeting("CxContext", cxContextualIds.join());
1046
1047					googletag.pubads().setTargeting("deliveryType", deliveryType);
1048
1049					(function () {
1050
1051						function generateNewPPID() {
1052							return crypto.randomUUID().replace(/-/g, '');
1053						}
1054
1055						function parsePossiblyDoubleEncodedJSON(value) {
1056							var parsed = value;
1057							while (typeof parsed === 'string') {
1058								parsed = JSON.parse(parsed);
1059							}
1060							return parsed;
1061						}
1062
1063						function setPPID(ppid) {
1064							if (!ppid) return;
1065							localStorage.setItem('ppid', ppid);
1066							googletag.pubads().setPublisherProvidedId(ppid);
1067						}
1068
1069						var storedPPID = localStorage.getItem('ppid');
1070
1071						if (storedPPID) {
1072							if (dfpDebug) {console.log('ls storedPPID: ', storedPPID)}
1073							googletag.pubads().setPublisherProvidedId(storedPPID);
1074							return;
1075						}
1076
1077						try {
1078							var gravitoValue = localStorage.getItem('gravito-microprofile-data');
1079							if (gravitoValue) {
1080								var parsed = parsePossiblyDoubleEncodedJSON(gravitoValue);
1081								if (parsed && parsed.i) {
1082									var migratedPPID = btoa(parsed.i);
1083									if (dfpDebug) {console.log('gmd ls migratedPPID: ', migratedPPID)}
1084									setPPID(migratedPPID);
1085									return;
1086								}
1087							}
1088						} catch (e) {
1089							console.warn('Gravito migration failed:', e);
1090						}
1091
1092						var newPPID = generateNewPPID();
1093						setPPID(newPPID);
1094						if (dfpDebug) {console.log('created a newPPID: ', newPPID)}
1095
1096					})();
1097
1098					//waitForResource('localStorage', 'gravito-microprofile-data').then(function (value) {
1099					//	if (dfpDebug) {console.log('gravito-microprofile-data exists in local storage with value: ', value)}
1100					//	var ppid = btoa(JSON.parse(JSON.parse(value)).i);
1101					//	if (ppid) {
1102					//		googletag.pubads().setPublisherProvidedId(ppid);
1103					//		if (dfpDebug) {console.log('ppid: ' + ppid)}
1104					//	}
1105					//});
1106
1107					googletag.pubads().setTargeting("adlocation", adLocation);
1108
1109					googletag.pubads().enableSingleRequest();
1110					googletag.pubads().collapseEmptyDivs();
1111
1112					var renderMarginPercent = Math.random() < 1/3 ? 40 : Math.random() < 1/2 ? 60 : 80;
1113					googletag.pubads().setTargeting("experiments", "lazyload_" + renderMarginPercent);
1114					googletag.pubads().enableLazyLoad({
1115						fetchMarginPercent: 100,
1116						renderMarginPercent: renderMarginPercent,
1117						mobileScaling: 1
1118					});
1119					if (dfpDebug) {console.log('renderMarginPercent: ' + renderMarginPercent)}
1120
1121/*
1122					googletag.pubads().enableLazyLoad({
1123						fetchMarginPercent: 200,
1124						renderMarginPercent: 70,
1125						mobileScaling: 1
1126					});
1127*/
1128					googletag.pubads().disableInitialLoad();
1129
1130					googletag.enableServices();
1131
1132					dfpConfig.serviceStarted = true;
1133
1134				});
1135
1136			}
1137			this.initialized = true;
1138		}
1139
1140	};
1141
1142</script>
1142
1143
1144
1145<script type="text/javascript">
1146
1147	if (location.href.match(/raskauslaskuri|nimikone|raskaus-viikko-viikolta/)) {
1148		useHBM = false;
1149	}
1150
1151	var rdads = document.createElement('script');
1152	rdads.async = true;
1153	var useSSL = 'https:' == document.location.protocol;
1154	rdads.src = window.dfp.pbConfig[window.dfp.visibility].script;
1155	var node = document.getElementsByTagName('script')[0];
1156	node.parentNode.insertBefore(rdads, node);
1157
1158	var pbjsConf = window.dfp.pbConfig[window.dfp.visibility].configId[adLocation];
1159	if (dfpDebug) {console.log('pbjsConf in use ' + pbjsConf);}
1160
1161/*
1162	var rdads = document.createElement('script');
1163	rdads.async = true;
1164	var useSSL = 'https:' == document.location.protocol;
1165	rdads.src = window.dfp.pbConfig[window.dfp.visibility].script;
1166	var node = document.getElementsByTagName('script')[0];
1167	node.parentNode.insertBefore(rdads, node);
1168
1169	var pbjsConf = window.dfp.pbConfig[window.dfp.visibility].configId[adLocation];
1170	if (dfpDebug) {console.log('pbjsConf in use ' + pbjsConf);}
1171
1172	function initDFP(cXsegmentIds) {
1173
1174		if (dfpDebug) {console.log('cSsegmentIds: ' + cXsegmentIds)}
1175		if( window.dfp !== undefined ) {
1176			if (dfpDebug) {console.log('initDFP() called by cX.getUserSegmentIds ' + cXsegmentIds + '...')}
1177			setTimeout(function(){
1178				window.dfp.init(cXsegmentIds);
1179			}, 1);
1180			//window.dfp.init(["desk-1", "rectangle-1", "rectangle-2", "sky-scraper-1", "sky-scraper-2", "mob-1"]);
1181			setTimeout(function(){
1182				initHBM();
1183			}, 1);
1184		} else {
1185			console.log('DFP init failed: window.dfp missing!');
1186		}
1187
1188	}
1189
1190	function initHBM(noSlotReload) {
1191
1192		if (dfpDebug) {console.log('initHBM called...')}
1193
1194		window.relevantDigital = window.relevantDigital || {};
1195		relevantDigital.cmd = relevantDigital.cmd || [];
1196		relevantDigital.cmd.push(function() {
1197			relevantDigital.loadPrebid({
1198				configId: pbjsConf,
1199				manageAdserver: false, //Manage adserver set to off.
1200				collapseEmptyDivs: true,
1201				collapseBeforeAdFetch: false,
1202				noGpt: true,
1203				allowedDivIds: null, // set to an array to only load certain <div>s, example - ["divId1", "divId2"]
1204				noSlotReload: false // set true to only load ad slots that have never been loaded
1205			});
1206		});
1207
1208	}
1209*/
1210
1211	function initDFP(cXsegmentIds) {
1212
1213		if (dfpDebug) {console.log('cXsegmentIds: ' + cXsegmentIds)}
1214		if( window.dfp !== undefined ) {
1215			//if (dfpDebug) {console.log('initDFP() called by cX.getUserSegmentIds ' + cXsegmentIds + '...')}
1216			if (dfpDebug) {console.log('initDFP() called by cX.getUserSegmentIds ' + cXsegmentIds + '...')}
1217			setTimeout(function(){
1218				window.dfp.init(cXsegmentIds);
1219			}, 1);
1220			setTimeout(function(){
1221				if (useHBM) {
1222					if (!testSRA) {
1223						if (dfpDebug) {console.log('HBM initialized...')}
1224						initHBM(cXsegmentIds);
1225					}
1226				} else {
1227					console.log('HBM not in use!!!');
1228					googletag.pubads().refresh();
1229				}
1230			}, 100);
1231		} else {
1232			console.log('DFP init failed: window.dfp missing!');
1233		}
1234
1235	}
1236
1237	function initHBM(cXsegmentIds) {
1238
1239		if (dfpDebug) {console.log('initHBM called...')}
1240
1241		var hbArticleTags = articleTags != '' ? articleTags.split() : [];
1242		var hbArticleCategories = articleCategories != '' ? [...new Set(articleCategory.split(',').concat(articleCategories.split(',')))] : [];
1243
1244		window.relevantDigital = window.relevantDigital || {};
1245		relevantDigital.cmd = relevantDigital.cmd || [];
1246
1247		relevantDigital.cmd.push(function() {
1248
1249/*
1250			let hasDoneFirstCall;
1251			relevantDigital.addAuctionCallbacks({
1252				// Code in function below can alternatively be added inside relevantDigital.loadPrebid({ onBeforeAuctionSetup: { ... } })
1253				onBeforeAuctionSetup: function({ auction }) {
1254					if(!(window.googletag || {}).pubads) {
1255						console.error('GPT not initialized, this method only works if GPT-slots are created before calling relevantDigital.loadPrebid()');
1256						return;
1257					}
1258					if(hasDoneFirstCall) { // Only do this on page-load and not subsequent auctions
1259						return;
1260					}
1261					hasDoneFirstCall = true;
1262
1263					// Load all slots containing these strings in ad unit paths immediately (without waiting for prebid)
1264					const TO_LOAD_NOW = ['topad-'];
1265
1266					const isLoadNowPath = (p) => TO_LOAD_NOW.find((s) => p.includes(s));
1267					const loadNowSlots = [];
1268					googletag.pubads().getSlots().forEach((slot) => {
1269						if (isLoadNowPath(slot.getAdUnitPath())) {
1270							loadNowSlots.push(slot);
1271						}
1272					});
1273					if (!loadNowSlots.length) {
1274						return; // continue as normal
1275					}
1276					// Requests slots immediately
1277					googletag.pubads().refresh(loadNowSlots);
1278
1279					// Make sure they're not included in the prebid auction
1280					auction.adUnits = auction.adUnits.filter(({ gamPath }) => !isLoadNowPath(gamPath));
1281
1282					// Then manually remove them when Relevant is doing the ad request
1283					auction.googletagCalls = auction.googletagCalls || {};
1284					auction.googletagCalls.refresh = (slots, ...rest) => {
1285						const all = slots || googletag.pubads().getSlots();
1286						const toLoad = all.filter((s) => !isLoadNowPath(s.getAdUnitPath()));
1287						googletag.pubads().refresh(toLoad, ...rest);
1288					};
1289				},
1290			});
1291*/
1292
1293			relevantDigital.addPrebidConfig({
1294				ortb2: {
1295					site: {
1296						//keywords: contextualIds.join(),
1297						ext: {
1298							data: {
1299								CxContext: Object.values(cxContextualIds),
1300								articleCategories: hbArticleCategories,
1301								articleTags: hbArticleTags
1302							}
1303						}
1304					}
1305				}
1306			});
1307
1308			relevantDigital.loadPrebid({
1309				configId: pbjsConf,
1310				manageAdserver: false, //Manage adserver set to off.
1311				collapseEmptyDivs: true,
1312				collapseBeforeAdFetch: false,
1313				noGpt: true,
1314				allowedDivIds: null, // set to an array to only load certain <div>s, example - ["divId1", "divId2"]
1315				noSlotReload: false, // set true to only load ad slots that have never been loaded
1316				onBeforeAuctionSetup: function(params) {
1317					params.auction.adUnits.forEach(function(unit) {
1318						unit.bids.forEach(function(bid){
1319							if (bid.bidder == 'appnexus') {
1320								bid.params.keywords = {cxSegments: cXsegmentIds, CxContext: cxContextualIds, articleTags: hbArticleTags, articleCategories: hbArticleCategories};
1321								if (dfpDebug) {console.log('Setting params for Xandr bidder...')}
1322							}
1323						})
1324					})
1325				}
1326			});
1327
1328		});
1329
1330	}
1331
1332	function loadAdSlot(adSlotId) {
1333
1334		if (dfpDebug) {console.log('HAS: runHeaderbid: ' + adSlotId + ', ' + (Date.now() - timerStart) + 'ms...')}
1335		observerHeaderbidRun = true;
1336
1337		var adUnit = adSlotId.split('__')[1].split('_')[0];
1338
1339		var hbArticleTags = articleTags != '' ? articleTags.split() : [];
1340		var hbArticleCategories = articleCategories != '' ? [...new Set(articleCategory.split(',').concat(articleCategories.split(',')))] : [];
1341
1342		googletag.cmd.push(function() {
1343
1344			//console.log('HAS: dfp.slots[adUnit].sizes: ' + adUnit + ' - ' + dfp.slots[adUnit].sizes + ' # ' + dfp.slots[adUnit].visibility);
1345			//if (dfp.slots[adUnit]) {console.log(adUnit + ' exists...')}
1346
1347			if (dfp.slots[adUnit] && ['all', dfp.visibility].includes(dfp.slots[adUnit].visibility)) {
1348				if (dfpDebug) {console.log('HAS: dfp.slots[adUnit].sizes: ' + adUnit + ' - ' + dfp.slots[adUnit].sizes + ' # ' + dfp.slots[adUnit].visibility)}
1349				if (adUnit.includes('native')) {
1350					googletag.defineSlot('/' + window.dfp.networkcode + '/' + window.dfp.serviceName + '/native/' + adUnit + '', window.dfp.slots[adUnit].sizes, adSlotId).addService(googletag.pubads()).setTargeting('adslotid', adSlotId.replace('dfp__',''));
1351					if (dfpDebug) {console.log('Defining slot: /' + window.dfp.networkcode + '/' + window.dfp.serviceName + '/native/' + adUnit)}
1352				} else if (adUnit.includes('topad') || adUnit.includes('interstitial')) {
1353					googletag.defineSlot('/' + window.dfp.networkcode + '/' + window.dfp.serviceName + '/content/' + adUnit + '', window.dfp.slots[adUnit].sizes, adSlotId).addService(googletag.pubads()).setTargeting('adslotid', adSlotId.replace('dfp__',''));
1354					if (dfpDebug) {console.log('Defining slot: /' + window.dfp.networkcode + '/' + window.dfp.serviceName + '/content/' + adUnit)}
1355				} else {
1356					googletag.defineSlot('/' + window.dfp.networkcode + '/' + window.dfp.serviceName + '/' + adLocation + '/' + adUnit + '', window.dfp.slots[adUnit].sizes, adSlotId).addService(googletag.pubads()).setTargeting('adslotid', adSlotId.replace('dfp__',''));
1357					if (dfpDebug) {
1358						console.log('Defining slot: /' + window.dfp.networkcode + '/' + window.dfp.serviceName + '/' + adLocation + '/' + adUnit)
1359					}
1360				}
1361			}
1362		});
1363
1364		//if (adUnit.includes('native')) {
1365		if (adUnit.includes('native') || adUnit.includes('interstitial') || adUnit.includes('topad-desk')) {
1366
1367			googletag.cmd.push(function() {
1368				const slot = googletag.pubads().getSlots().find(s => s.getSlotElementId() === adSlotId);
1369				if (slot) {
1370					googletag.pubads().refresh([slot], {changeCorrelator: false});
1371				}
1372			});
1373
1374		} else {
1375
1376			if (dfpDebug) {
1377				console.log('HAS: Existing slots: ');
1378				googletag.pubads().getSlots().forEach((slot) => {
1379					console.log('HAS: ' + slot.getSlotElementId());
1380				});
1381			}
1382
1383			window.relevantDigital = window.relevantDigital || {};
1384			relevantDigital.cmd = relevantDigital.cmd || [];
1385			relevantDigital.cmd.push(function() {
1386
1387				relevantDigital.addPrebidConfig({
1388					ortb2: {
1389						site: {
1390							//keywords: contextualIds.join(),
1391							ext: {
1392								data: {
1393									CxContext: Object.values(cxContextualIds),
1394									articleCategories: hbArticleCategories,
1395									articleTags: hbArticleTags
1396								}
1397							}
1398						}
1399					}
1400				});
1401
1402				relevantDigital.loadPrebid({
1403					configId: pbjsConf,
1404					manageAdserver: false, //Manage adserver set to off.
1405					collapseEmptyDivs: true,
1406					collapseBeforeAdFetch: false,
1407					noGpt: true,
1408					allowedDivIds: Array.isArray(adSlotId) ? adSlotId : [adSlotId], // set to an array to only load certain <div>s, example - ["divId1", "divId2"]
1409					noSlotReload: true, // set true to only load ad slots that have never been loaded
1410					googletagCalls: {
1411						refresh: (slots) => googletag.pubads().refresh(slots, { changeCorrelator: false }),
1412					},
1413					onBeforeAuctionSetup: function(params) {
1414						params.auction.adUnits.forEach(function(unit) {
1415							unit.bids.forEach(function(bid){
1416								if (bid.bidder == 'appnexus' || bid.bidder == 'appnexus_s2s_alias') {
1417									bid.params.keywords = {cxSegments: cxSegmentIds, CxContext: cxContextualIds, articleTags: hbArticleTags, articleCategories: hbArticleCategories};
1418									if (dfpDebug) {console.log('Setting params for Xandr bidder...')}
1419								}
1420							})
1421						})
1422					}
1423
1424				});
1425			});
1426
1427		}
1428
1429	}
1430
1431	if (useAdvantage) {
1432		(async () => {
1433			try {
1434
1435				const module = await import("https://cdn.jsdelivr.net/npm/@get-advantage/advantage/+esm");
1436				const utils = await import("https://cdn.jsdelivr.net/npm/@get-advantage/advantage/utils/+esm");
1437
1438				const { Advantage, AdvantageFormatName } = module;
1439				const { advantageWrapAdSlotElement } = utils;
1440
1441				const advantage = Advantage.getInstance();
1442				advantage.configure({
1443					formatIntegrations: [
1444						{
1445							format: AdvantageFormatName.WelcomePage,
1446							options: {
1447								autoCloseDuration: 20,
1448								siteTitle: `${window.innerWidth < 450 ? '' : 'Kaksplus.fi'}`,
1449								logo: `https://icons.duckduckgo.com/ip3/${window.location.hostname}.ico`,
1450								continueToLabel: `${window.innerWidth < 450 ? 'Jatka' : 'Siirry'}`,
1451								scrollBackToTop: false,
1452								adLabel: 'Kaksplus.fi',
1453							},
1454							setup: (wrapper, ad) => {
1455								return new Promise((resolve) => {
1456									// Here you can add any custom setup logic for the WelcomePage format,
1457									// such as event listeners or additional styling.
1458									resolve();
1459								});
1460							},
1461							reset(wrapper, ad) {
1462								// Here you can add any custom logic that should run when the ad is reset,
1463								// And reset setup styling or event listeners if needed.
1464							},
1465							close(wrapper, ad) {
1466								// Here you can add any custom logic that should run when the ad is closed,
1467								// And reset setup styling or event listeners if needed.
1468							},
1469						},
1470						{
1471							format: AdvantageFormatName.Midscroll,
1472							setup: (wrapper, ad) => {
1473								return ((resolve) => {
1474									resolve();
1475								});
1476							},
1477							reset(wrapper, ad) {
1478							}
1479						},
1480						{
1481							format: AdvantageFormatName.DoubleMidscroll,
1482							setup: (wrapper, ad) => {
1483								return ((resolve) => {
1484									resolve();
1485								});
1486							},
1487							reset(wrapper, adIframe) {
1488
1489							},
1490						},
1491						{
1492							format: AdvantageFormatName.Topscroll,
1493							setup: (wrapper, ad) => {
1494								return ((resolve) => {
1495									resolve();
1496								});
1497							},
1498							reset(wrapper, ad) {
1499							}
1500						},
1501					]
1502				});
1503				console.log("Advantage activated...");
1504			} catch (error) {
1505				console.error("An error occurred while loading the Advantage package: ", error);
1506			}
1507
1508		})();
1509	}
1510
1511</script>
1511
1512
1513<!-- DFP End -->
1514
1515
1516<!-- Google Tag Manager -->
1517<script>
vendor: 331 bytes, lines 1517-1521
1517(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
1518new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
1519j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
1520'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
1521})(window,document,'script','dataLayer','
1521GTM-M9ZRBWJQ
vendor: 3 bytes, line 1521
1521');
1521</script>
1521
1522<!-- End Google Tag Manager -->
1523
1524<!-- Otava Analytiikka -->
1525<script>
vendor: 331 bytes, lines 1525-1529
1525(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
1526new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
1527j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
1528'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
1529})(window,document,'script','dataLayer','
1529GTM-TSMVFP56
vendor: 3 bytes, line 1529
1529');
1529</script>
1529
1530<!-- End Otava Analytiikka -->
1531
1532<!-- Otava Business Logic -->
1533<script>
vendor: 331 bytes, lines 1533-1537
1533(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
1534new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
1535j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
1536'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
1537})(window,document,'script','dataLayer','
1537GTM-T56W3Z7
vendor: 3 bytes, line 1537
1537');
1537</script>
1537
1538<!-- End Otava Business Logic -->
1539
1540<script type="text/javascript">
1541	dataLayer.push({'event': 'adLocation', 'adLocation': 'content'});
1542</script>
1542
1543
1544<script async id="ebx" src="//applets.ebxcdn.com/ebx.js"></script>
1544
1545
1546<!-- // kaksplus.fi -->
1547
1548<!-- Head tag end, do not remove -->            
1548<script type="text/javascript"><!--
1549                                function powerpress_pinw(pinw_url){window.open(pinw_url, 'PowerPressPlayer','toolbar=0,status=0,resizable=1,width=460,height=320');	return false;}
1550                //-->
1551
1552                // tabnab protection
1553                window.addEventListener('load', function () {
1554                    // make all links have rel="noopener noreferrer"
1555                    document.querySelectorAll('a[target="_blank"]').forEach(link => {
1556                        link.setAttribute('rel', 'noopener noreferrer');
1557                    });
1558                });
1559            </script>
1559
1560            <!-- AWPO lazy-load marker -->		<link rel="manifest" href="https://kaksplus.fi/wp-json/wp/v2/web-app-manifest">
1561					<meta name="theme-color" content="#ffffff">
1562								<meta name="apple-mobile-web-app-capable" content="yes">
1563				<meta name="mobile-web-app-capable" content="yes">
1564
1565				<link rel="apple-touch-startup-image" href="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/img/android-icon-36.png">
1566
1567				<meta name="apple-mobile-web-app-title" content="Kaksplus">
1568		<meta name="application-name" content="Kaksplus">
1569		  
1569<script type="text/javascript">
1570    var staticBodyClassList = ["wp-singular","page-template","page-template-template-plussalaiset","page-template-template-plussalaiset-php","page","page-id-159019","wp-theme-om-core","wp-child-theme-om-kaksplus-theme","blog-1","required-access-level_free"];
1571  </script>
1571
1572</head>
1573<body class="wp-singular page-template page-template-template-plussalaiset page-template-template-plussalaiset-php page page-id-159019 wp-theme-om-core wp-child-theme-om-kaksplus-theme blog-1 required-access-level_free">
1574
1575<!-- Body tag start, do not remove -->
1576
1577<!-- Google Tag Manager (noscript) -->
1578<noscript><iframe height="0" width="0" style="display:none;visibility:hidden" data-src="https://www.googletagmanager.com/ns.html?id=GTM-M9ZRBWJQ" class="awpo-lazy"></iframe></noscript>
1579<!-- End Google Tag Manager (noscript) -->
1580
1581<!-- Otava Analytiikka (noscript) -->
1582<noscript><iframe height="0" width="0" style="display:none;visibility:hidden" data-src="https://www.googletagmanager.com/ns.html?id=GTM-TSMVFP56" class="awpo-lazy"></iframe></noscript>
1583<!-- End Otava Analytiikka (noscript) -->
1584
1585<!-- Otava Business Logic (noscript) -->
1586<noscript><iframe height="0" width="0" style="display:none;visibility:hidden" data-src="https://www.googletagmanager.com/ns.html?id=GTM-T56W3Z7" class="awpo-lazy"></iframe></noscript>
1587<!-- End Otava Business Logic (noscript) -->
1588
1589<!-- Body tag end, do not edit or remove -->
1590<div id="site" class="">
1591  <div class="skip-link screen-reader-text">
1592    <a href="#main">Hyppää suoraan sisältöön</a>
1593</div>
1594  <header class="topbar" role="banner">
1595  
1596<div class="topbar__shadow">
1597  <div class="topbar__top wrapper wrapper_center">
1598
1599    <a class="topbar__logo" href="https://kaksplus.fi/" rel="home">
1600      <span class="screen-reader-text">https://kaksplus.fi/</span>
1601    </a>
1602
1603    <div class="topbar__right">
1604    
1605                                    <a href="https://kaksplus.fi?option=oauthredirect&#038;app_name=openid&#038;redirect_url=https%3A%2F%2Fkaksplus.fi%2Fplussalaisuus" title="Kirjaudu" class="action-item action-item--button topbar__button">
1606                <span class="material-symbols-outlined"> account_circle </span>
1607                <span class="topbar__button-info">Kirjaudu</span>
1608                </a>
1609                
1610        
1611        
1612
1613                    <a href="/haku/" class="topbar__link">
1614                <span class="material-symbols-outlined"> search </span>
1615                <span class="topbar__button-info">Hae</span>
1616            </a>
1617      
1618      <button data-toggle-global="navigation-menu_on" aria-controls="site-navigation" aria-expanded="false" class="topbar__button navigation-menu__toggle" aria-label="Avaa valikko">
1619        <span class="material-symbols-outlined"> menu </span>
1620        <span class="topbar__button-info">Valikko</span>
1621      </button>
1622    </div>
1623    <nav id="site-navigation" class="navigation-menu">
1624      <button class="navigation-menu__close" data-toggle-global="navigation-menu_off" aria-controls="site-navigation" aria-expanded="false" aria-label="Sulje valikko">
1625        <span class="navigation-menu__close-text">Sulje</span>
1626        <span class="material-symbols-outlined"> close </span>
1627      </button>
1628      <div class="navigation-menu__primary">
1629        <ul id="menu-main-menu" class="navigation-menu__list"><li id="menu-item-159870" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-159870"><a href="https://kaksplus.fi/plussalaiset/">Plussalaiset</a></li>
1630<li id="menu-item-193800" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-193800"><a href="https://kaksplus.fi/videot/">Videot</a></li>
1631<li id="menu-item-13496" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-has-children menu-item-13496"><a href="https://kaksplus.fi/kategoria/vauvahaaveet/">Vauvahaaveet</a>
1632<ul class="sub-menu">
1633	<li id="menu-item-146738" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-146738"><a href="https://kaksplus.fi/kategoria/vauvahaaveet/hedelmallisyys/">Hedelmällisyys</a></li>
1634	<li id="menu-item-13495" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-13495"><a href="https://kaksplus.fi/kategoria/vauvahaaveet/lapsettomuus/">Lapsettomuus</a></li>
1635	<li id="menu-item-146737" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-146737"><a href="https://kaksplus.fi/kategoria/vauvahaaveet/adoptio/">Adoptio</a></li>
1636	<li id="menu-item-13200" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-13200"><a href="https://kaksplus.fi/ovulaatiolaskuri/">Ovulaatiolaskuri</a></li>
1637</ul>
1638</li>
1639<li id="menu-item-79291" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-has-children menu-item-79291"><a href="https://kaksplus.fi/kategoria/raskaus/">Raskaus</a>
1640<ul class="sub-menu">
1641	<li id="menu-item-19468" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-19468"><a href="https://kaksplus.fi/kategoria/raskaus/raskaus-viikko-viikolta/">Raskaus viikko viikolta</a></li>
1642	<li id="menu-item-13199" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-13199"><a href="https://kaksplus.fi/kategoria/raskaus/synnytys/">Synnytys</a></li>
1643	<li id="menu-item-57395" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-57395"><a href="https://kaksplus.fi/kategoria/raskaus/synnytystarinat/">Synnytystarinat</a></li>
1644	<li id="menu-item-80351" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-80351"><a href="https://kaksplus.fi/raskauslaskuri/">Raskauslaskuri</a></li>
1645</ul>
1646</li>
1647<li id="menu-item-144388" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-has-children menu-item-144388"><a href="https://kaksplus.fi/kategoria/vauva/">Vauva</a>
1648<ul class="sub-menu">
1649	<li id="menu-item-19319" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-19319"><a href="https://kaksplus.fi/kategoria/vauva/vauvan-kehitys/">Vauvan kehitys</a></li>
1650	<li id="menu-item-13492" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-13492"><a href="https://kaksplus.fi/kategoria/vauva/vauvan-terveys/">Vauvan terveys</a></li>
1651	<li id="menu-item-13195" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-13195"><a href="https://kaksplus.fi/kategoria/vauva/imetys-ja-vauvan-ruoka/">Imetys ja vauvan ruoka</a></li>
1652	<li id="menu-item-79292" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-79292"><a href="https://kaksplus.fi/nimikone/">Nimikone</a></li>
1653</ul>
1654</li>
1655<li id="menu-item-13120" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-has-children menu-item-13120"><a href="https://kaksplus.fi/kategoria/lapsi/">Lapsi</a>
1656<ul class="sub-menu">
1657	<li id="menu-item-13193" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-13193"><a href="https://kaksplus.fi/kategoria/lapsi/lapsen-kehitys/">Lapsen kehitys</a></li>
1658	<li id="menu-item-13194" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-13194"><a href="https://kaksplus.fi/kategoria/lapsi/lapsen-terveys/">Lapsen terveys</a></li>
1659	<li id="menu-item-79295" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-79295"><a href="https://kaksplus.fi/pituuslaskuri/">Pituus­laskuri</a></li>
1660</ul>
1661</li>
1662<li id="menu-item-79297" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-has-children menu-item-79297"><a href="https://kaksplus.fi/kategoria/vanhemmuus/">Vanhemmuus</a>
1663<ul class="sub-menu">
1664	<li id="menu-item-13192" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-13192"><a href="https://kaksplus.fi/kategoria/vanhemmuus/kasvatus/">Kasvatus</a></li>
1665	<li id="menu-item-146320" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-146320"><a href="https://kaksplus.fi/kategoria/vanhemmuus/vanhemman-terveys/">Vanhemman terveys</a></li>
1666	<li id="menu-item-13487" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-13487"><a href="https://kaksplus.fi/kategoria/vanhemmuus/minun-tarinani/">Minun tarinani</a></li>
1667</ul>
1668</li>
1669<li id="menu-item-79296" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-has-children menu-item-79296"><a href="https://kaksplus.fi/kategoria/perhe-elama/">Perhe-elämä</a>
1670<ul class="sub-menu">
1671	<li id="menu-item-79300" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-79300"><a href="https://kaksplus.fi/kategoria/perhe-elama/ruoka/">Ruoka</a></li>
1672	<li id="menu-item-13488" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-13488"><a href="https://kaksplus.fi/kategoria/perhe-elama/parisuhde/">Parisuhde</a></li>
1673	<li id="menu-item-13491" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-13491"><a href="https://kaksplus.fi/kategoria/perhe-elama/vaatteet-ja-varusteet/">Vaatteet ja varusteet</a></li>
1674	<li id="menu-item-13489" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-13489"><a href="https://kaksplus.fi/kategoria/perhe-elama/tyo-ja-raha/">Työ ja raha</a></li>
1675	<li id="menu-item-79299" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-79299"><a href="https://kaksplus.fi/kategoria/perhe-elama/koti/">Koti</a></li>
1676	<li id="menu-item-46578" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-46578"><a href="https://kaksplus.fi/kategoria/perhe-elama/vapaa-aika/">Vapaa-aika</a></li>
1677</ul>
1678</li>
1679<li id="menu-item-79301" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-has-children menu-item-79301"><a href="https://kaksplus.fi/kategoria/laskurit/">Laskurit</a>
1680<ul class="sub-menu">
1681	<li id="menu-item-79303" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-79303"><a href="https://kaksplus.fi/ovulaatiolaskuri/">Ovulaatiolaskuri</a></li>
1682	<li id="menu-item-79305" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-79305"><a href="https://kaksplus.fi/raskauslaskuri/">Raskauslaskuri</a></li>
1683	<li id="menu-item-79306" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-79306"><a href="https://kaksplus.fi/kategoria/raskaus/raskaus-viikko-viikolta/">Raskaus viikko viikolta</a></li>
1684	<li id="menu-item-99487" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-99487"><a href="https://kaksplus.fi/raskaus/kiinalainen-syntymakalenteri/">Kiinalainen syntymäkalenteri</a></li>
1685	<li id="menu-item-79302" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-79302"><a href="https://kaksplus.fi/nimikone/">Nimikone</a></li>
1686	<li id="menu-item-79304" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-79304"><a href="https://kaksplus.fi/pituuslaskuri/">Pituus­laskuri</a></li>
1687</ul>
1688</li>
1689</ul>      </div>
1690
1691      <div class="navigation-menu__secondary">
1692        <ul id="menu-apuvalikko" class="navigation-menu__list"><li id="menu-item-147180" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-147180"><a href="https://kaksplus.fi/kategoria/kilpailut/">Kilpailut</a></li>
1693<li id="menu-item-147187" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-147187"><a href="https://kaksplus.fi/kategoria/podcast/">Podcast</a></li>
1694<li id="menu-item-173772" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-173772"><a href="https://kaksplus.fi/blogit/">Blogit</a></li>
1695<li id="menu-item-147179" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-147179"><a href="https://keskustelu.kaksplus.fi/">Keskustelu</a></li>
1696<li id="menu-item-158473" class="menu-item menu-item-type-post_type menu-item-object-post menu-item-158473"><a href="https://kaksplus.fi/mainos/mainostajalle/">Mainosta tällä sivulla</a></li>
1697</ul>      </div>
1698    </nav><!-- .navigation-menu -->
1699  </div> <!-- topbar top -->
1700
1701</div>
1702
1703  </header>
1704
1705
1706  <main id="main">
1707  <article class="v2-container-full single-post">
1708        <div class="main-content">
1709        <h1 class="page-title">Kirjaudu Plussalaisiin</h1>
1710
1711
1712<h2 class="wp-block-heading" id="h-tervetuloa-liittymaan-plussalaisiin">Tervetuloa liittymään Plussalaisiin!</h2>
1713
1714
1715
1716<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
1717<p>Plussalaiset on Kaksplussan ilmainen palvelu kaikille vanhemmille ja lasten läheisille. Plussalaisiin liittymällä saat omaan feediisi juuri sinun perheesi tilanteeseen räätälöityjä sisältöjä ja pääset nauttimaan vain plussalaisille tarkoitetuista mahtavista eduista.</p>
1718
1719
1720
1721<p></p>
1722
1723
1724
1725<h4 class="wp-block-heading" id="h-miksi-liittya-plussalaisiin">Miksi liittyä Plussalaisiin?</h4>
1726
1727
1728
1729<p>Plussalaisuus on yhteisö ja tuki vanhemmuuden matkalla. Kirjautumalla palveluumme ja kertomalla joko lasketun aikasi tai jo syntyneen lapsen syntymäpäivän, <strong>saat juuri sinun lapsesi iän mukaan personoituja sisältöjä: tietoa lapsesi kehityksestä ja terveydestä sekä kasvatuksesta ja vanhemmuudesta.</strong></p>
1730
1731
1732
1733<br>
1734
1735
1736
1737<p>Plussalaisena pääset nauttimaan myös lapsiperheiden suosikkieduista ja voit osallistua vain plussalaisille tarkoitettuihin arvontoihin ja tapahtumiin.</p>
1738
1739
1740
1741<br>
1742</div></div>
1743
1744
1745
1746<div class="v2-container">
1747
1748  <section class="plussalaiset-edut-limited-carousel">
1749
1750    <h2 class="plussalaiset-edut__heading">Esimerkiksi näitä etuja saa nyt plussalaisena</h2>
1751    <div class="owl-carousel owl-theme">
1752                <div class="item">
1753            <a href="https://kaksplus.fi/?option=oauthredirect&#038;app_name=openid&#038;redirect_url=https://kaksplus.fi/plussalaiset">
1754                                <img decoding="async" src="https://kaksplus.fi/wp-content/uploads/2026/09/syyskuun-dinokirja-800x500.jpg" alt="Syyskuun kirja-arvonta: Herttala – Aarnin dinosauruskirja">
1755                            <h4>Syyskuun kirja-arvonta: Herttala – Aarnin dinosauruskirja</h4>
1756              <h5></h5><p>Syyskuussa Plussalaisten arvonnassa hurmaava kuvakirja lasten lempihahmoista, leikistä ja ystävyydestä!</p>
1757
1758            </a>
1759          </div>
1760                  <div class="item">
1761            <a href="https://kaksplus.fi/?option=oauthredirect&#038;app_name=openid&#038;redirect_url=https://kaksplus.fi/plussalaiset">
1762                                <img decoding="async" src="https://kaksplus.fi/wp-content/uploads/2025/06/koululaisen-kesaetu-800x500.jpg" alt="Anna lahjaksi lukutaitoa – hyödyllinen ja hauska Koululainen-lehti mahtavaan etuhintaan!">
1763                            <h4>Anna lahjaksi lukutaitoa – hyödyllinen ja hauska Koululainen-lehti mahtavaan etuhintaan!</h4>
1764              <h5></h5><p>Etu Plussalaisille: tilaa Koululainen omalle lapsellesi tai lahjaksi lähipiirin lapselle todella edullisesti! Samalla tuet lapsen lukutaidon kehittymistä.</p>
1765
1766            </a>
1767          </div>
1768                  <div class="item">
1769            <a href="https://kaksplus.fi/?option=oauthredirect&#038;app_name=openid&#038;redirect_url=https://kaksplus.fi/plussalaiset">
1770                                <img decoding="async" src="https://kaksplus.fi/wp-content/uploads/2024/09/suunnittele-unelmiesi-nimitarrat-800x500.png" alt="Nyt -15 % alennus Tarranallen kestävistä ja tyylikkäistä nimikointitarroista!">
1771                            <h4>Nyt -15 % alennus Tarranallen kestävistä ja tyylikkäistä nimikointitarroista!</h4>
1772              <h5></h5><p>Laadukkaat ja suloiset nimitarrat kestävät pesua ja kulutusta, ja pysyvät tiukasti kiinni paikoillaan.</p>
1773
1774            </a>
1775          </div>
1776                  <div class="item">
1777            <a href="https://kaksplus.fi/?option=oauthredirect&#038;app_name=openid&#038;redirect_url=https://kaksplus.fi/plussalaiset">
1778                            <h4>Plussalaiset edut ja tapahtumat</h4>
1779              <h5></h5>
1780            </a>
1781          </div>
1782            </div>
1783
1784  </section>
1785
1786  <section class="plussalaiset-edut-limited">
1787
1788    <h2 class="plussalaiset-edut__heading">
1788Esimerkiksi näitä etuja saa nyt plussalaisena</h2>
1789    <div class="grid grid--2 grid--gap-m">
1790
1791      
1792                  <a href="https://kaksplus.fi/?option=oauthredirect&#038;app_name=openid&#038;redirect_url=https://kaksplus.fi/plussalaiset" style="text-decoration: none; color: inherit;">
1793            <article id="post-207470" class="card card--horizontal" style="background-color: #C9E0C9">
1794
1795                              <figure class="plussalaiset-edut__image-wrapper">
1796                  <img decoding="async" width="800" height="500" src="https://kaksplus.fi/awpo/img/2026/09/syyskuun-dinokirja-800x500.jpg?w=100&amp;h=63&amp;blur=30&amp;s=de36dfdf0ad2020a8b30c3d63e6c00ee" class="attachment-medium size-medium wp-post-image awpo-lqip awpo-lazy" alt="" data-src="https://kaksplus.fi/awpo/img/2026/09/syyskuun-dinokirja-800x500.jpg?s=de36dfdf0ad2020a8b30c3d63e6c00ee"><noscript><img decoding="async" width="800" height="500" src="https://kaksplus.fi/wp-content/uploads/2026/09/syyskuun-dinokirja-800x500.jpg" class="attachment-medium size-medium wp-post-image" alt="" srcset="https://kaksplus.fi/wp-content/uploads/2026/09/syyskuun-dinokirja-800x500.jpg 800w, https://kaksplus.fi/wp-content/uploads/2026/09/syyskuun-dinokirja-400x250.jpg 400w, https://kaksplus.fi/wp-content/uploads/2026/09/syyskuun-dinokirja-768x480.jpg 768w" sizes="(max-width: 800px) 100vw, 800px"></noscript>                </figure>
1797              
1798              <div class="plussalaiset-edut__content-inner">
1799                <div class="plussalaiset-edut__content-wrapper">
1800                  <h2 class="plussalaiset-edut__item-heading"><div>Syyskuun kirja-arvonta: Herttala – Aarnin dinosauruskirja</div></h2>
1801                  <div class="plussalaiset-edut__item-description"><p>Syyskuussa Plussalaisten arvonnassa hurmaava kuvakirja lasten lempihahmoista, leikistä ja ystävyydestä!</p>
1802</div>
1803                  <h3 class="plussalaiset-edut__item-link">&gt; Liity Plussalaiseksi</h3>
1804                </div>
1805              </div>
1806
1807            </article>
1808          </a>
1809                  <a href="https://kaksplus.fi/?option=oauthredirect&#038;app_name=openid&#038;redirect_url=https://kaksplus.fi/plussalaiset" style="text-decoration: none; color: inherit;">
1810            <article id="post-184118" class="card card--horizontal" style="background-color: #D3CCC7">
1811
1812                              <figure class="plussalaiset-edut__image-wrapper">
1813                  <img decoding="async" width="800" height="500" src="https://kaksplus.fi/awpo/img/2025/06/koululaisen-kesaetu-800x500.jpg?w=100&amp;h=63&amp;blur=30&amp;s=58702ea5ba6440f9cf9bf25746e26668" class="attachment-medium size-medium wp-post-image awpo-lqip awpo-lazy" alt="" data-src="https://kaksplus.fi/awpo/img/2025/06/koululaisen-kesaetu-800x500.jpg?s=58702ea5ba6440f9cf9bf25746e26668"><noscript><img decoding="async" width="800" height="500" src="https://kaksplus.fi/wp-content/uploads/2025/06/koululaisen-kesaetu-800x500.jpg" class="attachment-medium size-medium wp-post-image" alt="" srcset="https://kaksplus.fi/wp-content/uploads/2025/06/koululaisen-kesaetu-800x500.jpg 800w, https://kaksplus.fi/wp-content/uploads/2025/06/koululaisen-kesaetu-400x250.jpg 400w, https://kaksplus.fi/wp-content/uploads/2025/06/koululaisen-kesaetu-768x480.jpg 768w" sizes="(max-width: 800px) 100vw, 800px"></noscript>                </figure>
1814              
1815              <div class="plussalaiset-edut__content-inner">
1816                <div class="plussalaiset-edut__content-wrapper">
1817                  <h2 class="plussalaiset-edut__item-heading"><div>Anna lahjaksi lukutaitoa – hyödyllinen ja hauska Koululainen-lehti mahtavaan etuhintaan!</div></h2>
1818                  <div class="plussalaiset-edut__item-description"><p>Etu Plussalaisille: tilaa Koululainen omalle lapsellesi tai lahjaksi lähipiirin lapselle todella edullisesti! Samalla tuet lapsen lukutaidon kehittymistä.</p>
1819</div>
1820                  <h3 class="plussalaiset-edut__item-link">&gt; Liity Plussalaiseksi</h3>
1821                </div>
1822              </div>
1823
1824            </article>
1825          </a>
1826                  <a href="https://kaksplus.fi/?option=oauthredirect&#038;app_name=openid&#038;redirect_url=https://kaksplus.fi/plussalaiset" style="text-decoration: none; color: inherit;">
1827            <article id="post-166935" class="card card--horizontal" style="background-color: #C9E0C9">
1828
1829                              <figure class="plussalaiset-edut__image-wrapper">
1830                  <img decoding="async" width="800" height="500" src="https://kaksplus.fi/awpo/img/2024/09/suunnittele-unelmiesi-nim
1830itarrat-800x500.png?w=100&amp;h=63&amp;blur=30&amp;s=c08fdb200bdb9804b19f83e137854b85" class="attachment-medium size-medium wp-post-image awpo-lqip awpo-lazy" alt="" data-src="https://kaksplus.fi/awpo/img/2024/09/suunnittele-unelmiesi-nimitarrat-800x500.png?s=c08fdb200bdb9804b19f83e137854b85"><noscript><img loading="lazy" decoding="async" width="800" height="500" src="https://kaksplus.fi/wp-content/uploads/2024/09/suunnittele-unelmiesi-nimitarrat-800x500.png" class="attachment-medium size-medium wp-post-image" alt="" srcset="https://kaksplus.fi/wp-content/uploads/2024/09/suunnittele-unelmiesi-nimitarrat-800x500.png 800w, https://kaksplus.fi/wp-content/uploads/2024/09/suunnittele-unelmiesi-nimitarrat-400x250.png 400w, https://kaksplus.fi/wp-content/uploads/2024/09/suunnittele-unelmiesi-nimitarrat-768x480.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px"></noscript>                </figure>
1831              
1832              <div class="plussalaiset-edut__content-inner">
1833                <div class="plussalaiset-edut__content-wrapper">
1834                  <h2 class="plussalaiset-edut__item-heading"><div>Nyt -15 % alennus Tarranallen kestävistä ja tyylikkäistä nimikointitarroista!</div></h2>
1835                  <div class="plussalaiset-edut__item-description"><p>Laadukkaat ja suloiset nimitarrat kestävät pesua ja kulutusta, ja pysyvät tiukasti kiinni paikoillaan.</p>
1836</div>
1837                  <h3 class="plussalaiset-edut__item-link">&gt; Liity Plussalaiseksi</h3>
1838                </div>
1839              </div>
1840
1841            </article>
1842          </a>
1843                  <a href="https://kaksplus.fi/?option=oauthredirect&#038;app_name=openid&#038;redirect_url=https://kaksplus.fi/plussalaiset" style="text-decoration: none; color: inherit;">
1844            <article id="post-159706" class="card card--horizontal" style="background-color: #FFFFFF">
1845
1846              
1847              <div class="plussalaiset-edut__content-inner">
1848                <div class="plussalaiset-edut__content-wrapper">
1849                  <h2 class="plussalaiset-edut__item-heading"><div>Plussalaiset edut ja tapahtumat</div></h2>
1850                  <div class="plussalaiset-edut__item-description"></div>
1851                  <h3 class="plussalaiset-edut__item-link">&gt; Liity Plussalaiseksi</h3>
1852                </div>
1853              </div>
1854
1855            </article>
1856          </a>
1857        
1858      
1859    </div>
1860
1861  </section>
1862
1863
1864</div>
1865
1866<style>
1867.owl-carousel {
1868    margin-top: .5rem;
1869    margin-bottom: 2rem;
1870}
1871.owl-carousel .item {
1872    position: relative;
1873    padding: 0;
1874    text-align: left;
1875}
1876.owl-carousel .item img {
1877    width: 100%;
1878    height: 200px;
1879    display: block;
1880}
1881.owl-theme .owl-nav, .owl-theme .owl-dots {
1882    display: none;
1883}
1884.plussalaiset-edut-carousel {
1885    max-width: 681px;
1886    margin: auto;
1887}
1888.plussalaiset-edut-limited .plussalaiset-edut__heading {
1889    margin-bottom: 1rem;
1890}
1891.plussalaiset-edut-limited img {
1892    width: 100%;
1893    height: 100%;
1894    object-fit: cover;
1895    max-height: 223px;
1896}
1897.plussalaiset-edut-limited .card {
1898    border-bottom: 0;
1899    padding-bottom: 0;
1900}
1901.plussalaiset-edut-limited .plussalaiset-edut__content-wrapper {
1902    background-color: transparent;
1903    padding: 1rem;
1904    display: flex;
1905    flex-flow: column;
1906    height: 100%;
1907}
1908.plussalaiset-edut-limited .plussalaiset-edut__item-heading {
1909    margin-bottom: 1rem;
1910}
1911.plussalaiset-edut-limited .plussalaiset-edut__item-description {
1912    margin-bottom: 1rem;
1913}
1914.plussalaiset-edut-limited .plussalaiset-edut__item-link {
1915    margin-top: auto;
1916    margin-bottom: .5rem;
1917}
1918.plussalaiset-edut-limited .plussalaiset-edut__item-link a {
1919    color: #79382C;
1920}
1921.plussalaiset-edut-limited {
1922    display: none;
1923    padding-top: 2rem;
1924    padding-bottom: 2rem;
1925    max-width: 1440px;
1926    width: 97vw;
1927    margin-left: 50%;
1928    transform: translate3d(-50%, 0, 0);
1929}
1930.plussalaiset-edut-limited-carousel {
1931    display: block;
1932}
1933@media screen and (min-width: 71.25em) {
1934    .plussalaiset-edut-limited {
1935        display: block
1936    }
1937    .plussalaiset-edut-limited-carousel {
1938        display: none;
1939    }
1940}
1941</style>
1942
1943<script>
1944/* Activate carousel */
1945window.document.addEventListener('DOMContentLoaded', () => {
1946    $(".owl-carousel").owlCarousel({
1947        items: 1.5,
1948        margin: 10,
1949        loop: true,
1950        touchDrag: true,
1951        mouseDrag: true
1952    });
1953});
1954</script>
1954
1955
1956
1957
1958<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
1959<h4 class="wp-block-heading" id="h-nain-kirjaudut-plussalaisiin">Näin kirjaudut Plussalaisiin</h4>
1960
1961
1962
1963<p>Kirjaudu Plussalaisiin sivun yläosassa olevasta kirjautumishahmosta tai alla olevasta painikkeesta. Sinun tulee luoda ensin Otavamedia-tili, jolla saat käyttöösi myös muut <a href="https://otavamedia.fi/tuotteet-ja-edut/tutustu-ja-tilaa/" target="_blank" rel="noreferrer noopener">Otavamedian digipalvelut</a> niiden edellyttämällä tavalla. Otavamedia-tilin luotuasi pääset Plussalaisiin klikkaamalla sivun yläosassa olevaa kirjautumishahmoa ja antamalla tämän jälkeen lastesi ikätiedot.</p>
1964
1965
1966
1967<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>
1968
1969
1970
1971<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
1972<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://kaksplus.fi/?option=oauthredirect&amp;app_name=openid&amp;redirect_url=https://kaksplus.fi/plussalaiset">Kirjaudu</a></div>
1973</div>
1974</div></div>
1975
1976
1977
1978<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
1979
1980
1981
1982<style>
1983
1984.wp-block-heading {
1985    margin-top: 1rem;
1986}
1987
1988</style>
1989
1990<script>
1991
1992$(document).ready(function(e){
1993
1994  $('p').has('strong').css({
1995   'margin-top' : '1rem',
1996   'margin-bottom' : '0.3rem'
1997  });
1998});
1999
2000</script>
2000
2001
2002
2003<p><!-- /wp:post-content --></p>      </div>
2004      </article>
2005</main>
2006</div> <!-- #site -->
2007<footer class="site-footer" id="footer">
2008  
2009<div class="om-footer">
2010      <div class="om-footer__newsletter">
2011      <div class="om-footer__newsletter-inner">
2012                  <h2 class="om-footer__newsletter-title">
2013            Kaksplussan uutiskirje          </h2>
2014                          <div class="om-footer__newsletter-description">
2015            <p>Parhaat jutut ja vinkit vanhemmille</p>
2016          </div>
2017                          <div class="om-footer__newsletter-form">
2018                        <form class="lianamailer" data-lianamailer="form" method="post" action="">
2019	<div class="lianamailer-formfield lianamailer-formfield-properties" data-lianamailer="formfield">
2020		<label class="screen-reader-text">
2021			Sähköposti*
2022		</label>
2023		<div class="lianamailer-formfield-inner">
2024			<input type="email" name="email" value="" required="required" placeholder="Sähköpostiosoite">
2025		</div>
2026	</div>
2027	<div aria-hidden="true" style="position: absolute; left: -7777px;">
2028		<input type="text" name="lm-gtfo" tabindex="-1">
2029	</div>
2030	<div class="lianamailer-formfield lianamailer-formfield-submit" data-lianamailer="formfield-submit">
2031		<button type="submit" data-lianamailer="submit" class="button">
2032			Tilaa
2033		</button>
2034	</div>
2035<div class="lianamailer-success" data-lianamailer="success" style="display: none;">
2036		Kiitos tilauksestasi
2037	</div>
2038</form>
2039<script type="text/javascript">document.addEventListener('DOMContentLoaded', function() { try { var LianaMailer = {ajax: function(a,b,c,d,e){;var f;if("undefined"!=typeof XMLHttpRequest)f=new XMLHttpRequest;else for(var g=["MSXML2.XmlHttp.5.0","MSXML2.XmlHttp.4.0","MSXML2.XmlHttp.3.0","MSXML2.XmlHttp.2.0","Microsoft.XmlHttp"],h=0,i=g.length;h<i;h++)try{f=new ActiveXObject(g[h]);break}catch(a){}f.onreadystatechange=function(){if(!(f.readyState<4))if(4===f.readyState)if(200===f.status)d(f);else e()},f.open(b,a,!0),f.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),f.send(c)},serialize: function(a){;for(var b=[],c=0;c<a.elements.length;c++){var d=a.elements[c];if(d.name&&!d.disabled&&"file"!==d.type&&"reset"!==d.type&&"submit"!==d.type&&"button"!==d.type)if("checkbox"!==d.type&&"radio"!==d.type||d.checked)b.push(encodeURIComponent(d.name)+"="+encodeURIComponent(d.value))}return b.join("&")},guid: function(){;return Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15)},setAttributes: function(a,b){;for(var c in b)a.setAttribute(c,b[c])},showError: function(a){;var b=this.form.querySelector('[data-lianamailer="formfield-error"]');if(!a)a="Tapahtui virhe - Toimintoa ei voitu suorittaa loppuun.";if(b)b.textContent=a,b.focus();else b=document.createElement("div"),b.textContent=a,this.setAttributes(b,{class:"lianamailer-formfield lianamailer-formfield-error","data-lianamailer":"formfield-error",tabindex:"-1"}),b.style.outline="none",b.style.display="block",this.form.insertBefore(b,this.form.childNodes[0]),b.focus()},showSuccess: function(){;for(var a=this.form.querySelectorAll("[data-lianamailer^=formfield]"),b=0;b<a.length;b++)a[b].style.display="none";this.form.querySelector('[data-lianamailer="success"]').style.display="block"},init: function(){;var a=this;a.form=document.querySelector('[data-lianamailer="form"]'),a.form.addEventListener("submit",function(b){b.preventDefault();var c=document.querySelector('[data-lianamailer="submit"]');c.disabled=!0,a.ajax("https://uutiskirjeet.kaksplus.fi/json?_="+a.guid(),"get","",function(b){var d=JSON.parse(b.responseText);d=a.serialize(a.form)+"&cfcfcfcfcf="+d.csrf_token,a.ajax("https://uutiskirjeet.kaksplus.fi/account?ajax","post",d,function(b){var d=JSON.parse(b.responseText);if(d.success)a.showSuccess();else a.showError(d.error_msg);c.disabled=!1},function(){a.showError(),c.disabled=!1})},function(){a.showError(),c.disabled=!1})})}};var lianamailer = Object.create(LianaMailer);lianamailer.init();} catch(e) {console.error(e);} });</script>
2039
2040          </div>
2041                          <div class="om-footer__newsletter-disclaimer">
2042            <p>Lisätietoja henkilötietojen käsittelystä <a href="https://otavamedia.fi/tietosuoja/" target="_blank" rel="noopener">Otavamedia Oy:n tietosuojaselosteesta</a>.</p>
2043          </div>
2044                          <div class="om-footer__socials">
2045                          <div class="om-footer__social">
2046                <a href="https://www.instagram.com/kaksplus/" target="_blank" rel="noopener noreferrer">
2047                  <span class="screen-reader-text">instagram</span>
2048                  <svg fill="currentColor" role="img" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M7.0301.084c-1.2768.0602-2.1487.264-2.911.5634-.7888.3075-1.4575.72-2.1228 1.3877-.6652.6677-1.075 1.3368-1.3802 2.127-.2954.7638-.4956 1.6365-.552 2.914-.0564 1.2775-.0689 1.6882-.0626 4.947.0062 3.2586.0206 3.6671.0825 4.9473.061 1.2765.264 2.1482.5635 2.9107.308.7889.72 1.4573 1.388 2.1228.6679.6655 1.3365 1.0743 2.1285 1.38.7632.295 1.6361.4961 2.9134.552 1.2773.056 1.6884.069 4.9462.0627 3.2578-.0062 3.668-.0207 4.9478-.0814 1.28-.0607 2.147-.2652 2.9098-.5633.7889-.3086 1.4578-.72 2.1228-1.3881.665-.6682 1.0745-1.3378 1.3795-2.1284.2957-.7632.4966-1.636.552-2.9124.056-1.2809.0692-1.6898.063-4.948-.0063-3.2583-.021-3.6668-.0817-4.9465-.0607-1.2797-.264-2.1487-.5633-2.9117-.3084-.7889-.72-1.4568-1.3876-2.1228C21.2982 1.33 20.628.9208 19.8378.6165 19.074.321 18.2017.1197 16.9244.0645 15.6471.0093 15.236-.005 11.977.0014 8.718.0076 8.31.0215 7.0301.0839m.1402 21.6932c-1.17-.0509-1.8053-.2453-2.2287-.408-.5606-.216-.96-.4771-1.3819-.895-.422-.4178-.6811-.8186-.9-1.378-.1644-.4234-.3624-1.058-.4171-2.228-.0595-1.2645-.072-1.6442-.079-4.848-.007-3.2037.0053-3.583.0607-4.848.05-1.169.2456-1.805.408-2.2282.216-.5613.4762-.96.895-1.3816.4188-.4217.8184-.6814 1.3783-.9003.423-.1651 1.0575-.3614 2.227-.4171 1.2655-.06 1.6447-.072 4.848-.079 3.2033-.007 3.5835.005 4.8495.0608 1.169.0508 1.8053.2445 2.228.408.5608.216.96.4754 1.3816.895.4217.4194.6816.8176.9005 1.3787.1653.4217.3617 1.056.4169 2.2263.0602 1.2655.0739 1.645.0796 4.848.0058 3.203-.0055 3.5834-.061 4.848-.051 1.17-.245 1.8055-.408 2.2294-.216.5604-.4763.96-.8954 1.3814-.419.4215-.8181.6811-1.3783.9-.4224.1649-1.0577.3617-2.2262.4174-1.2656.0595-1.6448.072-4.8493.079-3.2045.007-3.5825-.006-4.848-.0608M16.953 5.5864A1.44 1.44 0 1 0 18.39 4.144a1.44 1.44 0 0 0-1.437 1.4424M5.8385 12.012c.0067 3.4032 2.7706 6.1557 6.173 6.1493 3.4026-.0065 6.157-2.7701 6.1506-6.1733-.0065-3.4032-2.771-6.1565-6.174-6.1498-3.403.0067-6.156 2.771-6.1496 6.1738M8 12.0077a4 4 0 1 1 4.008 3.9921A3.9996 3.9996 0 0 1 8 12.0077"></path></svg>
2049                </a>
2050              </div>
2051                          <div class="om-footer__social">
2052                <a href="https://www.facebook.com/kaksplusfi/" target="_blank" rel="noopener noreferrer">
2053                  <span class="screen-reader-text">facebook</span>
2054                  <svg fill="currentColor" viewbox="0 0 512 512" width="100%" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:serif="http://www.serif.com/" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M374.244,285.825l14.105,-91.961l-88.233,0l0,-59.677c0,-25.159 12.325,-49.682 51.845,-49.682l40.116,0l0,-78.291c0,0 -36.407,-6.214 -71.213,-6.214c-72.67,0 -120.165,44.042 -120.165,123.775l0,70.089l-80.777,0l0,91.961l80.777,0l0,222.31c16.197,2.541 32.798,3.865 49.709,3.865c16.911,0 33.511,-1.324 49.708,-3.865l0,-222.31l74.128,0Z"></path></svg>
2055                </a>
2056              </div>
2057                          <div class="om-footer__social">
2058                <a href="https://www.tiktok.com/@kaksplus" target="_blank" rel="noopener noreferrer">
2059                  <span class="screen-reader-text">tiktok</span>
2060                  <svg fill="currentColor" role="img" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12.525.02c1.31-.02 2.61-.01 3.91-.02.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-.93-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08
2060-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.15 1.07-.14 1.61.24 1.64 1.82 3.02 3.5 2.87 1.12-.01 2.19-.66 2.77-1.61.19-.33.4-.67.41-1.06.1-1.79.06-3.57.07-5.36.01-4.03-.01-8.05.02-12.07z"></path></svg>
2061                </a>
2062              </div>
2063              
2064          </div>
2065              </div>
2066    </div>
2067    <div class="om-footer__columns">
2068    <div class="om-footer__columns-inner">
2069      <div class="om-footer__column">
2070                  <h2 class="om-footer__column-title">
2071            Asiakaspalvelu          </h2>
2072                          <div class="om-footer__column-content">
2073            <p>Digipalvelut (09) 156 6227<br>
2074Avoinna ma–pe 8–19</p>
2075<p>Painettu lehti (09) 156 665<br>
2076Avoinna ma–pe 8–19</p>
2077<p>Otavamedian vaihde (09) 156 61</p>
2078<p>Sähköposti (digi)<br>
2079<a href="mailto:[email protected]">[email protected]</a><br>
2080Sähköposti<br>
2081<a href="mailto:[email protected]">[email protected]</a></p>
2082          </div>
2083              </div>
2084      <div class="om-footer__column">
2085                  <h2 class="om-footer__column-title">
2086            Postiosoite          </h2>
2087                          <div class="om-footer__column-content">
2088            <p>Uudenmaankatu 10<br>
208900015 OTAVAMEDIA</p>
2090<p><a href="https://otavamedia.fi/evasteiden-kaytto/">Tietoa evästeiden käytöstä</a><br>
2091<a href="https://www.youronlinechoices.com/fi/">Käyttäytymiseen perustuva mainonta</a><br>
2092<a href="#">Evästeasetukset</a></p>
2093          </div>
2094              </div>
2095      <div class="om-footer__column">
2096                  <h2 class="om-footer__column-title">
2097            Mediatiedot          </h2>
2098                          <div class="om-footer__column-content">
2099            <p><a href="https://yrityksille.otavamedia.fi/tekniset-tiedot-ja-hinnat/">Tekniset tiedot, aikataulut ja ilmoitushinnat</a><br>
2100<a href="https://yrityksille.otavamedia.fi/reaaliaikainen-kayttajatieto/">Tietoa verkon kävijöistä</a><br>
2101<a href="https://otavamedia.fi/tietosuoja/">Tietosuojaseloste</a><br>
2102<a href="https://otavamedia.fi/tilaus-ja-kayttoehdot/">Käyttöehdot</a><br>
2103<a href="https://kaksplus.fi/mainos/mainostajalle/">Mainosta tällä sivulla</a></p>
2104          </div>
2105                          <h2 class="om-footer__column-title">
2106            Tuotteet          </h2>
2107                          <div class="om-footer__column-content">
2108            <p><a href="https://otavamedia.fi/tuotteet-ja-edut/">Aikakauslehdet</a><br>
2109<a href="https://otavamedia.fi/tuotteet-ja-edut/verkkopalvelut">Verkkopalvelut</a><br>
2110<a href="https://otavamedia.fi/tuotteet-ja-edut/digilehdet">Digilehdet</a></p>
2111          </div>
2112              </div>
2113      <div class="om-footer__column">
2114                  <h2 class="om-footer__column-title">
2115            Ota yhteyttä          </h2>
2116                          <div class="om-footer__column-content">
2117            <p><a href="https://kaksplus.fi/toimituksen-yhteystiedot/">Toimitus</a><br>
2118<a href="https://kaksplus.fi/toimituksen-yhteystiedot/?referer=https://kaksplus.fi/toimituksen-yhteystiedot/#palaute">Palautelomake</a><br>
2119Päätoimittaja: Erkki Meriluoto<br>
2120Toimituspäällikkö: Anu Vaskimo<br>
2121Tuottaja: Anna Huuhtanen<br>
2122Sähköpostiosoitteet: [email protected]</p>
2123          </div>
2124              </div>
2125    </div>
2126  </div>
2127      <div class="om-footer__logo">
2128        <img width="400" height="174" src="https://kaksplus.fi/awpo/img/2023/09/otavamedia_logo_valkoinen-1-400x174.png?w=100&amp;h=44&amp;blur=30&amp;s=dee720ba8db0b5735736589cd54c5dc7" class="attachment-thumbnail size-thumbnail awpo-lqip awpo-lazy" alt="" decoding="async" data-src="https://kaksplus.fi/awpo/img/2023/09/otavamedia_logo_valkoinen-1-400x174.png?s=dee720ba8db0b5735736589cd54c5dc7"><noscript><img width="400" height="174" src="https://kaksplus.fi/wp-content/uploads/2023/09/otavamedia_logo_valkoinen-1-400x174.png" class="attachment-thumbnail size-thumbnail" alt="" decoding="async" loading="lazy"></noscript>    </div>
2129  </div>
2130
2131  <!-- brand links -->
2132  <div class="brand-footer">
2132<div class="brand-footer__columns"><div class="brand-footer__columns-inner"><div class="brand-footer__column"><div class="brand-footer__column-logo"><a href="https://anna.fi" target="_blank" aria-label="Anna"><svg xmlns="http://www.w3.org/2000/svg" width="128.99" height="33" viewbox="0 0 128.99 33">
2133  <path id="logo_Anna" d="M26.85,33.32h2c.78-3.53,2.54-6.15,6.57-6.15,4.31,0,5.86,3.32,5.86,12.5a11.37,11.37,0,0,0-3.89-.42c-5,0-11.87,2-11.87,8.76,0,5.58,4.1,8.48,7.77,8.48,3.39,0,6.29-1.84,7.06-4.45v-1a3,3,0,0,1-2,.64c-2.47,0-4.1-2-4.1-5.3s2.26-5.58,4.87-5.58a4.56,4.56,0,0,1,2.19.35c0,4,0,7.28-.14,14.62H53.55V54.52H50.44s.21-9.68.21-18.86c0-8-3.53-12.15-10.95-12.15-7.21,0-10.31,3.39-11.44,7.13V24.21H26.85ZM74,55.79H89.15V54.52H86s.21-10.6.21-19.29S83,23.51,77.07,23.51a10.12,10.12,0,0,0-9.54,7.06V24.21H55.17v1.27h3.32v29H56.23v1.27h15V54.52H67.54V36.29c0-4.94,1.48-8.05,5-8.05s4.31,2.4,4.31,8.05c0,6.71,0,11.73-.14,18.23H74Zm35.39,0h15.12V54.52H121.4s.21-10.6.21-19.29-3.25-11.73-9.18-11.73a10.12,10.12,0,0,0-9.54,7.06V24.21H90.56v1.27h3.32v29H91.62v1.27h15V54.52h-3.67V36.29c0-4.94,1.48-8.05,5-8.05s4.31,2.4,4.31,8.05c0,6.71,0,11.73-.14,18.23h-2.68v1.27Zm18.37-22.46h2c.78-3.53,2.54-6.15,6.57-6.15,4.31,0,5.86,3.32,5.86,12.5a11.37,11.37,0,0,0-3.89-.42c-5,0-11.87,2-11.87,8.76,0,5.58,4.1,8.48,7.77,8.48,3.39,0,6.29-1.84,7.06-4.45v-1a3,3,0,0,1-2,.64c-2.47,0-4.1-2-4.1-5.3s2.26-5.58,4.87-5.58a4.56,4.56,0,0,1,2.19.35c0,4,0,7.28-.14,14.62h12.43V54.52H151.4s.21-9.68.21-18.86c0-8-3.53-12.15-10.95-12.15-7.21,0-10.31,3.39-11.44,7.13V24.21h-1.41v9.11Z" transform="translate(-25.52 -23.5)"></path>
2134</svg></a></div><div class="brand-footer__column-links"><a href="https://anna.fi/kategoria/ihmiset" target="_blank" class="brand-footer__column-link">Ihmiset</a><a href="https://anna.fi/kategoria/hyvinvointi" target="_blank" class="brand-footer__column-link">Hyvinvointi</a><a href="https://anna.fi/kategoria/ruoka" target="_blank" class="brand-footer__column-link">Ruoka</a><a href="https://anna.fi/kategoria/lifestyle" target="_blank" class="brand-footer__column-link">Lifestyle</a><a href="https://anna.fi/kategoria/horoskoopit" target="_blank" class="brand-footer__column-link">Horoskoopit</a><a href="https://anna.fi/keidas" target="_blank" class="brand-footer__column-link">Keidas</a><a href="https://anna.fi/reseptihaku" target="_blank" class="brand-footer__column-link">Reseptit</a></div></div><div class="brand-footer__column"><div class="brand-footer__column-logo"><a href="https://kotiliesi.fi" target="_blank" aria-label="Kotiliesi"><svg xmlns="http://www.w3.org/2000/svg" width="167.5" height="33" viewbox="0 0 167.5 33">
2135  <path id="logo_kotiliesi" d="M43.185,45.207c0,7.683,5.226,13.009,12.161,13.009s12.06-5.8,12.06-13.009c0-7.683-5.137-13.054-12.06-13.054S43.185,38,43.185,45.207Zm9.28,0c0-7.348.469-11.736,2.926-11.736s2.87,3.864,2.87,11.736c0,8.621-.38,11.591-2.87,11.591-2.122,0-2.926-3.35-2.926-11.591Zm93.8,8.621a7.817,7.817,0,0,1-5.751,1.932c-4.858,0-6.03-3.25-6.03-10.653H146.03c1.184,0,1.552-.759,1.552-1.318,0-8.3-4.1-11.636-10.653-11.636-6.923,0-11.636,5.416-11.636,13.623,0,7.962,4.243,12.44,12.585,12.44a12.6,12.6,0,0,0,9.045-3.25l-.659-1.117Zm-9.335-20.357c1.418,0,2.233,1.843,2.312,9.95h-4.757V42.3c0-6.834,1.039-8.811,2.446-8.811Zm22.121-1.318c-6.131,0-9.469,2.635-9.469,6.6,0,3.629,1.7,5.706,5.416,8.062l4.053,2.546c2.5,1.552,3.35,2.591,3.35,4.243s-1.228,3.2-4.333,3.2c-3.719,0-6.264-1.932-7.638-7.258h-1.117V55.2c1.7,1.843,5.092,3.015,8.766,3.015,6.22,0,10.273-3.015,10.273-8.576,0-3.629-2.4-5.8-6.22-8.152l-3.819-2.356c-1.842-1.117-2.4-2.233-2.4-3.2,0-1.318,1.117-2.445,3.249-2.445,3.35,0,5.583,1.6,6.365,5.516h1.038V33.806a16.315,16.315,0,0,0-7.593-1.653ZM40.494,28.524a2.646,2.646,0,0,1,2.233-.994V26.358H35.312v1.184c1.038,0,1.7.234,1.117,1.039l-6.443,8.677c-1.463,1.977-2.87,3.35-4.143,3.584V28.011c0-.469.7-.469,1.552-.469V26.358H15v1.184c.893,0,1.552,0,1.552.469V55.3c0,.994-.469,1.228-1.552,1.228v1.184H27.4V56.519c-.938,0-1.552-.234-1.552-1.228V42.237l5.84,11.636c1.7,3.439,5.226,4.243,8.107,4.243a15.41,15.41,0,0,0,6.131-.994V56.24s-1.787,0-3.585-2.97L33.4,38.284l7.069-9.7Zm37.375-2.233h-.424a31.2,31.2,0,0,0-6.7,1.038l-1.362.335V32.79l-3.116.335v1.6h3.116V51.059c0,4.467,2.356,6.923,7.448,6.923,3.864,0,5.941-1.6,6.979-2.926l-.893-1.117-.514.424a3.864,3.864,0,0,1-2.78,1.117c-1.273,0-1.7-.994-1.7-2.233V34.7h5.941V32.79h-6V26.269ZM99.509,53.314v.19a3.942,3.942,0,0,0,.994,3.116c.849.893,2.233,1.362,4.467,1.362,2.446,0,4.947-.569,6.41-2.4l-.7-.849a2.044,2.044,0,0,1-1.508.659c-.569,0-1.117-.235-1.117-1.318V25.654l-10.419.38v1.418c1.273,0,1.887.469,1.887,1.508V53.314Zm13.657-24.879c0,2.312,1.976,3.2,4.467,3.2s4.467-.8,4.467-3.2-1.976-3.2-4.467-3.2-4.467.8-4.467,3.2Zm57.028,0c0,2.312,1.977,3.2,4.467,3.2s4.467-.8,4.467-3.2-1.977-3.2-4.467-3.2-4.467.8-4.467,3.2Zm-73.186,26.3a2.044,2.044,0,0,1-1.508.659c-.569,0-1.117-.279-1.117-1.318V32.79H84.423V34.3c1.038,0,1.418.38,1.418,1.039V53.314a4.344,4.344,0,0,0,.994,3.35c.849.893,2.233,1.362,4.467,1.362,2.446,0,4.947-.569,6.41-2.4l-.7-.849Zm-11.591-26.3c0,2.312,1.977,3.2,4.467,3.2s4.467-.8,4.467-3.2-1.976-3.2-4.467-3.2-4.467.8-4.467,3.2Zm39.351,26.3a2.044,2.044,0,0,1-1.507.659c-.57,0-1.117-.279-1.117-1.318V32.79H112.15V34.3c1.038,0,1.418.38,1.418,1.039V53.314a4.344,4.344,0,0,0,.994,3.35c.849.893,2.233,1.362,4.467,1.362,2.446,0,4.947-.569,6.41-2.4l-.7-.849Zm57.028,0a2.044,2.044,0,0,1-1.508.659c-.569,0-1.117-.279-1.117-1.318V32.79h-9.961V34.3c1.038,0,1.418.38,1.418,1.039V53.314a4.344,4.344,0,0,0,.994,3.35c.849.893,2.233,1.362,4.467,1.362,2.445,0,4.947-.569,6.41-2.4l-.7-.849Z" transform="translate(-15 -25.23)"></path>
2136</svg></a></div>
2136<div class="brand-footer__column-links"><a href="https://kotiliesi.fi/kategoria/ruoka/" target="_blank" class="brand-footer__column-link">Ruoka</a><a href="https://kotiliesi.fi/kategoria/ihmiset-ja-ilmiot/" target="_blank" class="brand-footer__column-link">Ihmiset</a><a href="https://kotiliesi.fi/kategoria/terveys/" target="_blank" class="brand-footer__column-link">Hyvinvointi</a><a href="https://kotiliesi.fi/kategoria/koti/" target="_blank" class="brand-footer__column-link">Koti</a><a href="https://kotiliesi.fi/kategoria/kasityo/" target="_blank" class="brand-footer__column-link">K&auml;sity&ouml;</a><a href="https://kotiliesi.fi/toukola/" target="_blank" class="brand-footer__column-link">Toukola</a><a href="https://kotiliesi.fi/reseptihaku/" target="_blank" class="brand-footer__column-link">Reseptit</a></div></div><div class="brand-footer__column"><div class="brand-footer__column-logo"><a href="https://seura.fi" target="_blank" aria-label="Seura"><svg id="logo_seura" xmlns="http://www.w3.org/2000/svg" width="163.855" height="33" viewbox="0 0 163.855 33">
2137  <path id="Path_18" data-name="Path 18" d="M26.484,55.684a7.175,7.175,0,0,1-.889,2.657H20V48.334h6.718c.7,3.371,3.511,4.682,6.952,4.682,3.757,0,5.536-1.428,5.536-3.324,0-3.066-2.914-2.809-8.637-3.839-6.578-1.17-10.416-3.406-10.416-10.182,0-6.519,5.384-9.574,11.271-9.749,2.7-.082,6.484.585,8.076,2.961a7.315,7.315,0,0,1,.936-2.341h5.77v9.234H39.3c-.8-2.341-2.54-3.792-5.957-3.792-3.148,0-4.834,1.252-4.834,3.1,0,3.066,2.914,2.891,9.363,3.886s10.182,3.663,10.182,9.972c0,5.571-4.178,10-12.348,9.972C32.032,58.856,28.357,58.317,26.484,55.684Z" transform="translate(-20 -25.914)"></path>
2138  <path id="Path_19" data-name="Path 19" d="M56.455,32.048V31.72H66.743l.07.246L68.3,37.993h5.735V26.43H44.33v5.29h3.09v21.09H44.33v5.267h29.7V45.894H68.3l-1.58,6.648-.059.269H56.455V45.5h6.25V38.883h-6.25V32.048Z" transform="translate(-15.854 -25.826)"></path>
2139  <path id="Path_20" data-name="Path 20" d="M71.09,26.43H86.949v5.278h-3.16V44.9c0,3.687.843,5.981,4.974,5.981s5.115-2.341,5.068-5.981V31.72H90.554V26.43h15.215v5.278h-2.645V45.028c0,10.241-4.4,13.67-14.372,13.67s-14.372-3.511-14.372-13.05V31.72H71.09Z" transform="translate(-11.295 -25.826)"></path>
2140  <path id="Path_21" data-name="Path 21" d="M134.708,58.091V52.836h-2.692V45.813c0-2.341-2.072-2.727-4.061-3.137l-1.065-.234-1.5-.375,1.521-.281c4.155-.737,6.016-2.984,6.016-7.3,0-3.055-.784-5.056-2.481-6.308s-4.237-1.685-8.193-1.685h-20.4v5.255h2.622v21.09H101.2v5.29h15.554v-5.29h-3.265V45.146h5.77c3.265,0,3.71,2.516,3.71,4.962v7.982Zm-15.168-19.3h-5.7V31.768h5.712a3.522,3.522,0,1,1-.012,7.022Z" transform="translate(-6.164 -25.816)"></path>
2141  <path id="Path_22" data-name="Path 22" d="M163.552,52.846h1.767v5.29H149.765v-5.29h3.956l-.152-.445-1.7-4.81-.082-.222H141.643l-.082.222-1.709,4.8-.152.468h4v5.29H128.78v-5.3h1.931l.094-.234,7.526-20.377.152-.445h-3.675V26.43h24.66v5.349h-3.7l.152.445L163.178,52.6l.082.246ZM146.71,32.2l-2.984,10.112h6.121L146.8,32.2Z" transform="translate(-1.465 -25.826)"></path>
2142</svg></a></div><div class="brand-footer__column-links"><a href="https://seura.fi/kategoria/asiat/" target="_blank" class="brand-footer__column-link">Asiat</a><a href="https://seura.fi/kategoria/ilmiot/" target="_blank" class="brand-footer__column-link">Ilmi&ouml;t</a><a href="https://seura.fi/kategoria/viihde/" target="_blank" class="brand-footer__column-link">Henkil&ouml;t &amp; viihde</a><a href="https://seura.fi/kategoria/terveys/" target="_blank" class="brand-footer__column-link">Terveys</a><a href="https://seura.fi/kategoria/horoskoopit/" target="_blank" class="brand-footer__column-link">Horoskoopit</a><a href="https://seura.fi/kategoria/tv/" target="_blank" class="brand-footer__column-link">Tv-Maailma</a><a href="https://seura.fi/blogit/" target="_blank" class="brand-footer__column-link">Kolumnit</a></div></div></div></div></div></footer>
2143<script type="speculationrules">
2144{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/om-kaksplus-theme/*","/wp-content/themes/om-core/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
2145</script>
2145
2146
2147  <div class="om-infobox closed">
2148    <span class="om-infobox__close">X</span>
2149    <div class="om-infobox__contents"></div>
2150  </div>			
2150<script>
2151				function convert_to_url(obj) {
2152					return Object
2153					.keys(obj)
2154					.map(k => `${encodeURIComponent(k)}=${encodeURIComponent(obj[k])}`)
2155					.join('&');
2156				}
2157
2158				function pass_to_backend() {
2159					if(window.location.hash) {
2160						var hash = window.location.hash;
2161						var elements = {};
2162						hash.split("#")[1].split("&").forEach(element => {
2163							var vars = element.split("=");
2164							elements[vars[0]] = vars[1];
2165						});
2166						if(("access_token" in elements) || ("id_token" in elements) || ("token" in elements)) {
2167							if(window.location.href.indexOf("?") !== -1) {
2168								window.location = (window.location.href.split("?")[0] + window.location.hash).split('#')[0] + "?" + convert_to_url(elements);
2169							} else {
2170								window.location = window.location.href.split('#')[0] + "?" + convert_to_url(elements);
2171							}
2172						}
2173					}
2174				}
2175
2176				pass_to_backend();
2177			</script>
2177
2178
2179		
2180<script type="text/javascript">
2181  jQuery( function() {
2182    try {
2183      AsteikkoAuth.init( "https:\/\/kaksplus.fi\/" );
2184    } catch( e ) {
2185      if ( window.console && console.error )
2186        console.error( e );
2187    }
2188  } );
2189</script>
2189	
2189<script type="module">
2190		import { Workbox } from "https:\/\/kaksplus.fi\/wp-content\/plugins\/pwa\/wp-includes\/js\/workbox-v7.3.0\/workbox-window.prod.js";
2191
2192		if ( 'serviceWorker' in navigator ) {
2193			window.wp = window.wp || {};
2194			window.wp.serviceWorkerWindow = new Workbox(
2195				"https:\/\/kaksplus.fi\/wp.serviceworker",
2196				{"scope":"\/"}			);
2197			window.wp.serviceWorkerWindow.register();
2198		}
2199	</script>
2199
2200	
2200<script type="text/javascript" src="https://kaksplus.fi/wp-content/cache/asauth/fi_blog1.js?ver=21014" id="asteikko-auth-lang-fi-js"></script>
vendor: 1 bytes, line 2200
2200
2201<script type="text/javascript" src="https://kaksplus.fi/wp-content/plugins/om-asteikko-auth-wp-plugin/js/asteikko-auth.js?ver=1.5.9" id="asteikko-auth-js"></script>
vendor: 1 bytes, line 2201
2201
2202<script type="text/javascript" id="om-webfont-loader-js-before">
2203/* <![CDATA[ */
2204WebFontConfig={typekit:{id:'rmg4azo'},google:{families:["Lora:400,400i,600,600i","Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,300,0,0"]},timeout:5000};
2205//# sourceURL=om-webfont-loader-js-before
2206/* ]]> */
2207</script>
vendor: 1 bytes, line 2207
2207
2208<script type="text/javascript" src="https://kaksplus.fi/wp-content/mu-plugins/om-core/assets/js/vendor/webfontloader.js?ver=1.6.28" id="om-webfont-loader-js"></script>
vendor: 1 bytes, line 2208
2208
2209<script defer type="text/javascript" src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js?ver=1.12.1" id="jquery-ui-core-js"></script>
vendor: 1 bytes, line 2209
2209
2210<script type="text/javascript" id="om-core-app-js-extra">
2211/* <![CDATA[ */
2212var js_object = {"templateUrl":"https://kaksplus.fi/wp-content/themes/om-kaksplus-theme","ajax_url":"https://kaksplus.fi/wp-admin/admin-ajax.php"};
2213//# sourceURL=om-core-app-js-extra
2214/* ]]> */
2215</script>
vendor: 1 bytes, line 2215
2215
2216<script defer type="text/javascript" src="https://kaksplus.fi/wp-content/mu-plugins/om-core/dist/index.js?ver=1765885391" id="om-core-app-js"></script>
vendor: 1 bytes, line 2216
2216
2217<script defer type="text/javascript" src="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/dist/scripts.min.js?ver=1790138531" id="om-kaksplus-scripts-js"></script>
vendor: 1 bytes, line 2217
2217
2218<script defer type="text/javascript" src="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/js/vendor/owl.carousel.min.js?ver=2.3.4" id="om-kaksplus-owl-carousel-js-js"></script>
vendor: 1 bytes, line 2218
2218
2219<script type="text/javascript" src="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/js/vendor/photoswipe.min.js?ver=4.1.2" id="photoswipe-js-js"></script>
vendor: 1 bytes, line 2219
2219
2220<script type="text/javascript" src="https://kaksplus.fi/wp-content/themes/om-kaksplus-theme/assets/js/vendor/photoswipe-ui-default.min.js?ver=4.1.2" id="photoswipe-ui-js-js"></script>
vendor: 1 bytes, line 2220
2220
2221<script defer type="text/javascript" src="https://kaksplus.fi/wp-content/plugins/wp-optimizer/assets/dist/awpo.min.js?ver=1722410914" id="awpo-lazyload-js"></script>
vendor: 1 bytes, line 2221
2221
2222<script type="text/javascript" id="wp-postviews-cache-js-extra">
2223/* <![CDATA[ */
2224var viewsCacheL10n = {"shortinit_wp_load_url":"https://kaksplus.fi/wp-content/plugins/wp-postviews-aste/postviews-shortinit.php","post_id":"159019"};
2225//# sourceURL=wp-postviews-cache-js-extra
2226/* ]]> */
2227</script>
vendor: 1 bytes, line 2227
2227
2228<script type="text/javascript" src="https://kaksplus.fi/wp-content/plugins/wp-postviews-aste/postviews-cache.js?ver=1.68" id="wp-postviews-cache-js"></script>
vendor: 1 bytes, line 2228
2228
2229<script type="text/javascript" id="om-plussalaiset-scripts-js-extra">
2230/* <![CDATA[ */
2231var plussalaiset = {"nonce":"82de57d557","loadMore":{"cache":{"responseId":"plussalaiset"},"api":{"path":"feed","baseUrl":"https://kaksplus.fi/wp-json/plussalaiset/v1","perPage":10,"startPage":2},"template":{"showDate":false,"templateName":"Card","classes":{"li":"grid__item","article":"card--horizontal"}}},"plussalaisetFeedId":"158995","plussalaisetFeedURL":"https://kaksplus.fi/plussalaiset-sisallot/"};
2232//# sourceURL=om-plussalaiset-scripts-js-extra
2233/* ]]> */
2234</script>
vendor: 1 bytes, line 2234
2234
2235<script type="text/javascript" src="https://kaksplus.fi/wp-content/plugins/om-kaksplus-plussalaiset-wp-plugin/dist/scripts.min.js?ver=1.1.0" id="om-plussalaiset-scripts-js"></script>
vendor: 1 bytes, line 2235
2235
2236<script type="text/javascript" src="https://kaksplus.fi/wp-content/plugins/om-piano-recommendation-wp-plugin/assets/script.js?ver=1.0.0" id="om-piano-recommendation-scripts-js"></script>
vendor: 1 bytes, line 2236
2236
2237<script type="text/javascript" id="om-pwa-scripts-js-extra">
2238/* <![CDATA[ */
2239var omPwa = {"nonce":"82de57d557","publicKey":"BPvzsijXGaqBUon1oaYItSSQ4upbLaCLiJPvAieEyJk_vtJ32u49lUj1I3pP2_nUGvf9VFkMwlr9maeCIa7bCR8"};
2240//# sourceURL=om-pwa-scripts-js-extra
2241/* ]]> */
2242</script>
vendor: 1 bytes, line 2242
2242
2243<script type="text/javascript" src="https://kaksplus.fi/wp-content/plugins/om-pwa-wp-plugin//dist/scripts.min.js?ver=1790138694" id="om-pwa-scripts-js"></script>
2243
2244<!-- body ends here -->
2245</body>
2246<!-- Body end tag start, do not remove -->
2247
2248<!-- // kaksplus.fi -->
2249
2250<style>
2251
2252	.bb-float-close-button {
2253		border: 0px !important;
2254		background-color: #ffffff !important;
2255		width: calc(100% + 0px);
2256		border-radius: 0px !important;
2257		border-top-left-radius: 5px !important;
2258		top: -44px !important;
2259		padding: 9px 1px 7px !important;
2260	}
2261	.bb-float-closeAd {
2262		padding: 5px 0px;
2263		color: #000;
2264		text-align: right;
2265		font-size: 16px;
2266		font-weight: 400;
2267	}
2268	.bb-float-closeAd:after {
2269		background-color: #000;
2270		color: #fff;
2271		font-size: 18px;
2272		content: "\2715";
2273		margin: 0 0 0 5px;
2274		font-weight: 900 !important;
2275		padding: 3px 7px 3px 7px;
2276		border-radius: 5px;
2277	}
2278	.bb_wrapper:has(.bb-float-close-button[style*="display: block"]), .bb_wrapper:has(.bb-float-close-button:not([style*=display])) {
2279		right: 5px !important;
2280		bottom: 5px !important;
2281		border-top: 7px solid #000;
2282		border-bottom: 7px solid #000;
2283		border-bottom-left-radius: 3px !important;
2284		border-bottom-right-radius: 3px !important;
2285	}
2286	@media screen and (min-width: 880px) {
2287		.bb_wrapper:has(.bb-float-close-button[style*="display: block"]), .bb_wrapper:has(.bb-float-close-button:not([style*=display])) {
2288			right: 20px !important;
2289			bottom: 15px !important;
2290		}
2291	}
2292	#dfp__interstitial {
2293		position: fixed;
2294		z-index: 1000000;
2295		width: 1px;
2296		height: 1px;
2297		margin: 0px;
2298		padding: 0px;
2299		left: 0px;
2300		top: 0px;
2301	}
2302
2303	body.single article {
2304		background-color: #fff;
2305	}
2306	.widget-area_blogs article.content__description {
2307		background-color: #887093 !important;
2308	}
2309	#dfp__in-text {width: 100%}
2310		.bg-pink {background-color: #DEE5DE !important;
2311	}
2312	@media screen and (min-width: 1024px) {
2313		#dfp__desk-1_1 {
2314			min-height: 120px; margin: 0px !important
2315		}
2316		.in-text {
2317			max-width: 620px;
2318			margin: 0 auto;
2319			clear: both;
2320		}
2321		.desk-1.in-article, .desk-2.in-article, .desk-3.in-article {
2322			width: calc(100% + 3rem);
2323			max-width: calc(100% + 3rem);
2324			margin-left: -1.5rem;
2325			padding: 20px 0px;
2326		}
2327		.adWrapperNativeList {
2328			padding-bottom: 1rem;
2329			border-bottom: 1px solid #c0b7b6;
2330		}
2331		[data-google-query-id][id^=dfp__desk] {
2332			padding: 8px 0px;
2333		}
2334	}
2335	@media screen and (max-width: 767px) {
2336		.adWrapperNativeList {
2337			width: 100%;
2338			margin-left: 0px;
2339			padding-bottom: 1.6rem;
2340			border-bottom: 1px solid #c0b7b6;
2341		}
2342		[id^=dfp__native-list] {
2343			padding-left: 0px;
2344		}
2345		.neuwo-recommendations .card--horizontal {
2346			padding-bottom: 0px !important;
2347			border-bottom: 0px !important;
2348		}
2349		.neuwo-recommendations .adWrapperNativeList {
2350			padding-bottom: 0px !important;
2351			border-bottom: 0px !important;
2352		}
2353		body.home #popular .adWrapperNativeList {
2354			width: 100vw;
2355			margin-left: -16px;
2356			padding-bottom: 0px;
2357			border-bottom: 0px;
2358			margin-top: -20px;
2359		}
2360	}
2361	.content__title h1, .content__lead p, .content__body p, .content__body h2 {
2362		font-family: Merriweather, Georgia, Sans-Serif !important;
2363	}
2364	@media screen and (max-width: 1023px) {
2365		body.home #dfp__mob-1_1 {
2366			min-height: 316px;
2367		}
2368		/* body.home #section-0 article:nth-child(1), body.category #om_commercialpostlisting-1 article:nth-child(1) {margin-bottom: 316px !important} */
2369		/* body.home .mob-1, body.category .mob-1.section-ad {margin-top: -316px !important} */
2370		.ad-mob_description [data-google-query-id] > div::before,
2371		.ad-mob_description [data-google-query-id] > div::after {
2372			display: none !important;
2373		}
2374		.ad-mob_description > div::before,
2375		.ad-mob_description > advantage-wrapper > div > div::before {
2376			content: "Juttu jatkuu mainoksen jälkeen";
2377			font-size: 12px;
2378			display: block;
2379			text-align: center;
2380			margin-bottom: 7px;
2381		}
2382		.ad-mob_description > div::after,
2383		.ad-mob_description > advantage-wrapper > div > div::after {
2384			content: "Juttu jatkuu";
2385			font-size: 12px;
2386			display: block;
2387			text-align: center;
2388			margin-top: 7px;
2389		}
2390		.ad-mob_description {
2391			width: 100vw !important;
2392			max-width: 100vw;
2393			margin-left: -16px;
2394		}
2395		/* .ad-mob_description > div {margin: 15px 0px !important} */
2396		/* [data-google-query-id]:not([id^=dfp__native]) {padding: 20px 0;} */
2397		.ad-mob_description:has(> div[style*="display: none"]) {
2398			margin-bottom: 0;
2399		}
2400		[data-google-query-id][id^=dfp__mob] {
2401			padding: 8px 0px;
2402		}
2403	}
2404</style>
2405
2406<script type="text/javascript">
2407
2408	async function waitForVariable2(variableName, timeoutMs = 30000, intervalMs = 1000) {
2409		const startTime = Date.now();
2410		for (; !window[variableName]; ) {
2411			if (Date.now() - startTime >= timeoutMs) {
2412				console.warn(`waitForVariable2: Timeout of ${timeoutMs / 1000}s reached for variable "${variableName}".`);
2413				return false;
2414			}
2415			await new Promise(resolve => setTimeout(resolve, intervalMs));
2416		}
2417		return true;
2418	}
2419
2420	if (showAds && !hideAllAds || adLocation == 'frontpage') {
2421
2422		if (location.href.indexOf('webinterstitial') >= -1) {
2423			waitForVariable2("canRunWebInterstitial", 30000, 1000)
2424			.then((success) => {
2425				if (success) {
2426					if (dfpDebug) {console.log('Defining webinterstitial...')}
2427					var webinterstitialSlot;
2428					googletag.cmd.push(function() {
2429						webinterstitialSlot = googletag.defineOutOfPageSlot('/135812570/kaksplus/content/webinterstitial', googletag.enums.OutOfPageFormat.INTERSTITIAL);
2430						if (webinterstitialSlot) {webinterstitialSlot.addService(googletag.pubads()); googletag.pubads().refresh([webinterstitialSlot], {changeCorrelator: false});}
2431					});
2432				} else {
2433					if (dfpDebug) { console.log('waitForVariable2 "canRunWebInterstitial" timed out or variable was not found.'); }
2434				}
2435			})
2436			.catch(error => {
2437				if (dfpDebug) { console.error('Error in waitForVariable2:', error); }
2438			});
2439		}
2440
2441		//jQuery('#main').before('<div id=\'dfp__interstitial\'>
2441<script>window.dfp.displayAdslot(\'dfp__interstitial\')<\/script></div>');
2442		jQuery('body').prepend('<div id=\'dfp__interstitial\'>
2442<script>window.dfp.displayAdslot(\'dfp__interstitial\')<\/script></div>');
2443		console.log('Interstitial before div#main...');
2444		// Advantage wrapper
2445		if (useAdvantage) {
2446			jQuery('[id^="dfp__interstitial"]').wrap('<advantage-wrapper allowed-formats="WELCOME_PAGE"><div slot="advantage-ad-slot"></div></advantage-wrapper>');
2447		}
2448
2449
2450		if (window.dfp.visibility == 'desktop') {
2451			jQuery('#main').before('<div id=\'dfp__topad-desk\'>
2451<script>window.dfp.displayAdslot(\'dfp__topad-desk\')<\/script></div>');
2452			if (useAdvantage) {
2453				jQuery('[id^="dfp__topad-desk"]').wrap('<advantage-wrapper allowed-formats="TOPSCROLL"><div slot="advantage-ad-slot"></div></advantage-wrapper>');
2454			}
2455
2456/*
2457			let interval = setInterval(function(){
2458				if (window.googletag && googletag.apiReady && googletag.pubadsReady) {
2459					var topAdStr = '
2459<script>var topAdDeskSlot; googletag.cmd.push(function() {topAdDeskSlot = googletag.defineSlot(\"/135812570/kaksplus/content/topad-desk\",  [[2,2]], \"dfp__topad-desk\").addService(googletag.pubads());});<\/script><div id=\"dfp__topad-desk\">
2459<script>googletag.cmd.push(function() {googletag.display(\"dfp__topad-desk\");googletag.pubads().refresh([topAdDeskSlot]);});<\/script></div>';
2460					jQuery('#main').before(topAdStr);
2461					console.log('TopAd for desktop added...');
2462					clearInterval(interval);
2463				}
2464			}, 100);
2465*/
2466		}
2467
2468		if (window.dfp.visibility == 'mobile') {
2469			jQuery('#main').before('<div id=\'dfp__topad-mob\'>
2469<script>window.dfp.displayAdslot(\'dfp__topad-mob\')<\/script></div>');
2470			if (useAdvantage) {
2471				jQuery('[id^="dfp__topad-mob"]').wrap('<advantage-wrapper allowed-formats="TOPSCROLL"><div slot="advantage-ad-slot"></div></advantage-wrapper>');
2472			}
2473		}
2474
2475		if (location.href.indexOf('testipostmessage') > -1) {
2476			window.addEventListener('message', function(event) {
2477				if (event.origin == 'https://kaksplus.fi') {
2478					var eventData = event.data;
2479					if (eventData.event === 'adClick') {
2480						//console.log('Event data:' + event.data);
2481						window.dataLayer = window.dataLayer || [];
2482						window.dataLayer.push(eventData);
2483					} else {
2484						//console.warn('Invalid event data received:', eventData);
2485					}
2486				}
2487
2488			});
2489		}
2490
2491	}
2492
2493	//showAds = false;
2494	//if (document.location.href.indexOf("testdigikokosivu") > -1 || document.location.href.indexOf("testintext") > -1 || adLocation == 'content' || adLocation == 'blogs') {showAds = true;}
2495
2496	if(showAds && !hideAllAds) {
2497
2498		if (location.href.indexOf('anchorad') > -1 || rnd > 50) {
2499			if (dfpDebug) {console.log('Anchor ad defined...')}
2500			var anchorSlot;
2501			googletag.cmd.push(function() {
2502				if (document.body.clientWidth <= 500) {
2503					anchorSlot = googletag.defineOutOfPageSlot('/135812570/kaksplus/content/anchorad', googletag.enums.OutOfPageFormat.BOTTOM_ANCHOR);
2504				} else {
2505					anchorSlot = googletag.defineOutOfPageSlot('/135812570/kaksplus/content/anchorad', googletag.enums.OutOfPageFormat.BOTTOM_ANCHOR);
2506				}
2507				if (anchorSlot) {anchorSlot.addService(googletag.pubads())}
2508			});
2509		}
2510
2511		jQuery(document).ready(function() {
2512
2513			if ((jQuery('body').hasClass('single-post') || jQuery('body').hasClass('article-type_erikoistaitto')) && adLocation == 'content') {
2514			//if (jQuery('body').hasClass('article-type_erikoistaitto') && adLocation == 'content') {
2515
2516				//if (decodeURIComponent(cmpGetCookie("newadrules")) || location.href.indexOf('newadrules=1') > -1) {
2517				if (1 == 1) {
2518
2519
2520					if (decodeURIComponent(cmpGetCookie("newadrules")) || location.href.indexOf('newadrules=1') > -1) {
2521						const d = new Date();
2522						d.setTime(d.getTime() + (1*24*60*60*1000));
2523						let expires = "expires="+ d.toUTCString();
2524						document.cookie = "newadrules=1;" + expires + ";path=/";
2525						console.log('New ad rules in use...');
2526					}
2527
2528					var dfpDebug2 = dfpDebug2 || false;
2529					if (cmpGetCookie('dfpDebug2')){dfpDebug2 = true}
2530					var dfpDebug3 = dfpDebug3 || false;
2531					if (cmpGetCookie('dfpDebug3')){dfpDebug3 = true}
2532					if (!dfpDebug && dfpDebug2) {
2533						dfpDebug = true;
2534						dfpDebug2 = true;
2535						console.log('KP: We are using new ad rules after this...');
2536					}
2537
2538					var urlParams = new URLSearchParams(window.location.search);
2539
2540					var useRealAds = window.localStorage.getItem('userealads');
2541					if (!useRealAds) {
2542						if (urlParams.has('userealads')) {
2543							useRealAds = urlParams.get('userealads') == '0' ? false : true;
2544							if (dfpDebug) {console.log('User defined useRealAds found: ' + useRealAds)}
2545						} else {
2546							useRealAds = true;
2547							if (dfpDebug) {console.log('User defined useRealAds not found, using predefined value...')}
2548						}
2549					} else {
2550						if (dfpDebug) {console.log('User defined useRealAds found: ' + useRealAds)}
2551						useRealAds = useRealAds == '0' ? false : true;
2552					}
2553
2554					var maxAdDensity = window.localStorage.getItem('maxAdDensity');
2555					if (!maxAdDensity) {
2556						//var urlParams = new URLSearchParams(window.location.search);
2557						if (urlParams.has('maxaddensity')) {
2558							maxAdDensity = urlParams.get('maxaddensity');
2559							if (dfpDebug) {console.log('User defined urlMaxAdDensity found: ' + maxAdDensity)}
2560						} else {
2561							maxAdDensity = 0.29;
2562							if (dfpDebug) {console.log('User defined maxAdDensity not found, using predefined value...')}
2563						}
2564					} else {
2565						if (dfpDebug) {console.log('User defined maxAdDensity found: ' + maxAdDensity)}
2566					}
2567
2568					useParagraphsOnly = urlParams.get('useparagraphs') == '0' ? false : true;
2569					if (dfpDebug) {console.log('useParagraphsOnly: ' + useParagraphsOnly)}
2570
2571					var useh3Placement = false, adPlacementSelector = 'article.single-post .main-content';
2572					var elementArray = [], pIndexArray = [], h2IndexArray = [], h3IndexArray = [], sectionIndexArray = [];
2573					var nbrOfh2 = jQuery(adPlacementSelector + ' > h2').length;
2574					var nbrOfh3 = jQuery(adPlacementSelector + ' > h3').length;
2575					var nbrOfParagraphs = jQuery(adPlacementSelector + ' > p').length;
2576					var nbrOfSections = jQuery(adPlacementSelector + ' section.recommended-section').length;
2577					var nbrOfAllElements = jQuery(adPlacementSelector + ' > *').length;
2578					if (dfpDebug) {console.log('h2 count ' + nbrOfh2 + ', h3 count ' + nbrOfh3 + ', p count ' + nbrOfParagraphs + ', section count ' + nbrOfSections + ', allItems count ' + nbrOfAllElements + '...')}
2579
2580					var paragraphLengths = [], paragraphLines = [], textLength = 0, nbrOfLines = 0, tagName = '', elemHeight = 0;
2581					var articleTopOffset = jQuery('article.single-post').offset(), mainContentTopOffset = jQuery('article.single-post .main-content').offset(), prevOffset = null, distanceFromPrev = 0;
2582
2583					if (document.documentElement.clientWidth >= 1024) {
2584
2585							jQuery('article.single-post .main-content > p').eq(1).after(jQuery('.desk-1.section').removeClass('section').addClass('in-article'));
2586							if (dfpDebug) {console.log('Siirretään artikkelin desk-1 -paikka...');}
2587
2588							var desk2_adPlace = 1, bbwPlace = 0;
2589							if (nbrOfh2 >= 2) {
2590
2591								if (nbrOfh2 > 1 && nbrOfh2 < 5) {desk2_adPlace = parseInt(nbrOfh2/2)}
2592								if (nbrOfh2 > 4) {
2593									desk2_adPlace = 2;
2594									bbwPlace = 4;
2595								}
2596
2597								jQuery(adPlacementSelector + ' > h2').eq(desk2_adPlace).before('<div class=\"desk-2 is-background-gray-light-3 in-article\"><div id=\"dfp__desk-2_1\" class=\"dfp__desk-2\">
2597<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__desk-2_1\");}<\/script><\/div><\/div>');
2598								//jQuery(adPlacementSelector + ' > h2').eq(desk2_adPlace).before('<div class=\"desk-2 is-background-gray-light-3 in-article\"><advantage-wrapper><div id=\"dfp__desk-2_1\" class=\"dfp__desk-2\">
2598<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__desk-2_1\");}<\/script><\/div><\/advantage-wrapper><\/div>');
2599								if (dfpDebug) {console.log('Lisätään desk-2 paikkaan ' + desk2_adPlace + '...');}
2600
2601								if (bbwPlace > 0) {
2602									jQuery(adPlacementSelector + ' > h2').eq(bbwPlace).before('<div id=\"bbwvideo_new\"></div>');
2603									if (dfpDebug) {console.log('BBW before ' + bbwPlace + '...')}
2604								}
2605
2606							}
2607
2608							if (nbrOfh2 > 6) {
2609								desk2_adPlace = 6;
2610								if (dfpDebug) {console.log('Desk-3 before h2.eq(6)...')};
2611								jQuery(adPlacementSelector + ' > h2').eq(desk2_adPlace).before('<div class=\"desk-3 is-background-gray-light-3 in-article\"><div id=\"dfp__desk-3_1\" class=\"dfp__desk-3\">
2611<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__desk-3_1\");}<\/script><\/div><\/div>');
2612							} else {
2613								if (dfpDebug) {console.log('Desk-3 before social...')};
2614								jQuery('article.single-post .main-content div.social-share').before('<div class=\"desk-3 is-background-gray-light-3 in-article\"><div id=\"dfp__desk-3_1\" class=\"dfp__desk-3\">
2614<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__desk-3_1\");}<\/script><\/div><\/div>');
2615							}
2616
2617							// Advantage wrapper
2618							if (useAdvantage) {
2619								jQuery('[id^="dfp__desk"]').wrap('<advantage-wrapper allowed-formats="DOUBLE_MIDSCROLL,MIDSCROLL"><div slot="advantage-ad-slot"></div></advantage-wrapper>');
2620							}
2621
2622
2623					} else {
2624
2625						jQuery(adPlacementSelector).children().each((index,element) => {
2626
2627							tagName = element.tagName.toLowerCase();
2628
2629							elemHeight = Math.round(jQuery(element).height());
2630
2631							let currentOffset = jQuery(element).offset();
2632							let distanceFromArticleTop = Math.round(currentOffset.top - articleTopOffset.top);
2633							let distanceFromMainContentTop = Math.round(currentOffset.top - mainContentTopOffset.top);
2634
2635							if (prevOffset) {
2636								distanceFromPrev = Math.round(currentOffset.top - prevOffset.top);
2637							}
2638
2639							if (tagName == 'p') {
2640								pIndexArray.push(index);
2641								textLength = jQuery(element).text().length;
2642								paragraphLengths.push(textLength);
2643								let lineHeight = parseInt(jQuery(element).css('line-height')) || 20;
2644								nbrOfLines = Math.round(elemHeight / lineHeight);
2645								paragraphLines.push(nbrOfLines);
2646								if (dfpDebug3) {
2647									console.log('Paragraph ' + (index) + ' # length: ' + textLength + ', nbrOfLines: ' + nbrOfLines + ', elemHeight: ' + elemHeight);
2648								}
2649							}
2650							if (tagName == 'h2') {h2IndexArray.push(index)}
2651							if (tagName == 'h3') {h3IndexArray.push(index)}
2652							if (tagName == 'section') {sectionIndexArray.push(index)}
2653
2654							elementArray.push({
2655								tagName: element.tagName.toLowerCase(),
2656								distanceFromArticleTop: distanceFromArticleTop,
2657								distanceFromMainContentTop: distanceFromMainContentTop,
2658								distanceFromPrev: distanceFromPrev,
2659								textLength: textLength,
2660								nbrOfLines: nbrOfLines,
2661								elemHeight: elemHeight,
2662							});
2663							prevOffset = currentOffset;
2664
2665						});
2666
2667						var mob1ok = false, mob2ok = false, outstreamOk = false, mob3Count = 1, adElementsAdded = 0, adPlacesFound = 0;
2668						var lastElementIndex = elementArray.length-1, prevElement, adAllowed = true;
2669						var mobAdMaxHeight = 600, mob1AdMaxHeight = 600, mobAdWrapperExtra = 58, mobAdWrapperMaxHeight = mobAdMaxHeight + mobAdWrapperExtra;
2670						//var windowHeight = window.innerHeight, windowOffset = 100, firstAdOffset = 100, lastAdOffset = 0;
2671						var windowHeight = window.innerHeight, windowOffset = 50, firstAdOffset = 50, lastAdOffset = 0;
2672						var nbrOfElementsToMoveForward = 0;
2673						//if (nbrOfh2 > 4) {windowOffset ToPrevious= 100} //300
2674						//if (nbrOfh2 > 10) {windowOffset = 100} //500
2675
2676						var tagSelectorForAd = 'h2';
2677						var tagSelectorArray = h2IndexArray;
2678
2679						if (nbrOfh2 >= 2 && nbrOfh3 >= 2) {
2680							tagSelectorForAd = 'h2';
2681							tagSelectorArray = h2IndexArray;
2682							let h2h3IndexArray = h2IndexArray.concat(h3IndexArray).sort((a, b) => a - b);
2683							console.log('h2h3: ' + h2h3IndexArray);
2684						} else if (nbrOfh2 < 2 && nbrOfh3 >= 2) {
2685							tagSelectorForAd = 'h3';
2686							tagSelectorArray = h3IndexArray;
2687						} else if (nbrOfh2 < 2 && nbrOfh3 < 2) {
2688							tagSelectorForAd = 'p';
2689							tagSelectorArray = pIndexArray;
2690						}
2691
2692						if (useParagraphsOnly) {
2693							tagSelectorForAd = 'p';
2694							tagSelectorArray = pIndexArray;
2695							if (h2IndexArray.length >= pIndexArray.length) {
2696								tagSelectorForAd = 'h2';
2697								tagSelectorArray = h2IndexArray;
2698							}
2699						}
2700
2701						if (dfpDebug) {
2702							console.log('\n');
2703							console.log('tagSelectorForAd: ' + tagSelectorForAd + ', tagSelectorArray: ' + tagSelectorArray);
2704							console.log('Arrays: h2[' + (h2IndexArray.length) + '], h3[' + (h3IndexArray.length) + '], p[' + (pIndexArray.length) + '], section[' + (sectionIndexArray.length) + '], elem[' + (elementArray.length) + ']')
2705						}
2706
2707						if (window.dfp.visibility == 'mobile') {
2708
2709							var cbaContentHeight = elementArray[pIndexArray[pIndexArray.length-1]].distanceFromArticleTop + elementArray[pIndexArray[pIndexArray.length-1]].elemHeight;
2710
2711							//var maxAds = calculateMaxAds(contentHeight, mobAdWrapperMaxHeight, maxAdDensity);
2712							var cbaContentAdRatio = maxAdDensity / (1 - maxAdDensity);
2713							var maxAds = Math.floor(cbaContentAdRatio * (cbaContentHeight / mobAdWrapperMaxHeight));
2714
2715							if (dfpDebug) {
2716								console.log("Orig cbaContentHeight:", cbaContentHeight);
2717								console.log("Orig max ads:", maxAds);
2718							}
2719
2720							var adsInserted = 0;
2721							while (adsInserted < maxAds) {
2722								cbaContentHeight += mobAdWrapperMaxHeight;
2723								maxAds = Math.floor(cbaContentAdRatio * (cbaContentHeight / mobAdWrapperMaxHeight));
2724								adsInserted++;
2725							}
2726							if (useParagraphsOnly) {
2727								maxAds = 20;
2728							}
2729
2730							if (dfpDebug) {
2731								console.log('Last p dfat: ' + elementArray[pIndexArray[pIndexArray.length-1]].distanceFromArticleTop);
2732								console.log('Last p dfmct: ' + elementArray[pIndexArray[pIndexArray.length-1]].distanceFromMainContentTop);
2733								console.log('CBA content height: ' + cbaContentHeight);
2734								console.log('CBA content ratio: ' + cbaContentAdRatio);
2735								console.log("Max ads:", maxAds);
2736								console.log("Window offset:", windowOffset);
2737								console.log('\n');
2738							}
2739
2740							for (i=0;i<=elementArray.length-1;i++) {
2741
2742								if (dfpDebug3) {
2743									console.log('\n');
2744									console.log('TESTI, Arr[' + i + ']: ' + elementArray[i]['tagName'].toUpperCase() + ' # Ad allowed: ' + adAllowed);
2745									console.log('Arr ' + i + ',0 (tagName): ' + elementArray[i]['tagName']);
2746									console.log('Arr ' + i + ',1 (dfat): ' + elementArray[i]['distanceFromArticleTop']);
2747									console.log('Arr ' + i + ',2 (dfmct): ' + elementArray[i]['distanceFromMainContentTop']);
2748									console.log('Arr ' + i + ',3 (dfp): ' + elementArray[i]['distanceFromPrev']);
2749									console.log('Arr ' + i + ',4 (textLength): ' + elementArray[i]['textLength']);
2750									console.log('Arr ' + i + ',5 (nbrOfLines): ' + elementArray[i]['nbrOfLines']);
2751									console.log('Arr ' + i + ',6 (elemHeight): ' + elementArray[i]['elemHeight']);
2752								}
2753
2754								if (elementArray[i]['tagName'] == tagSelectorForAd) {
2755									adPlacesFound++;
2756								}
2757
2758								var tagSelectorForMob1Ad = 'p', mob1AdPlace = 1;
2759								if (maxAds == 1) {
2760									if (nbrOfh2 >= 1) {
2761										tagSelectorForMob1Ad = 'h2';
2762										mob1AdPlace = parseInt(nbrOfh2/2);
2763										if (h2IndexArray[0] > 2) {mob1AdPlace = 0}
2764									} else if (nbrOfParagraphs > 6) {
2765										mob1AdPlace = 2;
2766									}
2767								} else {
2768									if (nbrOfh2 >= 2 && h2IndexArray[0] < 6) {
2769										tagSelectorForMob1Ad = 'h2';
2770										mob1AdPlace = 0;
2771									}
2772									if (nbrOfh2 >= 2) {
2773										tagSelectorForMob1Ad = 'p';
2774										mob1AdPlace = 1;
2775									}
2776								}
2777								if (useParagraphsOnly) {
2778									tagSelectorForMob1Ad = 'p';
2779									mob1AdPlace = 0;
2780								}
2781
2782								if (prevElement == 'figure') {
2783									adAllowed = true;
2784								}
2785
2786
2787								if (elementArray[i]['tagName'] == tagSelectorForMob1Ad && elementArray[i]['distanceFromMainContentTop'] >= firstAdOffset && !mob1ok && adAllowed && adElementsAdded < maxAds) {
2788									if (dfpDebug) {console.log('dfmct: ' + elementArray[i]['distanceFromMainContentTop'] + ', fao: ' + firstAdOffset + ', mob1ok: ' + mob1ok + ', adAllowed: ' + adAllowed)}
2789									if (useRealAds) {
2790										if (tagSelectorForMob1Ad == 'p') {
2791											jQuery(adPlacementSelector + ' > ' + tagSelectorForMob1Ad).eq(mob1AdPlace).after(jQuery('#dfp__mob-1_1').parent('div').removeClass('section'));
2792										} else {
2793											jQuery(adPlacementSelector + ' > ' + tagSelectorForMob1Ad).eq(mob1AdPlace).before(jQuery('#dfp__mob-1_1').parent('div').removeClass('section'));
2794										}
2795									} else {
2796										jQuery(adPlacementSelector + ' > ' + tagSelectorForMob1Ad).eq(mob1AdPlace).before('<div class=\"mob-1 is-background-gray-light-3 ad-mob_description\"><div id=\"dfp__mob-11_1\" class=\"mob-1\" data-google-query-id=\"1_1\"><div style=\"padding: 20px; height: ' + mob1AdMaxHeight + 'px\">Mob-1_1<\/div><\/div><\/div>');
2797									}
2798									if (dfpDebug) {console.log('adPlacesFound: ' + (adPlacesFound-1))}
2799									mob1ok = true;
2800									adElementsAdded++;
2801									lastAdOffset = elementArray[i]['distanceFromMainContentTop'];
2802									if (dfpDebug) {console.log('Lao mob-1: ' + lastAdOffset + '');console.log('\n');}
2803								}
2804
2805
2806								if (elementArray[i]['tagName'] == tagSelectorForAd && elementArray[i]['distanceFromMainContentTop'] - lastAdOffset > (windowHeight + windowOffset) && !mob2ok && adAllowed && adElementsAdded < maxAds) {
2807									if (dfpDebug) {console.log('tagName: ' + elementArray[i]['tagName'] + ', dfmct: ' + elementArray[i]['distanceFromMainContentTop'] + ', lao: ' + lastAdOffset + ', mob2ok: ' + mob2ok + ', adAllowed: ' + adAllowed)}
2808									if (useParagraphsOnly && elementArray[i-1]['tagName'] == 'h2') {
2809										nbrOfElementsToMoveForward = 1;
2810										if (dfpDebug) {console.log('Previous H2 found at ' + i + ':' + elementArray[i-1]['tagName'] + ', moving one element backwards...')}
2811									}
2812									if (useRealAds) {
2813										jQuery(adPlacementSelector + ' > ' + tagSelectorForAd).eq(adPlacesFound-1+nbrOfElementsToMoveForward).before('<div class=\"mob-2 is-background-gray-light-3 ad-mob_description\"><div id=\"dfp__mob-2_1\" class=\"mob-2\">
2813<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__mob-2_1\");}<\/script><\/div><\/div>');
2814									} else {
2815										jQuery(adPlacementSelector + ' > ' + tagSelectorForAd).eq(adPlacesFound-1+nbrOfElementsToMoveForward).before('<div class=\"mob-2 is-background-gray-light-3 ad-mob_description\"><div id=\"dfp__mob-2_1\" class=\"mob-2\" data-google-query-id=\"2_1\"><div style=\"padding: 20px; height: ' + mobAdMaxHeight + 'px\">Mob-2_1<\/div><\/div><\/div>');
2816									}
2817									if (dfpDebug) {console.log('Adding mob-2 to place ' + (i) + ' before ' + elementArray[i]['tagName'] + '...');}
2818									mob2ok = true;
2819									adElementsAdded++;
2820									nbrOfElementsToMoveForward = 0;
2821									lastAdOffset = elementArray[i]['distanceFromMainContentTop'];
2822									if (dfpDebug) {console.log('Lao mob-2: ' + lastAdOffset + '');console.log('\n');}
2823								}
2824
2825
2826								if (elementArray[i]['tagName'] == tagSelectorForAd && elementArray[i]['distanceFromMainContentTop'] - lastAdOffset > (windowHeight + windowOffset) && !outstreamOk && adAllowed && adElementsAdded < maxAds) {
2827									if (dfpDebug) {console.log('tagName: ' + elementArray[i]['tagName'] + ', dfmct: ' + elementArray[i]['distanceFromMainContentTop'] + ', lao: ' + lastAdOffset + ', outstreamOk: ' + outstreamOk + ', adAllowed: ' + adAllowed)}
2828									if (useParagraphsOnly && elementArray[i-1]['tagName'] == 'h2') {
2829										nbrOfElementsToMoveForward = 1;
2830										if (dfpDebug) {console.log('Previous H2 found at ' + i + ':' + elementArray[i-1]['tagName'] + ', moving one element backwards...')}
2831									}
2832									if (useRealAds) {
2833										jQuery(adPlacementSelector + ' > ' + tagSelectorForAd).eq(adPlacesFound-1+nbrOfElementsToMoveForward).before('<div id=\"bbwvideo_new\"></div>');
2834									} else {
2835										jQuery(adPlacementSelector + ' > ' + tagSelectorForAd).eq(adPlacesFound-1+nbrOfElementsToMoveForward).before('<div class=\"mob-2 is-background-gray-light-3 ad-mob_description\"><div id=\"dfp__mob-2_222\" class=\"mob-2\" data-google-query-id=\"2_222\"><div style=\"padding: 20px; height: ' + mobAdMaxHeight + 'px\">Mob-2_222<\/div><\/div><\/div>');
2836									}
2837									if (dfpDebug) {console.log('Adding BBW to place ' + (i) + ' before ' + elementArray[i]['tagName'] + '...');}
2838									outstreamOk = true;
2839									adElementsAdded++;
2840									nbrOfElementsToMoveForward = 0;
2841									lastAdOffset = elementArray[i]['distanceFromMainContentTop'];
2842									if (dfpDebug) {console.log('Lao BBW: ' + lastAdOffset + '');console.log('\n');}
2843								}
2844
2845
2846								if (elementArray[i]['tagName'] == tagSelectorForAd && elementArray[i]['distanceFromMainContentTop'] - lastAdOffset > (windowHeight + windowOffset) && adAllowed && adElementsAdded < maxAds) {
2847									if (dfpDebug) {console.log('tagName: ' + elementArray[i]['tagName'] + ', dfmct: ' + elementArray[i]['distanceFromMainContentTop'] + ', lao: ' + lastAdOffset + ', mob3Count: ' + mob3Count + ', adAllowed: ' + adAllowed)}
2848									if (useParagraphsOnly && elementArray[i-1]['tagName'] == 'h2') {
2849										nbrOfElementsToMoveForward = 1;
2850										if (dfpDebug) {console.log('Previous H2 found at ' + i + ':' + elementArray[i-1]['tagName'] + ', moving one element backwards...')}
2851									}
2852									if (useRealAds) {
2853										jQuery(adPlacementSelector + ' > ' + tagSelectorForAd).eq(adPlacesFound-1+nbrOfElementsToMoveForward).before('<div class=\"mob-3 is-background-gray-light-3 ad-mob_description\"><div id=\"dfp__mob-3_' + mob3Count + '\" class=\"mob-3\">
2853<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__mob-3_' + mob3Count + '\");}<\/script><\/div><\/div>');
2854									} else {
2855										jQuery(adPlacementSelector + ' > ' + tagSelectorForAd).eq(adPlacesFound-1+nbrOfElementsToMoveForward).before('<div class=\"mob-3 is-background-gray-light-3 ad-mob_description\"><div id=\"dfp__mob-3_' + mob3Count + '\" class=\"mob-3\" data-google-query-id=\"3_' + mob3Count + '\"><div style=\"padding: 20px; height: ' + mobAdMaxHeight + 'px\">Mob-3_' + mob3Count + '<\/div><\/div><\/div>');
2856									}
2857									if (dfpDebug) {console.log('Adding mob-3 to place ' + (i) + ' before ' + elementArray[i]['tagName'] + '...');}
2858									mob3Count++;
2859									adElementsAdded++;
2860									nbrOfElementsToMoveForward = 0;
2861									lastAdOffset = elementArray[i]['distanceFromMainContentTop'];
2862									if (dfpDebug) {console.log('Lao mob-3_' + mob3Count + ': ' + lastAdOffset + '');console.log('\n');}
2863								}
2864
2865
2866								if (elementArray[elementArray.length-1]['tagName'] == 'section') {
2867									lastElementIndex = elementArray.length-2;
2868								}
2869								if (i == lastElementIndex && elementArray[i]['distanceFromMainContentTop'] - lastAdOffset >= windowHeight && adAllowed) {
2870									if (dfpDebug) {console.log('Last element tagName: ' + elementArray[i]['tagName'] + ', dfmct: ' + elementArray[i]['distanceFromMainContentTop'] + ', lao: ' + lastAdOffset + ', mob3Count: ' + mob3Count + ', adAllowed: ' + adAllowed)}
2871									mob3Count = 99;
2872									if (useRealAds) {
2873/*
2874										if (jQuery('article.single-post').find('section h2').filter(function() {
2875											return jQuery(this).text().trim() === 'Lue myös';
2876										}).length > 22) {
2877											jQuery(adPlacementSelector + ' > section.wp-block-otavamedia-section-management').before('<div class=\"mob-3 is-background-gray-light-3 ad-mob_description last\"><div id=\"dfp__mob-3_' + mob3Count + '\" class=\"mob-3\">
2877<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__mob-3_' + mob3Count + '\");}<\/script><\/div><\/div>');
2878										} else {
2879											jQuery(adPlacementSelector + ' > div.social-share').before('<div class=\"mob-3 is-background-gray-light-3 ad-mob_description last\"><div id=\"dfp__mob-3_' + mob3Count + '\" class=\"mob-3\">
2879<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__mob-3_' + mob3Count + '\");}<\/script><\/div><\/div>');
2880										}
2881*/
2882										//jQuery(adPlacementSelector + ' > p').eq(nbrOfParagraphs-1).after('<div class=\"mob-3 is-background-gray-light-3 ad-mob_description last\"><div id=\"dfp__mob-3_' + mob3Count + '\" class=\"mob-3\">
2882<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__mob-3_' + mob3Count + '\");}<\/script><\/div><\/div>');
2883										//if (dfpDebug) {console.log('Last mob-3 before p.eq(' + nbrOfParagraphs-1 + '): mob-3_' + mob3Count + '');console.log('\n');}
2884										jQuery(adPlacementSelector + ' > div.social-share').before('<div class=\"mob-3 is-background-gray-light-3 ad-mob_description last\"><div id=\"dfp__mob-3_' + mob3Count + '\" class=\"mob-3\">
2884<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__mob-3_' + mob3Count + '\");}<\/script><\/div><\/div>');
2885										if (dfpDebug) {console.log('Last mob-3 before social share: mob-3_' + mob3Count + '');console.log('\n');}
2886									} else {
2887										//jQuery(adPlacementSelector + ' > p').eq(nbrOfParagraphs-1).after('<div class=\"mob-3 is-background-gray-light-3 ad-mob_description\"><div id=\"dfp__mob-3_' + mob3Count + '\" class=\"mob-3\"><div style=\"padding: 20px; height: 600px\">Last Mob-3_' + mob3Count + '<\/div><\/div><\/div>');
2888										//if (dfpDebug) {console.log('Last mob-3 before p.eq(' + (nbrOfParagraphs-1) + '): mob-3_' + mob3Count + '');console.log('\n');}
2889										jQuery(adPlacementSelector + ' > div.social-share').before('<div class=\"mob-3 is-background-gray-light-3 ad-mob_description last\"><div id=\"dfp__mob-3_' + mob3Count + '\" class=\"mob-3\" data-google-query-id=\"3_' + mob3Count + '\"><div style=\"padding: 20px; height: ' + mobAdMaxHeight + 'px\">Last Mob-3_' + mob3Count + '<\/div><\/div><\/div>');
2890										if (dfpDebug) {console.log('Last mob-3 before social share: mob-3_' + mob3Count + '');console.log('\n');}
2891									}
2892								}
2893
2894								if (dfpDebug3 && elementArray[i]['tagName'] == 'p') {
2895									console.log('#' + i + ' - tagName: ' + elementArray[i]['tagName'] + ', dfp: ' + elementArray[i]['distanceFromPrev'] + 'px,  dfat: ' + elementArray[i]['distanceFromArticleTop'] + 'px,  dfmct: ' + elementArray[i]['distanceFromMainContentTop'] + 'px, lao: ' + lastAdOffset + ', dfplao: ' + (lastAdOffset) + '');
2896									jQuery(adPlacementSelector).children().eq(i+adElementsAdded).prepend('<div style="position: absolute; background-color: #f0f0f0; border: 1px solid #ccc; font-size: 11px; margin-top: -13px">Chr: ' + elementArray[i]['textLength'] + ', lines: ' + elementArray[i]['nbrOfLines'] + ', eh: ' + elementArray[i]['elemHeight'] + ', dfp: ' + elementArray[i]['distanceFromPrev'] + ', dfat: ' + elementArray[i]['distanceFromArticleTop'] + ', dfmct: ' + elementArray[i]['distanceFromMainContentTop'] + ', dfpa: ' + (elementArray[i]['distanceFromMainContentTop']-lastAdOffset) + '</div>');
2897								}
2898
2899								prevElement = elementArray[i]['tagName'];
2900								adAllowed = true;
2901
2902							}
2903
2904							if (decodeURIComponent(cmpGetCookie("newadrules"))) {
2905								jQuery('article.single-post .main-content').find('.ad-mob_description, #bbwvideo_new').each(function() {
2906									jQuery(this).after(jQuery('<div style="border: 2px solid blue; margin-top: -45px"></div>'));
2907								});
2908							}
2909
2910						}
2911
2912						if (dfpDebug) {console.log(elementArray)}
2913
2914						if (dfpDebug2) {
2915							dfpDebug = false;
2916							dfpDebug2 = false;
2917							dfpDebug3 = false;
2918						}
2919
2920						// Advantage wrapper
2921						if (useAdvantage) {
2922							jQuery('[id^="dfp__mob"]').wrap('<advantage-wrapper allowed-formats="DOUBLE_MIDSCROLL,MIDSCROLL"><div slot="advantage-ad-slot"></div></advantage-wrapper>');
2923						}
2924
2925					}
2926
2927				}
2928
2929				if (jQuery('#om-piano-recommendations-content').length > 0) {
2930
2931					if (dfpDebug) {console.log('Add native-list-1 to Piano recommendations...')}
2932					googletag.cmd.push(function() {
2933						googletag.defineSlot('/135812570/kaksplus/native/native-list-1', ['fluid', [1, 1]], 'dfp__native-list-1_1').addService(googletag.pubads());
2934						googletag.defineSlot('/135812570/kaksplus/native/native-list-1', ['fluid', [1, 1]], 'dfp__native-list-1_2').addService(googletag.pubads());
2935					});
2936					jQuery('#om-piano-recommendations-content > ol > li').eq(0).after('<li tabindex="-1" class="list__item piano-recommendation"><div class="bg-pink bg-clip-content placeholder grid__item adWrapperNativeList"><div id=\"dfp__native-list-1_1\">
2936<script>googletag.cmd.push(function() {googletag.display("dfp__native-list-1_1")});<\/script><\/div></div></li>');
2937					jQuery('#om-piano-recommendations-content > ol > li').eq(2).after('<li tabindex="-1" class="list__item piano-recommendation"><div class="bg-pink bg-clip-content placeholder grid__item adWrapperNativeList"><div id=\"dfp__native-list-1_2\">
2937<script>googletag.cmd.push(function() {googletag.display("dfp__native-list-1_2")});<\/script><\/div></div></li>');
2938					//jQuery('.neuwo-recommendations > div > div').eq(0).after('<div class="bg-pink bg-clip-content placeholder grid__item adWrapperNativeList"><div id=\"dfp__native-list-1_1\">
2938<script>googletag.cmd.push(function() {googletag.display("dfp__native-list-1_1")});<\/script><\/div></div>');
2939					//jQuery('.neuwo-recommendations > div > div').eq(2).after('<div class="bg-pink bg-clip-content placeholder grid__item adWrapperNativeList"><div id=\"dfp__native-list-1_2\">
2939<script>googletag.cmd.push(function() {googletag.display("dfp__native-list-1_2")});<\/script><\/div></div>');
2940					jQuery('.neuwo-recommendations > div > div').eq(5).remove();
2941
2942				}
2943
2944			}
2945
2946
2947			if (adLocation == 'blogs') {
2948
2949				if (jQuery('body').is('.home.blog') && adLocation == 'blogs') {
2950/*
2951					waitForElement('#dfp__mob-1_2').then(function(element) {
2952						var slots = googletag.pubads().getSlots();
2953						for (var i = 0; i < slots.length; i++) {
2954							var slot = slots[i];
2955							if (slot.getSlotElementId() === 'dfp__mob-1_2') {
2956								googletag.destroySlots([slot]);
2957								console.log('Slot with ID dfp__mob-1_2 removed.');
2958								break;
2959							}
2960						}
2961						jQuery('#dfp__mob-1_2').parent('div').remove();
2962					});
2963*/
2964					jQuery('#om_commercialpostlisting-2').before(jQuery('#dfp__mob-1_1').parent('div').removeClass('ad-mob_description').css('margin-top','-30px'));
2965					jQuery('#om_commercialpostlisting-3').before('<div class="mob-2 section is-background-gray-light-3"><div id=\"dfp__mob-2_1\">
2965<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__mob -2_1\");}<\/script></div></div>');
2966
2967					//jQuery('#dfp__desk-1_2').parent('div').remove();
2968					jQuery('#om_commercialpostlisting-1').before(jQuery('#dfp__desk-1_1').parent('div'));
2969					jQuery('#om_commercialpostlisting-3').before('<div class="desk-2 section is-background-gray-light-3"><div id=\"dfp__desk-2_1\">
2969<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__desk-2_1\");}<\/script></div></div>');
2970				}
2971
2972				if (jQuery('body').is('.single-post') && adLocation == 'blogs') {
2973
2974					var adPeriodFound = true, adPlaceFilled = 0, useh3Placement = false, adPlacementSelector = 'article.single-post .main-content > h2';
2975					var pIndexArray = [], h2IndexArray = [], h3IndexArray = [], sectionIndexArray = [], elementArray = [];
2976					var nbrOfh2 = jQuery('article.single-post .main-content > h2').length;
2977					var nbrOfh3 = jQuery('article.single-post .main-content > h3').length;
2978					var nbrOfParagraphs = jQuery('article.single-post .main-content > p').length;
2979					var nbrOfSections = jQuery('article.single-post .main-content section.recommended-section').length;
2980					var nbrOfAllElements = jQuery('article.single-post .main-content > *').length;
2981					if (dfpDebug) {console.log('h2 count ' + nbrOfh2 + ', h3 count ' + nbrOfh3 + ', p count ' + nbrOfParagraphs + ', section count ' + nbrOfSections + ', allItems count ' + nbrOfAllElements + '..')}
2982
2983					var paragraphLengths = [], paragraphLines = [], textLength = 0, nbrOfLines = 0;
2984					var desk2_adPlace, mob1_adPlace = 2, mob2_adPlace;
2985					var windowHeight = window.innerHeight, windowOffset = 100, firstAdOffset = 100, lastAdOffset = 300;
2986					var mainContentOffset = jQuery('article.single-post .main-content').offset(), prevOffset = null, distanceFromPrev = 0, lastAdOffset = 0;
2987					var mob1ok = false, mob2ok = false, mob3Count = 1, elementsAdded = 0;
2988
2989					jQuery('article.single-post .main-content').children().each((index,element) => {
2990
2991						if (element.tagName.toLowerCase() == 'p') {
2992
2993							pIndexArray.push(index+1);
2994
2995							textLength = jQuery(element).text().length;
2996							paragraphLengths.push(textLength);
2997							if (dfpDebug) {console.log("Length of paragraph " + (index + 1) + ": " + textLength)}
2998
2999							let lineHeight = parseInt(jQuery(element).css('line-height')) || 20;
3000							let height = jQuery(element).height();
3001							nbrOfLines = Math.round(height / lineHeight);
3002							paragraphLines.push(nbrOfLines);
3003							if (dfpDebug) {console.log("Number of lines in paragraph " + (index + 1) + ": " + nbrOfLines)}
3004
3005						}
3006						if (element.tagName.toLowerCase() == 'h2') {h2IndexArray.push(index+1)}
3007						if (element.tagName.toLowerCase() == 'h3') {h3IndexArray.push(index+1)}
3008						if (element.tagName.toLowerCase() == 'section') {sectionIndexArray.push(index+1)}
3009
3010						let currentOffset = jQuery(element).offset();
3011						let distanceFromTop = Math.round(currentOffset.top - mainContentOffset.top);
3012
3013						if (prevOffset) {
3014							distanceFromPrev = Math.round(currentOffset.top - prevOffset.top);
3015							elementArray.push({
3016								tagName: element.tagName.toLowerCase(),
3017								distanceFromTop: distanceFromTop,
3018								distanceFromPrev: distanceFromPrev,
3019								textLength: textLength,
3020								nbrOfLines: nbrOfLines
3021							});
3022						} else {
3023							elementArray.push({
3024								tagName: element.tagName.toLowerCase(),
3025								distanceFromTop: distanceFromTop,
3026								distanceFromPrev: distanceFromPrev,
3027								textLength: textLength,
3028								nbrOfLines: nbrOfLines
3029							});
3030						}
3031						prevOffset = currentOffset;
3032
3033					});
3034
3035					var lastElement = elementArray.length-1, prevElement, adNotAllowed = false;
3036
3037					if (window.dfp.visibility == 'mobile') {
3038
3039						for (i=0;i<=elementArray.length-1;i++) {
3040
3041							if (prevElement == 'figure') {
3042								adNotAllowed = true;
3043							}
3044							if (dfpDebug) {
3045								console.log('TESTI: ' + elementArray[i]['tagName'] + '#' + adNotAllowed);
3046								console.log('Arr ' + i + ',0: ' + elementArray[i]['tagName']);
3047								console.log('Arr ' + i + ',1: ' + elementArray[i]['distanceFromTop']);
3048								console.log('Arr ' + i + ',2: ' + elementArray[i]['distanceFromPrev']);
3049								console.log('Arr ' + i + ',3: ' + elementArray[i]['textLength']);
3050								console.log('Arr ' + i + ',4: ' + elementArray[i]['nbrOfLines']);
3051							}
3052
3053							if (elementArray[i]['distanceFromTop'] >= firstAdOffset && !mob1ok && !adNotAllowed) {
3054								jQuery('article.single-post .main-content').children().eq(i).before(jQuery('#dfp__mob-1_1').parent('div').removeClass('section'));
3055								mob1ok = true;
3056								elementsAdded++;
3057								lastAdOffset = elementArray[i]['distanceFromTop'];
3058								if (dfpDebug) {console.log('Lao: ' + lastAdOffset)}
3059							}
3060
3061							if (elementArray[i]['distanceFromTop'] - lastAdOffset > (windowHeight + windowOffset) && !mob2ok && !adNotAllowed) {
3062								jQuery('article.single-post .main-content').children().eq(i+1).before('<div class=\"mob-2 is-background-gray-light-3 ad-mob_description\"><div id=\"dfp__mob-2_1\" class=\"dfp__mob-2\">
3062<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__mob-2_1\");}<\/script><\/div><\/div>');
3063								if (dfpDebug) {console.log('Lisätään mob-2 paikkaan ' + (i+1) + ' before...');}
3064								mob2ok = true;
3065								elementsAdded++;
3066								lastAdOffset = elementArray[i]['distanceFromTop'];
3067							}
3068
3069							if (elementArray[i]['distanceFromTop'] - lastAdOffset > (windowHeight + windowOffset) && !adNotAllowed) {
3070								jQuery('article.single-post .main-content').children().eq(i+2).before('<div class=\"mob-3 is-background-gray-light-3 ad-mob_description\"><div id=\"dfp__mob-3_' + mob3Count + '\" class=\"dfp__mob-3\">
3070<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__mob-3_' + mob3Count + '\");}<\/script><\/div><\/div>');
3071								if (dfpDebug) {console.log('Lisätään mob-3 paikkaan ' + (i+2) + ' before...');}
3072								lastAdOffset = elementArray[i]['distanceFromTop'];
3073								mob3Count++;
3074								elementsAdded++;
3075							}
3076
3077							if (elementArray[elementArray.length-1]['tagName'] == 'section') {
3078								lastElement = elementArray.length-2;
3079							}
3080							if (i == lastElement && elementArray[i]['distanceFromTop'] - lastAdOffset >= lastAdOffset && !adNotAllowed) {
3081
3082
3083
3084								jQuery('article.single-post .main-content').children().eq(i+mob3Count+1).before('<div class=\"mob-3 is-background-gray-light-3 ad-mob_description last\"><div id=\"dfp__mob-3_' + mob3Count + '\" class=\"dfp__mob-3\">
3084<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__mob-3_' + mob3Count + '\");}<\/script><\/div><\/div>');
3085							}
3086
3087							if (dfpDebug && elementArray[i]['tagName'] == 'p') {
3088								console.log(i + '#' + elementArray[i]['tagName'] + '#' + elementArray[i]['distanceFromPrev'] + 'px#' + elementArray[i]['distanceFromTop'] + 'px')
3089								jQuery('article.single-post .main-content').children().eq(i+elementsAdded).prepend('<div style="position: absolute; background-color: #f0f0f0; border: 1px solid #ccc; font-size: 11px; margin-top: -13px">Chars: ' + elementArray[i]['textLength'] + ', lines: ' + elementArray[i]['nbrOfLines'] + ', dfp: ' + elementArray[i]['distanceFromPrev'] + ', dft: ' + elementArray[i]['distanceFromTop'] + ', dfpa: ' + (elementArray[i]['distanceFromTop']-lastAdOffset) + '</div>');
3090							}
3091
3092							prevElement = elementArray[i]['tagName'];
3093							adNotAllowed = false;
3094
3095						}
3096
3097					}
3098
3099					if (window.dfp.visibility == 'desktop') {
3100
3101						if (nbrOfh2 > 1) {
3102							desk2_adPlace = 1;
3103						} else {
3104							if ((nbrOfParagraphs - 2) >= 5) {
3105								adPlacementSelector = 'article.single-post .main-content > p';
3106								desk2_adPlace = nbrOfParagraphs-2;
3107							}
3108						}
3109
3110						/*** Desk ***/
3111						jQuery('div.main-content').before(jQuery('#dfp__desk-1_1').parent('div').css('margin-bottom','40px'));
3112
3113						jQuery(adPlacementSelector).eq(desk2_adPlace).before('<div class=\"desk-2 is-background-gray-light-3 in-article\"><div id=\"dfp__desk-2_1\" class=\"dfp__desk-2\">
3113<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__desk-2_1\");}<\/script><\/div><\/div>');
3114						if (dfpDebug) {console.log('Lisätään desk-2 paikkaan ' + desk2_adPlace + '...');}
3115
3116						var dfpReady = setInterval(function() {
3117							if(window.googletag && googletag.pubadsReady) {
3118
3119								googletag.pubads().addEventListener('slotRenderEnded', function(event) {
3120									if (event.slot.getSlotElementId().indexOf('dfp__desk') > -1) {
3121										if (event.isEmpty) {
3122											jQuery('#' + event.slot.getSlotElementId()).parent('div').removeClass('section').removeClass('in-article');
3123											console.log('Section "' + event.slot.getSlotElementId() + '" removed...');
3124										}
3125									}
3126								});
3127								clearInterval(dfpReady);
3128
3129							}
3130						}, 100)
3131
3132					}
3133
3134				}
3135
3136			}
3137
3138		})
3139
3140
3141		if (testSRA) {
3142
3143			const observers = new Map();
3144
3145			function observeDFPElements() {
3146
3147				//const targets = [...document.querySelectorAll('[id^="dfp__"]:not([data-observed])')].filter(el => el.id !== 'dfp__mob-2_222' && !el.id.includes('native'));
3148				//const targets = [...document.querySelectorAll('[id^="dfp__"]:not([data-observed])')].filter(el => el.id.match(/^(dfp__mob-2_222|dfp__in-text_222)$/));
3149				if (location.href.includes('?testadvantage1')) {
3150					var targets = [...document.querySelectorAll('advantage-wrapper [id^="dfp__"]:not([data-observed])')].filter(el => !el.id.match('_222'));
3151				} else {
3152					var targets = [...document.querySelectorAll('[id^="dfp__"]:not([data-observed])')].filter(el => !el.id.match('_222'));
3153				}
3154				if (dfpDebug) {console.log("Found ad units for observer:", targets.length)}
3155
3156				targets.forEach(target => {
3157
3158					target.setAttribute('data-observed', 'true');
3159					//const thresholdValue = parseFloat(target.getAttribute('data-threshold')) || 1.5;
3160					let thresholdValue = parseFloat(target.getAttribute('data-threshold')) || 1;
3161					if (target.getAttribute('id').includes('dfp__native')) {
3162						thresholdValue = 0.3;
3163					};
3164
3165					let observer = observers.get(thresholdValue);
3166					if (!observer) {
3167						if (dfpDebug) console.log(`Creating new observer for threshold: ${thresholdValue}`);
3168						//const rootMargin = `0px 0px ${thresholdValue * 100}% 0px`;
3169						const rootMargin = `${thresholdValue * 100}% 0px ${thresholdValue * 100}% 0px`;
3170
3171						observer = new IntersectionObserver(
3172							(entries, obs) => {
3173								entries.forEach(entry => {
3174									if (entry.isIntersecting) {
3175										if (dfpDebug) {
3176											console.log('entry.boundingClientRect.height: ' + entry.boundingClientRect.height);
3177											console.log('HAS: calling runHeaderbid: ' + entry.target.id);
3178										}
3179										loadAdSlot(entry.target.id);
3180										obs.unobserve(entry.target);
3181									}
3182								});
3183							},
3184							{
3185								root: null, // relative to the viewport
3186								rootMargin: rootMargin,
3187								threshold: 0.0 // Fire as soon as it enters the margin
3188							}
3189						);
3190						observers.set(thresholdValue, observer);
3191					}
3192
3193					observer.observe(target);
3194					if (dfpDebug) console.log('Observing element: ', target.id, 'with threshold:', thresholdValue);
3195				});
3196			}
3197
3198			let debounceTimeout;
3199			function debouncedObserve() {
3200				clearTimeout(debounceTimeout);
3201				debounceTimeout = setTimeout(observeDFPElements, 100);
3202			}
3203
3204
3205			var dfpReady = setInterval(function() {
3206				if(window.googletag && googletag.pubadsReady) {
3207					if (dfpDebug) {console.log('DFP ready, starting observation...')}
3208
3209					observeDFPElements();
3210
3211					const mutationObserver = new MutationObserver(debouncedObserve);
3212					mutationObserver.observe(document.body, {childList: true, subtree: true, attributes: true});
3213
3214					clearInterval(dfpReady);
3215
3216				}
3217			}, 50)
3218
3219		}
3220
3221	}
3222
3223	if(!hideAllAds) {
3224
3225		if (document.location.href.indexOf("/raskauslaskuri/") > -1) {
3226			//jQuery('div.pregnancy-counter').before('<div id=\'dfp__custom-ad1\'>
3226<script>window.dfp.displayAdslot(\'dfp__custom-ad1\')<\/script></div>');
3227			jQuery('div.calculator__header').after('<div class=\'mob-2 section is-background-gray-light-3\' style=\'margin-bottom: 30px\'><div id=\'dfp__mob-2_1\'>
3227<script>window.dfp.displayAdslot(\'dfp__mob-2_1\')<\/script></div></div>');
3228		}
3229		if (document.location.href.indexOf("/nimikone/") > -1) {
3230			//jQuery('div.name-machine').before('<div id=\'dfp__custom-ad1\'>
3230<script>window.dfp.displayAdslot(\'dfp__custom-ad1\')<\/script></div>');
3231			jQuery('div.calculator__header').after('<div class=\'mob-2 section is-background-gray-light-3\' style=\'margin-bottom: 30px\'><div id=\'dfp__mob-2_1\'>
3231<script>window.dfp.displayAdslot(\'dfp__mob-2_1\')<\/script></div></div>');
3232		}
3233
3234		if (adLocation == 'frontpage') {
3235
3236			//jQuery('.mob-1.section').remove();
3237			jQuery('.wp-block-otavamedia-google-ad-slot').append('<div class=\"mob-1\"><div id=\"dfp__mob-1_1\">
3237<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__mob-1_1\");}<\/script><\/div><\/div>');
3238			//jQuery('#section-0 article').eq(1).before('<div class=\"mob-11 section\" style=\"width: 100%; min-height: 316px\"><\/div>');
3239
3240			waitForElement("#dfp__mob-2_1").then(function(element) {
3241				if (dfpDebug) {console.log('Siirretään etusivun mob-2 -paikka...');}
3242				jQuery('#popular-1').before(jQuery('.mob-2'));
3243			});
3244			waitForElement("#dfp__mob-3_1").then(function(element) {
3245				if (dfpDebug) {console.log('Siirretään etusivun mob-3 -paikka...');}
3246				jQuery('#om_multisite-1').before(jQuery('.mob-3'));
3247			});
3248			//jQuery("#native-articles-1 #dfp__native-card-2_1").attr("id", "dfp__native-card-2_6");
3249			//jQuery('#dfp__native-card-2_6').html('
3249<script>window.dfp.displayAdslot(\'dfp__native-card-2_6\')<\/script>');
3250
3251			if (dfpDebug) {console.log('Add native-list-1 to Neuwo recommendations...')}
3252			googletag.cmd.push(function() {
3253				googletag.defineSlot('/135812570/kaksplus/native/native-list-1', ['fluid', [1, 1]], 'dfp__native-list-1_1').addService(googletag.pubads());
3254			});
3255			if (window.dfp.visibility == 'mobile') {jQuery('#popular > div > article').eq(2).css('border-bottom','none')}
3256			jQuery('#popular > div > article').eq(2).after('<div class="bg-pink bg-clip-content placeholder grid__item adWrapperNativeList"><div id=\"dfp__native-list-1_1\">
3256<script>googletag.cmd.push(function() {googletag.display("dfp__native-list-1_1")});<\/script><\/div></div>');
3257			jQuery('#popular > div > article').eq(3).remove();
3258
3259
3260		}
3261
3262		if (adLocation == 'content' && jQuery('body').hasClass('category')) {
3263			jQuery('.mob-1').removeClass('ad-mob_description');
3264			//Tsekkaa nämä
3265			//jQuery('#om_commercialpostlisting-1 article').eq(1).before('<div class=\"mob-1 section section-ad\" style=\"min-height: 316px\"><div id=\"dfp__mob-1_1\">
3265<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__mob-1_1\");}<\/script><\/div><\/div>');
3266			//jQuery('#om_commercialpostlisting-2').before('<div class=\"mob-2 section section-ad\" style=\"min-height: 316px\"><div id=\"dfp__mob-2_1\">
3266<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__mob-2_1\");}<\/script><\/div><\/div>');
3267			//jQuery('#main-sidebar').before('<div class=\"mob-3 section section-ad\" style=\"min-height: 316px\"><div id=\"dfp__mob-3_1\">
3267<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot(\"dfp__mob-3_1\");}<\/script><\/div><\/div>');
3268			jQuery('.widget_nativearticles #dfp__native-card-1_1').attr('id','dfp__native-card-1_9');
3269			jQuery('.widget_nativearticles #dfp__native-card-1_9').html('
3269<script>if(\'undefined\'!==typeof dfp){dfp.displayAdslot("dfp__native-card-1_9");}<\/script>');
3270		}
3271
3272		if (adLocation == 'content' || adLocation == 'blogs') {
3273
3274			var video_consent_data = '';
3275			var video_consent_flag = 0;
3276
3277			if (window.__tcfapi) {
3278				window.__tcfapi('getTCData', 2, function(result, success) {
3279					if (success && result && result.tcString) {
3280						window.video_consent_data = result.tcString;
3281						window.video_consent_flag = result.gdprApplies === true ? 1 : 0;
3282					}
3283				});
3284			}
3285
3286			waitForElement("#bbwpassback").then(function(element) {
3287				if (dfpDebug) {console.log('BBW passback...');}
3288				jQuery("#bbwpassback").append('
3288<script>function a(r){try{for(;r.parent&&r!==r.parent;)r=r.parent;return r}catch(r){return null}}var n=a(window);if(n&&n.document&&n.document.body){var s=document.createElement(\"script\");s.setAttribute(\"data-gdpr-applies\", \"' + window.video_consent_flag + '\");s.setAttribute(\"data-consent-string\", \"' + window.video_consent_data + '\");s.src=\"https://static.sunmedia.tv/integrations/787e915a-1797-4300-9e00-436d2d2a59e6/787e915a-1797-4300-9e00-436d2d2a59e6.js\",s.async=!0,n.document.body.appendChild(s)}<\/script></div>');
3289			});
3290
3291			if (document.location.href.indexOf("testnativeprogrammatic") >= -1) { //Otettu käyttöön 10.3.2022 19:13:52
3292				waitForElement("#mcn_iframe_81b4a600bc1ba427-1").then(function(element) {
3293					if (dfpDebug) {console.log('Poistettiin Readpeakin iframe...')}
3294					jQuery('#mcn_iframe_81b4a600bc1ba427-1').remove();
3295				});
3296				waitForElement("article.content__wrapper .comments").then(function(element) {
3297					jQuery("article.content__wrapper .comments").after("<div id=\'native-programmatic\' style=\'display: flex; flex-wrap: wrap; gap: 15px; width: 100%; margin: 25px auto; max-width: 700px\'><div id=\'dfp__native-card-programmatic_1\' style=\'flex: 1; height: auto; border: 1px solid #ddd; min-width: 300px;\'>
3297<script>window.dfp.displayAdslot(\'dfp__native-card-programmatic_1\')<\/script></div></div>");
3298					if (window.dfp.visibility == 'desktop') {jQuery("#native-programmatic").append("<div id=\'dfp__native-card-programmatic_2\' style=\'flex: 1; height: auto; border: 1px solid #ddd; min-width: 300px;\'>
3298<script>window.dfp.displayAdslot(\'dfp__native-card-programmatic_2\')<\/script></div>");}
3299					console.log('Native programmatic after Readpeak...');
3300				});
3301			}
3302
3303			if (location.href.indexOf('testjwplayer=1') > -1) {
3304
3305				(function() {
3306					var endState = 'suspended';
3307					var aspectRatio = '16:9';
3308					var playerWidth = '100%';
3309					var t = new Date().getTime();
3310					var l = document.createElement('script'); l.type = 'text/javascript'; l.async = true;
3311					l.src = '//cdn.jwplayer.com/libraries/0icNBJAA.js?t='+t;
3312					var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(l, s);
3313					setTimeout(function(){
3314						jQuery('section.content__body > p').eq(4).before('<div id=\"jwp-outstream-unit\"></div>
3314<script>jwplayer(\"jwp-outstream-unit\").setup({\"aspectratio\": \"' + aspectRatio + '\",\"width\": \"' + playerWidth + '\",\"advertising\": {\"client\": \"googima\",\"outstream\": true,\"tag\": \"https:\/\/pubads.g.doubleclick.net\/gampad\/ads?iu=\/135812570\/kaksplus\/content\/outstream&description_url=__page-url__&tfcd=0&npa=0&sz=360x640%7C640x360&ciu_szs=1x1&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=__timestamp__&gdpr=__gdpr__&gdpr_consent=__gdpr_consent__&cust_params=frosmo%3D' + googletag.pubads().getTargeting('frosmo').join(',') + '%26leiki_contextual%3D' + googletag.pubads().getTargeting('leiki_contextual').join(',') + '%26CxSegments%3D' + googletag.pubads().getTargeting('CxSegments').join(',') + '",\"endstate\": \"' + endState + '\"},\"displayHeading\": true,\"floating\": {}});<\/script>');
3315					}, 3000)
3316				})();
3317				if (dfpDebug) {console.log('JW player initialized...');}
3318
3319			} else if (jQuery('body').hasClass('single-post') || jQuery('body').hasClass('article-type_erikoistaitto')) {
3320
3321				(function() {
3322					var t = new Date().getTime(); t -= t % (1000*60*60*24*30);
3323					var l = document.createElement('script'); l.type = 'text/javascript'; l.async = true;
3324					l.src = '//otavamedia.bbvms.com/a/kaksplus.js?t='+t;
3325					var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(l, s);
3326				})();
3327				if (dfpDebug) {console.log('BBW initialized...');}
3328
3329				var bbFloatCloseAd = '<div class="bb-float-closeAd">Sulje mainos</div>'
3330
3331				waitForElement(".bb-float-close-button").then(function(element) {
3332					jQuery('.bb-float-close-button').html(bbFloatCloseAd);
3333				});
3334
3335			}
3336
3337		}
3338
3339	}
3340
3341	if (!fpaShown && rnd > 50) {
3342
3343		var adTestParam = 'ntp=1';
3344
3345		$("body a").each(function() {
3346			var hrefSrc = $(this).attr('href');
3347			if (hrefSrc != null) {
3348				if (hrefSrc.indexOf("jpg") < 0 && hrefSrc.indexOf("gif") < 0 && hrefSrc.indexOf("png") < 0 && hrefSrc.indexOf("javascript") < 0 && hrefSrc.indexOf("debug=1") < 0) {
3349					if (hrefSrc.indexOf("?") < 0) {
3350						var ahreffi = hrefSrc + '?' + adTestParam;
3351					} else {
3352						var ahreffi = hrefSrc + '&' + adTestParam;
3353					}
3354					$(this).attr('href',ahreffi);
3355				}
3356			}
3357		});
3358
3359	}
3360
3361	document.addEventListener('om-post-load', async function(event) {
3362		if(event.detail.info == 'infinite-scroll') {
3363			jQuery('#infinite-container #native-articles-1').after('<section id=\"native-articles-2\" class=\"widget widget_nativearticles order-lg-1\"><h2 class=\"title\">Yhteistyössä<\/h2><div class=\"grid grid-gutter\"><div class=\"bg-pink bg-clip-content placeholder mh-100-px mh-md-330-px grid__item_1 grid__item_md-1-4 \"><div id=\"dfp__native-card-3_11\">
3363<script>if(undefined!==typeof window.dfp){window.dfp.displayAdslotInfinite(\"dfp__native-card-3_11\");}<\/script><\/div><\/div><div class=\"bg-pink bg-clip-content placeholder mh-100-px mh-md-330-px grid__item_1 grid__item_md-1-4 \"><div id=\"dfp__native-card-3_12\">
3363<script>if(undefined!==typeof window.dfp){window.dfp.displayAdslotInfinite(\"dfp__native-card-3_12\");}<\/script><\/div><\/div><div class=\"bg-pink bg-clip-content placeholder mh-100-px mh-md-330-px grid__item_1 grid__item_md-1-4 \"><div id=\"dfp__native-card-3_13\" style=\"\">
3363<script>if(undefined!==typeof window.dfp){window.dfp.displayAdslotInfinite(\"dfp__native-card-3_13\");}<\/script><\/div><\/div><div class=\"bg-pink bg-clip-content placeholder mh-100-px mh-md-330-px grid__item_1 grid__item_md-1-4 \"><div id=\"dfp__native-card-3_14\">
3363<script>if(undefined!==typeof window.dfp){window.dfp.displayAdslotInfinite(\"dfp__native-card-3_14\");}<\/script><\/div><\/div><\/div><\/section>');
3364			//jQuery('#infinite-container #native-articles-1').css('visibility','hidden').css('height','0px');
3365			jQuery('#infinite-container #native-articles-1').remove();
3366		}
3367	});
3368
3369	if (dfpDebug) {
3370
3371		document.addEventListener('om-post-load', async function(event) {
3372			console.log('om-post-load: ' + event.detail.info);
3373			if(event.detail.info == 'infinite-scroll') {
3374				jQuery('#infinite-container #native-articles-1').after('<section id=\"native-articles-2\" class=\"widget widget_nativearticles order-lg-1\"><h2 class=\"title\">Yhteistyössä<\/h2><div class=\"grid grid-gutter\"><div class=\"bg-pink bg-clip-content placeholder mh-100-px mh-md-330-px grid__item_1 grid__item_md-1-4 \"><div id=\"dfp__native-card-3_11\">
3374<script>if(undefined!==typeof window.dfp){window.dfp.displayAdslotInfinite(\"dfp__native-card-3_11\");}<\/script><\/div><\/div><div class=\"bg-pink bg-clip-content placeholder mh-100-px mh-md-330-px grid__item_1 grid__item_md-1-4 \"><div id=\"dfp__native-card-3_12\">
3374<script>if(undefined!==typeof window.dfp){window.dfp.displayAdslotInfinite(\"dfp__native-card-3_12\");}<\/script><\/div><\/div><div class=\"bg-pink bg-clip-content placeholder mh-100-px mh-md-330-px grid__item_1 grid__item_md-1-4 \"><div id=\"dfp__native-card-3_13\" style=\"\">
3374<script>if(undefined!==typeof window.dfp){window.dfp.displayAdslotInfinite(\"dfp__native-card-3_13\");}<\/script><\/div><\/div><div class=\"bg-pink bg-clip-content placeholder mh-100-px mh-md-330-px grid__item_1 grid__item_md-1-4 \"><div id=\"dfp__native-card-3_14\">
3374<script>if(undefined!==typeof window.dfp){window.dfp.displayAdslotInfinite(\"dfp__native-card-3_14\");}<\/script><\/div><\/div><\/div><\/section>');
3375				jQuery('#infinite-container #native-articles-1').remove();
3376			}
3377		});
3378
3379		document.addEventListener('om-switch-url', function(event) {
3380			console.log('om-switch-url: ' + event.detail.info);
3381		});
3382
3383		setTimeout(function() {
3384
3385			function forEach(responses, cb) {
3386				Object.keys(responses).forEach(function(adUnitCode) {
3387					var response = responses[adUnitCode];
3388					response.bids.forEach(function(bid) {
3389						cb(adUnitCode, bid);
3390					});
3391				});
3392			}
3393			var winners = pbjs.getAllWinningBids();
3394			//var winners = owpbjs.getBidsReceived();
3395			var output = [];
3396			forEach(pbjs.getBidResponses(), function(code, bid) {
3397				output.push({
3398					//bid: bid,
3399					adunit: code,
3400					size: bid.size,
3401					adId: bid.adId,
3402					bidder: bid.bidder,
3403					time: bid.timeToRespond,
3404					cpm: bid.cpm,
3405					msg: bid.statusMessage,
3406					rendered: !!winners.find(function(winner) {
3407						return winner.adId==bid.adId;
3408					})
3409				});
3410			});
3411			forEach(pbjs.getNoBids && pbjs.getNoBids() || {}, function(code, bid) {
3412				output.push({
3413					msg: "no bid",
3414					adunit: code,
3415					adId: bid.bidId,
3416					bidder: bid.bidder
3417				});
3418			});
3419			if (output.length) {
3420				if (console.table) {
3421					console.table(output);
3422				} else {
3423					for (var j = 0; j < output.length; j++) {
3424						console.log(output[j]);
3425					}
3426				}
3427			} else {
3428				console.warn('NO prebid responses');
3429			}
3430
3431		}, 8000);
3432
3433	}
3434
3435	jQuery("div[id*='dfp__native-list-1']").parent('div').addClass("adWrapperNativeList");
3436
3437</script>
3437
3438
3439<script>
3440
3441	let showConsentManager = function(){__tcfapi("showConsentManager",true,function(data){console.log(data)});}
3442	document.querySelector('#footer a[href*="#"]').setAttribute('onclick','window.gravitoCMP.openPreferences()');
3443
3444	if (jQuery('body').hasClass('libero')) {
3445		jQuery('.sub-menu__extended #om_postlisting-3').attr('id', 'om_postlisting-33');
3446	}
3447
3448	if (jQuery('body').hasClass('single-post') && jQuery('body').hasClass('libero')) {
3449
3450		if (jQuery('.content__body #suosituimmat').length > 0) {jQuery('.content__body #suosituimmat').parent('div').remove()}
3451		var liberoH2Count = jQuery('.content__body > h2').length;
3452		var newAdPlace = parseInt(liberoH2Count/2);
3453		jQuery('.content__body > h2').eq(newAdPlace-1).before(jQuery(".content__body > p > a[href^='https://www.libero.fi/rekisteroidy-liberokerhon-jaseneksi/'").parent('p'));
3454
3455		if (jQuery("aside#main-sidebar > section a[href^='https://apps.apple.com/fi/app/liberokerho'").length > 0) {
3456			var liberoAppNewUrl = 'https://apps.apple.com/fi/app/liberokerho/id544034483?l=fi'
3457			if (navigator.userAgent.match(/Android/i)) {
3458				liberoAppNewUrl = 'https://play.google.com/store/apps/details?id=com.nixonnixon.libero&referrer=utm_source%3Dkaksplus%26utm_medium%3Dpartnership%26utm_campaign%3Drecruitment2022%26anid%3Dadmob';
3459			}
3460			jQuery("aside#main-sidebar > section a[href^='https://apps.apple.com/fi/app/liberokerho'").attr('href', liberoAppNewUrl);
3461		}
3462
3463	}
3464
3465</script>
3465
3466
3467<script>
3468	if (document.location.href.indexOf("anchorad=1") > -1) {
3469
3470		//loadAds();
3471		//console.log("load_test"); // This should be called when all <div data-ad-unit="??"> elements exists in DOM
3472
3473		var adTestParam = 'anchorad=1';
3474		$("body a").each(function() {
3475			var hrefSrc = $(this).attr('href');
3476			if (hrefSrc != null) {
3477				if (hrefSrc.indexOf("jpg") < 0 && hrefSrc.indexOf("gif") < 0 && hrefSrc.indexOf("png") < 0 && hrefSrc.indexOf("javascript") < 0 && hrefSrc.indexOf("debug=1") < 0) {
3478					if (hrefSrc.indexOf("?") < 0) {
3479						var ahreffi = hrefSrc + '?' + adTestParam;
3480					} else {
3481						var ahreffi = hrefSrc + '&' + adTestParam;
3482					}
3483					$(this).attr('href',ahreffi);
3484				}
3485			}
3486		});
3487
3488	}
3489
3490	if (document.location.href.indexOf("cmptesti=1") > -1) {
3491
3492		let purposesDescription = document.createElement('p');
3493		purposesDescription.className = 'gravitoCMP-section-description gravitoCMP-text gravitoCMP-text--regular';
3494		purposesDescription.innerText = 'Tällä välilehdellä voit antaa suostumuksesi evästeiden ja vastaavien teknologioiden käyttöön painamalla Hyväksy kaikki tai valitsemalla yksityiskohtaisesti, mihin tarkoituksiin annat suostumuksesi ja painamalla Hyväksy valitut. Jos valitset Estä kaikki tai et tee muokkauksia ja valitset sen jälkeen Hyväksy valitut, evästeitä tai muita vastaavia teknologioita ei hyödynnetä. Suostumuksesi vaaditaan myös siihen, että Toimittajat -välilehdellä luetellut yhteistyökumppanit saavat käsitellä tietojasi. Huomaathan, että sivuston ja palvelun toiminnan kannalta välttämättömät evästeet ovat aina käytössä.';
3495
3496		let vendorsDescription = document.createElement('p');
3497		vendorsDescription.className = 'gravitoCMP-section-description gravitoCMP-text gravitoCMP-text--regular';
3498		vendorsDescription.innerText = 'Alla on lueteltu toimittajat, joita kutsutaan myös IAB:n läpinäkyvyys- ja suostumuskehyksen (Transparency & Consent Framework, TCF) verkostoon kuuluviksi yhteistyökumppaneiksi. TCF on alan kehys, jota verkostoon kuuluvat tahot ovat sitoutuneet noudattamaan. TCF-kehys helpottaa yksityisyyden suojaa koskevien valintojen välittämistä koko digitaalisen mainonnan alalla ja parantaa avoimuutta sekä valvoo sitä, miten henkilötietojasi voidaan käyttää verkkomainontaan ja käyttäytymisen seurantaan.\n\nToimittajat voivat käyttää tietojasi palveluiden tarjoamiseen, jos olet hyväksynyt Tarkoitukset ja ominaisuudet -välilehdeltä tarkoituksen Tietojen tallennus laitteelle ja/tai laitteella olevien tietojen käyttö tai valitset Hyväksy kaikki. Jos et anna näitä suostumuksia, toimittajat eivät voi käyttää evästeitä tai vastaavia teknologioita, vaikka antaisit yksittäiselle toimittajalle erikseen suostumuksen tällä välilehdellä.\n\nOtavamedia ei aseta evästeitä tai vastaavia teknologioita oikeutetun edun perusteella. Jotkut alla luetellut toimittajat voivat kuitenkin perustaa henkilötietojesi käsittelyn oikeutettuihin etuihinsa. Voit vastustaa tätä käsittelyä painamalla Estä kaikki tai poistamalla kultakin toimittajalta valinta Oikeutettu etu.';
3499
3500		document.addEventListener('gravito:tcfv2:client', function (event) {
3501			console.log(event);
3502			if (event.detail.eventType == 'site:settings:visible' || event.detail.eventType == 'layer1:show-settings' || event.detail.eventType == 'layer1:show-vendors') {
3503				if (event.detail.eventType == 'site:settings:visible' || event.detail.eventType == 'layer1:show-settings') {
3504					document.querySelector('#gravitoCMP-tab-content h3').after(purposesDescription);
3505				} else if (event.detail.eventType == 'layer1:show-vendors') {
3506					setTimeout(function(){
3507						document.querySelector('#gravitoCMP-tab-content h3').after(vendorsDescription);
3508					},30);
3509				}
3510				setTimeout(function(){
3511					document.querySelector('#gravitoCMP-tab-button-purposes').addEventListener('click', ()=>{
3512						document.querySelector('#gravitoCMP-tab-content h3').after(purposesDescription);
3513					})
3514					document.querySelector('#gravitoCMP-tab-button-vendors').addEventListener('click', ()=>{
3515						document.querySelector('#gravitoCMP-tab-content h3').after(vendorsDescription);
3516					})
3517				},30);
3518			}
3519		}, true);
3520
3521	}
3522
3523	if (window.dfp.visibility == 'desktop') {
3524		jQuery("body").append('<iframe srcdoc=\"\
3524<script src=\'https:\/\/cdn.performax.cz\/acc\/loader.js?aab=loader\'\>\<\/script\>\" style=\"display: none\" data-web=\"kaksplus.fi\" data-hash=\"9c8bf86364df39eba1ce1dc17e286c37\"><\/iframe>');
3525	}
3526
3527	if (document.location.href.indexOf("datesti=1") >= -1) {
3528
3529		function getCommonElements(array1, array2) {
3530			return array1.filter(function(value) {
3531				return array2.includes(value);
3532			});
3533		}
3534
3535/*
3536		async function waitForVariable(variableName) {
3537			while (!window[variableName]) {
3538				await new Promise(resolve => setTimeout(resolve, 100));
3539			}
3540			return true;
3541		}
3542*/
3543
3544		if (decodeURIComponent(cmpGetCookie("cX_G"))) {
3545
3546			if (dfpDebug) {console.log('cX_G found...')}
3547			//let omSegmentArr = ['8n485ejzigi9','8nfch1zaxlw6','8mt6a1sm81he','8n485ejzigfp','8o1io4hcqvbf','8nqfato9a0cb','8nfhzm7smash','8nqfm06botn3','8n485ejzigfn','8mt74q0mx5k0','8nqfkl7gdkdg','8o1io4hcqvbe','8nqech16gy9p','8nfc1qnzidza','8o1l9ymij652','8nqech16gyaq','8nfb8yhmklm1','8mt6a1sm81hf','8o1gwyxui6y1','8nfhzm7smasg','8mt7r5sa3rwj','8nqi6elemih4','8n49exzcvb05','8nqexjcx2l1r','8nfainauefpl','8nfdx7xwjjlh','8nffig3logr2','8o1l9ymij65d','8n485ejzigic','8o1h8hno13z9'];
3548			let omSegmentArr = ['adbzpidaf887','8nff2vf2dqge','8n4bzck96z75','8nqi6elemiic','8nqi6elemih4','8n4bzck96z7n','8o1l9ymij652','8n4bzck96z7p','8mt8vs49hkio','8o1l9ymij65d','8nff2vf2dqgf','8nqi6elemih5','8n4cez5ikgch','8nfainauefpl','8nqfm06botjc','8nfc1qnzidza','8o1kscr38zqt','8o1iecry6lob','8nqfato9a0cb','8nqfato9a0cp','8nqfato9a0es','8nfb8yhmklm2','8nfb8yhmklm1','8n485ejzigi9','8o1o6nfnsllv','8nql33nfeh1b','8nffig3logr2','8n485ejzigic','8n485ejzigie','8o1o6nfnslm6','8o1l9ymij65f','8nfhzm7smasj','8o1hg0ie9yt5','8o1hg0ie9yqa','8nfhzm7smasg','8nfhzm7smasf','8nfhzm7smash','8n4fjavk8koj','8o1o6nfnslm3','8o1gwyxui6y1','8nfapah6uu5t','8mt68zrajk3e','8nqfato9a0eg','8nfc7bgdk6l6','8nqfkl7gdkdg','8nfch1zaxlw6','8mt6a1sm81he','8o1io4hcqvbe','8mt6a1sm81hf','8o1io4hcqvbf','8nqech16gy6r','8n4hcd8p9yix','8o1h8hno13z9','8nfc1qnzidze','8nqech16gyaq','8mt74q0mx5k0','8n4ba3nnrwg1','8nqech16gy6q','8nqech16gyak','8nqfm06botdy','8nfeu0oo3dj9','8o1i8us43afa','8n485ejzigfp','8nqf57f2z0a7','8mt64iggbp69','8n485ejzigia','8n485ejzigfo','8nqdm6kvc1s8','8n485ejzigix','8n49exzcvb05','8nqfm06botn3','8o1iecry6ldl','8o1hg0ie9yq9','8nqexjcx2l1r','8nfge70dtt80','8nfb8yhmklm3','8nfdx7xwjjlh','8mt7r5sa3rwj','8mt7r5sa3rwn','8n485ejzigfn','8nfb8yhmklkp','8nfewbexnvg7','8o1l3e22wbdc','8nqech16gy6p','8n485ejzigfm','8o1hg0ie9yq8','8nqech16gy6o','8o1k4bj3ns4a','8nqech16gy9r','8nfb8yhmklmv','8nfb8yhmkloj','8o1hg0ie9yq7','8nfb8yhmklp2','8nfb8yhmklp4','8nfb8yhmklp3','8nfb0g561min','8nqe3z9qdr85','8nfb8yhmkllx','8nfb8yhmklly','18i1a3mftlztn','8mtem2wqwxdl ','aavf5ch5kc6l ','a9yesumpafb6','aakkzy0gqoru','8nqech16gy9p'];
3549			let LS__cX_segmentInfoArr = [];
3550			let LS__cX_segmentInfo = window.localStorage.getItem('_cX_segmentInfo');
3551
3552			if (LS__cX_segmentInfo != null) {
3553				//LS__cX_segmentInfoArr = LS__cX_segmentInfo.substr(LS__cX_segmentInfo.lastIndexOf("_")+1).split('.');
3554				LS__cX_segmentInfoArr = LS__cX_segmentInfo.split(',');
3555				if (dfpDebug) {console.log('Creating LS__cX_segmentInfoArr...')}
3556			} else {
3557				if (dfpDebug) {console.log('LS__cX_segmentInfo does not exist...')}
3558			}
3559
3560			if (typeof(LS__cX_segmentInfoArr) != 'undefined') {
3561				if (dfpDebug) {console.log('LS__cX_segmentInfoArr length ' + LS__cX_segmentInfoArr.length)}
3562				let daSegmentArr = '[' + getCommonElements(omSegmentArr, LS__cX_segmentInfoArr) + ']';
3563				if (dfpDebug) {console.log('daSegmentArr: ' + daSegmentArr)}
3564				//console.timeEnd("daBake");
3565				waitForVariable("__da").then(() => {
3566					if (dfpDebug) {console.log("__da has been defined")}
3567					__da.bake({partner:'PO_221116', parcid:'' + decodeURIComponent(cmpGetCookie("cX_G")) + '', publisher:'Dap_221116', category: daSegmentArr});
3568				});
3569			} else {
3570				if (dfpDebug) {console.log('LS__cX_segmentInfoArr does not exist...')}
3571			}
3572
3573		} else {
3574			if (dfpDebug) {console.log('cX_G cookie not detected...')}
3575		}
3576
3577		if (decodeURIComponent(cmpGetCookie("testaddensity")) || location.href.indexOf('testaddensity=1') > -1) {
3578
3579
3580			var dfpReady = setInterval(function() {
3581				if(window.googletag && googletag.pubadsReady) {
3582
3583					const d = new Date();
3584					d.setTime(d.getTime() + (1*24*60*60*1000));
3585					let expires = "expires="+ d.toUTCString();
3586					document.cookie = "testaddensity=1;" + expires + ";path=/";
3587
3588					(function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async';
3589					e.src='http'+('https:'===location.protocol?'s://':'://')+'as.otavamedia.fi/testi/ad/addensity.js';
3590					t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script');
3591
3592					clearInterval(dfpReady);
3593					console.log('Addensity testing enabled...');
3594
3595				}
3596			}, 100)
3597
3598		}
3599
3600	}
3601
3602	var adslotsDefined = true;
3603
3604</script>
3604
3605
3606<!-- // kaksplus.fi -->
3607
3608<!-- Body end tag end, do not remove --></html>

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