/*
 *  main()
 */
jQuery(document).ready(function()
{
  jQuery.get(playlistURL, function(data)
  { // wait until playlist is loaded
    playlistXML = data.childNodes[0];
    createPlayer();
  });
});

/*
 *  Globals / config
 */
var swfDir = '/video/noit-oscon-demo/flash/',
    playlistURL = swfDir + 'playlist.xml',
    configURL = swfDir + 'config.xml',
    playerID = 'videoad',
    playerCFG = {
      id: playerID,
      containerID: 'video_player',
      swf: swfDir + 'mediaplayer.swf',
      flashVer: "8.0.0",
      xiSwfURL: undefined, // Express Install SWF URL
      width: 740,
      height: 615,
      flashvars: {
	file: playlistURL,
	config: configURL,
	javascriptid: playerID,
	enablejs: true
      },
      params: {
	allowscriptaccess: 'always',
	allowfullscreen: true,
	wmode: 'transparent'
      },
      attributes: {
	id: playerID,
	name: playerID
      }
    },
    current = {ndx: 0},
    queryParams = getQueryParams(),
    player; // JW Player instance

/*
 * Getters / Setters
 */
function getTrack(ndx){ return playlistXML.getElementsByTagName('track')[ndx]; }
function getCurrentTrack(){ return current.track; }
function setCurrentTrack(ndx){
  return current.track = getTrack(setCurrentNdx(ndx || getCurrentNdx()));
}

function getCurrentNdx(){ return current.ndx; }
function setCurrentNdx(ndx){ return current.ndx = ndx; }

function getNdxByVideoID(videoID)
{
  var ndx;
  jQuery(playlistXML).children('tracklist').children('track').each(function(i,el)
  {
    if (jQuery(el).children('video_id').text() == videoID){
      ndx = i;      // remember ndx
      return false; // break out of jQuery().each
    }
  }); // eo each
  return ndx;
}

// JW FLV Player requires getUpdate() be avaliable as a global function
function getUpdate(key, v1, v2, pid)
{
  v2 = (v2 ? Math.round(v2) : v2);

  switch (key)
  {
  case 'time':
    var total = v1 + v2;
    JW_FLV.setStatus(pid, 'elapsed', v1);
    JW_FLV.setStatus(pid, 'remaining', v2);
    JW_FLV.setStatus(pid, 'total', total);
    JW_FLV.setStatus(pid, 'percent', (v1/total)*100);
    break;

  case 'size':
    JW_FLV.setStatus(pid, 'width', v1);
    JW_FLV.setStatus(pid, 'height', v2);
    break;

  case 'item':
    if (v1 != getCurrentNdx()){
      itemChanged(getCurrentNdx(), setCurrentNdx(v1));
    }
    JW_FLV.setStatus(pid, key, v1);
    break;

  case 'volume':
  case 'state':
  case 'load':
    JW_FLV.setStatus(pid, key, v1);
    break;

  case 'click':
    clicked(v1);
    break;

  default:
    //alert('Need a case to handle '+ key +' updates');
  }

};

function itemChanged(oldNdx, newNdx)
{
  clicked(newNdx);
}

function playerLoaded()
{
  player = new JW_FLV.player(playerCFG.id);
  if (queryParams.play){
    player.play(getNdxByVideoID(queryParams.play));
  }
}

function updateVideoDescription(ndx)
{
  var track = jQuery(getCurrentTrack());

  if (track){
    var desc  = track.find('description'),
        title = track.find('title');

    if (desc && title){
      jQuery('#current_video_title').html(title.text());
      jQuery('#current_video_description').html(desc.text());
    } else {
      // throw('Missing title ('+title+') or description ('+desc+')');
    }
  } else {
    // throw('Cannot find track '+ndx+' in '+playlistURL);
  }
}

function clicked(ndx)
{
  ndx = ndx || getCurrentNdx();
  setCurrentTrack(ndx);
  updateVideoDescription(ndx);
}

function createPlayer()
{
  var cfg = playerCFG;
  swfobject.embedSWF(cfg.swf, cfg.containerID, cfg.width, cfg.height, cfg.flashVer, cfg.xiSwfURL, cfg.flashvars, cfg.params, cfg.attributes);
  setTimeout(playerLoaded, 500);
}

function getQueryParams()
{
  var params = {},
      pairs = document.location.search.replace(/^\?/,'').split('&');

  for (var i=0, l=pairs.length; i<l; i++){
    var pair = pairs[i].split('=');
    params[pair[0]] = pair[1];
  }

  return params;
}
