
function linkify(text) {
	return text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) {
	      return '<a href="'+url+'">'+url+'</a>';
	    }).replace(/\B@([_a-z0-9]+)/ig, function(reply) {
	      return  reply.charAt(0)+'<a href="http://twitter.com/'+reply.substring(1)+'">'+reply.substring(1)+'</a>';
	    });	
};

function parseTweets(tweets) {
	var _r = [], username;
	for (var i=0; i<tweets.length; i++){
		username = tweets[i].user.screen_name;
	    _r.push({
			text: linkify(tweets[i].text),
			permalink: 'http://twitter.com/' + username + '/status/' + tweets[i].id,
			username: username,
			age: relative_time(tweets[i].created_at),
			userLink: "http://twitter.com/" + username
		});
	}	
	return _r;
};

function tweetHTML(tweet) {
	var elm = $('<div class="tweet">');
	elm.append($('<p class="text">' + tweet.text + '</p>'));
	var permalink = $('<a class="permalink" href="' + tweet.permalink + '">' + tweet.age + '</a>');
	elm.append(permalink);
	return elm;
};

function tweetsLoaded(tweets) {
	tweets = parseTweets(tweets);
	var sidebar = $('#sidebar');
	var twitter = $('<div id="twitter"></div>');
	twitter.append('<h2>Latest Tweet</h2>')
	for (var i=0; i<tweets.length; i++){
		twitter.append(tweetHTML(tweets[i]));
	}
	sidebar.append(twitter);
}


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);

  if (delta < 60) {
    return 'less than a minute ago';
  } else if(delta < 120) {
    return 'about a minute ago';
  } else if(delta < (60*60)) {
    return (parseInt(delta / 60)).toString() + ' minutes ago';
  } else if(delta < (120*60)) {
    return 'about an hour ago';
  } else if(delta < (24*60*60)) {
    return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
  } else if(delta < (48*60*60)) {
    return '1 day ago';
  } else {
    return (parseInt(delta / 86400)).toString() + ' days ago';
  }
}
