Psychiatrie 21. století: Mříže v oknech nečekejte, elektrošoky ale zažívají renesanci

16. 11. 2021

Sdílet

Autor: Vitalia.cz/Karel Choc
V areálu Pardubické nemocnice otevřeli novou budovu, kde našla zázemí tamější psychiatrická klinika. Ta mohla díky moderním prostorám zdvojnásobit počet lůžek a otevřít tři nové dětské ambulance. Jde o dobrou zprávu, protože v Česku kriticky chybí například dětští kliničtí psychologové a roste i počet dospělých, kteří potřebují hospitalizaci na psychiatrii.

Za skleněnými dveřmi nové budovy s číslem 25 v Pardubické nemocnici se ocitnete v jiném světě. Klid, světlo, pohodlná křesla, veselé barvy… Hned u vstupu recepce, kousek dál tělocvična s pingpongovým stolem. Jako byste vstoupili spíš do hotelu než do nového pavilonu psychiatrické péče, kde kromě populace v produktivním věku pomáhají i seniorům nebo dětem.

Co se dozvíte v článku
  1. V zaobleném světě
  2. Pavilon má unikátní vybavení
  3. Elektrošoky nezmizely, naopak zažívají renesanci
  4. Uzavřené oddělení má dvojnásobek lůžek
  5. Umyvadlo z nerezu a okna bez mříží
  6. Místa, která byste na psychiatrii nečekali
  7. Nový pavilon, více péče

Otevření pavilonu 25 je v Pardubicích velkou událostí. A nejen v tomto městě, ale v celém kraji. Tamější psychiatrická péče má více než osmdesátiletou tradici, dosavadní léčba ale v Pardubické nemocnici trpěla nedostatkem prostoru, proto byla rozdělena na čtyřech místech. A stejně to nestačilo, protože pacientů bylo více, než kolik stačily ambulance obsloužit a lůžka pojmout. Nic pohodlného pro pobíhající lékaře, smutné pro pacienty, kteří museli cestovat za péčí dále. „Byly to provizorní podmínky, které se ale protáhly na 68 let,“ shrnuje léta ústupků primář psychiatrického oddělení Jan Kolomazník.

V zaobleném světě

Když se před vámi automaticky otevřou vstupní dveře nového pavilonu, přicházíte do prostoru plného oblých tvarů. Patra mají prstencovitý tvar a kruhová jsou i stropní LED svítidla. Oblý je také půdorys budovy, který by mohl svojí oblostí připomínat naducaný rohlík nebo snad banán. A zaoblené je i sklo, jež nahradilo část příček nebo má podobu světlíků vedoucích z atria o patro níže.

Pavilon číslo 25

O výstavbě nového pavilonu se v Pardubicích uvažovalo desítky let. Jeho příprava nakonec trvala tři roky. Další dva roky se stavělo. Pavilon s č. 25 vyšel na 350 milionů korun, z toho zhruba 220 milionů získala Pardubická nemocnice ve formě dotace z Evropské unie.

Nově otevřený pavilon Pardubické nemocnice má 1 podzemní a 3 nadzemní podlaží:

  • Podzemí: Parkoviště se 17 místy, šatny pro studenty, technické zázemí (sklady, archivy).
  • Přízemí: Recepce, denní stacionář včetně tělocvičny, arteterapie a dalších, ambulance pro děti s hernou a relaxační místností.
  • První nadzemní podlaží: Uzavřené oddělení s 20 lůžky a atriem.
  • Druhé nadzemní podlaží: Otevřené oddělení s 30 lůžky a možností výstupu na střechu.

Oblost není náhodná, ale jak se dozvídám, nestojí za ní snad snaha o jakési zklidnění, které může navozovat. „Vedle budovy stojí vodojem s kruhovým průřezem, budova nového pavilonu jej do oblouku kopíruje. Když se začalo projektovat, vznikl první oblouk a od té doby se s ním začalo pracovat,“ říká Jaroslav Junek, jenž je zástupcem ředitele provozně-technického úseku Nemocnic Pardubického kraje.

Pravda, nakonec zjišťujeme, že oblé tvary mohou mít i nevýhodu. Po chvíli chození se mi zdá, že pěkně popletou hlavu. Kudy vlastně na hlavní recepci a kde je přednáškový sál, ze kterého jsme vyšli?

Pavilon má unikátní vybavení

Primář Jan Kolomazník je jedním z našich průvodců po budově vonící novotou. Prochodil ji před námi mockrát, stále je ale maličko znát, že s novým prostředím se teprve sžívá. „Některé vybavení jsme ještě nestačili přestěhovat a mám jej na původním pracovišti v jiné budově,“ podotýká, když se podrobně vyptávám na všechny léčebné přístroje, jež tu mají nebo teprve budou mít k dispozici. Vidět některé z nich v léčebnách duševně nemocných je stále ještě vzácnost. Jsou totiž nákladné, stejně jako ceny školení k jejich obsluze.

Patří mezi ně třeba speciální klávesnice doplněná o počítačové programy, chcete-li hry, sloužící k tréninku kognitivních funkcí zahrnujících například paměť, prostorovou orientaci nebo koncentraci (těmto novým možnostem v psychiatrické péči se budeme věnovat v samostatném článku). „Vznikla tady celá místnost pro rehabilitaci kognitivních funkcí, v níž budeme pracovat skupinově. Pacientů tu s terapeutem bude třeba šest,“ popisuje vedoucí klinických psychologů Pardubické nemocnice Jan Bažant, jenž nás provází částí kliniky, kde psychiatry střídají psychologové či kliničtí psychologové.

Větší pozornosti ze strany novinářů se dostává také místnosti s černým koženým polohovacím křeslem. Připomíná trochu to u zubaře. Na něm budou lékaři aplikovat novinku v podobě stimulování mozku magnetickými vlnami nebo takzvanou elektrokonvulzivní terapii, což je odborný název pro léčbu, kterou laická veřejnost zná jako elektrošoky.

Elektrošoky nezmizely, naopak zažívají renesanci

Od Jana Kolomazníka se dozvídám, že tento druh terapie v poslední době zažívá renesanci. Slovo elektrošok i ve mně budí smíšené pocity, proto se na elektrokonvulzivní léčbu vyptávám detailněji. Dozvídám se, že tato terapie se provádí u pacientů s těžkými depresemi, u některých forem schizofrenie či mánií. „Většinou jde o závažné stavy, těžko ovlivnitelné samotnými farmaky,“ vysvětluje lékař.

Elektrošoky se podávají třikrát týdně za asistence anesteziologa. Pacientovi aplikuje hypnotikum a svalový relaxant, tedy látky na zklidnění. Následně lékař na jeho spánky  přiloží dvě malé elektrody, kterými vyšle do těla několik krátkých elektrických pulzů. „Dávky proudu jsou velmi malé, jsou to jen mikroimpulzy, a pacienti se po nich velmi rychle lepší. Rychleji než po antidepresivech, u nichž zlepšení nastává po třech či čtyřech týdnech, kdežto účinek elektrokonvulze je promptní,“ popisuje primář s tím, že jeden z jeho kolegů nový přístroj na elektrokonvulzivní terapii vyzkoušel sám na sobě a pulzy popisoval jako opravu slabé.

„Mezi laickou veřejností jsou elektrošoky pořád ještě strašák, ale ti, co elektroterapii prodělali a vědí, že jim pomáhá, se k nám v případě problémů vracejí a chtějí tuto léčbu znovu,“ vysvětluje Jan Kolomazník, proč i v 21. století má tato metoda v nemocnicích své místo. Na rozdíl od užívání léků má minimální vedlejší účinky – někdy přechodnou bolest hlavy nebo přechodnou poruchu paměti. Lékaři ji proto mohou použít i u starých lidí, dětí nebo těhotných.

Uzavřené oddělení má dvojnásobek lůžek

Místnost, kde se aplikují terapie, ale není jediným zázemím, do kterého se běžná návštěva nepodívá. Nejpřísnější režim bude panovat v druhém nadzemním podlaží, kde vzniklo uzavřené oddělení pro dospělé pacienty vyžadující intenzivní psychiatrickou péči.

„Tito pacienti mohou být nebezpeční sobě nebo okolí. Patří mezi ně pacienti s akutním relapsem schizofrenie, pacienti s mánií nebo těžkou depresí, u nichž je nebezpečí sebevražedného jednání,“ říká primář. Průměrná ošetřovací doba je zde 16 dnů. Při zlepšení lékaři odesílají pacienta na otevřené oddělení, které je o patro nad námi.

Jan Kolomazník přiznává, že kromě zdravotního stavu hraje roli i kapacita. I když ta se teď nově v Pardubické nemocnici zdvojnásobila, pacientů je stále tolik, že na lůžka je a bude velký tlak. „Duševních chorob v pravém slova smyslu je v populaci stále stejně. Tedy jedno procento má schizofrenní onemocnění, pět až deset procent deprese. Pokud počítám lehčí deprese, je to až patnáct procent lidí. A tato procenta jsou stále stejná. To, co nám ale bohužel hodně přibývá, a s čím máme problém, jsou toxikomani. Především pacienti závislí na pervitinu, kteří velmi často sklouzávají do toxických psychóz, což jsou stavy klinicky velmi podobné další atace relapsu schizofrenie. Jsou tedy velmi nepříjemné a vyžadují pobyt na uzavřeném oddělení,“ vysvětluje, s čím se musí nemocnice i lékaři vyrovnat a proč je zvýšení kapacity lůžek tak potřebné.

Umyvadlo z nerezu a okna bez mříží

Na novém uzavřeném oddělení Pardubické nemocnice je dvacet lůžek v jedenácti pokojích. Určené jsou pro muže i ženy. Dva pokoje, ty nejblíže sesterny, jsou jednolůžkové, v ostatních budou dva pacienti, což jsou podmínky, o kterých si ve starších léčebnách či nemocničních odděleních mohou většinou nechat jen zdát. Každý pokoj má svoji vlastní sprchu, WC a umyvadlo. Poslední dvoje jmenované je z nerezu. „Je to proto, aby je pacienti nerozbili a nepokusili si ublížit,“ přitakává mé otázce Jan Kolomazník. Ostatně stejně je vybaveno sociální zařízení také na otevřeném, třicetilůžkovém oddělení o patro výše.

S bezpečností souvisejí i okna z tvrzeného skla. Mříže v nich ale chybí. Ochranu před tím, aby z nich pacient třeba nevyskočil, ovšem mají. Má podobu kalené skleněné tabule, která je umístěná zvenku před plochou celého okna. Zevnitř ji téměř nepostřehnete.

S bezpečností souvisí ještě dva detaily. Zaoblená sesterna má čelní stěnu jen ze skla, aby personál měl dobrý přehled o tom, co se na oddělení děje. A jak nám prozrazují naši průvodci, její umístnění není náhodné. „Je strategické, protože z ní jde vidět do dvou hlavních chodeb. Navíc hned vedle sesterny jsou dva jednolůžkové pokoje pro rizikové pacienty, kteří by si mohli něco udělat,“ vysvětluje primář psychiatrie. Co neuvidí zdravotníci ze sesterny, to jim ukáží nenápadné kamery na stropě v chodbách.

Vedle sesterny je také jeden menší pokoj, který je až na turecký záchod v rohu a síť v úzkém okně zcela bez vybavení. Jde o izolaci pro zklidnění nejvíce rozrušených pacientů, kteří tady jsou jen po nezbytně nutnou dobu. Stejně jako elektrošoky i ona bývá opředena všelijakými mýty. Faktem je, že dojem útulnosti nebudí. „Všechno, co tady vidíte, je omyvatelné, včetně stěn. A je tady i kamerový systém,“ podotýká Jaroslav Junek. Pomyslím si, že lékaři s letitou praxí asi vědí, proč. A povšimnu si ještě druhého zmiňovaného detailu – zámků ve dveřích. Místy mají zvláštní konstrukci. U izolace jsou zámky nejspíš automatické, odhaduji. V koupelnách pokojů jsou také, ale primář nás upozorňuje, že to je chyba, která bude co nejdříve napravena, protože tady se pacienti zamykat nesmějí.

Místa, která byste na psychiatrii nečekali

Uzavřené oddělení někteří pacienti po dobu léčby nemohou opustit. Jako velkou výhodu proto primář Jan Kolomazník zmiňuje vnitřní atrium, které je přístupné jen z tohoto podlaží. „Je naší chloubou. Díky němu pacienti, kteří nemají povolené vycházky po areálu nemocnice, mohou být na čerstvém vzduchu,“ říká a ukazuje nám několik laviček, chodník z dlažby a čerstvě vysazenou, tedy ještě nízkou zeleň. A uprostřed ní vyšší keř. Jde o indiánskou borůvku neboli muchovník. „Je v ní nějaká speciální symbolika?“ ptám se, když vidím, jaké pozornosti se rostlině dostalo a že je středobodem dvorku. „Měla by mít jedlé plody,“ nabízí Jan Kolomazník jednoduché vysvětlení, proč tady z borůvky mají radost.

Detail s borůvkou ukazuje, o co se vedení nemocnice, stavaři i lékaři při vzniku nového pavilonu snažili a co jde i při letmé návštěvě vycítit. Totiž nejen aby se tu léčilo více pacientů moderními metodami, ale také aby se tu všichni včetně zaměstnanců a návštěv cítili dobře. Protože kdo jiný než psychologové a psychiatři nejlépe vědí, jak moc se prostředí prolíná do duševní pohody. A že tam, kde se cítíme dobře, se můžeme i rychleji uzdravovat.

Proto třeba u dětských ambulancí, které jsou tu úplnou novinkou, najdete relaxační místnost nebo barevnou herničku. Celá budova je pak vybavena pohodlnými křesly, místy i malými sedačkami, ve kterých pacientům hovor s lékařem uplyne rychleji.

Nový pavilon, více péče

  • Otevření nové budovy znamená, že pomoc dostane více pacientů. Ale přináší také nové formy pomoci. Například skupinové terapie nebo ambulance pro děti.
  • V přízemí budovy jsou 3 ambulance vyhrazené pro děti. V nich s nimi pracují kliničtí psychologové či psychologové, kteří se v oboru klinické praxe vzdělávají. Celkem v novém pavilonu pracuje 17 psychologů a jeden arteterapeut.
  • Nový pavilon má 50 lůžek pro dospělé, což je dvojnásobek dosavadního čísla, na dvou odděleních – uzavřeném pro pacienty vyžadující intenzivní léčbu a otevřeném pro pacienty s méně závažnými diagnózami. Nový pavilon ročně pojme zhruba 800 hospitalizovaných pacientů. Nejčastěji ty se schizofrenním onemocněním, poruchami nálad, neurotickými potížemi, poruchami přizpůsobení či poruchami vyvolanými návykovými látkami.
  • V budově je také 5 ambulancí pro dospělé, a to jak ambulance klinické psychologie, tak ty specializované: protialkoholní, protitoxikomanická a sexuologická.
  • Součástí léčby dospělých je také denní stacionář pro 25 osob, kde jsou dílny pracovní terapie, ateliér pro art-terapii, místnosti pro nácvik počítačových dovedností, ale také soběstačnosti. Součástí denního stacionáře je i tělocvična.
  • Součástí pavilonu je také místnost pro skupinovou terapii, která se kvůli nedostatečnému zázemí dosud v Nemocnici Pardubice nemohla konat. V pavilonu je také společenská místnost nebo přednášková místnost vybavená audio technikou.

Mezi místa, která byste možná na psychiatrické klinice nečekali, patří i tělocvična, místnost s pračkou, žehličkou a žehlicím prknem nebo kuchyně pro pacienty. V nich ale už nejde o to si odpočinout. Tyto místnosti jsou součástí takzvaného denního stacionáře, kam patří také malá knihovna, výtvarná či keramická dílna, dílna pro vyrábění šitých, pletených, vyšívaných či háčkovaných drobností, které tu i prodávají, a také místo, kde pacienti stříhají velký kus molitanu na malé kousíčky. Jsou tu také prostory pro arteterapii či muzikoterapii. Všechny tyto činnosti patří k léčbě a mimo jiné u nich jde o to „vymalovat“ nebo „vypsat“ se ze svých vnitřních stavů. „Do kreslení si pacienti promítají své emoce a potom společně své výrobky vyhodnocují,“ popisuje smysl arteterapie Jan Kolomazník.

Někde nacvičují i to, co považujeme za běžné a díky čemu je člověk soběstačný. „Pro pacienty je důležité, aby si obnovili návyky, které bývají dosti narušené duševním onemocněním, především psychózou. Je to rehabilitace a aktivizace tak, aby byli schopní nastoupit do normálního běžného života a fungovat tak jako dříve,“ podotýká Jan Kolomazník ke smyslu denního stacionáře, kam docházejí pacienti z lůžek i ambulancí.

Z přívětivosti denního stacionáře se vymyká kuřárna. Menší prostor oddělený od chodby zaoblenou skleněnou stěnou. Kromě popelníků připevněných ke zdi v ní nic dalšího nenajdete. A není to tím, že pavilon je ještě dovybavován nábytkem. „Chceme, aby tady pacienti trávili co nejméně svého času,“ vysvětluje psychiatr, proč v této místnosti nebude ani židle, ani křeslo.

Odborná spolupráce:

MUDr. Jan Kolomazník

Lékař s více než 34letou praxí, sexuolog a soudní znalec. Od roku 1995 zastává funkci primáře psychiatrického oddělení Pardubické nemocnice.

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 »