var player = null;
function playerReady(thePlayer) {
	player = document.getElementById(thePlayer.id);
	addListeners();
}

DHTML.addEvent(window,"load",lectureSeriesMap);
DHTML.addEvent(window,"resize",sizeFlash);

function lectureSeriesMap(){
	http("get","./common/jsapp/lectureSeriesMap.htm",function(result){
		var qsPageData = new Querystring;
		if(qsPageData.get("lecture")){
			//UGLY tree search
			var lectureLink = qsPageData.get("lecture");
			var matchData = -1;
			for (var i=0;i<result.length;i++){
				for (var j=0;j<result[i].SeriesData.Presentations.length;j++){
					if (result[i].SeriesData.Presentations[j].LinkPattern == lectureLink){
						$("header").innerHTML=result[i].SeriesTitle;
						$$("body")[0].SeriesTitle=result[i].SeriesTitle;
						$$("body")[0].seriesFolder=result[i].SeriesFolder;
						init(result[i].SeriesData);
					}
				}
			}
			
		} else {
			$("header").innerHTML=result[0].SeriesTitle;
			$$("body")[0].SeriesTitle=result[0].SeriesTitle;
			$$("body")[0].seriesFolder=result[0].SeriesFolder;
			init(result[0].SeriesData);
		}
		
		//init(result)
	},null);
	//function(){http("get","./source_json.htm",function(result){init(result)},null);}
}





function sizeFlash(){
	var isIE6=false; //navigator.userAgent.toLowerCase().indexOf("msie 6")>-1;
	var workingWindow=DHTML.getWindowSize();
	$("wrapper").style.height=workingWindow["height"]+"px";
	$("wrapper").style.width=workingWindow["width"]+"px";
	$("rightCol").style.width=workingWindow["width"]-$("leftCol").offsetWidth - 2 + "px";
	var rightFooter=$("rightFooter").offsetHeight;
	var headerOffset=$("header").offsetHeight;
	$("slide").style.height=(isIE6)?workingWindow["height"]-rightFooter-headerOffset-18+"px":workingWindow["height"]-rightFooter-headerOffset+"px";
	var topGap=0;
	var leftItems=$("leftCol").getElementsByTagName("div");
	for (var i=0;i<leftItems.length;i++){
		if (leftItems[i].id!="leftNav"){
			topGap+=leftItems[i].offsetHeight;
			// console.log(leftItems[i].tagName + ": " + leftItems[i].offsetHeight + " sum: " + topGap);
		} else {
			break;
		}
	}
	
	$("slideWrapper").style.height=DHTML.getWindowSize()["height"]-topGap-13+"px";
	if (isIE6){
		$("slideWrapper").style.height=DHTML.getWindowSize()["height"]-topGap+30+"px";
	}
	var canvasXY=[$("slide").offsetWidth,$("slide").offsetHeight];
	var aspectXY=$$("body")[0].presentation["AspectRatio"];
	if ((canvasXY[0]/aspectXY[0])>(canvasXY[1]/aspectXY[1])){
		var slideXY=[Math.round(aspectXY[0]*canvasXY[1]/aspectXY[1])-1,canvasXY[1]];
	} else {
		var slideXY=[canvasXY[0]-1,Math.round(aspectXY[1]*canvasXY[0]/aspectXY[0])];
	}
	$("sizeSlide").style.width=slideXY[0]+"px";
	$("sizeSlide").style.height=slideXY[1]+"px";
	
	
	if(!$$("body")[0].presentation.currentSlide){$$("body")[0].presentation.currentSlide=0};
	fireSlide($$("body")[0].presentation.currentSlide);
}




function init(json){
	var presentation;
	var qsPageData = new Querystring;
	if(qsPageData.get("lecture")){
		for (var i=0;i<json.Presentations.length;i++){
			if (qsPageData.get("lecture")==json.Presentations[i]["LinkPattern"]){
				presentation=json.Presentations[i];
			}
		}
	}
	if (!presentation){presentation=json.Presentations[0]};
		
	$$("body")[0].presentation=presentation;
	$$("body")[0].playState="IDLE";
	
    document.title="Lecture Series - Presentation - " + $$("body")[0].SeriesTitle.replace(/<div>.*?<br \/>(.*?)<\/div>/ig, "$1") + " - " + presentation["Presenter"]["Presenter"];
	pageTracker._trackPageview();
	
	$("playLen").innerHTML = minFormat($$("body")[0].presentation["Duration"]);
	$("slide").style.backgroundColor=presentation["BackgroundColor"];
	var flashVer='9.0.124';
	setPresenter();
	setLinks();
	if(!swfobject.hasFlashPlayerVersion(flashVer)){
		DHTML.removeChildren($("videoPlayer"));
		var flashMsg=$E({tag:"div",id:"flashWarning"});
		flashMsg.style.backgroundColor="#BFBFBF";
		flashMsg.style.height="100%";
		flashMsg.appendChild($E({tag:"h4",innerHTML:"Flash version " + flashVer + " is required to view this content"}));
		flashMsg.lastChild.style.padding="6px";
		var flashLink=flashMsg.appendChild($E({tag:"a",href:"http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash",innerHTML:"Please click here to upgrade"}));
		flashLink.style.display="block";
		flashLink.style.fontWeight="bold";
		flashLink.style.textAlign="center";
		$("videoPlayer").appendChild(flashMsg);
	} else {
		startVideo(presentation["VideoPath"]);
		buildSlides(presentation["Slides"]);
		sizeFlash();
	}
}

function setPresenter(){
	var presenterInfo=$$("body")[0].presentation["Presenter"];
	var lastLine=$("tabPresenter").getElementsByTagName("ul")[0].getElementsByTagName("li")[1];
	for (keyTitle in presenterInfo){
		lastLine.parentNode.insertBefore($E({tag:"li",className:"presenter",innerHTML:keyTitle + ' : ' + presenterInfo[keyTitle]}),lastLine);
	}
	$("mainSlideTitle").appendChild(document.createTextNode($$("body")[0].presentation["Presenter"]["Presenter"]));
	$("mainSlideTitle").appendChild($E({tag:"br"}));
	$("mainSlideTitle").appendChild(document.createTextNode($$("body")[0].presentation["Presenter"]["Title"]));
}

function setLinks(){
	var linkList=$$("body")[0].presentation["Links"];
	var lastLine=$("tabLinks").getElementsByTagName("ul")[0].getElementsByTagName("li")[1];
	for (var i=0;i<linkList.length;i++){
		var newLink = $E({tag:"li",className:"presenter"})
		newLink.appendChild($E({tag:"a",href:linkList[i]["Href"],innerHTML:linkList[i]["Title"],target:"_new"}));
		lastLine.parentNode.insertBefore(newLink,lastLine);
	}
}


function startVideo(videoPath){
	var flashvars={};
	var vpSplit=videoPath.split("&")
	for (var i=0;i<vpSplit.length;i++){flashvars[vpSplit[i].split("=")[0]]=vpSplit[i].split("=")[1];}
	flashvars.autostart='true'
	var params={allowfullscreen:'true',allowscriptaccess:'always',wmode:'opaque'}
	var attributes={id:'vp',name:'vp'}
	swfobject.embedSWF('./common/jslib/player.swf', 'vp', '330', '260', '9.0.124', false, flashvars, params, attributes);
}

function fireSlide(slideNo){
	for (var i=0;i<$("slideList").getElementsByTagName("tbody")[0].getElementsByTagName("td").length;i++){
		DHTML.removeClass($("slideList").getElementsByTagName("tbody")[0].getElementsByTagName("td")[i],"high");
	}
	var swfFile='./' + $$("body")[0].seriesFolder + '/' + $$("body")[0].presentation["SrcFolder"] + '/slide' + (slideNo+1) + '.swf';
	swfobject.embedSWF(swfFile, 'swfSlide', $('sizeSlide').offsetWidth, $('sizeSlide').offsetHeight, '9.0.124', false, {}, {}, {id:'swfSlide',name:'swfSlide'});
	
	var tR = $("slideList").getElementsByTagName("tbody")[0].getElementsByTagName("tr")[slideNo];
	for (var j=0;j<tR.getElementsByTagName("td").length;j++)
	{
		DHTML.addClass(tR.getElementsByTagName("td")[j],"high");
	}
	
	
	slidePoser();
	
	
	/*
	//Make sure that the active slide is visible
	var elementHeight=$("slideList").getElementsByTagName("tbody")[0].getElementsByTagName("tr")[slideNo].getElementsByTagName("td")[1].parentNode.offsetHeight;
	var intScrollTop=$("slideList").getElementsByTagName("tbody")[0].getElementsByTagName("tr")[slideNo].getElementsByTagName("td")[1].offsetTop-$("slideList").offsetTop+elementHeight;
	intScrollTop=(intScrollTop<0)?0:intScrollTop;
	
	//intScrollTop is now the top of the element we're looking for
	var curBottom=$("slideList").parentNode.offsetHeight+$("slideList").parentNode.scrollTop;
	if (intScrollTop>curBottom){$("slideList").parentNode.scrollTop=intScrollTop-$("slideList").parentNode.offsetHeight+elementHeight;}
	*/
//alert('   ' + $("slideList").getElementsByTagName("tbody")[0].getElementsByTagName("tr")[slideNo].getElementsByTagName("td")[1].offsetTop +'\n-  ' + $("slideList").parentNode.offsetTop + '\n+  ' + elementHeight + '\n-------\n   ' + intScrollTop + '\nc:  ' + curBottom + '\n?  ' + (intScrollTop>curBottom));
	
	$("currentSlide").innerHTML=slideNo+1;
	$("slidesCurrent").innerHTML=slideNo+1;
	//DHTML.removeChildren($("mainSlideTitle"));
	//$("mainSlideTitle").appendChild(document.createTextNode($$("body")[0].presentation["Slides"][slideNo]["SlideTitle"]));
	$$("body")[0].presentation.currentSlide=slideNo;
}

function setSlideTime(slideNo){
	if($$("body")[0].playState!="PLAYING"){player.sendEvent("PLAY");}
	fireSlide(slideNo);
	setPlayer(slideNo);
}

function buildSlides(slideList){
	$("slidesTotal").innerHTML=slideList.length;
	var slideHost=$("slideList").getElementsByTagName("tbody")[0];
	DHTML.removeChildren($("slideList").getElementsByTagName("tbody")[0]);
	var templateNode=$("slideTemplate").getElementsByTagName("tr")[0];
	var i=0;
	for (i=0;i<slideList.length;i++){
		var newSlide=templateNode.cloneNode(true);
		var cells=newSlide.getElementsByTagName("td");
		if (cells.length > 0)
		{
			cells[0].innerHTML=i+1;
			cells[1].getElementsByTagName("a")[0].innerHTML=slideList[i].SlideTitle;
			cells[1].getElementsByTagName("a")[0].href="javascript:setSlideTime(" + i + ");";
			cells[2].innerHTML=minFormat(slideList[i].TimeIndex);
			if(i%2==0)
			{
				DHTML.addClass(cells[0],"odd");
				DHTML.addClass(cells[1],"odd");
				DHTML.addClass(cells[2],"odd");
			}
		}
		slideHost.appendChild(newSlide);
	}
	var nextSlide = templateNode.cloneNode(true);
	var cells=nextSlide.getElementsByTagName("td");
		cells[0].innerHTML="--";
		cells[1].getElementsByTagName("a")[0].innerHTML=($$("body")[0].presentation["NextPresentation"]=="")?"First Presentation":"Next Presentation";
		cells[1].getElementsByTagName("a")[0].href=($$("body")[0].presentation["NextPresentation"]=="")?"./?lecture=" + $$("body")[0].presentation["FirstPresentation"]:"./?lecture=" + $$("body")[0].presentation["NextPresentation"];
		cells[2].innerHTML="--";
		if((i++)%2==0)
			{
				DHTML.addClass(cells[0],"odd");
				DHTML.addClass(cells[1],"odd");
				DHTML.addClass(cells[2],"odd");
			}
		slideHost.appendChild(nextSlide);
}
function addListeners() {
	if (player) { 
		player.addModelListener("TIME", "positionListener");
		player.addModelListener("STATE", "stateListener");
	} else {
		setTimeout("addListeners()",100);
	}
}

function stateListener(obj)
{
	var curState = obj.newstate;
	var previousState = obj.oldstate;
	if((curState == "COMPLETED")&&(previousState == "PLAYING")) 
	{
		if($$("body")[0].presentation["NextPresentation"] != "")
		{
			location.href="http://www.georgetownuniversityhospital.org/LectureSeries/?lecture=" + $$("body")[0].presentation["NextPresentation"];
		}
	}
}

function positionListener(obj){
	var slides=$$("body")[0].presentation["Slides"];
	var imgStop=0;
	var curTime=obj.position;
	$("playTime").innerHTML = minFormat(parseInt(curTime));
	for (var i=0;i<slides.length;i++){
		if (slides[i]["TimeIndex"]>curTime){i--;break;}
		if (i==slides.length-1){break;}
	}
	var keySlide=i;
	if($$("body")[0].presentation.currentSlide!=keySlide){
		fireSlide(keySlide);
	} 
}

function minFormat(secCount){
	var minVal=(secCount-(secCount%60))/60;
	var secVal=(secCount%60);
	minVal=(("" + minVal).length>1)?minVal:"0" + minVal;
	secVal=(("" + secVal).length>1)?secVal:"0" + secVal;
	return minVal + ":" + secVal;
}

function setPlayer(slideNo){
	player.sendEvent('SEEK', $$("body")[0].presentation["Slides"][slideNo]["TimeIndex"]+".8");
}

function skipSlide(move){
	if ($("vp")){
		var curSlide=$$("body")[0].presentation.currentSlide;
		var newSlide=(curSlide+move<0)?0:curSlide+move;
		setPlayer(newSlide);
	}
}

function setTab(tabName,tabLink){
	var tabList=["tabSlides","tabPresenter","tabLinks"];
	for (var i=0;i<tabList.length;i++){
		if (tabList[i]==tabName){
			DHTML.removeClass($(tabList[i]),"hide");
			DHTML.addClass($(tabList[i]),"show");
		} else {
			DHTML.addClass($(tabList[i]),"hide");
			DHTML.removeClass($(tabList[i]),"show");
		}
	}
	var tabLinks=$("tabHeads").getElementsByTagName("a");
	for (var i=0;i<tabLinks.length;i++){DHTML.removeClass(tabLinks[i],"blue");DHTML.addClass(tabLinks[i],"grey");}
	DHTML.removeClass(tabLink,"grey");
	DHTML.addClass(tabLink,"blue");
	
}


function slidePoser(){
	var slideBody=$("slideWrapper").getElementsByTagName("table")[0].getElementsByTagName("tbody")[0];
	for (var i=0;i<slideBody.rows.length;i++){
		if (DHTML.hasClass(slideBody.rows[i].cells[0],"high")){
			var curSlide=slideBody.rows[i];
			if(slideBody.rows[i+1])
			{
				var nextHeight=(slideBody.rows[i+1])?0:slideBody.rows[i+1].offsetHeight;
				break;
			}
		}
	}
	if ((curSlide.offsetTop+curSlide.offsetHeight)>$("slideWrapper").offsetHeight+$("slideWrapper").scrollTop){
		$("slideWrapper").scrollTop=(curSlide.offsetTop+curSlide.offsetHeight-$("slideWrapper").offsetHeight);
	} else if ($("slideWrapper").scrollTop>curSlide.offsetTop){
		$("slideWrapper").scrollTop=curSlide.offsetTop;
	}
}