/*---------------
 * 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
---------------*/

(function($) {
    $.fn.lastFM = function(options) {

        var defaults = {
            number: 10,
            username: 'benladusans',
            apikey: '58b56d3418ee8193e63655cf80bfc417',
            artSize: 'large',
            noart: 'http://img.anti-theatre.com/no_art.jpg',
            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 container = $this.html();

        $this.children(':first').remove();

        if (settings.artSize == 'small') { imgSize = 0 }
        if (settings.artSize == 'medium') { imgSize = 1 }
        if (settings.artSize == 'large') { imgSize = 2 }

        var itemsAdded = 0;

        this.each(function() {

            $.getJSON(lastUrl, function(data) {
                if (data.recenttracks.track.length > 0) {
                    $.each(data.recenttracks.track, function(i, item) {

                        if (settings.number == 1 && itemsAdded < 1 || settings.number > 1) {

                            if (item.image[1]['#text'] == '') {
                                art = settings.noart;
                            } else {
                                art = stripslashes(item.image[imgSize]['#text']);
                            }

                            url = stripslashes(item.url);
                            song = item.name;
                            artist = item.artist['#text'];
                            album = item.album['#text'];
                            //nowPlaying = item.attr("nowplaying");

                            $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] a').append("<img src='" + art + "' alt='Artwork for " + album + "' width='94' height='94' />");
                            $current.find('a').attr('href', url).attr('title', 'Listen to ' + song + ' on Last.FM').attr('target', '_blank');

                            //callback
                            if (i == (settings.number - 1)) {
                                settings.onComplete.call(this);
                            }
                            itemsAdded++;
                        }
                    });
                }
                else if (data.recenttracks.track != null && data.recenttracks.track.name != '') {
                    if (data.recenttracks.track.image[1]['#text'] == '') {
                        art = settings.noart;
                    } else {
                        art = stripslashes(data.recenttracks.track.image[imgSize]['#text']);
                    }

                    url = stripslashes(data.recenttracks.track.url);
                    song = data.recenttracks.track.name;
                    artist = data.recenttracks.track.artist['#text'];
                    album = data.recenttracks.track.album['#text'];
                    
                     $this.append(container);

                    var $current = $this.children(':eq(' + 0 + ')');

                    $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] a').append("<img src='" + art + "' alt='Artwork for " + album + "' width='94' height='94' />");
                    $current.find('a').attr('href', url).attr('title', 'Listen to ' + song + ' on Last.FM').attr('target', '_blank');
                }
            });
        });
    };

    //Clean up the URL's
    function stripslashes(str) {
        return (str + '').replace(/\0/g, '0').replace(/\\([\\'"])/g, '$1');
    }

})(jQuery);
