var tw_api     = "http://search.twitter.com/search.json?callback=viewTwitter&rpp=30";
var post_cols  = ['id', 'text', 'from_user', 'created_at', 'profile_image_url'];
var tw_height  = 72;
var tw_title_height = 36;

function dispTweets()
{
    if (tw_ids.length == 0) {
	setTimeout(loadTweets, 700);
	return; 
    }
    tw_id = tw_ids.pop();
    $('tw_'+tw_id).appear();
    
    setTimeout(dispTweets, 700);
}

function loadTweets()
{
    $('tw_loading').show();
    $('tw_reload').hide();
    var q   = $('urle_name_ex_hougan').innerHTML;
    var api = tw_api+"&q="+q;
    if (last_tw_id>0) api += "&since_id="+last_tw_id;
    var s = document.createElement('script');
    var head = document.getElementsByTagName('head').item(0);
    s.setAttribute('type', 'text/javascript');
    s.setAttribute('src', api);
    s.setAttribute('charset', 'UTF-8');
    head.appendChild(s);
    $('tw_loading').fade();
    $('tw_reload').appear();
}

function viewTwitter(json)
{
    if (json['error'] != undefined) {
	switch (json['error']) {
	    case 'since date or since_id is too old':
	    last_tw_id=0;
	    loadTweets();
	    return 0;

	    case 'You must enter a query.':
	    $('urle_name_ex_hougan').innerHTML = $('urle_name').innerHTML;
	    loadTweets();
	    return 0;
	}
    }

    var res = json['results'];

    if (res != undefined && res.length>0) {
        // 古い順にいれてく
	for (var i=res.length-1; i>=0; i--) {
	    var col = mkTweetCol(res[i]);
	    $('tw_disp').innerHTML = col+$('tw_disp').innerHTML;
	    last_tw_id = res[i].id;
	    tw_num++;
	}
	$('tw_title').show();
	$('twitter').show();
    }
    else {
        // なにも表示するものが無ければbox非表示
	if (tw_num==0) {
	    $('twitter').hide();
       	    $('tw_title').hide();
	}
    }

    // 表示調整 (3つ以下の場合)
    if (tw_num <= 3) {
	Element.setStyle($('tw_disp'), {'height':(tw_height*tw_num)+'px'});
	Element.setStyle($('twitter'), {'height':(tw_height*tw_num)+25+'px'});
    } else {
	Element.setStyle($('tw_disp'), {'height':(tw_height*4)+'px'});
	Element.setStyle($('twitter'), {'height':(tw_height*4)+25+'px'});	
    }

    if (res != undefined && res.length>0) {
	setTimeout(dispTweets, 700);	
	cache_tws(res); // 新しいのがあればcache
    }
}

function cache_tws(res)
{
    var hid = $('human_id').innerHTML;
    var nid = $('node_id').innerHTML;
    var uri = "/timeline/post_tw";
    var q   = $('urle_name_ex_hougan').innerHTML;
    var params = "human_id="+hid+"&node_id="+nid+"&query="+q;
    for (var i=0; i<res.length; i++) {
	for (var n=0; n<post_cols.length; ++n) {
	    var col = i+"_"+post_cols[n];
	    var val = String(eval("res[i]."+post_cols[n]));
	    params += "&"+col+"="+val.urlEncode();
	}
    }

    new Ajax.Request(uri, {
	method: "POST",
	parameters:params,
	onSuccess:function(httpObj){
	    var res = get_response_text(httpObj);
	    replaceLinkText(res);
	},
	onFailure:function(httpObj){
	    alert('error');
    	}
    });    

}

function replaceLinkText(res)
{
    var ar = res.split(/\n/);
    for (var i in ar) {
	var col = ar[i].split(/\t/);
	if (col[1] != '') {
		$('tw_text_'+col[0]).innerHTML = col[1];
	}
    }
}

function mkTweetCol(res)
{
    var col = '';
    var text = res.text;
    
    var gsub_url = /(http:\/\/[-_.!~*\'\(\)a-zA-Z0-9_\-\;\/?:¥@&=+¥$,%#]+)/;
    text = text.gsub(gsub_url, "<a target='_blank' rel='nofollow' href='#{1}'>#{1}</a>");
    
    var gsub_user = /@[0-9a-zA-Z_]+/;
    text = text.gsub(gsub_user, "");

    var post_ago = mkAgo(res.created_at);
    
    col  = "<div id='tw_"+res.id+"' style='display:none;'>";
    col += "<table width='620' cellspacing=0 cellpadding=0><tr>";

    col += "<td valign='top' width='50' style='text-align:center; border-bottom:1px #AAAAAA dashed; padding:8px 0px 8px 8px;;'>";
    col += "<a href='http://twitter.com/"+res.from_user+"' target='_blank' rel='nofollow'>";
    col += "<img alt='"+res.from_user+"' src='"+res.profile_image_url+"' height='50' width='50'>";
    col += "</a></td>";

    col += "<td valign='top' style='border-bottom:1px #AAAAAA dashed; font-size:10pt; line-height:1.4em; padding:8px;'>";
    col += "<span id='tw_text_"+res.id+"'>"+text+"</span>";
    col += "<br /><span style='color:gray; margin-top:3px;'>"+post_ago+"</span> <span style='color:gray;'>tweet by "+res.from_user+"</span>";
    col += "</td>";

    col += "</tr></table></div>";

    tw_ids.unshift(res.id);
    
    return col;
}

function mkAgo(created_at)
{
    var now  = new Date();
    var date = new Date(created_at);

    var diff_sec = (now.getTime() - date.getTime()) / 1000;
    var str_ago  = '';
    if (diff_sec <60) {
	str_ago = Math.floor(diff_sec)+"秒前";
    }
    else if (diff_sec <=60*60) {
	str_ago = Math.floor(diff_sec/60)+"分前";
    }
    else if (diff_sec <=60*60*24) {
	str_ago = Math.floor(diff_sec/(60*60))+"時間前";  
    }
    else {
	str_ago = Math.floor(diff_sec/(60*60*24))+"日前";  
    }
    return str_ago;
}
