Stát ošidil (okradl) „loňské“ matky o cca 400 korun. Nejde jen o drobné

7. 8. 2023
Doba čtení: 9 minut

Sdílet

Ilustrační obrázek
Autor: Depositphotos.com, podle licence: Rights Managed
Ilustrační obrázek
Kdyby stát uměl logicky myslet a počítat, důchodci by měli o trošku více peněz. Jedna právní bitva už byla vyhrána, jenže nespravedlnost stále trvá.

Zpět do klouzavého Rakouska–Uherska

„Loňské“ matky stát v lednu 2023 okradl v průměru o cca 400 Kč. Úvodem si ale musíme připomenout, že „v červenci nebereme důchod na červenec“. Jsme totiž spolu se Slovenskem posledním státem bývalého Rakousko–Uherska, kde se důchody vyplácí na měsíc klouzavý (tekoucí).

Například někdo bere 6. 7. důchod na 6. 7. – 5. 8. a jiný důchodce zase bere důchod 24. 7. na období 24. 7. – 23. 8. A podobně.

Již v červenci 2025 to bude úplně jinak, jak se píše v článku Důchody se budou vyplácet v jiných termínech a za jiné období. Jak to bude vypadat? Stát totiž na mou radu hodlá klouzavý měsíc opustit a přejít na kalendářní. V celé Evropě poté bude měsíc kalendářní, na Maltě pak týden a jen na Slovensku měsíc klouzavý.

Přitom jsem ale přesvědčen, že až bude klouzavý měsíc opouštět i Slovensko, neudělá to tak hloupě jako naše česká legislativa. Na Slovensku totiž mají lednové doplatky již od roku 2004, tedy o 18 let déle než my.

Stát tvrdí, že v roce 2023 nemá na mimořádnou valorizaci potřebných 35 miliard a má jen 15 miliard. Jenže na Měšci se brzy dočtete, že zatímco na důchodcích v roce 2023 chce 20 miliard ušetřit, v letech 2024 a 2025 důchodcům jiné peníze s velkou pravděpodobností rozdá, a to nejen aniž by musel, ale dokonce aniž by o tom věděl.

Je 400 Kč hodně, nebo málo? Kde je pravda?

Nejenže vám prokážu, že to pravda je, ale snad přesvědčím i ty, co si mysleli, že v minulých článcích pravdu nemám. A snad přesvědčím i legislativu, exekutivu i justici.

„Nevěřící Tomášové“ tvrdili, že lednové doplatky k důchodům, které jsem od roku 2022 s pomocí poslanců zavedl, činí mezi důchodci rozdíly. Že když důchodci dostanou za rok stejný počet (12) valorizovaných důchodů, jsou si rovni a cokoli (mezi nimi navzájem různého) navíc naopak tuto rovnost porušuje.

Nyní si dáme trochu matematiky, ale nebojte se, budou to jen kupecké počty a to zvládne skoro každý.

Příklady

Matka dvou dětí dostala „od ledna“ 2023 přidáno na důchodu 1000 Kč, obdobně jako důchodce, když dosáhne 85 let. Stoletý pak získá 2000 Kč.

Pro jednoduchost počítejme, že měsíc má 30 dnů.

  • 1000 : 30 = 33 Kč/den
  • 2000 : 30 = 67 Kč/den

Ponechme dnes stranou skutečnost, že koeficient 30,4167 v § 16 odst. 1) zákona o důchodovém pojištění (ZDP) je spočítaný špatně, jak je psáno v článku Důchod na 29. únory od státu nikdy nedostanete.

Průměrná délka měsíce rozhodného období totiž není 365/12, jak tvrdí zákon, ale 365,25 / 12 = 30,4375.

Když jsme u těch narozenin, o nich se v ZDP píše v § 67a toto:

(1) Procentní výměra vypláceného důchodu se zvyšuje o
a) 1000 Kč měsíčně od splátky důchodu splatné v kalendářním měsíci, v němž poživatel důchodu dosáhl věku 85 let,
b) 2000 Kč měsíčně ode dne, v němž poživatel důchodu dosáhl věku 100 let.

Převedeme si to do praxe.

Dva důchodci se narodili 31. května a 1. června (tedy jeden tak a druhý onak) a oba mají výplatní termín 24. den v měsíci.

Příklad pro 100. narozeniny

Při 100. narozeninách dostane ten prvý s blahopřejným dopisem před svými narozeninami předplatek 67 × (1 + 23) = 1608 Kč. Ten druhý s blahopřejným dopisem před svými narozeninami předplatek 67 × 23 = 1541 Kč. Rozdíl je tak mezi nimi správně nepatrný, tedy 67 Kč.

Těchto 67 Kč náleží samozřejmě na ten 1 den, co jsou od sebe jejich narozeniny vzdáleny. Oněch (1 + 23) je 31. květen plus 1.–23. červen, tedy dny, co předchází červnovému výplatnímu termínu důchodce prvého, a u druhého je tomu obdobně o ten 1 den méně.

Příklad pro 85. narozeniny

Při 85. narozeninách žádné předplatky ani doplatky nejsou (a to je ta hrubá chyba). Prvý dostane přidáno 1000 již od 24. května, tedy i na týden, co mu ještě 85 let není, a druhý až od 24. června, aby nedostal přidáno na 23 dnů, kdy mu již 85 let bylo.

Prostě ač jsou od sebe jejich narozeniny jen jeden den, stát je zde od sebe de facto vzdálil o 1000 Kč. Tečka.

A pokračujeme dál. Všimněme si, že všichni století s termínem důchodu 24. dne v měsíci narození 25. 5. až 23. 6. dostanou kromě stejného počtu (7) zvýšených důchodů ještě různě velký předplatek a jedině tak si jsou rovni, neb jedině tak dostanou přidáno na všechny dny, kdy jim je již 100 let.

Důchodci jsou tedy při 85. narozeninách ochuzeni o mezi sebou navzájem různou částku, jejíž velikost je z libovůle státu odvislá od jejich výplatního termínu. Jde přitom o obdobnou částku, která jim při 100. narozeninách vyplacena je a kde tak k rozdílům, které odporují Ústavě, nedochází.

Nesprávný postup u velmi starých důchodců

Že 100 let se za rok dožije cca 150 občanů a 85 let cca 36 000, není a nemůže být důvod se k nim chovat jinak, tedy nesprávně a „nerovně“. Pokud stát bez problému dokáže spočítat za měsíc (leden) skoro 3 miliony doplatků, jistě bez problému zvládne pouhých 36 000 předplatků za celý rok. Ústavní „relativní“ rovnost velí odstranit neodůvodněné rozdíly a zde zjevně žádný důvod není. (Ačkoli vláda ve svém vyjádření k nálezu ÚS 47/18 tvrdila opak, jak obtížné až nemožné by to bylo.)

Není žádný důvod porušovat Ústavu u 85. narozenin § 67a (1) a), ale stejně tak u mimořádných valorizací § 67 (3) a ani u výchovného.

Kdo jsou „loňské matky“?

A k tomu se tedy nyní dostáváme. „Loňskými“ matkami totiž myslím ty, které byly v důchodu již v roce 2022, byť do něj šly až třeba na Silvestra, tedy 31. 12. 2022. (Samozřejmě „otec-vychovatel“ sem patří taky.)

A před těmi matkami již jen malá odbočka. Lednové doplatky nemají logiku, ale to jen proto, že od počátku státu tvrdím, že to mají být prosincové předplatky, stejně jako je tomu u 100. narozenin.

Zákon č. 582/1991 Sb., o organizaci a provádění sociálního zabezpečení

§ 116 Lhůty pro výplatu dávek
(1) Dávky důchodového pojištění se vyplácejí dopředu v pravidelných měsíčních lhůtách určených plátcem dávky, nestanoví-li se dále jinak.

Pokud někdo zemřel 23. ledna 2023 a „zítra“ měl brát důchod, měl mít možnost si onoho doplatku užít, neb to byly peníze určené právě na 1.–23. leden, co ještě žil.

V prosinci dnes berou důchodci důchod na navzájem různý počet lednových dnů. Proto by všichni snadno pochopili, že na tyto dny budou brát, ano, zde již prosinci, i navzájem různou částku – totiž již valorizovaného důchodu. Jedině tak totiž dostanou všichni valorizovaný důchod na všechny dny roku (!), obdobně jako století na všechny dny, kdy jim již 100 let je.

Pojďme k těm matkám.

Výpočet „NA“ versus „OD“

Pokud matka dvou dětí půjde do důchodu v průběhu roku 2023, bude jí 1000 Kč přidáno od toho dne, kdy do důchodu jde. Opět platí 1000 : 30 = 33 Kč/den.

Pokud půjde do důchodu 1. června a bude jí přidělen výplatní termín 24. den v měsíci, dostane před 1. řádnou splátkou důchodu 24. června poměrnou část důchodu na 23 dnů, tedy na 1. až 23. červen 2023. Její součástí bude i „předplatek výchovného“ ve výši 23 × 33 = 759 Kč.

Proč „červnová“ důchodkyně toto obdrží a ta, která byla v důchodu již na Silvestra 2022, v lednu toto nedostane? Obdobná „ozbrojená“ důchodkyně (z Ministersva obrany, Ministerstva vnitra a MPSV) přitom obdrží 1000 Kč na kalendářní leden, tedy všech jeho 31 dnů.

Důchodkyně ČSSZ s termínem 2. dne v měsíci obdržela letos na leden jen o oněch „33“ Kč méně a zde matka s termínem 24. dne o oněch celých 759 Kč.

Všímejme si, že všechny „červnové matky“, co šly do důchodu před svým červnovým výplatním termínem, kromě stejného počtu splátek (7) obdržely i předplatky v různé výši a jedině tak jsou si rovny.

„Loňské“ matky totiž výchovné obdrží ne od 1. ledna, ale opět až od lednové splátky důchodu (= výplatního termínu).

Taková některá matka 2 dětí tak neobdržela 33 Kč na 1. leden 2023, jiná zase 23 × 33 = 759 Kč na 1.–23. leden (= dny, co předcházejí jejímu výplatnímu termínu) a to je v průměru oněch cca 400 psaných v úvodu.

Zdánlivě přesněji je to (33 + 759) : 2 = 396 Kč, ale bude to více, neboť matek s termínem 2. a 4. je málo, protože tyto termíny se již dlouho nepřidělují.

Půl miliardy sem a tam

A počítejme dál.

Z 2,85 mil. důchodců je 1,68 mil. žen. Kdyby z nich bylo jen 1,25 mil. matek s průměrně 2 dětmi, stát je okradl o půl miliardy korun.

Konkrétně totiž bylo v lednu 2023 matkám (vychovatelům) žijícím v Čechách vyplaceno 1 397 500 000 a mělo to být téměř přesně o (děleno 30,4167 krát 12,5) 574 314 439 Kč více.

Kdyby šla „vychovatelka“ do důchodu od 1. ledna 2023, výchovné na 1. až 23. leden 2023 by dostala v částečné splátce důchodu na období od 1. ledna do prvého řádného výplatního termínu (24. 1. 2023).

Naproti tomu žena, která byla v důchodu již 31. 12. 2022, tuto část výchovného nikdy nedostane. Výchovné dostane až od svého výplatního termínu, tedy třeba až za více než tři týdny (a ne zpětně). Je tak trestána za co? A proč se výše trestu (penalizace) odvíjí od data, které jí svou libovůlí určil stát? To přeci nesmí být jen proti selskému rozumu – to musí být i proti právu (Ústavě)!

Vždyť přeci naprosto zjevně ony „loňské“ matky oněch 33 až 759 Kč (na rozdíl od těch Novoročních) nedostanou nikdy – a ne „někdy později“, jak stát tvrdí.

Dalším paradoxem je skutečnost, že výchovné je od 1. 1. 2023 součástí procentní části důchodu (§ 34a odst. 2).

V letech 2024 a dalších se tak z něj budou počítat lednové „doplatky“ (§ 67 odst. 2), co mají být předplatky = poměrná část z navýšení výchovného náležející na lednové dny, co předchází výplatnímu termínu. Tedy v letech 2024 a dalších se tyto doplatky z výchovného počítat budou a v roce 2023 počítány nebyly, což je jistě v rozporu asi nejen se zdravým selským rozumem…

Nejde o drobné

Král Richard III. prý před smrtí křičel v bitvě „království za koně“, jiný král Ludvík XIV. zase měl říct „stát jsem já“. Ne, já nejsem stát, ale tuhle bitvu se státem vyhraji. Tedy přesněji „já tuhle válku se státem vyhraji“.

Stát zatím ze své pozice (jeho legislativa, exekutiva, justice) vyhrál několik bitev a já jen jednu bitvičku (novelu řádných valorizací všem od 1. ledna). Závěrečná bitva této války se ale blíží.

V připravované novele, která převede klouzavý měsíc na kalendářní, mi stát dal zbraň, nad kterou není. Stát nejenže, jak píšu výše, hodlá dát důchodcům nějaké peníze navíc, aniž by o tom věděl. Stát mi současně v té novele dává sám důkaz, že pro rovnost nestačí dát stejné peníze ZA rok (období), jak klausulí „od splátky důchodu“ činí, ale je potřeba dát stejné peníze NA rok, což je zatím jen u valorizací v pravidelném (lednovém) termínu a obdobně u 100. narozenin. U valorizací mimořádných, 85. narozenin a výchovného je to ještě potřeba dobojovat.

V lednu 2022 činily doplatky 960 500 000 Kč, v lednu 2023 to bylo už 997 200 000 Kč, aby naopak v červnu a září 2022 to naopak více než 2 miliardy nebyly… Tedy vždy jde „o nějakou tu miliardu“. A pak jde o princip – necháme-li sebou orat – bude s námi oráno – nadávat v hospodě je málo.

Mým mottem je, že zákony práva jsou tvořeny lidmi, a tak by neměly být v rozporu se zákony přírodními. Těžko si představit demokratický stát, ve kterém bude uzákoněno, že placatá Země se točí okolo hranatého Slunce, resp. že v 10 + x = 11 není to x = 1. Nevím, jak která pravda a která láska kdy zvítězí, ale tahle pravda zvítězit musí, neb je znalecky, přírodními vědami prokazatelná.

Na závěr použiji slova písně od Karla Černocha:

Školení pro účetní - podzimní novinky

– Richard třetí prej křičel někde v bitvě „Království za koně“… měl recht.
– Co s královstvím, po kterým král musí chodit pěšky.
– Já teda nejsem král, ani Richard (jsem jen občan Karel III), ale, ale sakra jako občan tohoto státu mám přece právo…

– aby můj stát uměl počítat a logicky myslet.

Autor článku

Autor získal na MFF UK Praha titul promovaný matematik. Posléze působil převážně v oborech výpočetní techniky. Nyní je důchodcem na plný úvazek a stará se o invalidní manželku.

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).
'; document.getElementById('outstream-iframe').onload = function () { setupIframe(); } replayScreen = document.getElementById('iinfoOutstreamReplay'); iinfoOutstreamPosition = document.getElementById('iinfoOutstreamPosition'); outstreamContainer = document.getElementsByClassName('outstream-container')[0]; setupReplayScreen(); } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); outstreamDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; videoContent = outstreamDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; if ( location.href.indexOf('rejstriky.finance.cz') !== -1 || location.href.indexOf('finance-rejstrik') !== -1 || location.href.indexOf('firmy.euro.cz') !== -1 || location.href.indexOf('euro-rejstrik') !== -1 || location.href.indexOf('/rejstrik/') !== -1 || location.href.indexOf('/rejstrik-firem/') !== -1) { outstreamDirectPlayed = true; soundAllowed = true; iinfoVastUrlIndex = 0; } if (!outstreamDirectPlayed) { console.log('OUTSTREAM direct'); setUpIMA(true); } else { if (soundAllowed) { const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { console.log('OUTSTREAM sound forbidden'); renderBanner(); }); } } else { renderBanner(); } } } function getWrapper() { let articleWrapper = document.querySelector('.rs-outstream-placeholder'); // Outstream Placeholder from RedSys manipulation if (articleWrapper && articleWrapper.style.display !== 'block') { articleWrapper.innerHTML = ""; articleWrapper.style.display = 'block'; } // Don't render OutStream on homepages if (articleWrapper === null) { if (document.querySelector('body.p-index')) { return null; } } if (articleWrapper === null) { articleWrapper = document.getElementById('iinfo-outstream'); } if (articleWrapper === null) { articleWrapper = document.querySelector('.layout-main__content .detail__article p:nth-of-type(6)'); } if (articleWrapper === null) { // Euro, Autobible, Zdravi articleWrapper = document.querySelector('.o-article .o-article__text p:nth-of-type(6)'); } if (articleWrapper === null) { articleWrapper = document.getElementById('sidebar'); } if (!articleWrapper) { console.error("Outstream wrapper of article was not found."); } return articleWrapper; } function setupDimensions() { outstreamWidth = Math.min(iinfoOutstreamPosition.offsetWidth, 480); outstreamHeight = Math.min(iinfoOutstreamPosition.offsetHeight, 320); } /** * Sets up IMA ad display container, ads loader, and makes an ad request. */ function setUpIMA(direct) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (direct) { adsRequest.adTagUrl = directVast; console.log('Outstream DIRECT CAMPAING advert: ' + directVast); videoContent.muted = true; videoContent.volume = 0; outstreamDirectPlayed = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = outstreamWidth; // adsRequest.linearAdSlotHeight = outstreamHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function setupReplayScreen() { replayScreen.addEventListener('click', function () { iinfoOutstreamPosition.remove(); iinfoVastUrlIndex = 0; outstreamInit(); }); } /** * Sets the 'adContainer' div as the IMA ad display container. */ function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. outstreamDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( outstreamDocument.getElementById('adContainer'), videoContent); } function unmuteAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } } /** * Loads the video content and initializes IMA ad playback. */ function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(outstreamWidth, outstreamHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } /** * Handles the ad manager loading and sets ad event listeners. * @param { !google.ima.AdsManagerLoadedEvent } adsManagerLoadedEvent */ function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } /** * Handles actions taken in response to ad events. * @param { !google.ima.AdEvent } adEvent */ function onAdEvent(adEvent) { // Retrieve the ad from the event. Some events (for example, // ALL_ADS_COMPLETED) don't have ad object associated. const ad = adEvent.getAd(); console.log('Outstream event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: // This is the first event sent for an ad - it is possible to // determine whether the ad is a video ad or an overlay. if (!ad.isLinear()) { // Position AdDisplayContainer correctly for overlay. // Use ad.width and ad.height. videoContent.play(); } outstreamDocument.getElementById('adContainer').style.width = '100%'; outstreamDocument.getElementById('adContainer').style.maxWidth = '640px'; outstreamDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); // This event indicates the ad has started - the video player // can adjust the UI, for example display a pause button and // remaining time. if (ad.isLinear()) { // For a linear ad, a timer can be started to poll for // the remaining time. intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstreamLastError === 303) { if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } } break; case google.ima.AdEvent.Type.COMPLETE: // This event indicates the ad has finished - the video player // can perform appropriate UI actions, such as removing the timer for // remaining time detection. if (ad.isLinear()) { clearInterval(intervalTimer); } if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } break; } } /** * Handles ad errors. * @param { !google.ima.AdErrorEvent } adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstreamLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { renderBanner(); } } function renderBanner() { if (isBanner) { console.log('Outstream: Render Banner'); iinfoOutstreamPosition.innerHTML = ""; iinfoOutstreamPosition.style.height = "330px"; iinfoOutstreamPosition.appendChild(bannerDiv); } else { console.log('Outstream: Banner is not set'); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoOutstreamPosition.remove(); outstreamInit(); } else { return false; } adVolume = 1; return true; } /** * Pauses video content and sets up ad UI. */ function onContentPauseRequested() { videoContent.pause(); // This function is where you should setup UI for showing ads (for example, // display ad timer countdown, disable seeking and more.) // setupUIForAds(); } /** * Resumes video content and removes ad UI. */ function onContentResumeRequested() { videoContent.play(); // This function is where you should ensure that your UI is ready // to play content. It is the responsibility of the Publisher to // implement this function when necessary. // setupUIForContent(); } function onActiveView() { if (outstreamContainer) { const containerOffset = outstreamContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstreamPaused) { adsManager.resume(); outstreamPaused = false; } return true; } else { if (!outstreamPaused) { adsManager.pause(); outstreamPaused = true; } } } return false; } let outstreamInitInterval; if (typeof cpexPackage !== "undefined") { outstreamInitInterval = setInterval(tryToInitializeOutstream, 100); } else { const wrapper = getWrapper(); if (wrapper) { let outstreamInitialized = false; window.addEventListener('scroll', () => { if (!outstreamInitialized) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { outstreamInit(); outstreamInitialized = true; } } }); } } function tryToInitializeOutstream() { const wrapper = getWrapper(); if (wrapper) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstreamInitInterval); outstreamInit(); } } } else { clearInterval(outstreamInitInterval); } } }
OSZAR »