/* The YouTube Captioning Thing editor script
 *
 * Changelog:
 * 1.0 - Don't knock it, it works.
 * 1.1 - Added the 5 frame "lookback" for dropped frames. Buggy.
 * 1.2 - SWFObject wmode = transparent param added for overlays
 * 1.3 - Updates to use YouTube's higher-res new default size
 * 1.4 - Added skip ahead/skip back 5 seconds buttons.
 * 1.5 - Quick Save and Reload using localStorage. Welcome to html5!
 *
 * 2009-2011 Matt Rasmussen www.SpaceToast.net
 * */

var proto = "";
var editContainer = "";
var ytplayer = "";
var firstShown = proto;
var testCap = "";

function onYouTubePlayerReady(playerId){
	ytplayer = document.getElementById("myytplayer");
	proto = document.getElementById("captionPrototype");
	editContainer = document.getElementById("editCaptionContainer");
	testCap = document.getElementById("testCaption");
	setInterval(editingDaemon, 100);
}

function editingDaemon(){
	var time = Math.round(ytplayer.getCurrentTime()*10)/10;
	for ( i=0; i<=5; i = ++i){
		var caption = document.getElementById(time - (i/10));
		if(caption){
			testCap.innerHTML = caption.getElementsByTagName("textarea")[1].value;
			break;
		}
	}
	firstShown = null;
	var theseCaps = editContainer.childNodes;
	var allCaps = new Array;
	for ( var i=theseCaps.length-1; i>=0; --i ){
		if (theseCaps[i].className == "editCaption") {
			allCaps.unshift(theseCaps[i]);
		}
	}
	//document.getElementById("timeCode").innerHTML = time + " " + allCaps.length;
	for ( i=allCaps.length-1; i>=1; --i ){
		var j = allCaps[i - 1];
		if (allCaps[i].getAttribute("id") >= time) {
			allCaps[i].setAttribute("style", "display:block;");
			j.setAttribute("style", "display:block;");
			firstShown = allCaps[i];
		}
		else{j.setAttribute("style", "display:none;");}
	}
}

function addCap(){
	ytplayer.pauseVideo();
	var time = Math.round(ytplayer.getCurrentTime()*10)/10;
	var newCap = proto.cloneNode(true);
	newCap.setAttribute("id", time);
	newCap.setAttribute("style", "display:block;");
	newCap.getElementsByTagName("textarea")[0].value = time;
	editContainer.insertBefore(newCap, firstShown);
}

function loadCaps() {
	var a = document.getElementById("ioField").value.split("<script")[0];
	processCaps(a);
}

function quickReload() {
	var a = localStorage["YouTubeCapperQuickSave"].split("<script")[0];
	processCaps(a);
}

function processCaps(source) {
	editContainer.innerHTML = source;
	var movieAddress = document.getElementById("YTC_movieAddress").innerHTML;
	editContainer.innerHTML = document.getElementById(movieAddress + "_captionContainer").innerHTML;
	document.getElementById("movieField").value = "http://www.youtube.com/watch?v=" + movieAddress;
	var allCaps = editContainer.getElementsByTagName("div");
	for ( var i=allCaps.length-1; i>=0; --i ){
		var newCap = proto.cloneNode(true);
		newCap.setAttribute("id", allCaps[i].id.split("_tc")[1]);
		newCap.getElementsByTagName("textarea")[0].value = allCaps[i].id.split("_tc")[1];
		newCap.getElementsByTagName("textarea")[1].value = allCaps[i].innerHTML;
		//document.getElementById("timeCode").innerHTML = newCap.id;
		editContainer.replaceChild(newCap, allCaps[i]);
	}
	loadMovie480();
}

function saveCaps() {
	var whatMovie = document.getElementById("movieField").value;
	whatMovie = whatMovie.split("&")[0];
	whatMovie = whatMovie.split("=")[1];
	var putOut = unescape("%09%3Cdiv%20class%3D%22YTC_container%22%3E%0A%09%09%3Cstyle%20type%3D%22text/css%22%3E@import%20url%28http%3A//www.spacetoast.net/caption/caption.css%29%3B%3C/style%3E%0A%09%09%3Cdiv%20class%3D%22YTC_movieAddress%22%20id%3D%22YTC_movieAddress%22%3E");
	putOut = putOut + whatMovie + unescape("%3C/div%3E%0A%09%09%3Cdiv%20id%3D%22");
	putOut = putOut + whatMovie + unescape("_ytapiplayer%22%3E%0A%09%09%20%20You%20need%20Flash%20player%208+%20and%20JavaScript%20enabled%20to%20view%20this%20video.%0A%09%09%3C/div%3E%0A%09%09%3Cdiv%20id%3D%22timeCode%22%3E%3C/div%3E%0A%09%09%3Cdiv%20class%3D%22YTC_captionContainer%22%20id%3D%22");
	putOut = putOut + whatMovie + unescape("_captionContainer%22%3E%0A");
	var allFields = editContainer.getElementsByTagName("textarea");
	for ( var i=0; i<allFields.length; i = i + 2 ){
		var a = unescape("%09%09%09%3Cdiv%20id%3D%22") + whatMovie + "_tc" + allFields[i].value + unescape("%22%20class%3D%22YTC_caption%22%3E") + allFields[i+1].value + unescape("%3C/div%3E%0A");
		putOut = putOut + a;
	}
	putOut = putOut + unescape("%09%09%3C/div%3E%0A%09%3C/div%3E%0A%09%3Cscript%20src%3D%22http%3A//swfobject.googlecode.com/svn/tags/rc3/swfobject/src/swfobject.js%22%20type%3D%22text/javascript%22%3E%3C/script%3E%0A%09%3Cscript%20src%3D%22http%3A//www.spacetoast.net/caption/caption.js%22%20type%3D%22text/javascript%22%3E%3C/script%3E%0A%09%3Cscript%20type%3D%22text/javascript%22%3EloadYTCMovie%28%22");
	putOut = putOut + whatMovie + unescape("%22%29%3B%3C/script%3E");
	document.getElementById("ioField").value = putOut;
}

function saveCapsOverlay() {
	document.getElementById("ioField").value = saveProcessing();
}

function quickSave() {
	localStorage["YouTubeCapperQuickSave"] = saveProcessing();
}

function saveProcessing() {
	var whatMovie = document.getElementById("movieField").value;
	whatMovie = whatMovie.split("&")[0];
	whatMovie = whatMovie.split("=")[1];
	var putOut = unescape("%09%3Cdiv%20class%3D%22YTC_container480%22%3E%0A%09%09%3Cstyle%20type%3D%22text/css%22%3E@import%20url%28http%3A//www.spacetoast.net/caption/caption.css%29%3B%3C/style%3E%0A%09%09%3Cdiv%20class%3D%22YTC_movieAddress%22%20id%3D%22YTC_movieAddress%22%3E");
	putOut = putOut + whatMovie + unescape("%3C/div%3E%0A%09%09%3Cdiv%20id%3D%22");
	putOut = putOut + whatMovie + unescape("_ytapiplayer%22%3E%0A%09%09%20%20You%20need%20Flash%20player%208+%20and%20JavaScript%20enabled%20to%20view%20this%20video.%0A%09%09%3C/div%3E%0A%09%09%3Cdiv%20id%3D%22timeCode%22%3E%3C/div%3E%0A%09%09%3Cdiv%20id%3D%22YTC_bug%22%3E%3Ca%20href%3D%22http%3A//youtubecapper.blogspot.com%22%3EYouTubeCapper.Blogspot.com%3C/a%3E%3C/div%3E%0A%09%09%3Cdiv%20class%3D%22YTC_captionContainerOverlay480%22%20id%3D%22");
	putOut = putOut + whatMovie + unescape("_captionContainer%22%3E%0A");
	var allFields = editContainer.getElementsByTagName("textarea");
	for ( var i=0; i<allFields.length; i = i + 2 ){
		var a = unescape("%09%09%09%3Cdiv%20id%3D%22") + whatMovie + "_tc" + allFields[i].value + unescape("%22%20class%3D%22YTC_captionOverlay%22%3E") + allFields[i+1].value + unescape("%3C/div%3E%0A");
		putOut = putOut + a;
	}
	putOut = putOut + unescape("%09%09%3C/div%3E%0A%09%3C/div%3E%0A%09%3Cscript%20src%3D%22http%3A//swfobject.googlecode.com/svn/tags/rc3/swfobject/src/swfobject.js%22%20type%3D%22text/javascript%22%3E%3C/script%3E%0A%09%3Cscript%20src%3D%22http%3A//www.spacetoast.net/caption/caption.js%22%20type%3D%22text/javascript%22%3E%3C/script%3E%0A%09%3Cscript%20type%3D%22text/javascript%22%3EloadYTCMovie480%28%22");
	putOut = putOut + whatMovie + unescape("%22%29%3B%3C/script%3E");
	return putOut;
}

function adjustTimeUp(whoCalls) {
	var parCap = whoCalls.parentNode;
	parCap.id = Math.round(parCap.id * 10 + 1)/10;
	parCap.getElementsByTagName("textarea")[0].value = parCap.id;
}

function adjustTimeDown(whoCalls) {
	var parCap = whoCalls.parentNode;
	parCap.id = Math.round(parCap.id * 10 - 1)/10;
	parCap.getElementsByTagName("textarea")[0].value = parCap.id;
}

function loadMovie(){
	var newHolder = document.createElement("div");
	newHolder.setAttribute("id", "ytapiplayer");
	var flashvars = {};
	var params = { allowScriptAccess: "always", bgcolor: "#cccccc", wmode: "transparent" };
	var atts = { id: "myytplayer" };
	var whatMovie = document.getElementById("movieField").value;
	whatMovie = whatMovie.split("&")[0];
	whatMovie = whatMovie.split("=")[1];
	document.getElementById("editPlayerContainer").replaceChild(newHolder, document.getElementById("myytplayer"));
	swfobject.embedSWF("http://www.youtube.com/v/" + whatMovie + "&amp;border=0&amp;iv_load_policy=3&amp;enablejsapi=1&amp;playerapiid=ytplayer","ytapiplayer", "425", "344", "8", null, flashvars, params, atts);
}

function loadMovie480(){
	var newHolder = document.createElement("div");
	newHolder.setAttribute("id", "ytapiplayer");
	var flashvars = {};
	var params = { allowScriptAccess: "always", bgcolor: "#cccccc", wmode: "transparent" };
	var atts = { id: "myytplayer" };
	var whatMovie = document.getElementById("movieField").value;
	whatMovie = whatMovie.split("&")[0];
	whatMovie = whatMovie.split("=")[1];
	document.getElementById("editPlayerContainer").replaceChild(newHolder, document.getElementById("myytplayer"));
	swfobject.embedSWF("http://www.youtube.com/v/" + whatMovie + "&amp;border=0&amp;iv_load_policy=3&amp;enablejsapi=1&amp;playerapiid=ytplayer","ytapiplayer", "480", "385", "8", null, flashvars, params, atts);
}

function twiddle() {
	var a=document.getElementById("unex");
	var b=document.getElementById("temp");
	var c = "";
	a.value=unescape(a.value);
	b.innerHTML=a.value;
	var tcs = b.getElementsByTagName("textarea");
	for ( var i=tcs.length-1; i>=0; --i ){
		if (i % 2 == 0){
			c = '<div id="' + tcs[i].value + '" class="caption">' + c;
		}
		else {
			c = tcs[i].value + '</div>' + c;
		}
	}
	temp.innerHTML = "";
	a.value = c;
}

function skipBack() {
	var a = ytplayer.getCurrentTime() - 5;
	if (a < 0) {a = 0;}
	ytplayer.seekTo(a, false);
	testCap.innerHTML = "";
}

function skipAhead() {
	var a = ytplayer.getCurrentTime() + 5;
	ytplayer.seekTo(a, false);
	testCap.innerHTML = "";
}
