var widgetUrlBase = 'http://www.youtubetree.com/widget?widget=fileViewWidget';
var scriptTag = null;
var treeContainerName = null;
var maxGroupCount = 4;


function createScriptTag() {
	scriptTag = document.createElement('script');
	scriptTag.setAttribute('type', 'text/javascript');
	document.getElementsByTagName("head")[0].appendChild(scriptTag);
}

function cleanupScriptTag() {
	document.getElementsByTagName("head")[0].removeChild(scriptTag);
}

function initializeWidget(containerName) {
	treeContainerName = containerName;
}

function loadFileView(containerName, treeId) {
	treeContainerName = containerName;
	createScriptTag();
	scriptTag.src = widgetUrlBase + '&a=' + treeId + '&cb=createWidgetCallback';
}

function getWidgetContainer() {
	return document.getElementById(treeContainerName);
}

function createWidgetCallback(responseText) {
	getWidgetContainer().innerHTML = responseText;
	cleanupScriptTag();
}

group={
	loadedLevelNumber: 0,
	youtubeVideoId: null,
	groupHTMLHolder: null,
	
	handleGroupClick: function(groupId, levelNumber, clickNode) {
		group.loadedLevelNumber = levelNumber + 1;
		createScriptTag();
		scriptTag.src = widgetUrlBase + '&cb=group.getGroupChildrenCallback&action=getGroup&id=' + groupId;
		var nextBox = getGroupBoxNode(group.loadedLevelNumber);
		var clickBox = getGroupBoxNode(group.loadedLevelNumber - 1);
		removeClassFromChildren(clickBox, "tree-videoItemSelected", "tr");
		addClassToDomNode(clickNode, "tree-videoItemSelected");
	},
	
	getGroupChildrenCallback: function(responseText) {
		//var nextBox = document.getElementById("videoGroupDiv" + group.loadedLevelNumber);
		var nextBox = getGroupBoxNode(group.loadedLevelNumber);
		if (nextBox != null) {
			nextBox.innerHTML = responseText;
		}
		cleanupScriptTag();
		group.clearChildGroups(group.loadedLevelNumber);
	},
	
	handleVideoClick: function(videoId, groupId, sourceVideoId, clickNode) {
		createScriptTag();
		group.youtubeVideoId = sourceVideoId;
		scriptTag.src = widgetUrlBase + '&cb=group.videoClickCallback&action=loadPlayMode&id=' + groupId;
	},
	
	videoClickCallback: function(responseText) {
		group.groupHTMLHolder = getWidgetContainer().innerHTML;
		getWidgetContainer().innerHTML = responseText;
		cleanupScriptTag();
		video.createPlayerAndPlay();
	},
	
	clearChildGroups: function(levelNumber) {
		for (var i = levelNumber + 1; i < maxGroupCount + 1; i++) {
			var nextNode = document.getElementById("videoGroupDiv" + i)
			if (nextNode != null) {
				nextNode.innerHTML = "";
			}
		}
	}
}

video={
	player: null,
	
	createPlayerAndPlay: function() {
		var params = { allowScriptAccess: "always", allowFullScreen: "true" };
    	var atts = { id: "ytPlayer" };
    	swfobject.embedSWF("http://www.youtube.com/e/" + group.youtubeVideoId +"?enablejsapi=1&playerapiid=ytplayer&fs=1",
                       "playerDiv", "560", "349", "8", null, null, params, atts);
		video.getVideoFromYouTube(group.youtubeVideoId);
	},
	
	closePlayMode: function() {
		getWidgetContainer().innerHTML = group.groupHTMLHolder;
		group.groupHTMLHolder = null;
	},
	
	playVideo: function(youTubeId) {
		video.player.loadVideoById(youTubeId);
		video.getVideoFromYouTube(youTubeId);
	},
	
	getVideoFromYouTube: function(youTubeId) {
		createScriptTag();
		scriptTag.src = "http://gdata.youtube.com/feeds/api/videos/" + youTubeId + "?callback=video.videoInfoArrived&alt=json-in-script";
	},
	
	videoInfoArrived: function(responseJson) {
		document.getElementById("videoTitleDiv").innerHTML = responseJson.entry.title.$t;
		cleanupScriptTag();
	}
}

function onYouTubePlayerReady(playerId) {
	video.player = document.getElementById("ytPlayer");
	video.player.playVideo();
}

function addClassToDomNode(domNode, className) {
	domNode.className += " " + className;
}

function removeClassFromDomNode(domNode, className) {
	var classNameArray = domNode.className.split(" ");
	for (var i = 0; i < classNameArray.length; i++) {
		if (classNameArray[i] == className) {
			classNameArray.splice(i,1);
			break;
		}
	}
	
	var newClassName = "";
	for (var i = 0; i < classNameArray.length; i++) {
		if (i > 0) {
			newClassName += " ";
		}
		newClassName += classNameArray[i];
	}
	domNode.className = newClassName
}

function getGroupBoxNode(levelNumber) {
	return document.getElementById("videoGroupDiv" + levelNumber);
}

function removeClassFromChildren(parentDomNode, classNameString, nodeTypeString) {
	var elementList = parentDomNode.getElementsByTagName(nodeTypeString);
	for (var i = 0; i < elementList.length; i++) {
		removeClassFromDomNode(elementList[i], classNameString);
	}
}
