(function($) {
	$.fn.tweetlist = function(settings) {
		this.settings = $.extend({
			count			: 5,				// ツイート数
			twitterUsers	: 'ucw_official',	// アカウント名
			list			: 'all',			// typeがlistの場合、リスト名
			type			: 'user'			// 'user'か'list'か'search'
		}, this.settings || {});
		
		return this.each(function() {
			var container = $(this);
			var count = settings.count;
			var twitterUsers = settings.twitterUsers;
			var listName = settings.list;
			var type = settings.type;
			var url = "http://search.twitter.com/search.json";
			
			var users = twitterUsers.split(","); 
			var buildString = "";
			for(var i = 0; i < users.length; i++){
				if(i != 0) buildString += '+OR+';
				buildString += "from:"+users[i];
			}
			
			if(type == "user"){
				url = "http://api.twitter.com/1/statuses/user_timeline.json?screen_name="+twitterUsers+"&count="+count+"&callback=?";
			}else if(type == "list"){
				url = "http://api.twitter.com/1/"+twitterUsers+"/lists/"+listName+"/statuses.json?per_page="+count+"&callback=?";
			}else{
				url = "http://search.twitter.com/search.json?q="+buildString+"&rpp="+count+"&callback=?";
			}
			
			$.getJSON(url, function(json){
				container.html('');
				
				if(type == "search"){
					$(json.results).each(function(){
						var str = 	'<li>\
									<span class="image"><a href="http://twitter.com/'+this.from_user+'" target="_blank"><img src="'+this.profile_image_url+'" alt="'+this.from_user+'" width="40" height="40" /></a></span>\
									'+formatTwitString(this.text)+'<br />\
									<a href="http://twitter.com/'+this.from_user+'" target="_blank">'+relativeTime(this.created_at)+'</a>\
									</li>';
						container.append(str);
					});
					$("ul.listTwitter li:last-child").addClass("lastItem");
				}else{
					$.each(json, function (i, item){
						var str = 	'<li>\
									<span class="image"><a href="http://twitter.com/'+item.user.screen_name+'" target="_blank"><img src="'+item.user.profile_image_url+'" alt="'+item.user.name+'" width="40" height="40" /></a></span>\
									'+formatTwitString(item.text)+'<br />\
									<a href="http://twitter.com/'+item.user.screen_name+'" target="_blank">'+relativeTime(item.created_at)+'</a>\
									</li>';
						container.append(str);
					});
					$("ul.listTwitter li:last-child").addClass("lastItem");
				}
				//setTimeout(function(){ $.fn.tweetlist({ rrp: rrp, twitterUsers: twitterUsers }) }, 2000);
			});
			return (false);
		});
	};
	
	function formatTwitString(str){
		str = ' ' + str;
		str = str.replace(/((ftp|https?):\/\/([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?)/gm,'<a href="$1" target="_blank">$1</a>');
		str = str.replace(/([^\w])\@([\w\-]+)/gm,'$1@<a href="http://twitter.com/$2" target="_blank">$2</a>');
		str = str.replace(/([^\w])\#([\w\-]+)/gm,'$1<a href="http://twitter.com/search?q=%23$2" target="_blank">#$2</a>');
		return str;
	};

	function relativeTime(pastTime){
		var origStamp = Date.parse(pastTime);
		var curDate = new Date();
		var currentStamp = curDate.getTime();
		var difference = parseInt((currentStamp - origStamp)/1000);
		
		if(difference < 0)				return false;
		if(difference <= 5)				return "Just now";
		if(difference <= 20)			return "Seconds ago";
		if(difference <= 60)			return "A minute ago";
		if(difference < 3600)			return parseInt(difference/60)+" minutes ago";
		if(difference <= 1.5*3600)		return "One hour ago";
		if(difference < 23.5*3600)		return Math.round(difference/3600)+" hours ago";
		if(difference < 1.5*24*3600)	return "One day ago";
		
		var dateArr = new Date(pastTime);
		
		dateArrYear = dateArr.getFullYear();
		dateArrMonth = (dateArr.getMonth()+1 < 10) ? ("0" + (dateArr.getMonth()+1)) : (dateArr.getMonth()+1);
		dateArrDay = (dateArr.getDate() < 10) ? ("0" + dateArr.getDate()) : dateArr.getDate();
		dateArrHours = (dateArr.getHours() < 10) ? ("0" + dateArr.getHours()) : dateArr.getHours();
		dateArrMinutes = (dateArr.getMinutes() < 10) ? ("0" + dateArr.getMinutes()) : dateArr.getMinutes();
		
		return dateArrYear+"/"+dateArrMonth+"/"+dateArrDay+" "+dateArrHours+":"+dateArrMinutes;
	};
	

})(jQuery);



