var TwitterTimeline = new Class({
	Implements: Options,
	
	screenName: '',
	twitter: null,
	
	initialize: function(screenName) {
		Locale.use('nl-NL');
		this.screenName = screenName;
		this.timeline = $('timeline');
		this.twitter = new Request.Twitter({
			linkify: false,
			data: {
				screen_name: screenName,
				include_rts: true,
				count: 8
			},
			onSuccess: function(responseJSON, responseText) {
				this.tweetsReceived(responseJSON, responseText);
			}.bind(this)
		});
		this.load();
	},
	
	load: function() {
		this.twitter.send();
	},
	
	tweetsReceived: function(responseJSON, responseText) {
		this.timeline.empty();
		Object.each(responseJSON, this.buildTweet, this);
		this.load.delay(80000, this);
	},
	
	buildTweet: function(tweet) {
		var tweetNode = $('tweetTemplate').clone();
		tweetNode.removeClass('template');
		
		this.initStatusNode(tweet, tweetNode);
		this.initLink(tweet, tweetNode);
		
		this.timeline.adopt(tweetNode);
	},
	
	initStatusNode: function(tweet, tweetNode) {
		tweetNode.getElement('.status').set('html', this.linkify(tweet.text));
	},
	
	initLink: function(tweet, tweetNode) {
		var linkNode = tweetNode.getElement('.date');
		var href = linkNode.get('href');
		href = href.substitute({
			'id': tweet.id,
			'screenName': this.screenName
		});
		linkNode.set('href', href);
		linkNode.set('text', this.formatDate(tweet));
	},
	
	formatDate: function(tweet) {
		var date = Date.parse(tweet.created_at);
		
		return date.timeDiffInWords();
	},
	
	/**
	 *  modified from TwitterGitter by David Walsh (davidwalsh.name)
	 *  courtesy of Jeremy Parrish (rrish.org)
	 */
	linkify: function(text) {
		return text.replace(/(https?:\/\/[\w\-:;?&=+.%#\/]+)/gi, '<a href="$1">$1</a>')
							 .replace(/(^|\W)@(\w+)/g, '$1<a href="http://twitter.com/$2">@$2</a>')
							 .replace(/(^|\W)#(\w+)/g, '$1<a href="http://search.twitter.com/search?q=%23$2">#$2</a>');
	}
});
