CmdUtils.CreateCommand({
  author: {name: "Steven Scott", email: "progoth@gmail.com"},
  homepage: "http://progoth.com/ubiquity-lastfm/",
  name: ["last.fm"],
  icon: "http://cdn.last.fm/flatness/nice_favicon.png",
  description: "Searches last.fm artists",
  arguments: [ {role: 'object', nountype: noun_arb_text, label: 'artist name'} ],
  preview: function(pBlock, args) {
    var searchtext = args.object.text;
    var help = {query: ''};
    if (searchtext == "")
        help.query = _("the given input or selected text");
    else
        help.query = searchtext;
    pBlock.innerHTML = _('Searches last.fm artists for ${query}', help);

    if (args.object.text.length < 1)
        return;

    if (currentTimer != '')
        Utils.clearTimeout(currentTimer);
    currentTimer = Utils.setTimeout(get_artists, 500, pBlock, searchtext);
  },
  execute: function( args ) {
    var url = "http://last.fm/music/" + args.object.text;
    Utils.openUrlInBrowser(url);
  }
});

CmdUtils.CreateCommand({
  author: {name: 'Steven Scott', email: 'progoth@gmail.com'},
  homepage: 'http://progoth.com/ubiquity-lastfm/',
  name: ['last.fm albums'],
  icon: 'http://cdn.last.fm/flatness/nice_favicon.png',
  description: 'Searches last.fm albums',
  arguments: [ {role: 'object', nountype: noun_arb_text, label: 'album name'} ],
  preview: function(pBlock, args) {
    var searchtext = args.object.text;
    var help = {query: ''};
    if (searchtext == '')
        help.query = _('the given input or selected text');
    else
        help.query = searchtext;
    pBlock.innerHTML = _('Searches last.fm albums for ${query}', help);

    if (args.object.text.length < 1)
        return;

    if (currentTimer != '')
        Utils.clearTimeout(currentTimer);
    currentTimer = Utils.setTimeout(get_albums, 500, pBlock, searchtext);
  },
  execute: function(args){
    Utils.openUrlInBrowser('http://last.fm/search?m=albums&q=' + args.object.text);
  }
});

var MAX_RESULTS = 5;
var apikey = "33d846a20a414dbfaa9954b1674e783f";
var searchUrl = "http://ws.audioscrobbler.com/2.0/";
var currentTimer = '';

var previewTemplate = //"Found ${numitems} artists on last.fm matching <b>${query}</b>" +
	  "{for item in items}" +
	  "<div style=\"clear: both; padding: 10px 0px;\">" +
	  "<a href=\"${item.url}\">" +
	  "<img src=\"${item.img}\" style=\"float: left; margin-right: 10px;\"/>" +
	  "${item.name}" +
	  "</a>" +
	  "${item.summary}" +
	  "</div>" +
	  "{/for}";

function get_larger_first_res(pBlock, art_info)
{
	var items = [];
	jQuery.ajax({
		type: "GET",
		url: searchUrl,
		data: {api_key: apikey, method: "artist.getinfo", artist: art_info.find("name").text()},
		dataType: "xml",
		success: function(detailResult){
			details = jQuery(detailResult);
			items.push({
				name: "<span style=\"font-size:larger;font-weight:bold;\">"+details.find("name:first").text() +"</span>",
				url: details.find("url:first").text(),
				img: details.find("image[size=extralarge]:first").text(),
				summary: "<br/>" + details.find("bio summary").text()
			});
			var previewData = {
				items: items
			};
			var current = jQuery(pBlock);
			current.find("div:first").replaceWith(CmdUtils.renderTemplate(previewTemplate, previewData));
		}
	});
}

function get_artists(pBlock, searchtext)
{
	var items = [];
	jQuery.ajax({
		type: "GET",
		url: searchUrl,
		data: {api_key: apikey, method: "artist.search", artist: searchtext, limit: MAX_RESULTS},
		dataType: "xml",
		success: function(result){
			result = jQuery(result);
			if( result.find("artist").length < 1 )
			{
				pBlock.innerHTML =
					_('No results found for <b>${query}</b>',
					{query: searchtext});
				return;
			}
			result.find("artist").slice(0,MAX_RESULTS).each(function(){
				var artist = jQuery(this);
				items.push(get_artist_data(artist));
			});
			var previewData = {
				items: items
			};
			pBlock.innerHTML = CmdUtils.renderTemplate(previewTemplate, previewData);
			get_larger_first_res(pBlock, jQuery(result.find("artist").get(0)));
		}
	});
}

function get_artist_data(artist)
{
	return {
		name: artist.find("name").text(),
		url: "http://" + artist.find("url").text(),
		img: artist.find("image[size=medium]").text(),
		summary: ""
	};
}

var albPreviewTemplate = //"Found ${numitems} artists on last.fm matching <b>${query}</b>" +
	  "{for item in items}" +
	  "<div style=\"clear: both; padding: 10px 0px;\">" +
	  "<a href=\"${item.url}\">" +
	  "<img src=\"${item.img}\" style=\"float: left; margin-right: 10px;\"/>" +
	  "${item.name} by ${item.artist}" +
	  "</a>" +
	  "</div>" +
	  "{/for}";

function get_larger_first_alb_res(pBlock, alb_info)
{
	var items = [];
	jQuery.ajax({
		type: "GET",
		url: searchUrl,
		data: {api_key: apikey, method: "album.getInfo", artist: alb_info.find('artist').text(), album: alb_info.find("name").text()},
		dataType: "xml",
		success: function(detailResult){
			details = jQuery(detailResult);
			items.push({
				name: "<span style=\"font-size:larger;font-weight:bold;\">"+details.find("name:first").text() +"</span>",
				artist: '<span style="font-size:larger;font-weight:bold;">'+details.find('artist:first').text() +'</span>',
				url: details.find("url:first").text(),
				img: details.find("image[size=extralarge]:first").text(),
			});
			var previewData = {
				items: items
			};
			var current = jQuery(pBlock);
			current.find("div:first").replaceWith(CmdUtils.renderTemplate(albPreviewTemplate, previewData));
		}
	});
}

function get_albums(pBlock, searchtext)
{
	var items = [];
	jQuery.ajax({
		type: 'GET',
		url: searchUrl,
		data: {api_key: apikey, method: 'album.search', album: searchtext, limit: MAX_RESULTS},
		dataType: 'xml',
		success: function(result){
			result = jQuery(result);
			if (result.find('album').length < 1)
			{
				pBlock.innerHTML =
					_('No results found for <b>${query}</b>',
					{query: searchtext});
				return;
			}
			result.find('album').each(function(){
				var album = jQuery(this);
				items.push(get_album_data(album));
			});
			var previewData = {items: items};
			pBlock.innerHTML = CmdUtils.renderTemplate(albPreviewTemplate, previewData);
			get_larger_first_alb_res(pBlock, jQuery(result.find('album').get(0)));
		}
	});
}

function get_album_data(album)
{
	return {name: album.find('name').text(),
		artist: album.find('artist').text(),
		url: album.find('url').text(),
		img: album.find('image[size=medium]').text()
	};
}



