<!--

/************************************************************************/
/* control_player.js                                                    */
/*----------------------------------------------------------------------*/
/* Defines MediaStart to play message in media player, and              */
/* MediaPlayOnExtension to play message on extension.                   */
/*----------------------------------------------------------------------*/
/* Copyright (c) 2008-2009 Avaya Inc.                                   */
/************************************************************************/

// Enums for MediaSessionState
var eMSS_null    = 0;
var eMSS_playing = 1;
var eMSS_paused  = 2;
var eMSS_stopped = 3;

var gMediaButtonState = {};
var gMediaSessionState = eMSS_stopped;

// Plays the a voice message, set by gMessageList.messages[gCurrentMsgNum]["MediaUrl"] and/or
// gMessageList.messages[gCurrentMsgNum]["MediaFilename"] and currently selected media player.
// Stops playing any earlier messages.
// Shows media controls as appropriate.
// If bAutostart is true, controls will appear and playback will start.
// Otherwise controls will appear but no playback.
function MediaStart( bAutostart, bRecallVolume )
{
  if( !gCurrentMsg )
  {
    return;
  }

  // Show/hide pause/play buttons
  ShowElem( 'paus', true );
  ShowElem( 'play', false );

  var media_div = document.getElementById('dlg_msg_mp');
  if( media_div )
  {
    var currentMediaPlayer = GetCurrentMediaPlayer();

    if( currentMediaPlayer == eMP_windows )
    {
      // gCurrentMsg.MediaUrl should start with protocol, e.g. http:. This should not be escaped.
      var url;
      if( gCurrentMsg.mediaUrl.match( /^([A-Za-z]+:)(.*)$/ ) )
      {
        url = RegExp.$1 + escape( RegExp.$2 );
      }
      else
      {
        url = escape( gCurrentMsg.mediaUrl );
      }

                /*
      media_div.innerHTML = ""
      + "<object classid=\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\""
      + "  id=\"dlg_msg_wmp\" style=\"background:#8F8F8F;\""
      + "  codebase=http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"
      + "  width=\"598\" height=\"44\" align=\"middle\">"
      + "  <param name=\"src\" value=\"" + url + "\" />"
      + "  <param name=\"autoplay\" value=\"" + (bAutostart?"1":"0") + "\" />"
      + "  <param name=\"controller\" value=\"true\">"
      + "  <embed id=\"dlg_msg_wmp2\" src=\"" + url + "\" width=\"598\" height=\"44\" autoplay=\"" + (bAutostart?"1":"0") + "\" controller=\"true\" pluginspage=\"http://www.apple.com/quicktime/\"></embed>"
      + "</object>";
              */

     /* if( gBrowser.os = eOS_Series60 )
      {
        media_div.innerHTML = '<a href="' + url + '">' + TextToHtml(url) + '</a><p>'+TextToHtml(url)+'</p>';
      }
      else */if( !gGotWindowsMediaPlayer )
      {
          media_div.innerHTML = ""
            + "<object "
            + "  id=\"dlg_msg_wmp\""
            + "  data=\"" + url + "\""
            + "  type=\"application/x-wav\""
            + "  style=\"width:" + (gBrowser.IsTiny()?(gBrowser.serverwidth-42):598)+ "px; height:44px; margin-top:0;\">"
            + "  <param name=\"autostart\" value=\"" + (bAutostart?"1":"0") + "\" />"
            + "</object>";
      }
      else
      {
        if( gBrowser.type == eBT_IE )
        {
          media_div.innerHTML = ""
            + "<object "
            + "        id=\"dlg_msg_wmp\""
            + "        classid=\"clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95\""
            + "        codebase=\"http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,0,02,902\""
            + "        style=\"width:" + (gBrowser.IsTiny()?(gBrowser.serverwidth-42):598)+ "px; height:44px; margin-top:0;\""
            + "        type=\"application/x-oleobject\">"
            + "  <param name=\"filename\" value=\"" + url + "\" />"
            + "  <param name=\"autostart\" value=\"" + (bAutostart?"1":"0") + "\" />"
            + "  <param name=\"showcontrols\" value=\"true\" />"
            + "</object>";
        }
        else
        {
          media_div.innerHTML = ""
            + "<object "
            + "        id=\"dlg_msg_wmp\""
            + "        data=\"" + url + "\""
            + "        style=\"width:" + (gBrowser.IsTiny()?(gBrowser.serverwidth-42):598)+ "px; height:44px; margin-top:0;\""
            + "        type=\"application/x-mplayer2\">"
            + "  <param name=\"pluginurl\" value=\"http://www.microsoft.com/Windows/MediaPlayer/\" />"
            + "  <param name=\"autostart\" value=\"" + (bAutostart?"1":"0") + "\" />"
            + "  <param name=\"controller\" value=\"true\" />"
            + "</object>";
        }
      }

      // No callback from Windows Media Player, so assume play succeeded and mark message as read.
      if( gCurrentMsg.state == eMS_new )
      {
        UpdateMessageState(gCurrentMsg.id, 'O');
      }
    }
    else if( currentMediaPlayer == eMP_extension )
    {
      media_div.innerHTML = GetExtnMediaControls();           
      var rwndbtn = document.getElementById('rwnd');
      var ffwdbtn = document.getElementById('ffwd');
  
      rwndbtn.disabled = true;
      ffwdbtn.disabled = true;


      if( bAutostart )
      {
        // Start playback on extension.
        // Callback in ajax.js will mark message as read once playback finishes.
        MediaPlayOnExtension();
      }
    }
    else
    {
      media_div.innerHTML="";
    }
  }

  if( bRecallVolume )
  {
    // Wait for OLE object to load before setting volume.
    // Don't do it like this. Proper way is to add function to a list processed by setTimeout handler.
    // Even better way is to keep the object loaded all the time.
    window.setTimeout( RecallVolumeSetting, 200);
  }
}

// Forces all media playback to stop.
function MediaStop()
{
  // Send stop to kill playback on extension, if there is any.
  var queryString = "command=stop";
  Ajax.ajax_one_way_media_control.Execute(queryString);

  RememberVolumeSetting();

  // Kill Windows Media Player if it's there.
  var media_div = document.getElementById('dlg_msg_mp');
  if( media_div )
  {
    var currentMediaPlayer = GetCurrentMediaPlayer();
    if( currentMediaPlayer == eMP_extension )
    {
      media_div.innerHTML = GetExtnMediaControls();
    }
    else
    {
      media_div.innerHTML = "";
    }
  }
}

function GetExtnMediaControls()
{
  var currentTheme = GetCurrentTheme();
  var html = "";
  html += "<div style=\"background:#333333; position:relative; height:44px; padding-left:19px;\">";
  html +=   "<img src=\"images/"+ currentTheme + "/transport_play.gif\" style=\"position:absolute; left:22px;  top:14px;\" onmouseover=\"if(IsClickable(this.id)){TransportButtonOver('play');}\" onmouseout=\"TransportButtonOut('play')\" onclick=\"if(IsClickable(this.id)){TransportButtonClick('play')}\" alt=\"" + LocaliseString('Play')         + "\" title=\"" + LocaliseString('Play voice message')         + "\" id=\"play\" />";
  html +=   "<img src=\"images/"+ currentTheme + "/transport_paus.gif\" style=\"visibility:hidden; position:absolute; left:22px;  top:14px;\" onmouseover=\"if(IsClickable(this.id)){TransportButtonOver('paus');}\" onmouseout=\"TransportButtonOut('paus')\" onclick=\"Activity(); if(IsClickable(this.id)){TransportButtonClick('paus')}\" alt=\"" + LocaliseString('Pause')        + "\" title=\"" + LocaliseString('Pause voice message')        + "\" id=\"paus\" />";
  html +=   "<img src=\"images/"+ currentTheme + "/transport_stop.gif\" style=\"position:absolute; left:66px; top:14px;\" onmouseover=\"if(IsClickable(this.id)){TransportButtonOver('stop');}\" onmouseout=\"TransportButtonOut('stop')\" onclick=\"Activity(); if(IsClickable(this.id)){TransportButtonClick('stop')}\" alt=\"" + LocaliseString('Stop')         + "\" title=\"" + LocaliseString('Stop voice message')         + "\" id=\"stop\" />";
  html +=   "<img src=\"images/"+ currentTheme + "/transport_rwnd.gif\" style=\"position:absolute; left:110px; top:14px;\" onmouseover=\"if(IsClickable(this.id)){TransportButtonOver('rwnd');}\" onmouseout=\"TransportButtonOut('rwnd')\" onclick=\"Activity(); if(IsClickable(this.id)){TransportButtonClick('rwnd')}\" alt=\"" + LocaliseString('Rewind')       + "\" title=\"" + LocaliseString('Rewind voice message')       + "\" id=\"rwnd\" />";
  html +=   "<img src=\"images/"+ currentTheme + "/transport_ffwd.gif\" style=\"position:absolute; left:154px; top:14px;\" onmouseover=\"if(IsClickable(this.id)){TransportButtonOver('ffwd');}\" onmouseout=\"TransportButtonOut('ffwd')\" onclick=\"Activity(); if(IsClickable(this.id)){TransportButtonClick('ffwd')}\" alt=\"" + LocaliseString('Fast Forward') + "\" title=\"" + LocaliseString('Fast forward voice message') + "\" id=\"ffwd\" />";
  html +=   "<span id=\"dlg_msg_info\" style=\"position:absolute; left:198px; top:15px; font-size:8pt; color:#eeeeee; margin-left:8px\"></span>";
  html += "</div>";

  return html;
}

// Sends request to ajax/ajax_media_play.php to play message on external handset.
function MediaPlayOnExtension()
{
  if( !gCurrentMsg )
  {
    return;
  }

  var number = RememberExtensionNumber();

  var info_elem = document.getElementById("dlg_msg_info");
  if( info_elem )
  {
      info_elem.style.visibility = "inherit";
      info_elem.innerHTML = LocaliseString("Playing") + "...";
  }

  var queryString = "target=" + number;
  Ajax.ajax_media_create.filename = gCurrentMsg.mediaFilename;  // Passed to ajax_media_play once ajax_media_create completes.
  Ajax.ajax_media_create.msgId    = gCurrentMsg.id;     // Passed to ajax_media_play once ajax_media_create completes.
  Ajax.ajax_media_create.msgState = gCurrentMsg.state;  // Passed to ajax_media_play once ajax_media_create completes.
  Ajax.ajax_media_create.Execute(queryString); 
  
}

// Volume accessors
function MediaGetVolume()
{
  var vol = null;
  var elem = document.getElementById('dlg_msg_wmp');
  if( elem )
  {
    if( typeof(elem.GetVolume) != "undefined" )
    {
      vol = elem.GetVolume();
    }
    else if( typeof(elem.volume) != "undefined" )
    {
      vol = elem.volume;
    }
    else if( typeof(document.dlg_msg_wmp) != "undefined" && typeof(document.dlg_msg_wmp.settings) != "undefined" && typeof(document.dlg_msg_wmp.settings.volume) != "undefined" )
    {
      vol = document.dlg_msg_wmp.settings.volume;
    }
  }
  return vol;
}
function MediaSetVolume( vol )
{
  var elem = document.getElementById('dlg_msg_wmp');
  if( elem )
  {
    if( typeof(document.dlg_msg_wmp) != "undefined" )
    {
      if( typeof(document.dlg_msg_wmp.settings) != "undefined"  )
      {
        if( typeof(document.dlg_msg_wmp.settings.volume) != "undefined" )
        {
          document.dlg_msg_wmp.settings.volume = 1*vol;
        }
      }
    }
    if( typeof(elem.SetVolume) != "undefined" )
    {
      elem.SetVolume( 1*vol );
    }
    if( typeof(elem.volume) != "undefined" )
    {
      elem.volume = 1*vol;
    }
  }
}


// Page interaction event callbacks ///////////////////////////////////////////////////////////////////////////////////

function TransportButtonOver(cmd)
{
  var elem = document.getElementById( cmd );
  if( elem )
  {
    var currentTheme = GetCurrentTheme();
    var img_src="images/" + currentTheme + "/transport_" + cmd + "_over.gif";
    elem.src = img_src;
  }
}

function TransportButtonOut(cmd)
{
  var elem = document.getElementById(cmd);
  if( elem )
  {
    var currentTheme = GetCurrentTheme();
    var img_src;
    if( gMediaButtonState[cmd] == 'pressed' )     // NB: undefined != 'pressed'
    {
      img_src ="images/" + currentTheme + "/transport_" + cmd + "_down.gif";
    }
    else
    {
      img_src ="images/" + currentTheme + "/transport_" + cmd + ".gif";
    }
    elem.src = img_src;
  }
}

function TransportButtonClick(cmd)
{
  // Put button in pressed state
  gMediaButtonState[cmd] = 'pressed';

  var elem = document.getElementById(cmd);
  if( elem )
  {
    var currentTheme = GetCurrentTheme();
    var img_src="images/" + currentTheme + "/transport_" + cmd + "_down.gif";
    elem.src = img_src;
  }

  // Decide whether to use play button to start, or to resume.
  if( cmd == 'play' && (gMediaSessionState == eMSS_stopped) )
  {
    // Use play button to start a new session
    MediaPlayOnExtension();
  }
  else
  {
    // Execute command
    Ajax.ajax_media_control.command = cmd;
    var queryString = "command=" + Ajax.ajax_media_control.command;
    Ajax.ajax_media_control.Execute(queryString);

    Activity();
  }
}

// Event callbacks

// Called when ajax request succeeds
function OnPlay()
{
  gMediaButtonState['play'] = 'normal';
  gMediaSessionState = eMSS_playing;

  var rwndbtn = document.getElementById('rwnd');
  var ffwdbtn = document.getElementById('ffwd');
  
  rwndbtn.disabled = false;
  ffwdbtn.disabled = false;

  var info_elem = document.getElementById("dlg_msg_info");
  if( info_elem )
  {
      info_elem.style.visibility = "inherit";
      info_elem.innerHTML = LocaliseString("Playing") + "...";
  }

  // Change pressed-down image back to normal image.
  var play_elem = document.getElementById('play');
  if( play_elem )
  {
    var currentTheme = GetCurrentTheme();
    var img_src="images/" + currentTheme + "/transport_play.gif";
    play_elem.src = img_src;
    play_elem.style.visibility = "hidden";
  }

  ShowElem( 'paus', true );
  ShowElem( 'play', false );
}

// Called when ajax request succeeds
function OnPause()
{
  gMediaButtonState['paus'] = 'normal';
  gMediaSessionState = eMSS_paused;;

  var info_elem = document.getElementById("dlg_msg_info");
  if( info_elem )
  {
      info_elem.style.visibility = "inherit";
      info_elem.innerHTML = LocaliseString("Paused") + "...";
  }

  // Change pressed-down image back to normal image.
  var play_elem = document.getElementById('play');
  if( play_elem )
  {
    var currentTheme = GetCurrentTheme();
    var img_src="images/" + currentTheme + "/transport_paus.gif";
    play_elem.src = img_src;
    play_elem.style.visibility = "inherit";
  }

  var paus_elem = document.getElementById('paus');
  if( paus_elem )
  {
    paus_elem.src = img_src;
    paus_elem.style.visibility = "hidden";
  }
}

// Called when ajax request succeeds
function OnStop()
{
  gMediaButtonState['stop'] = 'normal';
  gMediaSessionState = eMSS_stopped;

  var rwndbtn = document.getElementById('rwnd');
  var ffwdbtn = document.getElementById('ffwd');
  
  rwndbtn.disabled = true;
  ffwdbtn.disabled = true;

  var info_elem = document.getElementById("dlg_msg_info");
  if( info_elem )
  {
      info_elem.style.visibility = "inherit";
      info_elem.innerHTML = LocaliseString("Stopped");
  }

  // Change pressed-down image back to normal image.
  var stop_elem = document.getElementById('stop');
  if( stop_elem )
  {
    var currentTheme = GetCurrentTheme();
    var img_src="images/" + currentTheme + "/transport_stop.gif";
    stop_elem.src = img_src;
  }

  // Change pressed-down image back to normal image.  (In case stop happened before play succeeded)
  var play_elem = document.getElementById('play');
  if( play_elem )
  {
    var currentTheme = GetCurrentTheme();
    var img_src="images/" + currentTheme + "/transport_play.gif";
    play_elem.src = img_src;
    play_elem.style.visibility = "hidden";
  }

  ShowElem( 'play', true );
  ShowElem( 'paus', false );
}

// Called when ajax request succeeds
function OnRewind()
{
  var info_elem = document.getElementById("dlg_msg_info");
  if( info_elem )
  {
      info_elem.style.visibility = "inherit";
      info_elem.innerHTML = LocaliseString("Playing") + "...";
  }

  // Change pressed-down image back to normal image.
  gMediaButtonState['rwnd'] = 'normal';
  gMediaSessionState = eMSS_playing;

  var rwnd_elem = document.getElementById('rwnd');
  if( rwnd_elem )
  {
    var currentTheme = GetCurrentTheme();
    var img_src="images/" + currentTheme + "/transport_rwnd.gif";
    rwnd_elem.src = img_src;
  }

}

// Called when ajax request succeeds
function OnFastForward()
{
  var info_elem = document.getElementById("dlg_msg_info");
  if( info_elem )
  {
      info_elem.style.visibility = "inherit";
      info_elem.innerHTML = LocaliseString("Playing") + "...";
  }

  // Change pressed-down image back to normal image.
  gMediaButtonState['ffwd'] = 'normal';
  gMediaSessionState = eMSS_playing;

  var ffwd_elem = document.getElementById('ffwd');
  if( ffwd_elem )
  {
    var currentTheme = GetCurrentTheme();
    var img_src="images/" + currentTheme + "/transport_ffwd.gif";
    ffwd_elem.src = img_src;
  }
}

// Implements the Call-back feature where a call is placed from the specified extension to the number that left the message.
function DialFromExtn()
{
  if( !gCurrentMsg )
  {
    return;
  }

	// Temporarily disable ringback button
	gEnableDialFromExtn = false;
	RedrawMsgToolbar();
	window.setTimeout( function(){gEnableDialFromExtn=true;RedrawMsgToolbar();}, 7000);
	
  var number = RememberExtensionNumber();
  var target = gCurrentMsg.callerID;

  var queryString = "extn=" + number + "&target=" + target;
  Ajax.ajax_media_dialfromextn.Execute(queryString);
}


//-->
