	var req;
	var firstClip;
	var t;
	var nowShowing = -1;
	var numberOfReleases = 0;
	var releaseArray = new Array();
	var releases = document.createElement("DIV"); releases.id = "releases";
	var pageActive = false;
	var percentageThrough = 0;
	var loadAttempts = 0;
	var PID = "vpknUxhaFZ04hKNnMtH1n0KPR032XM8U";
	var portalName = "Thomas%20the%20Tank%20Engine%20France";
	var playerName = "Thomas%20France%20Home%20Page";
	
	goGetReleases();

	function goGetReleases()
	{
		var requestString = "http://feeds.theplatform.com/ps/JSON/PortalService/1.8/getReleaseList?PID=" + PID + "&sortField=title&sortDescending=true";
		req = new JSONRequest (requestString,"parseReleases" );
		req.send();
	}
	
	function setReleaseURL(theURL)
	{
		tpController.setReleaseURL(theURL + "&Portal=" + portalName + "&Player=" + playerName);	
	}
	
	function parseReleases(response)
	{
		if (typeof response == 'string')
		{
			//alert ( "There was an exception: " + response );
		}
		else
		{
			//response.items.length);
			nowShowing = -1;
			if(response.items.length > 0)
			{
				firstClip = response.items[0].URL.substring(0,response.items[0].URL.indexOf("&"));
				if(pageActive)
				{
					while(releaseArray.length > 0)
					{
						releaseArray.pop();
					}
				}
				for (var i = 0; i < response.items.length; i++)
				{
					var release = response.items[i];
					var thumbWrap = document.createElement("DIV");
					var hyperlink = document.createElement("A"); 
					var img = document.createElement("DIV");
					var toolTip = document.createElement("DIV");
					var toolTipText = document.createElement("SPAN");
					
					//release.title);
		
					hyperlink.href = "javascript:doThumbnailClick('" + release.URL.substring(0,release.URL.indexOf("&")) + "'," + i.toString() + ");";
					hyperlink.id = "tn_" + i;
					hyperlink.className = "thumbFrame";
					hyperlink.toolTipId = "tt_" + i.toString();;
					
					img.style.backgroundImage = "url(" + release.thumbnailURL + ")";
					img.className = "thumbPic";
					img.appendChild(hyperlink);
					
					hyperlink.onmouseover = function()
					{
						toggleVisibility(document.getElementById(this.toolTipId));
					}
					
					hyperlink.onmouseout = function()
					{
						toggleVisibility(document.getElementById(this.toolTipId));
					}

					toolTipText.innerHTML = release.title;

					toolTip.className = "thumbTT";
					toolTip.appendChild(toolTipText);
					toolTip.id = "tt_" + i.toString();
					
					if(i < 4)
					{
						toolTip.style.left = ((80*i)+15).toString() + "px";
					}
					else
					{
						toolTip.style.left = ((80*i)+15).toString() + "px";;
					}

					thumbWrap.appendChild(img);
					thumbWrap.className = "thumbWrap";
					thumbWrap.style.left = (80*i).toString() + "px";
					
					try
					{
						releases.appendChild(thumbWrap);
						releases.appendChild(toolTip);
					}
					catch(e)
					{
					}

					
					releaseArray.push(release);
				}
				numberOfReleases = response.items.length;
				if(!pageActive)
				{
					t = setInterval(isTpControllerLoaded,100);
				}
				else
				{
					setReleaseURL(firstClip);
					highlight(0);
					nowShowing = 0;
					disablePreviousButton();
					if(numberOfReleases < 2)
					{
						disableNextButton();
					}
					else
					{
						enableNextButton();
					}
				}
				
			}
		}
		//response.items.length);
	}
	
	function filterByCategory(categoryName,senderId)
	{
		var releaseThumbs = document.getElementById("releases").getElementsByTagName("DIV");
		var toRemove = new Array();
		var tvCats = document.getElementById("tvCategories").getElementsByTagName("A");
		
		for(var i = 0; i < releaseThumbs.length; i++)
		{
			if(releaseThumbs[i].className == "thumbPic")
			{
				toRemove.push(releaseThumbs[i]);
			}
		}
		for(var i = 0; i < toRemove.length; i++)
		{
			toRemove[i].parentNode.removeChild(toRemove[i]);
		}

		if(categoryName != "all")
		{
			filter = "&query=Categories|" + categoryName;
			filter = filter.replace(" ","%20");
		}
		else
		{
			filter = "";
		}
		goGetReleases();
		clearFocus();
		
		
		for(var i = 0; i < tvCats.length; i++)
		{
			tvCats[i].style.backgroundPosition = "0 0";
		}
		
		document.getElementById(senderId).style.backgroundPosition = "0 -16px";
		document.getElementById(senderId).style.cursor = "default";
	}

	function isTpControllerLoaded()
	{
		if(tpController)
		{
			clearInterval(t);
			tpController.addEventListener("OnPlayerLoaded", "onPlayerLoaded");
			tpController.addEventListener("OnReleaseEnd", "onReleaseEnd");
			//var ends = Number(document.getElementById("ends").innerHTML); document.getElementById("ends").innerHTML = (ends+1).toString();
			tpController.addEventListener("OnMediaPlaying", "onMediaPlaying");
			//var playings = Number(document.getElementById("playings").innerHTML); document.getElementById("playings").innerHTML = (playings+1).toString();
		}
	}
	
	function changeClipPosition(position)
	{
		var clip = Number(position);
		if(clip == 0)
		{
			disablePreviousButton();
		}
		else
		{
			enablePreviousButton();
		}
		if(position == (numberOfReleases-1))
		{
			disableNextButton();
		}
		else
		{
			enableNextButton();
		}
		nowShowing = position;
	}
	
	function disablePreviousButton()
	{
		document.getElementById("btnPreviousClip").href = "javascript:void(0);";
		document.getElementById("btnPreviousClip").style.backgroundPosition = "0 -74px";
		document.getElementById("btnPreviousClip").className = "";
	}
	
	function disableNextButton()
	{
		document.getElementById("btnNextClip").href = "javascript:void(0);";
		document.getElementById("btnNextClip").style.backgroundPosition = "0 -74px";
		document.getElementById("btnNextClip").className = "";
	}
	
	function disablePauseButton()
	{
		document.getElementById("btnPause").href = "javascript:void(0);";
		document.getElementById("btnPause").style.backgroundPosition = "0 -70px";
		document.getElementById("btnPause").className = "";
	}
	
	function disablePlayButton()
	{
		document.getElementById("btnPlay").style.display = "none";
	}

	function disableMuteButton()
	{
		document.getElementById("btnMute").style.backgroundPosition = "0 -60px";
		document.getElementById("btnMute").href = "javascript:void(0);";
		document.getElementById("btnMute").className = "";
	}
	
	function disableUnMuteButton()
	{
		document.getElementById("btnUnMute").style.backgroundPosition = "0 -60px";
		document.getElementById("btnUnMute").href = "javascript:void(0);";
		document.getElementById("btnUnMute").className = "";
	}

	function hidePauseButton()
	{
		document.getElementById("btnPause").style.display = "none";
	}
	
	function hidePlayButton()
	{
		document.getElementById("btnPlay").style.display = "none";
	}

	function hideMuteButton()
	{
		document.getElementById("btnMute").style.display = "none";
	}

	function hideUnMuteButton()
	{
		document.getElementById("btnUnMute").style.display = "none";
	}
	
	function showPauseButton()
	{
		document.getElementById("btnPause").style.display = "block";
	}
	
	function enablePreviousButton()
	{
		document.getElementById("btnPreviousClip").style.backgroundPosition = "0 0";
		document.getElementById("btnPreviousClip").href = "javascript:buttonClick('previous');";
		document.getElementById("btnPreviousClip").className = "btnPreviousClipH";
	}
	
	function enableNextButton()
	{
		document.getElementById("btnNextClip").style.backgroundPosition = "0 0";
		document.getElementById("btnNextClip").href = "javascript:buttonClick('next');";
		document.getElementById("btnNextClip").className = "btnNextClipH";
	}
	
	function enablePauseButton()
	{
		document.getElementById("btnPause").style.display = "block";
		document.getElementById("btnPause").style.backgroundPosition = "0 0";
		document.getElementById("btnPause").href = "javascript:buttonClick('pause');";
		document.getElementById("btnPause").className = "btnPauseH";
	}
	
	function enablePlayButton()
	{
		document.getElementById("btnPlay").style.display = "block";
		document.getElementById("btnPlay").style.backgroundPosition = "0 0px";
		document.getElementById("btnPlay").href = "javascript:buttonClick('play');";
		document.getElementById("btnPlay").className = "btnPlayH";
	}
	
	function enableMuteButton()
	{
		document.getElementById("btnMute").style.display = "block";
		document.getElementById("btnMute").style.backgroundPosition = "0 0";
		document.getElementById("btnMute").href = "javascript:buttonClick('mute');";
		document.getElementById("btnMute").className = "btnMuteH";
	}
	
	function enableUnMuteButton()
	{
		document.getElementById("btnUnMute").style.display = "block";
		document.getElementById("btnUnMute").style.backgroundPosition = "0 0";
		document.getElementById("btnUnMute").href = "javascript:buttonClick('unmute');";
		document.getElementById("btnUnMute").className = "btnUnMuteH";
	}
	
	function clearFocus()
	{
		document.getElementById("top").focus();
	}
	
	function buttonClick(button)
	{
		switch(button)
		{
			case "previous" :
			
				document.getElementById("playerDiv").style.display = "block";
				document.getElementById("goToVideo").style.display = "none";
			
				percentageThrough = 0;
				loadAttempts = 0;
				
				enableNextButton();
				hidePlayButton();
				showPauseButton();
				disablePauseButton();
				
				tpController.removeEventListener("OnReleaseEnd","onReleaseEnd");
				//var ends = Number(document.getElementById("ends").innerHTML); document.getElementById("ends").innerHTML = (ends-1).toString();

				tpController.addEventListener("OnReleaseStart", "onReleaseStart");
				//var starts = Number(document.getElementById("starts").innerHTML); document.getElementById("starts").innerHTML = (starts+1).toString();

				//alert("Readying to play release " + (nowShowing-1).toString());
				setReleaseURL(releaseArray[nowShowing-1].URL);
				
				unHighlight(nowShowing);
				highlight((nowShowing-1).toString());
				
				if((nowShowing-1) == 0)
				{
					disablePreviousButton();
				}
				
				nowShowing--;
				clearFocus();
				enablePauseButton();
				
				break;
				
			case "play" :
				document.getElementById("playerDiv").style.display = "block";
				document.getElementById("goToVideo").style.display = "none";
				tpController.pause(false);
				document.getElementById("btnPlay").style.display = "none";
				document.getElementById("btnPause").style.display = "block";
				break;
				
			case "pause" :
				tpController.pause(true);
				document.getElementById("btnPause").style.display = "none";
				enablePlayButton();
				break;
				
			case "next" :
				document.getElementById("playerDiv").style.display = "block";
				document.getElementById("goToVideo").style.display = "none";
				
				percentageThrough = 0;
				loadAttempts = 0;
				
				enablePreviousButton();
				hidePlayButton();
				showPauseButton();
				disablePauseButton();
				
				tpController.removeEventListener("OnReleaseEnd","onReleaseEnd");
				//var ends = Number(document.getElementById("ends").innerHTML); document.getElementById("ends").innerHTML = (ends-1).toString();
				
				tpController.addEventListener("OnReleaseStart", "onReleaseStart");
				//var starts = Number(document.getElementById("starts").innerHTML); document.getElementById("starts").innerHTML = (starts+1).toString();
				
				//alert("Readying to play release " + (nowShowing+1).toString());
				setReleaseURL(releaseArray[nowShowing+1].URL);
				
				unHighlight(nowShowing);
				highlight((nowShowing+1).toString());
				
				if((nowShowing+1) == (numberOfReleases-1))
				{
					disableNextButton();
				}
				
				nowShowing++;
				clearFocus();
				enablePauseButton();
				
				break;
				
			default :
				break;
		}
	}
	
	function onPlayerLoaded(evt)
	{
		tpController.removeEventListener("OnPlayerLoaded","onPlayerLoaded");
		//firstClip);
		setReleaseURL(firstClip);
		tpController.addEventListener("OnReleaseStart", "onReleaseStartFirst");
		//var starts = Number(document.getElementById("starts").innerHTML); document.getElementById("starts").innerHTML = (starts+1).toString();
	}
	
	function onReleaseStartFirst(evt)
	{
		//alert("Release has started");
		document.getElementById("loading").style.display = "block";
		tpController.removeEventListener("OnReleaseStart","onReleaseStartFirst");
		//var starts = Number(document.getElementById("starts").innerHTML); document.getElementById("starts").innerHTML = (starts-1).toString();
		initializePage();
	}
	
	function onReleaseStart(evt)
	{
		//alert("Release " + nowShowing + " has started");
		
		document.getElementById("loading").style.display = "block";

		tpController.removeEventListener("OnReleaseStart","onReleaseStart");
		//var starts = Number(document.getElementById("starts").innerHTML); document.getElementById("starts").innerHTML = (starts-1).toString();
		
		tpController.addEventListener("OnMediaPlaying", "onMediaPlaying");
		var playings = Number(document.getElementById("playings").innerHTML); document.getElementById("playings").innerHTML = (playings+1).toString();
		
		tpController.addEventListener("OnReleaseEnd","onReleaseEnd");
		//var ends = Number(document.getElementById("ends").innerHTML); document.getElementById("ends").innerHTML = (ends+1).toString();
	}
	
	function onReleaseEnd(evt)
	{
		
		//alert(evt.data.clips[0].URL);
		//alert(nowShowing);
		
		if(percentageThrough > 1)
		{
			//alert("Release " + nowShowing + " has ended");
			
			if(nowShowing+1 == numberOfReleases)
			{
				//alert('the end');
				enablePlayButton();
				hidePauseButton();
				disablePlayButton();
				document.getElementById("playerDiv").style.display = "none";
				document.getElementById("goToVideo").style.display = "block";
			}
			else
			{
				
				document.getElementById("playerDiv").style.display = "block";
				document.getElementById("goToVideo").style.display = "none";
				
				percentageThrough = 0;
				loadAttempts = 0;
				
				enablePreviousButton();
				hidePlayButton();
				showPauseButton();
				disablePauseButton();
				
				tpController.removeEventListener("OnReleaseEnd","onReleaseEnd");
				//var ends = Number(document.getElementById("ends").innerHTML); document.getElementById("ends").innerHTML = (ends-1).toString();
				
				tpController.addEventListener("OnReleaseStart", "onReleaseStart");
				//var starts = Number(document.getElementById("starts").innerHTML); document.getElementById("starts").innerHTML = (starts+1).toString();
				
				//alert("Readying to play release " + (nowShowing+1).toString());
				setReleaseURL(releaseArray[nowShowing+1].URL);
				
				unHighlight(nowShowing);
				highlight((nowShowing+1).toString());
				
				if((nowShowing+1) == (numberOfReleases-1))
				{
					disableNextButton();
				}
				
				nowShowing++;
				clearFocus();
				enablePauseButton();
				
				
				//tpController.removeEventListener("OnReleaseEnd","onReleaseEnd");
//
//				percentageThrough = 0;
//				loadAttempts = 0;
//				
//				unHighlight(nowShowing);
//				hidePauseButton();
//				enablePlayButton();
//				document.getElementById("btnPlay").href = "javascript:setReleaseURL('" + releaseArray[nowShowing].URL + "'); buttonClick('play'); highlight('" + nowShowing.toString() + "'); clearFocus(); tpController.addEventListener('OnReleaseStart', 'onReleaseStart');";
//				document.getElementById("goToNext").style.display = "block";
//				document.getElementById("playerDiv").style.visibility = "hidden";
//				document.getElementById("goToNext").href = "javascript:tpController.addEventListener('OnReleaseStart', 'onReleaseStart'); goNext('" + nowShowing + "');";
//				clearFocus();
			}
		}
		else
		{
			//alert('ding');
			document.getElementById("loading").style.display = "block";
			document.getElementById("loading").style.backgroundPosition = "0 -" + (11 * loadAttempts).toString() + "px";
			setReleaseURL(releaseArray[nowShowing].URL);
			loadAttempts++;
		}
	}
	
	function goNext(where)
	{
		document.getElementById("playerDiv").style.visibility = "visible";
		document.getElementById("goToNext").style.display = "none";
		//alert(Number(where)+1);
		//alert(releaseArray[Number(where)+1].URL);
		setReleaseURL(releaseArray[Number(where)+1].URL);
		changeClipPosition(Number(where)+1);
		highlight(Number(where)+1);
		enablePauseButton();
		hidePlayButton();
	}
	
	function initializePage()
	{
		nowShowing = 0;
		highlight(nowShowing);
		//1);
		disablePreviousButton();
		//2);
		enableNextButton();
		//3);
		enablePauseButton();
		//4);
		hidePlayButton();
		//5);
		enableMuteButton();
		//6);
		hideUnMuteButton();
		//7);
		document.getElementById("buttons").style.display = "block";
		document.getElementById("tvCategories").style.display = "block";
		pageActive = true;
	}
	
	function highlight(clip)
	{
		var div = document.getElementById("tn_" + clip.toString());
		div.style.backgroundPosition = "0 -58px";
	}
	
	function unHighlight(clip)
	{
		var div = document.getElementById("tn_" + clip.toString());
		if(nowShowing == -1)
		{
			nowShowing = 0;
		}
		document.getElementById("tn_" + (nowShowing).toString()).style.backgroundPosition = "0 0";
	}
	
	function doThumbnailClick(releaseURL,clip)
	{
		if(nowShowing != clip)
		{
			document.getElementById("playerDiv").style.display = "block";
			document.getElementById("goToVideo").style.display = "none";
			
			percentageThrough = 0;
			loadAttempts = 0;
			//removeLegacyEventListeners();
			tpController.removeEventListener("OnReleaseEnd","onReleaseEnd");
			//var ends = Number(document.getElementById("ends").innerHTML); document.getElementById("ends").innerHTML = (ends-1).toString();
			
			tpController.addEventListener("OnReleaseStart", "onReleaseStart");
			//var starts = Number(document.getElementById("starts").innerHTML); document.getElementById("starts").innerHTML = (starts+1).toString();
			
			setReleaseURL(releaseURL);
			unHighlight(clip);
			changeClipPosition(clip);
			highlight(clip);
			enablePauseButton();
			hidePlayButton();
			enableMuteButton();
			hideUnMuteButton();
			clearFocus();
		}
		else
		{
			//'blocked');
		}
	}

	function removeLegacyEventListeners()
	{
		//alert("Removing old event listeners");
		tpController.removeEventListener("OnReleaseStart", "onReleaseStartFirst");
		tpController.removeEventListener("OnReleaseStart","onReleaseStart");
	}
	
	function toggleVisibility(e)
	{
		if((e.style.display == "none") || (e.style.display == ""))
		{
			e.style.display = "block";
		}
		else
		{
			e.style.display = "none";
		}
	}
	
	function onMediaPlaying(evt)
	{
		percentageThrough = Number(evt.data.percentComplete);
		//document.getElementById("timer").innerHTML += evt.data.percentComplete.toString() + "<br>";
		if(percentageThrough > 1)
		{
			document.getElementById("loading").style.backgroundPosition = "0 0";
			document.getElementById("loading").style.display = "none";
			//tpController.mute(true); // uncomment this to not go mad when developing... ;-)
		}
		if(percentageThrough > 5)
		{
			tpController.removeEventListener("OnMediaPlaying", "onMediaPlaying");
			//var playings = Number(document.getElementById("playings").innerHTML); document.getElementById("playings").innerHTML = (playings-1).toString();
		}
	}