/*
 * 設定宣言・対象設定
 *	コンフィグの内訳は以下の通り
 *		Target:配置対象名前
 *		TitleImg:配置対象内に表示するタイトル用img
 *		URL:APIのURL
 *		TLNum:TLから引っ張ってくる数
 *		SearchUser:サーチ名
 *		len:サーチ人数
 *		TimerIntaval:自動更新時間
 */
var NowTimeNum = 5;
var TwitterDataObject;
$(document).ready(function(){
	var NameAr = ["PanstarTerminal","PanstarInfo","PanstarRyoma","PanstarParser"];
	var Config = {
		"Target":"#twitterList",
		"TitleImg":
		{
			"src":"img/index/twitter_head.gif",
			"width":254,
			"height":55,
			"alt":"twitter"
		},
		"URL"			:"http://search.twitter.com/search.json",
		"SeekUser"		:NameAr,
		"SeekHush"		:"%23panstar",
		"len"			:NameAr.length,
		"TLNum"			:10,
		"TimerIntaval"	:10
	};

	//設定格納用に対象を設定、そのまま持ち回す
	var TargetBody = $(Config["Target"]);

	//設定を格納
	TwitterDataObject = Config;
	CleElement(TargetBody);
});

/**
 *	装飾用等の要素を配置
 *	<dl><dt><dd> <img>
 *	@param		{JqueryElement}	要素挿入対象
 *	@returns	null
 */
function CleElement(t){
	StartGetTwiiiterTL(t);
}



/**
 *	Ajax設定、twitterAPI からTLを分捕ってきて、翻訳して　要素内に配置する(ガスッと表示する
 *	@param		{JqueryElement}	要素挿入対象
 *	@returns	null
 */
 function StartGetTwiiiterTL(t){
	var Config = TwitterDataObject;
	var TargetUserString ="?q=";
	var len = Config["len"];
	var ar	= Config["SeekUser"];
	var error = false;
	if (Config["SeekHush"]) {
		TargetUserString += Config["SeekHush"] + "+";
	}
	for(i=0;i<len;i++){
		TargetUserString += "from:"+ar[i]
		if(i != (len-1)){
			TargetUserString += "+OR+";
		}
	}

	$.ajax({
		url 		:	Config["URL"]+TargetUserString,
		dataType	:	"jsonp",
		scriptCharset:	"utf-8",
		data		:	{
			"rpp":Config["TLNum"],
			"q":Config["SearchWord"]
		},
		success		:function(json){
			CreateTwiiiterHtml(json["results"], t);
			var createHtml = json["results"].length;

		},
		error		:function(e){
			error = true;
		}
	});

	if (!error) {
		return true;
	} else {
		return false;
	}

}


/**
 *	Ajax設定、twitterAPI からTLを分捕ってきて、翻訳して　要素を作成する
 *	@param		{JqueryElement}	要素挿入対象
 *	@returns	null
 */
function CreateTwiiiterHtml (json, t) {
	var srot_ar = [];
	
	for(var i in json){
		//情報抽出
		var username = json[i].from_user;
		var profile_image_url = json[i].profile_image_url;
		var reltime = relative_time(json[i].created_at);
		var status = json[i].text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) {
			return '<a href="'+url+'" target="_blank">'+url+'</a>';
		}).replace(/\B@([_a-z0-9]+)/ig, function(reply) {
			if($.os.name == 'iphone' || $.os.name == 'ipod' || $.os.name == 'ipad' || (navigator.userAgent.indexOf('Android') > 0 && $.os.name == 'linux')){
				return  reply.charAt(0)+'<a href="http://mobile.twitter.com/'+reply.substring(1)+'" target="_blank">'+reply.substring(1)+'</a>';
			} else {
				return  reply.charAt(0)+'<a href="http://twitter.com/'+reply.substring(1)+'" target="_blank">'+reply.substring(1)+'</a>';
			}
		}).replace(/#(\w+)/ig,function(hash){
			if($.os.name == 'iphone' || $.os.name == 'ipod' || $.os.name == 'ipad' || (navigator.userAgent.indexOf('Android') > 0 && $.os.name == 'linux')){
				return '<a href="http://mobile.twitter.com/search/?q=%23'+hash.substring(1)+'" target="_blank">'+hash.substring(0)+'</a>';
			} else {
				return '<a href="http://twitter.com/#/search?q=%23'+hash.substring(1)+'" target="_blank">'+hash.substring(0)+'</a>';
			}
		});
		var eleDT =
		$("<li></li>").append(
				$("<a></a>").attr({
					"href"		:"http://twitter.com/"+username,
					"target"	:"_blank"
				}).append(
					$("<img />").attr({
						"src"		:profile_image_url,
						"width"		:48,
						"height"	:48,
						"alt"		:username
					})
				)).append(
					$("<a></a>").attr({
						"href"		:"http://twitter.com/"+username,
						"target"	:"_blank"
					}).html(username)
				).append(
					$("<br />")
				).append(
					$("<span></span>").html(reltime)
				);

		var eleDD = $("<p></p>").html(status);

		srot_ar[srot_ar.length] = eleDT.append(eleDD);
			if(srot_ar.length < NowTimeNum+1){
				t.append($(srot_ar[srot_ar.length-1]))
			}

	}
	intervalId = setInterval(function(){ReelRoll(t,srot_ar)},TwitterDataObject["TimerIntaval"]*1000);

}




/**
 *	保持している情報を使用し、アニメーションを行う
 *	@param		{JqueryElement}	要素挿入対象
 *	@returns	null
 */
 function ReelRoll(t,srot_ar){
//console.log(srot_ar);
	//アニメーション終了後、過剰分削除
	var tar = $(srot_ar[NowTimeNum]);
	tar.show();
	t.append(tar);
	t.children("li").eq(0).slideUp("1500",function(){
		t.children("li").eq(0).remove();
	});
	if(NowTimeNum < srot_ar.length -1){
		NowTimeNum++;
	}else{
		NowTimeNum  = 0;
	}

}


/**
 *文字列を日本語に変えるためハックする・・・本家でやってくれないぽい
 *	@param		{}	Comment
 *	@returns	{}	Comment
 *  ※11/08/18 IE6のみ日付取得エラーのため処理をPHPに移行
 */
 function relative_time(time_value) {
  time_values = time_value.replace(",","");
  var parsed_date = parseInt(Date.parse(time_values));
  var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
  var relative_time　= parseInt(Date.parse(relative_to));

  var delta = parseInt(relative_time - parsed_date);
  delta = delta + (relative_to.getTimezoneOffset()*60);

  //分を出力
  delta = parseInt(delta/(1000*60));

  if (delta < 1) {
    return '1分以内';
  } else if(delta < 2) {
    return '約１分';
  } else if(delta < 59) {
    return delta.toString() +'分前';
  } else if(delta < 60) {
    return '約１時間前';
  } else if(delta < (24*60)) {
    return '約' + (Math.round(delta / 60)).toString() + ' 時間前';
  } else if(delta < (48*60)) {
    return '約1日前';
  } else {
    return '約'+(Math.round(delta / 1440)).toString() + ' 日前';
  }
}


/////////////////////////////////////////////////////////////////
//TOPのタブ用ＪＳ
/////////////////////////////////////////////////////////////////
/**
*　タブ生成用：現在配置されている要素を使用してタブの挙動を作成する
*/
function SetTopTab(){
	$("ul.tabBox li:not("+$("ul.tab li a.selected").attr("href")+")").hide();
	$("ul.tab li a").click(function(){
		$("ul.tab li a").removeClass("selected");
		$(this).addClass("selected");
		$("ul.tabBox li").hide();
		$($(this).attr("href")).show();
		return false;
	});
}
