/*---------------
 * jQuery Last.Fm Plugin by Engage Interactive
 * Examples and documentation at: http://labs.engageinteractive.co.uk/lastfm/
 * Copyright (c) 2009 Engage Interactive
 * Version: 1.0 (10-JUN-2009)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 * Requires: jQuery v1.3 or later
---------------*/
var json_data = '';

(function($){
	$.fn.lastFM = function(options) {
		
		var defaults = {
			number: 10,
			username: 'willblackmore',
			apikey: '96e0589327a3f120074f74dbc8ec6443',
			artSize: 'medium',
			noart: 'images/noartwork.gif',
			template: 'lfm_temp',
			onComplete: function(){}
		},
		settings = $.extend({}, defaults, options);

		var lastUrl = 'http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user='+settings.username+'&api_key='+settings.apikey+'&limit='+settings.number+'&format=json&callback=?';
		var $this = $(this);
		var $template = $('#'+settings.template);
		$template.hide();
		var container = $template.html();
		if(settings.artSize == 'small'){imgSize = 0}
		if(settings.artSize == 'medium'){imgSize = 1}
		if(settings.artSize == 'large'){imgSize = 2}

		this.each(function() {
			
			$.getJSON(lastUrl, function(data){ 
				var newData = false;
				if (json_data == '')
				{
					json_data = data;
					newData = true;
				}
				if (data["recenttracks"]["track"][0].image[2]['#text'] != json_data["recenttracks"]["track"][0].image[2]['#text'] || data["recenttracks"]["track"][0]["album"]["#text"] != json_data["recenttracks"]["track"][0]["album"]["#text"] || data["recenttracks"]["track"][0]["name"] != json_data["recenttracks"]["track"][0]["name"] || newData)
				{
					json_data = data;
					$this.fadeTo('fast', 0.01, function(){
						$this.children().remove();
						$.each(data.recenttracks.track, function(i, item){
							if(item.image[1]['#text'] == ''){
								art = settings.noart;
								art2 = settings.noart;
							}else{
								art = stripslashes(item.image[imgSize]['#text']);
								art2 = stripslashes(item.image[2]['#text']);
							}
							url = stripslashes(item.url);
							song = item.name;
							artist = item.artist['#text'];
							album = item.album['#text'];
							if (item["@attr"])
							{
								if(item["@attr"].nowplaying == "true"){
									nowplaying = true;
								} else {
									nowplaying = false;
									date = item.date["#text"];
								}
							}
							else
							{
								nowplaying = false;
								date = item.date["#text"];
							}
							$this.append(container);
							var $current = $this.children(':eq('+i+')');
							$current.find('[class=lfm_song]').append(song);
							$current.find('[class=lfm_artist]').append(artist);
							$current.find('[class=lfm_album]').append(album);
							$current.find('[class=lfm_art]').attr('title',art2).append("<img src='"+art+"'alt='Artwork for "+album+"' class='lfm_artwork' />");
							$current.find('a').attr('href', url).attr('title', 'Listen to '+song+' on Last.FM').attr('target', '_blank');
							if (nowplaying)
							{
								$current.find('[class=played]').append('Listening now');
								$current.find('[class=lfm_art]').addClass("bouncing");
								
							}
							else
							{
								$current.find('[class=played]').append(date);
							}
							
							//callback
							if(i==(settings.number-1)){
								settings.onComplete.call(this);
							}
						});
						$this.fadeTo('fast',1.0);
					});
				}
			});
		});
	};
	
	//Clean up the URL's
	function stripslashes( str ) {	 
		return (str+'').replace(/\0/g, '0').replace(/\\([\\'"])/g, '$1');
	}
})(jQuery);
