(function($){
	$.fn.jqtwitter = function(username, options)	{
		if(username)	{
			var defaultSettings = {
				count: '5',
				idname: '#uname',
				idimg: 'img#profile',
				idlink: '#ulink'
			}
			
			var settings = $.extend(defaultSettings, options);
			
			var url = "http://twitter.com/status/user_timeline/"+username+".json?count="+settings.count+"&callback=?";
			
			var holder = this;
			
			$('' + settings.idname + '').html(" <b>Twitter: @" + username + "</b> ");
			$('' + settings.idlink + '').html(" <b><a href='http://www.twitter.com/" + username + "' target='_blank'>www.twitter.com/" + username + "</a></b> ");
			$.getJSON(url, function(data)	{
				$.each(data, function(i, item)	{					
					$('' + settings.idimg + '').attr("src", item.user["profile_image_url"]);
					holder.append("<p>" + item.text.discoverLinks().discoverUsers().discoverTags() + " <span class='created_at'>Enviado há " + relative_time(item.created_at) + " via " + item.source + "</span></p>");
				});
			});
		} else	{
			console.debug("jQuery jqtwitter requires a username");
		}
		
		// Take the relative time
		function relative_time(time_value) {
			  var values = time_value.split(" ");
			  time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
			  var parsed_date = Date.parse(time_value);
			  var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
			  var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
			  delta = delta + (relative_to.getTimezoneOffset() * 60);
			  
			  var r = '';
			  if (delta < 60) {
				r = 'um minuto atrás';
			  } else if(delta < 120) {
				r = 'alguns minutos atrás';
			  } else if(delta < (45*60)) {
				r = (parseInt(delta / 60)).toString() + ' minutos atrás';
			  } else if(delta < (90*60)) {
				r = ' uma hora atrás';
			  } else if(delta < (24*60*60)) {
				r = '' + (parseInt(delta / 3600)).toString() + ' horas atrás';
			  } else if(delta < (48*60*60)) {
				r = '1 dia atrás';
			  } else {
				r = (parseInt(delta / 86400)).toString() + ' dias atrás';
			  }
			  
			  return r;
		}
		
		// Discover users
		String.prototype.discoverUsers = function() {
			return this.replace(/@[\w]+/g, function(m) {
				return "<a href='http://www.twitter.com/"+m.replace('@','')+"' target='_blank'>"+m+"</a>";
			});
		}; 
		
		// Discover tags
		String.prototype.discoverTags = function()	{
			return this.replace(/ #[\w]+/g, function(t)	{
				return "<a href='http://search.twitter.com/search?q="+t.replace("#", "%23")+"' target='_blank'>"+t+"</a>";
			});
		};
		
		// Discover all links
		String.prototype.discoverLinks = function() {
				return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/, function(m) {
			return m.link(m);
		  });
		 }; 
		
		return this;
	};
})(jQuery);
