var g_gridX = 8, g_gridY = 6, g_gridH = 22;
var memoLength = 64;

var pos_dragStart = new Object();

var type_prev = 'kns'; // 敵キャラクタ配置作業を効率化させるため，前回入力したタイプを記憶させるための変数．

var g_color = new Array();
g_color['memo_own'] = '#ffffff';
g_color['memo_own_edit'] = '#ffcc99';
g_color['memo_own_save'] = '#cc3300';
g_color['memo_opn'] = '#ffcc99';
g_color['memo_shr'] = '#ffcc99';

var g_message = new Array();
g_message['memo_content_default'] = 'ここにメモを記入してください．';

var g_type_memo = new Array();
g_type_memo['all']   = '.*';
g_type_memo['item']  = 'coi|kns|str|kn1|knd|jck|axe|rng|hdn|opn'; // アイテム情報は公開すべき
g_type_memo['char']  = 'kur|nk[gr]|pt[gr]|met|pa[grs]|tog|pai|jug|ham|kil|ges|pu[br]|fir|fil|bub|kp[ba]|opn'; // 敵キャラクタ情報は公開すべき
g_type_memo['memo']  = 'art|arr|arb|arl|fkr|fkl';
g_type_memo['open']  = 'opn';
g_type_memo['share'] = 'shr';

//
// エリアマップ表示部の初期化
//
function init_areamap() {
  var areamap = document.getElementById('areamap');
  if( document.cookie.match(/w=(\w)&a=(\d)&m=(\w)/) ) {
    areamap.setAttribute('select_world', RegExp.$1);
    areamap.setAttribute('select_area', RegExp.$2);
    areamap.setAttribute('select_map', RegExp.$3);
  }
  else {
    areamap.setAttribute('select_world', '1');
    areamap.setAttribute('select_area', '1');
    areamap.setAttribute('select_map', 'a');
  }
  addListener(areamap, 'mousedown', dragStart_areamap, false);
  addListener(areamap, 'mouseout', dragEnd_areamap, false);
    
  var location = document.createElement('div');
  location.id = 'location';
  location.style.right = 0;
  location.style.top = 0;
  location.innerHTML = '&nbsp;';
  areamap.appendChild(location);

  var memo = document.createElement('div');
  memo.id = 'memo';
  document.getElementById('container').appendChild(memo);
  return;
}

//
// エリアマップをロードする
//
function loadAreamap(e) {
  document.getElementById('areamapselect').style.visibility = 'hidden';
  var areamap = document.getElementById('areamap');
  var inframe = document.getElementById('inframe');
  var img = document.createElement('img');
  var id_areamap = getStr_areamap();
  document.getElementById('memo').style.display = 'none';

  setCookie_areamap();

  getNode(document, 'h2', 0).innerHTML = 'Maps: ' + getStr_area() + '&nbsp;Map ' + areamap.getAttribute('select_map').toUpperCase();
  inframe.innerHTML = 'マップを読み込んでいます： ' + id_areamap;
  img.src = dir('img', 0) + 'maps/areamap/' + id_areamap + '.png';// + '?' + (new Date()).getTime();
  addListener(inframe, 'mousemove', displayLocation, false);
  addListener(inframe, 'mouseout', clearLocation, false);
  if( isUser() ) {
    addListener(inframe, 'dblclick', editMemo, false);
  }
  /*
  var imgLoaded = function() {
    document.getElementById('location').innerHTML = '';
    inframe.innerHTML = ''; inframe.style.left = 0;
    inframe.appendChild(img);
    return;
  }
  addListener(img, 'load', imgLoaded, false);
  */
  inframe.innerHTML = ''; inframe.style.left = 0;
  inframe.appendChild(img);
  loadMemos();
  //
  // info の処理
  //
  var i; for( i = 0; i < getNode(document.getElementById('tab_info'), 'a', -1).length; i++ ) {
    var a = getNode(document.getElementById('tab_info'), 'a', i);
    if( i == 0 ) { a.className = 'active'; }
    else { a.className = ''; }
  }
  displayInfo_base();

  document.getElementById('areamapselect').style.visibility = 'visible';
  return;
}

//
// アイテム，敵キャラ，メモ等，マップ上の情報をロードする
//
function loadMemos() {
  var i;
  var areamap = document.getElementById('areamap');
  var inframe = document.getElementById('inframe');
  var category_toggle = new Array();

  // inframe の子ノードのうち，memo クラスのもの（すなわちマップ画像以外）をすべて除去する
  for( i = getNode(inframe, 'img', -1).length -1; i >= 0; i-- ) {
    var img = getNode(inframe, 'img', i);
    if( img.className.indexOf('memo', 0) != -1 ) { inframe.removeChild(img); }
  }
  var func = function(xml) {
    var maptype = definedXMLTagName(xml, 'maptype')  ?  getNodeValue(xml, 'maptype', 0)  :  'a1';
    areamap.setAttribute('maptype', maptype);
    //
    // ユーザメモ
    //
    for( i = 0; i < getNode(xml, 'memo_usr', -1).length; i++ ) {
      var memo = getNode(xml, 'memo_usr', i);
      var uid       = getNodeValue(memo, 'uid', 0);
      var mid       = getNodeValue(memo, 'mid', 0);
      var id        = 'usr.' + uid + '.' + mid;
      var x         = getNodeValue(memo, 'x', 0);
      var y         = getNodeValue(memo, 'y', 0);
      var type      = getNodeValue(memo, 'type', 0);
      var openlevel = getNodeValue(memo, 'openlevel', 0);
      var lastmod   = definedXMLTagName(memo, 'lastmod')  ?  getNodeValue(memo, 'lastmod', 0)  :  mid;
      var abst      = definedXMLTagName(memo, 'abstract')  ?  getNodeValue(memo, 'abstract', 0)  :  '';
      abst = abst.length > memoLength - 3  ?  abst.substr(0, memoLength - 3) + '...'  :  abst;
      createMemoImg_usr(uid, mid, x, y, type, openlevel, lastmod, abst);
    }
    //
    // 共有メモ
    //
    for( i = 0; i < getNode(xml, 'memo_shr', -1).length; i++ ) {
    }
    return;
  }
  var query = new Array();
  query.push('cmd=index_memo');
  query.push('uid=' + getUID());
  query.push('areamap=' + getStr_areamap());
  for( i = 0; i < getNode(document.getElementById('toggles'), 'input', -1).length; i++ ) {
    var checkbox = getNode(document.getElementById('toggles'), 'input', i);
    if( checkbox.checked ) { category_toggle.push(g_type_memo[checkbox.category]); }
  }
  query.push('type=' + category_toggle.join('|'));
  httpXMLRequest(dir('cgi', 0) + 'maps.cgi', 'POST', array2queryString(query), func, httpError, 'cgi_maps_index_memo_' + getUID() + '_' + getStr_areamap(), true);
  return;
}



////////////////////////////////////////////////////////////////////////////////
//
// 情報表示
//
////////////////////////////////////////////////////////////////////////////////
//
// マップの座標を表示する
//
function displayLocation(e) {
  var scrollY; if( document.body.scrollTop ) { scrollY = document.body.scrollTop; } else if( window.pageYOffset ) { scrollY = window.pageYOffset; } else { scrollY = 0; }
  var x =  + e.clientX - getPosition(document.getElementById('areamap')).x - document.getElementById('inframe').offsetLeft;
  //var y = 168 - (e.clientY + scrollY - getPosition(document.getElementById('areamap')).y); // 一番下を基準
  var y = 132 - (e.clientY + scrollY - getPosition(document.getElementById('areamap')).y); // 地上を基準

  x = parseInt(x / g_gridX);
  y = parseInt(y / g_gridY);

  var location = document.getElementById('location');
  location.setAttribute('x', x);
  location.setAttribute('y', y);
  location.innerHTML = '( x, y ) = ( ' + parseInt(x/2) + ', ' + parseInt(y/2) + ' )';
  return;
}
function clearLocation(e) {
  document.getElementById('location').innerHTML = '&nbsp;';
  return;
}
//
// メモの座標を表示する
//
function displayLocation_memo(e) {
  var target = getTargetElement(e);
  var location = document.getElementById('location');
  location.setAttribute('x', target.getAttribute('x'));
  location.setAttribute('y', target.getAttribute('y'));
  //location.innerHTML = 'x: <span>' + location.getAttribute('x') / 2 + '</span><br />y: <span>' + location.getAttribute('y') / 2 + '</span>';
  location.innerHTML = '( x, y ) = ( <span>' + location.getAttribute('x') / 2 + '</span>, <span>' + location.getAttribute('y') / 2 + '</span> )';

  stopDefaultAndPropagation(e);
  return false;
}
//
// メモの詳細情報を表示する
//
function displayMemo(e) {
  var target = getTargetElement(e);
  var memo = document.getElementById('memo');
  var areamap = document.getElementById('areamap');
  if( e.clientX - getPosition(areamap).x <= areamap.offsetWidth / 2 ) {
    memo.style.left = e.clientX - getPosition(areamap).x + target.offsetWidth + 'px';
    memo.style.right = '';
  }
  else {
    memo.style.left = '';
    memo.style.right = areamap.offsetWidth - (e.clientX - getPosition(areamap).x) + target.offsetWidth + 'px';
  }
  var scrollY; if( document.body.scrollTop ) { scrollY = document.body.scrollTop; } else if( window.pageYOffset ) { scrollY = window.pageYOffset; } else { scrollY = 0; }
  memo.style.top  = e.clientY + scrollY - 120  + 'px';

  var content_memo = function(xml) {
    memo.innerHTML = '';
    //
    // メモの内容
    //
    if( ! definedXMLTagName(xml, 'content') ) {
      var p = document.createElement('p'); p.innerHTML = 'メモの記入がありません．';
      memo.appendChild(p);
    }
    else {
      memo.innerHTML += getNodeValue(xml, 'content', 0);
    }

    //
    // 作成者等の情報
    //
    var name = getNodeValue(xml, 'name', 0);
    var date = new Date(target.mid * 1000); date = date.toLocaleString().replace(/\//g, '.');
    var lastmod = new Date(target.lastmod * 1000); lastmod = lastmod.toLocaleString().replace(/\//g, '.');
    
    //
    // 作成者
    //
    var div_author = document.createElement('div');
    div_author.id = 'author_memo';
    div_author.innerHTML = 'by ' + name + ' at ' + date + '';
    if( target.lastmod != target.mid ) { div_author.innerHTML += '<br />Last modified at ' + lastmod; }
    memo.appendChild(div_author);

    //
    // ボタン
    //
    ///*
    var close = document.createElement('input');
    close.id = 'memoview_close';
    close.type = 'button';
    close.className = 'btn';
    close.value = 'Close';
    close.title += 'このメモを閉じます．';
    addListener(close, 'click', hideMemo, false);

    var div_foot = document.createElement('div');
    div_foot.id = 'foot_memo';
    div_foot.appendChild(close);
    memo.appendChild(div_foot);
    //*/


    memo.style.display = 'block';
    return;
  }
  var query = new Array();
  query.push('cmd=content_memo');
  query.push('uid=' + target.uid);
  query.push('mid=' + target.mid);
  query.push('areamap=' + getStr_areamap());
  httpXMLRequest(dir('cgi', 0) + 'maps.cgi', 'POST', array2queryString(query), content_memo, httpError, 'cgi_maps_display_memo.' + target.uid + '.' + target.mid, true);
  stopDefaultAndPropagation(e);
  return false;
}
function hideMemo() {
  document.getElementById('memo').style.display = 'none';
  document.getElementById('memo').innerHTML = '';
  return;
}



////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//
// 情報編集
//
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//
// メモを編集する
//
function editMemo(e) {
  var location = document.getElementById('location');

  // target.mid が undefined （偽でもある）ならば新規，定義済み（真でもある）ならば編集
  var target = getTargetElement(e);
  var memo = document.getElementById('memo');
  var areamap = document.getElementById('areamap');

  // クリックされた場所の座標を取得
  var location = document.getElementById('location');
  memo.setAttribute('x', location.getAttribute('x'));
  memo.setAttribute('y', location.getAttribute('y'));
  // クリックされた場所のメモIDを取得．新規ならば，新たに生成
  target.mid  ?  memo.mid = target.mid  :  memo.mid = parseInt((new Date()).getTime() / 1000);
  
  var uid = getUID();
  if( target.uid ) { if( target.uid != uid ) { return; } }

  // マップ表示部の左半分の場合
  if( e.clientX - getPosition(areamap).x <= areamap.offsetWidth / 2 ) {
    target.mid
      ?  memo.style.left = e.clientX - getPosition(areamap).x + target.offsetWidth + 'px'
      :  memo.style.left = e.clientX - getPosition(areamap).x + 16 + 'px';
    memo.style.right = '';
  }
  // マップ表示部の右半分の場合
  else {
    memo.style.left = '';
    target.mid
      ?  memo.style.right = areamap.offsetWidth - (e.clientX - getPosition(areamap).x) + target.offsetWidth + 'px'
      :  memo.style.right = areamap.offsetWidth - (e.clientX - getPosition(areamap).x) + 16 + 'px';
  }
  memo.style.top  = document.getElementById('areamap').offsetTop - 120 + 'px';

  ////////////////////////////////////////////////////////////////
  //
  // ユーザメモ用フォーム
  //
  ////////////////////////////////////////////////////////////////
  var content_memo_usr = function(xml) {
    memo.innerHTML = '';
    //
    // テキストエリア
    //
    var h3_text = document.createElement('h3');
    target.mid  ?  h3_text.innerHTML = 'ユーザメモの編集'  :  h3_text.innerHTML = 'ユーザメモの新規作成';
    memo.appendChild(h3_text);
    
    var textarea = document.createElement('textarea');
    textarea.id = 'content_memo';
    var clearTextAndEnableSubmit = function(e) {
      if( getTargetElement(e).id == 'content_memo'  &&  textarea.value == g_message['memo_content_default'] ) { textarea.value = ''; }
      document.getElementById('memoedit_submit').disabled = false;
    }
    if( ! definedXMLTagName(xml, 'content') ) {
      textarea.value = g_message['memo_content_default'];
    }
    else {
      var content = getNodeValue(xml, 'content', 0);
      textarea.value = tag2textarea(content);
    }
    addListener(textarea, 'focus', clearTextAndEnableSubmit, false);
    memo.appendChild(textarea);

    //
    // 公開レベル
    //
    if( true ) {
      memo.openlevel = target.mid  ?  target.openlevel  :  3;
      var setOpenlevel = function(e) {
        memo.openlevel = getTargetElement(e).value;
        document.getElementById('memoedit_submit').disabled = false;
      }
      var i;
      for( i = 0; i < 4; i++ ) {
        var label = document.createElement('label'); label.setAttribute('for', 'memoedit_radio_openlevel_' + i);
        var radio = document.createElement('input');
        radio.id = 'memoedit_radio_openlevel_' + i;
        radio.className = 'radio';
        radio.type = 'radio';
        radio.value = i;
        addListener(label, 'click', setOpenlevel, false);
        var span = document.createElement('span');
        switch(i) {
        case 0: span.innerHTML = '非公開';         span.title = '公開しません．'; break;
        case 1: span.innerHTML = '友だちまで';       span.title = '友だちまで公開します．'; break;
        case 2: span.innerHTML = '友だちの友だちまで'; span.title = '友だちの友だちまで公開します．'; break;
        case 3: span.innerHTML = '全体';           span.title = '全体に公開します．'; break;
        }
        if( i == memo.openlevel ) { radio.checked = 'checked'; }
        label.appendChild(radio);
        label.appendChild(span);
        memo.appendChild(label);
      }
    }
    
    //
    // アイコン選択
    //
    var h3_icon = document.createElement('h3'); h3_icon.innerHTML = 'アイコン選択';
    memo.appendChild(h3_icon);

    var selectIcon = function(e) {
      var ul = document.getElementById('iconselect_memo');
      var i; for( i = 0; i < getNode(ul, 'li', -1).length; i++ ) {
        var li = getNode(ul, 'li', i);
        if( getTargetElement(e).icon == li.icon ) {
          li.className = 'selected';
          ul.selected = li.icon;
        }
        else { li.className = ''; }
      }
      return;
    }
    var ul_icon = document.createElement('ul'); ul_icon.id = 'iconselect_memo';  addListener(ul_icon, 'click', clearTextAndEnableSubmit, false);
    var icon = g_type_memo['memo'].split('|');
    var i; for( i = 0; i < icon.length; i++ ) {
      var li = document.createElement('li');
      li.innerHTML = '&nbsp;';
      li.style.background = '#3399ff url(' + dir('img', 0) + 'maps/memo/' + icon[i] + '_a1.png) center center no-repeat';
      li.icon = icon[i];
      if( !target.mid ) { if( i == 0 ) { li.className = 'selected'; ul_icon.selected = li.icon; } } // 新規作成のときのデフォルト選択
      else {
        if( li.icon == target.type ) { li.className = 'selected'; ul_icon.selected = li.icon; } // 編集時は，そのアイコンを選択
        else { ul_icon.selected = target.type; } // アイコンがメモ以外（キノコとか）のときの対策（管理者用）
      }
      addListener(li, 'click', selectIcon, false);
      ul_icon.appendChild(li);
    }
    memo.appendChild(ul_icon);
    //
    // 削除（編集時のみ）
    //
    if( target.mid ) {
      var h3_delete = document.createElement('h3'); h3_delete.innerHTML = '削除';
      memo.appendChild(h3_delete);

      var label = document.createElement('label'); label.setAttribute('for', 'memoedit_checkbox_delete');
      var checkbox = document.createElement('input');
      checkbox.id = 'memoedit_checkbox_delete';
      checkbox.className = 'checkbox';
      checkbox.type = 'checkbox';
      var span = document.createElement('span'); span.innerHTML = '削除する場合，チェックボックスをオンにしてください．';
      var toggleButton_delete = function() {
        document.getElementById('memoedit_delete').disabled = !checkbox.checked
      }
      addListener(checkbox, 'click', toggleButton_delete, false);
      label.appendChild(checkbox);
      label.appendChild(span);
      memo.appendChild(label);
    }
    
    //
    // ボタン群
    //
    var div_foot = document.createElement('div'); div_foot.id = 'foot_memo';
    memo.appendChild(div_foot);
    // 作成・保存
    var button_submit = document.createElement('input');
    button_submit.id = 'memoedit_submit';
    button_submit.type = 'button';
    button_submit.className = 'btn';
    target.mid  ?  button_submit.value = '保存'  :  button_submit.value = '作成';
    button_submit.title = 'メモを' + button_submit.value + 'します．';
    button_submit.disabled = true;
    addListener(button_submit, 'click', saveMemo_usr, false);
    div_foot.appendChild(button_submit);
    // 削除
    if( target.mid ) {
      var button_delete = document.createElement('input');
      button_delete.id = 'memoedit_delete';
      button_delete.type = 'button';
      button_delete.className = 'btn';
      button_delete.value = '削除';
      button_delete.title = 'メモを削除します．';
      button_delete.disabled = true;
      addListener(button_delete, 'click', deleteMemo_usr, false);
      div_foot.appendChild(button_delete);
    }
    // 中断
    var button_cancel = document.createElement('input');
    button_cancel.id = 'memoedit_cancel';
    button_cancel.type = 'button';
    button_cancel.className = 'btn';
    button_cancel.value = 'やめる';
    target.mid  ?  button_cancel.title = '編集'  :  button_cancel.title = '作成'; button_cancel.title += 'を中断し，このフォームを閉じます．';
    addListener(button_cancel, 'click', hideMemo, false);
    div_foot.appendChild(button_cancel);
    
    memo.style.display = 'block';
    return;
  }

  ////////////////////////////////////////////////////////////////
  //
  // 共有メモ用フォーム
  //
  ////////////////////////////////////////////////////////////////
  var content_memo_shr = function(xml) {
    memo.innerHTML = '';
    //
    // テキストエリア
    //
    var h3_text = document.createElement('h3');
    target.mid  ?  h3_text.innerHTML = '共有メモの編集'  :  h3_text.innerHTML = '共有メモの新規作成';
    memo.appendChild(h3_text);
    
    var textarea = document.createElement('textarea');
    textarea.id = 'content_memo';
    var clearTextAndEnableSubmit = function(e) {
      if( getTargetElement(e).id == 'content_memo'  &&  textarea.value == g_message['memo_content_default'] ) { textarea.value = ''; }
      document.getElementById('memoedit_submit').disabled = false;
    }
    if( ! definedXMLTagName(xml, 'p') ) {
      textarea.value = g_message['memo_content_default'];
    }
    else {
      var p = new Array();
      var i; for( i = 0; i < getNode(xml, 'p', -1).length; i++ ) {
        var tmp = getNodeValue(xml, 'p', i);
        tmp = tmp.replace(/%eql;/g, '=');
        tmp = tmp.replace(/%amp;/g, '&');
        tmp = tmp.replace(/%{2}/g, '\n');
        p.push(tmp);
        
      }
      textarea.value = p.join('\n\n');
    }
    addListener(textarea, 'focus', clearTextAndEnableSubmit, false);
    memo.appendChild(textarea);

    //
    // メモの公開
    //
    if( true ) {
      var label = document.createElement('label'); label.setAttribute('for', 'memoedit_checkbox_opened');
      var checkbox = document.createElement('input');
      checkbox.id = 'memoedit_checkbox_opened';
      checkbox.className = 'checkbox';
      checkbox.type = 'checkbox';
      target.mid  ?  checkbox.opened = target.opened  :  checkbox.opened = 1;
      //if( isRoot() ) { checkbox.opened = 1; }
      checkbox.opened == 1  ?  checkbox.checked = true  :  checkbox.checked = false;
      var span = document.createElement('span'); span.innerHTML = 'メモを公開する';
      var toggleOpened = function() {
        document.getElementById('memoedit_checkbox_opened').checked
          ?  document.getElementById('memoedit_checkbox_opened').opened = 1
          :  document.getElementById('memoedit_checkbox_opened').opened = 0;
        document.getElementById('memoedit_submit').disabled = false;
      }
      addListener(checkbox, 'click', toggleOpened, false);
      label.appendChild(checkbox);
      label.appendChild(span);
      memo.appendChild(label);
    }

    //
    // メモの共有
    //
    if( true ) {
      var label = document.createElement('label'); label.setAttribute('for', 'memoedit_checkbox_shared');
      var checkbox = document.createElement('input');
      checkbox.id = 'memoedit_checkbox_shared';
      checkbox.className = 'checkbox';
      checkbox.type = 'checkbox';
      target.mid  ?  checkbox.shared = target.shared  :  checkbox.shared = 0;
      //if( isRoot() ) { checkbox.shared = 0; }
      checkbox.shared == 1  ?  checkbox.checked = true  :  checkbox.checked = false;
      var span = document.createElement('span'); span.innerHTML = 'メモを共有する';
      var toggleShared = function() {
        document.getElementById('memoedit_checkbox_shared').checked
          ?  document.getElementById('memoedit_checkbox_shared').shared = 1
          :  document.getElementById('memoedit_checkbox_shared').shared = 0;
        document.getElementById('memoedit_submit').disabled = false;
      }
      addListener(checkbox, 'click', toggleShared, false);
      label.appendChild(checkbox);
      label.appendChild(span);
      memo.appendChild(label);
    }
    
    //
    // アイコン選択
    //
    var h3_icon = document.createElement('h3'); h3_icon.innerHTML = 'アイコン選択';
    memo.appendChild(h3_icon);

    var selectIcon = function(e) {
      var ul = document.getElementById('iconselect_memo');
      var i; for( i = 0; i < getNode(ul, 'li', -1).length; i++ ) {
        var li = getNode(ul, 'li', i);
        if( getTargetElement(e).icon == li.icon ) {
          li.className = 'selected';
          ul.selected = li.icon;
        }
        else { li.className = ''; }
      }
      return;
    }
    var ul_icon = document.createElement('ul'); ul_icon.id = 'iconselect_memo';  addListener(ul_icon, 'click', clearTextAndEnableSubmit, false);
    var icon = g_type_memo['memo'].split('|');
    var i; for( i = 0; i < icon.length; i++ ) {
      var li = document.createElement('li');
      li.innerHTML = '&nbsp;';
      li.style.background = '#3399ff url(' + dir('img', 0) + 'maps/memo/' + icon[i] + '_a1.png) center center no-repeat';
      li.icon = icon[i];
      if( !target.mid ) { if( i == 0 ) { li.className = 'selected'; ul_icon.selected = li.icon; } } // 新規作成のときのデフォルト選択
      else {
        if( li.icon == target.type ) { li.className = 'selected'; ul_icon.selected = li.icon; } // 編集時は，そのアイコンを選択
        else { ul_icon.selected = target.type; } // アイコンがメモ以外（キノコとか）のときの対策（管理者用）
      }
      addListener(li, 'click', selectIcon, false);
      ul_icon.appendChild(li);
    }
    memo.appendChild(ul_icon);
    //
    // 削除（編集時のみ）
    //
    if( target.mid ) {
      var h3_delete = document.createElement('h3'); h3_delete.innerHTML = '削除';
      memo.appendChild(h3_delete);

      var label = document.createElement('label'); label.setAttribute('for', 'memoedit_checkbox_delete');
      var checkbox = document.createElement('input');
      checkbox.id = 'memoedit_checkbox_delete';
      checkbox.className = 'checkbox';
      checkbox.type = 'checkbox';
      var span = document.createElement('span'); span.innerHTML = '削除する場合，チェックボックスをオンにしてください．';
      var toggleButton_delete = function() {
        document.getElementById('memoedit_delete').disabled = !checkbox.checked
      }
      addListener(checkbox, 'click', toggleButton_delete, false);
      label.appendChild(checkbox);
      label.appendChild(span);
      memo.appendChild(label);
    }
    
    //
    // ボタン群
    //
    var div_foot = document.createElement('div'); div_foot.id = 'foot_memo';
    memo.appendChild(div_foot);
    // 作成・保存
    var button_submit = document.createElement('input');
    button_submit.id = 'memoedit_submit';
    button_submit.type = 'button';
    button_submit.className = 'btn';
    target.mid  ?  button_submit.value = '保存'  :  button_submit.value = '作成';
    button_submit.title = 'メモを' + button_submit.value + 'します．';
    button_submit.disabled = true;
    addListener(button_submit, 'click', saveMemo_shr, false);
    div_foot.appendChild(button_submit);
    // 削除
    if( target.mid ) {
      var button_delete = document.createElement('input');
      button_delete.id = 'memoedit_delete';
      button_delete.type = 'button';
      button_delete.className = 'btn';
      button_delete.value = '削除';
      button_delete.title = 'メモを削除します．';
      button_delete.disabled = true;
      addListener(button_delete, 'click', deleteMemo_shr, false);
      div_foot.appendChild(button_delete);
    }
    // 中断
    var button_cancel = document.createElement('input');
    button_cancel.id = 'memoedit_cancel';
    button_cancel.type = 'button';
    button_cancel.className = 'btn';
    button_cancel.value = 'やめる';
    target.mid  ?  button_cancel.title = '編集'  :  button_cancel.title = '作成'; button_cancel.title += 'を中断し，このフォームを閉じます．';
    addListener(button_cancel, 'click', hideMemo, false);
    div_foot.appendChild(button_cancel);
    
    memo.style.display = 'block';
    return;
  }

  var query = new Array();
  // 共有メモ = alt + ダブルクリック
  if( e.altKey ) {
    query.push('cmd=content_memo');
    query.push('uid=' + uid);
    query.push('mid=' + target.mid);
    query.push('areamap=' + getStr_areamap());
    httpXMLRequest(dir('cgi', 0) + 'maps.cgi', 'POST', array2queryString(query), content_memo_shr, httpError, 'cgi_maps_edit_memo_' + uid + '.' + target.mid, true);
  }
  // ユーザメモ = ダブルクリック
  else {
    query.push('cmd=content_memo');
    query.push('uid=' + uid);
    query.push('mid=' + target.mid);
    query.push('areamap=' + getStr_areamap());
    httpXMLRequest(dir('cgi', 0) + 'maps.cgi', 'POST', array2queryString(query), content_memo_usr, httpError, 'cgi_maps_edit_memo_' + uid + '.' + target.mid, true);
  }
  
  stopDefaultAndPropagation(e);
  return false;
}




////////////////////////////////////////////////////////////////////////////////
//
// ユーザメモを保存する
//
////////////////////////////////////////////////////////////////////////////////
function saveMemo_usr(e) {
  var memo = document.getElementById('memo');
  var uid = getUID();
  var mid = memo.mid;
  var openlevel = memo.openlevel;
  //alert(openlevel); return; // 確認用
  var type = document.getElementById('iconselect_memo').selected;
  var content_memo = document.getElementById('content_memo').value;  if( content_memo == g_message['memo_content_default'] ) { content_memo = ''; }
  /*
  content_memo = content_memo.replace(/\=/g, '%eql;'); //
  content_memo = content_memo.replace(/\&/g, '%amp;'); //
  content_memo = content_memo.replace(/\x0d\x0a|\x0a/g, '<br />');
  */
  content_memo = text2queryValue(content_memo);

  var img = document.getElementById('usr.' + uid + '.' + mid);
  var lastmod = img  ?  parseInt((new Date()).getTime() / 1000)  :  mid;  // 編集ならば，現在の時刻を，新規作成ならば，mid の値を，最終更新時刻とする．
  
  var query = new Array();
  query.push('cmd=save_memo_usr');
  query.push('uid=' + uid);
  query.push('mid=' + mid);
  query.push('areamap=' + getStr_areamap());
  query.push('x=' + memo.getAttribute('x'));
  query.push('y=' + memo.getAttribute('y'));
  query.push('type=' + type);
  query.push('content=' + content_memo);
  query.push('openlevel=' + openlevel);
  query.push('lastmod=' + lastmod);
  document.getElementById('memoedit_submit').disabled = true;
  removeListener(document.getElementById('memoedit_submit'), 'click', saveMemo_usr, false);
  if( img ) { removeListener(img, 'mousedown', dragStart_memo, false); } // 保存中にドラッグが行われないよう，リスナーを除去（編集時）
  
  var func = function(xml) {
    var abst = definedXMLTagName(xml, 'abstract')  ?  getNodeValue(xml, 'abstract', 0)  :  '';
    abst = abst.length > memoLength - 3  ?  abst.substr(0, memoLength - 3) + '...'  :  abst;

    // 編集時
    if( img ) {
      img.src = dir('img', 0) + 'maps/memo/' + type + '_' + document.getElementById('areamap').getAttribute('maptype') + '.png';// + '?' + (new Date()).getTime();
      img.type = type;
      img.openlevel = openlevel;
      img.lastmod = lastmod;
      img.title = abst;
      addListener(img, 'mousedown', dragStart_memo, false); // ドラッグ用のリスナーを再開
    }
    // 新規作成時
    else {
      createMemoImg_usr(uid, mid, memo.getAttribute('x'), memo.getAttribute('y'), type, openlevel, mid, abst);
    }
    hideMemo();
  }
  httpXMLRequest(dir('cgi', 0) + 'maps.cgi', 'POST', array2queryString(query), func, httpError, 'cgi_maps_save_memo_usr.' + uid + '.' + mid, true);
  return;
}
////////////////////////////////////////////////////////////////////////////////
//
// 共有メモを保存する
//
////////////////////////////////////////////////////////////////////////////////
function saveMemo_shr(e) {
  var uid = getUID();
  var mid = document.getElementById('memo').mid;
  var memo = document.getElementById('memo');
  var img = document.getElementById('memo' + '.' + uid + '.' + mid);

  var type = document.getElementById('iconselect_memo').selected;
  var content_memo = document.getElementById('content_memo').value;  if( content_memo == g_message['memo_content_default'] ) { content_memo = ''; }
  content_memo = text2queryValue(content_memo);

  var lastmod; img  ?  lastmod = parseInt((new Date()).getTime() / 1000)  :  lastmod = mid;  // 編集ならば，現在の時刻を，新規作成ならば，mid の値を，最終更新時刻とする．

  
  var query = new Array();
  query.push('cmd=save_memo');
  query.push('uid=' + uid);
  query.push('mid=' + mid);
  query.push('areamap=' + getStr_areamap());
  query.push('x=' + memo.getAttribute('x'));
  query.push('y=' + memo.getAttribute('y'));
  query.push('type=' + type);
  query.push('content=' + content_memo);
  query.push('opened=' + document.getElementById('memoedit_checkbox_opened').opened);
  query.push('shared=' + document.getElementById('memoedit_checkbox_shared').shared);
  query.push('lastmod=' + lastmod);
  document.getElementById('memoedit_submit').disabled = true;
  removeListener(document.getElementById('memoedit_submit'), 'click', saveMemo, false);
  if( img ) { removeListener(img, 'mousedown', dragStart_memo, false); } // 保存中にドラッグが行われないよう，リスナーを除去（編集時）
  
  var func = function() {
    // 編集時
    if( img ) {
      img.src = dir('img', 0) + 'maps/memo/' + type + '_' + document.getElementById('areamap').getAttribute('maptype') + '.png';// + '?' + (new Date()).getTime();
      img.type = type;
      img.opened = document.getElementById('memoedit_checkbox_opened').opened;
      img.shared = document.getElementById('memoedit_checkbox_shared').shared;
      img.lastmod = lastmod;
      addListener(img, 'mousedown', dragStart_memo, false); // ドラッグ用のリスナーを再開
    }
    // 新規作成時
    else {
      createMemoImg_shr(uid, mid, memo.getAttribute('x'), memo.getAttribute('y'), type, document.getElementById('memoedit_checkbox_opened').opened, document.getElementById('memoedit_checkbox_shared').shared, mid);
    }
    hideMemo();
  }
  httpXMLRequest(dir('cgi', 0) + 'maps.cgi', 'POST', array2queryString(query), func, httpError, 'cgi_maps_save_memo_' + uid + '.' + mid, true);
  return;
}
////////////////////////////////////////////////////////////////////////////////
//
// ユーザメモメモを削除する
//
////////////////////////////////////////////////////////////////////////////////
function deleteMemo_usr(e) {
  if( document.getElementById('memoedit_delete') ) { document.getElementById('memoedit_delete').disabled = true; };
  var uid = getUID();
  var mid = document.getElementById('memo').mid;
  var query = new Array();
  query.push('cmd=delete_memo_usr');
  query.push('uid=' + uid);
  query.push('mid=' + mid);
  query.push('areamap=' + getStr_areamap());
  var func = function(xml) {
    var img = document.getElementById('usr.' + uid + '.' + mid);
    img.parentNode.removeChild(img);
    hideMemo();
  }
  httpXMLRequest(dir('cgi', 0) + 'maps.cgi', 'POST', array2queryString(query), func, httpError, 'cgi_maps_delete_memo_usr.' + uid + '.' + mid, true);
}
////////////////////////////////////////////////////////////////////////////////
//
// 共有メモメモを削除する
//
////////////////////////////////////////////////////////////////////////////////
function deleteMemo_shr(e) {
  if( document.getElementById('memoedit_delete') ) { document.getElementById('memoedit_delete').disabled = true; };
  //var sid = getUID();
  var mid = document.getElementById('memo').mid;
  var query = new Array();
  query.push('cmd=delete_memo_shr');
  query.push('sid=' + sid);
  query.push('mid=' + mid);
  query.push('areamap=' + getStr_areamap());
  var func = function(xml) {
    var img = document.getElementById('shr.' + sid + '.' + mid);
    img.parentNode.removeChild(img);
    hideMemo();
  }
  httpXMLRequest(dir('cgi', 0) + 'maps.cgi', 'POST', array2queryString(query), func, httpError, 'cgi_maps_delete_memo_shr.' + sid + '.' + mid, true);
}



////////////////////////////////////////////////////////////////////////////////
//
// ユーザメモ画像を作成
//
////////////////////////////////////////////////////////////////////////////////
function createMemoImg_usr(uid, mid, x, y, type, openlevel, lastmod, abst) {
  abst = abst == ''  ?  '記入なし．'  :  abst;
  var img = document.createElement('img');
  img.src = dir('img', 0) + 'maps/memo/' + type + '_' + document.getElementById('areamap').getAttribute('maptype') + '.png';// + '?' + (new Date()).getTime();
  img.id = 'usr.' + uid + '.' + mid;
  img.style.top = ((g_gridH - y) * g_gridY) + 'px';
  img.style.left = (x * g_gridX) + 'px';
  //
  // 保存用
  //
  img.uid = uid;
  img.mid = mid;
  img.setAttribute('x', x);
  img.setAttribute('y', y);
  img.type = type;
  img.openlevel = openlevel;
  img.lastmod = lastmod;
  // ユーザIDが本人と一致した場合，以下の 1行を追加
  if( uid == getUID() ) {
    img.className = 'memo';
    img.title = abst;
    addListener(img, 'mousedown', dragStart_memo, false);
    addListener(img, 'click', editMemo, false);
  }
  // 公開レベルの範囲内のときの処理
  else {
    img.className = 'memo_opn';
    img.title = abst;
    addListener(img, 'click', displayMemo, false);
    //addListener(img, 'mouseout', hideMemo, false);
  }
  /*
  else {
    if( shared == 1 ) {
      img.className = 'memo_shr';
      img.title = '[共有] '  + img.id + ' （クリックでメモを開きます．）';
    }
    else { // opend == 1
      img.className = 'memo_opn';
      img.title = '[公開] '  + img.id + ' （クリックでメモを開きます．）';
    }
    addListener(img, 'click', displayMemo, false);
    //addListener(img, 'mouseover', displayMemo, false);
    addListener(img, 'mouseout', hideMemo, false);
  }
  */
  addListener(img, 'mousemove', displayLocation_memo, false);
  document.getElementById('inframe').appendChild(img);
  return;
}
////////////////////////////////////////////////////////////////////////////////
//
// 共有メモ画像を作成
//
////////////////////////////////////////////////////////////////////////////////
function createMemoImg_shr(sid, mid, x, y, type, lastmod) {
  var img = document.createElement('img');
  img.src = dir('img', 0) + 'maps/memo/' + type + '_' + document.getElementById('areamap').getAttribute('maptype') + '.png';// + '?' + (new Date()).getTime();
  img.id = 'shr.' + sid + '.' + mid; // img.id = 'memo.' + uid + '.' + mid;
  img.style.top = ((g_gridH - y) * g_gridY) + 'px';
  img.style.left = (x * g_gridX) + 'px';
  //
  // 保存用
  //
  img.sid = sid;
  img.mid = mid;
  img.setAttribute('x', x);
  img.setAttribute('y', y);
  img.type = type;
  //img.opened = opened;
  //img.shared = shared;
  img.openlevel = openlevel;
  img.lastmod = lastmod;
  // ユーザIDが本人と一致した場合，以下の 1行を追加
  if( getUID() == uid ) {
    img.className = 'memo';
    img.title = img.id + ' （ドラッグで移動，クリックでメモを編集します．）';
    addListener(img, 'mousedown', dragStart_memo, false);
    addListener(img, 'click', editMemo, false);
  }
  // 公開レベルの範囲内のときの処理
  else if( false ) {

  }
  /*
  else {
    if( shared == 1 ) {
      img.className = 'memo_shr';
      img.title = '[共有] '  + img.id + ' （クリックでメモを開きます．）';
    }
    else { // opend == 1
      img.className = 'memo_opn';
      img.title = '[公開] '  + img.id + ' （クリックでメモを開きます．）';
    }
    addListener(img, 'click', displayMemo, false);
    //addListener(img, 'mouseover', displayMemo, false);
    addListener(img, 'mouseout', hideMemo, false);
  }
  */
  addListener(img, 'mousemove', displayLocation_memo, false);
  document.getElementById('inframe').appendChild(img);
  return;
}


////////////////////////////////////////////////////////////////////////////////
//
// エリアマップドラッグ時の処理
//
////////////////////////////////////////////////////////////////////////////////
// ドラッグ開始
function dragStart_areamap(e) {
  var inframe = document.getElementById('inframe');
  var areamap = document.getElementById('areamap');
  var location = document.getElementById('location');
  var memo = document.getElementById('memo');
  hideMemo();

  // 新規作成
  if( isRoot()  &&  e.altKey ) {
    var type = prompt('タイプ?', type_prev);  if( type == undefined ) { return; }
    type_prev = type;
    var uid = getUID();
    var mid = parseInt((new Date()).getTime() / 1000);
    var x = document.getElementById('location').getAttribute('x');
    var y = document.getElementById('location').getAttribute('y');
    
    var query = new Array();
    query.push('cmd=save_memo_usr');
    query.push('uid=' + uid);
    query.push('mid=' + mid);
    query.push('areamap=' + getStr_areamap());
    query.push('x=' + x);
    query.push('y=' + y);
    query.push('type=' + type);
    query.push('openlevel=3');
    query.push('lastmod=' + mid);
    var func = function() {
      createMemoImg_usr(uid, mid, x, y, type, 3, mid, '');
    }
    httpXMLRequest(dir('cgi', 0) + 'maps.cgi', 'POST', array2queryString(query), func, httpError, 'cgi_maps_save_memo_usr.' + uid + '.' + mid, true);
    return;
  }
  else {
    pos_dragStart.cursorX = e.clientX;
    pos_dragStart.mapLeft = inframe.offsetLeft;
    pos_dragStart.memoLeft = memo.offsetLeft;
    addListener(document, 'mousemove', moveElements_areamap, false);
    addListener(document, 'mouseup', dragEnd_areamap, false);
  }
  stopDefaultAndPropagation(e);
  return false;
}
// ドラッグ終了
function dragEnd_areamap(e) {
  removeListener(document, 'mousemove', moveElements_areamap, false);
  removeListener(document, 'mouseup', dragEnd_areamap, false);
  stopDefaultAndPropagation(e);
  return false;
}
// ドラッグ中
function moveElements_areamap(e) {
  var areamap = document.getElementById('areamap');
  var inframe = document.getElementById('inframe');
  var memo = document.getElementById('memo');
  var mapimg = inframe.getElementsByTagName('img')[0];
  if( areamap.offsetWidth >= mapimg.offsetWidth ) { return false; }
  
  var posX_areamap = getPosition(areamap).x;
  var dragWidth = e.clientX - pos_dragStart.cursorX;
  inframe.style.left =  pos_dragStart.mapLeft + dragWidth + 'px';
  // マップの左端が表示領域の左端に来た
  if( getPosition(inframe).x >= posX_areamap ) {
    inframe.style.left = 0;
  }
  // マップの右端が表示領域の右端に来た
  else if( inframe.offsetLeft <= areamap.offsetWidth - mapimg.offsetWidth ) {
    inframe.style.left = areamap.offsetWidth - mapimg.offsetWidth + 'px';
  }
  else {
    //memo.style.left = pos_dragStart.memoLeft + dragWidth + 'px';
  }
  stopDefaultAndPropagation(e);
  return false;
}




////////////////////////////////////////////////////////////////////////////////
//
// マップ上の情報のドラッグの処理
//
////////////////////////////////////////////////////////////////////////////////
// ドラッグ開始
function dragStart_memo(e) {
  var target = getTargetElement(e);
  var areamap = document.getElementById('areamap');
  pos_dragStart.cursorX = e.clientX;
  pos_dragStart.cursorY = e.clientY;
  hideMemo();

  // 編集
  if( isRoot()  &&  e.shiftKey ) {
    var type = prompt('変更するタイプは？'); if( type == undefined ) { type = target.type; }
    target.src = dir('img') + 'maps/memo/' + type + '_' + areamap.getAttribute('maptype') + '.png';// + '?' + (new Date()).getTime();
    target.type = type;
    dragEnd_memo(e);
  }
  else {
    addListener(target, 'mousemove', moveElements_memo, false);
    addListener(target, 'mouseup', dragEnd_memo, false);
    addListener(target, 'mouseout', dragEnd_memo, false);
  }
  stopDefaultAndPropagation(e);
  return false;
}
// ドラッグ終了
function dragEnd_memo(e) {
  var target = getTargetElement(e);
  var areamap = document.getElementById('areamap');

  // 移動後の位置
  var x_dragEnd = parseInt((target.offsetLeft + g_gridX/2) / g_gridX); // "+ g_gridX/2" : 極端な補正となるのを防止
  var y_dragEnd = g_gridH - parseInt((target.offsetTop + g_gridY/2)  / g_gridY); // "+ g_gridY/2" : 極端な補正となるのを防止
  // 移動していなければ，リスナーをいったん除去
  var flg_listenerRemoved = false;
  if( target.getAttribute('x') != x_dragEnd  ||  target.getAttribute('y') != y_dragEnd ) {
    removeListener(target, 'click', editMemo, false);
    flg_listenerRemoved = true;
  }
  
  target.style.borderColor = g_color['memo_own_save'];
  target.setAttribute('x', x_dragEnd);
  target.setAttribute('y', y_dragEnd);
  target.style.left = (target.getAttribute('x') * g_gridX) + 'px';
  target.style.top  = ((g_gridH - target.getAttribute('y')) * g_gridY) + 'px';
  
  removeListener(target, 'mousemove', moveElements_memo, false);
  removeListener(target, 'mouseup', dragEnd_memo, false);
  removeListener(target, 'mouseout', dragEnd_memo, false);
  removeListener(target, 'mousedown', dragStart_memo, false); // 保存中にドラッグが行われないよう

  //
  // ユーザメモ
  //
  if( target.id.match(/^usr\.\w{32}\.\d{10}$/) ) {
    var query = new Array();
    query.push('cmd=save_memo_usr');
    query.push('uid=' + getUID());
    query.push('mid=' + target.mid);
    query.push('areamap=' + getStr_areamap());
    query.push('x=' + target.getAttribute('x'));
    query.push('y=' + target.getAttribute('y'));
    query.push('type=' + target.type);
    query.push('openlevel=' + target.openlevel);
    query.push('lastmod=' + target.lastmod);
    var func = function(xml) {
      target.style.borderColor = g_color['memo_own'];
      addListener(target, 'mousedown', dragStart_memo, false); // マウスドラッグ用のリスナーを再開
      if( flg_listenerRemoved ) { addListener(target, 'click', editMemo, false); }
      return;
    }
    httpXMLRequest(dir('cgi', 0) + 'maps.cgi', 'POST', array2queryString(query), func, httpError, 'cgi_maps_save_memo_usr.' + getUID() + '.' + target.mid, true);
  }
  //
  // 共有メモ
  //
  else if( target.id.match(/^shr\.\w{32}\.\d{10}/) ) {
    var query = new Array();
    query.push('cmd=save_memo_shr');
    query.push('sid=' + target.sid);
    query.push('mid=' + target.mid);
    query.push('areamap=' + getStr_areamap());
    query.push('x=' + target.getAttribute('x'));
    query.push('y=' + target.getAttribute('y'));
    query.push('type=' + target.type);
    query.push('lastmod=' + target.lastmod);
    var func = function(xml) {
      target.style.borderColor = g_color['memo_own'];
      addListener(target, 'mousedown', dragStart_memo, false); // マウスドラッグ用のリスナーを再開
      if( flg_listenerRemoved ) { addListener(target, 'click', editMemo, false); }
      return;
    }
    httpXMLRequest(dir('cgi', 0) + 'maps.cgi', 'POST', array2queryString(query), func, httpError, 'cgi_maps_save_memo_shr.' + taret.sid + '.' + target.mid, true);
  }
  stopDefaultAndPropagation(e);
  return false;
}
// ドラッグ中
function moveElements_memo(e) {
  var target = getTargetElement(e); target.style.borderColor = g_color['memo_own_edit'];
  var dragWidth  = e.clientX - pos_dragStart.cursorX;
  var dragHeight = pos_dragStart.cursorY - e.clientY;
  //target.style.left = (target.x * g_gridX + dragWidth) + 'px';
  //target.style.top  = ((g_gridH - target.y) * g_gridY - dragHeight) + 'px';
  target.style.left = parseInt((target.getAttribute('x') * g_gridX + dragWidth + g_gridX/2) / g_gridX) * g_gridX + 'px'; // スナップ仕様
  target.style.top  = parseInt(((g_gridH - target.getAttribute('y')) * g_gridY - dragHeight + g_gridY/2) / g_gridY) * g_gridY + 'px'; // スナップ仕様
  //document.getElementById('location').innerHTML = 'x: ' + parseInt(target.offsetLeft / g_gridX) / 2 + '<br />y: ' + parseInt((132 - target.offsetTop) / g_gridY) / 2;
  document.getElementById('location').innerHTML = '( x, y ) = ( <span>' + parseInt(target.offsetLeft / g_gridX) / 2 + '</span>, <span>' + parseInt((132 - target.offsetTop) / g_gridY) / 2 + '</span> )';
  stopDefaultAndPropagation(e);
  return false;
}


////////////////////////////////////////////////////////////////////////////////
//
// アイテムの表示・非表示
//
////////////////////////////////////////////////////////////////////////////////
function toggleMemos(e) {
  var category = new Array();
  var toggles = document.getElementById('toggles');
  var i;  for( i = 0; i < getNode(toggles, 'input', -1).length; i++ ) {
    var checkbox = getNode(toggles, 'input', i);
    if( checkbox.checked ) {
      category.push(checkbox.category);
    }
  }
  loadMemos(category);
  return;
}




////////////////////////////////////////////////////////////////////////////////
//
// 現在のエリアを表す文字列を取得する
//
////////////////////////////////////////////////////////////////////////////////
function getStr_area() {
  var areamap = document.getElementById('areamap');
  var str_area = areamap.getAttribute('select_world') + '-' + areamap.getAttribute('select_area');
  return str_area;
}
////////////////////////////////////////////////////////////////////////////////
//
// 現在のエリアマップを表す文字列を取得する
//   1-1 MAP A なら，1-1a
//
////////////////////////////////////////////////////////////////////////////////
function getStr_areamap() {
  var areamap = document.getElementById('areamap');
  var str_areamap = areamap.getAttribute('select_world') + '-' + areamap.getAttribute('select_area') + areamap.getAttribute('select_map');
  return str_areamap;
}

