Kdy je psychiatrická péče chorá

2. 3. 2010

Sdílet

Ilustrační obrázek
Autor: Depositphotos – VadimVasenin
Ilustrační obrázek
Psychiatr prof. Cyril Höschl říká, že média se o jeho obor zajímají výhradně v okamžicích, kdy bývalý psychiatrický pacient umlátí babičku. Dodává, že případy, kdy někoho umlátil bývalý stomatologický či chirurgický pacient, pecku na titulní stranu nezajistí. Podívejme se ve světle tohoto bonmotu na začátek letošního roku.

Prvního ledna začal platit nový trestní zákon, který upravuje ochranné léčení pachatelů trestných činů. Druhého ledna na pražské Psychiatrické klinice Ke Karlovu agresivní pacient pod vlivem psychotické poruchy udupal k smrti jiného nemocného a ještě tentýž měsíc se dostal na svobodu vrah třináctileté dívky z Kmetiněvsi. Na médii periodicky rozdmychávanou atmosféru, že společnost nad nebezpečnými psychotiky a sexuálními devianty ztrácí kontrolu, takže budou za chvíli číhat za každým rohem, bylo rázem zaděláno.

Šedivá (a opravitelná) realita      

Pubertální výrostek potřebuje peníze a vyčíhá si ženskou oběť, aby ji okradl. Při přepadení zjistí, že jej násilí a bezmoc oběti neovladatelně vzrušují, a akce, v níž původně šlo jen o obsah kabelky, končí znásilněním a smrtí její majitelky. Je sám sebou překvapen, žádné známky takových sklonů u sebe dosud nepozoroval.

psychiatrie

I takhle se z pubertálního výrostka zrodí sexuální deviant. Činů jako jeho tedy společnost úplně zbavit prostě nelze.Co však ovlivnit lze, je deviantova další „kariéra“. Kdyby jej čekal pouze trest v podobě vězení, bude v ní po propuštění pokračovat. V mnoha zemích jiný systém „nápravy“ těchto pachatelů neznají a sklízejí adekvátní úrodu. V Česku je kromě výkonu trestu čeká buď ochranná léčba, to pokud je naděje na vyléčení a nápravu; není-li, jdou do detence, což je zařízení kombinující léčebnu s vězením.

Jako ve všem i zde najdeme slabá místa. Jen namátkou: do detence, která je určena pro sexuální devianty, mentálně retardované, psychotiky, toxikomany a psychopaty se závažnými poruchami osobnosti, se posílají pachatelé, až spáchají-li čin s horní sazbou minimálně pět let; ochranné léčení může trvat maximálně dva roky, poté je musí prodloužit soud; léčení zločinci se časem naučí říkat, „co se chce slyšet“, a terapii tak „očůrávat“; na kmetiněveského vraha, spáchá-li něco v budoucnu, se bude pohlížet jako na netrestaného, protože se provinil jako nezletilý, atd., atd.

Jako vždy, tak i na začátku letošního roku se na tyto slabiny vrhli písmenkoví i obrázkoví investigativci a začali zjišťovat, zda nejde o „chyby systému“. Fakta, jako že například recidiva propuštěnců z ochranné sexuologické léčby činí u nás pouhých pět procent či že za posledních třicet let nezrecidivoval ani jeden z pacientů, kteří dobrovolně požádali o chirurgickou kastraci, se příliš neohřívala. Spolehlivě tak zanikla prostá skutečnost, že právo musí sladit zájmy jedinců a společnosti, že žádný zákon nepokryje veškeré jednotlivé záhyby lidského jednání, což platí i pro zásady a pravidla terapeutických nápravných snah, že odborníci, kteří třecí plochy musí dennodenně řešit, si s nimi v rovině bezprostředního chodu institucí vždycky nějak poradí – musí.

Něco jiného je případ k smrti udupaného psychiatrického pacienta, kde došlo k několika chybám ošetřujícího personálu. Na jedné straně si také u něj můžeme být jisti, že se prevence jejich opakování určitě vtělí do vnitřních předpisů Kliniky Ke Karlovu a že kamery, jejichž absence v tamních sprchách udělala své, budou v koupelně brzy nainstalovány. Avšak pacient, jemuž se nedostalo zklidňující medikace ani izolace a později dozoru, se především a hlavně nemusel na klinice Ke Karlovu vůbec ocitnout nebo se do její péče nemusel dostat v psychickém stavu, ve kterém zabíjel.

Zde se ocitáme v jiné rovině, než je asistence psychiatrů i psychologů při ochraně společnosti před násilím způsobeným sníženou příčetností, poruchou osobnosti či duševní chorobou, zde kráčí o psychiatrickou péči jako celek. Přidržíme-li se i nadále bonmotu prof. Höschla o podílu různých druhů pacientů na mordování babiček, nejpádnějším důkazem o odlišnosti obou rovin je skutečnost, že přibližně 150 tisíc lidí, kteří u nás každý rok navštíví psychiatrickou ambulanci, prostě nejsou potenciální vrazi či násilníci. Právě v zájmu těch, kdo bojují s duševní chorobou tiše a zcela stranou jakékoli mediální pozornosti, volají četní odborníci po reformě psychiatrické péče v Česku. 

Čtěte téma: Laktační psychóza – Jak ji poznat a předejít tragédii

Ptáte se, jak může skočit žena se dvěma malými dětmi pod soupravu metra? Zvlášť s kočárkem, ve kterém leží dvouměsíční kojenec?

Peklo zvané psychiatrická léčebna

Její každodennost popisuje zakladatel a prezident České asociace pro psychické zdraví MUDr. Martin Jarolímek následovně: „Studentka se dostane na příjem psychiatrické léčebny, protože se v mrazu snažila přeplavat Vltavu. Přijela sanitka, zabalili ji do deky a se slovy „odvezeme vás do tepla“ ji bez dalšího vysvětlování naložili a vysadili v Bohnicích. V přijímací kanceláři se s ní nikdo o ničem nebavil, osobní věci jí vzali a dali do igelitového pytle, nikdo jí nevysvětlil, kde je, proč tam je, že bude nutné užívat léky a na co ty léky jsou.“

psychiatrie

Počáteční zkušenost s psychiatrickou péčí se v 80 % případů odehraje v psychiatrických léčebnách, na místě, kde personál má strašně málo času, na oknech jsou mříže, některé pokoje jsou po dvanácti lůžkách. „Rodiče, kteří druhý den přijdou,“ pokračuje doktor Jarolímek, „potkávají utlumené pacienty pod vlivem léků, jak se šourají v županech po chodbách, vidí svou dceru na posteli. Je ztuhlá, protože nevěděla, kde je, co je, proč stojí nahá na vyšetřovně, začala kolem sebe mlátit a rozmlátila třeba lékovou skříňku, dostala injekci a vytuhla. Kdyby se bránila ještě víc, tak ji přikurtují k posteli.“

Je vyřčena diagnóza: schizofrenie. Nejčastěji propuká v pubertě a těsně po ní, kdy jsou mladí lidé poprvé vystaveni tlakům reálného světa – nutnostem mít studijní a pracovní úspěchy či budovat partnerské vztahy. Jejich požadavky jim snadno mohou přerůst přes hlavu a oni je nezvládnou.

Co se s vysokou pravděpodobností může stát, octne-li se člověk ve vylíčeném prostředí? Podle primáře Jarolímka stačí, když v něm rodiče dívky narazí na mladého nezkušeného psychiatra, jenž nechce podcenit diagnózu a začne mluvit o genech. Rodiče plní představ o neodvratném osudu, za nějž se cítí odpovědni, zpanikaří, protože se jim hroutí svět, bojí se, jak zareagují příbuzní a známí. Jejich dítě po návratu domů cítí všudypřítomný stres, jenž neprospívá ničemu jinému než relapsům, návratům příznaků poruchy. Návraty do psychiatrické léčebny pak mohou vést až k prokazatelnému poškození mozku, odborníci hovoří o toxicitě relapsů. Takovéhle zážitky postiženého předurčí ke „kariéře psychiatrického pacienta“, oteplákované trosky neschopné běžného života. Může vše mít i jiný scénář?

Čtěte téma: Psychiatr nekouše

Když si zlomíme nohu, hned spěcháme na chirurgii. Když si „zlomíme“ psychiku, „fačujeme“ si ji doma.

Cesta existuje, jen se po ní vydat

Někdo z rodiny se začne chovat jako nikdy předtím: soustředění mu dělá problémy, přestává jíst a komunikovat, mluví si pro sebe nebo s někým virtuálním. Rodina se spojí s psychiatrickým sanatoriem či podobným zařízením komunitní péče, kde funguje mobilní tým. Jeho lidé všem, kdo s postiženým žijí, vysvětlí nejen podstatu poruchy, ale také tzv. třetinové pravidlo.

Třetinové pravidlo:

  • u třetiny případů se onemocnění objeví jednou a více nikdy
  • u další třetiny se dvakrát třikrát vrátí, zanechá určité stopy, leč dá se s ním žít
  • pouze poslední třetina prožije hluboký zásah a vyosení z klasických životních rolí

Zároveň pracovníci zahájí s postiženým citlivou psychosociální rehabilitaci. Škála jejích prostředků může sahat od nejrůznějších psychoterapeu­tických metod po užívání léků, které mají oproti minulosti výrazně potlačené spektrum nežádoucích účinků. Všechny terapeutické prostředky mají jediný cíl: dostat „tonoucího“ zpět na hladinu, aby zase „plaval“, pracoval, řešil věci a těšil se z běžného života.

Jenže! V celé naší zemi existují tři krizová centra a jeden mobilní tým. Páteří systému psychiatrické péče v ČR jsou velké léčebny, menší počet psychiatrických oddělení ve všeobecných nemocnicích a ambulantní psychiatři. Tento komplex poskytuje především drahou farmakologickou léčbu, která je však bez návazné psychosociální péče neúčinná.

Léčebny nezřídka pocházejí ještě z 19. století, jejich vzhled, uspořádání, fungování a způsob zacházení s nemocnými až příliš připomínají terapeutický ideál oné doby: pacienty izolovat, ochránit je před zmatky a konflikty života a společnost před jejich dysfunkcí. K plodům fungování tohoto systému patří také pacienti, kteří přestali navštěvovat svého psychiatra a propadají se na sociálním žebříčku hloub a hloub (právě takový zabíjel na Klinice Ke Karlovu). Příznačná je také skutečnost, že třetina bezdomovců u nás trpí schizofrenií.

Čtěte téma: Jak zvládnout poporodní depresi?

Vážnými psychickými problémy po porodu trpí celá desetina žen. Jen málo z nich ale vyhledá lékařskou pomoc. Ohrožují tak nejen sebe, ale i své dítě.

ITAREPS – medicína i sociální kontakt

Nejde o to, zrušit veškeré psychiatrické léčebny a nahradit je komunitní péčí. Tyhle tendence napáchaly například v Itálii v 70. letech minulého století pěknou paseku. Jde o to, systém vyvážit, aby se každému pacientovi dostalo přesně toho druhu péče, který potřebuje, a aby jednostrannosti a slabiny jednoho nezasahovaly leckdy neodvratně do životů těch, kdo potřebují spíš ten druhý.

Že vedle sebe mohou a měly by existovat oba druhy péče, vyjadřuje například zbrusu nová Psychiatrická klinika v Hradci Králové. Medicínský model v ní reprezentuje mimo jiné špičkové vybavení, umožňující vyšetřovat zobrazovacími metodami, radiologicky, biochemicky i geneticky; komunitní aspekt je vetknut do jejího architektonického řešení, uspořádání a přístupu lékařů i sester.

Neméně jasně v sobě medicínský a sociální aspekt sjednocuje originální český program časné psychofarmako­logické intervence ITAREPS. V jeho rámci pacient či jeho rodinný příslušník posílá každý týden psychiatrovi esemesku, v níž prostřednictvím jednoduchého obodování popíše svůj psychický stav. Jakmile pocítí první drobounké změny v prožívání a dojde k překročení hranice některého z ukazatelů, může lékař okamžitě zareagovat. Program vytváří a posiluje terapeutickou alianci pacient-rodina-lékař, již vyplňuje proudění relevantních informací a zklidňující osobní kontakt vzájemně se dobře znajících osob, podložený vzájemnou důvěrou.

„Pořádně nevíme, jestli u ITAREPS funguje pouze fakt, že lékař zvyšuje v pravou chvíli dávky léků. Já bych kacířsky vsadil i na skutečnost, že pacient může mít věci pod kontrolou. Možná že tohle samo o sobě léčí, což je pro mne neuvěřitelný výsledek,“ říká tvůrce programu MUDr. Filip Španiel, Ph.D. Společensky nejhmatatelnějším efektem ITAREPS jsou úspory na hospitalizacích v psychiatrických zařízeních jdoucí do desítek miliónů. Přesto je o něj mnohem větší zájem v zahraničí než doma.

Čtěte téma: Hrozí vám syndrom vyhoření?

Zradila mě vlastní hlava. Říká se tomu kolaps z přepracovanosti…

Kdo se za ně vezme?

Z dosud uvedeného celkem jasně vysvítá, že psychiatrická péče rozhodně nefiguruje v top seznamu medicínských oborů. Příslušnost k této kategorii znamená, že peníze na zdravotní péči se převtělí v nákup a provoz sofistikovaných a drahých přístrojů, a tím v generování zisků jejich producentů, kteří odbytu malinko přes velkou politiku pomáhají. Jediný pořádný job v psychiatrii jsou léky a diagnostické technologie a k jejich distribuci medicínský model psychiatrie plně vyhovuje. Komunitní péče žádné „zajímavé toky“ tohoto typu negeneruje, představuje pouze náklady veřejných rozpočtů. Byť její rozvoj nové peníze nevyžaduje a stačí v její prospěch přerozdělit ty, které již do péče o duševní zdraví tečou, naznačené handicapy činí její budoucnost v Česku značně nejistou.

Je zde ještě jedna bariéra. Žádný politik, úředník ani zdravotnický manažer nebude bránit rozvoji dejme tomu chirurgie nebo péče o pacienty s karcinomem také proto, že ví, že tyto obory jednou může potřebovat. Ale nějaký „vylepšený blázinec“? Potřebnost takového zařízení si člověk připouští, až když do toho opravdu spadne buď on sám, nebo jeho příbuzný. Tlak na změnu psychiatrické péče u nás tudíž budou dál vyvíjet pouze idealisté komunitní péče. Pacienti ne, ti mají dost starostí sami se sebou. Je tudíž otázka, kdo a zda vůbec se k nim v budoucnu přidá.  

Čtěte téma: Antidepresiva – snadná cesta ke štěstí?

Opravdu souvisí jejich zvyšující se spotřeba se všeobecným nárůstem psychologických poruch ve společnosti?

Ilustrační fotografie: One Flew Over the Cuckoo's Nest, agentura SXC

Autor článku

PhDr. Pavel Taněv

Absolvoval studia filosofie a politické ekonomie. Mnoho let strávil v týdeníku Reflex. Pracoval v odborném týdeníku Medical Tribune, nyní působí jako odborný redaktor ve společnosti Edukafarm.

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