// scripting of the real player
// tv1.de - Andi Siegrist

function RealPlayer(aName, aPlayerName, aDigitName, aMuteName, aTimer, aTimeout, aStartPos) {
  this.name         = aName;
  this.playerName   = aPlayerName;
  this.digitName    = aDigitName;
  this.muteName     = aMuteName;
  this.timer        = aTimer;
  this.timeout      = aTimeout;
  this.startPos     = aStartPos;
  this.loopFunction = false;

  this.initialized = -1;
  
  this.isOpera = false;  
}

function RealPlayerSetOpera(boolValue) {
  this.isOpera = boolValue;
}

function RealPlayerGo() {
  this.handler      = new WACTimerEvalHandler('realPlayer', this.timeout, window, this.name + ".doIt()");
  this.timer.registerHandler(this.handler);
}

function RealPlayerHalt() {
  if (this.handler)
    this.timer.unregisterHandler(this.handler);
  this.handler = 0;
}

function RealPlayerDoIt() {
  if (this.initialized <= 0)
    this.init();
  else
    this.loop();
}

function RealPlayerInit() {
  this.playerObj = window.eval(this.docPrefix + this.playerName);

  if (this.isOpera || this.playerObj && (!document.all || (this.playerObj.readyState && this.playerObj.Source))) {

    if (this.initialized < 0) {
      this.initialized++;
    } else {
      this.digit1Obj = window.eval(this.docPrefix + this.digitName + '1');
      this.digit2Obj = window.eval(this.docPrefix + this.digitName + '2');
      this.digitmObj = window.eval(this.docPrefix + this.digitName + 'm');
      this.muteObj   = window.eval(this.docPrefix + this.muteName);
      if (this.startPos && this.startPos > 0)
        this.setPosition(this.startPos);
      this.loop()
      this.initialized = 1;
    }
  }
  else {
    this.playerObj = null;
  }
}

function RealPlayerLoop() {
  if (this.loopFunction)
    this.checkBuffering();
  this.changeVolume(0);
  this.changeMute(false);
  if (window.showPlayerPosition)
    showPlayerPosition();
}

function RealPlayerPlay() {
	
  if (!this.playerObj || !document.all && !eval(this.playerObj.CanPlayPause) && !eval(this.playerObj.CanPlay))
    return;
  
  if (this.playerObj.CanPlayPause)
    this.playerObj.DoPlayPause();
  else if (this.playerObj.CanPlay)
    this.playerObj.DoPlay();
}


function RealPlayerPause() {

  if (!this.playerObj || !document.all && !eval(this.playerObj.CanPlayPause) && !eval(this.playerObj.CanPause ))
    return;

  if (this.playerObj.CanPlayPause)
    this.playerObj.DoPlayPause();
  else if (this.playerObj.CanPause)
    this.playerObj.DoPause();
}

function RealPlayerStop() {
  if (!this.playerObj || !document.all && !eval(this.playerObj.DoStop))
    return;
  this.playerObj.DoStop();
}

function RealPlayerChangeVolume(delta) {

	try{
		var playObjGetVolumeBool = this.playerObj.GetVolume;
	}catch(error){
		var playObjGetPositionBool = this.playerObj.GetVolume();
	}
	if (!this.playerObj || !playObjGetVolumeBool || !document.all && !eval(this.playerObj.GetVolume()) )
		return ;

	var stepsize = 5;
	var vol = this.playerObj.GetVolume();
	vol += (delta * stepsize);
	vol -= vol % stepsize;
	if (vol <= 0) vol = 0;
	if (vol >= 100) vol = 100;
	if (delta != 0)
		this.playerObj.SetVolume(vol);
	if (!this.digit1Obj)
		return;
	
	var volStr = (vol < 10 ? "# " : "#") + vol + " #";
	var digitStr = volStr.substring(1,2);
	if (digitStr == " ") digitStr = "leer";
	var oldsrc = this.digit1Obj.src;
	var pos = oldsrc.indexOf("digit");
	this.digit1Obj.src = oldsrc.substring(0, pos) + "digit_" + digitStr + ".gif";
	oldsrc = this.digit2Obj.src;
	pos = oldsrc.indexOf("digit");
	this.digit2Obj.src = oldsrc.substring(0, pos) + "digit_" + volStr.substring(2,3) + ".gif";
	var digitStr = volStr.substring(3,4);
	if (digitStr == " ") digitStr = "leer";
	oldsrc = this.digitmObj.src;
	pos = oldsrc.indexOf("digit");
	this.digitmObj.src = oldsrc.substring(0, pos) + "digitm_" + digitStr + ".gif";
}

function RealPlayerChangeMute(toggle) {

	try{
		var playObjGetMuteBool = this.playerObj.GetMute;
	}catch(error){
		var playObjGetMuteBool = this.playerObj.GetMute();
	}
	if (!this.playerObj || !playObjGetMuteBool || !document.all && !eval(this.playerObj.GetMute()) )
		return ;

  var muteState = this.playerObj.GetMute();

  if (toggle) {
    muteState = !muteState;    
    this.playerObj.SetMute(muteState);
  }
    
  if (!this.muteObj)
    return;

  var muteStr = (muteState ? "mton.gif" : "mtoff.gif");
  var oldsrc = this.muteObj.src;
  var pos = oldsrc.lastIndexOf("mto");
  if (pos >= 0)
    this.muteObj.src = oldsrc.substring(0,pos) + muteStr;
}

function RealPlayerSetPosition(pos) {
try{
  if (!this.playerObj || !document.all && !eval(this.playerObj.SetPosition))
    return;
  this.playerObj.SetPosition(pos);
 }catch(error){
 }
}

function RealPlayerGetPosition() {
	try{
		var playObjGetPositionBool = this.playerObj.GetPosition;
	}catch(error){
		var playObjGetPositionBool = this.playerObj.GetPosition();
	}
	if (!this.playerObj || !playObjGetPositionBool || !document.all && !eval(this.playerObj.GetPosition()) )
		return 0;
	return this.playerObj.GetPosition();
}

function RealPlayerIsPlaying() {
	try{
		var playObjGetPlayStateBool = this.playerObj.GetPlayState;
	}catch(error){
		var playObjGetPlayStateBool = this.playerObj.GetPlayState();
	}
	if (!this.playerObj || !playObjGetPlayStateBool)
	  return false;
  return (this.playerObj.GetPlayState() == 3);
}

function RealPlayerIsPaused() {
	try{
		var playObjGetPlayStateBool = this.playerObj.GetPlayState;
	}catch(error){
		var playObjGetPlayStateBool = this.playerObj.GetPlayState();
	}
	if (!this.playerObj || !playObjGetPlayStateBool)
	  return false;
  
  return (this.playerObj.GetPlayState() == 4);
}

function RealPlayerIsStopped() {
	try{
		var playObjGetPlayStateBool = this.playerObj.GetPlayState;
	}catch(error){
		var playObjGetPlayStateBool = this.playerObj.GetPlayState();
	}
	if (!this.playerObj || !playObjGetPlayStateBool)
	  return true;
  
  return (this.playerObj.GetPlayState() == 0);
}

function RealPlayerIsContacting() {
	try{
		var playObjGetPlayStateBool = this.playerObj.GetPlayState;
	}catch(error){
		var playObjGetPlayStateBool = this.playerObj.GetPlayState();
	}
	if (!this.playerObj || !playObjGetPlayStateBool)
	  return false;
  
  return (this.playerObj.GetPlayState() == 1);
}


function RealPlayerSetDoubleSize() {
	try{
		var playObjSetDoubleSizeBool = this.playerObj.SetDoubleSize;
	}catch(error){
		var playObjSetDoubleSizeBool = this.playerObj.SetDoubleSize();
	}
  if (!this.playerObj || !playObjSetDoubleSizeBool)
	  return;
	this.playerObj.SetDoubleSize();
}

function RealPlayerSetFullScreen() {
	if (!this.playerObj)
	  return;
	try{
		var playObjSetFullScreenBool = this.playerObj.SetFullScreen;
	}catch(error){
		var playObjSetFullScreenBool = this.playerObj.SetFullScreen();
	}
	if (!playObjSetFullScreenBool)
	  return;
	this.playerObj.SetFullScreen();
}

function RealPlayerSetEnableDoubleSize(value) {
	if (!this.playerObj)
	  return;
	try{
		var playObjSetEnableDoubleSizeBool = this.playerObj.SetEnableDoubleSize;
	}catch(error){
		var playObjSetEnableDoubleSizeBool = this.playerObj.SetEnableDoubleSize();
	}
	if (!playObjSetEnableDoubleSizeBool)
	  return;
	this.playerObj.SetEnableDoubleSize(value);
}

function RealPlayerSetEnableFullScreen(value) {
	if (!this.playerObj)
	  return;
	try{
		var playObjSetEnableFullScreenBool = this.playerObj.SetEnableFullScreen;
	}catch(error){
		var playObjSetEnableFullScreenBool = this.playerObj.SetEnableFullScreen();
	}
	if (!playObjSetEnableFullScreenBool)
	  return;
	this.playerObj.SetEnableFullScreen(value);
}

function RealPlayerGetLength() {
	if (!this.playerObj)
	  return;
	try{
		var playObjGetLengthBool = this.playerObj.GetLength;
	}catch(error){
		var playObjGetLengthBool = this.playerObj.GetLength();
	}
	if (!playObjGetLengthBool)
	  return;
	return this.playerObj.GetLength();
}

function RealPlayerSetRelPosition(relPos) {
  if (!this.playerObj )
    return;

  var clipLength;
  if (this.playerObj.GetLiveState)
      return;
  clipLength = this.playerObj.GetLength();
  if (clipLength != undefined && clipLength != null) {
  	var pos = Math.floor(relPos * clipLength);
  	this.playerObj.SetPosition(pos);
//  this.playerObj.Play();
  }
}

function RealPlayerGetRelPosition() {
  
    if (!this.playerObj)
        return 0;

  var clipLength;
  
  if (this.playerObj.GetLiveState) {
      return 0;
	  }
  clipLength = this.playerObj.GetLength();
  pos = this.playerObj.GetPosition();
  var relPos = pos / clipLength; 
/* DEBUG   debugRelPos(relPos); */
  return relPos;
}


function RealPlayerPrevClip() {
	if (!this.playerObj)
	  return;
        this.playerObj.DoPrevEntry();
}

function RealPlayerNextClip() {
	if (!this.playerObj)
	  return;
        this.playerObj.DoNextEntry();
}

function RealPlayerGetNumClips() {
	if (!this.playerObj)
	  return;
	return this.playerObj.GetNumEntries();
}

function RealPlayerGetCurrentClip() {
	if (!this.playerObj)
	  return;
	return this.playerObj.GetCurrentEntry();
}

function RealPlayerSetCurrentClip(entry) {                         // first clip is 1, not 0 !!!!
	if (!this.playerObj)
	  return;
        
        if ( this.playerObj.GetPlayState() == 0 ) this.play();

        entry = entry - 1;
        var currClip = this.getCurrentClip();

        if ( entry < currClip ) {
          while ( entry < currClip ) {
            this.prevClip();
            --currClip;
          }
        }
        if ( entry > currClip ) {
          while ( entry > currClip ) {
            this.nextClip();
            ++currClip;
          }
        }
}

function RealPlayerSetMultiClipIvod(pos, array) {
        if (!this.playerObj)
	  return;

        if ( this.playerObj.GetPlayState() == 0 ) this.play();

        var upperBorder = 0;
        var lowerBorder = 0;
        var allClips = this.getNumClips();

        var entry = -1;

        for ( var ii = 0; ii < allClips; ii++ ) {
          lowerBorder = upperBorder;
          upperBorder += array[ii];

          if ( pos > lowerBorder && pos < upperBorder ) {
            entry = ii+1;
            break;
          }
        }
        
        this.setCurrentClip(entry);

                                                              // here is still a bug;
                                                              // the position is set to the beginning of the stream

        this.setPosition(pos - lowerBorder);
}


function RealPlayerCheckBuffering() {
  if (!this.playerObj || !document.all && !eval(this.playerObj.GetPlayState))
  {
    this.loopFunction(false);
    return false;
  }
  var state = this.playerObj.GetPlayState() - 0;
  this.loopFunction(state > 0 && state < 3);
}


function RealPlayerGetBufferingProgress() {
  return -1;
}


RealPlayer.prototype.getLength        = RealPlayerGetLength;
RealPlayer.prototype.nextClip         = RealPlayerNextClip;
RealPlayer.prototype.prevClip         = RealPlayerPrevClip;
RealPlayer.prototype.getNumClips      = RealPlayerGetNumClips;
RealPlayer.prototype.getCurrentClip   = RealPlayerGetCurrentClip;
RealPlayer.prototype.setCurrentClip   = RealPlayerSetCurrentClip;
RealPlayer.prototype.setMultiClipIvod = RealPlayerSetMultiClipIvod;

RealPlayer.prototype.setOpera     = RealPlayerSetOpera;
RealPlayer.prototype.go           = RealPlayerGo;
RealPlayer.prototype.doIt         = RealPlayerDoIt;
RealPlayer.prototype.init         = RealPlayerInit;
RealPlayer.prototype.loop         = RealPlayerLoop;
RealPlayer.prototype.play         = RealPlayerPlay;
RealPlayer.prototype.pause        = RealPlayerPause;
RealPlayer.prototype.stop         = RealPlayerStop;
RealPlayer.prototype.halt         = RealPlayerHalt;
RealPlayer.prototype.changeVolume = RealPlayerChangeVolume;
RealPlayer.prototype.changeMute   = RealPlayerChangeMute;
RealPlayer.prototype.setPosition  = RealPlayerSetPosition;
RealPlayer.prototype.getPosition  = RealPlayerGetPosition;
RealPlayer.prototype.checkBuffering  = RealPlayerCheckBuffering;
RealPlayer.prototype.isPlaying    = RealPlayerIsPlaying;
RealPlayer.prototype.isPaused     = RealPlayerIsPaused;
RealPlayer.prototype.isStopped    = RealPlayerIsStopped;
RealPlayer.prototype.isContacting = RealPlayerIsContacting;
RealPlayer.prototype.setDoubleSize = RealPlayerSetDoubleSize;
RealPlayer.prototype.setFullScreen = RealPlayerSetFullScreen;
RealPlayer.prototype.setEnableDoubleSize = RealPlayerSetEnableDoubleSize;
RealPlayer.prototype.setEnableFullScreen = RealPlayerSetEnableFullScreen;
RealPlayer.prototype.setRelPosition  = RealPlayerSetRelPosition;
RealPlayer.prototype.getRelPosition  = RealPlayerGetRelPosition;
RealPlayer.prototype.getBufferingProgress = RealPlayerGetBufferingProgress;
RealPlayer.prototype.docPrefix    = (document.all ? "document.all." : "document.");
