Škoda 706 RTO je legenda, ale tahle verze je ještě vzácnější. Druhá taková tu nikdy nebyla

8 nových názorů
  • Zkratka RTO znamená Rekonstruovaný Trambusový Osobní 
  • Varianta Lux měla takzvané „bouchací“ dveře s ruční klikou
  • Na odlišnostech designu „Bruselu“ spolupracoval i Otakar Diblík

„Já jsem dostal ohromný dar, protože mám doma anděla,“ říká Libor Had, majitel čerstvě renovovaného RTO Lux, profesně strojvůdce a ze záliby ctitel velkých českých dopravních prostředků. Tím andělem myslí manželku Martinu, protože to prý je klasický případ, když ženská nechá chlapa hrát si. „Málokterá by to zkousla,“ dodává na samý začátek rozhovoru.

Stojíme před téměř jedenáctimetrovým oblým tělesem na šestici rozměrných kol. První, co padne znalému i neznalému do oka, je takzvaná barevná figura. Většina nás, pamětníků, si vybavuje škodovky 706 RTO v různých variantách pruhů, nejčastěji tmavočervených či modrých. Obyvatelé větších aglomerací se vozili v červeno-krémových městských „polomáčených“, jimž se takto říká po vzoru oblíbených sušenek: Ty byly do poloviny namáčené do čokolády, takže druhá polovina měla kontrastní „sušenkovou“ barvu. Ale tady, co je to vůbec za kombinaci?

Důkladná renovace trvala trojici nadšenců přibližně dvanáct let

Autor: David M. Bodlák

 V ohrádce na krytu „hrobky“ bývaly noviny a kožená brašna se svazky jízdenek a penězi, někdy i jízdní řád

Autor: David M. Bodlák

Světle šedivá střecha s přesahem přes sloupky až pod dolní hranu pásu oken. Stejně šedá spodní část od předních oblin vedle „usměvavé“ masky až po rozmarně vykrojenou ostruhu na bočních stranách za výřezy zadních kol… Mezi šedými plochami září pás bílé, ozvláštněný zajímavě pojatou nepravidelnou linkou vínové červeni… Určitě tady jiný takový nebyl, domníváme se. „Jo, to je pravda, a ani nemohl být,“ navazuje majitel: „Tohle je totiž jedna ze speciálních kombinací, určených pouze k veletržním účelům do Brna.“ Tak to je jiná, nakonec – pamatujeme z expozic někdejšího Mezinárodního strojírenského veletrhu Jawy „kývačky“ v mnoha pastelových barvách, třebaže z Mototechny si zákazník odvezl vždycky jen červenou. A s ostatními vozidly to bylo přesně tak: Výkladní skříň toho, čeho by byl náš průmysl schopný, kdyby měl možnost…

Historie RTO

Na fakta o světoznámém RTO se s odstupem doby nabalila taková vrstva polopravd, mýtů či vyslovených nesmyslů, že považujeme za povinnost podniknout krátký exkurs dějinami tohoto nezapomenutelného vozidla. Na podzim 1956 se otevřely brány II. Výstavy československého strojírenství v brněnském výstavním centru (tehdy se ještě přehlídka nenazývala veletrhem) a hloučky zvědavých a žasnoucích návštěvníků se hromadily u bohatě prosklených a barvami zářících busů. Některé lidé znali, především RO a „horský“ HB 500. Ale pak tu byla nejnovější konstrukce vysokomýtské Karosy, jejíž zaměstnanci ještě zažili slávu Josefa Sodomky ml. Vystaven byl prototyp 706 RTO. Byl to ten s prosklenými střešními díly nad řidičem a spolujezdcem, co si později zahrál titulní automobilovou roli v známém Machově snímku „Florenc 13.30“.

Zkratka RTO znamená Rekonstruovaný Trambusový Osobní, číslo 706 pocházelo ještě z předválečné doby a používalo se i u nákladních modelů a předchozího RO. Byla to doba hledání a rovněž jisté nevraživosti, protože své představy o novém výrobku měl i koncern LIAZ, ovšem jeho prototyp neměl ve srovnání s výsledkem práce Karosy šanci. O rok později měl premiéru městský RTO, na němž výrobce použil přední nápravu bez dělených kol; ten se hned nato podíval na předváděcí jízdy do severní Afriky. Rok 1958 proběhl ve znamení Světové výstavy Expo 1958 v Bruselu, což nás přivádí na stopu jedinečné výkladní skříně československého automobilového průmyslu: škodovky 706 RTO „Brusel“, přímého následníka legendárního poválečného RO Pullman.

Svezli jsme se legendárním dálkovým autobusem Š11 „Evropabus“: Na západ, soudruhu!
Přečtěte si také:

Svezli jsme se legendárním dálkovým autobusem Š11 „Evropabus“: Na západ, soudruhu!

Na odlišnostech designu „Bruselu“ spolupracoval i Otakar Diblík, který se do místa konání Expo osobně podíval, samozřejmě na sedadlech „svého“ speciálu. Ale to už ve vysokomýtské Karose naběhla sériová výroba všech verzí RTO. Které to byly? Především městské (tuzemské i exportní) RTO MTZ a RTO MEX, linkové RTO CAR (psané i KAR), pak zájezdové RTO Lux, ale i dílenské, servisní, přenosové, ambulanční, lékařské pro rentgeny či stomatologické ordinace, pojízdné prodejny, pošty, dále skříňové stěhovací RTO-S… A nesmíme vynechat ani ojedinělý kloubový RTO-K, bohužel v roce 1980 sešrotovaný. Z vozidel bez vlastního pohonu to pak byl návěsový přepravník osob NO 80. Do výčtu se ale nedá zařadit populární přívěs PO-1, jemuž se říkalo „babobus“, a po vyřazení z provozoven ČSAD dosluhoval v zemědělských družstvech. Ten byl výrobkem polského Jelcze stejně jako licenční 706 RTO. Oba výrobky byly do ČSSR dodávané. Poměrně častou praxí se stávalo rovněž nahrazení poškozené nebo opotřebované karoserie 706 RO novou RTO, takže vzniklou kombinaci mohl zasvěcený poznat prakticky jen podle rozměrnějších ráfků. Vozům se říkalo RTO-P (přestavba). Škála úprav „erťáků“ u jejich dalších majitelů je tak široká, že se tímto tématem zabývat nemůžeme, tak jen okrajově: RTO vozily hudební skupiny a jejich aparatury, sloužily jako pojízdné stravovny, velmi rozšířené byly přepravníky závodních aut a motocyklů, zajímavé nasazení určitě prožily RTO v tehdejší československé armádě, samozřejmě v příslušném vojenském zbarvení.

RTO a jeho konstrukce

Něco málo konstrukčních detailů: Na šasi s motorem, vyráběné závodem LIAZ, se ve Vysokém Mýtu montovala karoserie polosamonosného provedení s elektricky svařovanou ocelovou kostrou, opláštěnou plechovými výlisky. Vstup do vozu zajišťovaly zamykací dveře pro řidiče a jedny či dvoje boční vstupní dveře pro cestující. Městská provedení s řízeným pohybem pasažérů měla dvoje dveře s elektropneumatickým ovládáním (dvoudílné či čtyřdílné). To linkové poznáte podle jednoho vstupu pro cestující s elektropneumatickým ovládáním. A konečně Lux měl takzvané „bouchací“ s ruční klikou. Ovšem jak bylo v československých podmínkách běžnou praxí, výpadky subdodavatelů občas působily potíže při kompletaci, takže jsou známé i případy různých výbavových kombinací.
Interiér měl podlahu krytou linoleem a vnitřní bočnice umakartové (nábytkářský lisovaný laminát). Dálkový model mohl mít ukotvení sedadel na vyvýšené ploše. Mezi dvojice sedadel linkové verze se daly zaklesnout přídavné sedačky a záchytný zádový pás, které o několik míst zvýšily kapacitu, ovšem zcela zneprůchodnily uličku a sezení na nich bylo nepříjemné. Většina pamětníků tuto praxi zná ze školních výletů či lyžařských zájezdů.

Čím vyplést držáky zavazadel, aby něco udržely? Našlo se nevšední řešení – červená žací struna

Autor: David M. Bodlák

RTO musel časem ve své mateřské továrně uvolnit místo modernějším řadám Šx. Výroba ale již běžela v polském Jelczi, odkud vyjížděly až do konce roku 1977. Další RTO opouštěly montovnu SVA Holýšov. Bez hlučných, občas kouřících, občas roztřesených, ale oblíbených škodovek 706 RTO si neumíme představit obrázek československé silniční dopravy po více než čtvrt století. Jejich poslední výkony v provozovnách ČSAD se datují až v polovině 80. let na Moravě. RTO samozřejmě byly i významným exportním artiklem. Podle požadavků podniku zahraničního obchodu Motokov, který měl v gesci veškeré kontrakty na silniční vozidla, výrobce reagoval i na odlišné specifikační požadavky zahraničních partnerů, které se týkaly převážně počtu sedadel, barevných provedení, dveří či oken. Velkými odběrateli byly kromě evropských, tzv. „socialistických“ států i některé země Afriky, Asie nebo i Kuba, kde jich několik jezdí dodnes.

Renovovaný Lux

Současnosti se dožilo překvapivě velké množství 706 RTO. Můžeme se s nimi setkat nejen na speciálních autobusových srazech, ale najímají si je i firmy či jednotlivci k výjimečným příležitostem. Je tu ovšem jedno velké ALE: Chápeme, že provozovatelé chtějí vozit pasažéry, třebaže to nikdy nebude lukrativní a tímto způsobem se jim nemohou vrátit prostředky vložené do pracných renovací. Je sice krásné, že se na akci sjede třicet autobusů, ale jsou to pořád jen osobní. Kde zůstaly pojízdné prodejny, laboratoře a další užitkové varianty? Prozradíme vám to: Až na výjimky byly všechny přestavěny na běžné busy. A to je velká škoda a zároveň odchylka od dobového koloritu či obrazu různorodosti našich tehdejších silnic. Ještě pořád s tím jde něco udělat, ještě pořád – takže se přimlouváme hlasem nás všech, kteří potkávali pestrobarevné prodejní speciály Jednoty, šedo-modré autobusové pošty, třásli se při představě ječící zubní vrtačky či tiskli dětské hrudníčky na studený štít rentgenového snímkovacího zařízení.

Pamětníci si určitě vzpomenou, že se dal Lux rozjet i na stovku a „natřel“ to skoro všem

Autor: David M. Bodlák

Od vzpomínek rovnou k renovovanému Luxu, za jehož tříramenným bílým volantem sedí Libor. Jako barevné šátky z babiččiny truhly se vynořují vzpomínky na dětství, evokované modrou autobusáckou čepicí vedle kulaté „kapličky“ hodin, dlouhou pákou odlehčovací brzdy, po jejímž posunutí dostal agregát zajímavý a „jiný“ zvuk (blíž jsme to jako děti definovat neuměli), objemným krytem motoru (občas zvaným Hrobka), předním pravým sedadlem, na němž sedávala během jízdy na výlet paní (a později soudružka) učitelka, „protekční“ dvojicí sedadel hned vedle „hrobky“, většinou obsazovaných kolegy autobusáky, vracejícími se domů, nebo kamarády řidiče, první řadou sedadel hned za dveřmi, na nichž sedávali ti, kterým na nemilé reflexy nepomohly ani tablety Kinedrylu, či síťkami, jimiž občas protékaly na naše dětské hlavy špatně uzavřené láhve s limonádou.

Rádio mělo rozvod do několika stropních reproduktorů, ale ten už často nefungoval

Autor: David M. Bodlák

Pod krytem motoru trůní velký vznětový šestiválec, který dovede v létě i přes izolaci prostor kolem řidiče pořádně rozpálit. „To je lodní motor,“ upozorňuje Libor, protože jinak to není podle čeho poznat. I jeho zvuk je tentýž, ale ten původní se tam po opravě nastěhuje zpátky. Všechno se leskne a voní. Takhle to asi vonělo v interiéru veletržního vozidla při přípravě na nápor diváků. Říkáme si, že tohle snad nemůže stihnout jediný člověk, pokud se má věnovat ještě i rodině a má časově náročné zaměstnání. „Jasně, že ne! Tohle je společná práce, bez kluků bych měl v hale pořád ještě rozdělanou kupu součástek a nikdy bych s tím nehnul,“ dodává majitel. A tak se dovídáme o trojici, kterou spolu s ním tvoří i Michal Kouba a Martin Šmíd. O jejich vzájemně sladěných představách, a hlavně o stovkách a stovkách hodin, které strávili v zimě a horku, v prachu i poletující rzi. Takto se rodí kamarádství. Společně dohotovený kus práce má cenu zlatého pečetidla, otištěného do vosku společnou rukou.

Předválečný autobus Škoda 532 mohl změnit zavedené pořádky v hromadné dopravě. Stal se však jednou z mnoha obětí války
Přečtěte si také:

Předválečný autobus Škoda 532 mohl změnit zavedené pořádky v hromadné dopravě. Stal se však jednou z mnoha obětí války

Chcete nějaký ten renovační postřeh z odstupu mnoha let? Tady je: „Několikrát jsem dostal takový vztek, až jsem si říkal, že to ještěrkou vytáhnu a na dvoře zapálím! Asi třikrát jsem si dal inzerát, že to rozpracovaný prodám! A manželka tenkrát řekla, že ne, že už to dodělám, ať si prý nemyslím, že do něčeho budu cpát osm let peníze a ona se pak nesveze, tak to prý ani náhodou! Moc nám pomohlo, že jsme aspoň ty hlavní věci mohli dělat v hale v teple. Hlavně po celodenní šichtě v práci, když jsem se pak kolem erťáku točil do čtyř do rána…“

Odpružené sedadlo představovalo jednu z mála komfortních položek řidičova pracoviště

Autor: David M. Bodlák

A tak se naposledy usazujeme do vysokých, červeno-bíle čalouněných sedadel, abychom si v duchu přehráli fiktivní dokument, v němž „náš“ Lux duní po úzké dlážděné vozovce počátku 60. let a za společníky má rozkvetlé stromy, červené střechy vesnických stavení a žluté směrové tabule s černým písmem, za své souputníky pak naleštěné Octavie, Čezety, Hillmany, šestsettrojky a Simky nebo upracované Zetory, tatrovky a ereny – prostě nikdy nekončící příběh stroje a lidí, kteří jej tvořili, používali, odložili a znovu přivedli k životu.

Prosíme majitele o závěrečné slovo: „Víš, kdy nám to všechno teprve došlo? Když jsme ten hotový autobus vytáhli z haly na boží světlo, a jak se to všechno lesklo, tak Michal (Kouba) povídá: To je kus, viď? A já na to: Neuvěřitelnej…“

Foto: David M. Bodlák, archiv Libora Hada


Škoda 706 RTO Lux (1961)
MOTOR & PŘEVODOVKA
Typ: vznětový řadový šestiválec,
uložený vpředu podélně
Zdvihový objem (cm3): 11780
Největší výkon (kW (k)/ot.min-1): 118 (160)/1900
Točivý moment (Nm /ot.min-1): 686/1200
Převodovka pětistupňová manuální
ROZMĚRY & HMOTNOSTI
Délka x šířka x výška (mm): 10 810 × 2500 × 2980
Rozvor náprav (mm): 5450
Hmotnost (kg): 8680
Nádrž (l): 350
DYNAMIKA & SPOTŘEBA
Nejvyšší rychlost (km/h): 85
Spotřeba (l/100 km): 24
Slavomír (neregistrovaný)
Oprava.Motorová brzda se u pozdějšího typu ŠD,ŠM ,ŠL ovládala nožním spínačem na podlaze pod sedačkou řidiče.Tlačítko modré v chybném popisu mém bylo ovládání uzávěrky diferenciálu.
Slavomír (neregistrovaný)
V desce s rádiem a zesilovačem chybí mikrofon ,který měl rozšířený tvar pro založení zpět do desky.Kabel byl tak schovaný pod deskou.Vidět byla jen hlavice mikrofonu.Pozdější provedení mikrofonu u ŠD bylo formou mikrofonu na pevném,ohebném,tzv.husím krku,pro možnost použití mikrofinu řidičem za jízdy.
Slavomír (neregistrovaný)
Uvnitř vozu na straně pravé od motoru chybí zařízení pro zimní startování.Bajonet pro lahvičku s éterem ,který se proražením uzávěru lahvičky táhlem dostal do sání motoru a pomohl nastartovat v zimním období.Otvory topení měly v části vývodu u řidiče i spolujezdce krycí klapky.
Slavomír (neregistrovaný)
Uvnitř vozu na straně pravé od motoru chybí zařízení pro zimní startování.Bajonet pro lahvičku s éterem ,který se proražením uzávěru lahvičky táhlem dostal do sání motoru a pomohl nastartovat vvzimním období.Otvory topení měly v části vývodu u řidiče i spolujezdce krycí klapky.
Slavomír (neregistrovaný)
Páka pod hodinami je ,,motorová brzda".Pozdější typ se ovládal již elektricky tlačítkem čtvercovým ,modrým(nafta)nalevo od volantu v přístrojové desce.
Slavomír (neregistrovaný)
Výhody RTO.Nejjednodužší opravy motoru,díky samostatnému rámu motoru,který se mohl vysunout dopředu po kolejnici mimo karoserii.Nezamrzající brzdový systém.Vozy se daly i v mrazu nastartovat.Nevýhody.Malý objem zavazadlového prostoru.Odpružená sedačka řidiče pouze mechanicky.Pružinou.Škoda 706 RTO Lux je poslední řadou výroby autobusů v Karose Vysoké Mýto s klasickou mechanickou techmologií.Inovace ve formě pozdější výroby řady ŠM,ŠD,ŠL již zaostávaly za kvalitou a zpracováním ,oproti světovým,ostatním výrobcům.
Slavomír (neregistrovaný)
Přesně tak..Pojem rekonstruovaný můžete uvést pouze ve spojení s případem,kdy byl autobus RTO v generální opravě.Jednalo se výměnu karoserie a úpravu motoru.Provádělo se v podniku Opraven kolových vozidel v Poličce.Osobně jsem v roce 1973 byl s otcem,jako řidičem !vyzvednout z dílen jeho autobus.Po GO(generální opravě),byly vozy označeny nad středovým sloupkem předního skla okrovou tečkou velikosti 5cm.Nešlo tedy již o originální vyrobený vůz.Dnešní forma oprav není podle dílenských norem původního provozování oprav a může tak i konstrukčně docházet k chybám .
  • Našli jste v článku chybu?
'; 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'; } }
'; 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 »