Co dělat, když chybí sirupy a čípky na horečku? Nenahrazujte je acylpyrinem

16. 12. 2022

Sdílet

Autor: Depositphotos
Lékárny se aktuálně potýkají s nedostatkem sirupů proti bolesti a horečce určených dětem, a to i těm nejmenším. Podle klinického farmakologa Jana Strojila nelze u malých dětí účinné látky ibuprofen a paracetamol ničím nahradit. U větších to možné je. Pozor ale na podávání acylpyrinu.

Nedostatek vyvolaly výpadky v dodávkách Nurofenu pro děti, které se týkají všech jeho forem (tablety, čípky, sirupy) jsou doprovázeny také výpadkem sirupu Paralen SUS. Podle databáze Státního ústavu pro kontrolu léčiv (SÚKL) se pravidelné dodávky obnoví až po Novém roce, u některých Nurofenů výrobce ohlásil výpadek až do května 2023.

Co se dozvíte v článku
  1. Pro malé děti záměna neexistuje
  2. Drcení tablet pro děti je možné
  3. Léky pro dospělé dětem nedávejte
  4. Acylpyrin určitě dětem nepodávejte
  5. Čípky si nechte vyrobit u lékárníka
  6. Co radí v současné situaci lékárníci
  7. Dovoz léků z Polska je v pořádku
  8. Chybí i antibiotika
  9. Proč léky chybí

Pro malé děti záměna neexistuje

Jak Nurofen, tak Paralen se používají ke snížení horečky a utlumení bolesti. První obsahuje účinnou látku ibuprofen, druhá paracetamol. Podle klinického farmakologa Jana Strojila, který pracuje ve Fakultní nemocnici Olomouc, jsou většinou obě tyto účinné látky u dětí zaměnitelné. S tím rozdílem, že ibuprofen má protizánětlivé účinky, což paracetamol nemá. Ovšem i on sníží horečku a zastaví bolest.

Jakmile ale na trhu obě tyto účinné látky chybí, a to ve formách sirupů nebo čípků, nastává problém. „Pokud dojde jak paracetamol, tak ibuprofen, pak je to špatné. Ony jsou vzájemně většinou zaměnitelné, ale pokud chybí, tak žádná jiná účinná látka, pokud se nemýlím, nemá schválené lékové formy pro nejmenší děti,“ podotýká Jan Strojil.

Výpadky v distribuci přitom přišly v době, kdy Státní zdravotní ústav oznámil, že Česko je na hranici epidemie akutních respiračních chorob, kam patří třeba chřipka nebo nákaza tzv. RS virem. A právě tyto nákazy se velmi dobře šíří v dětských kolektivech a pro malé děti mohou být rizikové z hlediska komplikací. Navíc je provází vysoké horečky, takže v lékárnách se zvýšila poptávka po lécích, které ji tlumí.

O tom, že situace je vážná, svědčí i to, že SÚKL dojednal dodávání mimořádné dodávky cca 350 tisíc balení Nurofenu pro děti. Tisíce přijdou ještě před Vánoci.

Do ČR míří mimořádná dodávka 350 tisíc balení dětských sirupů Nurofen Přečtěte si také:

Do ČR míří mimořádná dodávka 350 tisíc balení dětských sirupů Nurofen

Drcení tablet pro děti je možné

Není proto divu, že řada rodičů začala propadat panice, že léky v potřebné formě neseženou. Internetová fóra se proto začala plnit různými radami, jak situaci řešit. Jednou z nich je, aby rodiče dětem rozdrtili tabletu léku pro děti. Tu pak smíchali na lžičce s cukrem a čajem. „Tento způsob je možný, tablety jsou určitě náhradou za sirupy a účinnost léku rozdrcení nijak nezmění. Nevýhodou ale je, že rozdrcená tableta má ostré okraje, takže o to více je pro dítě její polykání nekomfortní,“ popisuje Jan Strojil.

Větším dětem proto nedoporučuje tablety drtit, ale zakoupit jim tablety pro děti, které jsou menší než ty pro dospělé. „Ty starší děti spolknutí malé tablety zvládnou,“ říká klinický farmakolog.

Nevýhodou drcení je tedy i fakt, že rodiče dětem hůře dokáží odměřit potřebnou dávku. U sirupu je to snadné díky odměrce podobné stříkačce. „U tablet, pokud by ta dávka měla být odměřená, se to bude dělat těžko,“ upozorňuje farmakolog.

Vyvstává také otázka, co dělat, když dítě spolkne jen část rozdrcené tablety a zbytek vyplivne. Nebo škrábání okrajů rozdrcené tablety vede k vyzvracení léku. Jak to tedy udělat, aby rodič dítě nepředávkoval? „V takovém případě doporučuji prostě půl hodiny počkat. Pokud bolest ustoupí a horečka opadne, lék zafungoval a je jedno, kolik jej dítě do sebe dokázalo dostat,“ říká zcela jednoduchý návod Jan Strojil. Podle něj u paracetamolu a ibuprofenu smrtelné předávkování téměř nehrozí a jde o účinné látky s dobrým tzv. bezpečnostním profilem. 

V minulosti jsme ale již na Vitalia.cz upozorňovali, že není dobré zkracovat doporučené intervaly podání, protože například paracetamol může při předávkování vyvolat akutní selhání jater, které končí buď transplantací, nebo pokud se včas nenajde vhodný dárce, tak smrtí.

Záludná otrava paracetamolem: Kolik tablet je moc a proč je nekombinovat s alkoholem Přečtěte si také:

Záludná otrava paracetamolem: Kolik tablet je moc a proč je nekombinovat s alkoholem

Léky pro dospělé dětem nedávejte

Je také otázkou, zda malému dítěti podat lék pro dospělého, protože u těchto forem léků k žádnému výpadku nedošlo a v lékárnách je mají.

Tento způsob klinický farmakolog ale nedoporučuje. „Celá tableta znamená pro dítě podání vyšší dávky. Pokud tabletu budete muset čtvrtit či rozdělovat ještě na menší kousky, pak se pravděpodobně v dávce netrefíte, navíc pro dítě bude obtížné ostré kousky spolknout,“ uvádí Jan Strojil. „Dítě tím na životě neohrozíte, ale u nejmenších dětí bych se tabletám pro dospělé vyhýbal,“ dodává.

Horečka u dětí? Nedávejte jim půlku léku pro dospělé Přečtěte si také:

Horečka u dětí? Nedávejte jim půlku léku pro dospělé

Acylpyrin určitě dětem nepodávejte

Odborník varuje ještě před jedním rizikem: Tím je podávání acylpyrinu, tedy kyseliny acetylsalicylové, dětem do 12 nebo 16 let (věk lze vždy najít v příbalovém letáku a u každého léku se může lišit). 

„Acylpyrin nebo také aspirin se prodává i v malých tabletách, které berou třeba kardiaci, takže to může svádět k tomu podat tuto pilulku dítěti. To samé platí u šumivých tablet. Určitě to ale nedělejte, protože je tam riziko vzniku Reyova syndromu. Je to sice vzácné, ale tento syndrom vede k těžkému poškození mozku,“ upozorňuje Jan Strojil.

Na chřipku, nachlazení a virózy: Paralen, nebo Acylpyrin? Přečtěte si také:

Na chřipku, nachlazení a virózy: Paralen, nebo Acylpyrin?

Čípky si nechte vyrobit u lékárníka

Rodiče si také vyměňují tipy na to, ve kterých lékárnách připravují individuálně pro děti čípky s těmito účinnými látkami. I toto je řešení. Je ale třeba počítat s tím, že čípky skutečně nenamíchá každá lékárna. A některé jsou momentálně bez účinných látek pro jejich výrobu, takže je rovněž nezhotoví. Výpadky Nurofenu pro děti a Paralenu SUS totiž zvýšily poptávku po ostatních lécích s ibuprofenem a paracetamolem včetně individuálně vyráběných čípků, takže někde se účinné látky již vyprodaly.

„Rodičům tedy nezbývá nic jiného než lékárny obvolávat. Vím ale, že účinné látky pro čípky objednané mají,“ říká prezident České lékárnické komory Aleš Krebs. Podle něj účinné látky distributoři mají a v nějakém množství by je kolem Vánoc dodat mohli.

Co radí v současné situaci lékárníci

Pokud máte dítě nemocné:

  • Dětem od 9 kg je možné podat tablety pro děti s obsahem 125 mg paracetamolu.
  • Dětem nad 20 kg je možné podat půlku tablety s obsahem paracetamolu pro dospělé, tablety pro děti s obsahem 125 mg paracetamolu, tablety s ibuprofenem o dávce 200 mg nebo horký nápoj s paracetamolem pro juniory.
  • Dětem pod 9 kg resp. 20 kg jsou určeny sirupy a čípky pro děti, nebo individuálně připravované čípky nebo tobolky s paracetamolem či individuálně připravované čípky s ibuprofenem.
  • Individuálně připravované léky připravují jen některé lékárny, podle toho, zda mají suroviny, pomůcky, přístroje či personální kapacity. Individuální léky mají kratší exspiraci a nemá smysl je pořizovat do zásoby, případně pro větší děti.

Prosíme, buďte ohleduplní vůči ostatním pacientům i lékárníkům a nehromaďte doma zásoby.

Zdroj: Web České lékárnické komory

Lékárníci se také ve větším měřítku nyní učí, jak namíchat sirupy. Jejich výroba je totiž náročnější než u čípků a kromě nemocničních lékáren ji většina těch běžných neovládá. Masivní výpadky to ale změnily a podle Aleše Krebse se lékárníci připravují na to, že kdyby se situace opakovala, budou schopni namíchat paracetamol či ibuprofen do sirupů.

Individuální příprava má ale i svá úskalí. Předně je to kratší doba expirace, vyšší cena a u sirupů i jiná příchuť, než na kterou je dítě třeba u Nurofenu zvyklé.

Co můžete dělat, když váš lék není? Lékárna ho může namíchat, dá se dovézt ze zahraničí Přečtěte si také:

Co můžete dělat, když váš lék není? Lékárna ho může namíchat, dá se dovézt ze zahraničí

Dovoz léků z Polska je v pořádku

Část rodičů také v internetových diskuzích těm, kteří nutně sirupy potřebují, nabízí, že jim je doveze či objedná z Polska, kde je lékárny, na rozdíl třeba od lékáren německých, ještě mají.

Podle ředitelky SÚKL Ireny Storové takový dovoz možný je. „Koupit si v zahraničí volně prodejný lék nebo vyzvednou si léky na recept je možné. Stejně jako může cizí státní příslušník totéž učinit v české lékárně. Samozřejmě ale je nutné vždy respektovat pravidla dané země a u léků na předpis je potřeba myslet na to, že lékař pacientovi musí vystavit listinný recept,“ uvádí ředitelka SÚKL. Ústav v reakci na výpadky léků pro děti na webu zveřejnil návod, kde hledat o výpadcích informace.

Zajet si pro lék za hranice nebo si jej objednat ze zahraničního e-shopu ale nemusí být vždy možné. Podle Ministerstva zdravotnictví je výpadek Nurofenu pro děti celoevropský. Ostatně například ve středu jeden z německých lékárnických e-shopů hlásil u všech forem Nurofenu vyprodáno.

Výpadek Nurofenu pro děti je celoevropský. Zatímco rodiče hlásí, že v Polsku je lék ještě k sehnání, německé lékárny hlásí vyprodáno.

Autor: Vitalia.cz

Chybí i antibiotika

Nervozita rodičů je pochopitelná i proto, že v lékárnách je těžké sehnat i jiné léky pro děti. Už měsíce tento stav trvá například u očních antibiotik Tobrex či Tobradex, které sem sice chodí, ale v množství, jež nedokáže pokrýt poptávku, takže rodiče si musí opět lékárny obvolávat a zjišťovat, kde kapky či masti mají.

Navíc se výpadky opakují. Nurofen pro děti v lékárnách nebyl už po prázdninách. Loni v září chyběly komplet antibiotika v sirupech pro nejmenší děti. Letos je také potíž s antibiotiky, a to i pro dospělé. Nejprve bylo těžké sehnat ta penicilinová, teď jsou potíže i u těch tzv. širokospektrálních.

Například jeden z lékárníků 13. prosince na Twitteru uvedl, že není možné vůbec sehnat Amoxicilin, tablety Amoklsiklavu, Augmentinu nebo Penlaku.

„Jednáním o dodání mimořádné dodávky se nám podařilo pokrýt tím původní penicilinovým přípravkem, který měl výpadek, zhruba měsíc listopad a nyní už jsou dodávky obnoveny,“ uvádí Irena Storová. Podle ní ale výpadek tohoto léku vedl k rozkolísání celého trhu s antibiotiky, přičemž upravit by se to mohlo v lednu a únoru.

Proč léky chybí

Proč se pacienti tak často nyní setkávají s nejistotou, že v lékárně nebude lék, který akutně potřebují, není úplně snadné říci. Odborníci se shodují, že válka na Ukrajině v tom nijak významnou roli nehraje, a to ať už z pohledu výroby, nebo obavy, že léky jsou vykupovány pro Ukrajinu. To se podle lékárníků někde dělo na začátku konfliktu, nyní už k tomu nedochází.

Pokud je míč na něčí straně, pak je to Asie, kam se během krátké doby z Evropy přesunula značná část výroby účinných látek i léčiv jako takových. Toto hrálo roli zejména při covidu, ale ten vlastně dodávky ovlivňuje i nyní. Protože za covidu se některých léků spotřebovalo méně, výrobci naplánovali také nižší objem výroby. Jenže po covidu následovala zvýšená poptávka, na kterou už nebyli schopni rychle zareagovat, protože výroba se plánuje měsíce předem.

„Nejčastějším důvodem přerušení dodávek léčivých přípravků jsou v současné době zejména problémy na straně výroby (např. technické problémy ve výrobním procesu, nedostupnost léčivé látky – suroviny pro výrobu LP, závady v jakosti, změna lékové formy či balení apod.),“ uvádí mluvčí Ministerstva zdravotnictví Ondřej Jakob.

„Dalším důvodem nedostupnosti léčivých přípravků jsou kapacitní důvody, tzn. např. že se výrazně zvyšuje spotřeba daného léčivého přípravku oproti předchozímu období. V některých ojedinělých případech mohou být také krátkodobě přerušeny dodávky léčivého přípravku v souvislosti se změnou držitele rozhodnutí o registraci nebo zpoždění původně plánované dodávky,“ doplňuje mluvčí.

Samotný výrobce Nurofenu pro děti, společnost Reckitt Benckiser, ve středu jako důvod výpadku uvedla, že její „výrobní kapacity jsou momentálně plně vytížené, poptávka na trhu je ale mnohonásobně vyšší než ve stejném období v uplynulých letech“. Ohradila se také proti informaci, že část Nurofenu bude v lékárnách chybět až do jara. Podle ní se s nedostatkem potýkají jen některé lékárny a pouze u některých variant léků Nurofen pro děti. Databáze SÚKL i zkušenosti rodičů ale hovoří jinak.

„Na vyřešení dočasné situace s nedostatkem léků intenzivně pracujeme s našimi výrobními závody i dodavateli. Nepřesná informace o dlouhodobé nedostupnosti léků Nurofen pro děti do března 2023 se týkala pouze přípravku Nurofen pro děti 20 mg/ml s pomerančovou příchutí,“ uvedl Bernard Wyszynski, jenž je oblastním manažerem Reckitt Benckiser pro ČR a SR.

Odborná spolupráce

MUDr. Jan Strojil, PhD.

Klinický farmakolog a lékař Infekčního oddělení Fakultní nemocnice Olomouc. Podílí se také na aktuální kampani Státního zdravotního ústavu zaměřené na předcházení vzniku rezistence bakterií vůči antibiotikům.

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 »