Některé nemocniční lékárny vybírají nový poplatek. Kde lidé zaplatí 50, 90, nebo sto korun?

17. 3. 2024

Sdílet

Autor: Vitalia.cz/Hana Válková
Zákazníci, kteří si zajdou pro volně prodejné léky či doplňky stravy do pohotovostní lékárny, musí v některých zaplatit navíc až stokorunový poplatek. Už jej vybírají minimálně čtyři nemocniční lékárny, a to v noci, nad ránem, o víkendu či svátcích.

Nový poplatek se týká menší části lékáren, které fungují nonstop. V Česku jich je celkem 16. Z ankety Vitalia.cz vyplynulo, že poplatek vybírají zatím čtyři z nich.

Co se dozvíte v článku
  1. Kdy zaplatíte peníze navíc
  2. Nemocnice: Stokoruna je v pořádku
  3. Poplatky z pohledu zákona
  4. O zákonnosti platby by rozhodoval soud
  5. Proč stokorunu v Motole zavedli
  6. Stokorunu za pár týdnů zaplatily tisíce lidí
  7. Vybírání příplatků zatím není běžné
  8. Přehled nonstop lékáren

Jedna z nemocničních lékáren ve Fakultní nemocnici (FN) v Motole si účtuje stokorunu od 1. února 2024, Fakultní Thomayerova nemocnice příplatek ve stejné výši zavedla loni v květnu. Padesát korun se platí v lékárně s nonstop provozem v Nemocnici Na Františku. Všechny tři nemocnice jsou pražské. Mimo Prahu má pohotovostní poplatek ve výši 90 korun od 1. prosince 2023 zavedena také lékárna v Nemocnici České Budějovice.

Pohotovostní příplatek se vztahuje k nočním či brzkým ranním hodinám, víkendům a svátkům. Zaplatí jej zákazníci, kteří si přijdou pro volně prodejná léčiva, doplňky stravy či jiný sortiment, jenž není na předpis či poukaz a nehradí jej zcela nebo zčásti zdravotní pojišťovny. 

Kdy zaplatíte peníze navíc

Časový interval, po který nemocniční lékárny poplatky vybírají, se mírně liší. FN v Motole uvádí, že se platby vztahují na dobu pohotovostní služby, která je denně od 19 do 7 hodin. 

Za jaké zboží se platí pohotovostní příplatek

  • Za výdej volně prodejných léčivých přípravků, 
  • volně prodejných zdravotnických prostředků a 
  • prodej doplňkového sortimentu nemocniční lékárny.

Zdroj: FN v Motole

Nemocnice na Františku dle webu volný prodej zpoplatňuje o víkendech a svátcích celodenně a ve všední dny pak vždy od 17 do 8 hodin. 

Ve Fakultní Thomayerově nemocnici zákazníci zaplatí pohotovostní příplatek ve všední den od 18:30 hod. do 7:15 (v sobotu až do 8:00), v neděli a ve svátky.

Lékárna Nemocnice České Budějovice vybírá peníze navíc ve všední den od 18:00 do 7:00 (v sobotu do 9:00) a pak také v neděli a ve svátky.

Různé druhy poplatků ve zdravotnictví na Vitalia.cz pravidelně mapujeme. Snah vytáhnout peníze přímo z pacienta v ordinacích přibývá. V lékárnách zatím poplatky a příplatky nad rámec ceny zboží běžné nejsou. Ty pohotovostní jsou tedy novinkou.

Přibývá ordinací, kde musíte platit. Někde se bez peněz už ani neobjednáte Přečtěte si také:

Přibývá ordinací, kde musíte platit. Někde se bez peněz už ani neobjednáte

Nemocnice: Stokoruna je v pořádku

Podle FN v Motole je vybírání stokoruny v pořádku. Zavedení příplatku jsme dlouho zvažovali a dospěli k názoru, že v daném režimu je v souladu s legislativou. Musíme upřesnit, že se nejedná o poplatek, ale příplatek, uvádí Petr Horák, primář tamějšího Oddělení nemocniční lékárny.

Zdůrazňovaný rozdíl mezi příplatkem a poplatkem nejspíš nemocnice chápe tak, že v tomto konkrétním případě platí stokorunu zákazník ještě k ceně léků. U poplatku (ve FN Motol např. 90 Kč na pohotovosti či ještě předloni vybíraných 700 Kč za otce u porodu) se platí částka jako taková a není podmíněna žádnou další platbou.

Problém v pohotovostních příplatcích nevidí ani Česká lékárenská komora. „‚Pohotovostní příplatek‘ za ‚volný prodej bez receptu‘ lze vnímat jako navýšení ceny zboží při jeho prodeji v nočních hodinách. Pokud přitom nebudou porušovány podmínky cenové regulace, nelze proti tomu nic namítat,“ tlumočí stanovisko komory její mluvčí Veronika OrendášováPřipomíná, že cenové regulaci podléhají všechny léky hrazené plně či zčásti z veřejného zdravotního pojištění.

Jste ochotni připlatit si v lékárně stokorunu, když jdete v noci pro volně prodejné léky?

Poplatky z pohledu zákona

Ve zdravotnictví obecně platí, že nelze vybírat peníze za něco, co už je placené zdravotní pojišťovnou. Nemocniční lékárny zpoplatňují volný prodej. V něm jsou k mání jak léčiva v různých formách, tak doplňky stravy. A pro tento sortiment platí, že nejsou (ani zčásti) hrazené z veřejného zdravotního pojištění. Jejich plnou výši si platí zákazník či pacient. Jejich cenu tedy nijak neurčuje ani neovlivňuje stát a nejdou na ni veřejné peníze. Je věcí výrobce, distributora a lékárníka, kolik si za volně prodejný lék či doplněk stravy řeknou. Volně prodejné léky a doplňky stravy proto také mohou zdražovat, aniž by do toho stát nějak mohl mluvit a mluvil.

Z tohoto úhlu pohledu je přirážka nejspíše v pořádku, neboť nemocnice prostřednictvích svých lékáren nevybírají za něco, za co dostanou zaplaceno zároveň od zdravotní pojišťovny.

Kdy léky platí zdravotní pojišťovny

  • Všechna léčiva podávaná v lůžkové péči
  • Léčiva na recept bez doplatku
  • Léčiva na recept s doplatkem (jak vzniká a proč se v jednotlivých lékárnách liší, si můžete přečíst zde)

Obecně platí také pravidlo, že o jakémkoliv poplatku musí být pacient informovaný předem a musí s ním dobrovolně souhlasit. Říci si o peníze jen tak mimochodem při odchodu z čekárny zdravotní sestra nesmí. Respektive může, ale pacient jí nemusí vyhovět a peníze nemusí platit, aniž by mu cokoliv hrozilo, protože nebyl informovaný předem o tom, že se za něco platí, v jaké výši a předem s tím nesouhlasil.

V nemocnicích o padesátikoruně, devadesáti korunách či stokoruně informují cedule, informace jsou k dohledání i na webech. Lze to tedy brát tak, že zákazník je má k dispozici před tím, než přistoupí k výdejnímu okénku. A ví, za co platí. Podmínka informovat o platbě předem je, zdá se, tedy také splněna.

Zda je platba dobrovolná, je otázkou, protože bez ní se zákazník k volně prodejnému léku nedostane, ale jen v době lékárenské pohotovosti a za stavu, kdy nejspíš netrpí akutními potížemi, jejichž řešení nesnese odkladu.

Co se týká Prahy, v ní mají lidé výhodu, protože pokud jsou ochotni cestovat, najdou pohotovostní lékárnu, kde zatím žádné poplatky za volný prodej nevybírají. Nejblíže FN Motol je třeba pohotovostní lékárna na Vítězném náměstí v Praze 6. To, že s v ní neplatí peníze nad rámce ceny zboží, Vitalia.cz potvrdil mluvčí sítě Dr. Max Michal Petrov.

V jedné z lékáren v areálu FN v Motole od února 2024 vybírají k nákupu volně prodejných léků a doplňků stravy stokorunový poplatek. Ten zákazník zaplatí jen v době, kdy má lékárna noční pohotovost.

V jedné z lékáren v areálu FN v Motole od února 2024 vybírají k nákupu volně prodejných léků a doplňků stravy stokorunový poplatek. Ten zákazník zaplatí jen v době, kdy má lékárna noční pohotovost, a pokud nemá v ruce recept.

Autor: Vitalia.cz/Hana Válková

Dalším pravidlem, který nastoluje zákon o zdravotních službách, je, že poplatek nesmí bránit v přístupu ke (hrazené) zdravotní péči. Volně prodejné léky si většinou pacient kupuje ve stavu, jenž není akutní. Pokud je někomu zle, před návštěvou lékárny zpravidla vyhledá pohotovostní lékařskou službu. Drží ji Motol, Thomayerova FN, Nemocnice Na Františku (urgentním příjmem) i ta v Českých Budějovicích. Dostane-li pacient recept od lékaře a následně s ním jde k okénku lékárny, padesátikorunu, devadesát korun či stokorunu neplatí. 

Jak Vitalii sdělila FN Motol, a to ani když si k léku na recept (a ten nemusí být přímo z FN Motol) přikoupí i nějaký volně prodejný přípravek. V případě popsaném otázkou (např. pacient má recept na antibiotika a dokoupí si léčivo na snížení horečky) se příplatek nehradí, potvrzuje Petr Horák.

O zákonnosti platby by rozhodoval soud

Je potřeba ovšem dodat, že vykladatelem zákona nejsou ani nemocnice, ani redaktorka Vitalia.cz, ba ani lékárenská komora, jež si platí vlastní právníky, aby členům poskytla podporu. Je to vždy soud. A teoreticky i v případě pohotovostních lékárenských příplatků by na něj mohlo dojít, kdyby se na něj obrátil některý z nespokojených zákazníků. Zda se tak stalo, nevíme.

Podmínkou samozřejmě je, aby žalobce měl v ruce účtenku, na které je částka uvedena a je tam také to, že jde o pohotovostí příplatek. S tímto dokladem se může pacient obrátit nejen na soud, ale také na svoji zdravotní pojišťovnu, která může chování nemocnice posoudit, byť v případě volně prodejných léků do vztahu mezi lékárníkem a pacientem nevstupuje.

Mimochodem nevydání účtenky či neuvedení toho, za co byla platba poskytnuta, je rovněž porušením legislativy. A pacient na to může obratem lékárníka upozornit. Teoreticky nejspíš i žádat poplatek zpět. 

Nespokojený zákazník si může stěžovat také u pacientského ombudsmana, kterého si zřizuje jak FN v Motole, tak FN Thomayerova, nebo na Odboru zdravotnictví pražského magistrátu, jenž obecně vydává svolení k provozování zdravotních služeb na území hlavního města. V případě Nemocnice České Budějovice lze řešit podání stížnosti e-mailem, poštou nebo osobně na podatelně zdravotnického zařízení. Příslušný je také Krajský úřad Jihočeského kraje.

Proč stokorunu v Motole zavedli

Proč přípatek zavedli, jsme se zeptali v Motole, který je největší nemocnicí v ČR a poplatek má čerstvě. Podle Petra Horáka důvodem bylo neúměrné využívání nočního provozu pro nákup zcela neakutního sortimentu léčiv, doplňků stravy a podobně

V důsledku to vedlo k tomu, že pacienti s akutními obtížemi na výdej svých léků neúměrně dlouho čekali. Vzhledem k charakteru naší nemocnice se často jednalo o rodiče s malými dětmi, hůře mobilní pacienty a tak dále. Právě stesky akutních pacientů a rodičů malých pacientů ošetřených v naší nemocnici nás po dlouhém uvažování nakonec vedly k tomu, abychom pohotovostní příplatek zavedli, vysvětluje Petr Horák, primář Oddělení nemocniční lékárny ve FN v Motole.

Jak to v noci před lékárnou vypadalo, dle něj ukazuje na na internetu veřejně dostupná fotografie pořízená nejspíš některým z pacientů. Je na ní delší fronta lidí postávající za tmy před okénkem.

Stokorunu za pár týdnů zaplatily tisíce lidí

Otázkou je, zda příplatek podobné situace změnil a zákazníky, kteří nákup léků mohou odložit na ráno, odradil. Z odpovědi Petra Horáka nepřímo vyplývá, že tomu tak nejspíš není. 

Primář popisuje, že před zavedením příplatku si za jednu noc přicházely k okénku pro volně prodejný sortiment vyšší desítky zájemců. Po zavedení příplatku za měsíc a půl nemocnice eviduje už tisíce lidí, kteří jej zaplatili. Příplatek jsme začali vybírat od 1. února. Do 14. března jej uhradilo celkem 7372 klientů, podotýká Petr Horák. V průměru tedy jde o 171 zákazníků za pohotovost, kteří se v motolské lékárně stavují pro volně prodejný sortiment.

Takto získané desetitisíce korun jdou do rozpočtu FN jako standardní příjem a nemocnice jej používá k zajištění provozu.

V ČR funguje 16 nonstop lékáren, sedm krajů nemá žádnou Přečtěte si také:

V ČR funguje 16 nonstop lékáren, sedm krajů nemá žádnou

Vybírání příplatků zatím není běžné

Jen na území metropole funguje osm nonstop lékáren, zatímco v sedmi krajích lékárnu s nepřetržitým provozem nemají ani jednu, navzdory tomu, že i v těchto krajích ošetřují pacienty na lékařské pohotovosti. 

Tam, kde pohotovostní lékárny mají, ale vybírání pohotovostních příplatků zatím není běžné. Jak jsme ověřili, nevybírají je například nonstop lékárny ve FN Olomouc, FN Ostrava, FN Hradec Králové, v Městské nemocnici Ostrava, v lékárnách Dr. Max v Praze 6 nebo v Brně na Baštách či v lékárně Devětsil v Plzni. 

Přehled nonstop lékáren

Praha

  • Nemocnice Na Františku – adresa: Praha 1, Na Františku 847/8, kontakt: 222 801 397 
  • Fakultní Thomayerovy nemocnice – adresa: Praha 4, Vídeňská 800, kontakt: 261 081 111, 261 082 205 
  • FN Motol – adresa: Praha 5, V Úvalu 84, kontakt: 224 435 736 
  • U svaté Ludmily – adresa: Praha 2, Belgická 37, kontakt: 222 513 396, 222 519 731 
  • EUC Lékárna – adresa: Praha 4, Šustova 1930/2, kontakt: 271 913 307 
  • Dr.Max lékárna – adresa: Praha 6, Vítězné náměstí 13, kontakt: 224 325 520, 225 574 363
  • Benu Lékárna – adresa: Praha 7, Fr. Křížka 22, kontakt: 731 638 010 
  • EUC Lékárna – adresa: Praha 10, Plaňanská 573/1, kontakt: 281 019 258

Plzeňský kraj

  • Lipová lékárna – adresa: Plzeň, Alej Svobody 882/60, kontakt: 377 533 259
  • Devětsil –adresa: Plzeň, Francouzská 2079/2, kontakt: 377 240 788, 378 014 411

Moravskoslezský kraj

  • FN Ostrava – adresa: Ostrava-Poruba, 17. listopadu 1790, kontakt: 597 374 165, 597 374 170
  • Městská nemocnice Ostrava – adresa: Ostrava, Nemocniční 20, kontakt: 596 192 332

Jihočeský kraj

  • Nemocnice České Budějovice – adresa: B. Němcové 585/54, kontakt: 387 873 120, 387 873 126

Jihomoravský kraj

  • Dr.Max lékárna – adresa: Brno, Bašty 413/2, kontakt: 542 213 531, 225 574 222

Královéhradecký kraj

  • FN Hradec Králové – adresa: Sokolská 581, kontakt: 495 832 643, 495 834 308

Olomoucký kraj

  • FN Olomouc – adresa: I. P. Pavlova 6, kontakt: 585 852 540, 585 854 395

Poznámka: Pokud v přehledu některý kraj chybí, znamená to, že na celém jeho území není ani jedna lékárna s nonstop provozem.

Zdroj: SÚKL / Databáze lékáren, Česká lékárnická komora

Autor článku

Redaktorka Vitalia.cz. Vystudovala žurnalistiku a češtinu na Univerzitě Palackého v Olomouci, pracovala v Deníku, na webu TV Nova a iDNES.cz. Píše o zdravotnictví. Je držitelkou novinářských cen Psychiatrické společností ČLS JEP za rok 2021 a 2022. 

'; 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 »