//ver2.2
//-----------------------------------------------------------------------------
// 初期処理
//-----------------------------------------------------------------------------
function init()
{
  //
  // オブジェクト生成
  //
  obj_area = document.getElementById("area");	// 開催場所リスト	
  obj_calendar = document.getElementById("calendar");
						// カレンダー
  obj_list = document.getElementById("list");	// イベントリスト

  //
  // 初期化
  //   - APIリファレンス
  //     http://www.tokyoartbeat.com/resources/doc/api
  //
  timeout_msec = 3000;				// リクエストタイムアウト時間
						// (ミリ秒)

  mainColor   = "#ff188a";			// 基本色(濃いピンク)

  normalColor = "#ffffff";			// 通常色
  activeColor = "#ffeff5";			// アクティブ色

  before_event_num = 0;				// 前回アクティブイベント

  img_graph      = "/image/graph.gif";		// グラフ(1日分)
  img_graph_cont = "/image/graph_cont.gif";	// グラフ(1日分...継続用)

  init_schedule  = "upcomint";			// スケジュール
  init_range     = "3000m";			// 範囲
  init_num       = "20";			// 出力件数
  init_sort      = "closingsoon";		// 出力結果表示順

  xml_req        = "http://www.tokyoartbeat.com/list/event_lastdays.ja.xml";
//xml_req        = "http://tal.private.jp/tmp/sample1.xml";
//xml_req        = "http://tal.l-w-i.net/tmp/sample1.xml";
						// 開催中イベント取得XML

  event_url_head = "http://www.tokyoartbeat.com/event/";
						// イベント詳細URLヘッダ

//  api_req_head = "http://www.tokyoartbeat.com/list/event_searchNear/?";
						// APIリクエストヘッダ

  //
  // イベント情報格納エリア定義
  //
  event_area_list  = new Array(			// イベントエリアリスト(ID)
    "ginza_marunouchi",
    "ueno_yanaka",
    "koto_odaiba",
    "nihonbashi",
    "aoyama_omotesando",
    "shinjuku",
    "shibuya_setagaya",
    "akasaka_roppongi",
    "ebisu_nakame_daikan",
    "musashino_tama",
    "kanagawa",
    "other");

  event_area_name_list  = new Array(		// イベントエリアリスト(日本語)
    "銀座、新橋",
    "上野、谷中、浅草",
    "両国、清澄、木場、お台場",
    "丸の内、大手町、日本橋、京橋、九段",
    "表参道、青山",
    "新宿、池袋",
    "渋谷、世田谷",
    "六本木、赤坂",
    "中目黒、恵比寿",
    "武蔵野、多摩",
    "横浜、神奈川",
    "関東その他");
						// イベントエリア名リスト

  event_id_list    = new Array();		// イベントIDリスト
  event_name_list  = new Array();		// イベント名
  event_url_list   = new Array();		// イベント詳細URL
  event_place_name_list = new Array();		// 開催場所
  event_place_url_list  = new Array();		// 開催場所詳細URL
  event_start_list = new Array();		// 開始日
  event_end_list   = new Array();		// 終了日
  event_rest_list  = new Array();		// 残り開催日数
  event_lat_list   = new Array();		// 開催場所-緯度
  event_lon_list   = new Array();		// 開催場所-経度
}

//-----------------------------------------------------------------------------
// 日時データ -> エポック秒変換
//-----------------------------------------------------------------------------
function date2epoch(year, mon, day, hour, min, sec)
{
  var day = new Date(year, mon - 1, day, hour, min, sec);

  return(day);
}

//-----------------------------------------------------------------------------
// 座標変換:日本測地系 -> 世界測地系(wgs84)
//-----------------------------------------------------------------------------
function latlon_tky2world(lat, lon)
{
  var lat_world = lat - lat * 0.00010695  + lon * 0.000017464 + 0.0046017;
  var lon_world = lon - lat * 0.000046038 - lon * 0.000083043 + 0.010040;

  return (lat_world + "," + lon_world);
}

//-----------------------------------------------------------------------------
// イベント強調
//-----------------------------------------------------------------------------
function activate_event(num)
{
  //
  // 前回イベントの背景色クリア
  //
  if (before_event_num != 0)
  {
    var before_event_one = "event_" + before_event_num;

    before_obj_event = document.getElementById(before_event_one);

    before_obj_event.style.backgroundColor = normalColor;
  }

  //
  // 該当イベントの背景色変更
  //
  var event_one = "event_" + num;

  obj_event = document.getElementById(event_one);

  obj_event.style.backgroundColor = activeColor;

  //
  // 後処理
  //
  before_event_num = num;			// イベント番号を退避
}

//-----------------------------------------------------------------------------
// XML取得
//-----------------------------------------------------------------------------
function get_timeline()
{
  //
  // イベント情報検索
  //
  xmlHttp = new createXMLHttp();		// XMLHttpRequest生成
  var req = "get.cgi?url=" + escape(xml_req);	// リクエスト生成

  xmlHttp.open("GET", req, true);		// リクエスト送信

  xmlHttp.onreadystatechange = function()
  {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
						// リクエスト正常終了
    {
      //
      // データ取得
      //
      var xml_data = xmlHttp.responseXML;

      var event = xml_data.getElementsByTagName("Event");

      for (var i = 0; i < event.length; i++)
      {
        //
        // イベント詳細取得
        //
        event_id = event[i].getAttribute("id");

        event_area_id 
          = event[i].getElementsByTagName("Venue")[0].getElementsByTagName("Area")[0].getAttribute("areaId");
						// 開催エリアID(例:nihonbashi)

        if(!!event_id_list[event_area_id])	// イベントIDリストの
						// 開催エリアID毎の配列が
						// 存在しなければ作成
        {
        }
        else
        {
          event_id_list[event_area_id] = new Array();
        }

        event_id_list[event_area_id].push(event_id);
						// イベントID
						// (イベント開催エリアに紐付け)

        event_name_list[event_id]
          = event[i].getElementsByTagName("Name")[0].firstChild.nodeValue;
						// イベント名(日本語)

        event_url_list[event_id] = event_url_head + event_id;
						// イベント詳細URL

        event_place_url_list[event_id]
          = event[i].getElementsByTagName("Venue")[0].getAttribute("href");
						// 開催場所詳細URL

        event_place_name_list[event_id]
          = event[i].getElementsByTagName("Venue")[0].getElementsByTagName("Name")[0].firstChild.nodeValue;
						// 開催場所(例:INAXギャラリー)

        event_start_list[event_id]
          = event[i].getElementsByTagName("DateStart")[0].firstChild.nodeValue;
						// 開始日

        event_end_list[event_id]  
          = event[i].getElementsByTagName("DateEnd")[0].firstChild.nodeValue;
						// 終了日

        event_lat_list[event_id] 
          = event[i].getElementsByTagName("Latitude")[0].firstChild.nodeValue;
						// 開催場所緯度

        event_lon_list[event_id] 
          = event[i].getElementsByTagName("Longitude")[0].firstChild.nodeValue;
						// 開催場所経度
      }

      //
      // カレンダー生成
      //
      day_list = make_calendar();

      //
      // イベント出力
      //
      var event_num = 1;
      var timeline = "";

      for (var area_no = 0; area_no < event_area_list.length; area_no++)
      {
        event_area = event_area_list[area_no];
        event_area_name = event_area_name_list[area_no];

        // 当該地域のイベントがなければ次ループへ
        if (!!event_id_list[event_area])
        {
        }
        else
        {
            continue;
        }

        timeline += "<h3>" + event_area_name + "エリア</h3>\n";
        timeline += "<div id='area_" + event_area + "'>\n";

        for (var j = 0; j < event_id_list[event_area].length; j++)
        {
          event_id   = event_id_list[event_area][j];
						// イベントID
          title      = event_name_list[event_id];
						// タイトル
          url        = event_url_list[event_id];
						// 詳細ページURL
          place_name = event_place_name_list[event_id];
						// 開催場所
          place_url  = event_place_url_list[event_id];
						// 開催場所URL
          lat        = parseFloat(event_lat_list[event_id]);
						// 開催場所(緯度)
          lon        = parseFloat(event_lon_list[event_id]);
						// 開催場所(経度)

          lat_lon    = latlon_tky2world(lat, lon);
						// 日本測地系 -> 世界測地系変換

          // 本日
          yyyy = today.getFullYear();
          mm   = today.getMonth() + 1;
          dd   = today.getDate();
          now_date_epoch = date2epoch(yyyy,mm,dd,0,0,0) / 1000 / 86400;

          // 終了日時
          end_date   = event_end_list[event_id].split("-");
          yyyy = parseInt(end_date[0],10);
          mm   = parseInt(end_date[1],10);
          dd   = parseInt(end_date[2],10);
          end_date_epoch = date2epoch(yyyy,mm,dd,0,0,0) / 1000 / 86400;

          // 開催期間計算
          rest_day = Math.ceil(end_date_epoch - now_date_epoch ) + 1;

          // 開催期間が1日未満(開催終了)なら次ループへ
          if (rest_day < 1)
          {
            continue;
          }

          timeline += "<ul id='event_" + event_num + "'>";

          // Tweet用URL生成
          tweet_url = "http://twitter.com/home?status=%e3%82%a2%e3%83%bc%e3%83%88%e3%82%a4%e3%83%99%e3%83%b3%e3%83%88%e3%80%8e" + title + " / " + place_name + "%e3%80%8f" + url;

          // タイトル行生成
          timeline += "<li class='title'>";
          timeline += "<a href='" + tweet_url + "' onclick='window.open(\"" + tweet_url + "\"); return false;'><img src='/image/icon_tweet.gif' alt='Twitterでつぶやく' /> </a>";
          timeline += "<a href='" + url + "' onclick='activate_event(" + event_num + ");window.open(\"" + url + "\"); return false;'>" + title + "</a>";
						// タイトル
          timeline += " / <a href='/' onclick='activate_event(" + event_num + ");gmap_marker(" + lat_lon + ",\"" + escape(place_name) + "\",\"" + place_url + "\");return false;'>" + place_name + "</a>";
						// 開催場所(例:六本木ヒルズ)
          timeline += "</li>";

          // 付加情報行生成
          timeline += "<li class='info'>";

          for (var i = 1; i < max_days; i++)
          {
            if (i > rest_day)
            {
              break;
            }

            timeline += "<img src='" + img_graph + "' alt='' />";
          }

          if (rest_day == max_days)
          {
            timeline += "<img src='" + img_graph + "' alt='' />";
          }

          if (rest_day > max_days)
          {
            timeline += "<img src='" + img_graph_cont + "' alt='' />";
            timeline += "<span class='lastday'> ～" + mm + "/" + dd + "</span>";
          }

          timeline += "</li>\n";

          timeline += "</ul>\n";

          event_num += 1;
        }

        timeline += "</div>\n";
      }

      // HTML出力
      obj_calendar.innerHTML = day_list;	// カレンダー

      obj_list.innerHTML = timeline;		// タイムライン
    }

  }

  xmlHttp.send(null);

}
