/*
-----------------------------------------------------------------------------------------------------------------------------

File:         swmwebMediaPlayer.js

  Author: Original: Shaun W McGarry Grapevine Great Yarmouth Copyright 2007
           Modified and updated : Nathan Morris  Copyright 2007 

  Latest:  v1.0.23   17 apr 2007

  History

  v1.0.0     10 apr 2007     Created
  v1.0.16    15 apr 2007  tidy up
  v1.0.23    17 apr 2007  Made sure the focus is moved with the Next and Previous tracks commands.

---------------------------------------------------------------------------------------------------------------
*/


// insert the style sheets for the web Media Player 
//  document.writeln( '<link rel="stylesheet" type="text/css" href="swm_webMediaPlayer.css">' );


/*
    event handlers
*/

var cancelKey = 0;

function playerControls()
{
var nSkip;
var nVol;

//    debugPrint ( '> ' + event.keyCode  + '    ' + event.ctrlKey  + '    ' + event.altKey + '   ' + event.shiftKey);

  switch( event.keyCode ) 
  {

// PlayPause ...
  case 80: // P  WMP Real
    playPause();
    event.keyCode = 0;
    event.cancelBubble = true;
    event.returnValue = 0;
    cancelKey = 1;
    break;

// Play only (WinAmp)
  case 88:  // x   WinAmp control 
    play();
    event.keyCode = 0;
    event.cancelBubble = true;
    event.returnValue = 0;
    cancelKey = 1;
    break;

// Pause toggle only (WinAmp)
  case 67:  // C   WinAmp control 
    pauseToggle();
    event.keyCode = 0;
    event.cancelBubble = true;
    event.returnValue = 0;
    cancelKey = 1;
    break;

// stop...
  case 83:  //  S    WMP Real 
  case 86:  // V  WinAmp
    stop();
    event.keyCode = 0;
    event.cancelBubble = true;
    event.returnValue = 0;
    cancelKey = 1;
    break;

// next track ...
//  case 70:  // F  WMP
//  case 84:  // T  Real
//  case 78:  // N  old WMP
//    nextTrack();
//    event.keyCode = 0;
//    event.cancelBubble = true;
//    event.returnValue = 0;
//    cancelKey = 1;
//    break;

// previous track ...
//  case 82:  // R  Real
//  case 90:  // Z  WinAmp
//    prevTrack();
//    event.keyCode = 0;
//    event.cancelBubble = true;
//    event.returnValue = 0;
//    cancelKey = 1;
//    break;

// B key conflict between WMP and WinAmp. have to use CTRL B for WMP and just B for WinAmp
  case 66:  // B  WMP WinAmp
    if( event.ctrlKey )
      prevTrack();
    else
      nextTrack();
    event.keyCode = 0;
    event.cancelBubble = true;
    event.returnValue = 0;
    cancelKey = 1;
    break;

// volume controls ...
  case 81:  //  Q  decrease 
    nVol = 5;
    if( event.ctrlKey ) nVol = 15;
    if( event.altKey ) nVol = 25;
    changeVolume( -nVol );
    event.keyCode = 0;
    event.cancelBubble = true;
    event.returnValue = 0;
    cancelKey = 1;
    break;

  case 87:  //  W  Increase 
    nVol = 5;
    if( event.ctrlKey ) nVol = 15;
    if( event.altKey ) nVol = 25;
    changeVolume( nVol );
    event.keyCode = 0;
    event.cancelBubble = true;
    event.returnValue = 0;
    cancelKey = 1;
    break;



  case 77:  // M  WinAmp 
  case 120:  //  f9    WMP
  case 122:  //   f11 Real
    volume(0);  // using 0 will toggle sound ON and OFF
    event.keyCode = 0;
    event.cancelBubble = true;
    event.returnValue = 0;
    cancelKey = 1;
    break;

  case 188:  //  ,  33%
    volume(33);
    event.keyCode = 0;
    event.cancelBubble = true;
    event.returnValue = 0;
    cancelKey = 1;
    break;

  case 190:  //  66%
    volume(66);
    event.keyCode = 0;
    event.cancelBubble = true;
    event.returnValue = 0;
    cancelKey = 1;
    break;

  case 191:  // 100%
    volume(100);
    event.keyCode = 0;
    event.cancelBubble = true;
    event.returnValue = 0;
    cancelKey = 1;
    break;

// skip 'x' second backwards 
  case 219:  //  { [ 
    nSkip = 5;
    if( event.altKey )  nSkip = 10;
    if( event.ctrlKey ) nSkip = 2;
    skip( -nSkip );
    event.keyCode = 0;
    event.cancelBubble = true;
    event.returnValue = 0;
    cancelKey = 1;
    break;

// skip 'x' second forwards 
  case 221:  //  } ] 
    nSkip = 5;
    if( event.altKey )  nSkip = 10;
    if( event.ctrlKey ) nSkip = 2;
    skip( nSkip );
    event.keyCode = 0;
    event.cancelBubble = true;
    event.returnValue = 0;
    cancelKey = 1;
    break;

  } // switch 

//   debugPrint ( '   = ' + event.keyCode  + '    ' + event.ctrlKey  + '    ' + event.altKey + '   ' + event.shiftKey);


} // function


function tidyKeys()
{
// debugPrint ( ' UP > ' + event.keyCode + '  ' + event.ctrlKey );
  if( cancelKey > 0 )
  {
    event.keyCode = 0;
    event.cancelBubble = true;
    event.returnValue = 0;
    cancelKey--;

// debugPrint ( ' UP- ' + event.keyCode + '  ' + event.ctrlKey );
  } // if
} // function 



/*
       the wrapper functions for corePlayer1
*/


// establish connection to PC's media player...
var corePlayer1;
//  corePlayer1 = new clb_JSPlayer_core( "QTP", "blank.mp3" );
  corePlayer1 = new clb_JSPlayer_core( "WMP" );

var currentTrackDiv = null;
var currentTrackNumber = '';


		function load( URL, sNum )
{
    if (currentTrackDiv != null) {
      if (currentTrackNumber == sNum) {
        playPause();
        return;
      }
      currentTrackDiv.innerHTML = '';
    }
    currentTrackDiv = document.getElementById( 's' + sNum );
    document.getElementById( 'a' + sNum ).focus();
    currentTrackNumber =  sNum;
			corePlayer1.loadAudio( URL );
			playPause();
			} // function 

		function playPause()
{
  corePlayer1.playPause();
  if (currentTrackDiv != null) {
      switch (corePlayer1.getState()) {
      case 'loading':
      case 'playing':
        currentTrackDiv.innerHTML = 'Playing';
        break;
      case 'paused':
          currentTrackDiv.innerHTML = 'Paused';
        break;
      default:
          currentTrackDiv.innerHTML = '';
        break;
      } // switch 
  } // if
			} // function 

function play()
{
  corePlayer1.stop();
  playPause();
  } // function

function pauseToggle()
{
  switch( corePlayer1.getState() ) 
  {
  case 'playing':
  case 'paused':
    playPause();
    break;
  } // switch 

} // function

		function stop()
{
var s = 'abcdefghijklmn';

  corePlayer1.stop();
  if (currentTrackDiv != null) 
  {
      currentTrackDiv.innerHTML = '';
    }
			} // function 


// function nextTrack()
// {
// var num;

//  if( currentTrackDiv == null )
//    return;

//  if( currentTrackNumber == '' )
//    return;

//  num = currentTrackNumber;
//  num++;

//  if( document.getElementById( 's' + num ) == null )
//    num = 1;

//  load( num );
//    document.getElementById( 'a' + num ).click();

// }


// function prevTrack()
// {
// var num;

//  if( currentTrackDiv == null )
//    return;

//  if( currentTrackNumber == '' )
//    return;

//  num = currentTrackNumber;
//  num--;

//  if( num == 0 )
//    for( num = 10 ; document.getElementById( 's' + num ) == null ; num-- );

//  load( num );
//    document.getElementById( 'a' + num ).click();

// }


//skip 'n' seconds 
function skip( nSkip )
{
var nTime = corePlayer1.getPosition();

//debugPrint ( nTime + '   ' + nSkip );
  nTime = nTime + nSkip;

  corePlayer1.setPosition( nTime );

}// function 


var saveOldVolumeOnMute;

// volume to 'n' level 
function volume( nLevel )
{
  if( nLevel == 0 )
    if( corePlayer1.volume() == 0 )
      nLevel = saveOldVolumeOnMute;
    else
      saveOldVolumeOnMute = corePlayer1.volume();

  corePlayer1.volume ( nLevel );
} // function 

// change the volume by "n" amount 
function changeVolume( nAmount )
{
var vol = corePlayer1.volume() + nAmount;

  if( vol < 0 ) vol = 0;
  if( vol > 100 ) vol = 100;
  corePlayer1.volume ( vol );

} // function 


/*
      insert HTML elements for Media Player panel
*/

/* **********


<h2>Media Player Controls</h2>
<input id=playButton type="button" value="Play/Pause" onclick="playPause()">
<input id=stopButton type="button" value="Stop" onclick="stop()">
<input id=nextButton type="button" value="Next" onclick="nextTrack()">
<input id=prevButton type="button" value="Previous" onclick="prevTrack()">

<input id=skipBackwardButton type="button" value="Skip 5 seconds Backward" onclick="skip(-5)">
<input id=skipForwardButton type="button" value="Skip 5 seconds Forward" onclick="skip(5)">

<input id=muteButton type="button" value="Mute" onclick="volume(0)">
<input id=vol33Button type="button" value="Volume 33%" onclick="volume(33)">
<input id=vol66Button type="button" value="Volume 66%" onclick="volume(66)">
<input id=vol100Button type="button" value="Volume 100%" onclick="volume(100)">

******** */


/*
      debug messages 
*/


// insert HTML elements for debug messsages to appear...
//  document.writeln( '<div id=debugMessagesDIV><h1>Debug Section</h1> ');
//  document.writeln( '<h2>debug output messages</h2><a onclick="debugClear()">Clear</a> ');
//  document.writeln( '<p id=debugMessages></p>-</div> ');


var dm;    // pointer to debugMessages object.

function debugPrint( sMsg ) 
{

  dm.innerHTML = dm.innerHTML + sMsg + '<br>';
} // function 

function debugClear()
{

  dm.innerHTML = '';
} // function 


function initSystem()
{

/*
       initialise various global variables 
 */

// debug 
//  dm = document.getElementById( 'debugMessages' );

// plug the handlers into the loop...
document.body.onkeydown = playerControls;
document.body.nkeyup = tidyKeys;

/*
      Get User's preferences from cookies...
*/

// start the "tape"....
//  load( '1' );

// set default volume..
  volume(100);

}// function 


// call the above function when the web page has finished loading.
   document.body.onload=initSystem;


//
// End of swm_webMediaPlayer.js *****
//-----------------------------------------------------------------------------------------------------------------------------