// ==UserScript==
// @name		YouTube Screen & YouTube Auto-Pause
// @author		Lars Kleinschmidt & Ayush
// @version		1.54
// @description	Adds a view mode to YouTube pages that shows only the video on a dark screen. This screen can be toggled using the icon in the upper right corner on youtube pages
// @include       http://youtube.com/watch*
// @include       http://*.youtube.com/watch*
// ==/UserScript==

// Settings START
//
//
// Set this to 1 to show the black screen with only video by default, 0 for the normal YouTube page; Cookies override this
var EnabledIsDefault = 1;
//
// Videos width in Screen mode (height is automatically adjusted accordingly)
var VideoWidth = 800;
//
// Default resolution, 1 for 16:9 (the new wide screen format) or 0 for 4:3 (the old format)
var DefaultAR = 1;
//
// Start videos paused
var AutoPause = 1;
//
// Load high quality versions of the videos
var LoadHQ = 1;
//
// Load "www." version of YouTube instead of the localized ones
var LoadWWW = 0;
//
//
// SETTINGS END

// Load "www." or HQ versions, depending on users settings
if ((LoadWWW == 1) && (LoadHQ == 1) && (location.href.indexOf("fmt=") == -1) && (location.href.substr(0,11) != "http://www.")) {
	location.replace("http://www.youtube.com/watch?" + location.href.substr(location.href.indexOf("v="), 13) + "&fmt=18");
} else if ((LoadWWW == 1) && (location.href.substr(0,11) != "http://www.")) {
	location.replace("http://www.youtube.com/watch?" + location.href.substr(location.href.indexOf("v="), 13));
} else if ((LoadHQ == 1) && (location.href.indexOf("fmt=") == -1)) {
	location.replace(location.href + "&fmt=18");
}

window.addEventListener('DOMContentLoaded',function () {

	// If cookie is present use that, else the value from settings section
	var ytsenabled = (document.cookie.match(/ytsenabled=([^;]*)/)||{})[1];	
	if (ytsenabled) { var ytSStartFullscreen = ytsenabled; } else { var ytSStartFullscreen = EnabledIsDefault; }
	
	// View Ports size
	var ViewPortSize = window.innerHeight;
	
	function ytSEnableScreen() {
		var VideoHeight = Math.round(VideoWidth * 9 / 16) + 25;
		
		// show black screen
		screenbg.style.display = "block";

		// insert disable link
		screentoggle.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoZJREFUeNqUk0tPFEEQx//z2pmBfcwwLrjASsLCGi/GyEETMV6MRz+BGIMYFDUmogS9cPDCQY0JBw8+QvTswcR4UL8BHokKCgmYgKiz676AmZ2ZtrqXIIkJCT2p6eru+lV3VVdLAGIkya1+L80nKav0sycT+sW4JJ2RJWQVoHs3KgQWI4bvVcbejVe8Z9yBxOGzQwOnrFaHLCIgCsFIwMJ/etgYsyjqLv4qdL999Z77e84dRIqETrurHcHvFQTuCiLagjFGfYRoq2+MGfSUBbsjDSdtdaL8I5L7+voUGchBUxBuFsEMDcnhu5A7snRcHyHzoWS74FybQNRkoFYrAYYK3dRzgu3v79f4WRj/GGXz/G0YR07AGX0ALdsD7UAv9o89QvPRk2gduoMwqJMxhUnGnFXz+Xwj+xRnRAvlNy/g9B6G3BRHevShWOJ6uF5F4fV0I5MUEm+cVXO5nL7E5yob8JZc1GcXsbk8iPb7T6Ekko3MV8pYuHEBG4vzFBJD6GTECTgrp9NpQxgVq6jXPNSrHkIv+O/6Ij8UawEXtwIWhOCsbFmWKXLg10WWtdxBZKemxe58Zy5c73n8Emb+EIVJtp4PVg/AWTkej5vbOaDY9g1e3Ya/jQzg65UBBKSrNJe5dF1cJ0SNMHBWNantdLB8bxxZTGL1yRTW5z8LYG74nIAXJsagqMpWkQGcVamZWiKxSpMZ025B5ecaFm6NbF8rd1D98glzNy9Di2lI2UlRlcwwVzmrxmIxQ7ds949byKRsG02pZGMHXsLhjlLeUdKlchW+ZricFaXcduz47MzHGdkrFhy/VGrb7THFUqk13W5xOcNZiY7YRcppkuY9PucayYe/AgwA1c1FXdlyhoEAAAAASUVORK5CYII=";
		screentoggle.onclick = ytSDisableScreen;
		
		// insert button to change video size to 4:3
		screenrestoggle.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAArVJREFUeNqkk89rFGcYxz/vvO/u7O5ssptoRSJqaWyVEhEUK7311IOnYg8NHqznUmihpwp6K3rstRfTVvGg3kRRERGEelKUYBsljTGpySauyWZ3dmZnZ94Zn9nQvyDvy/sO8/A87/t8f7wqyzK2Mhy2OMyt2w+moygs94KAbubiOIpS0TBUMSilQTqMk4R2t09sU2xioR/iFgtk6NA4Sk08nn7J7OxrkvqewQFFo/EqRcoll0QKfD8kFaRexR18V+decGB8jIlP9mEc0uDh9ErlxTuXaz9+Ra/XZ+rOU648b1GtahqNANp9vjuxn1NfTqB0gePfz2HdLoc/dQKjlaIyNMyu2gd8fnAvM//+RzuyjNY82qGDcSvs3L+dSFcYHS5TVAk7xnZJTSoMZBjlOCjBafs9Lvx5j8zG/HziED/98YSFNx12j9X5bLzO6S8+5NLNR/jtNlkSSU3OkUJ2kUJWY6PHxUcrODZipdVnfLRAKyhRq5cYGylx+e5Tfr/zD6l2qbkW7ZhNFaQLjHbQWuOUPN40Up4sxtTKmqoQmaUpsw2fZjMgyspym4fQijG5QlJrraUqeD/2any0p46/0+PM1xP8duMxy52YuGcZqVjOfHOUqXszg4teLS7hDWvyWpMbMYpiUpnnTx1j+e06Uzf+4v6zVUpD21heD/l7/h27R1zOTh6h6jqc/GWBXih+UDkE6WOt5bNiCxQcS6vZYOntBrbgMb8mBvJjSTHCSxcVd4lTK/kbNEsGrUQlK24e1T4vZ6b59lxKFgf0rUL5inIkEhcdMaOi2Qj54ddZojAkmn/O0I59WImrq9dvZlqkzB2Y5rIIxmLBDNwov/z/1sIoIehFxAIX0kGs0wkxHT+YzDJtcotqrdg8bFNja5NBota5WDKlfSuq5MtInkQStdXn/F6AAQCtpzlcmd+iZwAAAABJRU5ErkJggg==";
		screenrestoggle.style.display = "inline";

		// hide scrollbars
		document.getElementsByTagName("body")[0].style.overflow = "hidden";
		
		// hide username and upload buttons
		if (document.getElementById("upload-button")) { document.getElementById("upload-button").style.display = "none !important"; }
		if (document.getElementsByClassName("dropdown-link")[0]) { document.getElementsByClassName("dropdown-link")[0].style.display = "none !important"; }
		if (document.getElementsByClassName("yt-menulink")[0]) { document.getElementsByClassName("yt-menulink")[0].style.display = "none !important"; }

		// resize and position video
		if (DefaultAR) { ytSAR169(); } else { ytSAR43(); }
		
		// store current mode in cookie
		setcookie("ytsenabled", 1);
	}

	function ytSDisableScreen() {
		// hide black screen
		screenbg.style.display="none";

		// insert enable link
		screentoggle.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGBQTFRFWVhZlJWXyszPKioqsbO1YmJiurzBsrW709TWeXl62d7lcXJ03uHn6u3we32CoqKjbG1ttbi8qqyturq7SUpJrrCznp6fpaerv8HFtrm8Tk9OODg4u7u7REVEPDw8////ArijUwAAACB0Uk5T/////////////////////////////////////////wBcXBvtAAAAiUlEQVR42lzPQQ6EIBQD0MoggqAIioOozP1vOUBEE9+ii6aL//F7AXHddjGGGgVLOL04x4kFJaK9CaJBPZyVohhbr+F8WJt2KiRSYX0oa2QhF2xBqE6m8WXnclZxy0V87EZDm7g/uhUNk5/bZHIxqL7vlco55IUYq3SapBj4fCRzycMrvN//CzAA2poRcJxdnucAAAAASUVORK5CYII=";
		screentoggle.onclick = ytSEnableScreen;
		
		// hide button to toggle aspect ratio
		screenrestoggle.style.display = "none";

		// show scrollbars
		document.getElementsByTagName("body")[0].style.overflow = "";
		
		// show username and upload buttons
		if (document.getElementById("upload-button")) { document.getElementById("upload-button").style.display = ""; }
		if (document.getElementsByClassName("dropdown-link")[0]) { document.getElementsByClassName("dropdown-link")[0].style.display = ""; }
		if (document.getElementsByClassName("yt-menulink")[0]) { document.getElementsByClassName("yt-menulink")[0].style.display = ""; }

		// resize video back to normal
		var videoarea = document.getElementById('watch-player-div');
		videoarea.style = "";
		videoarea.firstChild.style = "";
		
		// store current mode in cookie
		setcookie("ytsenabled", 0);
	}
	
	function ytSAR169() {
		var VideoHeight = Math.round(VideoWidth * 9 / 16) + 25;
		var videoarea = document.getElementById('watch-player-div');
		videoarea.style = "position:absolute; top: "+((ViewPortSize - VideoHeight) / 2)+"px; left: 50%;";
		videoarea.firstChild.style = "width: "+VideoWidth+"px; height: "+VideoHeight+"px; margin-left:-"+Math.round(VideoWidth / 2)+"px;";		
		screenrestoggle.onclick = ytSAR43;
	}
	
	function ytSAR43() {
		var VideoHeight = Math.round(VideoWidth * 3 / 4) + 25;
		var videoarea = document.getElementById('watch-player-div');
		videoarea.style = "position:absolute; top: "+((ViewPortSize - VideoHeight) / 2)+"px; left: 50%;";
		videoarea.firstChild.style = "width: "+VideoWidth+"px; height: "+VideoHeight+"px; margin-left:-"+Math.round(VideoWidth / 2)+"px;";
		screenrestoggle.onclick = ytSAR169;
	}

	screenbg = document.createElement("div");
	screenbg.style = "opacity:1; width:100%; height:100%; background-color: #000; position:absolute; top: 0;";
	document.body.appendChild(screenbg);

	screentoggle = document.createElement('img');
	screentoggle.style="position:absolute; top: 3px; right: 3px;";
	document.body.appendChild(screentoggle);
	
	screenrestoggle = document.createElement('img');
	screenrestoggle.style="position:absolute; top: 3px; right: 22px; display: none;";
	document.body.appendChild(screenrestoggle);

	if (ytSStartFullscreen == 1) {
		ytSEnableScreen();
	} else {
		ytSDisableScreen();
	}

}, false);

// Auto-Pause functionality from AyushJs script (http://my.opera.com/community/forums/findpost.pl?id=2698295)
if (AutoPause == 1) {
	opera.defineMagicFunction('onYouTubePlayerReady',
		function(realFunc, _this, id){
			if(realFunc)
				try{ realFunc.apply(_this, arguments.slice(2)); }catch(x){ }
			var player;
			if(player=(document.getElementById('movie_player')||document.getElementsByTagName('embed')[1])){
				var pausedBefore=0;
				window.pauseOnStart=
					function(plState){
						if(pausedBefore)
							return;
						if(plState==3 && !player.isMuted())
							player.mute()
						else if(plState==1){
							player.pauseVideo();
							player.seekTo(0);
							player.unMute();
							pausedBefore = 1;
						}
					};
				player.addEventListener('onStateChange','pauseOnStart');
			}
		}
	)
}

function setcookie(k,v) {
	document.cookie=k+"="+v+"; expires=Wed, 01 Jan 2020 00:00:00 UTC;";
}