(function($){
	$.fn.e4eTwitter = function(){
		if($(this).length === 0) return;
		// get callback / user / count / colourScheme
		var twitUser = 'e4education', callbackFn = e4eDisplayTweets, tweetCount = 5, colourScheme = false, e4eTwitter = this, element = $(this);
		for(var i=0; i<arguments.length; i++){
			switch(typeof(arguments[i])){
				case 'function':
					callbackFn = arguments[i];
				break;
				case 'string':
					twitUser = arguments[i];
				break;
				case 'boolean':
					colourScheme = arguments[i];
				break;
				case 'number':
					tweetCount = arguments[i];
				break;
			}
		}
		$.ajax({
			url: 'http://twitter.com/statuses/user_timeline/'+twitUser+'.json?count='+tweetCount,
			dataType: 'jsonp',
			success: function(data){
				eval(callbackFn(element,data,colourScheme));
			}
		});
	};
	e4eDisplayTweets = function(elem, data, colourScheme){
		var make_links = function(textData){
			var regExp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
			textData = textData.replace(regExp,'<a href="$1" class="tweet_link">$1</a>'); 
			regExp = /[\@]+([A-Za-z0-9-_]+)/ig;
			textData = textData.replace(regExp,'<a href="http://twitter.com/$1" class="tweet_person">@$1</a>');
			regExp = /[\#]+([A-Za-z0-9-_]+)/ig;
			textData = textData.replace(regExp,'<a href="http://twitter.com/search?q=#$1" class="tweet_hashtag">#$1</a>'); 
			return textData;
		},
		tweet_reply = function(tweetReplyTo, tweetStatusReply){
			if(tweetReplyTo===null){
				return '';
			}else{
				return ', in reply to <a class="tweet_replyTo" href="http://twitter.com/'+tweetReplyTo+'/statuses/'+tweetStatusReply+'" title="'+tweetReplyTo+'">'+tweetReplyTo+'</a>';
			}
		},
		relative_time = function(time_value) {
			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 'about ' + (parseInt(delta / 60)) + ' minutes ago';
			} else if(delta < (120*60)) {
				return 'about an hour ago';
			} else if(delta < (24*60*60)) {
				return 'about ' + (parseInt(delta / 3600)) + ' hours ago';
			} else if(delta < (48*60*60)) {
				return '1 day ago';
			} else {
				return (parseInt(delta / 86400)) + ' days ago';
			}
		}
		if(data.length === 0){
			$(elem).append('<p>No tweets available</p>');
		}else{
			var tweets = '<ul class="tweets">', i;
			for(i=0; i<data.length; i++){
				tweets += '<li class="tweet_'+(i%2==0?'odd':'even')+'">';
				tweets += '<span class="tweet_content"><p>';
				tweets += make_links(data[i].text);
				tweets += '</p></span>';
				tweets += '<span class="tweet_date"><p>';
				tweets += '<a href="http://twitter.com/'+data[i].user.screen_name+'/statuses/'+data[i].id+'">'+relative_time(data[i].created_at)+'</a>' + ' from ' + data[i].source + tweet_reply(data[i].in_reply_to_screen_name, data[i].in_reply_to_status_id);
				tweets += '</p></span>';
				tweets += '</li>';
			}
			tweets += '</ul>';
			$(elem).html(
				$('<div />')
					.addClass('twitter_holder')
					.append(
						$('<span />')
							.addClass('twitter_user_profileImg')
							.append(
								$('<img />')
									.attr({
										src: data[0].user.profile_image_url
									})
							)
					)
					.append(
						$('<span />')
							.addClass('twitter_user_screenName')
							.append(
								'<h4><a href="http://twitter.com/'+data[0].user['screen_name']+'" title="Follow '+data[0].user['screen_name']+' on Twitter">'+data[0].user['screen_name']+'</a></h4>'
							)
					)
					.append(
						tweets
					)
					.append(
						$('<p />')
							.addClass('twitter_rssLink')
							.append(
								'<a href="http://twitter.com/statuses/user_timeline/'+data[0].user['id']+'.rss" title="Subscribe to '+data[0].user['screen_name']+'\'s tweets"><span>Subscribe to '+data[0].user['screen_name']+'\'s tweets</span></a>'
							)
					)
					.append(
						$('<p />')
							.addClass('twitter_bottomLink')
							.append(
								'<a href="http://twitter.com/'+data[0].user['screen_name']+'" title="Follow '+data[0].user['screen_name']+' on Twitter">Follow '+data[0].user['screen_name']+' on Twitter</a>'
							)
					).append(
						$('<span />')
							.addClass('twitter_clearer')
					)
			);
			if(colourScheme === true){
				$(elem).css({
					'background' 	:	'#'+data[0].user['profile_background_color']+(typeof(data[0].user['profile_background_image_url']) == 'undefined' ? '' : ' url('+ data[0].user['profile_background_image_url'] +')' ),
					'color'		:	'#'+data[0].user['profile_text_color'],
					'padding'		:	15
				});
 				$('.twitter_holder',elem).css({
 					'background' 	:	'#fff',
 					'margin'		:	'0 auto',
 					'border-radius'	:	10,
 					'-moz-border-radius'	:	10,
 					'-webkit-border-radius'	:	10,
 					'padding' 		:	10
 				});
 				$('.twitter_holder a',elem).css({
 					'color' 	:	'#'+data[0].user['profile_link_color']
 				});
 				$('.twitter_holder .twitter_user_screenName a',elem).css({
 					'color' 	:	'#'+data[0].user['profile_text_color']
 				});
			}
		}
	};
}(jQuery));