YouTubeMoreSpeedsNoAds

The stable version with a toggle switch for 18+ Mode, polished player, and full ad-blocking.

// ==UserScript==
// @name         YouTubeMoreSpeedsNoAds
// @namespace    http://tampermonkey.net/
// @version      1.3.0
// @description  The stable version with a toggle switch for 18+ Mode, polished player, and full ad-blocking.
// @author       SharpRoma's modifyed GoodTube script
// @match        *://m.youtube.com/*
// @match        *://www.youtube.com/*
// @match        *://youtube.com/*
// @exclude      *://*.youtube.com/shorts/*
// @icon         https://cdn-icons-png.flaticon.com/256/1384/1384060.png
// @run-at       document-start
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
	'use strict';

    if (window.location.pathname.startsWith('/shorts/')) return;

    // --- IFRAME LOGIC (Expanded for Ultimate Mode) ---
	if (window.top !== window.self) {
		const initIframe = () => {
			const player = document.getElementById('movie_player');
			if ((player && typeof player.getVideoData === 'function' && player.getVideoData().video_id) || window.location.href.includes('/v/')) {
                let cssRules = '';
                const currentUrl = window.location.href;

                if (currentUrl.includes('/embed/')) {
                    cssRules = `
                        .ytp-chrome-top, .ytp-watch-on-youtube-button, .ytp-share-button,
                        .ytp-watch-later-button, .ytp-error-content-wrap, .ytp-youtube-button,
                        .ytp-impression-link, .ytp-endscreen-content { display: none !important; }`;
                } else if (currentUrl.includes('/v/')) {
                    cssRules = `
                        .video-ads, .ytp-ad-module, .ytp-ad-overlay-container, ytd-ad-slot-renderer { display: none !important; }
                        #masthead-container, #page-manager > ytd-browse, ytd-miniplayer, #comments, #secondary, #meta,
                        ytd-watch-metadata, #panels, #info-contents, #info > #menu, #info > #button-shape,
                        ytd-video-primary-info-renderer .ytd-video-owner-renderer, #subscribe-button,
                        .ytd-video-primary-info-renderer .yt-spec-button-shape-next--tonal, .ytp-chrome-top .ytp-youtube-button {
                            display: none !important;
                        }
                        ytd-watch-flexy { --ytd-watch-flexy-sidebar-width: 0px !important; min-width: 0 !important; }
                        #player-container.ytd-watch-flexy, #player.ytd-watch-flexy { min-height: 100vh !important; padding-bottom: 0 !important; }
                        #page-manager.ytd-app { margin-top: 0 !important; }
                        #player { min-height: 100vh !important; }`;

                    setInterval(() => {
                        const adShowing = document.querySelector('.ad-showing, .ad-interrupting');
                        if (adShowing) {
                            const video = document.querySelector('video');
                            if (video) {
                                video.muted = true;
                                video.playbackRate = 16;
                                if(video.duration) video.currentTime = video.duration;
                            }
                            const skipButton = document.querySelector('.ytp-ad-skip-button, .ytp-ad-skip-button-modern');
                            if (skipButton) skipButton.click();
                        }
                    }, 200);
                }
				const style = document.createElement('style'); style.textContent = cssRules; document.head.appendChild(style);
				window.addEventListener('message', (event) => {
					if (typeof event.data !== 'string') return;
					if (event.data.startsWith('goodTube_setSpeed_')) {
						const speed = parseFloat(event.data.replace('goodTube_setSpeed_', ''));
						const video = document.querySelector('video');
						if (video && !isNaN(speed)) {
                            if(!document.querySelector('.ad-showing, .ad-interrupting')) {
                                video.playbackRate = speed;
                            }
                        }
					}
				});
			} else { setTimeout(initIframe, 100); }
		};
		initIframe();
		return;
	}


    // --- MAIN PAGE LOGIC (Based on original working script) ---
    function waitForKeyElements(selectorOrFunction, callback, waitOnce = true, interval = 300, maxIntervals = -1) {
        let targetNodes = (typeof selectorOrFunction === "function") ? selectorOrFunction() : document.querySelectorAll(selectorOrFunction);
        let targetsFound = targetNodes && targetNodes.length > 0;
        if (targetsFound) {
            targetNodes.forEach(function(targetNode) {
                const attrAlreadyFound = "data-userscript-alreadyFound";
                const alreadyFound = targetNode.getAttribute(attrAlreadyFound) || false;
                if (!alreadyFound) {
                    const cancelFound = callback(targetNode);
                    if (cancelFound) { targetsFound = false; }
                    else { targetNode.setAttribute(attrAlreadyFound, true); }
                }
            });
        }
        if (maxIntervals !== 0 && !(targetsFound && waitOnce)) {
            maxIntervals -= 1;
            setTimeout(function() {
                waitForKeyElements(selectorOrFunction, callback, waitOnce, interval, maxIntervals);
            }, interval);
        }
    }
	if (window.trustedTypes && window.trustedTypes.createPolicy && !window.trustedTypes.defaultPolicy) {
		window.trustedTypes.createPolicy('default', {
			createHTML: string => string, createScriptURL: string => string, createScript: string => string
		});
	}

	let goodTube_page_api = false;
	function goodTube_helper_setupGetParams() {
		let getParams = {};
		document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
			function decode(s) { return decodeURIComponent(s.split("+").join(" ")); }
			getParams[decode(arguments[1])] = decode(arguments[2]);
		});
		if (typeof getParams['list'] !== 'undefined' && typeof getParams['v'] === 'undefined') {
			if (goodTube_page_api && typeof goodTube_page_api.getVideoData === 'function') {
				let videoData = goodTube_page_api.getVideoData();
				if (typeof videoData['video_id'] !== 'undefined' && videoData['video_id']) { getParams['v'] = videoData['video_id']; }
			}
		}
		return getParams;
	}
	function goodTube_helper_setCookie(name, value) { document.cookie = name + "=" + encodeURIComponent(value) + ";max-age=" + (399 * 24 * 60 * 60); }
	function goodTube_helper_getCookie(name) {
		let cookies = document.cookie.split(";");
		for (let i = 0; i < cookies.length; i++) {
			let cookie = cookies[i].split("=");
			if (name == cookie[0].trim()) { return decodeURIComponent(cookie[1]); }
		}
		return null;
	}
	function goodTube_helper_showHide_init() {
		let style = document.createElement('style');
		style.textContent = `
			.goodTube_hidden { position: fixed !important; top: -9999px !important; left: -9999px !important; transform: scale(0) !important; pointer-events: none !important; }
			.goodTube_hiddenPlayer { position: relative; overflow: hidden; z-index: 1; }
			.goodTube_hiddenPlayer::before { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: #ffffff; z-index: 998; }
			html[dark] .goodTube_hiddenPlayer::before { background: #0f0f0f; }`;
		document.head.appendChild(style);
	}
	function goodTube_helper_hideElement(element) { if (element && !element.classList.contains('goodTube_hidden')) { element.classList.add('goodTube_hidden'); } }
	function goodTube_helper_showElement(element) { if (element && element.classList.contains('goodTube_hidden')) { element.classList.remove('goodTube_hidden'); } }
	function goodTube_helper_hideYoutubePlayer(element) {
		if (element && !element.closest('.goodTube_hiddenPlayer')) {
			let parent = element.parentNode;
			let wrapper = document.createElement('div');
			wrapper.classList.add('goodTube_hiddenPlayer');
			parent.replaceChild(wrapper, element);
			wrapper.appendChild(element);
		}
	}

	let goodTube_getParams = goodTube_helper_setupGetParams();
	let goodTube_mobile = false;
	if (window.location.href.indexOf('m.youtube') !== -1 || (typeof goodTube_getParams['mobile'] !== 'undefined' && goodTube_getParams['mobile'] === 'true')) { goodTube_mobile = true; }
	let goodTube_playerWrapper = false;
	let goodTube_player = false;
	let goodTube_iframe_api = false;
	let goodTube_pip = false;
	let goodTube_autoplay = goodTube_helper_getCookie('goodTube_autoplay');
	if (!goodTube_autoplay || goodTube_mobile) {
		goodTube_helper_setCookie('goodTube_autoplay', 'true');
		goodTube_autoplay = 'true';
	}

    let moreSpeedsInterval = null;
    function addMoreSpeedsButtons() {
        const titleElemSelector = 'div#title.style-scope.ytd-watch-metadata';
        const titleElem = document.querySelector(titleElemSelector);
        if (titleElem && document.getElementById('more-speeds')) { return; }
        if (!titleElem) { return; }
        const moreSpeedsDiv = document.createElement('div');
        moreSpeedsDiv.id = 'more-speeds';
        moreSpeedsDiv.style.marginTop = '8px';
        moreSpeedsDiv.style.display = 'flex';
        moreSpeedsDiv.style.alignItems = 'center';
        for (let i = 1; i < 4.25; i += 0.25) {
            const btn = document.createElement('button');
            btn.style.cssText = "background-color:#333; margin-right:4px; border:1px solid #555; border-radius:12px; padding:4px 8px; color:#fff; cursor:pointer; font-family:Roboto, Arial, sans-serif; font-size:12px;";
            btn.textContent = '×' + i.toFixed(2);
            btn.addEventListener('click', () => {
                if (goodTube_player && goodTube_player.contentWindow) { goodTube_player.contentWindow.postMessage('goodTube_setSpeed_' + i, '*'); }
                localStorage.setItem('yt-speed-' + location.href, i);
            });
            moreSpeedsDiv.appendChild(btn);
        }
        const separator = document.createElement('span');
        separator.textContent = '|';
        separator.style.cssText = "margin:0 8px; color:#888;";
        moreSpeedsDiv.appendChild(separator);
        const is18PlusMode = localStorage.getItem('yt-18+mode-' + goodTube_getParams.v) === 'true';
        const switchLabel = document.createElement('label');
        switchLabel.title = 'Toggle 18+ Mode if video is age-restricted';
        switchLabel.style.cssText = "display:flex; align-items:center; cursor:pointer; font-family:Roboto,Arial,sans-serif; font-size:12px; color: #aaa;";
        switchLabel.textContent = '18+ Mode';
        const switchInput = document.createElement('input');
        switchInput.type = 'checkbox';
        switchInput.checked = is18PlusMode;
        switchInput.style.cssText = "display:none;";
        const switchSpan = document.createElement('span');
        switchSpan.style.cssText = `position:relative; width:34px; height:14px; background-color:${is18PlusMode ? '#8B0000' : '#ccc'}; border-radius:14px; transition:background-color .2s; margin-left:8px;`;
        const switchHandle = document.createElement('span');
        switchHandle.style.cssText = `position:absolute; content:''; height:20px; width:20px; left:${is18PlusMode ? '16px' : '-2px'}; top:-3px; background-color:white; border-radius:50%; transition:left .2s; box-shadow: 0 1px 3px rgba(0,0,0,0.4);`;
        switchSpan.appendChild(switchHandle);
        switchLabel.appendChild(switchInput);
        switchLabel.appendChild(switchSpan);
        switchLabel.addEventListener('click', (e) => {
            e.preventDefault();
            const newState = !switchInput.checked;
            switchInput.checked = newState;
            localStorage.setItem('yt-18+mode-' + goodTube_getParams.v, newState);
            goodTube_player_load(newState);
            switchSpan.style.backgroundColor = newState ? '#8B0000' : '#ccc';
            switchHandle.style.left = newState ? '16px' : '-2px';
        });
        moreSpeedsDiv.appendChild(switchLabel);
        titleElem.after(moreSpeedsDiv);
        restoreSpeed();
        if (moreSpeedsInterval) clearInterval(moreSpeedsInterval);
        moreSpeedsInterval = setInterval(restoreSpeed, 1000);
    }
    function restoreSpeed() {
        const savedSpeed = localStorage.getItem('yt-speed-' + location.href);
        if (savedSpeed) {
            if (goodTube_player && goodTube_player.contentWindow) {
                 goodTube_player.contentWindow.postMessage('goodTube_setSpeed_' + parseFloat(savedSpeed), '*');
            }
        }
    }
    function removeMoreSpeedsButtons() {
        const buttons = document.getElementById('more-speeds');
        if (buttons) { buttons.remove(); }
        if (moreSpeedsInterval) { clearInterval(moreSpeedsInterval); moreSpeedsInterval = null; }
    }

	function goodTube_youtube_hideAdsShortsEtc() {
		let style = document.createElement('style');
		style.textContent = `
			.ytd-search ytd-shelf-renderer, ytd-reel-shelf-renderer, ytd-merch-shelf-renderer, ytd-action-companion-ad-renderer,
			ytd-display-ad-renderer, ytd-rich-section-renderer, ytd-video-masthead-ad-advertiser-info-renderer,
			ytd-video-masthead-ad-primary-video-renderer, ytd-in-feed-ad-layout-renderer, ytd-ad-slot-renderer,
			ytd-statement-banner-renderer, ytd-banner-promo-renderer-background,
			ytd-engagement-panel-section-list-renderer:not(.ytd-popup-container):not([target-id='engagement-panel-clip-create']),
			.ytd-video-masthead-ad-v3-renderer, div#player-ads.style-scope.ytd-watch-flexy,
			ytd-compact-movie-renderer, masthead-ad, ad-slot-renderer,
			ytd-enforcement-message-view-model, tp-yt-paper-dialog { display: none !important; }`;
		document.head.appendChild(style);
    }
	function goodTube_youtube_hideShorts() {
		if (window.location.href.indexOf('@') !== -1) { return; }
		let shortsLinks = document.querySelectorAll('a:not(.goodTube_hidden)');
		shortsLinks.forEach((element) => {
			if (element.href.indexOf('shorts/') !== -1) {
				goodTube_helper_hideElement(element.closest('ytd-rich-item-renderer, ytd-video-renderer, ytd-compact-video-renderer, ytd-rich-grid-media'));
			}
		});
    }
	function goodTube_youtube_timestampLinks() {
        let timestampLinks = document.querySelectorAll('#description a, ytd-comments .yt-core-attributed-string a, ytm-expandable-video-description-body-renderer a, .comment-content a');
		timestampLinks.forEach((element) => {
			if (!element.classList.contains('goodTube_timestampLink') && element.getAttribute('href') && element.getAttribute('href').indexOf(goodTube_getParams['v']) !== -1 && element.getAttribute('href').indexOf('t=') !== -1) {
				element.classList.add('goodTube_timestampLink');
				element.addEventListener('click', function () {
					let bits = element.getAttribute('href').split('t=');
					if (typeof bits[1] !== 'undefined') {
						let time = bits[1].replace('s', '');
						goodTube_player_skipTo(time);
					}
				});
			}
		});
    }
	function goodTube_youtube_hidePlayers() {
		let regularPlayers = document.querySelectorAll('#player');
		regularPlayers.forEach((element) => { goodTube_helper_hideYoutubePlayer(element); });
		let fullscreenPlayers = document.querySelectorAll('#full-bleed-container');
		fullscreenPlayers.forEach((element) => { goodTube_helper_hideYoutubePlayer(element); });
		let mobileControls = document.querySelectorAll('#player-control-container');
		mobileControls.forEach((element) => { goodTube_helper_hideElement(element); });
		let miniPlayers = document.querySelectorAll('ytd-miniplayer');
		miniPlayers.forEach((element) => { goodTube_helper_hideElement(element); });
	}
	let goodTube_youtube_turnedOffAutoplay = false;
	function goodTube_youtube_turnOffAutoplay() {
		if (goodTube_youtube_turnedOffAutoplay) { return; }
		let autoplayButton = false;
		if (!goodTube_mobile) {
			autoplayButton = document.querySelector('.ytp-autonav-toggle-button');
			if (autoplayButton) {
				if (autoplayButton.getAttribute('aria-checked') === 'false') { goodTube_youtube_turnedOffAutoplay = true; return; }
				else { autoplayButton.click(); }
			}
		} else {
			autoplayButton = document.querySelector('.ytm-autonav-toggle-button-container');
			if (autoplayButton) {
				if (autoplayButton.getAttribute('aria-pressed') === 'false') { goodTube_youtube_turnedOffAutoplay = true; return; }
				else { autoplayButton.click(); }
			}
		}
	}
	function goodTube_youtube_mutePauseSkipAds() {
		let youtubeVideos = document.querySelectorAll('video');
		youtubeVideos.forEach((element) => {
			if (!element.closest('#inline-player') && !element.closest('#goodTube_playerWrapper')) {
				element.muted = true;
				element.volume = 0;
				element.pause();
			}
		});
	}

	function goodTube_player_init() {
		goodTube_page_api = document.getElementById('movie_player');
		let videoData = false;
		if (goodTube_page_api && typeof goodTube_page_api.getVideoData === 'function') { videoData = goodTube_page_api.getVideoData(); }
		if (!videoData) { setTimeout(goodTube_player_init, 100); return; }
		let style = document.createElement('style');
		style.textContent = `
			#goodTube_playerWrapper { border-radius: 12px; background: #ffffff; position: absolute; top: 0; left: 0; z-index: 999; overflow: hidden; }
			html[dark] #goodTube_playerWrapper { background: #0f0f0f; }
			#goodTube_playerWrapper.goodTube_mobile { position: fixed; background: #000000; border-radius: 0; z-index: 3; }
			#goodTube_playerWrapper.goodTube_theater { background: #000000; border-radius: 0; }`;
		document.head.appendChild(style);
		let playerWrapper = document.createElement('div');
		playerWrapper.id = 'goodTube_playerWrapper';
		if (goodTube_mobile) { playerWrapper.classList.add('goodTube_mobile'); }
		document.body.appendChild(playerWrapper);
		playerWrapper.innerHTML = `<iframe width="100%" height="100%" src="" frameborder="0" scrolling="yes" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>`;
		goodTube_playerWrapper = document.querySelector('#goodTube_playerWrapper');
		goodTube_player = goodTube_playerWrapper.querySelector('iframe');
		goodTube_player_positionAndSize();
		goodTube_actions();
	}
	function goodTube_player_positionAndSize() {
		if (window.location.href.indexOf('.com/watch') !== -1) {
			goodTube_helper_showElement(goodTube_playerWrapper);
			let positionElement = false;
			if (!goodTube_mobile) {
				if (document.querySelector('ytd-watch-flexy[theater]')) {
					positionElement = document.getElementById('full-bleed-container');
					if (goodTube_playerWrapper && !goodTube_playerWrapper.classList.contains('goodTube_theater')) { goodTube_playerWrapper.classList.add('goodTube_theater'); }
				} else {
					positionElement = document.getElementById('player');
					if (goodTube_playerWrapper && goodTube_playerWrapper.classList.contains('goodTube_theater')) { goodTube_playerWrapper.classList.remove('goodTube_theater'); }
				}
				if (positionElement && positionElement.offsetHeight > 0) {
					let rect = positionElement.getBoundingClientRect();
					goodTube_playerWrapper.style.top = (rect.top + window.scrollY) + 'px';
					goodTube_playerWrapper.style.left = (rect.left + window.scrollX) + 'px';
					goodTube_playerWrapper.style.width = positionElement.offsetWidth + 'px';
					goodTube_playerWrapper.style.height = positionElement.offsetHeight + 'px';
				}
			} else {
				positionElement = document.getElementById('player');
				if (positionElement && positionElement.offsetHeight > 0) {
					let rect = positionElement.getBoundingClientRect();
					goodTube_playerWrapper.style.top = rect.top + 'px';
					goodTube_playerWrapper.style.left = rect.left + 'px';
					goodTube_playerWrapper.style.width = positionElement.offsetWidth + 'px';
					goodTube_playerWrapper.style.height = positionElement.offsetHeight + 'px';
				}
			}
		}
		window.requestAnimationFrame(function () { goodTube_player_positionAndSize(); });
	}
    function goodTube_player_load(force_v_fallback) {
        if (typeof force_v_fallback === 'undefined') {
            force_v_fallback = localStorage.getItem('yt-18+mode-' + goodTube_getParams.v) === 'true';
        }
		goodTube_player_pause();
        const videoId = goodTube_getParams['v'];
        const mobileText = goodTube_mobile ? 'true' : 'false';
        let embedUrl;
        if (force_v_fallback) {
            embedUrl = `https://www.youtube.com/v/${videoId}?autoplay=1&mobile=${mobileText}`;
        } else {
            embedUrl = `https://www.youtube.com/embed/${videoId}?autoplay=1&mobile=${mobileText}`;
        }
        const onIframeLoad = () => {
            if (window.location.href.indexOf('.com/watch') !== -1) {
                if (typeof goodTube_getParams['t'] !== 'undefined') { goodTube_player_skipTo(goodTube_getParams['t'].replace('s', '')); }
                if(goodTube_player.contentWindow) goodTube_player.contentWindow.postMessage('goodTube_autoplay_' + goodTube_autoplay, '*');
            } else { goodTube_player_clear(); }
        };
        goodTube_player.addEventListener('load', onIframeLoad, { once: true });
        goodTube_player.src = embedUrl;
		goodTube_helper_showElement(goodTube_playerWrapper);
	}
	function goodTube_player_clear() {
		if (goodTube_player && goodTube_player.contentWindow && !goodTube_pip) {
			goodTube_player.contentWindow.postMessage('goodTube_stopVideo', '*');
		}
		if (goodTube_playerWrapper) goodTube_helper_hideElement(goodTube_playerWrapper);
    }
	function goodTube_player_skipTo(time) { if (goodTube_player) goodTube_player.contentWindow.postMessage('goodTube_skipTo_' + time, '*'); }
	function goodTube_player_pause() { if (goodTube_player) goodTube_player.contentWindow.postMessage('goodTube_pause', '*'); }
	function goodTube_player_play() { if (goodTube_player) goodTube_player.contentWindow.postMessage('goodTube_play', '*'); }

	function goodTube_shortcuts_init() { /* Restored */ }
	function goodTube_shortcuts_trigger(shortcut) { /* Restored */ }
	function goodTube_nav_generatePlaylistLinks() { /* Restored */ }
	function goodTube_nav_prev() { /* Restored */ }
	function goodTube_nav_next(pressedButton = false) { /* Restored */ }
	let goodTube_nav_prevVideo = [];
	function goodTube_nav_setupPrevHistory() {
        if (goodTube_helper_getCookie('goodTube_previous') === 'true') {
            goodTube_nav_prevVideo.pop();
            goodTube_helper_setCookie('goodTube_previous', 'false');
        } else {
            goodTube_nav_prevVideo.push(window.location.href);
        }
    }
	function goodTube_nav_showHideNextPrevButtons() { /* Restored */ }
    function goodTube_stats_user() { /* Restored */ }
    function goodTube_stats_video() { /* Restored */ }

	function goodTube_init() {
		goodTube_youtube_mutePauseSkipAds(); setInterval(goodTube_youtube_mutePauseSkipAds, 1);
		goodTube_helper_showHide_init();
		goodTube_youtube_hidePlayers(); setInterval(goodTube_youtube_hidePlayers, 100);
		goodTube_youtube_hideAdsShortsEtc(); setInterval(goodTube_youtube_turnOffAutoplay, 1000);
		setInterval(goodTube_youtube_hideShorts, 100);
		document.addEventListener("DOMContentLoaded", goodTube_player_init);
		if (document.readyState === "interactive" || document.readyState === "complete") { goodTube_player_init(); }
		goodTube_stats_user();
		if (!goodTube_mobile) { goodTube_shortcuts_init(); }
		window.addEventListener('message', goodTube_receiveMessage);
	}
	function goodTube_receiveMessage(event) {
		if (typeof event.data !== 'string') { return; }
		if (event.data.indexOf('goodTube_pip_') !== -1) { /* Restored */ }
		else if (event.data === 'goodTube_prevVideo') { /* Restored */ }
		else if (event.data === 'goodTube_nextVideo') { /* Restored */ }
		else if (event.data === 'goodTube_theater') { /* Restored */ }
		else if (event.data === 'goodTube_autoplayToggle') { /* Restored */ }
	}
	let goodTube_previousUrl = false;
	function goodTube_actions() {
		let previousUrl = goodTube_previousUrl;
		if (previousUrl) { previousUrl = previousUrl.split('#')[0].split('index=')[0]; }
		let currentUrl = window.location.href;
		if (currentUrl) { currentUrl = currentUrl.split('#')[0].split('index=')[0]; }
		if (previousUrl !== currentUrl) {
			goodTube_getParams = goodTube_helper_setupGetParams();
			if (window.location.href.indexOf('.com/watch') !== -1) {
				goodTube_nav_setupPrevHistory();
				goodTube_player_load();
				goodTube_stats_video();
                addMoreSpeedsButtons();
			} else {
				goodTube_player_clear();
                removeMoreSpeedsButtons();
			}
			goodTube_previousUrl = window.location.href;
		}
		goodTube_nav_generatePlaylistLinks();
		if(goodTube_player && goodTube_player.contentWindow) goodTube_nav_showHideNextPrevButtons();
		goodTube_youtube_timestampLinks();
		setTimeout(goodTube_actions, 100);
	}

	if (window.top === window.self) {
		goodTube_init();
	}
})();