/*
 * EVENTS
 */
String.prototype.pad = function(l, s){
	return (l -= this.length) > 0 ? (s = new Array(Math.ceil(l / s.length) + 1).join(s)).substr(0, s.length) + this + s.substr(0, l - s.length) : this;
};

function Player()
{
	this.handle = '';
	this.item = 0;
	this.songId = 0;
	this.itemPosition = 0;
	this.itemTime = 0;
	this.repeat = true;
	this.shuffle = false;
	this.state = 'IDLE';
	this.sliderSeek = true;
	this.sliderVolume = true;
	this.onPlayEvent = {event:'', value:''};
	this.defaultVolume = 70;

	this.sendEvent = function(type, value) {
		if (this.handle !== undefined) {
			this.handle.sendEvent(type, value);
		} else {
			console.log('this.handle is undefined');
		}
	};

	this.playId = function (id) {
		$('#row' + id).dblclick();
	}

	this.nextSong = function() {
		if (this.shuffle) {
			var id = Math.floor(Math.random() * ($('.fplaylist tr').length - 1));
			$('.fplaylist tr:eq(' + id + ')').dblclick();
		} else {
			var id = $('.dblClicked ~ tr .playstatus[checked|=checked]').attr('value');
			if (!id && this.repeat) {
				var id = $('tr .playstatus[checked|=checked]').attr('value');
			}
			$('#row' + id).dblclick();
		}
	}

	this.prevSong = function() {
		var id = '';
		if (this.shuffle) {
			var id = Math.floor(Math.random() * ($('.fplaylist tr').length - 1));
			$('.fplaylist tr:eq(' + id + ')').dblclick();
		} else {
			$.each($('.dblClicked').prevUntil(), function(key, item) {
				id = $('#' + item.id + ' .playstatus[checked|=checked]').attr('value');
				if (id) {
					return false;
				}
			});
			if (!id) {
				id = $('tr .playstatus[checked|=checked]').last().attr('value');
			}
			$('#row' + id).dblclick();
		}
	}

	this.sec2time = function(seconds) {
		return Math.floor(seconds / 60) + ":" + (seconds % 60).toFixed().pad(2, "0");
	}
};

var player = new Player();

/*
player.addControllerListener("PLAYLIST", "playerPlaylistHandler"); //playlist load complete
*/
function playerEvent_selectedItem(obj) {
	//console.log('selected item: ' + obj.index);
	player.itemPosition = obj.index;
	player.sendEvent('VOLUME', player.defaultVolume);
}
function playerEvent_PLAY(obj) {
	//console.log('playerPlaylistHandler: ' + obj.state);
}
function playerEvent_PREV(obj) {
	debugger;
}
function playerEvent_NEXT(obj) {
	debugger;
}
function playerEvent_STOP(obj) {
	//console.log('playerStopHandler');
	if (player.sliderVolume) {
		$('.slider_time_bar').slider('moveTo', 0);
	}
}
function playerEvent_VOLUME(obj) {
	//console.log('playerVolume: ' + obj.percentage);
	if (player.sliderVolume) {	
		$('.slider_vol_bar').slider('moveTo', obj.percentage);
	}
}
function playerEvent_MUTE(obj) {
	if (obj.state == true) {
		$('.slider_vol_bar').slider('moveTo', 0);
	} else {
		var volume = $('.slider_vol_bar').slider('value');
		if (volume <= 1) {
			volume = player.defaultVolume;
		}
		player.handle.sendEvent('VOLUME', volume);
	}
}
function playerEvent_LOADED(obj) {
	//console.log('playerLOADED LOADED: ' + obj.loaded + ' OFFSET: ' + obj.offset + ' TOTAL: ' + obj.total);
}
function playerEvent_BUFFER(obj) {
	//console.log('playerBUFFER: ' + obj.percentage);
}
function playerEvent_TIME(obj) {
	player.itemTime = {
		position: obj.position,
		duration: obj.duration,
		vidtime: Math.round((obj.position/obj.duration)*100)
	};
	if (player.sliderSeek) {
		$('.slider_time_bar').slider('moveTo', player.itemTime.vidtime);
		$('#bar_fill').css("width",$('#slider_time_handle').css("left"));
	}
	$('#elapsed_time').text(player.sec2time(Math.floor(player.itemTime.position)));
}
function playerEvent_ERROR(obj) {
	console.log('An error occurred, try again (' + obj.message + ')');
	if (obj.message.match('disa')) {
		reportBrokenVideo(player.songId);
	}
}
function playerEvent_STATE(obj) {
	//	console.log('playerSTATE OLD: ' + obj.oldstate + ' NEW: ' + obj.newstate);
	//IDLE/BUFFERING/PLAYING/PAUSED/COMPLETED
	player.state = obj.newstate;
	if (player.state == 'BUFFERING' || player.state == 'PLAYING') {
		loader.show();
		$('#play img').attr('src', './images/pause.png');
		$('#play img').css('margin-left', '10px');
		if (player.onPlayEvent.event != '') {
			player.handle.sendEvent(player.onPlayEvent.event, player.onPlayEvent.value);
			player.onPlayEvent.event = '';
		}
		if (player.state == 'PLAYING') {
			loader.hide();
//			player.handle.sendEvent('MUTE', 'false');
//			player.handle.sendEvent('VOLUME', $('.slider_vol_bar').slider('value'));
/*
			if (video.state == -1) {
				$('#toggle').click();
			}
*/
			$('#elapsed_time').text('0:00');
			$('#remaining_time').text(player.sec2time(Math.floor(player.handle.getPlaylist()[player.itemPosition].duration)));
		} else {
			loader.show();
		}
	} else if (player.state == 'IDLE' || player.state == 'PAUSED' || player.state == 'COMPLETED') {
		if (obj.oldstate == 'BUFFERING' || obj.oldstate == 'PLAYING') {
			if (obj.oldstate == 'BUFFERING') {
				loader.hide();
			}
			$('#play img').attr('src', './images/play.png');
			$('#play img').css('margin-left', '13px');
		}
		if (player.state == 'COMPLETED') {
			player.nextSong();
		}
	}
}

/*
 * Player init
 */
function playerReadyCallback(obj) {
	player.handle = document.getElementById('jwplay1');
//	playerHandle = player.handle;
	player.handle.addControllerListener("ITEM", "playerEvent_selectedItem"); //current play item
/*
	player.addControllerListener("PLAYLIST", "playerPlaylistHandler"); //playlist load complete
*/
	player.handle.addControllerListener("PLAY", "playerEvent_PLAY"); //stop handler
	player.handle.addControllerListener("PREV", "playerEvent_PREV"); //stop handler
	player.handle.addControllerListener("NEXT", "playerEvent_NEXT"); //stop handler
	player.handle.addControllerListener("STOP", "playerEvent_STOP"); //stop handler
	player.handle.addControllerListener("VOLUME", "playerEvent_VOLUME");
	player.handle.addControllerListener("MUTE", "playerEvent_MUTE");
	player.handle.addModelListener("LOADED", "playerEvent_LOADED");
	player.handle.addModelListener("BUFFER", "playerEvent_BUFFER");
	player.handle.addModelListener("TIME", "playerEvent_TIME");
	player.handle.addModelListener("ERROR", "playerEvent_ERROR"); //error handler
	player.handle.addModelListener("STATE", "playerEvent_STATE"); //state handler
	player.handle.sendEvent('VOLUME', 'player.defaultVolume');
	updateSize();
	if($.cookie("videoState")==1){
		video.state=-1;
		video.show();
	}
	else{
		video.state=1;
		video.hide();
	}
	display.load();
	display.start();
};

/*
	Old player settings
*/
function updateHTML(elmId, value) {
  document.getElementById(elmId).innerHTML = value;
}


function onYouTubePlayerReady(playerId) {
  ytplayer = document.getElementById("yplayer");
  setInterval(updateytplayerInfo, 250);
  updateytplayerInfo();
  ytplayer.addEventListener("onStateChange", "onytplayerStateChange");
  ytplayer.addEventListener("onError", "onPlayerError");
	//console.log("Event hooked");
}

function onytplayerStateChange(newState) {
	currentTime = document.getElementById('yplayer').getCurrentTime();
	totalTime = document.getElementById('yplayer').getDuration();
	difference = totalTime - currentTime;
	if (newState == 0) {
		if (difference < 2 && totalTime > 0) {
			Player.next();
			// disabled code
			$.get('/load-song.php?loadnext', function(data){
				video = data.split('?')[1].split('&')[0].split('v=')[1];
				document.getElementById('yplayer').loadVideoById(video);	
			});
			$.get("/load-song.php?details=true&loadnext=true", function(data){
				document.getElementById('tracktitle').innerHTML = data;
				document.title = data + ' on moof.com';
			});	
			// disabled code
			//$('.slider_time_bar').slider( 'values' , index ,0 )
			alert('test1');
		}
	}else if (newState == 1 && Math.round(totalTime) == 0) {
		Player.next();
		// disabled code
		$.get('/load-song.php?loadnext', function(data){
			video = data.split('?')[1].split('&')[0].split('v=')[1];
			document.getElementById('yplayer').loadVideoById(video);	
		});
		$.get("/load-song.php?details=true&loadnext=true", function(data){
			document.getElementById('tracktitle').innerHTML = data;
			document.title = data + ' on moof.com';
		});	
		// disabled code
		//$('.slider_time_bar').slider( 'values' , index , 0 )
		alert('test2');
	}
	//console.log("Play State: Loading from onytplayerStateChange." + newState + " - " + difference + " - " + currentTime + " - " + totalTime );
}

function getCurrentTime() {
	ytplayer = document.getElementById("yplayer");	
	if (ytplayer) {
		return ytplayer.getCurrentTime();
	}
}

// ##### MAIN PLAYER FUNCTIONS #####
var more_results = false;
var is_search = false;
function load_results () 
{
	// ##### CHECK IF WE HAVE MORE RESULTS #####
	if (more_results == false)
	{
		return false;
	}
	
	// ##### SET MORE RESULTS TO FALSE UNTIL WE KNOW WE HAVE MORE #####
	more_results = false;
	$.getJSON('./' + list_type + '/' + list_id + '/' + list_page + '/' + list_sort + '/' + list_direction, function(data)
	{
		// ##### INCREASE PAGE NUMBER #####
		++list_page;
		
		$.each(data, function (i, item)
		{
			// ##### ADD DATA #####
			$("#playlist").append (item);
			more_results = (i == 79) ? true : false;
		});	
		settings();
	});
}

function settings ()
{
	$('#playlist tr').each(function(index)
	{
		$(this).hover(function() {
			$('td.settings a', this).show().click(function ()
			{
				var position = $(this).position();
				$(this).siblings('.submenu').css(
					{
						'top' : (position.top - 7),
						'left' : (position.left - $(this).siblings('.submenu').width() + $(this).width() + 4)
					}
				).slideDown('slow').bind('mouseleave', function()
				{
					$(this).slideUp();
				});
			});
		}, function () {
			$('td.settings a:first', this).hide ();
		});
	});
}

function sort_list (sort_by)
{
	$('html, body').animate({scrollTop:0}, 'slow');
	if (sort_by == list_sort)
	{
		list_direction = (list_direction == 'DESC') ? 'ASC' : 'DESC';
	}
	else
	{
		list_direction = 'DESC';
	}
	list_sort = sort_by;
	list_page = 0;
	$('#playlist').find('tr').remove();
	more_results = true;
	load_results(); 
}