﻿// BE SURE TO SEARCH THIS FILE FOR "NOTE" TO SEE PLACES WHERE I HAVE
// HARD-CODED THINGS YOU WILL HAVE TO CHANGE IN A PRODUCTION VERSION

// BEGIN GENERAL FUNCTIONS ----------------------------

function alertcheck() {
  alert('this called');
}

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
	oldonload();
      }
      func();
    }
  }
}

function parse_json(json) {
  if (json == null || json == undefined || json == '') return '';

  var obj = eval('(' + json + ')');
  return obj;
}

function getElementMouseX(e, element) {
  if (!e) var e = window.event;

  var mouse_x = 0;
  if (e.pageX) {
    mouse_x = e.pageX;
  } else if (e.clientX) {
    mouse_x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
  }

  var element_mouse_x = 0;
  var element_x = 0;

  if (e.offsetX != undefined) {
    element_mouse_x = e.offsetX;
  } else {
    var obj = element;
    if (obj.offsetParent) {
      do {
	element_x += obj.offsetLeft;
      } while (obj = obj.offsetParent);
    }

    element_mouse_x = mouse_x - element_x;
  }

  return element_mouse_x;
}

// END GENERAL FUNCTIONS ----------------------------



// BEGIN AUDIO PLAYER FUNCTIONS ----------------------------

var prepped_tracks = [];
prepped_tracks['prerun'] = [];
prepped_tracks['success'] = [];
prepped_tracks['success']['AudioPlayer'] = [];
prepped_tracks['failure'] = [];
prepped_tracks['failure']['AudioPlayer'] = [];
var current_track_id;
var AudioPlayer; // needs to be defined on the page where used
var progress_bar_width = 160;
var progress_bar_offset = 1;
var current_track_duration = 0;
var player_mini_timeout;
var audio_player_loaded = false;

function formatTime(total_seconds) {
  total_seconds = Math.max(0, Math.round(total_seconds * 1));

  var seconds = total_seconds % 60;
  var minutes = Math.floor(total_seconds / 60) % 60;
  var hours = Math.floor(total_seconds / (60*60));

  if (seconds < 10) seconds = '0' + seconds;
  if (hours > 0 && minutes < 10) minutes = '0' + minutes;

  var formatted_time = '';
  if (hours > 0) formatted_time = formatted_time + hours + ':';
  formatted_time = formatted_time + minutes + ':' + seconds;

  return formatted_time;
}

function prepareTrackForPlaylist(track_id) {
  prepped_tracks['prerun'].push(track_id);
}

function addTracksToPlaylist() { // should only be called after AudioPlayer is initialized
  for (var i in prepped_tracks['prerun']) {
    if (prepped_tracks['success']['AudioPlayer'][prepped_tracks['prerun'][i]] != true) {
      //if (AudioPlayer != undefined && typeof AudioPlayer.addToPlaylist == 'function') {
	AudioPlayer.addToPlaylist(prepped_tracks['prerun'][i]);
      //} else {
	//setTimeout(function(){addTracksToPlaylist();}, 500);
      //}
    }
  }
}

function playSongsFromTrackId(track_id) {
  /*
    NOTE: Normally AudioPlayer.swf would pass a track id to the project engine file.
    However, in this case (since this is a standalone project -- no PHP or ASP) I have
    just created a file called project_engine.html that just displays the streaming URL
    for a single track.  Since it uses EdgeCast, I included a token that will last until
    December 10, 2008.
  */
  playerStateChanged('opening', track_id);
  if (current_track_id != undefined) playerStateChanged('stopped', current_track_id);

  if (!audio_player_loaded) {
    setTimeout(function(){playSongsFromTrackId(track_id);}, 1000);
    return;
  }

  if (prepped_tracks['success']['AudioPlayer'][track_id] == true) {
    current_track_id = track_id;
    if (AudioPlayer != undefined) AudioPlayer.playSongsFromTrackId(track_id);
  } else {
    if (prepped_tracks['failure']['AudioPlayer'][track_id] == true) {
      alert(LANGUAGE.ERROR_LOADING_TRACK);
      playerStateChanged('error', track_id);
    } else {
      setTimeout(function(){playSongsFromTrackId(track_id);}, 1000); // track url may not have been loaded yet, so wait a second and try again
    }
  }
}

function onTrackAddToPlaylistFailure(player_id, track_id) {
  prepped_tracks['failure'][player_id][track_id] = true;
}

function onTrackAddToPlaylistSuccess(player_id, track_id) {
  prepped_tracks['success'][player_id][track_id] = true;
}

//Edited for Naxos.com
function onTrackPlay(track_id) {
  current_track_id = track_id;
  //playerStateChanged('playing', track_id);

  showPlayerMini(track_id, true);
}

function onTrackStop(track_id) {
  playerStateChanged('stopped', track_id);

  hidePlayerMini(track_id, false);
}

function onTrackResume(player_id, track_id) {
  //
}

function onTrackPause(player_id, track_id) {
  playerStateChanged('paused', track_id);
}

function onTrackBuffering(player_id, track_id) {
  playerStateChanged('buffering', track_id);
}

function onTrackFinishedBuffering(player_id, track_id) {
  playerStateChanged('playing', track_id);
}

function onTrackError(player_id, track_id) {
  playerStateChanged('stopped', track_id);
  alert(LANGUAGE.ERROR_LOADING_TRACK);
}

//Edited for Naxos.com
function updateTrackDuration(track_id, duration) {
  //alert(duration);

  current_track_duration = duration;
  document.getElementById('player_mini_time_total_' + track_id).innerHTML = formatTime(duration);
}
//Edited for Naxos.com
function updateTrackTime(track_id, track_time) {
  document.getElementById('player_mini_time_' + track_id).innerHTML = formatTime(track_time);

  var progress_bar_position = track_time*1 * progress_bar_width/current_track_duration;
  progress_bar_position = Math.round(Math.min(Math.max(0, progress_bar_position - progress_bar_offset), progress_bar_width - progress_bar_offset));
  document.getElementById('player_mini_progress_bar_' + track_id).style.width = progress_bar_position + 'px';
}

function playerStateChanged(state, track_id) {
  var image_url;
  var callback_function;
  var mouseover_function;
  var mouseout_function;

  var AudioPlayerObject = AudioPlayer;

  // Opening, Buffering, Playing, Paused, Stopped, Error
  switch (state.toLowerCase()) {
    case 'opening':
    case 'buffering':
      image_url = TEMPLATE_URL + 'images/icons/16x16/waiting.gif';
      callback_function = function(){return false;};
      break;
    case 'playing':
      image_url = TEMPLATE_URL + 'images/icons/16x16/control_pause.gif';
      callback_function = function(){AudioPlayerObject.pauseSong(); return false;};
      mouseover_function = function(){showPlayerMini(track_id, false);};
      mouseout_function = function(){hidePlayerMini(track_id, true);};
      break;
    case 'error':
    case 'stopped':
      image_url = TEMPLATE_URL + 'images/icons/16x16/sound_clip.gif';
      callback_function = function(){playSongsFromTrackId(track_id, use_secondary_player); return false;};
      mouseover_function = function(){return false;};
      mouseout_function = function(){return false;};
      break;
    case 'paused':
      image_url = TEMPLATE_URL + 'images/icons/16x16/control_play.gif';
      callback_function = function(){AudioPlayerObject.resumeSong(track_id); return false;};
      break;
  }

  var audio_button_names = ['audio_button_', 'project_audio_button_', 'title_audio_button_'];
  var obj;
  for (var ii in audio_button_names) {
    obj = document.getElementById(audio_button_names[ii] + track_id);
    if (obj != null && obj.src != image_url) {
      obj.src = image_url;
      obj.onclick = callback_function;
      if (mouseover_function != undefined) {
	obj.onmouseover = mouseover_function;
      }
      if (mouseout_function != undefined) {
	obj.onmouseout = mouseout_function;
      }
    }
  }
}

function showPlayerMini(track_id, use_timeout) {
  var obj = document.getElementById('player_mini_wrapper_' + track_id);
  if (!obj) return;

  obj.style.display = 'block';

  clearTimeout(player_mini_timeout);

  if (use_timeout) {
    player_mini_timeout = setTimeout(function(){hidePlayerMini(track_id, false);}, 2000);

    obj.onmouseover = function(e) {
      clearTimeout(player_mini_timeout);
    };
  }

  obj.onmouseover = function(e){
	AudioPlayer.infocus(true);
  }

  obj.onmouseout = function(e) {
    if (!e) var e = window.event;
    var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
    while (reltg != obj && reltg.nodeName != 'BODY') {
      reltg = reltg.parentNode;
      if (reltg == obj) return;
    }
    AudioPlayer.infocus(false);
    hidePlayerMini(track_id, true);
  }


  var progress_bar = document.getElementById('player_mini_progress_bar_' + track_id).parentNode;

  progress_bar.onclick = function(e) {
    var element_mouse_x = getElementMouseX(e, progress_bar);

    var element_width = progress_bar.offsetWidth;
    var seek_to = Math.max(0, Math.min(current_track_duration - 1, Math.round((element_mouse_x / element_width) * current_track_duration)));
    //alert(track_id);
    AudioPlayer.playSeek(seek_to); // player mini never shows up in the mini playlist
  }

  progress_bar.onmousemove = function(e) {
    var element_mouse_x = getElementMouseX(e, progress_bar);

    var element_width = progress_bar.offsetWidth;
    var seek_to = Math.max(0, Math.min(current_track_duration - 1, Math.round((element_mouse_x / element_width) * current_track_duration)));

    document.getElementById('player_mini_time_mouse_' + track_id).innerHTML = formatTime(seek_to);
  }

  progress_bar.onmouseover = function(e) {
    document.getElementById('player_mini_time_mouse_' + track_id).style.display = 'block';
  }

  progress_bar.onmouseout = function(e) {
    document.getElementById('player_mini_time_mouse_' + track_id).style.display = 'none';
  }
}

function hidePlayerMini(track_id, use_timeout) {
  var obj = document.getElementById('player_mini_wrapper_' + track_id);
  if (!obj) return;

  clearTimeout(player_mini_timeout);

  if (use_timeout) {
    player_mini_timeout = setTimeout(function(){hidePlayerMini(track_id, false);}, 2000);

    obj.onmouseover = function(e) {
      clearTimeout(player_mini_timeout);
    };


  } else {
    obj.style.display = 'none';

    var progress_bar = document.getElementById('player_mini_progress_bar_' + track_id).parentNode;
    progress_bar.onmousemove = null;
  }
}



function startAudioPlayerSetup() {
  /*
  var data = '';
  data += '&get_fms_url=1';
  */
  //ajax_post(PROJECT_ENGINE_URL, data, initAudioPlayer);

  /*
    NOTE: I've commented out the line above and put in the line below so the "project engine"
    file does not need to be dynamic.  Normally the project engine file would be a dynamic script
    PHP, ASP, etc that would output the FMS connection URL and the URL for streaming songs.  The URL
    output should be in JSON format.
  */

  initAudioPlayer();
}

//Edited for Naxos.com
function initAudioPlayer() {
  AudioPlayer = document.getElementById('AudioPlayer');
  //AudioPlayer = document.getElementById('audioPlayer' + p_PreviewIndex);
  //  var aplayer = 'audioplayer' + p_PreviewIndex;

  //alert(p_PreviewIndex);

  /*
  if (AudioPlayer == undefined || typeof AudioPlayer.init_player != 'function') {
    // we need to give the Flash player some time to load
    setTimeout(function(){initAudioPlayer();}, 500);
    return;
  }

  fms_origin_url = parse_json(fms_origin_url);
  addTracksToPlaylist(true);
  audio_player_loaded = true;
  */

  AudioPlayer.init_player('AudioPlayer');
  //AudioPlayer.init_player('audioplayer' + p_PreviewIndex);
}

//addLoadEvent(startAudioPlayerSetup);

// END AUDIO PLAYER FUNCTIONS ----------------------------
