// -----------------------------------------------------------------------
// TINAMI Comike Map System Ver 2006.10.25
// (c) 2006 TINAMI. All rights reserved.
// mapcollection.js: ビットマップの集合をまとめて管理する
// -----------------------------------------------------------------------
var MapCollection = Class.create();
MapCollection.prototype = {
  initialize: function ()
  {
    this.loaded_map = $H({});   // 読み込んだビットマップを保存
    this.currentBitmapId = '';  // 現在表示しているビットマップのID
    this.prefixImageScale = ['',  'A', 'B'];  // 拡大・縮小によるビットマップID

    // ビットマップ情報
    var east_x_parts = 17; var east_y_parts =  7;
    var west_x_parts =  7; var west_y_parts = 10;
    var image_width = 500; var image_height = 500;

    this.mapinfo = $H({
    // 拡大
      D1A1: $H({ id: 'D1A1', width: 8148, height: 3220, parts_width: 500, parts_height: 500 }),
      D1A2: $H({ id: 'D1A2', width: 8148, height: 3220, parts_width: 500, parts_height: 500 }),
      D1A3: $H({ id: 'D1A3', width: 3020, height: 4948, parts_width: 500, parts_height: 500 }),
      D1A4: $H({ id: 'D1A4', width: 3020, height: 4948, parts_width: 500, parts_height: 500 }),
      D2A1: $H({ id: 'D2A1', width: 8148, height: 3220, parts_width: 500, parts_height: 500 }),
      D2A2: $H({ id: 'D2A2', width: 8148, height: 3220, parts_width: 500, parts_height: 500 }),
      D2A3: $H({ id: 'D2A3', width: 3020, height: 4948, parts_width: 500, parts_height: 500 }),
      D2A4: $H({ id: 'D2A4', width: 3020, height: 4948, parts_width: 500, parts_height: 500 }),
      D3A1: $H({ id: 'D3A1', width: 8148, height: 3220, parts_width: 500, parts_height: 500 }),
      D3A2: $H({ id: 'D3A2', width: 8148, height: 3220, parts_width: 500, parts_height: 500 }),
      D3A3: $H({ id: 'D3A3', width: 3020, height: 4948, parts_width: 500, parts_height: 500 }),
      D3A4: $H({ id: 'D3A4', width: 3020, height: 4948, parts_width: 500, parts_height: 500 }),
    // 縮小
      D1B1: $H({ id: 'D1B1', width: 1270, height: 480, parts_width: 1270, parts_height: 480 }),
      D1B2: $H({ id: 'D1B2', width: 1270, height: 480, parts_width: 1270, parts_height: 480 }),
      D1B3: $H({ id: 'D1B3', width:  480, height: 770, parts_width:  480, parts_height: 770 }),
      D1B4: $H({ id: 'D1B4', width:  480, height: 770, parts_width:  480, parts_height: 770 }),
      D2B1: $H({ id: 'D2B1', width: 1270, height: 480, parts_width: 1270, parts_height: 480 }),
      D2B2: $H({ id: 'D2B2', width: 1270, height: 480, parts_width: 1270, parts_height: 480 }),
      D2B3: $H({ id: 'D2B3', width:  480, height: 770, parts_width:  480, parts_height: 770 }),
      D2B4: $H({ id: 'D2B4', width:  480, height: 770, parts_width:  480, parts_height: 770 }),
      D3B1: $H({ id: 'D3B1', width: 1270, height: 480, parts_width: 1270, parts_height: 480 }),
      D3B2: $H({ id: 'D3B2', width: 1270, height: 480, parts_width: 1270, parts_height: 480 }),
      D3B3: $H({ id: 'D3B3', width:  480, height: 770, parts_width:  480, parts_height: 770 }),
      D3B4: $H({ id: 'D3B4', width:  480, height: 770, parts_width:  480, parts_height: 770 })
    });

    // エリア毎の初期座標情報
    this.locateinfo = $H({
    // 拡大時
      btnUp: $H({
        btnE1: $H({ area_id: 'A1', x: 6400, y: 1700, origin: 5570, width: 2440 }),
        btnE2: $H({ area_id: 'A1', x: 3870, y: 1700, origin: 2560, width: 3010 }),
        btnE3: $H({ area_id: 'A1', x: 1150, y: 1700, origin:    0, width: 2560 }),
        btnE4: $H({ area_id: 'A2', x: 1150, y: 1700, origin:    0, width: 2560 }),
        btnE5: $H({ area_id: 'A2', x: 3870, y: 1700, origin: 2560, width: 3010 }),
        btnE6: $H({ area_id: 'A2', x: 6400, y: 1700, origin: 5570, width: 2440 }),
        btnW1: $H({ area_id: 'A3', x: 1240, y:  880, origin:    0, width: 3000 }),
        btnW2: $H({ area_id: 'A4', x: 1700, y:  880, origin:    0, width: 3150 }),
        btnE9: $H({ area_id: 'A1', x: 7930, y: 2694, origin: 5570, width: 2440 })
      }),
    // 縮小時
      btnDw: $H({
        btnE1: $H({ area_id: 'B1', x: 1100, y:  240, origin:  880, width:  390 }),
        btnE2: $H({ area_id: 'B1', x:  630, y:  240, origin:  410, width:  470 }),
        btnE3: $H({ area_id: 'B1', x:  240, y:  240, origin:    0, width:  410 }),
        btnE4: $H({ area_id: 'B2', x:  240, y:  240, origin:    0, width:  410 }),
        btnE5: $H({ area_id: 'B2', x:  630, y:  240, origin:  410, width:  470 }),
        btnE6: $H({ area_id: 'B2', x: 1100, y:  240, origin:  880, width:  390 }),
        btnW1: $H({ area_id: 'B3', x:  250, y:  240, origin:    0, width:  500 }),
        btnW2: $H({ area_id: 'B4', x:  250, y:  240, origin:    0, width: 3150 }),
        btnE9: $H({ area_id: 'B1', x:  880, y:  240, origin:  880, width:  390 })
      })
    });
  },

  // 指定された日付＋ホールのマップを読み込む
  // day: 日付, area: 1-東1-3, 2-東4-6, 3-西1, 4-西2, scale: 1:拡大, 2:縮小
  load: function (map_id, comike_no, day, area, scale, needUnload)
  {
    var map_base = 'D' + String(day) + this.prefixImageScale[scale] + String(area); // マップファイル名
    var id = 'C' + String(comike_no) + map_base; // ビットマップのID

    // まだ読み込んでいない場合、動的に読み込む
    if (!this.loaded_map[id]) {
      var inf = this.mapinfo[map_base];
      this.loaded_map[id] = new Map(comike_no, map_base, inf.width, inf.height, inf.parts_width, inf.parts_height);
      this.addTrackbackIcon(id, comike_no, day, area, scale);
    }

    // 既に画像を読み込んでいる場合、現在のビットマップを取り外す
    if (needUnload) {
      this.loaded_map[this.currentBitmapId].hide(map_id);
    }

    // 現在のビットマップを設定
    this.currentBitmapId = id;

    // ビットマップを表示
    this.loaded_map[id].show(map_id);

    // 位置情報をリセット
    this.loaded_map[id].resetPosition();

    return this.loaded_map[id];
  },

  // 現在アクティブなマップを返す
  getCurrentMap: function ()
  {
    return this.loaded_map[this.currentBitmapId];
  },

  // トラックバックアイコンを追加する
  addTrackbackIcon: function(id, comike_no, day, area, scale)
  {
    this.AjaxDone = false;

    var url = '/comike/map/tbiconjson.php';
    var param = String().concat('day=', day, '&area=', area, '&comike_no=', comike_no);
    var myAjax = new Ajax.Request( url, {
      method: 'get', parameters: param, onComplete: function(Request) {
        try {
          var xmlDoc = Request.responseXML;
          var responseText = xmlDoc.documentElement.firstChild.nodeValue;
          var ret = eval('(' + responseText + ')');
          if (ret.found) {
            for (i=0; i<ret.trackback.length; ++i) {
              var tb = ret.trackback[i];
              var map = control.mapCollection.loaded_map[id];
              if (scale == 1) {
                map.addTrackbackIcon(parseInt(tb.left) + 18, parseInt(tb.top) + 18);
              } else {
                map.addTrackbackLine(tb.s_left, tb.s_top, tb.s_width, tb.s_height);
              }
            }
          }
        } catch(ex) {
         _MapInternalErrorMsg("データ解析時に異常が発生しました", ex, Request.responseText, 'addTrackbackIcon');
        }
      }
    });
  }
};


