var firstTime = true;
var myPlayer = null;
var curVideoId = null;
var curVideoItem = null;
var curVideoIndex = 0;
var allowMouseOver = true;
var timeDelay = 0;

var lastMouseOver = null;
var boolUseCapture = false;
var allowClick = true;
var playPending = false;


//---------------------------------------------------------------------------------

// Pageload - find div "embedplayer" and replace it with the embedded player.

function pageload() {

	//var obj = document.getElementById("embedplayer");
	//obj.innerHTML = ""; // hide warning text.
	//playerVisible(false);
	var obj = document.getElementById("startup");
	obj.innerHTML = "Choose any video from the list on the right,<br>and then&nbsp;<b style=\"color:#000000;background-color:#8080c0;\"> click the play button.</b><br><br>Scroll the list up or down to see more."; 
	playerVisible(true);

}

//---------------------------------------------------------------------------------

// newPlayer - New embedded player, given video id.

function newPlayer(videoid) {

	// Internet Explorer win't do this until the target object is made visible.
	// Use small time delay, should avoid white screen in other browsers (but not IE).
	// setTimeout("playerVisible(true)",1000);

    // Youtube is not counting all plays  2009/11/27
    // Possibly "autoplay=1" is a category which is NOT counted.
    // Parameter can be omitted as default is 0.

	playPending = true;
	setTimeout("playPending = false",1000);

	playerVisible(true); // for IE set on

    var params = { allowScriptAccess: "always", allowFullScreen: true };
    var atts = { id: "myytplayer" };
	var urlStart = "http://www.youtube.com/v/";
//	var urlEnd = "&enablejsapi=1&playerapiid=player1&fs=1&autoplay=1&rel=0&showinfo=0&border=0";
//	var urlEnd = "&enablejsapi=1&playerapiid=player1&fs=1&autoplay=1&rel=0&showinfo=0&border=0&feature=player_embedded";
	var urlEnd = "&enablejsapi=1&playerapiid=player1&fs=1&autoplay=0&rel=0&showinfo=0&border=0"; // 2009/11/27 PK



	var newUrl = urlStart + videoid + urlEnd;

	swfobject.embedSWF(newUrl,"embedplayer", "480", "385", "8", null, null, params, atts); 
	
	playerVisible(false); // For IE set off again. Waste of time?
}

//---------------------------------------------------------------------------------

function onYouTubePlayerReady(playerId) {
	myPlayer = document.getElementById("myytplayer");
	myPlayer.addEventListener("onStateChange", "onytplayerStateChange",boolUseCapture);
	myPlayer.addEventListener("onError", "onytplayerError",boolUseCapture);
	playerVisible(true);
	allowClick = true;
}

//---------------------------------------------------------------------------------

function playerVisible(x) {


	var obj = document.getElementById("playerbox");
	if (x) {
		obj.style.visibility = "visible";
	} else {
		obj.style.visibility = "hidden";
	}
}

//---------------------------------------------------------------------------------

function onytplayerError(code) {
	// alert("Player Error, code: " + code); 
}

//---------------------------------------------------------------------------------

/*
  State of the player. Possible values are:
-1 unstarted
 0 ended
 1 playing
 2 paused
 3 buffering
 5 video cued
*/


//---------------------------------------------------------------------------------

function play3(n) {

	if (timeDelay) {
		return;
	}

	if (!allowClick) {
		return;
	}

	playerVisible(false); // New innovation - will it avoid white flash?

	document.getElementById("busyimg").style.visibility = "visible";


	curVideoIndex = n;
	var id = videoId[n];

//
//	if (!firstTime) {
//		var curVideoUrl = myPlayer.getVideoUrl();
//	    if (curVideoUrl != undefined) {
//	       	var same = curVideoUrl.indexOf(id);
//	       	if (same != -1) { // found it
//	       		myPlayer.playVideo(); // just play and quit.
//	       		return false;
//	       	}
//		}
//	}
//
	///////////// above = same id, play and exit //////////////



  
	if (!firstTime) {
		var curVideoUrl = myPlayer.getVideoUrl();
	    if (curVideoUrl != undefined) {
	       	var same = curVideoUrl.indexOf(id);
	       	if (same != -1) { // found it
//	       		myPlayer.playVideo(); // just play and quit.
				document.getElementById("busyimg").style.visibility = "hidden";
				playerVisible(true); // debugging vanishing player!
	       		return false;
	       	}
		}
	}

	///////////// above = same id, (do not play), then exit //////////////


	allowClick = false;

	curVideoId = id; // save the id

	showTitles(n);

	
	if (firstTime) {
		firstTime  = false;
	} else {
		erasePlayer();
	}
	newPlayer(id);

	// playerVisible(true);  // New innovation - will it avoid white flash?
	
}

//---------------------------------------------------------------------------------

function oldShowTitles(n) {

	var obj = document.getElementById('foottitle');
	obj.innerHTML = videoTitle[n];
	obj.style.visibility = "visible";


	obj = document.getElementById('footdescr');
	obj.innerHTML = videoDescr[n];
	obj.style.display = "block";

/*
	obj = document.getElementById('footstats');
	if (videoRecorded[n] == "") {
     	obj.innerHTML = "<span>Views: </span>" + videoViews[n];

	} else {
   		obj.innerHTML = "<span>Views: </span>" + videoViews[n] + "&nbsp;&nbsp;&nbsp;&nbsp;" + "<span id=\"sdate\"><span>Recorded: </span>" + videoRecorded[n] + "</span>";
	}
	obj.style.display = "block";
*/

// display views and date

	obj = document.getElementById('fsl');
	obj.innerHTML = "<span>Views: </span>" + videoViews[n];

	obj = document.getElementById('fsr');
	if (videoRecorded[n] == "") {
   		obj.innerHTML = "";
	} else {
   		obj.innerHTML = "<span>Recorded: </span>" + videoRecorded[n];
	}

	obj = document.getElementById('footstats');
	obj.style.display = "block";


	obj = document.getElementById('videotitle');
	obj.style.display = "none";

	obj = document.getElementById('videodescr');
	obj.style.display = "none";

	obj = document.getElementById('videostats');
	obj.style.display = "none";


}

//---------------------------------------------------------------------------------

function showTitles(n) {

	var obj = document.getElementById('footdescr');
	obj.style.display = "none";
	var obj = document.getElementById('footstats');
	obj.style.display = "none";

	obj = document.getElementById('foottitle');
	obj.style.visibility = "hidden";

	if (n == -1) {
		obj = document.getElementById('videotitle');
		obj.innerHTML = "";
		obj.style.display = "block";

		obj = document.getElementById('videodescr');
		obj.innerHTML = "";
		obj.style.display = "block";

		obj = document.getElementById('videostats');
		// obj.innerHTML = "";
		obj.style.display = "none";




	} else {
		setBubble(n);

		obj = document.getElementById('videotitle');
		obj.innerHTML = videoTitle[n];
		obj.style.display = "block";

		obj = document.getElementById('videodescr');
		obj.innerHTML = videoDescr[n];
		obj.style.display = "block";


//		obj = document.getElementById('videostats');
//     	if (videoRecorded[n] == "") {
//     		obj.innerHTML = "<span>Views: </span>" + videoViews[n];
//     	} else {
//     		obj.innerHTML = "<span>Views: </span>" + videoViews[n] + "&nbsp;&nbsp;&nbsp;&nbsp;" + "<span id=\"sdate\"><span>Recorded: </span>" + videoRecorded[n] + "</span>";
//     	}
//		obj.style.display = "block";


// display views and date

    	obj = document.getElementById('vsl');
    	obj.innerHTML = "<span>Views: </span>" + videoViews[n];

    	obj = document.getElementById('vsr');
    	if (videoRecorded[n] == "") {
       		obj.innerHTML = "";
    	} else {
       		obj.innerHTML = "<span>Recorded: </span>" + videoRecorded[n];
    	}

    	obj = document.getElementById('videostats');
    	obj.style.display = "block";
    }

}

//---------------------------------------------------------------------------------

function msOver(val) {

	if (!allowMouseOver) {
		return;
	}

	clearTimeout(infoDelay);

	lastMouseOver = val;

	var obj = document.getElementById("imginfo");
	if (videoCache[val].src == "") {
		// alert("vimage cache. videoCache[val].src = {" + videoCache[val].src + "}");
		videoCache[val].src = videoStill[val];  // Keep the image. Aid caching?
	}

	obj.src = videoStill[val];
	obj.style.visibility = "visible";

	oldShowTitles(val);


	playerVisible(false);

	setBubble(val);

}

//---------------------------------------------------------------------------------

var infoDelay = 0;

function msOut(val) {

	if (!allowMouseOver) {
		return;
	}

	// Use small time delay to control flicker in some browsers.
	infoDelay= setTimeout("delayedAction()",60);

}

//---------------------------------------------------------------------------------

function delayedAction() {

	if (!playPending) { // in this case playerVisible should result from player changing state - we hope.
		playerVisible(true);
	}

	// set element class.
	var objid = "vid" + lastMouseOver;
	var obj = document.getElementById(objid);
	if (obj) {
		obj.setAttribute("class","videoitem");
	}

	if (curVideoId) {
		showTitles(curVideoIndex);
	} else {
		showTitles(-1);
	}

}

//---------------------------------------------------------------------------------

function setBubble(val) {

	var objid = "vid" + val;

	if (curVideoItem != null) { // set element class.
		var obj = document.getElementById(curVideoItem );
		obj.setAttribute("class","videoitem");
	}

	curVideoItem = objid;

	// set element class.
	var obj = document.getElementById(objid);
	obj.setAttribute("class","videoitem bubble");

	// partHidden(obj); /* find out if box is partly hidden  - simple, ok version */

}

//---------------------------------------------------------------------------------

function playlistin() {
	if (!allowMouseOver) {
		return;
	}

	playerVisible(false);

}

//---------------------------------------------------------------------------------

function playlistout() {

	playerVisible(true);

	if 	(curVideoIndex != null) {

		obj = document.getElementById("imginfo");
		obj.style.visibility = "hidden";

		obj = document.getElementById('infotitle');
		obj.style.visibility = "hidden";

		obj = document.getElementById('infodescr');
		obj.style.visibility = "hidden";
	}

}

//---------------------------------------------------------------------------------

/*
  State of the player. Possible values are:
-1 unstarted
 0 ended
 1 playing
 2 paused
 3 buffering
 5 video cued
*/

//---------------------------------------------------------------------------------

function onytplayerStateChange(newState) {

	// var obj = document.getElementById("info");

	switch(newState) {
		case -1: // unstarted
		case  0: // ended
		case  2: // paused
			// obj.style.visibility = "visible";
			allowMouseOver = true;
			break;
		case  5: // cued
			// obj.style.visibility = "visible";
			allowMouseOver = true;
			playerVisible(true);
			//////////////////////////////////////////////////// 2009/11/27 PK
			// myPlayer.playVideo(); // does not get counted????
			document.getElementById("busyimg").style.visibility = "hidden";
            ////////////////////////////////////////////////////
			break;
		default: // 1 playing, 3 buffering
			// obj.style.visibility = "hidden";
			allowMouseOver = false;
			playerVisible(true);
			if (newState == 1) {
				document.getElementById("busyimg").style.visibility = "hidden";
			} else {
				document.getElementById("busyimg").style.visibility = "visible";
			}
	}
}

//---------------------------------------------------------------------------------

var videoTitle = new Array();
var videoDescr = new Array();
var videoId    = new Array();
var videoDur   = new Array();
var videoViews = new Array();
var videoRate  = new Array();
var videoThumb = new Array();
var videoStill = new Array();
var videoRecorded = new Array();


//---------------------------------------------------------------------------------

function erasePlayer() {

	var obj = document.getElementById("playerbox");

	var objOld = obj.childNodes[0]; // works in ie with reservations.
									// in firefox, beware of additional text node which changes index.


	var objNew = document.createElement('div');
	objNew.setAttribute('id',"embedplayer");

	if (objOld.hasChildNodes()) {
    	while ( objOld.childNodes.length >= 1 ) {
        objOld.removeChild(objOld.firstChild );       
    	} 
	}

	 obj.replaceChild(objNew,objOld);

}

//---------------------------------------------------------------------------------

function sign(n) {
	if (n>0) {
		return +1;
	} else {
		if (n<0) {
			return -1;
		}
	}
	return 0;
}


//---------------------------------------------------------------------------------

var scrollmillisec = 20;
var scrollpos = 0;
var scrollinc = 4;
var scrollTimer = 0;
var scrolldir = 1;
var scrollHeight = 0;

//-----------------

function scrollp(parm) {


	if (scrollHeight == 0) {
		var obj = document.getElementById("playlist");
		scrollHeight = obj.scrollHeight - obj.clientHeight;
	}


	switch (parm) {
		case 0:
			if (scrollTimer) {
				clearTimeout(scrollTimer);
				scrollTimer = 0;
			} 
			break;
		default:
			scrolldir = sign(parm);
			scrollinc = Math.abs(parm) > 1 ? 4 : 1;
			scrollTimer = setTimeout("scroller()",scrollmillisec); 
	}
}

//----------------------------------------------------------------------------

function scroller() {

	switch (scrolldir) {
		case -1:
			scrollpos=scrollpos>scrollinc?scrollpos-scrollinc:0;
			break;
		case +1:
			scrollpos = scrollpos<scrollHeight?scrollpos+scrollinc:scrollHeight;
			break;
	}

	var obj = document.getElementById("playlist");
	obj.scrollTop=scrollpos;

	if (scrollTimer != 0) {
		scrollTimer = setTimeout("scroller()",scrollmillisec); 
	}
}

//---------------------------------------

function playonscroll() {


	var obj = document.getElementById("playlist");

	scrollpos = obj.scrollTop;

	if (scrollHeight == 0) {
		scrollHeight = obj.scrollHeight - obj.clientHeight;
	}


	if (scrollpos <= 0) {
		obj = document.getElementById("playlstt2");
		obj.style.visibility = "hidden";		
		obj = document.getElementById("playlstt1");
		obj.style.visibility = "hidden";
	} else {
		obj = document.getElementById("playlstt2");
		obj.style.visibility = "visible";
		obj = document.getElementById("playlstt1");
		obj.style.visibility = "visible";		
	}

	if (scrollpos >= scrollHeight) {
		obj = document.getElementById("playlstb1");
		obj.style.visibility = "hidden";
		obj = document.getElementById("playlstb2");
		obj.style.visibility = "hidden";		
	} else {
		obj = document.getElementById("playlstb1");
		obj.style.visibility = "visible";		
		obj = document.getElementById("playlstb2");
		obj.style.visibility = "visible";
	}

}

//------------------------------------------------------------------------------

/* check box partly hidden */

function partHidden(obj) {

	var top = obj.offsetTop;
	var tophidden = top - scrollpos;
	var bottomhidden = top + obj.clientHeight - (scrollpos + 510); // 510 = playlist height

	if (tophidden < 0) {
			smoothScroll(tophidden);
	} else {
		if (bottomhidden > 0) {
			smoothScroll(bottomhidden);
		}
	}	
}

//-------------------------------------------------------------------------------

var scrolla = new Array();
var scrollc = 15;
var scrollint = 50;

//---------

function smoothScroll(n) {

	allowMouseOver = false;
  
	var pi = Math.PI;
	var curpos = scrollpos;

	for (var i = 0; i < scrollc; i++) {
		//var angle = - pi/4 + i/10 * pi/2; 
		var angle = pi * ( (i+1) / scrollc - 0.5)
		var newpos = curpos + n*(Math.sin(angle) + 1)/2 + 0.5;
		scrolla[i] = Math.floor(newpos);
	}

	setTimeout("scrollDelay(0)", scrollint);
}

//-------------------------------

function scrollDelay(x) {
			scrollpos = scrolla[x];
			var obj2 = document.getElementById("playlist");
			obj2.scrollTop=scrollpos;

			if (++x < scrollc) {
				var text = "scrollDelay(" + x + ")";
				setTimeout(text,scrollint);
			} else {
				allowMouseOver=true;
			}
}

//-----------------------------


