/*------------------------------------------------------------*/
/*---------Player Controls------------------------------------*/


// System Functions
function syncAudio() {
	var starttime = slideTimes[slide-1];
	audioSet(starttime);
}



// Set Audio/Video Position
function audioSet(position) {

	if(position < 0)
		position = 0;
		
	writeDebug("Setting Audio to position: " + position);
	
	if(!playerAbility)
		return false;
		
	if (currentPlayer == "real") {
        if ((playerState == 2) && (getObjectRef("mmMedia").CanPlay() != -1)) {
   			getObjectRef("mmMedia").DoPlay();
       	    getObjectRef("mmMedia").SetPosition(position*1000);
            //if (slideControl == "sync") { videocontrols.playPressed(1); }
        } else {
    	    getObjectRef("mmMedia").SetPosition(position*1000);
        }
	}
	if (currentPlayer == "wmp") {
		if (getObjectRef("mmMedia").SetCurrentPosition) {
		    getObjectRef("mmMedia").SetCurrentPosition(position);
		}
		else if (getObjectRef("mmMedia").CurrentPosition){

		   	getObjectRef("mmMedia").CurrentPosition = position;

		} else {
			playerState=6;
			errorString = "SetCurrentPosition failed";
			writeDebug(errorString);
		}
	}
	if (currentPlayer == "qt") {
		//Set Audio to position: 'position'
		getObjectRef("mmMedia").SetTime(position*1000);
		getObjectRef("mmMedia").Play();

	}
	

}

// Stop.
function Stop() {

	if(!playerAbility)
		return false;
		
	//changeFrame('http://development/testbed/rob/webcast/inset.cfm');
	
	isFfw = 0;
	isRew = 0;
	writeDebug("Stopping");
	if (currentPlayer == "real") {
		if (getObjectRef("mmMedia").CanStop() != -1){
			getObjectRef("mmMedia").DoStop();
		}
	}
	if (currentPlayer == "wmp") {
		if (getObjectRef("mmMedia").SetCurrentPosition) {
			getObjectRef("mmMedia").Stop();
		    getObjectRef("mmMedia").SetCurrentPosition(0);
		}
		else if(getObjectRef("mmMedia").CurrentPosition){
			getObjectRef("mmMedia").Stop();
		   	getObjectRef("mmMedia").CurrentPosition = 0;
		} else {
			playerState=6;
			errorString = "SetCurrentPosition (in stop) failed";
			writeDebug(errorString);
			getObjectRef("mmMedia").Stop();
			
		}
	}
	
	if (currentPlayer == "qt") {
		// Stop Player and set to time 0
		getObjectRef("mmMedia").Rewind();
		getObjectRef("mmMedia").SetRate(0);

	}
	
	
}


// Play
function Play() {
	//changeFrame('http://development/testbed/rob/webcast/inset2.cfm');
	writeDebug("Playing");
	
	if(!playerAbility)
		return false;
		
	
	
	if(isStopped()){
	    if ((slideControl == "sync") && (isStopped())){ 
			setSlide(1);
		}
	}
	if(!isPlaying() && !isBuffering()){
		if (currentPlayer == "real") {
			if (getObjectRef("mmMedia").CanPlay() != -1) {
				getObjectRef("mmMedia").DoPlay();
				}
		}
		if (currentPlayer == "wmp") {
			getObjectRef("mmMedia").Play();
		}
		if (currentPlayer == "qt") {
			getObjectRef("mmMedia").Play();
		}
	}
	
	if(isFfw || isRew){
	
		audioSet(nextposition);
		isFfw = 0;
		isRew = 0;
	}
}
	
// Pause - if possible
function Pause() {
	writeDebug("Pausing");
	
	
	if(!playerAbility)
		return false;
		
	if(isFfw || isRew){
	
		audioSet(nextposition);
		isFfw = 0;
		isRew = 0;
	}
		
	if (currentPlayer == "real") {
		if (getObjectRef("mmMedia").CanPause() != -1){
			getObjectRef("mmMedia").DoPause();
		}
	}
	if (currentPlayer == "wmp") {
		getObjectRef("mmMedia").Pause();
	}
	
	if (currentPlayer == "qt") {
		getObjectRef("mmMedia").SetRate(0);
	}
	
}
	
// Sleep - if possible
function Sleep() {
	writeDebug("Sleeping for Ffw or Rew");
	
	
	if(!playerAbility)
		return false;
		
	if(isStopped()){
	    if ((slideControl == "sync") && (isStopped())){ 
			setSlide(1);
		}
	}
	if(!isPlaying() && !isBuffering()){
		if (currentPlayer == "real") {
			if (getObjectRef("mmMedia").CanPlay() != -1) {
				getObjectRef("mmMedia").DoPlay();
				}
		}
		if (currentPlayer == "wmp") {
			getObjectRef("mmMedia").Play();
		}
		if (currentPlayer == "qt") {
			getObjectRef("mmMedia").Play();
		}
	}
	
		
	if (currentPlayer == "real") {
		if (getObjectRef("mmMedia").CanPause() != -1){
			getObjectRef("mmMedia").DoPause();
		}
	}
	if (currentPlayer == "wmp") {
		getObjectRef("mmMedia").Pause();
	}
	
	if (currentPlayer == "qt") {
		getObjectRef("mmMedia").SetRate(0);
	}
	
}

function getPlayerPosition() {

	if(!playerAbility)
		return 0;
		
	var playerpos = 0;
	if (currentPlayer == "real") {
		playerpos = getObjectRef("mmMedia").GetPosition();
		//alert(playerpos);
	}
	if (currentPlayer == "wmp") {
		if (getObjectRef("mmMedia").GetCurrentPosition) {
			playerpos = getObjectRef("mmMedia").GetCurrentPosition();
		}
		else if(getObjectRef("mmMedia").CurrentPosition){
			playerpos = getObjectRef("mmMedia").CurrentPosition;
		} else {
			//playerState=6;
			//errorString = "getPlayerPosition failed";
		}
	}
	
	if (currentPlayer == "qt") {
		// Get position, set in playerpos
		playerpos = getObjectRef("mmMedia").GetTime() 
	
	}
	//writeDebug("Position?: " + playerpos);
	return playerpos;		

}

function getPlayerState() {

	if(!playerAbility)
		return false;
		
	var state = -1;
	if (currentPlayer == "real") {
		state = getObjectRef("mmMedia").GetPlayState();
	}
	if (currentPlayer == "wmp") {
		if (getObjectRef("mmMedia").GetReadyState) {
			if (getObjectRef("mmMedia").GetReadyState() >= 3) {
				state = getObjectRef("mmMedia").GetPlayState();
			}
			else { state = -1; }
		}
		else if (getObjectRef("mmMedia").ReadyState){
			if (getObjectRef("mmMedia").ReadyState >= 3) {
				state = getObjectRef("mmMedia").PlayState;
			}
			else { state = -1; }
		} else {
			playerState=6;
			errorString = "getPlayerState failed " + getObjectRef("mmMedia").PlayState;
			writeDebug(errorString);
		}
	}
	if (currentPlayer == "qt") {
		// Get player state (1 through 6)
		//alert(getObjectRef("mmMedia"));
		state = getObjectRef("mmMedia").GetPluginStatus();
		//writeDebug("Getting Player State " + state);
		//state = "Playable";
		 
	
	}
	return state;		
}

function isPlaying() {
	
	if(!playerAbility)
		return false;
		
	checkPlayer();
    return (playerState == 1 || playerState==3);
}

function isStopped() {
	if(!playerAbility)
		return false;
		
    if (playerState == 2) { return true; } else { return false; }
}

function isBuffering() {
	
	if(!playerAbility)
		return false;
		
	return playerState == 3;
}

function isPaused() {

	if(!playerAbility)
		return false;
		
	return playerState == 4;
}

function playerStateOk() {

	if(!playerAbility)
		return false;
		
    // Only allow player mods if its not error'd or closed.
    if ((playerState == 5) || (playerState == 6)) {
        errorString = "playerStateOk failed";
		writeDebug(errorString);
        return false;
    }
    else { return true; }
}

/* --- What does this do???
function getPosition() {
	writeDebug("in getPosition()");

    var position = 0;
    if (isPlaying()) { 
        position = getPlayerPosition(); 
		writeDebug("here: " + position);
        if (currentPlayer == "real" || currentPlayer == "qt") { position = position / 1000; }
		writeDebug("here: " + position + " blah " + currentPlayer);
    }
    return position;
}

--- */

// Checks Player State, converts to the global state - 'playerState'
function checkPlayer() {
	

	if(!playerAbility){
		state=-1;
		playerState = 6;
		return false;
	}
	
	var state = getPlayerState();
	if (currentPlayer == "real") {
		if (state == 0) { //Stopped.
		    playerState = 2;
		}
		if (state == 1) { //Contacting.. 
			playerState = 3;
		}
		if (state == 2) { //Buffering.. 
			playerState = 3;
		}
		if (state == 3) { //Playing.. 
			playerState = 1;
		}
		if (state == 4) { //Paused.. 
			playerState = 4;
		}
		if (state == 5) { //Seeking.. 
			playerState = 5;
		}
		if (state == -1) { //Error.. 
			playerState = 6;
		}
	}
	if (currentPlayer == "wmp") {
		if (state == 0) { //Stopped. 
			playerState = 2;
		}
		if (state == 1) { //Paused.. 
			playerState = 4;
		}
		if (state == 2) { //Buffering.. 
			if (getObjectRef("mmMedia").GetBufferingProgress) {
				if (getObjectRef("mmMedia").GetBufferingProgress() > 90) {
					playerState = 1; 
				}
				else { playerState = 3; }
			}
			else if(getObjectRef("mmMedia").BufferingProgress){
				if (getObjectRef("mmMedia").BufferingProgress > 90) {
					playerState = 1; 
				}
				else { playerState = 3; }
			} else {
				//not fatal
				
				
			}
		}
		if (state == 3) { //Waiting.. 
			playerState = 3;
		}
		if ((state == 4) || (state == 5)) { //Scanning.. 
			playerState = 3;
		}
		if (state == 8) { //Closed.. 
			playerState = 5;
		}
		if (state == -1) { //Error.. 
			playerState = 6;
		}
	}
	
	//writeDebug(state);
	if (currentPlayer == "qt") {
		
		if(state != 'Playable' && state !='Complete' && state !="Waiting" && state !="Loading"){
			playerState = 6;	// Error
			writeDebug(state);
		} else if(state == "Waiting" || state =="Loading"){
			playerState = 3;	// Buffering
		} else if(getObjectRef("mmMedia").GetRate() > 0) {
			playerState = 1;	// Playing
		} else if(getObjectRef("mmMedia").GetRate() == 0 && getObjectRef("mmMedia").GetTime() == 0) {
			playerState = 2;	// Stopped
		} else if(getObjectRef("mmMedia").GetRate() == 0) {
			playerState = 4;	// Paused
		} else {
			writeDebug(state);
			playerState = -1; 	// Error
		
		}
	
	}
	
	//setPlayerButtons();
}


function reportState() {
    switch(playerState) {
    case 1 : 
        return "Playing...";
    case 2 : 
        return "Stopped";
    case 3 : 
        return "Buffering...";
    case 4 : 
        return "Paused";
	case 5: 
		return "Connecting...";
	case 6: 
		return "Connecting...";
	case -1: 
		return "Connecting...";
    default : 
        return errorString;
    }
}

function displayTime(timeInSeconds) {
	if(!playerAbility)
		return false;
    var hours = 0;
    var displayhours = "";
    var minutes = 0;
    var displayminutes = "";
    var seconds = 0;
    var displayseconds = "";
	//alert(timeInSeconds);
    if (timeInSeconds/3600 > 1) {
        // Has Hours.
        hours = parseInt(timeInSeconds/3600);
        timeInSeconds = timeInSeconds - (hours*3600)
    }
    if (timeInSeconds/60 >= 1) {
        // Has Minutes.
        minutes = parseInt(timeInSeconds/60);
        timeInSeconds = timeInSeconds - (minutes*60)
    }
	//seconds = "0" + seconds;
	//writeDebug(timeInSeconds);
    seconds = parseInt(timeInSeconds);
    if (hours < 10) { displayhours = "0" + hours; } else { displayhours = hours;  }
    if (minutes < 10) { displayminutes = "0" + minutes; } else { displayminutes = minutes;  }
    if (seconds < 10) { displayseconds = "0" + seconds; } else { displayseconds = seconds;  }
	if (isNaN(displayseconds)) {displayseconds = "" + "00"}
	
	
    var text = '' + displayhours + ':' + displayminutes + ':' + displayseconds + '';
	//alert(text);
	
	
		
	if(is.ns4){
		writeToLayer("lyStatus",'<span class="textStatus">'+text+'</span>');
		//getObjectStyleRef("lyStatus").

	} else
		writeToLayer("lyStatus",'<span class="textStatus">'+text+'</span>');
	
}

function displayText(display) {
	if(!playerAbility)
		return false;
		
    if(is.ns4){
		writeToLayer("lyStatus",'<span class="textStatus">'+display+'</span>');
		//getObjectStyleRef("lyStatus").

	} else
		writeToLayer("lyStatus",'<span class="textStatus">'+display+'</span>');
	
   // writeToLayer("lyStatus",nicetext);
    return -1;
}

function setPlayerButtons() {
	writeDebug("Resetting buttons now to: " + buttonState);
	//buttonState can be set to:
	// 'play'
	// 'pause'
	// 'stop'
	// if none of those, then it will check the player and reset all buttons

	if(buttonState == "play"){
		swapImage('imPause',buttonDir + 'pause_up.gif');
		swapImage('imStop',buttonDir + 'stop_up.gif');
		swapImage('imPlay',buttonDir + 'play_down.gif');
		swapImage('imFfw',buttonDir + 'ffw_up.gif');
		swapImage('imRew',buttonDir + 'rew_up.gif');
		setLayerZIndex('lyPlay',2);
	
	}else if(buttonState == "pause"){
		swapImage('imPause',buttonDir + 'pause_down.gif');
		swapImage('imStop',buttonDir + 'stop_up.gif');
		swapImage('imPlay',buttonDir + 'play_up.gif');
		swapImage('imFfw',buttonDir + 'ffw_up.gif');
		swapImage('imRew',buttonDir + 'rew_up.gif');
		setLayerZIndex('lyPlay',4);
	
	}else if(buttonState == "stop"){
		swapImage('imPause',buttonDir + 'pause_up.gif');
		swapImage('imStop',buttonDir + 'stop_down.gif');
		swapImage('imPlay',buttonDir + 'play_up.gif');
		swapImage('imFfw',buttonDir + 'ffw_up.gif');
		swapImage('imRew',buttonDir + 'rew_up.gif');
		setLayerZIndex('lyPlay',4);
	
	}else if(buttonState == "ffw"){
		swapImage('imPause',buttonDir + 'pause_up.gif');
		swapImage('imStop',buttonDir + 'stop_up.gif');
		swapImage('imPlay',buttonDir + 'play_up.gif');
		swapImage('imFfw',buttonDir + 'ffw_down.gif');
		swapImage('imRew',buttonDir + 'rew_up.gif');
		setLayerZIndex('lyPlay',4);
	
	}else if(buttonState == "rew"){
		swapImage('imPause',buttonDir + 'pause_up.gif');
		swapImage('imStop',buttonDir + 'stop_up.gif');
		swapImage('imPlay',buttonDir + 'play_up.gif');
		swapImage('imFfw',buttonDir + 'ffw_up.gif');
		swapImage('imRew',buttonDir + 'rew_down.gif');
		setLayerZIndex('lyPlay',4);
	
	}
	
}


function launchMediaChanger() {

		// First Launch
		
		h=415;
		w=420;
		
		xPos = (screen.width/2)-(w/2);
		yPos = (screen.height/2)-(h/2);
	
		winProp = "width=" + w + ",height=" + h + ",left=" + xPos + ",top=" + yPos +",scrollbars=0,resizable=0,status=1";

		mediaChanger = window.open("mediachange.cfm", "MediaChangerWindow", winProp);	
	
		realCheckedString = "";
		wmpCheckedString = "";
		qtCheckedString = "";
		noneCheckedString = "";
		
		if(currentPlayer == "real"){
			realCheckedString = "checked";
		} else if (currentPlayer == "wmp"){
			wmpCheckedString = "checked";
		} else if (currentPlayer == "qt"){
			qtCheckedString = "checked";
		} else {
			noneCheckedString = "checked";
		}
		
		// Now pass along the string to write

		globalBuffer = "";		
		globalBuffer += "<TABLE WIDTH=400><TR><TD ALIGN=CENTER><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0><TR><TD COLSPAN=3><IMG SRC=\"images/SELECT_PLAYER_TOP.gif\"></TD></TR>";
		globalBuffer += "<TR><TD BACKGROUND=\"images/SELECT_PLAYER_LEFT.gif\" ROWSPAN=4><IMG SRC=images/spacer.gif width=34 height=1></TD>";
		globalBuffer += "<TD><IMG SRC=images/spacer.gif width=325 height=1></TD>";
		globalBuffer += "<TD BACKGROUND=\"images/SELECT_PLAYER_RIGHT.gif\" ROWSPAN=4><IMG SRC=images/spacer.gif width=36 height=1></TD></TR>";
		globalBuffer += "<TR><TD style=\"font-family: tahoma,helvetica; font-size: 12pt; color: 000000;\"><form name='theform'>";
		
		if(foundReal && realPathString.length){
			foundAnyPlayer = true;
			globalBuffer += "\n<BR><input type='radio' name='chooseplayer' value='real' onClick=\"opener.changeMediaTo = 'real';\" "+realCheckedString+">Real Player";
			
			if(compatibilityCheck('real') != 3){
				globalBuffer += "( <font color=red>*</font> )";
				potIncomp = true;
			}
			globalBuffer += "<BR>";
		}
		if(foundWMP && wmpPathString.length){
			foundAnyPlayer = true;
			globalBuffer += "\n<BR><input type='radio' name='chooseplayer' value='wmp' onClick=\"opener.changeMediaTo = 'wmp';\" "+wmpCheckedString+">Windows Media Player";
			
			if(compatibilityCheck('wmp') != 3){
				globalBuffer += "<font color=red>*</font>";
				potIncomp = true;
			}
			globalBuffer += "<BR>";
		}
		if(foundQuick && qtPathString.length){
			foundAnyPlayer = true;
			globalBuffer += "\n<BR><input type='radio' name='chooseplayer' value='qt' onClick=\"opener.changeMediaTo = 'qt';\" "+qtCheckedString+">QuickTime";
			
			if(compatibilityCheck('qt') != 3){
				globalBuffer += "<font color=red>*</font>";
				potIncomp = true;
			}
			globalBuffer += "<BR>";
		}
		if(allowNoAudio){
			foundAnyPlayer = true;
			globalBuffer += "\n<BR><input type='radio' name='chooseplayer' value='none' onClick=\"opener.changeMediaTo = 'none';\" "+noneCheckedString+">No Audio";
			
			globalBuffer += "<BR>";
		}
		globalBuffer += "</form></TD></TR>";
		
		if(foundAnyPlayer)
			globalBuffer += "<TR><TD ALIGN=CENTER><BR><a href=\"#\" onClick=\"opener.playerAbility =  (opener.compatibilityCheck(opener.changeMediaTo) == 3);opener.writeDebug('Talk to player?'+opener.playerAbility);opener.currentPlayer = opener.changeMediaTo;opener.writeMedia(opener.currentPlayer);opener.resetLayers();opener.playPressed();window.close();return false;\"><IMG SRC=\"images/viewevent.gif\" BORDER=0></A></TD></TR>";
		else
			globalBuffer += "<tr><td>No players detected. <BR><BR> Please download <a target='_blank' href='http://www.shareholder.com/common/rp.cfm'><font color=red>Real Player</font></A> or <a target='_blank' href='http://www.shareholder.com/common/wmp.cfm'><font color=red>Windows Media Player</font></A></TD></TR>"
			
		if(potIncomp)
			globalBuffer += "<TR><TD style=\"font-family: tahoma,helvetica; font-size: 8pt; color: 000000;\"><BR><font color=red>*</font> May cause reduced functionality due to browser incompatibility</TD></TR>";
		else
			globalBuffer += "<TR><TD><IMG SRC=images/spacer.gif width=1 height=1></TD></TR>";		
			
		globalBuffer += "<TR><TD COLSPAN=3><IMG SRC=\"images/SELECT_PLAYER_BOTTOM.gif\"></TD></TR>";
		globalBuffer += "<TR><TD COLSPAN=3><TABLE CELLPADDING=5 CELLSPACING=5><TR><TD style=\"font-family: tahoma,helvetica; font-size: 10pt; color: 000000; text-align: justify\">";
		globalBuffer += "This page  makes use of the RealAudio plugin, Windows Media Player and/or Quicktime. To experience the audio features, you need sound capabilities on your personal computer and installation of RealPlayer or Windows Media Player. These features are available at no cost. ";
		globalBuffer += "</TR></TD></TABLE></TD></TR></TABLE>";
		globalBuffer += "</TD></TR></TABLE>";
		//alert(globalBuffer);
		if(is.mac && is.ie){
			foundAnyPlayer = false;
			globalBuffer="<form name='theform'>";
			if(foundReal && realPathString.length){
				foundAnyPlayer = true;
				globalBuffer += "\n<BR><input type='radio' name='chooseplayer' value='real' onClick=\"opener.changeMediaTo = 'real';\" "+realCheckedString+">Real Player";
				
				if(compatibilityCheck('real') != 3){
					globalBuffer += "( <font color=red>*</font> )";
					potIncomp = true;
				}
				globalBuffer += "<BR>";
			}
			if(foundWMP && wmpPathString.length){
				foundAnyPlayer = true;
				globalBuffer += "\n<BR><input type='radio' name='chooseplayer' value='wmp' onClick=\"opener.changeMediaTo = 'wmp';\" "+wmpCheckedString+">Windows Media Player";
				
				if(compatibilityCheck('wmp') != 3){
					globalBuffer += "( <font color=red>*</font> )";
					potIncomp = true;
				}
				globalBuffer += "<BR>";
			}
			if(foundQuick && qtPathString.length){
				foundAnyPlayer = true;
				globalBuffer += "\n<BR><input type='radio' name='chooseplayer' value='qt' onClick=\"opener.changeMediaTo = 'qt';\" "+qtCheckedString+">QuickTime";
				
				if(compatibilityCheck('qt') != 3){
					globalBuffer += "<font color=red>*</font>";
					potIncomp = true;
				}
				globalBuffer += "<BR>";
			}
			if(allowNoAudio){
				foundAnyPlayer = true;
				globalBuffer += "\n<BR><input type='radio' name='chooseplayer' value='none' onClick=\"opener.changeMediaTo = 'none';\" "+noneCheckedString+">No Audio";
			
				globalBuffer += "<BR>";
			}
			if(foundAnyPlayer)
				globalBuffer += "</form><a href=\"#\" onClick=\"opener.playerAbility =  (opener.compatibilityCheck(opener.changeMediaTo) == 3);opener.writeDebug('Talk to player?'+opener.playerAbility);opener.currentPlayer = opener.changeMediaTo;opener.writeMedia(opener.currentPlayer);opener.resetLayers();opener.playPressed();window.close();return false;\"><IMG SRC=\"images/viewevent.gif\" BORDER=0></A>";
			else
				globalBuffer += "No players detected.  Please download <a href='http://www.shareholder.com/common/rp.cfm'>Real</A> or <a href='http://www.shareholder.com/common/wmp.cfm'>Windows Media Player</A>";
		}
		
		mediaChanger.focus();
		
		/*if(is.ns4){
			if(mediaChanger.document != null && mediaChanger.document['debugLayer'] !=null){
				mediaChanger.document['debugLayer'].document.write(buffer);
				debugWindow.document['debugLayer'].document.close();
			}
		} else if(is.ie) {
		
			mediaChanger.document.all.debugLayer.innerHTML = buffer;
		
		} else if(document.implementation &&document.implementation.hasFeature && document.implementation.hasFeature("html", "1.0")){
			// asuming ns6....
			
			mediaChanger.document.getElementById('debugLayer').innerHTML = buffer;
		} else {
			alert("can't debug w/this browser...");
		}*/
		
		//setTimeout("mediaChanger.writeMe(globalBuffer);",2000);


}