// -----------------------------------------------------------------------
// 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(fSubmit)
{
  // キーワード未入力の場合、サークル一覧をクリアする
  if ($('map_keyword').word.value == "") {
    $("search-circle").innerHTML = '<p>キーワードを入力して下さい</p>';
    return ;
  }
  // 「検索」ボタン経由でない場合、規定文字数に達しなければ何もしない
  if (!fSubmit && $('map_keyword').word.value.length <= 1) {
    return ;
  }

  // サークル一覧タイトルの変更
  var title = getTitle('キーワード検索結果');
  $("search-title").innerHTML = '<h2>' + title + '</h2>';

  // 該当するサークル一覧を表示
  var url = '/comike/search';
  var param = Form.serialize($('map_keyword'));
  var myAjax = new Ajax.Request( url, { method: 'get', parameters: param, onComplete: _getCircleListComplete });
}

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

  // 該当するサークル一覧を表示
//  var url = '/comike/search';
//  var param = 'output=json&order=new';
  var url = '/comike/map/newentry.php';
  var param = '';
  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;<a href="' + data.url + '" target="_blank">' + data.name + '</a>&nbsp;(' + data.owner + ' さん)</li>';
      html += line;
    }
  }
  $("search-circle").innerHTML = '<ul>' + html + '</ul>';
}

// サークル一覧で選択されたサークルをマップに表示
function viewTragetCircle(id)
{
  // 該当するサークル一覧を表示
  var url = '/comike/map/getlocate.php';
  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();
        }
      } 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 + 'の情報です。最新のマップではありません。';
    }
  }
}
