///////////////////////////////////////////////////////////////////////////////
//
//  common.js
//  non-protoyped version, common script handlers for a basic Silverlight
//  player
//
///////////////////////////////////////////////////////////////////////////////

/*INSTALLATION COMPONENTS*/
var playersingle = 240;
Silverlight.InstallAndCreateSilverlight = function(version, installPromptDiv, createSilverlightDelegate) {
	var RetryTimeout=3000;
	if(Silverlight.isInstalled(version)){
		createSilverlightDelegate();
	}else{
		if(installPromptDiv)
		installPromptDiv.innerHTML=Silverlight.createObject(null,null,null,{version:version,inplaceInstallPrompt:true},{},null);
		TimeoutDelegate=function(){
			Silverlight.InstallAndCreateSilverlight(version, null, createSilverlightDelegate);
		}
		setTimeout(TimeoutDelegate,RetryTimeout);
	}
}
function createSilverlight(){
	Silverlight.createObjectEx({source:'canvas.xml',parentElement:document.getElementById('silverlightControlHost'),id:'AgControl1',properties:{width:'320',height:'280',inplaceInstallPrompt:false,background:'#000000',isWindowless:'false',framerate:'24',enableFramerateCounter:false,version:'1.0'}, events:{onError:OnErrorEventHandler,onLoad:null,onResize:null},context:null});}
        if(!window.Silverlight)
	        window.Silverlight = {};
        Silverlight.createDelegate=function(instance, method){
	        return function(){
		        return method.apply(instance, arguments);
	        }
}
function runSilverlight(){createSilverlight();}

// OnErrorEventHandler will alert out errors instead of hiding them
function OnErrorEventHandler(sender,errorArgs){var errorMsg="SILVERLIGHT ERROR\n";errorMsg+="Error Type: "+errorArgs.errorType+"\n";errorMsg+="Error Message: "+errorArgs.errorMessage+"\n";errorMsg+="Error Code: "+errorArgs.errorCode+"\n";switch(errorArgs.errorType){case "RuntimeError":if(errorArgs.lineNumber != 0){errorMsg+="Line: "+errorArgs.lineNumber+"\n";errorMsg+="Position: "+errorArgs.charPosition+"\n";}errorMsg+="MethodName: "+errorArgs.methodName+"\n";break;case "ParserError":errorMsg+="Xaml File: "+errorArgs.xamlFile+"\n";errorMsg+="Xml Element: "+errorArgs.xmlElement+"\n";errorMsg+="Xml Attribute: "+errorArgs.xmlAttribute+"\n";errorMsg+="Line: "+errorArgs.lineNumber+"\n";errorMsg+="Position: "+errorArgs.charPosition+"\n";break;default:errorMsg+="Not a Runtime or Parser Error\n";break;}if((errorArgs.errorType.toString()=='DownloadError' || errorArgs.errorType.toString()=='MediaError') && errorArgs.errorCode.toString()=='4001'){alert('Unable to acquire video.\n'+errorArgs.errorType.toString()+'\n'+sender.getValue("Name").toString());}else{alert(errorMsg);}}
/*END INSTALLATION COMPONENTS*/


/*GLOBAL VARIABLES*/
var curVol=0.5;
var lastVol=0.5;
var volLevel=25;
var isLoaded=false;
var isFS=false;
var screensize='single';
var helpscreensize='single';
var cVol=0.5;
var isMute=false;
var isMouseDown=false;
var movingProgress=false;
var beginX,progMinX,progMaxX;
var playerwidth,playerheight;
var rot=0;
function onLoaded(sender,args) {
        var plugin=sender.getHost();
	senderObj=sender;
	isLoaded=true;
	plugin.content.onFullScreenChange=onFullScreenChanged;
	//startTimer(sender,args);
	setMuteIndicator(sender,args)
}
function onFullScreenChanged(sender,args){
	var obj=sender.getHost();
	if(isFS==true){
		isFS=false;scaleCanvas(sender,args);
	}else{
		isFS=true;scaleCanvas(sender,args);
	}
}

function goHelp(sender,args){
	var obj=sender.getHost();
	if(sender.findName("mediaPlayer").CurrentState=='Playing'){
		sender.findName("mediaPlayer").pause();
	}
	helpscreensize = screensize;
	DoubleScreen(sender,args);
	sender.findName("HelpScreen").visibility = 'visible';
	var SLcontain = document.getElementById("silverlightControlHost");
	var AgControl1 = document.getElementById("AgControl1");
	SLcontain.style.Height = 480;
	AgControl1.height = 480;
	SLcontain.style.Width = 640;
	AgControl1.Width = 640;
	obj.content.ActualWidth = 640;
	obj.content.ActualHeight = 480;
}

function returntomovie(sender,args){
	sender.findName("HelpScreen").visibility = 'Collapsed';
	screensize = helpscreensize;
	scaleCanvas(sender,args);
	sender.findName("mediaPlayer").play();
}

function startTimer(sender,args){storyTimer(sender,args);checkTime(sender,args);SingleScreen(sender,args);}
function storyTimer(sender,args){if(movingProgress==false){checkTime(sender,args);sender.findName("storyTimerAnim").begin();}}
function checkTime(sender,args){
        if(sender.findName("mediaPlayer")){
                p=sender.findName("mediaPlayer").Position.GetValue("Seconds").toString();
                d=sender.findName("mediaPlayer").NaturalDuration.GetValue("Seconds").toString();
                if(sender.findName("mediaPlayer").CurrentState=='Playing'){
			sender.findName("pause").Opacity = 1;
			sender.findName("PlayArrow").Opacity = 0;
			sender.findName("buffering").Opacity = 0;
			sender.findName("progSlide")["Canvas.Left"] = sender.findName("progBar").Width * (p/d);
			sender.findName("progDone").Width = sender.findName("progBar").Width * (p/d);
			sender.findName("progText").Text = dispTS(calcTS(p)) + ' | ' + dispTS(calcTS(d))
                }else{
			sender.findName("pause").Opacity = 0;
			sender.findName("PlayArrow").Opacity = 1;
                        if(sender.findName("mediaPlayer").CurrentState=='Buffering' || sender.findName("mediaPlayer").CurrentState=='Closed' || sender.findName("mediaPlayer").CurrentState=='Opening'){
                                sender.findName("buffering").Opacity = 1;
                        }else{
				sender.findName("buffering").Opacity = 0;
                        }
                }
        }
}

function playBuffer(sender,args){sender.findName("foo").From=rot;sender.findName("foo").To=rot+10;rot=rot+10;}
function showPrompt(sender,args){/*conf trigger*/}
function restartCurVid(sender,args){sender.findName("mediaPlayer").Position='00:00:00';sender.findName("mediaPlayer").play();}
function glowPauser(sender,args){sender.findName("pauserGlowOn").begin();}
function unglowPauser(sender,args){sender.findName("pauserGlowOff").begin();}
function doPlayPause(sender,args){
	if(sender.findName("mediaPlayer").CurrentState=='Playing'){
		sender.findName("mediaPlayer").pause();
	}else{
		sender.findName("mediaPlayer").play();
	}
}

function blowFullScreen(sender,args){
	var obj=sender.getHost();
	obj.content.fullScreen=!obj.content.fullScreen;
	sender.findName("SizeSelect").visibility = 'Collapsed';
}

function SingleScreen(sender,args){
	screensize='single';
	// get out of fullscreen if we are in full screen mode
	var obj=sender.getHost();
	if (obj.content.fullScreen) {
		obj.content.fullScreen=!obj.content.fullScreen;
	}

	var SLcontain = document.getElementById("silverlightControlHost");
	var AgControl1 = document.getElementById("AgControl1");
	sender.findName("mediaPlayer").Height = playersingle;
	SLcontain.style.Height = (sender.findName("mediaPlayer").Height + 40);
	AgControl1.height = (sender.findName("mediaPlayer").Height + 40);
	playerheight = SLcontain.style.Height;
	sender.findName("mediaPlayer").Width = sender.findName("mediaPlayer").Height * (sender.findName("mediaPlayer").NaturalVideoWidth / sender.findName("mediaPlayer").NaturalVideoHeight);
	playerwidth = sender.findName("mediaPlayer").Width;
	SLcontain.style.Width = sender.findName("mediaPlayer").Width;
	sender.findName("toolbox").Width = sender.findName("mediaPlayer").Width;
	AgControl1.width = sender.findName("mediaPlayer").Width;
	sender.findName("controls")["Canvas.Top"] = sender.findName("mediaPlayer").Height;
	scaleToolbox(sender,args);
	sender.findName("SizeSelect").visibility = 'Collapsed';
}

function DoubleScreen(sender,args){
	screensize='double';
	// get out of fullscreen if we are in full screen mode
	var obj=sender.getHost();
	if (obj.content.fullScreen) {
		obj.content.fullScreen=!obj.content.fullScreen;
	}

	var SLcontain = document.getElementById("silverlightControlHost");
	var AgControl1 = document.getElementById("AgControl1");
	sender.findName("mediaPlayer").Height = (playersingle * 2);
	SLcontain.style.Height = (sender.findName("mediaPlayer").Height + 40);
	playerheight = SLcontain.style.Height;
	AgControl1.height = (sender.findName("mediaPlayer").Height + 40);
	sender.findName("mediaPlayer").Width = sender.findName("mediaPlayer").Height * (sender.findName("mediaPlayer").NaturalVideoWidth / sender.findName("mediaPlayer").NaturalVideoHeight);
	playerwidth = sender.findName("mediaPlayer").Width;
	SLcontain.style.Width = sender.findName("mediaPlayer").Width;
	sender.findName("toolbox").Width = sender.findName("mediaPlayer").Width;
	AgControl1.width = sender.findName("mediaPlayer").Width;
	sender.findName("controls")["Canvas.Top"] = sender.findName("mediaPlayer").Height;
	scaleToolbox(sender,args);
	sender.findName("SizeSelect").visibility = 'Collapsed';
}

function blowSizeScreen(sender,args){
	sender.findName("SizeSelect").visibility = 'visible';
}

function HideReSize(sender,args){
	sender.findName("SizeSelect").visibility = 'Collapsed';
}

function scaleToolbox(sender,args){
	var playerwidth = sender.findName("toolbox").Width;
	var mediawidth = sender.findName("mediaPlayer").Width;
	var mediaheight = sender.findName("mediaPlayer").Height;
	if(isFS==true){
		var obj=sender.getHost();
		sender.findName("mediaPlayer")["Canvas.Left"] = ((obj.content.ActualWidth - mediawidth) / 2);
	}else{
		sender.findName("mediaPlayer")["Canvas.Left"] = 0;
	}
	sender.findName("play")["Canvas.Left"] = ((playerwidth - 29.5) / 2);
	sender.findName("audio")["Canvas.Left"] = (playerwidth - 87);
	sender.findName("buffering")["Canvas.Left"] = ((mediawidth - 102) / 2);
	sender.findName("buffering")["Canvas.Top"] = ((mediaheight - 125) / 2);
}

function scaleCanvas(sender,args){
	var obj=sender.getHost();
	if(isFS==true){
		obj.content.fullScreen=true;
		fsW=obj.content.ActualWidth;
		fsH=obj.content.ActualHeight;
		sender.findName("mediaPlayer").Height = (fsH - 40);
		sender.findName("toolbox").Width = fsW;
		sender.findName("mediaPlayer").Width = sender.findName("mediaPlayer").Height * (sender.findName("mediaPlayer").NaturalVideoWidth / sender.findName("mediaPlayer").NaturalVideoHeight);
		sender.findName("controls")["Canvas.Top"] = sender.findName("mediaPlayer").Height;
		scaleToolbox(sender,args);
	}else{
		if (screensize=='double') {
			DoubleScreen(sender,args);
		}else{
			SingleScreen(sender,args);
		}		
	}
	//here you should make other adjustments to the controls
	//but remember that you have to have separate resizing or
	//relocation depending on full screen or small screen and
	//depending on whether user has letterbox or widescreen
}

function volumeMouseDown(sender,mouseEventArgs){
	isMouseDown = true;
	sender.captureMouse();
}

function volumeMouseUp(sender,mouseEventArgs){
	isMouseDown=false;
	sender.releaseMouseCapture();
}

function volumeClickBar(sender,mouseEventArgs){
	var xPt = mouseEventArgs.getPosition(null).x;
	var aMin = sender.findName("toolbox").Width - 53;
	var aMax=aMin+50;
	if(xPt>=aMin && xPt<=aMax){
		sender.findName("audioSlide")["Canvas.Left"] = (xPt-aMin);
		cVol=((xPt-aMin)*2)/100;
		sender.findName("mediaPlayer").Volume=cVol;
		if (sender.findName("mediaPlayer").IsMuted){
			sender.findName("mediaPlayer").IsMuted=!sender.findName("mediaPlayer").IsMuted;
			setMuteIndicator(sender,mouseEventArgs);
		}
		curVol=cVol;
	}
}

function ShowFSTooltip(sender,mouseEventArgs){
	sender.findName("FSTooltip").visibility = 'visible';
}

function HideFSTooltip(sender,mouseEventArgs){
	sender.findName("FSTooltip").visibility = 'Collapsed';
}

function ShowHPTooltip(sender,mouseEventArgs){
	sender.findName("HPTooltip").visibility = 'visible';
}

function HideHPTooltip(sender,mouseEventArgs){
	sender.findName("HPTooltip").visibility = 'Collapsed';
}

function ShowPPTooltip(sender,mouseEventArgs){
	sender.findName("PPTooltip").visibility = 'visible';
}

function HidePPTooltip(sender,mouseEventArgs){
	sender.findName("PPTooltip").visibility = 'Collapsed';
}

function ShowMTTooltip(sender,mouseEventArgs){
	sender.findName("MTTooltip").visibility = 'visible';
}

function HideMTTooltip(sender,mouseEventArgs){
	sender.findName("MTTooltip").visibility = 'Collapsed';
}

function ShowVLTooltip(sender,mouseEventArgs){
	sender.findName("VLTooltip").visibility = 'visible';
}

function HideVLTooltip(sender,mouseEventArgs){
	sender.findName("VLTooltip").visibility = 'Collapsed';
}

function ShowPRTooltip(sender,mouseEventArgs){
	sender.findName("PRTooltip").visibility = 'visible';
}

function HidePRTooltip(sender,mouseEventArgs){
	sender.findName("PRTooltip").visibility = 'Collapsed';
}

function volumeScroll(sender,mouseEventArgs){
	if(isMouseDown==true){
		var xPt = mouseEventArgs.getPosition(null).x;
		var aMin = sender.findName("toolbox").Width - 53;
		var aMax=aMin+50;
		if(xPt>=aMin && xPt<=aMax){
			sender.findName("audioSlide")["Canvas.Left"] = (xPt-aMin);
			cVol=((xPt-aMin)*2)/100;
			sender.findName("mediaPlayer").Volume=cVol;
			if (sender.findName("mediaPlayer").IsMuted){
				sender.findName("mediaPlayer").IsMuted=!sender.findName("mediaPlayer").IsMuted;
				setMuteIndicator(sender,mouseEventArgs);
			}
			curVol=cVol;
		}
	}
}

function setMute(sender,args){
	sender.findName("mediaPlayer").IsMuted=!sender.findName("mediaPlayer").IsMuted;
	setMuteIndicator(sender,args);
}

function setMuteIndicator(sender,args){
	if (sender.findName("mediaPlayer").IsMuted){
		sender.findName("VolMuted").visibility = 'visible';
	}else{
		sender.findName("VolMuted").visibility = 'Collapsed';
	}
}

function spMouseDown(sender,mouseEventArgs){
	sender.findName("mediaPlayer").pause();
	beginX=mouseEventArgs.getPosition(null).x;
	progMinX=op(so['progBar'],'x')+23;
	progMaxX=progMinX+op(so['progBar'],'w')+8;
	isMouseDown=true;
	movingProgress=true;
	sender.captureMouse();
}
function spMouseUp(sender,mouseEventArgs){
	isMouseDown=false;
	sender.releaseMouseCapture();
	movingProgress=false;
	if(beginX<progMaxX){
		var pxPerSec=(progMaxX-progMinX)/sender.findName("mediaPlayer").NaturalDuration.GetValue("Seconds").toString();
		var newPos=(beginX-4)/pxPerSec;
		sender.findName("mediaPlayer").Position=fullTS(calcTS(newPos));
		sender.findName("mediaPlayer").play();
		checkTime(sender,mouseEventArgs);
	}else{
		sender.findName("mediaPlayer").stop();
	}
}
function moveProgress(sender,mouseEventArgs){
		var xPt=mouseEventArgs.getPosition(null).x;
		sender.findName("mediaPlayer").pause();
		progMinX=sender.findName("progBar")["Canvas.Left"];
		progMaxX=progMinX+sender.findName("progBar").Width;
		if(xPt>=(progMinX) && xPt<=(progMaxX)){
			sender.findName("progSlide")["Canvas.Left"] = xPt-4;
			sender.findName("progDone").Width = sender.findName("progSlide")["Canvas.Left"];
			beginX=xPt;
			spMouseUp(sender,mouseEventArgs);
		}
}
function spScroller(sender,mouseEventArgs){
	if(isMouseDown==true){
		var xPt=mouseEventArgs.getPosition(null).x;
		var pbs=28;
		var pbe=pbs+op(so['progBar'],'w');
		if(xPt>=pbs && xPt<=pbe){
			sp(so['progSlide'],'x',xPt-pbs);
			sp(so['progDone'],'w',op(so['progSlide'],'x'));	
		}
		beginX=xPt;
	}
}
function mflr(v){return Math.floor(eval(v));}
function d2h(d){return d.toString(16);}
function h2d(h){return parseInt(h,16);} 
function calcTS(s) {var h=0;if(s>60){var nn=s/60;var n=mflr(nn);var rs=s-(n*60);var c='0:'+n+':'+rs;if(n>60){h=mflr(n/60);cts=h+':'+(n-(h*60))+':'+rs;}}else{var c='0:0:'+s;}return c;}
function dispTS(ts) {var tsa=ts.split(':');if(tsa[0]<10){tsa[0]='0'+tsa[0];}if(tsa[1]<10){tsa[1]='0'+tsa[1];}if(tsa[2]<10){tsa[2]='0'+mflr(tsa[2]);}else{tsa[2]=mflr(tsa[2]);}return (tsa[1])+':'+tsa[2];}
function fullTS(ts) {var tsa=ts.split(':');if(tsa[0]<10){tsa[0]='0'+tsa[0];}if(tsa[1]<10){tsa[1]='0'+tsa[1];}if(tsa[2]<10){tsa[2]='0'+mflr(tsa[2]);}else{tsa[2]=mflr(tsa[2]);}return tsa[0]+':'+tsa[1]+':'+tsa[2];}
