Kdo je na tom v exekuci nově lépe a kdo hůře? Přehled změn od roku 2025

24. 1. 2025
Doba čtení: 9 minut

Sdílet

Autor: Depositphotos
Jak to je s exekučními srážkami ze mzdy či důchodu po tolika změnách na přelomu loňského a letošního roku? Změn v exekucích bylo a je koncem roku 2024 a na začátku roku 2025 opravdu hodně.

Zjednodušující informace najdete leckde. My však změny vysvětlujeme na praktických ilustrativních případech, když je exekucí více, a dokonce jsou třeba nařízeny ve stejný den, nebo když se sráží pro absolutně přednostní výživné, to se pak pravidla modifikují. 

Také na nově specifické situaci starobních i pracujících důchodců, kteří mají určitou výhodu. Kolik zůstane dlužníkovi a kolik jde věřitelům, když se takových exekucí vůči jednomu dlužníkovi sejde více?

V předchozích článcích jsme si vysvětlili změny v exekučních srážkách 2025 a proč byly valorizovány nezabavitelné částky, tedy kolik nově zůstává dlužníkovi a jeho rodině.

Meziroční porovnání nezabavitelných částek  a dalších parametrů pro exekuční srážky a jejich uplatnění V roce 2024 čili od srážek ze mzdy za měsíc leden 2024 v únoru 2024 až do srážek ze mzdy za měsíc listopad 2024 v prosinci 2024 V roce 2025 čili od srážek za měsíc prosinec 2024 v lednu 2025 až do srážek za měsíc prosinec 2025 v lednu 2026
Nezabavitelná částka na povinného (dlužníka) 12 704,67 Kč 13 026,67 Kč
Nezabavitelná částka na vyživovanou osobu 3176,17 Kč 3256,67 Kč
Částka, nad kterou se srazí zbytek čisté mzdy bez omezení, čili hranice, nad kterou je mzda již plně zabavitelná, a podléhá tak plně exekuci 28 586 Kč 29 310 Kč
Maximální výše 1/3 zbytku čisté mzdy v Kč 9528 Kč 9770 Kč

Nepříjemné překvapení pro dlužníky v exekuci v podobě nižšího nezabavitelného minima, které jim od ledna zůstává

přes valorizaci nezabavitelných částek pro rok 2025, které vždy musejí zůstat dlužníkovi, může jeho nezabavitelné minimum, které mu ve výsledku zůstává ze mzdy, nyní poklesnout

Pravidla exekučních srážek se totiž nově znovu významně liší podle toho, zda je povinný dlužník, popř. jeho manžel či manželka nebo partner či partnerka shodného pohlaví, poživatelem důchodu.

Už vloni od 1. 10. 2024 bylo totiž zavedeno pravidlo, že při 4 a více nařízených exekucích pro splacení peněžitých pohledávek (dluhů) je povinnému dlužníkovi ze mzdy sráženo jako při exekuci pro přednostní pohledávky, takže více, a to ze dvou třetin zbytku čisté mzdy po odečtení celkové nezabavitelné částky (a ne jen jedné třetiny), a to i když žádné takové prioritní pohledávky exekučně uspokojovány nejsou.

Tohle nové pravidlo se však neuplatní, je-li povinný dlužník poživatelem starobního nebo sirotčího důchodu nebo invalidního důchodu pro invaliditu 2. nebo 3. stupně. Vysvětlovali jsme to zde: Změna exekučních srážek ze mzdy: Od čtyř exekucí vám nově mohou srazit více peněz než dřív (PŘÍKLADY).

Dlužník důchodce nebo dlužník s manželkou či manželem důchodcem (důchodkyní) má jistou výhodu

Navíc od 1. 1. 2025 se nezabavitelná částka na manžela, manželku nebo partnera či partnerku (podle občanského zákoníku) nebo na registrovaného partnera nebo partnerku (podle zákona o registrovaném partnerství) počítá jen tehdy, pokud je povinný dlužník nebo jeho manžel (manželka) či zákonný partner (partnerka) poživatelem starobního důchodu, sirotčího důchodu nebo důchodu pro invaliditu 2. nebo 3. stupně. 

O tom podrobněji zde: Změny v exekučních srážkách 2025: Letos je jich více a platí už i pro výplatu v lednu.

Invalidní důchod pro invaliditu 1. stupně nemá přitom pro exekuci a její rozsah (postih mzdy nebo důchodu) žádný význam.

Nejde tedy o nějakou novou výhodu pro důchodce, naopak ostatní dlužníci dosavadní standard nezabavitelného minima ztratili, bylo jim sníženo.

Jen ještě připomeňme, že ohledně zápočtu nezabavitelné částky na vyživované nezaopatřené dítě se nic nemění.

Postup při provádění srážek

Exekuční srážky se provádějí z čisté mzdy, která se vypočte tak, že se od hrubé mzdy odečte záloha na daň z příjmů fyzických osob srážená z příjmů ze závislé činnosti a pojistné odvody. 

Z takto vypočtené čisté mzdy zaměstnance (povinného) – nebo příjmů, s nimiž se při exekučních srážkách zachází jako se mzdou, např. s důchody – se odečte (základní) nezabavitelná částka, která je součtem nezabavitelné částky na samotného povinného (dlužníka) a nezabavitelných částek na jím vyživované osoby.

  • 1. třetina (zbytku čisté mzdy po odečtení nezabavitelných částek) je určena pro vydobytí nepřednostních pohledávek oprávněných osob (a přednostních pohledávek, pokud k jejich úhradě nepostačuje 2. třetina). 
  • 2. třetina (zbytku čisté mzdy) slouží pouze k vydobytí přednostních pohledávek, a pokud takové nejsou, vyplatí se povinnému.
  • 3. třetina (zbytku čisté mzdy) se vždy vyplatí povinnému.

Absolutní přednost i v rámci přednostních pohledávek má výživné

Dochází-li srážkám z 2. třetiny zbytku čisté mzdy, uspokojí se z ní bez zřetele na pořadí nejprve pohledávky výživného, poté pohledávky za náhradní výživné, a teprve pak podle pořadí ostatní přednostní pohledávky. 

Nepostačí-li částka sražená z 2. třetiny k uspokojení všech pohledávek výživného, uspokojí se nejprve běžné výživné všech oprávněných a pak teprve nedoplatky za dřívější dobu, a to podle poměru běžného výživného. (Nepostačí-li částka sražená z 2. třetiny k uspokojení všech pohledávek za náhradní výživné, uspokojí se tyto pohledávky podle poměru běžného výživného.) 

Nebylo-li by však částkou sraženou z 2. třetiny kryto ani běžné výživné všech oprávněných, rozdělí se mezi ně částka sražená z 2. třetiny poměrně podle výše běžného výživného bez ohledu na výši nedoplatků.

Pokud 2. třetina zbytku čisté mzdy nestačí k uspokojení přednostních pohledávek, převádí se část přednostních pohledávek do třetiny 1. A pak jsou-li srážky ze mzdy prováděny k vydobytí několika pohledávek, uspokojí se jednotlivé pohledávky z 1. třetiny zbytku čisté mzdy podle svého pořadí bez ohledu na to, zda jde o přednostní pohledávky, nebo o pohledávky ostatní. 

Přednostní pohledávky mají totiž prioritní povahu jen ve 2. třetině. Jestliže ta k uspokojení nestačí, jak už jsme naznačili, uspokojují se ještě z 1. třetiny, a to spolu s ostatními pohledávkami, avšak už jen podle svého pořadí. 

Pořadí pohledávek se přitom řídí dnem, kdy bylo plátci mzdy doručeno nařízení výkonu rozhodnutí (exekuce). Bylo-li mu doručeno téhož dne nařízení výkonu rozhodnutí pro několik pohledávek, mají tyto pohledávky stejné pořadí; nestačí-li částka na ně připadající k plnému uspokojení, uspokojí se poměrně.

Příklad poměrného uspokojení pohledávek

Shodou okolností byly zaměstnavateli doručeny dva exekuční příkazy pro přednostní i nepřednostní pohledávku téhož dne. 

Příslušná třetina zbytku čisté mzdy činí 5000 Kč. Přednostní pohledávka činí 90 000 Kč a nepřednostní 70 000 Kč. 

Pohledávky budou uspokojovány poměrně bez ohledu na to, že jedna je přednostní a jedna nepřednostní: Celková výše pohledávek je součtem 90 000 Kč + 70 000 Kč = 160 000 Kč. 

Vypočteme poměrné číslo jako podíl částky, z níž se sráží, tedy 5000 Kč a částky 160 000 Kč, což je 0,03125. Poměrným číslem vynásobíme částky obou pohledávek a dostaneme částku 2812,50 Kč ohledně přednostní pohledávky ve výši 90 000 Kč a částku 2187,50 Kč ohledně nepřednostní pohledávky ve výši 70 000 Kč, které budou ze mzdy sráženy.

Co je nad 29 310 Kč, se sráží plně ve prospěch věřitelů

Částka zbytku čisté mzdy přesahující částku, nad kterou se sráží bez omezení, tedy plně zabavitelná část zbytku čisté mzdy se připočte ke 2. třetině zbytku čisté mzdy v rozsahu, který je potřebný k uspokojení přednostních pohledávek; zbývající část se připočte k 1. třetině.

Při 4 nařízených exekucích, i když nejsou předností, se postupuje, jako by šlo o předností dluhy

Na nepřednostní pohledávky se použije toliko jedna třetina zbytku čisté mzdy, ovšem jen pokud jsou nařízeny pouze maximálně 3 exekuce; při 4 a více nařízených exekucích srážky probíhají ze dvou třetin zbytku čisté mzdy: Je-li v rámci exekuce sráženo ze mzdy toliko pro nepřednostní pohledávky, sráží se vždy jen z jedné třetiny (z 1. třetiny) zbytku čisté mzdy. 

Ze dvou třetin zbytku čisté mzdy (1. a 2. třetiny) se případně sráží v případě uspokojování přednostních pohledávek. Jsou-li však na mzdu povinného současně nařízeny nejméně 4 výkony rozhodnutí (exekuce) k vymožení splatných peněžitých pohledávek (a usnesení o nařízení výkonu rozhodnutí nebo usnesení obsahující vyrozumění o nařízení výkonu rozhodnutí bylo doručeno plátci mzdy, resp. jiného příjmu), pak se sráží ze dvou třetin zbytku čisté mzdy (čili 1. a 2. třetiny).

To však neplatí, doloží-li povinný plátci mzdy, že mu byl přiznán starobní důchod, invalidní důchod pro invaliditu 2. nebo 3. stupně nebo sirotčí důchod (anebo plátce důchodů zjistil ze své úřední činnosti, že dlužníkovi byl alespoň jeden z výše uvedených důchodů přiznán a srážky jsou prováděny z takového důchodu). 

Dochází-li ke srážení ze dvou třetin zbytku čisté mzdy z důvodu 4 a více exekučně vymáhaných pohledávek, pak se 2. třetina (zbytku čisté mzdy – jinak určená pro vydobytí přednostních pohledávek) přičte k 1. třetině (zbytku čisté mzdy – určené pro vydobytí nepřednostních pohledávek). 

Jsou-li však vedle nepřednostních pohledávek vymáhány i přednostní pohledávky, uspokojují se z 2. třetiny přednostní pohledávky a k 1. třetině se připočte (samozřejmě jen) zbývající část (z 2. třetiny).

Příklady

Srážky při souběhu 3 nepřednostních pohledávek a 1 přednostní (výživné), takže při nadlimitním počtu pohledávek (více jak 3 čili 4 a více), a bez uplatnění nezabavitelné částky na manželku

Ženatý zaměstnanec se 2 dětmi (z toho jedním ve vlastní péči) pobírá čistou mzdu 30 000 Kč. Jsou vůči němu nařízeny 4 exekuce realizované srážkami ze mzdy pro 3 nepřednostní pohledávky a 1 přednostní pohledávku – exekuci pro běžné výživné na dítě z prvního manželství s měsíční splátkou 4000 Kč. 

Základní nezabavitelná částka je součtem nezabavitelné částky na povinného dlužníka 13 026,67 Kč a (jen) 1 částky na vyživovanou osobu 3256,67 Kč (protože nezabavitelná částka na dítě, v jehož prospěch je nařízena srážka, se nepočítá a nově se nepočítá ani nezabavitelná částka na manželku), takže činí celkem 16 283,34 Kč čili po zaokrouhlení na celé koruny nahoru 16 284 Kč. 

Zbývá proto z čisté mzdy po odečtení základní nezabavitelné částky 13 716 Kč, které se rozdělí na 3 třetiny po 4572 Kč. 

Jedna třetina 4572 Kč bude sražena ve prospěch oprávněného věřitele s nepřednostní pohledávkou první v pořadí. 

Z další třetiny bude sraženo 4000 Kč pro přednostní pohledávku výživného, přičemž zbude 572 Kč. 

Tento zbytek 572 Kč se přičte ke třetině (4572 Kč) určené k uspokojení nepřednostní pohledávky. 

Celkem tedy bude sraženo 9144 Kč a z toho na výživné 4000 Kč a na nepřednostní pohledávku 5144 Kč. Povinnému dlužníkovi zůstává základní nezabavitelná částka 16 284 Kč + jedna třetina zbytku čisté mzdy 4572 Kč čili celkem 20 856 Kč

Jde-li o exekuci zahájenou po 1. 1. 2022, pak se částka sražená z 1. třetiny ve prospěch nepřednostní pohledávky sníží o 50 Kč paušální náhrady nákladů exekuce pro plátce mzdy.

Srážky při souběhu 3 nepřednostních pohledávek a 1 přednostní (výživné), takže při nadlimitním počtu pohledávek (více jak 3 čili 4 a více), ale současně při  uplatnění nezabavitelné částky na manželku

Ženatý zaměstnanec se 2 dětmi (z toho jedním ve vlastní péči) pobírá čistou mzdu 33 000 Kč. Jsou vůči němu nařízeny 4 exekuce realizované srážkami ze mzdy pro 3 nepřednostní pohledávky a 1 přednostní pohledávku – exekuci pro běžné výživné na dítě z prvního manželství s měsíční splátkou 4000 Kč.

Manželka zaměstnance je plně invalidní (pobírá invalidní důchod pro invaliditu 3. stupně), a proto bude započtena částka na vyživovanou osobu nejen na jedno z dětí, ale i na manželku. 

Základní nezabavitelná částka je součtem nezabavitelné částky na povinného dlužníka 13 026,67 Kč a 2 částek na vyživovanou osobu po 3256,67 Kč, a to na manželku a na jedno z dětí (nezabavitelná částka na druhé dítě, v jehož prospěch je nařízena srážka, se nepočítá)

Celková (základní) nezabavitelná částka tak činí 19 540,01 Kč čili po zaokrouhlení na celé koruny nahoru 19 541 Kč. 

Zbývá proto z čisté mzdy po odečtení základní nezabavitelné částky 13 459 Kč, které se rozdělí na 3 třetiny po 4486 Kč. A zbude 1 Kč. 

Jedna třetina 4486 Kč bude sražena ve prospěch oprávněného věřitele s nepřednostní pohledávkou první v pořadí. 

Z další třetiny bude sraženo 4000 Kč pro přednostní pohledávku výživného, přičemž zbude 486 Kč. Tento zbytek 486 Kč se přičte ke třetině (4486 Kč) určené k uspokojení nepřednostní pohledávky. 

Celkem tedy bude sraženo 8972 Kč a z toho na výživné 4000 Kč a na nepřednostní pohledávku 4972 Kč. Povinnému dlužníkovi zůstává základní nezabavitelná částka 19 541 Kč + jedna třetina zbytku čisté mzdy 4486 Kč a zbytek 1 Kč čili celkem 24 028 Kč

skoleni_12_6

Jde-li o exekuci zahájenou po 1. 1. 2022, pak se částka sražená z 1. třetiny ve prospěch nepřednostní pohledávky sníží o 50 Kč paušální náhrady nákladů exekuce pro plátce mzdy.

Další ilustrativní příklady exekučních srážek, když nejde o výživné, najdete v článku Některým dlužníkům v exekuci se nezabavitelné minimum v roce 2025 zvýšilo, jiným naopak snížilo.

Autor článku

Nenadávejte právníkům, zákony netvoří zdaleka jen oni. Oni je pak jen zašmodrchávají ve prospěch svých klientů, třeba zrovna vás. Budu se však snažit vám je vysvětlovat.

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