//
// jQuery.twitterTimeline
//
(function($){
	var _self, _wrapper;
	var settings = {};
	var defaults = {
		account: "twitter",
		count: 30,
		duration: 60000,
		root: "/",
		icon: true
	};
	var API_BASE = "http://api.twitter.com/1/statuses/user_timeline.json?id=";
	
	var createLoading = function(){
		var loading = $('<img/>').attr("src", settings.root+"img/com/loading.gif")
			loading.css("position", "absolute")
			.css("left", _wrapper.width()/2-12+"px")
			.css("top", _wrapper.height()/2-12+"px");
		return loading;
	}
	var callJSONP = function(url){
		$.getJSON(url, function(response){
			_self.empty();
			//console.log(response[0]);
			if(response.length===0){
				_self.append('<p style="color:#999;">ツイートを取得できませんでした</p>');
			} else {
				var ul = parseJSONP(response);
				_self.append(ul);
			}
		})
	};
	var parseJSONP = function(results){
		var ul = $('<ul/>');
		for(var i in results){
			var id = results[i].id;
			var profile_image_url = results[i].user.profile_image_url;
			//var reltime = relative_time(results[i].created_at);
			var status = results[i].text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) {
				return '<a href="'+url+'">'+url+'</a>';
			}).replace(/\B@([_a-z0-9]+)/ig, function(reply) {
				return reply.charAt(0)+'<a href="http://twitter.com/'+reply.substring(1)+'">'+reply.substring(1)+'</a>';
			});
			var li = $('<li/>').addClass("clearfix");
			if(settings.icon){
				li.append($('<img src="'+profile_image_url+'" width="48" height="48">'));
			}
			li.append($('<span>'+status+'</span>'));		
			ul.append(li);
		}
		return ul;
	};
	var methods = {
		init: function(options){
			settings = $.extend(defaults, options||{});
			_self.empty().append(createLoading());
			var request = API_BASE+settings.account+"&count="+settings.count+"&callback="+"?"
			callJSONP(request);
			//
			var timer =  setInterval(function(){
				callJSONP(request);
			}, settings.duration);
			return this;
		}
	}
	$.fn.twitterTimeline = function(method){
		_self = $(this);
		_wrapper = _self.parent();
		// Method calling logic
		if ( methods[method] ) {
			return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
		} else if ( typeof method === 'object' || ! method ) {
			return methods.init.apply( this, arguments );
		} else {
			$.error( 'Method ' +  method + ' does not exist on jQuery.searchTwitter' );
		}
	}
})(jQuery);
