Zákon o barvení a značkování některých uhlovodíkových paliv a maziv a o opatřeních s tím souvisejících, a o změně dalších zákonů (úplné znění)

Předpis č. 136/1994 Sb.

Znění od 1. 1. 2007

136/1994 Sb. Zákon o barvení a značkování některých uhlovodíkových paliv a maziv a o opatřeních s tím souvisejících, a o změně dalších zákonů

136

ZÁKON

ze dne 3. června 1994

o barvení a značkování některých uhlovodíkových paliv a maziv a o opatřeních s tím souvisejících, a o změně dalších zákonů

Parlament se usnesl na tomto zákoně České republiky:

ČÁST PRVNÍ

§ 1

Účel zákona

Tento zákon stanoví způsob a podmínky barvení a značkování některých uhlovodíkových paliv a maziv (dále jen "paliva a maziva") při jejich výrobě, zpracování a dovozu, a podmínky jejich nákupu a prodeje, skladování, dopravy a spotřeby, a sankce za jeho porušení.

§ 2

(1) Barveny a značkovány musí být, za podmínek dále stanovených, tato paliva a maziva1):

a) střední oleje uvedené pod kódem nomenklatury1a) 2710 19 29, těžké plynové oleje uvedené pod kódy nomenklatury 2710 19 41, 2710 19 45 a 2710 19 49 a těžké topné oleje uvedené pod kódy nomenklatury 2710 19 61, 2710 19 63, 2710 19 65 a 2710 19 69 mající alespoň dvě z těchto vlastností:

1. počátek destilace min. 150 oC, kdy do max. 350 oC musí být předestilováno min. 20 % objemu včetně ztrát,

2. hustotu při 15 oC min. 784 kg.m-3 a max. 913 kg.m-3,

3. kinematickou viskozitu při 20 oC min. 1,3 mm2.s-1 a při 40 oC max. 18 mm2.s-1,

b) mazací a ostatní oleje uvedené pod kódy nomenklatury 2710 19 71, 2710 19 75 a 2710 19 99 mající současně tyto dvě vlastnosti:

1. kinematickou viskozitu při 40 oC max. 12 mm2.s-1,

2. bod vzplanutí podle metody Penskyho a Martense nebo metodou v otevřeném kelímku (Cleveland) max. 150 oC.

(2) Barvena a značkována nesmějí být paliva a maziva, která mají vlastnosti uvedené v odstavci 1, jde-li o pohonné hmoty a maziva uvedené ve zvláštním právním předpisu1b) a petroleje, složky pro výrobu těch paliv a maziv, která se podle tohoto zákona nebarví a neznačkují, produkty pro specifické zpracování uvedené pod kódy nomenklatury 2710 19 11, 2710 19 31, 2710 19 51 a 2710 19 71 a produkty pro chemické zpracování uvedené pod kódy nomenklatury 2710 19 15, 2710 19 35, 2710 19 55 a 2710 19 75. Za takové chemické zpracování nelze pokládat využití uvedených produktů jako složky pro výrobu paliv a maziv mísením. Ministerstvo průmyslu a obchodu vydá vyhlášku, v níž stanoví seznam ropných výrobků, u nichž je barvení a značkování na závadu jejich použití, a proto nesmějí být barveny a značkovány.

(3) Barvena a značkována dále nemusí být ta paliva a maziva, která jsou určena pro dopravu z území České republiky do jiného členského státu Evropských společenství nebo pro vývoz do zemí, které nejsou členy Evropských společenství.

(4) Paliva a maziva uvedená v odstavci 1, která jsou určena pro vývoz, podléhají okamžikem vyskladnění4) celnímu režimu vývozu. Právnické a fyzické osoby, kterým jsou nebarvená a neznačkovaná paliva vyskladněna, jsou okamžikem takového vyskladnění povinny podat celní prohlášení příslušnému celnímu úřadu na propuštění zboží k vývozu. V případě neuskutečnění vývozu nebo zrušení celního režimu přímý tranzit oznámí příslušný celní úřad zrušení režimu vývozu nebo celního režimu přímý tranzit příslušnému finančnímu úřadu.

§ 3

Vymezení pojmů

Pro účely tohoto zákona se rozumí

a) výrobou a zpracováním paliv a maziv uskutečňování technologických postupů a pracovních operací, při kterých se získávají z ropy či z ropných komponentů paliva a maziva,

b) skladováním paliv a maziv jejich uschování či uskladnění,

c) dopravou paliv a maziv jejich dopravování v režimu podmíněného osvobození od spotřební daně nebo ve volném daňovém oběhu2),

d) dovozem paliv a maziv okamžik jejich vstupu na území Evropského společenství a následné propuštění do volného daňového oběhu nebo do režimu aktivního zušlechťovacího styku v systému navracení2a) pod celním dohledem,

e) nakládáním s palivy a mazivy jejich výroba, zpracování, dovoz, nákup a prodej, skladování, doprava a spotřeba,

f) příjemcem osoba, která přijímá paliva a maziva z jiných členských států Evropských společenství ve volném daňovém oběhu nebo v režimu podmíněného osvobození od spotřební daně2),

g) dovozcem osoba, která dováží paliva a maziva ze států, které nejsou členy Evropských společenství,

h) barvením a značkováním paliv a maziv definovaných v § 2 odst. 1 homogenní přimísení barviva a značkovací látky do paliv a maziv v daňovém skladu za účelem použití těchto paliv a maziv, s výjimkou použití pro pohon vznětových motorů.

§ 4

Barvení a značkování paliv a maziv

(1) Paliva a maziva musí být po celou dobu nakládání s nimi obarvena a označkována.

(2) Barvení a značkování paliv a maziv je povinen zajistit výrobce, a to homogenním přimísením barviva a značkovací látky stanovených zvláštním právním předpisem2b) do paliv a maziv. Barvení a značkování paliv a maziv může namísto výrobce zajišťovat také příjemce či dovozce nebo osoba, která tato paliva a maziva přijímá od výrobce v rámci území České republiky v režimu podmíněného osvobození od daně, a to homogenním přimísením barviva a značkovací látky do paliv a maziv v daňovém skladu za účelem použití těchto paliv a maziv, s výjimkou použití pro pohon vznětových motorů. Žádná jiná osoba není oprávněna provádět barvení a značkování paliv a maziv.

(3) Paliva a maziva podléhají posuzování z hlediska obsahu barviva a značkovací látky. Posuzování se provádí formou certifikace podle zvláštního zákona.3)

(4) Pokud výrobce, příjemce nebo osoba provádějící barvení a značkování paliv a maziv definovaných § 2 odst. 1 homogenním přimísením barviva a značkovací látky do paliv a maziv v daňovém skladu za účelem použití těchto paliv a maziv, s výjimkou použití pro pohon vznětových motorů, nebo dovozce nepředloží na vyžádání kontrolního orgánu příslušný certifikát, posuzuje se tato skutečnost jako porušení povinnosti barvení a značkování paliv a maziv. Ten, kdo měl paliva a maziva podle jejich určení vyvézt nebo dopravit, je-li již jejich vlastníkem, má v případě neuskutečnění tohoto vývozu nebo dopravy stejné povinnosti, jaké stanoví tento zákon výrobci, příjemci nebo osobě provádějící barvení a značkování paliv a maziv.

(5) Na paliva a maziva barvená a značená jinak, než je stanoveno tímto zákonem, se pohlíží jako na paliva a maziva nebarvená a neznačená.

(6) Výrobce a uživatel směsi barviva a značkovací látky2a) je povinen vést způsobem stanoveným vyhláškou Ministerstva průmyslu a obchodu2a) evidenci barviva a značkovací látky.

Povinnosti osob nakládajících s palivy a mazivy

§ 5

(1) Výrobce je povinen jím vyrobená paliva a maziva barvit a značkovat před jejich uvedením do volného daňového oběhu. Tato povinnost se vztahuje i na osobu provádějící barvení a značkování paliv a maziv homogenním přimísením barviva a značkovací látky do paliv a maziv v daňovém skladu za účelem použití těchto paliv a maziv, s výjimkou použití pro pohon vznětových motorů.

(2) Dovozce a příjemce je povinen zajistit, aby dovážená nebo dopravovaná paliva a maziva splňovala podmínky stanovené tímto zákonem ještě před jejich dovozem nebo dopravou na území České republiky.

(3) Právnické a fyzické osoby, které nakládají s palivy a mazivy, a to včetně těch, která se podle tohoto zákona nebarví a neznačkují (§ 2 odst. 2 a 3), jsou povinny

a) vyrábět, zpracovávat, nakupovat, prodávat, dopravovat, dovážet a skladovat paliva a maziva za účelem podnikání4a) jen na základě živnostenského oprávnění pro tuto činnost podle zvláštního zákona,5) s výjimkou výhradního nákupu, prodeje, dopravy a skladování paliv a maziv ve spotřebitelském balení do 50 kg na jeden kus balení,

b) umožnit kontrolním orgánům přístup do objektů, prostorů a zařízení používaných při nakládání s palivy a mazivy,

c) na vyžádání předložit kontrolním orgánům příslušnou dokumentaci a poskytnout jim pravdivé a úplné informace související s nakládáním s palivy a mazivy,

d) umožnit kontrolním orgánům odebrat v potřebném množství bezplatně vzorek paliva a maziva,

e) uhradit nezbytné výdaje spojené s provedením analýzy odebraného vzorku akreditovanou osobou6), bylo-li na jejím základě zjištěno porušení povinností stanovených tímto zákonem.

(4) Ten, kdo vyrábí, zpracovává, dopravuje, dováží, prodává nebo skladuje paliva a maziva, a to včetně těch, která se podle tohoto zákona nebarví a neznačkují (§ 2 odst. 2 a 3), je povinen vést a uchovávat způsobem stanoveným vyhláškou Ministerstva průmyslu a obchodu2a) evidenci o druzích a množství paliv a maziv, jejich výrobě, zpracování, dopravování, dovozu, prodeji a uskladnění.

(5) Právnické a fyzické osoby, které nakládají s palivy a mazivy, jež nesmějí být barvena a značkována, protože by barvení a značkování mohlo být na závadu pro jejich použití, jsou povinny

a) v průvodní dokumentaci a dokladech k palivům a mazivům výslovně uvést, že tato paliva a maziva nesmějí být použita pro pohon vznětových motorů,

b) mít v evidenci dokladů o koupi, distribuci a prodeji těchto paliv a maziv čestné prohlášení kupujícího, že barvení a značkování je na závadu určitého použití paliv a maziv a že neobarvených a neoznačkovaných paliv a maziv nebude použito jako paliva pro vznětové motory nebo k jeho přípravě,

c) uchovávat pro účely kontroly dokumentaci a doklady k těmto palivům a mazivům po dobu 6 let ode dne výroby, dovozu nebo nabytí těchto paliv a maziv.

§ 6

Není dovoleno

a) barvit a značkovat jiná paliva a maziva než ta, která určuje tento zákon,

b) provádět takové změny, které by vedly k omezení nebo odstranění barvení či značkování paliv a maziv, které bylo provedeno v souladu s tímto zákonem,

c) prodávat barvená a značkovaná paliva a maziva pro pohon motorových vozidel a motorů, s výjimkou stacionárních motorů a plynových turbin určených pro výrobu elektrické a tepelné energie,

d) dopravovat a skladovat barvená a značkovaná paliva a maziva v nádobě, která je ve spojení s motorem, jakož i stáčet je do takové nádoby nebo je užívat pro pohon motorového vozidla,

Kontrola

§ 7

Kontrolu dodržování povinností stanovených tímto zákonem, s výjimkou povinnosti stanovené v § 5 odst. 3 písm. a), jsou oprávněny vykonávat příslušné státní orgány (dále jen "státní orgán"), jimiž jsou

a) územní finanční orgány,7)

b) celní orgány,2)

c) Česká obchodní inspekce.8)

§ 8

(1) Provádění kontroly se řídí úpravou práv a povinností kontrolních pracovníků a kontrolovaných osob,10) nestanoví-li zvláštní zákon jinak.11)

(2) Analýzu vzorku odebraného paliva a maziva za účelem kontroly plnění povinností stanovených tímto zákonem jsou oprávněny provádět na požádání státních orgánů příslušné akreditované osoby6).11a)

Pokuty

§ 9

(1) Státní orgán uloží fyzické osobě, která je podnikatelem,12) nebo právnické osobě, která poruší povinnost stanovenou v § 4 odst. 4 a 6, § 5 odst. 1, 2, 4 a 5 nebo § 6, pokutu až do výše 50000000 Kč, nejméně však 20000 Kč. Za opětovné porušení povinnosti uloží státní orgán pokutu až do výše 100000000 Kč.

(2) Opětovným porušením povinnosti se rozumí porušení povinnosti, jehož se fyzická osoba, která je podnikatelem,12) nebo právnická osoba dopustila do jednoho roku od právní moci rozhodnutí o uložení pokuty za předchozí porušení povinnosti uvedené v odstavci 1.

(3) Pokutu lze uložit do jednoho roku ode dne, kdy státní orgán zjistil porušení povinnosti, nejdéle však do tří let ode dne, kdy k porušení povinnosti došlo.

(4) Při stanovení výše pokuty se přihlédne k závažnosti, způsobu, době trvání a následkům protiprávního jednání.

§ 10

(1) Státní orgán uloží fyzické osobě, která vlastní nebo užívá osobní motorové vozidlo se vznětovým motorem k jiným účelům než k podnikání, za úmyslné porušení povinnosti stanovené v § 6 písm. d) pokutu až do výše 2000 Kč. Pokutu lze uložit i opakovaně.

(2) Pokutu lze uložit do jednoho roku ode dne, kdy státní orgán zjistil porušení povinnosti, nejdéle však do tří let, kdy k porušení povinnosti došlo. Ustanovení § 9 odst.4 platí obdobně.

§ 11

(1) Státní orgán uloží fyzické osobě, která způsobila, že kontrolovaná osoba nesplnila povinnost stanovenou v § 5 odst.3 písm. b) až d) anebo jinak maří, narušuje nebo ztěžuje výkon kontroly, pořádkovou pokutu až do výše 500000 Kč.

(2) Pořádkovou pokutu lze uložit i opětovně.

(3) Pořádkovou pokutu lze uložit do 60 dnů ode dne, kdy státní orgán porušení povinnosti zjistil, nejdéle však do šesti měsíců ode dne, kdy k porušení povinnosti došlo.

§ 12

(1) Pokutu podle tohoto zákona vybírá státní orgán (§ 7), který ji uložil.

(2) Pokuta je příjmem státního rozpočtu.

(1) Pokud tento zákon nebo zvláštní zákonyo správním řízení.14)

§ 13

Součinnost státních orgánů

Zjistí-li státní orgán, že nakládání s palivy a mazivy se uskutečnilo v rozporu s tímto zákonem, sdělí takové zjištění všem státním orgánům uvedeným v § 7, příslušnému živnostenskému úřadu a Policii České republiky, pokud zvláštní zákon15) nestanoví jinak.

§ 14

Zmocňovací ustanovení

Ministerstvo průmyslu a obchodu vydá vyhlášku, ve které upraví

a) druh barviva a značkovací látky,

b) podrobnosti provádění barvení a značkování,

c) způsob odběru vzorků,

d) způsob vedení evidence o druzích a množství paliv a maziv, jejich výrobě, zpracování, dovozu, prodeji a uskladnění,

e) způsob vedení evidence o výrobě a užití barviva a značkovací látky,

f) seznam výrobků, které se nesmí barvit a značkovat vzhledem k účelu jejich použití (§ 2 odst. 2),

g) postup při kontrole barvení a značkování a způsob nakládání s odebraným vzorkem paliva a maziva do jeho předání příslušné akreditované osobě.

ČÁST DRUHÁ

Doplnění zákona č. 455/1991 Sb., o živnostenském podnikání (živnostenský zákon), ve znění pozdějších předpisů

§ 15

Zákon č. 455/1991 Sb., o živnostenském podnikání (živnostenský zákon), ve znění zákona č. 231/1992 Sb., zákona České národní rady č. 591/1992 Sb., zákona č. 273/1993 Sb., zákona č. 303/1993 Sb., zákona č. 38/1994 Sb. a zákona č. 42/1994 Sb., se doplňuje takto:

1. V § 58 odst. 1 se doplňuje nové písmeno e), které včetně poznámky č. 16) zní:

"e) výrobce paliv a maziv, u nichž je stanovena zvláštním zákonem16) povinnost barvení a značkování, nesplní tuto povinnost, dovozce těchto paliv a maziv nezajistí, aby tato paliva a maziva byla dovážena pouze přes celní přechody stanovené zvláštním zákonem16) a aby tato paliva a maziva byla obarvena a označkována před zahájením celního řízení o propuštění do volného oběhu, do režimu aktivního zušlechťovacího styku v systému navracení nebo přepracování pod celním dohledem,2) a to již při prvním porušení této povinnosti.

16) Zákon č. 136/1994 Sb., o barvení a značkování některých uhlovodíkových paliv a maziv a o opatřeních s tím souvisejících, o doplnění zákona č. 455/1991 Sb., o živnostenském podnikání (živnostenský zákon), ve znění pozdějších předpisů, zákona České národní rady č. 587/1992 Sb., o spotřebních daních, ve znění pozdějších předpisů, a o změně zákona České národní rady č. 588/1992 Sb., o dani z přidané hodnoty, ve znění pozdějších předpisů.".

2. Příloha č. 3 se doplňuje takto:

1 2 3 4 5
Výroba a zpracování paliv a maziv a) vysokoškolské vzdělání v oboru chemie a 5 let praxe v oboru
b) středoškolské vzdělání v oboru chemie zakončené maturitní zkouškou a 10 let praxe v oboru
Ministerstvo průmyslu a obchodu zákon č. 136/1994 Sb., o barvení a značkování některých uhlovodíkových paliv a maziv a o opatřeních s tím souvisejících, o doplnění zákona č. 455/1991 Sb., o živnostenském podnikání (živnostenský zákon), ve znění pozdějších předpisů, zákona ČNR č. 587/1992 Sb., o spotřebních daních, ve znění pozdějších předpisů, a o změně zákona ČNR č. 588/1992 Sb., o dani z přidané hodnoty, ve znění pozdějších předpisů
Nákup, prodej a skladování paliv a maziv včetně jejich dovozu s výjimkou výhradního nákupu, prodeje a skladování paliv a maziv ve spotřebitelském balení do 50 kg na jeden kus balení Ministerstvo průmyslu a obchodu zákon č. 136/1994 Sb.
Provozování čerpacích stanic s palivy a mazivy Ministerstvo průmyslu a obchodu zákon č. 136/1994 Sb.

ČÁST PÁTÁ

Přechodná a závěrečná ustanovení

§ 18

V činnosti, která se stává tímto zákonem koncesovanou živností, mohou fyzické a právnické osoby pokračovat po dobu šesti měsíců ode dne nabytí účinnosti tohoto zákona, a to na základě dosavadního oprávnění; uplynutím této lhůty však taková oprávnění zanikají.

§ 19

Tento zákon nabývá účinnosti dnem 1. července 1994.

Uhde v. r.

Havel v. r.

Klaus v. r.

1) Směrnice Rady č. 95/60/ES ze dne 27. listopadu 1995 o daňovém označování nafty a topného oleje.

1a) Nařízení Rady č. 2658/87/ES ze dne 23. července 1987 o celní a statistické nomenklatuře a o společném celním sazebníku.

1b) § 77 zákona č. 56/2001 Sb., o podmínkách provozu vozidel na pozemních komunikacích.

2) Zákon č. 353/2003 Sb., o spotřebních daních, ve znění pozdějších předpisů.

2a) Zákon č. 13/1993 Sb., celní zákon, ve znění pozdějších předpisů.

2b) Vyhláška č. 186/1996 Sb., kterou se stanoví podrobnosti barvení a značkování některých uhlovodíkových paliv a maziv, ve znění pozdějších předpisů.

3) § 10 odst. 1 zákona č. 22/1997 Sb., o technických požadavcích na výrobky a o změně a doplnění některých zákonů, ve znění zákona č. 205/2002 Sb.

4) § 2 písm. g) zákona ČNR č. 587/1992 Sb., o spotřebních daních, ve znění pozdějších předpisů.

4a) § 2 odst. 1 zákona č. 513/1991 Sb., obchodní zákoník.

5) Zákon č. 455/1991 Sb., o živnostenském podnikání (živnostenský zákon), ve znění pozdějších předpisů.

6) Zákon č. 22/1997 Sb.

7) Zákon ČNR č.531/1990 Sb., o územních finančních orgánech, ve znění pozdějších předpisů.

8) Zákon ČNR č.64/1986 Sb., o České obchodní inspekci, ve znění pozdějších předpisů.

9) § 1 odst. 2, § 2 odst. 1 zákona ČNR č. 283/1991 Sb., o Policii České republiky, ve znění pozdějších předpisů.

10) Zákon ČNR č. 552/1991 Sb., o státní kontrole, ve znění pozdějších předpisů.

11) Zákon ČNR č.337/1992 Sb., o správě daní a poplatků, ve znění pozdějších předpisů.
Zákon ČNR č.64/1986 Sb.
Zákon č. 22/1997 Sb.
Zákon ČNR č.531/1990 Sb.
Zákon ČNR č.283/1991 Sb.Zákon ČNR č. 13/1993 Sb., celní zákon, ve znění pozdějších předpisů.

11a) Zákon č. 20/1993 Sb., o zabezpečení výkonu státní správy v oblasti technické normalizace, metrologie a státního zkušebnictví.

12) § 2 odst. 2 obchodního zákoníku.

13) § 2 odst. 1 obchodního zákoníku.

14) Zákon č.71/1967 Sb., o správním řízení (správní řád).

15) Např. zákon č.337/1992 Sb., ve znění pozdějších předpisů.

Skrýt změny zákona Legenda text přidán text vypuštěn
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); } } }