var LastPlayed = {};
LastPlayed.perPage = 5;
LastPlayed.data = {};

LastPlayed.init = function() {
	$('.lastPlayedWidget .moreBtn').click(function(e) {
		e.preventDefault();
		LastPlayed.more($(this).parent());
	});
	$(document).on(socast.player.pollCurrentSong, function(e, data) {
		if (data.status == 'success') {
			var isNew = false;
			if (LastPlayed.data[data.url] == undefined || LastPlayed.data[data.url].length < 1) {
				isNew = true;
			} else if (LastPlayed.data[data.url][0].artist_name != data.song.artist_name || LastPlayed.data[data.url][0].song_name != data.song.song_name) {
				isNew = true;
			}
			if (isNew) {
				$('.lastPlayedWidget').each(function() {
					var dataurl = $(this).attr('data-npurl');
					if (data.url != dataurl) return;
					LastPlayed.addNewSong($(this), data.song);
				});
				if (LastPlayed.data[data.url] == undefined) {
					LastPlayed.data[data.url] = [data.song];
				} else {
					LastPlayed.data[data.url].unshift(data.song);
				}
			}
		}
	});
	
	$('.lastPlayedWidget .moreBtn').hide();
	$('.lastPlayedWidget').each(function() {
		LastPlayed.getList($(this));
		App.registerNowPlayingSource($(this).attr('data-npurl'));
	});
}

LastPlayed.addNewSong = function(obj, song) {
	var html = LastPlayed.renderSong(song);
	obj.children('.songs').prepend(html);
	obj.children('.songs').children('.song').last().remove();
};

LastPlayed.getList = function(obj) {
	var dataurl = obj.attr('data-npurl');
	var listurl = obj.attr('data-listurl');
	var offset = obj.attr('data-offset');
	var visible = parseInt(offset) + LastPlayed.perPage;
	obj.data('visible', visible);
	var params = {};
	params.type = 'get';
	params.url = listurl;
	params.data = {};
	params.dataType = 'html';
	params.timeout = 3000;
	var request = jQuery.ajax(params);
	request.done(function(response) {
		var res = null;
		if (response && response.length > 0) {
			res = App.jsonp_decode(response);
		}
		if (res && res.length > 0) {
			LastPlayed.data[dataurl] = res;
			var html = '';
			var num = Math.min(res.length, visible);
			
			for (var i=0; i< num; i++) {
				html += LastPlayed.renderSong(res[i]);
			}
			obj.children('.songs').html(html);
			if (num < LastPlayed.data[dataurl].length && obj.hasClass('showMore')) {
				obj.children('.moreBtn').show();
			} else {
				obj.children('.moreBtn').hide();
			}
		}
	});
};

LastPlayed.more = function(obj) {
	var dataurl = obj.attr('data-npurl');
	var visible = obj.data('visible');
	var num = Math.min((visible+LastPlayed.perPage), LastPlayed.data[dataurl].length);
	
	var html = '';
	for (var i=visible; i < num; i++) {
		html += LastPlayed.renderSong(LastPlayed.data[dataurl][i]);
	}
	obj.children('.songs').append(html);
	if (num < LastPlayed.data[dataurl].length && obj.hasClass('showMore')) {
		obj.children('.moreBtn').show();
	} else {
		obj.children('.moreBtn').hide();
	}
	obj.data('visible', num);
}

LastPlayed.renderSong = function(song) {
	var img = LastPlayed.fallback;
	var badge = '';
	
	if (song.itunes_url != undefined && song.itunes_img != undefined && song.itunes_url && song.itunes_img) {
		img = song.itunes_img;
		img = img.replace(/http:\/\/is(\d).mzstatic.com/i, 'https://is$1-ssl.mzstatic.com');
		badge = LastPlayed.buyTemplate.replace(/{BUY_URL}/g, song.itunes_url).replace(/{CDN_HOST_MEDIA}/g, CDN_HOST_MEDIA);
	}
	
	return LastPlayed.template.replace(/{IMAGE}/g, img).replace(/{ARTIST}/g, song.artist_name).replace(/{SONG}/g, song.song_name).replace(/{TIME}/g, App.getTimeAgo(song.last_played)).replace(/{BADGE}/g, badge);
};

LastPlayed.template = "<div class='song'><div class='image'><img src='{IMAGE}' alt='' /></div><div class='info'><div class='artist'>{ARTIST}</div><div class='title'>{SONG}</div><div class='time text_light_color'>{TIME}</div>{BADGE}</div></div>";

LastPlayed.buyTemplate = "<div class='badge'><a href='{BUY_URL}' target='_blank'><img src='{CDN_HOST_MEDIA}/images/itunes_badge_small.png' alt='buy on iTunes' /></a></div>";

LastPlayed.fallback = CDN_HOST_MEDIA+'/images/community/SoCast_Avatar-Artist_345x345.jpg';

$(document).ready(function() {
	LastPlayed.init();
});