CmdUtils.CreateCommand({
	name: 'expand-short-url',
	icon: '',
	takes: {'shortened URL': noun_arb_text},
	modifiers: {},
	homepage: 'http://longurl.org/tools',
	author: {name: 'Sean Murphy', homepage: 'http://IamSeanMurphy.com'},
	license: 'GPL',
	preview: function(previewBlock, inputObject) {
		previewBlock.innerHTML = 'Expand a URL shortened with a services like TinyURL.com';
		
		if (inputObject.text.match(/http:\/\/([^\/]+)\/.+/i)) {
			this._expand(previewBlock, inputObject);
		}
	},
	execute: function(inputObject) {
		var short_url = inputObject.text.replace(/\s/g, '');
		
		if(short_url.length < 1) {
			displayMessage("No shortened URL was specified.");
			return;
		}
		
		if (globals.longurl.long_url) {
			var replacement = inputObject.html.replace(short_url, globals.longurl.long_url, 'ig');
			CmdUtils.setSelection(replacement);
		}
	},
	_expand: function(previewBlock, inputObject) {
		jQuery.ajax({
			type: 'GET',
			url: 'http://api.longurl.org/v1/expand',
			data: {format: 'json', url: inputObject.text},
			dataType: 'json',
			beforeSend: function(xhrObject) {
				xhrObject.setRequestHeader('User-Agent', 'expand-short-url (Ubiquity)');
			},
			error: function(xhrObject, responseText) {
				displayMessage('Error contacting LongURL service. Try again later.');
			},
			success: function(data, responseText) {
				if (typeof(data.messages) !== 'undefined') { // There was an error
					previewBlock.innerHTML = 'LongURL Error: ' + data.messages[0].message;
				} else {
					globals.longurl = {'long_url': data.long_url};
					
					var previewTemplate = "<strong>${short_url}</strong> resolves to <strong>${long_url}</strong>";

					var previewData = {
						short_url: inputObject.text,
						long_url: data.long_url
					};

					previewBlock.innerHTML = CmdUtils.renderTemplate(previewTemplate, previewData);
				}
			}
		});
	}
});