function getPlaylist(cookieName) {
  var playlist = getCookie(cookieName);
  if (playlist) {
    try {
      playlist = JSON.parse(playlist);
    } 
    catch (e) {
      playlist = new Array();
    } 
  } else playlist = new Array();
  return playlist;
}

function loadPlaylist(clearBefore) {
	var playlist = getPlaylist('playlist');
  //console.info(player);
  clearBefore = clearBefore ||  false;
  if (clearBefore) {
    var i = new Array();
  } else {
    try {
      var i = player.getPlaylist();
    } catch (e) {
      var i = new Array();
    }
  }
	for (var p in playlist) {
		i = i.concat({
			file: playlist[p].file,
			title: playlist[p].title
		});
	}
  if (i.length > 0) {
    player.sendEvent("LOAD", i);
  }
  loadedPlaylist = playlist;
}

function checkPlaylistChange() {
  var newPlaylist = getPlaylist('newPlaylist');
  if (newPlaylist && newPlaylist.length > 0) {
		var playlist = getPlaylist('playlist');

		for (p in newPlaylist) {      
			var i = playlist.length;
      newPlaylist[p].title = html_entity_decode(newPlaylist[p].title);
			playlist[i] = newPlaylist[p]
		}
		
		playlist = JSON.stringify(playlist);    
    setCookie('playlist', playlist, 'this', 7);
		
		newPlaylist = new Array();
		newPlaylist = JSON.stringify(newPlaylist);
		setCookie('newPlaylist', newPlaylist, '/');
		
		loadPlaylist(true);
    if (playerCurrentIndex>-1) player.sendEvent('ITEM', playerCurrentIndex);
  }
  setTimeout("checkPlaylistChange();", 1000);
}

/** ***** **/

function addToPlaylist(file, title, lyrics) {
  var playlist = getPlaylist('newPlaylist');
  
  var i = playlist.length;
  if (i >= 30) {
    alert('The maximum number of entries in the playlist is 30.');
    return false;
  } 
  
  playlist[i] = {};
  playlist[i].file = file;
  playlist[i].title = title;
  playlist[i].lyrics = lyrics;
  
  playlist = JSON.stringify(playlist);
  setCookie('newPlaylist', playlist, '/');
}


/** ***** **/

function playlistMoveDownCurrent() {
  var playlist = getPlaylist('playlist');
  
  if (playlist.length <= 0) return;
  if (playerCurrentIndex < 0) return;
  
  if (playlist.length > playerCurrentIndex+1) {
    var p = playlist[playerCurrentIndex+1];
    playlist[playerCurrentIndex+1] = playlist[playerCurrentIndex];
    playlist[playerCurrentIndex] = p;
  
    playlist = JSON.stringify(playlist);
    setCookie('playlist', playlist, 'this', 7);
    loadPlaylist(true);
  
    lastPlayerIndex = playerCurrentIndex+1;
    player.sendEvent("ITEM", playerCurrentIndex+1);
  }
}

function playlistMoveUpCurrent() {
  var playlist = getPlaylist('playlist');
  
  if (playlist.length <= 0) return;
  if (playerCurrentIndex < 0) return;
  
  if (playerCurrentIndex-1>=0) {
    var p = playlist[playerCurrentIndex-1];
    playlist[playerCurrentIndex-1] = playlist[playerCurrentIndex];
    playlist[playerCurrentIndex] = p;
    
    playlist = JSON.stringify(playlist);
    setCookie('playlist', playlist, 'this', 7);
    loadPlaylist(true);
    
    lastPlayerIndex = playerCurrentIndex-1;
    player.sendEvent("ITEM", playerCurrentIndex-1);
  }
}

function playlistRemoveCurrent() {
  var playlist = getPlaylist('playlist');
  
  if (playlist.length <= 0) return;
  if (playerCurrentIndex < 0) return;
  
  playlist.splice(playerCurrentIndex, 1);
  var c = playlist.length;
  
  playlist = JSON.stringify(playlist);
  setCookie('playlist', playlist, 'this', 7);
  if (c) {
    loadPlaylist(true);
    lastPlayerIndex = -1;
    player.sendEvent("ITEM", playerCurrentIndex);
  } else window.location.reload();
}

function playlistClear() {
  player.sendEvent('STOP');
  
  var playlist = new Array();
  playlist = JSON.stringify(playlist);
  setCookie('playlist', playlist, 'this', 7);
  
  window.location.reload();
}


/** ****** **/

var player;
var playerCurrentIndex = -1;
var playerState = -1;
var loadedPlaylist = new Array();

function playerReady(plrObj) {
  player = document.getElementById(plrObj['id']);
  
  player.addViewListener("ITEM", "veItem");
  player.addViewListener("PLAY", "vePlay");
  player.addModelListener('STATE', 'meState');
	
	setTimeout("loadPlaylist();", 500);
  setTimeout("checkPlaylistChange();", 1000);
}

function veItem(obj) {
  if (playerState != 1) {
    playerState = -1;
    player.sendEvent('PLAY', false);
  }
}

function vePlay(obj) {
  if (typeof obj.state != 'undefined') return;
  playerState = (playerState<1) ? 1 : 0;
}

lastPlayerIndex = -1;
function meState(obj) {
  playerCurrentIndex = player.getConfig().item;
  if (playerState==-1 && obj.newstate!='PAUSED') {
    player.sendEvent('PLAY', false);
  }
  // Load the lyrics
  if (playerCurrentIndex != lastPlayerIndex && loadedPlaylist) {
    lastPlayerIndex = playerCurrentIndex;
    xajax_loadLyricsToPlaylist(loadedPlaylist[playerCurrentIndex].lyrics);
  }
}
