//
// timeline.js
// json script for tohobu site.
// this script require jquery(1.3.2-) and jquery.tablesorter.min.js.
// 
// ver. 0.1 by @kuzu_doh
//

//mainは取得メソッドを実行するだけ
$(function(){
  //2分間のウェイト
  var waittime = 2 * 60 * 1000;
  setTimeout("get_timeline()", waittime);
  return false;
});

//slideDownの為のcallback関数
//firefoxでは行を追加するとtdタグが1カラム目に詰めて表示されてしまう。
//対策としてslideDownによってdiaplay:noneが削除されるところで
//tdタグにdisplay:table-rowを設定する。
////////////////////////////////////////////////////////////////////
function _cb(){
  try{
    $("#row").css("display","table-row");
  }
  // IE6,IE7では例外が発生
  catch(e) {
    //何もしない
  }
}

//TwitterのJSONよりJSTの投稿時間を取得する関数
//
function get_jst(gmttext){
  // 日時データを要素分解
  var created_at = gmttext.split(" ");

  // 投稿日時変換 "Mon Dec 01 14:24:26 +0000 2008" -> "Dec 01, 2008 14:24:26"
  var post_date  = created_at[1] + " "
                 + created_at[2] + ", "
                 + created_at[5] + " "
                 + created_at[3];

  // 日時データ処理
  var date = new Date(post_date);     // 日付文字列 -> オブジェクト変換
  date.setHours(date.getHours() + 9); // UTC -> JST (+9時間)
  
  // 投稿日時変換 -> "2008/12/01 23:24:26"
  var year = date.getYear() + 1900;
  var month = date.getMonth() + 1;
  if (month < 10){
    month = "0" + month;
  }
  if (date.getDate() < 10 ){
    var day = "0" + date.getDate();
  }else{
    var day = date.getDate();
  }
  if (date.getHours() < 10 ){
    var hour = "0" + date.getHours();
  }else{
    var hour = date.getHours();
  }
  if (date.getMinutes() < 10 ){
    var minute = "0" + date.getMinutes();
  }else{
    var minute = date.getMinutes();
  }
  if (date.getSeconds() < 10 ){
    var second = "0" + date.getSeconds();
  }else{
    var second =  date.getSeconds();
  }
  
  var jsttext = year + "/"
              + month + "/"
              + day + " "
              + hour + ":"
              + minute + ":"
              + second;
  
  return jsttext
}

//get_timeline関数
//
//東方部タイムラインのJSONデータを取得し、テーブルの上に追記する。
//(html表示より新しいものがあれば)
///////////////////////////////////////////////////////////////////
function get_timeline(){
  //ajax通信を行なう
  $.ajax({
    type: "get",
    dataType: "json",
    
    //サーバへのリクエストデータ
    data: {
      "req1": "dummy1"
    },
    
    cache: false,
    
    //取得先URL
    url: "./timeline.json",
    
    //レスポンスのためのコールバック関数
    success: function(res){
      //TABLE要素の取得
      var table = $("#timeline");
      var tr = $("#timeline > tbody > tr");
      
      //既存TABLEの「一番上の」ID要素を取得する
      var recent_id = $("#timeline > tbody > tr:eq(0) > td:eq(3)").html();
      
      //list変数を回してTABLEオブジェクトに行を追加していく
      $.each(res, function(i, item){
        if( parseInt(item.id) > parseInt(recent_id) ){
          //JSONのデータより投稿時間のJSTを取得する
          var posttime = get_jst(item.created_at);
          
          //行の追加
          table.prepend($("<tr id=\"row\" style=\"display:none\" />")
            .append($("<td style=\"padding: 0px;\" />")
              .append($("<div id=\"cell01\" style=\"height: 90px; padding: 1px;\">")
                .append($("<a href=\"http://twitter.com/" + item.user_name + "\" target=_blank>")
                  .append($("<img src=\"" + item.icon_url + "\" width=\"48\" height=\"48\">")
                    ))))
            .append($("<td style=\"padding: 0px;\" />")
              .append($("<div id=\"cell02\" style=\"height: 90px; padding: 1px;\">")
                .append($("<a href=\"http://twitter.com/" + item.user_name + "\" target=_blank>")
                  .append("@" + item.user_name)
                    )))
            .append($("<td style=\"padding: 0px;\" />")
              .append($("<div id=\"cell03\" style=\"height: 90px; padding: 1px;\">")
                .append($("<p>")
                  .append(item.post))
                .append($("<p class=\"posttime\">")
                  .append($("<a href=\"http://twitter.com/" + item.user_name + "/status/" + item.id + "\" target=_blank>")
                    .append("投稿時間：　" + posttime)
                      ))))
            .append($("<td style=\"display:none\">").append(item.id))
          )
        }

        $("#cell01").slideDown("slow");
        $("#cell02").slideDown("slow");
        $("#cell03").slideDown("slow");
        $("#row").slideDown("slow", _cb());
      });
    },
    
    //リクエストエラーの時のコールバック関数
    error: function(xml, myStatus, e){
      console.error(xml, myStatus, e);
    }
  });
  
  //再帰的に実行させる。待ち時間はmain関数と同じ(2分間)
  var waittime = 2 * 60 * 1000;
  setTimeout("get_timeline()", waittime);
}
