Pane zubaři, dnes nic platit nebudu! Na co máte nárok v ordinaci a co musíte uhradit?

17. 5. 2023

Sdílet

Autor: Depositphotos
Ošetření akutních potíží nebo vstupní prohlídka u lékaře se smlouvami s pojišťovnou. To jsou dvě ze situací, kdy musí člověk dostat péči zubaře bez toho, aniž by vytáhl vlastní peněženku. Na co mají pacienti právo a co naopak patří k jejich povinnostem, vysvětluje Česká stomatologická komora.

Česká stomatologická komora (ČSK) vydává v pořadí již druhou brožuru, jež pacientovi pomůže zorientovat se ve svých právech i povinnostech ve stomatologické péči. Po publikaci věnované pohotovostem se druhý díl osvěty věnuje tomu, jak si najít zubního lékaře. Jde o útlou brožuru o 12 stranách dostupnou v tištěné i elektronické verzi. ČSK ji představila ve středu 17. května.

Co se dozvíte v článku
  1. Co dělat při akutním problému
  2. Rady při hledání zubaře
  3. Kdy může zubař odmítnout registraci
  4. Chci zubaře, ale nemám akutní problém
  5. Kdy a co zubaři neplaťte
  6. Jaké má kdo kompetence

Nabízíme v bodech její nejzajímavější a praktické pasáže.

Co dělat při akutním problému

Akutní problém se projevuje např. intenzivní bolestí nebo otokem. ČSK radí, pokud se objeví ve všední den, nečekat na večer a jednat. Buď tak, že si zajdete k vašemu zubaři, nebo (v případě, že jej nemáte) se můžete obrátit na kteréhokoliv jiného stomatologa, a to bez ohledu na to, zda má, či nemá smlouvy se zdravotními pojišťovnami. Pokud vás akutní problémy zastihnou večer či v noci, vyhledejte zubní pohotovost. 

Několik praktických rad:

  • Pokud nevíte, kdy a kde funguje pohotovost, podívejte na se web krajského úřadu, kde žijete, nebo na web stomatologické komory. Každý kraj si pohotovostní službu může organizovat po svém (někde mají pracoviště, kde se zubaři střídají, jinde se zubaři střídají ve službách ve vlastních ordinacích). 
  • Neodkladnou péči je povinen poskytnout každý zubní lékař. Nemusí pacienta ošetřit hned, ale nesmí jej ani poslat domů.
  • Zda pacient potřebuje neodkladnou péči, rozhoduje lékař, nikoliv pacient.
  • Mezi neodkladnou péči nepatří preventivní prohlídky, zaplombování zubu definitivní výplní, plnění zubních kanálků, protetická vyšetření nebo velké chirurgické zákroky.
  • Na pohotovosti poskytují pouze neodkladnou péči, jinou jejímu provozovateli zdravotní pojišťovny neuhradí.
  • Za neodkladnou péči nikdy lékaři neplatíte peníze, protože je vždy hrazená z veřejného zdravotního pojištění. A to i když nemá zubař smlouvu s vaší zdravotní pojišťovnou. Výjimkou je poplatek ve výši 90 Kč na pohotovosti.
  • Pokud nevíte, zda máte svého registrujícího zubaře či kdo to je, obraťte se na svoji zdravotní pojišťovnu, která vám to sdělí.
Kde fungují pohotovosti přes noc a kde už lékaře nonstop neseženete Přečtěte si také:

Kde fungují pohotovosti přes noc a kde už lékaře nonstop neseženete

Rady při hledání zubaře

Brožura připomíná, že české právní předpisy předpokládají dostupnost stomatologa do 35 minut jízdy autem. Podle ČSK má svého registrujícího stomatologa přes 80 % obyvatel. Nejčastějším důvodem ztráty vlastního zubaře je jeho odchod do penze. 

Několik praktických rad:

  • Pokud má zubař volnou kapacitu, musí vás zaregistrovat.
  • Právo změnit svého registrujícího zubaře máte jednou za tři měsíce.
  • Zubař vás může vyškrtnout z evidence, musí k tomu však mít pádné důvody ukotvené v zákoně. Mezi tyto důvody patří:
  1. pacient vysloví (písemný) nesouhlas s poskytování veškeré péče, 
  2. závažným způsobem omezuje práva jiných pacientů, 
  3. úmyslně a soustavně nedodržuje navržený individuální léčebný postup, 
  4. pacient přestane poskytovat lékaři součinnost nebo 
  5. pacienta lékař prokazatelně předá do péče jiného stomatologa.

Brožura také zmiňuje, že významnou část pacientů tvoří ti, kteří nejsou spokojeni s výší částek, jež u stomatologa platí ze svého. V takovém případě komora připomíná, že zákony pojištěnci garantují dostupnost hrazené péče (nikoliv té, kterou si platí za své) a zubař, jenž má smlouvu s pojišťovnou, má povinnosti pacientovi přednostně nabízet pojišťovnou hrazenou péči.

Pokud pacient vyžaduje nehrazenou péči, záleží na tom, zda se se zubařem dohodne na ceně, či nikoliv. V druhém případě ale nedohoda nesmí mít ze strany lékaři vliv na registraci pacienta. Tedy zubař kvůli sporu nesmí registraci pacientovi zrušit.

Kdy může zubař odmítnout registraci

Pokud zubní lékař čerpá peníze z veřejného zdravotního pojištění, pak může registraci odmítnout jen z důvodů daných zákonem. Mezi ně patří:

  • Pokud lékař nemá uzavřenou smlouvu s vaší zdravotní pojišťovnou. ČSK poznamenává, že lékaři, kteří nemají smlouvy, nejsou povinni registrovat pacienty vůbec. Na druhou stranu např. jedna ze soukromých zubních klinik nedávno novináře v tiskové zprávě informovala o tom, aby se lidé nebáli vysokých úhrad a přišli na prevenci i k nim. Ač smlouvy s pojišťovnami nemají, prevenci provádí a vyjde na stokoruny.
  • Není-li ordinace vybavena pro specifické potřeby pacienta„Např. pacienta s tělesnou hmotností přesahující 180 kg nebude schopna většina zubních lékařů přijmout do péče, protože běžná stomatologická křesla nemají tak vysokou nosnost. Takový pacient bude muset hledat poskytovatele se speciálním vybavením,“ uvádí příklad právě vydaná stručná příručka.
  • V této souvislosti rodiče na internetových fórech někdy poukazují na odmítání dětských pacientů. O tomto specifiku příručka ČSK nehovoří, ale vzhledem k tomu, že ve vzdělávacím systému neexistuje specializace dětského zubního lékařství, teoreticky by stomatologové, kteří ošetřují dospělé, měli do péče přijímat i děti. Nicméně v praxi to nemusí vždy fungovat a je lepší vyhledat zubaře, jenž s dětmi problém nemá a umí s nimi vycházet, stejně jako s jejich rodiči, jejichž pomoc je při ošetření dítěte mnohdy nezbytná.
    Jak již dříve připustil prezident ČSK Roman Šmucler, může se stát, že zubař některá ošetření či pacienty preferuje. Aby se zájmy pacientů a lékařů snáze potkaly, plánuje podle něj ČSK mobilní aplikaci připomínající tržiště. Na něm by bylo možné najít právě ty zubaře, kteří aktuálně přijímají nové pacienty. Nebo i informaci, na jakou pohotovost se aktuálně v kterém kraji vydat.
S čím jít na zubní pohotovost a kdy vás lékař neošetří, protože potíž není akutní Přečtěte si také:

S čím jít na zubní pohotovost a kdy vás lékař neošetří, protože potíž není akutní

  • Pokud by přijetím nového pacienta zubař překročil únosnou pracovní zátěž. Podle ČSK jde o nejčastější důvod odmítnutí. Otázkou je, co je míněno plnou kapacitou. Žádný konkrétní počet registrovaných pojištěnců není stanoven. ČSK ale připomíná, že podle zákona se plnou kapacitou rozumí stav, kdy by „přijetím nového pacienta došlo ke snížení kvality a bezpečnosti služeb“ poskytovaných dříve přijatým pacientům. Profesní komora také dodává, že jedna ordinace by bez problémů měla zvládnout 1200 až 1500 registrovaných. Všeobecná zdravotní pojišťovna na dotazy Vitalia.cz, jež se vztahovaly k druhé prohlídce, již dříve uvedla, že standardní zubní praxe má v registru 1500 pojištěnců.

Chci zubaře, ale nemám akutní problém

Brožura se věnuje také případům, kdy člověk nemá akutní zdravotní problém, zároveň ale ani zubaře, ačkoliv by o to stál. Právě takové situace v některých regionech nastávají. Kde nejvíce tato péče chybí, mapuje Všeobecná zdravotní pojišťovna.

V takovém případě ČSK radí hledání neuspěchat, ani nebýt zoufalý, pokud lékaře nenajdete hned. Ostatně ceny případné nehrazené stomatologické péče se mohou lišit a je třeba, abyste si našli takového zubaře, který vám i ceníkem bude vyhovovat.

Problémem při hledání může být ten, že neexistuje žádná veřejně dostupná a přehledná souhrnná databáze, kde by bylo uvedeno, zda dotyčný stomatolog ještě přijímá nové klienty, či nikoliv.

Jaké plomby, kdy a komu hradí zdravotní pojišťovny Přečtěte si také:

Jaké plomby, kdy a komu hradí zdravotní pojišťovny

Ordinace, které nabízejí péči, lze najít na webu ČSK nebo v Národním registru poskytovatelů zdravotní péče. S hledáním vám musí pomoci také zdravotní pojišťovna. „Pomoci vám můžeme na pobočce, kde vám vyhledají v seznamu smluvních partnerů VZP dostupné zubní lékaře a předají kontakt na ně. Lékař uvedený ve zmíněném seznamu by vás neměl odmítnout převzít do trvalé péče; v opačném případě byste si měl vyžádat písemné vyjádření se zdůvodněním odmítnutí. Pak může pracovník VZP tohoto lékaře případně kontaktovat a snažit se o nalezení optimálního řešení konkrétního problému,“ popisuje na webu Všeobecná zdravotní pojišťovna.

Několik praktický rad:

  • Zákonnou povinnost zajistit vám zubaře poskytujícího hrazenou péči mají zdravotní pojišťovny. Zubaře vám musí sehnat v dojezdové vzdálenosti do 35 minut od vašeho bydliště.
  • Naopak nemá smysl se při hledání obracet např. na krajský úřad, Ministerstvo zdravotnictví nebo ČSK. „Nemají žádné nástroje, jak konkrétnímu pacientovi zajistit poskytovatele ambulantních zdravotních služeb jakékoliv odbornosti,“ uvádí brožura.
  • Při hledání registrujícího lékaře nemusíte do ordinace vždy volat. Podívejte se na její web a respektujte způsob uvedený pro objednávání. Podle ČSK tím přispějete k „plynulosti práce v ordinaci a tím i k případnému zvýšení kapacity péče“.

ČSK připomíná, že ze strany zubařů je vítaným krokem, pokud v případě, že nemají volnou kapacitu, zapíší zájemce na čekací listinu. „Naopak nevhodné a v konečném důsledku protiprávní jsou hromadné registrační akce, kdy poskytovatel oznámí, že v určitý omezený čas bude na určitém místě provádět registrace nových pacientů,“ kritizuje komora případy velmi dlouhých front zájemců, které jsou známé ze záběrů a fotografií z některých měst.

Už jste si někdy stěžovali na práci svého zubaře?

Kdy a co zubaři neplaťte

Jak ČSK zmiňuje, pacient nikde neplatí ošetření akutního problému. V případě, že si najde nového registrujícího zubaře, který má smlouvu s jeho zdravotní pojišťovnou, podle ČSK nesmí pacient platit ani vstupní prohlídku (tzv. komplexní vyšetření při převzetí pojištěnce do péče), protože tato prohlídka je plně hrazená. „Odmítejte i tzv. konzultace před registrací, jsou-li placené,“ dodává brožura v kapitole nazvané Co dalšího je dobré vědět.

Samozřejmě uvedené rady se týkají ordinace se smlouvami s pojišťovnami. Ve chvíli, kdy zubař za péči nedostává úhrady z veřejných peněz, je logické, že vstupní prohlídka a další vyšetření půjdou na vrub klienta.

Jaké má kdo kompetence

Aby se pacient lépe vyznal ve svých právech a povinnostech, ČSK doplňuje příklady kompetencí náležejících (či naopak nenáležejících) jednotlivým aktérům v systému zdravotní péče.

Povinnost zajistit zubaře má jen zdravotní pojišťovna, kraj, komora či ministerstvo vám s tímto podle ČSK prakticky nepomůžou.

Zdravotní pojišťovny

  • Povinnost zajistit místní a časovou dostupnost hrazené stomatologické péče, a to včetně péče pravidelné,
  • uhradit neodkladnou péči pojištěnce u jakéhokoliv stomatologa vč. toho nesmluvního,
  • součinnost pojišťovny nemůžete požadovat, pokud svého registrujícího zubaře máte a „jen“ chcete změnu.

Kraje

  • Mimo jiné mohou vydávat a odebírat ordinacím oprávnění k poskytování zdravotní péče,
  • organizovat pohotovostní lékařskou službu vč. té zubařské,
  • přijímat stížnosti na poskytovatele zdravotních služeb.

Obce

  • Mohou mít informace o volných kapacitách ordinací na svém území,
  • mohou lékaře lákat k založení praxe různými pobídkami,
  • poskytování pobídek nesmí vést k upřednostňování registrace obyvatel dané obce. Zubař vás tedy nesmí odmítnou registrovat jen proto, že v obci nebydlíte.

Ministerstvo zdravotnictví

  • Nastavuje pravidla poskytování péče i jejího hrazení, sbírá data nebo na webu zveřejňuje poskytovatele zubní péče,
  • směrem k pacientovi v konkrétní situaci ale mnoho kompetencí nemá. Nesežene zubaře a ani neřeší stížnosti na konkrétního zubaře.

ČSK

  • Nenajde vám zubaře, ale dbá na dodržování pravidel a etiky výkonu povolání. Hlídá také, aby zubaři při poskytování péče postupovali odborně,
  • zubaře vzdělává a prošetřuje stížnosti od pacientů. V případě prokázání provinění ukládá lékařům sankce.

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 »