/*
	raditter.js
	taichistereo 2010
	（・ω・）
*/



/* vars
///////////////////////////////////////////////////////////////////////////////////////// */
var initial_amount = 10;

var isUseHtmlStuck = false;
var onImg = "resources/templates/img/bt_pause.gif";
var offImg = "resources/templates/img/bt_play.gif";
var arr_tweet = new Array();
var last_timestamp = new Array();
// タイマー関連
var timer_ms_1st = 2000; // 一番最初のタイマー
var timer_ms = 200; // タイマー値（これが上書きされる）
var timer_ms_max = 30000; // これ以上は増えない
var timer_ms_increase = 100; // 増分
var isFirstRender = true;
var timer;

var arr_isFirstRender = new Array();
var isFinishedFirstRender = false;

var getAreaTimer;

/* main
///////////////////////////////////////////////////////////////////////////////////////// */
$(function(){
	
	// 地域名を取得
	// getArea();
	
	arr_tweet = [];
	// 初期表示用のツイートを取得
	for (j=1; j<=($("ul").length-1); j=j+1) {
		// この欄のキーワード
		var key = $("h3:eq("+(j-1)+") span a").text();
		var _type = getType(key);
		key = key.substr(1,key.length-1);
		// ツイートを取得
		// alert(key+'/'+_type+'/');
		getTw(j-1, initial_amount, key, _type, true);
		
		arr_isFirstRender[j-1] = false;
	}
	
	// ボタンを設定
	// $(".bt_pp").hide();
	$(".bt_pp").click(function () {
		if ($(this).attr('src')==onImg) {
			$(this).attr({
				src: offImg
			});
			// arr_tweet = [];
			$(this).parent().parent().parent().css("background-color","#BDECD5");
		} else {
			$(this).attr({
				src: onImg
			});
			// arr_tweet = [];
			$(this).parent().parent().parent().css("background-color","#E3C2EC");
			// alert("まだ開発中です。ごめんなさい！");
		}
	});
});


/* methods
///////////////////////////////////////////////////////////////////////////////////////// */


function getTw(p_col, p_rpp, p_key, p_type, p_isIncOld) {
	if (!p_isIncOld) {
		// 新しいものだけ
		// alert(p_col); 
	}
	// alert(p_col+'/'+p_rpp+'/'+p_key+'/'+p_type+'/'+p_isIncOld);
	arr_tweet[p_col] = new Array();
	var url = '';
	if (p_type=='tag') {
		url = 'http://search.twitter.com/search.json?q=%23'+p_key+'&lang=ja&page=1&rpp='+p_rpp+'&callback=?';
	} else {
		url = 'http://search.twitter.com/search.json?q=%40'+p_key+'&lang=ja&page=1&rpp='+p_rpp+'&callback=?';
	}
	$.getJSON(url, function(json) {
		
		// alert(json["results"].length-1);
		
		for (ii=json["results"].length-1; ii>=0; ii--) {
			json["results"][ii].text = z2h_word(json["results"][ii].text);
			json['results'][ii].timestamp = getTimestamp(json['results'][ii].created_at);
			json['results'][ii].created_at = convCreatedAt(json['results'][ii].timestamp);
			if (!p_isIncOld) {
				// 新しいものだけ格納
				if (json['results'][ii].timestamp >　last_timestamp[p_col]) {
					arr_tweet[p_col].unshift(json["results"][ii]);
					last_timestamp[p_col] = json['results'][ii].timestamp; // 上書きされて最後のタイムスタンプだけが残る
				}
				// alert( json['results'][ii].timestamp );
			} else {
				// 日時に関わりなく格納
				arr_tweet[p_col].unshift(json["results"][ii]);
				last_timestamp[p_col] = json['results'][ii].timestamp; // 上書きされて最後のタイムスタンプだけが残る
			}
		}
	});
	// alert('length='+arr_tweet[p_col].length);
}

function getType(p_key) {
	var _type = '';
	if (p_key.substr(0,1)=='#') {
		_type = 'tag';
	} else {
		_type = 'account';
	}
	// alert(p_key);
	return _type;
}

function convJSON2tag(P) {
	/*
	var created_at;
	var created = new Date();
	created_at = json[i].created_at.replace(/^(\w+) (\w+) (\w+) (.*?)( .{4})$/,"$1, $3 $2$5 $4");
	created.setTime(getTimestamp(created_at));
	created_at = (created.getYear()+1900) +'/'+ (created.getMonth()+1) +'/'+ created.getDate();
	*/
	return '<li><a href="http://twitter.com/'+P.from_user+'" target="_blank"><img alt="Dock_normal" src="'+P.profile_image_url+'" /></a><p>'+P.text+'<span class="screenName"><a href="http://twitter.com/'+P.from_user+'" target="_blank">'+P.from_user+'</a></span></p></li>';
}


function z2h_word(P) {
	P = P.replace(/([Ａ-Ｚａ-ｚ０-９＿＠])/g,
		function ($0){
			return String.fromCharCode($0.charCodeAt(0)-65248);
		});
	return P.replace(/　/g,'');
}


function showTw(p_col) {
	// alert(p_col);
	$("ul:eq("+p_col+")").prepend(convJSON2tag(arr_tweet[p_col-1].pop()));
	$("ul:eq("+p_col+") li:eq(0)").css('display','block');
	$("ul:eq("+p_col+") li:eq(0)").hide();
	$("ul:eq("+p_col+") li:eq(0)").fadeIn("slow");
}

function renderNewTw(p_col) {
	
	// この欄のキーワード
	var key = $("h3:eq("+(p_col-1)+") span a").text();
	var _type = getType(key);
	key = key.substr(1,key.length-1);
	// alert(key);
	
	// なければとってくる
	if (arr_tweet[p_col-1].length==0) {
		
		// それぞれ、一周目が終了したらボタン表示
		if (arr_isFirstRender[p_col-1]) {
			arr_isFirstRender[p_col-1] = false;
		} else {
			// ("#bt_pp_"+p_col).show();
			$("#bt_pp_"+p_col).css("visibility","visible");
		}
		
		if ( $("#bt_pp_"+p_col).attr('src')==onImg ) {
			getTw(p_col-1, 10, key, _type, false);
		}
	}
	// あれば表示
	if (arr_tweet[p_col-1].length>0) showTw(p_col);
}


var getArea = function() {
	if (getAreaTimer) {
		clearTimeout(getAreaTimer);
	}
	$.ajax({
		dataType: 'xml',
		url: 'http://radiko.jp/station/',
		beforeSend: function(xhr) {
			xhr.setRequestHeader("Pragma", "no-cache");
			xhr.setRequestHeader("Cache-Control", "no-cache");
			xhr.setRequestHeader("Expires", "Thu, 01 Jan 1970 00:00:00 GMT");
		},
		complete: function(xhr, textStatus) {
			// 1秒後にもっかい
			if (textStatus=='error') {
				getAreaTimer = setTimeout(getArea,1000);
			}
		},
		success: function(xml) {
			var areaName = $("stations",$(xml)).attr("area_name");
			// alert(areaName);
		}
	});
};



/* 
///////////////////////////////////////////////////////////////////////////////////////// */
var def = 14; // 15個なのはハッシュタグ検索結果だけ？
var i = 0;
$.timer(timer_ms_1st, function (timer) {
	if ( ((def-i)>=0) && (isUseHtmlStuck) ) {
		// 初期
		for (j=1; j<=($("ul").length-1); j=j+1) {
			$("ul:eq("+j+") li:eq("+(def-i)+")").css('display','block');
			$("ul:eq("+j+") li:eq("+(def-i)+")").hide();
			$("ul:eq("+j+") li:eq("+(def-i)+")").fadeIn("slow");
		}
		i = i+1;
	} else {
		// alert('初期ロット終了');
		
		if(timer_ms_max >= timer_ms) {
			timer_ms = timer_ms + timer_ms_increase;
		}
		/*
		// すべて一周目が終了したらタイマーを大きくする
		isFinishedFirstRender = true;
		for (j=0; j<($("ul").length-1); j=j+1) {
			if (arr_isFirstRender[j]==false) {
				isFinishedFirstRender = false;
			}
		}
		if (isFinishedFirstRender==true) {
			timer_ms = timer_ms_max;
			alert(timer_ms);
		}
		*/
		timer.reset(timer_ms);
		// timer.stop();
		for (j=1; j<=($("ul").length-1); j=j+1) {
			// 再生ONの列だけ処理 + ボタン非表示(1週目)のときはすべて処理
			if ( ($("#bt_pp_"+j).attr('src')==onImg) || ($("#bt_pp_"+j).css("visibility")=='hidden') ) {
				renderNewTw(j);
			}
		}
	}
});





/* scroll (OLD FASHION)
///////////////////////////////////////////////////////////////////////////////////////// */

var speed = 5; // スクロールのスピード（1に近いほど速く）
var move = 100; // スクロールのなめらかさ（1に近いほどなめらかに）

// 初期化
var x = 0;
var y = 0;
var nx = 0;
var ny = 0;

function scroll() {
	window.scrollBy(-move, 0); // スクロール処理
	var rep = setTimeout("scroll()", speed);
	// スクロール位置をチェック（IE用）
	if(document.all){
		x = document.body.scrollLeft;
		y = document.body.scrollTop;
	}
	// スクロール位置をチェック（NN用）
	else if(document.layers || document.getElementById){
		x = pageXOffset;
		y = pageYOffset;
	}
	if(nx == x && ny == y){ // スクロールし終わっていたら処理を終了
		clearTimeout(rep);
	}
	else{
		nx = x;
		ny = y;
	}
}




function convCreatedAt(timestamp){
	var created = new Date();
	created.setTime(timestamp);

	var now = new Date();
	var t = now.getTime() - created.getTime();

	t = Math.floor(t/1000);
	if(t<86400){
		if(t < 3600){
			if(t < 60){
				return t + "秒前 ";
			}else{
				return Math.floor(t/60) + "分前 ";
			}
		}else{
			return '約'+Math.floor(t/3600) + "時間前 ";
		}
	}

	var d = new Date();
	var month = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
	var minutes = created.getMinutes();
	if(minutes < 10){minutes = '0'+minutes.toString();}
	t = created.getHours()+':'+minutes+' ';
	t+= (12 <= created.getHours()) ? 'PM ':'AM ';
	t+= month[created.getMonth()]+' ';
	t+= created.getDate()+'th';
	if(now.getFullYear() != created.getFullYear()){
		t += ", "+created.getFullYear();
	}

	return t;
}


function getTimestamp(created_at){
	var twtime = created_at; //'Tue, 10 Nov 2009 03:25:47 +0000';
	twtime = twtime.replace(/^(.*?), /,"");
	twtime = twtime.replace(/ \+(.*?)$/,"");
	twtime = twtime.replace(/^(.*?) (.*?) /,"$1 $2 ");

	var created = new Date(twtime);
	return created.getTime() + 32400000;
}
