/**
* Hooks into flash mp3 player and jQuery PieceTree plugin for canvas updates
* Cf. http://developer.longtailvideo.com/trac/wiki/FlashAPI
*/

// global because it sits outside the piece tree structure. rethink this maybe.
// other stuff is global because it uses callbacks from SWF
var $now_playing_li = null;

/**
* Start swf player (or not) and stop old one. Hook back into PieceTree for DOM/canvas manipulation.
*/
function play_piece($li) {
  var $player_holster = $li.find('div.player');
  var player_swf = player_swf_from_li($li);
  var was_showing = ($player_holster.css('height') == PLAYER_OFFSET_HEIGHT);
  
  // stop previous player if there was one
  if ($now_playing_li) {
    $now_playing_li.trigger('hide_player');
    $now_playing_li.find('div.player').empty(); // have to kill the thing for FF/Win
  }
  
  // start this player--if it wasn't already showing
  if (!was_showing) {
    var player_holster_id = $player_holster.get(0).id;
    var file_url = eval(player_holster_id + '_url');
    $player_holster.flash({
      swf: '/embed/player.swf',
      height: '32',
      width: '408',
      hasVersion: '8',
      javascriptid: player_holster_id + '_swf',
      flashvars: {
        file: file_url,
        autostart: 'true'
    }});
    $li.trigger('show_player');
    $now_playing_li = $li;
  } else {
    $now_playing_li = null;
  }
}

/**
* imitate syntax of 'jQuery SWFObject Plugin' (which is sadly unusable due to SWFObject 2.0 performance problems)
*/
jQuery.fn.flash = function(params) {
  return this.each(function() {
    var so = new SWFObject(params.swf, params.javascriptid, params.width, params.height, params.hasVersion);
    
    // NO IDEA why this doesn't work...
    // jQuery.each(params.flashvars, function(index) {
    //   so.addParam(index, params.flashvars[index]);
    // });
    
    so.addVariable('file', params.flashvars.file);
    so.addVariable('skin', '/embed/skins/stylish.swf');
    so.addVariable('backcolor', 'F9F9F9');
    so.addVariable('frontcolor', '333333');
    so.addVariable('lightcolor', 'E33C6F');
    so.addParam('allowscriptaccess', 'always');
    so.addParam('allowfullscreen', 'false');
    so.addVariable('height', params.width);
  	so.addVariable('width', params.height);
  	so.addVariable('searchbar', 'false');
  	so.addVariable('javascriptid', params.javascriptid);
    so.addVariable('enablejs', 'true');
    so.addVariable('autostart', params.flashvars.autostart);
    
    so.write(this.id);
  });
};

/**
* Callbacks from jw player (must be global)
*/
function playerReady(obj) {
  player_swf_from_id(obj.id).addModelListener("STATE", "player_state_update");
};
function player_state_update(obj) {
  if (obj.newstate == "COMPLETED") {
    var $lis = $('ul.piecetree li');
    var current_player_index = $lis.index($('#'+obj.id).parents('li')); // note: GLOBAL index! not by tree!
    var $next_li = $lis.eq(current_player_index+1);
    if ($next_li) play_piece($next_li);
  }
};

// utility. must get handle by ID even if we have a jQuery one...!
function player_swf_from_id(id) {
  return $('#'+id).get(0);
}
function player_swf_from_li($li) {
  return player_swf_from_id($li.find('div.player').get(0).id + "_swf");
}
