/*
 * fpfvGetTweets
 *
 * @required : jQuery
 * @modified : 2011-03-31 13:09
 */
;(function($) {

	var url = "http://api.twitter.com/1/statuses/user_timeline.json?&callback=hpfvSetTimeline";
	function hpfvGetTweets(options) {
		var conf = $.extend({
				"screen_name" : null,
				count         : 50,
				page          : 1
			}, options);
		// screen_nameの指定がなければ何もしない
		if ( !conf["screen_name"] ) return false;
		for ( var i in conf ) {
			url += "&" + i + "=" + conf[i];
		}
		// JSONPのリクエスト
		$(document).ready(function() {
			$.getScript(url);
		});
	}

	// JSONPのコールバック用
	window.hpfvSetTimeline = function(data) {
		var i, l = data.length, user_current,
			data_current, tweetsContainer;
		// 初回のみul#TweetListを生成する
		if ( !$("#TweetList").length ) {
			tweetsContainer = $("<ul id=\"TweetList\"></ul>");
		} else {
		// ある場合は#TweetListをクリアする
			tweetsContainer = $("#TweetList")
				.hide()
				.html("");
		}
		// 取得したTweetの数だけ#TweetListにappendする
		for ( i = 0; i < l; i++ ) {
			data_current = data[i];
			tweetsContainer.append([
				"<li style=\"overflow: hidden\">",
					"<span class=\"tweet\">" + twttrUserAnchorStyle(data_current["text"]) + "</span>",
					"<span class=\"date\">" + elapsedDate(data_current["created_at"]) + "</span>",
				"</li>"
			].join(""));
		}
		// 初回はtweetsContainerを追加する
		if ( !$("#TweetList").length ) {
			$("#TwitterFollow").before(tweetsContainer);
		// 以降はtweetを入れ替えたtweetsContainerを表示するだけ
		} else {
			tweetsContainer.show();
		}
		// Tweetが2つ以下ならスライドはしない
		if ( l < 3 ) {
			setTimeout(function() {
				$.getScript(src);
			}, 300000); // 30秒後にロードし直し
		}
		// スライドのinit
		hpfvTlSlide(tweetsContainer.find("li"));
	}
	// Tweetにリンクを付けて返す
	function twttrUserAnchorStyle(tweet) {
		return tweet
			.replace(/(https?\:\/\/[^ 　]+)/g, '<a href="$1" target="_blank">$1</a>')
			.replace(/(\#[^ 　]+)/g, '<a href="https://twitter.com/search?q=$1" target="_blank">$1</a>')
			.replace(/@(\w{1,15})/g, '<a href="http://twitter.com/$1" target="_blank">@$1</a>');
	}
	// 時間の変換
	function elapsedDate(datetime) {
		var date1 = new Date(datetime.replace("+", "UTC+")),
			date2 = new Date(),
			diff = date2 - date1;
		if (diff < 3600000) {
			if (diff < 0) {
				return '0分前';
			} else {
				return parseInt(diff / 60000) + '分前';
			}
		}
		else if (diff < 86400000) {
			return parseInt(diff / 3600000) + '時間前';
		}
		else if (diff > 2592000000) {
			return parseInt(diff / 2592000000) + 'ヶ月前';
		} else {
			return parseInt(diff / 86400000) + '日前';
		}
	}
	// TLのスライド
	function hpfvTlSlide(tweets) {
		//console.log(tweets.length);
		var tweetsLen = tweets.length,
			firstTime = true,
			current   = 0;
		// 何も無い場合は何もしない
		if ( tweetsLen === 0 ) return false;
		(function() {
			var i, _current; // _current = $(tweets[current++])
			if ( !firstTime ) {
				// 先頭のTweetを枠外へ押し出して非表示にしておく
				_current = $(tweets[current++]);
				_current
					.animate({
						marginTop: -_current.attr("offsetHeight")
					}, {
						easing   : "swing",
						duration : 700,
						complete : function() {
							_current.hide();
						}
					});
			} else {
				firstTime = false;
			}
			// currentが取得したTweet数を超えたらtimeoutループから抜けて再取得する
			if ( current === tweetsLen ) {
				$.getScript(url);
			} else {
				setTimeout(arguments.callee, 4000);
			}
		}());
	}
	
	// 実行
	hpfvGetTweets({
		"screen_name" : "HEP_FIVE"
	});

}(jQuery));

