Nový Občanský zákoník - Díl 6 - Zájezd

Předpis č. 89/2012 Sb.

Vyhlášené znění

89/2012 Sb. Zákon občanský zákoník

Díl 6

Zájezd

Základní ustanovení

§ 2521

Smlouvou o zájezdu se pořadatel zavazuje obstarat pro zákazníka předem připravený soubor služeb cestovního ruchu (zájezd) a zákazník se zavazuje zaplatit souhrnnou cenu.

§ 2522

(1) Platí, že zájezd je soubor služeb cestovního ruchu, pokud je uspořádán na dobu delší než dvacet čtyři hodiny nebo zahrnuje-li přenocování a obsahuje-li alespoň dvě z těchto plnění:

a) ubytování,

b) dopravu,

c) jinou službu cestovního ruchu, která není doplňkem dopravy nebo ubytování a tvoří významnou část souboru nabízených služeb.

(2) Účtuje-li pořadatel jednotlivá dílčí plnění v rámci téhož zájezdu odděleně, nezprošťuje ho to povinností podle tohoto dílu.

§ 2523

(1) Za pořadatele se považuje ten, kdo nabízí zájezd veřejnosti nebo skupině osob podnikatelským způsobem, a to i prostřednictvím třetí osoby.

(2) Kdo zprostředkuje nebo zařídí jednotlivé služby cestovního ruchu, se považuje za pořadatele, vyvolá-li na základě zvláštních okolností u třetích osob představu, že služby cestovního ruchu poskytuje jako zájezd na vlastní odpovědnost.

§ 2524

Pořadatel sdělí zákazníkovi vhodným způsobem ještě před uzavřením smlouvy údaje o pasových a vízových požadavcích, lhůtách pro jejich vyřízení a sdělí mu také, jaké zdravotní doklady jsou pro cestu a pobyt požadovány.

Potvrzení zájezdu

§ 2525

(1) Pořadatel vydá zákazníkovi při uzavření smlouvy či bezprostředně po jejím uzavření doklad o smlouvě (potvrzení o zájezdu). Potvrzení o zájezdu vyžaduje písemnou formu.

(2) Je-li smlouva vyhotovena v písemné formě, nahradí její stejnopis potvrzení o zájezdu, obsahuje-li všechny náležitosti stanovené pro potvrzení o zájezdu.

(3) Obsahují-li smlouva i potvrzení o zájezdu údaje, které se liší, může se zákazník dovolat toho, co je pro něho výhodnější.

§ 2526

Spolu s potvrzením o zájezdu vydá pořadatel zákazníkovi doklad o svém pojištění podle jiného právního předpisu vystavený pojistitelem.

§ 2527

(1) Pořadatel v potvrzení o zájezdu uvede

a) označení smluvních stran,

b) vymezení zájezdu alespoň uvedením času jeho zahájení a ukončení a všech služeb cestovního ruchu zahrnutých do ceny zájezdu, jakož i místa jejich poskytnutí a doby jejich trvání,

c) údaj o ceně zájezdu včetně časového rozvrhu plateb a výše zálohy, jakož i o poplatcích, které nejsou zahrnuty do souhrnné ceny,

d) označení způsobu, jakým má zákazník uplatnit své právo z porušení povinnosti pořadatele včetně údaje o lhůtě, ve které může své právo uplatnit, a

e) výši odstupného, které zákazník pořadateli uhradí, v případech stanovených v § 2536.

(2) Pořadatel v potvrzení o zájezdu dále uvede, zahrnuje-li zájezd

a) další služby, jejichž cena není zahrnuta v ceně zájezdu, údaj o počtu a výši plateb za tyto služby,

b) ubytování, údaj o poloze, turistické kategorii, stupni vybavenosti, hlavních charakteristických znacích a souladu s právními předpisy příslušného státu,

c) dopravu, údaj o druhu, charakteristice a kategorii dopravního prostředku, jakož i údaj o trase cesty, a

d) stravování, údaj o jeho způsobu a rozsahu.

(3) Předal-li pořadatel zákazníkovi katalog, který obsahuje všechny stanovené údaje o vymezení zájezdu podle odstavce 1 písm. b), může pořadatel v potvrzení o zájezdu jen odkázat na číslo nebo jiné označení zájezdu v katalogu.

§ 2528

(1) Podmiňuje-li se uskutečnění zájezdu dosažením určitého počtu zákazníků, uvede to pořadatel v potvrzení o zájezdu výslovně a uvede i lhůtu, v níž musí zákazníkovi nejpozději oznámit zrušení zájezdu proto, že určeného počtu zákazníků nebylo dosaženo.

(2) Jsou-li důvody pro určení podmínek, které musí účastník zájezdu splňovat, uvede pořadatel v potvrzení o zájezdu, o jaké podmínky se jedná, a je-li toho třeba, uvede i lhůtu, ve které zákazník může oznámit, že se zájezdu místo něho zúčastní jiná osoba.

§ 2529

(1) Pořadatel doručí zákazníkovi vhodným způsobem nejpozději sedm dnů před zahájením zájezdu další podrobné a pro zákazníka důležité údaje o všech skutečnostech, které zná, nejsou-li již obsaženy ve smlouvě nebo v potvrzení o zájezdu, anebo v katalogu, který zákazníkovi předal.

(2) V rámci toho pořadatel sdělí zejména

a) upřesnění údajů stanovených v § 2527 odst. 2,

b) účastní-li se zájezdu nezletilý bez doprovodu osoby, která o něj pečuje, podrobnosti o možnosti spojit se s nezletilým nebo se zástupcem pořadatele v místě pobytu nezletilého,

c) údaje o osobě, na niž se lze během zájezdu obrátit v nesnázích s žádostí o pomoc, především jméno, adresu a číslo telefonu místního zástupce pořadatele a adresu a telefonní číslo zastupitelského úřadu.

(3) Vyžadují-li to okolnosti, předá pořadatel zákazníkovi v téže lhůtě letenku, poukaz k ubytování nebo stravování, doklad nutný pro poskytnutí fakultativních výletů nebo jiný doklad, jehož je pro uskutečnění zájezdu třeba.

(4) Je-li smlouva uzavřena v době kratší než sedm dnů před zahájením zájezdu, splní pořadatel povinnosti podle odstavců 1 a 3 již při uzavření smlouvy.

§ 2530

Změna ceny zájezdu

(1) Pořadatel může zvýšit cenu zájezdu z důvodů stanovených v odstavci 2, je-li to ve smlouvě ujednáno společně s přesně určeným způsobem výpočtu zvýšení ceny.

(2) Cenu zájezdu může pořadatel zvýšit, zvýší-li se do jedenadvacátého dne před sjednaným okamžikem zahájení zájezdu

a) cena za dopravu včetně cen pohonných hmot,

b) platby spojené s dopravou, jako jsou letištní, přístavní či jiné poplatky zahrnuté v ceně zájezdu, nebo

c) směnný kurs české koruny použitý pro stanovení ceny zájezdu v průměru o více než 10 %.

(3) Odešle-li pořadatel oznámení o zvýšení ceny zákazníkovi později než dvacátý první den před zahájením zájezdu, nemá zvýšení ceny právní účinky.

§ 2531

Změna smlouvy

(1) Nutí-li vnější okolnosti pořadatele změnit podmínky zájezdu, navrhne zákazníkovi změnu smlouvy. Má-li být v důsledku změny smlouvy změněna i cena zájezdu, uvede pořadatel v návrhu i výši nové ceny.

(2) Nesouhlasí-li zákazník se změnou smlouvy, má právo od smlouvy odstoupit; pořadatel může určit pro odstoupení přiměřenou lhůtu, která nesmí být kratší než pět dnů a musí skončit před zahájením zájezdu. Neodstoupí-li zákazník od smlouvy v určené lhůtě, platí, že se změnou smlouvy souhlasí.

§ 2532

Postoupení smlouvy

(1) Splňuje-li třetí osoba podmínky účasti na zájezdu, může jí zákazník smlouvu postoupit.

(2) Změna v osobě zákazníka je vůči pořadateli účinná, doručí-li mu postupitel o tom včas oznámení spolu s prohlášením postupníka, že s uzavřenou smlouvou souhlasí a že splní podmínky účasti na zájezdu. Oznámení je včasné, je-li doručeno alespoň sedm dnů před zahájením zájezdu; kratší lhůtu lze ujednat, je-li smlouva uzavřena v době kratší než sedm dnů před zahájením zájezdu.

(3) Postupitel a postupník jsou zavázáni společně a nerozdílně k zaplacení ceny zájezdu a k úhradě nákladů, které pořadateli v souvislosti se změnou zákazníka vzniknou.

Odstoupení od smlouvy

§ 2533

Zákazník může před zahájením zájezdu od smlouvy odstoupit vždy, avšak pořadatel jen tehdy, byl-li zájezd zrušen, anebo porušil-li zákazník svou povinnost.

§ 2534

(1) Odstoupil-li zákazník od smlouvy podle § 2531 odst. 2, nebo zrušil-li pořadatel zájezd z jiného důvodu než pro porušení povinnosti zákazníkem, nabídne pořadatel zákazníkovi náhradní zájezd celkově odpovídající alespoň tomu, co bylo původně ujednáno, pokud je v pořadatelových možnostech takový zájezd nabídnout.

(2) Dohodnou-li se strany o náhradním zájezdu, nemá pořadatel právo zvýšit cenu, i když je náhradní zájezd vyšší jakosti. Je-li náhradní zájezd nižší jakosti, vyplatí pořadatel zákazníkovi rozdíl v ceně bez zbytečného odkladu.

§ 2535

(1) Zruší-li pořadatel zájezd ve lhůtě kratší než dvacet dnů před jeho zahájením, uhradí zákazníkovi penále ve výši 10 % z ceny zájezdu. Právo zákazníka na náhradu škody tím není dotčeno.

(2) Pořadatel se zprostí povinností podle odstavce 1 důkazem, že zájezd byl zrušen v souladu s § 2528 odst. 1 nebo vzhledem k vyšší moci.

§ 2536

(1) Odstoupí-li od smlouvy zákazník z jiného důvodu, než je porušení povinnosti pořadatele, zaplatí pořadateli odstupné podle § 2527 odst. 1 písm. e). Stejné odstupné zákazník zaplatí, odstoupí-li od smlouvy pořadatel pro porušení povinnosti zákazníka.

(2) Odstoupí-li zákazník od smlouvy proto, že pořadatel porušil svou povinnost, nemá zákazník povinnost platit odstupné. To platí i tehdy, nebyl-li zákazníkovi poskytnut náhradní zájezd.

§ 2537

(1) Nemá-li zájezd vlastnosti, o nichž pořadatel zákazníka ujistil nebo které zákazník vzhledem k nabídce a zvyklostem důvodně očekával, zajistí pořadatel nápravu, pokud si nevyžádá neúměrné náklady.

(2) Nezjedná-li pořadatel nápravu ani v přiměřené lhůtě, kterou mu zákazník určí, může si zákazník zjednat nápravu sám a pořadatel mu nahradí účelně vynaložené náklady. Určení lhůty k nápravě není třeba, pokud pořadatel odmítl nápravu zjednat nebo vyžaduje-li se okamžitá náprava vzhledem k zvláštnímu zájmu zákazníka.

§ 2538

Vyskytnou-li se po odjezdu podstatné vady zájezdu a nepřijme-li pořadatel opatření, aby zájezd mohl pokračovat, nebo odmítne-li zákazník takové opatření z řádného důvodu, zajistí pořadatel na své náklady přepravu zákazníka na místo odjezdu, popřípadě na jiné ujednané místo.

§ 2539

(1) Nelze-li pokračování zájezdu zajistit jinak než prostřednictvím služeb cestovního ruchu nižší jakosti, než jakou určuje smlouva, vrátí pořadatel zákazníkovi rozdíl v ceně.

(2) Zajistí-li pořadatel pokračování zájezdu s vyššími náklady, jdou takové náklady k jeho tíži.

§ 2540

Má-li zájezd vadu a vytkl-li ji zákazník bez zbytečného odkladu, má zákazník právo na slevu z ceny ve výši přiměřené rozsahu a trvání vady. Nevytkl-li zákazník vadu zájezdu bez zbytečného odkladu vlastním zaviněním, soud mu právo na slevu z ceny nepřizná, jestliže pořadatel namítne, že zákazník své právo neuplatnil ani do jednoho měsíce od skončení zájezdu ani u něho, ani u osoby, která uzavření smlouvy zprostředkovala.

§ 2541

Pomoc v nesnázích

Ocitne-li se po zahájení zájezdu zákazník v nesnázích, poskytne mu pořadatel neprodleně pomoc.

Náhrada škody

§ 2542

Pořadatel odpovídá zákazníkovi za splnění povinností ze smlouvy o zájezdu bez zřetele na to, zda v rámci zájezdu poskytují jednotlivé služby cestovního ruchu jiné osoby.

§ 2543

(1) Při porušení povinnosti, za niž odpovídá, nahradí pořadatel zákazníkovi vedle škody na majetku také újmu za narušení dovolené, zejména byl-li zájezd zmařen nebo podstatně zkrácen.

(2) Odstoupí-li zákazník od smlouvy nebo uplatní-li právo z vady zájezdu, není tím dotčeno jeho právo na náhrady podle odstavce 1.

§ 2544

Umožňuje-li mezinárodní smlouva, kterou je Česká republika vázána, omezení výše náhrady škody vzniklé porušením povinnosti ze smlouvy o zájezdu, hradí pořadatel škodu jen do výše tohoto omezení, ujedná-li to ve smlouvě. To neplatí, byla-li škoda způsobena úmyslně nebo z hrubé nedbalosti.

Zahraniční školní pobyt

§ 2545

Je-li předmětem zájezdu pobyt žáka u hostitelské rodiny v jiném státě spojený s pravidelnou návštěvou školy ujednaný alespoň na dobu tří měsíců, zajistí pořadatel za součinnosti žáka jeho vhodné ubytování v hostitelské rodině, jakož i dohled nad ním a péči o něho podle obvyklých poměrů v zemi školního pobytu. Zároveň žákovi vytvoří předpoklady, aby mohl pravidelně navštěvovat školu.

§ 2546

(1) Pořadatel nemá právo na odstupné, odstoupí-li zákazník od smlouvy před zahájením školního pobytu proto, že mu pořadatel nesdělil ani v předstihu dvou týdnů

a) jméno a adresu hostitele, u něhož bude žák po příjezdu ubytován, a

b) jméno a adresu pověřené osoby (koordinátora) v zemi školního pobytu, u níž lze požadovat pomoc, a údaj o možnosti spojit se s ní.

(2) Pořadatel nemá právo na odstupné, pokud zákazník odstoupil od smlouvy proto, že pořadatel žáka na pobyt náležitě nepřipravil.

§ 2547

(1) Zákazník má právo odstoupit od smlouvy v průběhu školního pobytu; pořadateli náleží ujednaná odměna snížená o ušetřené náklady. Pořadatel učiní opatření nutná k dopravě žáka zpět; zákazník uhradí pořadateli zvýšené náklady s tím spojené.

(2) Právo na plnění podle odstavce 1 pořadatel nemá, odstoupil-li zákazník od smlouvy pro porušení pořadatelovy povinnosti.

Společné ustanovení

§ 2548

Zájezdem podle tohoto dílu není soubor služeb cestovního ruchu poskytnutý podnikateli za účelem jeho dalšího podnikání ani soubor služeb cestovního ruchu, jehož nabídka a poskytnutí není podnikáním.

§ 2549

Ujednání ve smlouvě, která se odchylují od ustanovení tohoto dílu v neprospěch zákazníka, jsou neplatná.

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); } } }
OSZAR »