﻿
(function ($) {

	$.fn.twitter = function (o) {

		var s = {
			username: "artsway",
			list: "",
			loading_text: "Loading twitter feed...",
			count: 3
		};

		function truncate(str, limit) {
			var bits, i;
			//if (str != typeof(string)) {
			//	return '';
			//}
			bits = str.split('');
			if (bits.length > limit) {
				for (i = bits.length - 1; i > -1; --i) {
					if (i > limit) {
						bits.length = i;
					}
					else if (' ' === bits[i]) {
						bits.length = i;
						break;
					}
				}
				bits.push('...');
			}
			return bits.join('');
		}
		
		function parseTwitter(text) {
			text = text.replace(/http:\/\/\S+/g, '<a href="$&">$&</a>');
			/*text = text.replace(/\s(@)(\w+)/g, ' @<a href="http://twitter.com/$2" target="_blank">$2</a>');
			text = text.replace(/\s(#)(\w+)/g, ' #<a href="http://search.twitter.com/search?q=%23$2" target="_blank">$2</a>');
			text = text.replace(/^\w+/, '<a href="http://twitter.com/$&" target="_blank">$&</a>');*/
			return text;
		}

		/// Relative time function
		function relative_time(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);

			if (delta < 60) {
				return 'Less than a minute ago';
			} else if (delta < 120) {
				return 'About a minute ago';
			} else if (delta < (45 * 60)) {
				return (parseInt(delta / 60)).toString() + ' minutes ago';
			} else if (delta < (90 * 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';
			}

		}

		/// If extends
		if (o) $.extend(s, o);

		return this.each(function (o) {

			var url = "";
			var list = "";

			//if (!s.group)
			//    $(this).html("");

			if ($(this).children("ul.tweet_list").length == 0)
				list = $('<ul class="tweet_list">').appendTo($(this));

			var loading = $('<li class="loading">' + s.loading_text + '</li>');

			var container = $(this).children("ul.tweet_list");

			$(this).children("ul.tweet_list").append(loading);
			var username = s.username;
			url = "http://twitter.com/statuses/user_timeline.json?screen_name=" + username + "&callback=?";
			
			$.getJSON(url, function (data) {

				$.each(data, function (i, item) {

					if (i < s.count) {
						var itemString = "";

						if (i == 0)
							itemString += "<li class=\"first\">";
						else
							itemString += "<li>";

						itemString += "<a href=\"http://twitter.com/" + username + "\">" + truncate(item.text, 90) + "</a>"; //parseTwitter(item.text);
						itemString += "</li>";

						container.append(itemString);
					}

				});

				container.children("li.loading").remove();
				//runs the callback function
				s.callback();

			});
		});
	};
})(jQuery);
