var s = {
	screenName:"DrSamuelJohnson",
	nav: false,
	prevLinkText: "&laquo;",
	nextLinkText: "&raquo;",
	date: false,
	tweetCount: 1,
	loadingHtml: "Loading twitter feed...",
	errorHtml: "Twitter feed currently unavailable"
};
(function($){  
	jQuery.fn.twitter = function(o) {
		if(typeof o == 'object') {s = $.extend(s, o)}
		else {s.screenName = o};
		return this.each(function() {  
			new twitterFeed($(this),s.screenName);
		});  
	};  
})(jQuery);
function twitterFeed(elem,screenName) {
	$(document).ajaxStart(function(){elem.html(s.loadingHtml);});
	$(document).ajaxError(function(){elem.text(s.errorHtml);});	
	$.getJSON("http://api.twitter.com/1/statuses/user_timeline/"+screenName+".json?count="+s.tweetCount+"&callback=?", function(o) {
		elem.html("");
		var feed = $(document.createElement("span")).html(o[0].text).appendTo(elem).addClass("feed");
		if(s.date) var date = $(document.createElement("span")).addClass("date").text(doDate(o[0].created_at)).appendTo(elem)
		else var date = null;
		if(s.nav) doNav(elem,feed,o,date);
	});
};
function doDate(rawDate) {
	if(s.date == 'date') return rawDate.split(" +")[0];
	if(s.date == 'difference') {
		var today = new Date();
		var tDate = makeDate(rawDate);
		var oneSec = 1000;
		var oneMin = oneSec * 60;
		var oneHour = oneMin * 60;
		var oneDay = oneHour*24;
		var oneWeek = oneDay*7;
		var oneMonth = oneWeek*4;
		var msDiff = today.getTime()-tDate.getTime();
		if(msDiff >= oneMonth) return Math.ceil(msDiff/oneMonth)+ " months ago";
		if(msDiff >= oneWeek) return Math.ceil(msDiff/oneWeek)+ " weeks ago";
		if(msDiff >= oneDay) return Math.ceil(msDiff/oneDay)+ " days ago";
		if(msDiff >= oneHour) return Math.round(msDiff/oneHour) + " hours ago";
		if(msDiff >= oneMin) return Math.round(msDiff/oneMin) + " minutes ago";
		if(msDiff >= oneSec) return Math.round(msDiff/oneSec) + " seconds ago";
		return "less than 1 second ago";
	};
}
function makeDate(date) {
	var dateArr = date.split(" ");
	var year = dateArr[5];
	var time = dateArr[3];
	var day = dateArr[2];
	var month;
	switch(dateArr[1]) {
		case 'Jan':	month = 'January'; break;
		case 'Feb': month = 'February'; break;
		case 'Mar': month = 'March'; break;
		case 'Apr': month = 'April'; break;
		case 'May': month = 'May'; break;
		case 'Jun': month = 'June'; break;
		case 'Jul': month = 'July'; break;
		case 'Aug': month = 'August'; break;
		case 'Sep': month = 'September'; break;
		case 'Oct':	month = 'October'; break;
		case 'Nov':	month = 'November'; break;
		case 'Dec':	month = 'December'; break;
	};
	var dateStr = month + ' ' + day + ',' + year + ' ' + time;
	return new Date(dateStr);
};

function doNav(elem,feed,o,date) {
	var c = 0;
	var next = $(document.createElement("a")).html(s.nextLinkText).prependTo(elem).addClass("twitterNext");
	var prev = $(document.createElement("a")).html(s.prevLinkText).prependTo(elem).addClass("twitterPrev");
	next.click(function(){
		c++;
		if(o[c]) feed.html(o[c].text)
		else c--;
		if(s.date) date.text(doDate(o[c].created_at));
	});
	prev.click(function(){
		if(c>=1){
			c--;
			feed.html(o[c].text);
			if(s.date) date.text(doDate(o[c].created_at));
		}
	});
};
