/*
 * YouTube Annotation Javascript v0.2.1
 * Copyright (c) 2008 Jacob Seidelin, cupboy@gmail.com, http://blog.nihilogic.dk/
 * MIT License [http://www.opensource.org/licenses/mit-license.php]
 */


var YouTubeStateChangeHandlers = {};

var YouTubeLoadCallbacks = {};

var YouTubeAnnotation = (function() {
	var $ = function(id) {return document.getElementById(id);};

	function initAnnotation(strPlayerID) {
		var oPlayer = $(strPlayerID);
		if (!oPlayer) return;

		var oFormField = $(strPlayerID + "_annotation_field");
		if (!oFormField) {
			var oFormField = document.createElement("input");
			oFormField.setAttribute("id", strPlayerID + "_annotation_field");
			oFormField.setAttribute("type", "hidden");
			oPlayer.parentNode.appendChild(oFormField);
		}
		oPlayer.formfield = oFormField;

		YouTubeStateChangeHandlers[strPlayerID] = function(iState) {
			var oAnnDiv = $(strPlayerID + "_annotations");
			if (iState == -1) {
				oPlayer.annotations = [];
			}
			if (iState == 5 || (iState == 3 && oPlayer.getVideoUrl() != oPlayer.videourl)) {
				var strURL = oPlayer.getVideoUrl();
				var aID = strURL.match(/v=(\w[\w|-]*)/)
				oPlayer.videourl = strURL;
				oPlayer.videoid = aID[1];
				oPlayer.annotations = [];

				YouTubeLoadCallbacks[oPlayer.videoid] = 
					function(oResponse) {
						oPlayer.annotations = oResponse.annotations

						if (!oPlayer.interval) {
							oPlayer.interval = setInterval(
								function() {
									checkAnnotation(oPlayer);
								}, 100
							);
						}
					};

				var oScript = document.createElement("script");
				oScript.setAttribute("type", "text/javascript");
				document.body.appendChild(oScript);
				oScript.src = "http://json-ytann.appjet.com/" + oPlayer.videoid + "?callback=YouTubeLoadCallbacks['" + oPlayer.videoid + "']";
			}
		}
		oPlayer.addEventListener("onStateChange", "YouTubeStateChangeHandlers." + strPlayerID);
	}
	

	function parseTime(strTime) {
		var aTime = strTime.split(":");
		return parseInt(aTime[0],10) * 3600 + parseInt(aTime[1],10) * 60 + parseFloat(aTime[2]);
	}
	
	function checkAnnotation(oPlayer) {
		if (!(oPlayer && oPlayer.getCurrentTime && oPlayer.annotations)) return;
	
		var strText = "";
		var iTime = oPlayer.getCurrentTime();

		var aAnnotations = oPlayer.annotations;
	
		var bChanged = false;
		for (var i=0;i<aAnnotations.length;i++) {
			var oAnn = aAnnotations[i];
			if (oAnn.displayPosition) {
				if (iTime >= parseTime(oAnn.displayPosition.t1) && iTime < parseTime(oAnn.displayPosition.t2)) {
	
					strText += oAnn.text + "\r\n";
		
					if (!oAnn.visible) {
						bChanged = true;
						oAnn.visible = true;
						if (typeof oPlayer.onAnnotation == "function") {
							oPlayer.onAnnotation(oAnn);
						}
					}
				} else {
					if (oAnn.visible) {
						bChanged = true;
						oAnn.visible = false;
						if (typeof oPlayer.onAnnotationRemoved == "function") {
							oPlayer.onAnnotationRemoved(oAnn);
						}
					}
				}
			}
		}
		if (bChanged) {
			oPlayer.formfield.value = strText;
		}
	}

	return initAnnotation;
})();


function onYouTubePlayerReady(strPlayerID) 
{
	YouTubeAnnotation(strPlayerID);
}
