// ==UserScript==
// @name            Youtube: Great Job!
// @description     Adds button for greatjob.cookiethievery.com links
// @namespace 	    http://greatjob.cookiethievery.com/
// @author          W.T. Snacks
// @version         0.2.8
// @updated         2008-04-16 04:00
// @include         http://www.youtube.com/watch?v=*
// @include         http://youtube.com/watch?v=*
// ==/UserScript==

(function() {
	var youtubeId = document.evaluate("//form[@name='addToFavesForm']/input[@name='video_id']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
	if (!youtubeId) return;
	youtubeId = youtubeId.value;
	gjURL = 'http://greatjob.cookiethievery.com/' + youtubeId;

	var gjTd = document.createElement('div');
	gjTd.id = 'greatJobDiv';
	gjTd.className = 'watch-recent-shares-div';

	var gjLink = document.createElement('a');
	gjLink.id = 'greatJobLink';
	gjLink.href = gjURL;
	gjLink.target = '_blank';

	var gjImgData = 'data:image/gif;base64,R0lGODlhYAApAIcAAP8AAP8CAv8DA%2F8EBP8GBv8HBv8HB%2F8ICP8JCP8JCf8KCf8KCv8MC%2F8MDP8ODv8QD%2F8QEP8SEf8SEv8TEv8TE%2F8UFP8VFP8VFf8WFv8YGP8ZGP8ZGf8aGf8aGv8cG%2F8dHP8eHf8eHv8gH%2F8gIP8iIf8jIv8kI%2F8lJP8mJv8nJv8nJ%2F8oJ%2F8pKP8rKv8sK%2F8uLf8vLv8wL%2F8xMP8yMf8zMv80Mv81NP82Nf83Nv84N%2F85OP86Of86Ov88O%2F89PP8%2BPf8%2FPv9AP%2F9BQP9CQP9DQv9EQ%2F9FRP9GRf9HRv9IR%2F9JSf9KSf9LSv9MS%2F9NTP9OTf9PTv9RUP9TUv9UU%2F9XVv9YV%2F9aWf9bWv9cW%2F9cXP9eXf9fXv9gXv9hYP9iYP9jYv9lY%2F9mZP9nZv9oZ%2F9paP9qaP9r' +
			'av9sa%2F9tbP9ubf9vbv9xb%2F9xcP90cv91dP92df93dv94dv96ef97ev98ev99fP9%2Bff9%2Bfv9%2Ffv%2BAf%2F%2BBgP%2BCgf%2BEgv%2BFhP%2BHhv%2BKif%2BLiv%2BMi%2F%2BNjP%2BOjf%2BPjv%2BQj%2F%2BRkP%2BSkf%2BTkv%2BUkv%2BVlP%2BXlv%2BYlv%2BZmP%2Bamf%2Bbmv%2Bcm%2F%2BdnP%2Benf%2Bfnv%2Bgnv%2BhoP%2Biof%2Bjov%2Bkov%2BlpP%2Bmpf%2Bnpv%2Bop%2F%2BpqP%2BqqP%2Bsq%2F%2Burf%2Bvrf%2Bvrv%2BxsP%2B0s%2F%2B1tP%2B2tf%2B3tv%2B5uP%2B6uf%2B7uv%2B8u%2F%2B9vP%2B%2Bvf%2B%2Fvv%2FAv%2F%2FBwP%2FCwf%2FDwv%2FEwv%2FExP%2FGxf%2FGxv%2FIxv%2FIyP%2FKyf%2FL' +
			'yv%2FMy%2F%2FNzP%2FOzf%2FPzf%2FOzv%2FRz%2F%2FR0P%2FS0f%2FT0v%2FU0%2F%2FV1P%2FV1f%2FW1f%2FX1f%2FX1v%2FZ2P%2Fa2v%2Fb2v%2Fb2%2F%2Fc2v%2Fc2%2F%2Fd3P%2Fe3f%2Ff3v%2Fg3%2F%2Fg4P%2Fi4f%2Fi4v%2Fk4%2F%2Fk5P%2Fl5P%2Fm5f%2Fm5v%2Fn5v%2Fn5%2F%2Fo5%2F%2Fo6P%2Fq6f%2Fq6v%2Fs6%2F%2Fs7P%2Fu7f%2Fu7v%2Fv7v%2Fv7%2F%2Fw7%2F%2Fw8P%2Fy8f%2Fy8v%2Fz8v%2Fz8%2F%2F08%2F%2F09P%2F19P%2F19f%2F29f%2F29v%2F49%2F%2F4%2BP%2F6%2Bf%2F6%2Bv%2F7%2Bv%2F7%2B%2F%2F8%2FP%2F9%2FP%2F9%2Ff%2F%2B%2Ff%2F%2B%2Fv%2F%2F%2FyH5BAMAAP8ALAAAAABgACkAAA' +
			'j%2FAP8JHEiwoMGDCBMqXMiwocOHECNKjOjP38SLGDMy7NYnnsaPIDEOqkAupMmTC%2Fn5mGIRpcuX%2F54l6ASz5slFGqjZ3PlPX0uJ%2BKA8ucezJrYvzBYaO3bwmwhBRWGqU2LAlcJ7TcwcfJXAV1SX%2FvgI2NFOYTkVeA4%2BonDu60l%2BoQwAwLRQ2gVRB83Y%2BOn24yYJDjikW%2BjqgLCDR6L0BZkv0gIuKdAwpPQgXLlczfQJ9CcjzuKPiRqoQYbAE0M6LVbJYFAhzeB6IhB9zujNQ518vxbgMujPGqtrFpm0gLCEFqMIbP7VwyJrNkZ9yYjmckDMoCgUBkCU4vdiwI5w%2F%2Fy1%2F4lhsR4%2F5wnnaWY4vfpAfYwUVMGVhIc1BwRyCeTnhAj6hfQwsUpDvDTAC0G6RODGO%2F%2FMwcIsADBx3j2NJFBJeHz9NxAqDNjS0DAHwELQHyHM8488RUghCQAx9GHJEgvI' +
			'YU8%2BfzSS4X%2F8eIFDO%2FzIsxA0BoxCUB4s8ENjAqU8coIVHyyAAyj5%2FJOPHZbcuBM%2FtnwRBjTVLEOQNR4EQo4ZQ5iYkDkRRELQKQpAMUMDd%2FSTDzr%2FxJNNlAPxcx5D1Ywy2Efw5PGACh3QQEMK6rS0iQKc9CABJHsixI8LdhBUTyE%2FbMEKURrlY8kDA3SxHkbWEAHBIPAE4wEAATD1zz1OLP%2BwwA7E3KjOLqP2oIVNmjTgxQtZRLqQP9NM0gk9LT1zwwiqWOQPHQBEMM4%2Fs0wxQAeKlIOQLBbYsU54NaRRUy8PiKFJAqo0xM8wVDCAAQNY2ONPNi200AxBfAAQxj%2F2PDGDADQldM8hE6RACCgNXPiSOkLooMwJUOCpUD2AYMBCI9JU0QI69lhBwmF5epGAh%2F%2Bws4sBrKTECxcRDADDNTAJ0sAsV5DwDEPjTAEAGO3kgwgDhfhDywKgEGSPHwdAUAw%2F' +
			'tWQDzAK1NOTPOMQk%2BhI5HYxBSwSg8JVPouk4YyI9UzyQgQt9ZLFAGvJCEkFb4SnDxQJrRFDFHhNgEk4VMP%2F%2F588fGSxzT98EbfJDKiIQEEU9cExwijJVkGDDJfjk08oZB5iizCRQMJACKPtgssIIYSDLj5V9pSNDGKMW1AYLJQzhySa3PCDIhOKs4482ZzgghhELQNBAEJF4sx854HCqoUCpIJCLRfxs4wotezpxQAdJ%2FUPGCvUM9E4uZkhAgiL20DNLK9kIu%2FxBcZhQDz2ncBHCAUPAI1AOALyx5xI7XIPNLHrQQQNKsAdroG59CAGCFebRBAboIAJxoBO%2FRJCAaAzkExZIQAIYYIIvkMIjCIQIP1jwB32kwhbvqEEbBsKNAiAhUvoghiY4gQtxqC%2BEDbEHCWQzkBokRyC8AAAjQHB4En%2FYoAwDoYcHCDGQeDhiWkQ0CR4kgIt5uCMTC4hFFGvSDR9EgAc2aIAV' +
			'kLVFmLzDEWdQQya6V8Y2uhEhAQEAOw%3D%3D';
	var gjImg = document.createElement('img');
	gjImg.src = gjImgData;

	gjLink.appendChild(gjImg);
	gjTd.appendChild(gjLink);


	function encodeTime(time) {
	        var startTimeMatch = /^((?:\d+:)?\d{1,2}(?:\.\d{1,3})?)-(.+)$/.exec(time);
	        if (startTimeMatch) {
	                var startTime = encodeTime(startTimeMatch[1]);
	                time = startTimeMatch[2];
	        }
	
	        var timeMatch = /(?:(\d+):)?(\d{1,2}(?:\.\d{1,3})?)/.exec(time);
	        if (!timeMatch) return '';
	        var seconds = parseFloat(timeMatch[2]);
	        var minutes = parseInt(timeMatch[1]);
	        if (minutes) seconds = seconds + (minutes * 60);
	
	        var res = '';
	        var encTimeArr = seconds.toString().split('');
	        for (var i = 0; i < encTimeArr.length; i++) {
	                var y = (i % 2) ? 100 : 70;
	                y = parseInt(encTimeArr[i]) + y + i;
	                var enc = (encTimeArr[i] == '.') ? '-' : String.fromCharCode(y);
	                res += enc;
	        }
	
	        if (startTime) {
	                res = startTime.replace(/-\w+/, '')+'.'+res;
	        } else if (time[0] == '-') {
	                res = '.'+res;
		} else if (time[time.length - 1] == '-') {
			res += '.';
		}
	
	        return res;
	}

	var gjTime = document.createElement('input');
	gjTime.id = 'greatJobTime';
	gjTime.type = 'text';
	gjTime.value = 'optional time';
	timeFocused = false;
	gjTime.addEventListener('focus', function(e) {
		timeFocused = true;
		if (this.value == 'optional time') this.value = '';
	}, false);
	gjTime.addEventListener('blur', function(e) {
		timeFocused = false;
	}, false);
	gjTime.addEventListener('change', function(e) { document.getElementById('greatJobLink').href = gjURL + encodeTime(this.value); }, false);
	gjTd.appendChild(gjTime);
	
	gjTd.addEventListener('mouseover', function(e) {
		if (timeFocused) return;
		var gj = document.getElementById('greatJobTime');
		document.getElementById('greatJobTime').style.visibility = 'visible';
	}, false);
	gjTd.addEventListener('mouseout', function(e) {
		if (timeFocused) return;
		var gj = document.getElementById('greatJobTime');
		if (gj.value == 'optional time' || gj.value == '') {
			gj.style.visibility = 'hidden';
		}
	}, false);


	var gjStyles = '.watch-recent-shares-div { width: auto; }' +
			'#watch-actions-area { margin-bottom: 16px; }' +
			'#greatJobDiv { margin: 0; height: 44px; }' +
			'#greatJobLink { display: block; }' +
			'#greatJobTime { visibility: hidden; width: 96px; height: 12px; font-family: Verdana; font-size: 7pt; text-align: center; margin-top: 2px; background-color: #fff; border: 1px solid #ccc; }';
	GM_addStyle(gjStyles);
	document.getElementById('more-options').parentNode.parentNode.insertBefore(gjTd, document.getElementById('more-options').parentNode);

})();
