
$(function($){

	var myTwitter;
	var disp_tweets = 7;
	var get_tweets = 20;
	var user_name = 'break_net_com';
	var list_name = 'breakthrough';

	// つぶやきをとってくる関数
	function getTwitterBlock(username,listname,count,since_id) {

		// Twitter JSON APIをたたくURL

		var url = 'http://api.twitter.com/1/'+username+'/lists/'+listname+'/statuses.json?per_page='+count;

		if(since_id && 0<since_id) {
			url += '&since_id='+since_id;
		}

		url += '&callback=?';

		// データ取得
		$.jsonp({
			url:url,
			timeout:10000, // 10秒でタイムアウト
			beforeSend:function(XMLHttpRequest){
				$('#tweets_display').removeClass('disabled');
			},
			success:function(json, dataType){

				// ツイート数を取得
				var tweet_count = json.length;

				$(json.reverse()).each(function(i, item ) {

					// つぶやきの日時をDateオブジェクトに格納
					var date_obj = new Date(item.created_at.replace(/^(.+ .+ .+)( .+ .+)( .+)$/,"$1$3$2"));

					var tweet_time = date_obj.getFullYear()+"-"+(date_obj.getMonth()+1)+"-"+date_obj.getDate()+" "+date_obj.getHours()+":"+date_obj.getMinutes()+":"+date_obj.getSeconds();

					$("#tweets").prepend("<div class=\"tweet\" style=\"display:none\"><span class=\"status_id\" style=\"display:none\">"+item.id+"</span><span class=\"tweet_icon\"><a href=\"http://twitter.com/"+item.user.screen_name+"\"><img src=\""+item.user.profile_image_url+"\" /></a></span><span class=tweet_text>"+linkScreenName(item.user.screen_name)+"&nbsp;"+item.text.makeLinks()+"<br /><font class=tweet_info><a href=\""+makeTweetURL(item)+"\">"+tweet_time+"</a>"+"&nbsp;from&nbsp;"+item.source+"</font></span></div>");

					// 非表示のツイートを表示。
					$(".tweet:hidden").show("slow");

					if(tweet_count<=(i+1))
					{
						// 奇数行、偶数行の判定クラス更新
						$(".tweet").removeClass("odd_row even_row");
						$(".tweet:odd").addClass("odd_row");
						$(".tweet:even").addClass("even_row");

						if(myTwitter)
						{
							// @～のリンク更新
							myTwitter(".tweet:lt("+tweet_count+")").hovercards();
						}
					}

					// つぶやき数を数えて消す(0から数えるので-1)
					var remove_tag = "#tweets div:gt("+(count-1)+")";
					$(remove_tag).hide("slow",function(){$(remove_tag).remove();});
				});

			},
			error:function(XMLHttpRequest, textStatus, errorThrown){
				if( 0 < $("div.tweet").length ) {
					// つぶやき取得済み
				} else {
					// エラー
					$('#tweets_display').addClass('disabled');
				}
			},
		});

	};

	// リンク内につぶやきを含むURLに変更
	String.prototype.makeLinks = function() {
		var text = this;
		var result_text = '';
		var a = 0;
		var b = Number.MAX_VALUE;
		while(a < text.length)
		{
			text = text.slice(a);
			a = 0;
			// URL検索
			pattern = /((http|https|ftp):\/\/[\w?=&.\/-;#~%-]+(?![\w\s?&.\/;#~%"=-]*>))/;
			var url = pattern.exec(text);
			if( url ) {
				b = url.index;
			} else {
				b = text.length;
			}
			if( a < b ) {
				// URL以外の文字列中のハッシュをリンクにする
				result_text += text.substr(a,b-a).replace(/[^A-Za-z0-9]#[A-Za-z0-9_]+/g,function(str){
					return str[0] + '<a href="http://twitter.com/search?q=%23' + str.slice(2)+'">'+str.slice(1)+'</a>';
				});
			}
			// 検索開始位置を変更
			a = b;
			if( url ) {
				// URLを格納
				result_text += url[0].link(url[0]);
				a += url[0].length;
			}
		}
		return result_text;
	};

	function linkScreenName(screen_name)
	{
		return "<strong><a href=\"http://twitter.com/"+screen_name+"\">"+screen_name+"</a></strong>";
	}

	function makeTweetURL(tweet)
	{
		return "http://twitter.com/"+tweet.user.screen_name+"/status/"+tweet.id;
	}

	$('#btn_home').bind('click',getBtTweetList);
	function getBtTweetList()
	{
		$("#tweets").ready( function(){
			getTwitterBlock(user_name,list_name,get_tweets);
		});

		setInterval( function(){

			var since_id = $(".tweet:first .status_id").text();

			getTwitterBlock(user_name,list_name,get_tweets,since_id);
		}, 300000 );

		// @ユーザー名をリンク処理
		if(typeof(twttr) != "undefined") {
			twttr.anywhere(function(twitter) {
				myTwitter = twitter;
				myTwitter(".tweet").hovercards();
			});
		}

		$('#btn_home').unbind('click',getBtTweetList);
	}

	// つぶやきのスクロール処理
	$('#tweets_display').ready(function() {

		var display = document.getElementById('tweets_display');

		if( typeof display.onmousewheel != 'undefined' )
			display.onmousewheel = mouseScrollHandler; // IE,WebKit,Chrome,...
		else if( display.addEventListener )
			display.addEventListener( 'DOMMouseScroll', mouseScrollHandler, false ); // Gecko

		function mouseScrollHandler(event) {
			var delta = 0;

			if( !event ) event = window.event;

			if( event.detail )
				delta = -event.detail/3;
			else if( event.wheelDelta )
				delta = event.wheelDelta/120;

			var top = $('#tweets_display').scrollTop();
			var scroll_val = delta * 20;

			// なめらかにスクロール
			$('#tweets_display').animate({scrollTop:'-='+scroll_val},100);

			// マウスホイールのイベントをここでキャンセル
			if (event.preventDefault) {
					event.preventDefault();
			} else {
				event.returnValue = false;
			}
		}
	});

});

