// -----------------------------------------------------------------------
// TINAMI Comike Map System Ver 2006.10.19
// (c) 2006 TINAMI. All rights reserved.
// mapchange.js: 動的マップ制御とインクリメンタル検索制御
// -----------------------------------------------------------------------
var timerID;

// 選択された日付＋エリアのマップとサークル情報を表示
function mapChange(day, area)
{
  // マップ内のフレームに引数を設定し、マップを更新する
  var ctrl = window.tinamap.document.forms['ctrl'];
  ctrl.mode.value = 'btn';
  ctrl.day.value = day;
  ctrl.area.value = area;
  ctrl.tag.value = "0"; // submit.click が終わったら1になる
  ctrl.submit.click();

  // サークル一覧タイトルの変更
  var area_text = [ '', '東１ホール', '東２ホール', '東３ホール', '東４ホール', '東５ホール', '東６ホール', '西１ホール', '西２ホール', '東ホール・外周サークル' ];
  var comike_no = ctrl.comike_no.value;
  var title = getTitle(String(day) + '日目・' + area_text[area]);
  $("search-title").innerHTML = '<h2>' + title + '</h2>';

  // 該当するサークル一覧を表示
  var url = '/comike/search';
  var param = 'output=json&day=' + String(day) + '&hall=' + String(area);
  var myAjax = new Ajax.Request( url, { method: 'get', parameters: param, onComplete: _getCircleListComplete });

  // トラバ領域をクリア
  hideTrackback();
}

// 入力されたキーワードに該当するサークル情報を表示
function search_keyword(keyword, offset)
{
  // キーワード未入力の場合、サークル一覧をクリアする
  if (keyword.length <= 0) {
      $("search-circle").innerHTML = '<p>キーワードを入力して下さい</p>';
      return ;
  }

  // サークル一覧タイトルの変更
  var title = getTitle('キーワード検索結果');
  title += ' <img src="/img2/twitcomike/close.gif" onclick="clearSearchCircle();" />';
  $("search-title").innerHTML = '<h2>' + title + '</h2>';
  if (offset == 0) {
      // 新規検索の場合は表示
      $("search-circle").innerHTML = '<p>検索中です…</p>';
  }

  // 該当するサークル一覧を表示
  var url = '/comike/map/api/search';
  var param = 'word=' + encodeURIComponent(keyword) + '&offset=' + offset + '&mode=and&format=html';
  var myAjax = new Ajax.Request( url, {
      method: 'get',
      parameters: param,
      onComplete: function(Request) {
        // もし検索開始位置が0でなかった場合は「もっと読む」であると判断し、後ろに追加する
        var offset = Request.responseText.match(/offset:([0-9+])/);
        var html = Request.responseText;
        if (offset) {
            if (offset[1] > 0) {
                html = $("search-circle").innerHTML + Request.responseText;
            }
        }
        Element.update("search-circle", html);

        // 近郊サークル情報を非表示にする
        clearNearCircle();
      }
  });
}

// 最近登録されたサークル情報を表示
function search_newentry()
{
  // サークル一覧タイトルの変更
  var title = getTitle('新着サークル');
  $("search-title").innerHTML = '<h2>' + title + '</h2>';
  $("search-circle").innerHTML = '<p>検索中です…</p>';

  // 該当するサークル一覧を表示
  var url = '/comike/map/newentry.php';
  var param = 'format=xml';
  var myAjax = new Ajax.Request( url, { method: 'get', parameters: param, onComplete: _getCircleListComplete });
}

// サークル情報一覧作成
function _getCircleListComplete(Request)
{
  // JSONで返ってくるので中身を解析
  var circles = '';
  var responseText;
  try {
    if (Request.responseXML) { // Reject for Firefox
      var xmlDoc = Request.responseXML;
      if ("firstChild" in xmlDoc) { // Reject for IE Step1
        if (xmlDoc.firstChild) { // Reject for IE Step2
          responseText = xmlDoc.documentElement.firstChild.nodeValue;
          if (responseText.length > 6) { // Reject for Opera
            circles = eval('(' + responseText + ')');
          }
        }
      }
    }
  } catch(e) {
    _InternalErrorMsg('データ解析時に異常が発生しました', e, responseText, '_getCircleListComplete');
    return ;
  }

  if (!circles.length) {
    $("search-circle").innerHTML = '<p>該当するサークル情報はありません</p>';
    return ;
  }

  // リストを生成して表示
  var html = '';
  for (i=0; i<circles.length; ++i) {
    var data = circles[i];
    if (data) {
      var comments = data.comment.split("<br>"); // 最初の行をポップアップ表示
      var line = '<li><strong><a href="#map" onClick="viewTragetCircle(\'' + data.id + '\');" title="' + comments[0] + '...">' + data.space + '</a></strong>&nbsp;';
      if (data.url.length > 0) {
        line += '<a href="' + data.url + '" target="_blank">' + data.name + '</a>';
      } else {
        line += data.name;
      }
      line += '&nbsp;(' + data.owner + ' さん)</li>';
      html += line;
    }
  }
  $("search-circle").innerHTML = '<ul>' + html + '</ul>';

  // 近郊サークル情報を非表示にする
  clearNearCircle();
}

// サークル一覧で選択されたサークルをマップに表示
function viewTragetCircle(id)
{
  // 該当するサークル一覧を表示
  var url = '/comike/map/api/getlocate';
  var param = 'id=' + id;
  var myAjax = new Ajax.Request( url, {
    method: 'get', parameters: param,
    onComplete: function(Request) {
      try {
        ret = eval('(' + Request.responseText + ')');
        if (ret.found) {
          var ctrl = window.tinamap.document.forms['ctrl'];
          ctrl.mode.value = 'circle';
          ctrl.comike_no.value = ret.comike_no;
          ctrl.day.value = ret.day;
          ctrl.area.value = ret.area;
          ctrl.x.value = ret.x;
          ctrl.y.value = ret.y;
          ctrl.id.value = id;
          ctrl.tag.value = "0"; // submit.click が終わったら1になる
          ctrl.submit.click();
        } else {
          var ctrl = window.tinamap.document.forms['ctrl'];
          ctrl.tag.value = "1";
          alert('指定したサークルスペースは存在しません。');
        }
      } catch(e) {
        _InternalErrorMsg('データ解析時に異常が発生しました', e, Request.responseText, '_getCircleListComplete');
        return ;
      }
    }
  });

  // マップを読み込み終わるまで待つ
  timerID = setInterval('waitForViewCircle()', 200);
}

// マップが読み込み終わったら、サークル情報を表示する
function waitForViewCircle()
{
  if (window.tinamap.document.forms['ctrl'].tag.value == "1") {
    clearInterval(timerID);
    window.tinamap.document.forms['click'].submit.click();
  }
}

function getTitle(cond)
{
  var title = 'コミケ' + String(window.tinamap.document.ctrl.comike_no.value);
  if (cond) {
    title += '：' + cond;
  }
  return title;
}

// 古いマップを表示していたら警告する
function setOldMapWarning(current_no)
{
  p = parent.location.search.substr(1).split("=");
  if (p[0] == 'id') {
    this_no = p[1].substr(0,4);
    this_no = this_no.replace(/^0*/, '');  // 頭の0を取り除く
    if (current_no != this_no) {
      $("map-notice").innerHTML = 'これはコミックマーケット' + this_no + 'の情報です。最新のマップではありません。';
    }
  }
}

// 検索結果を削除する
function clearSearchCircle()
{
  Element.update('search-title', '');
  Element.update('search-circle', '');
}

