/**
 * スプレッドシートの読み込みを実行。
 * setTimeoutしてるのは、OperaではJSONPが非同期ではないため。
 * 待機時間は適当。
 * 非同期に切り離すことが目的なので、なるべく短く。
 * @param url スプレッドシートフィードURL
 */
function loadJson(url) {
  setTimeout('_loadJson("'+url+'")', 10);
}

/**
 * loadJsonの実処理。
 * @param url スプレッドシートフィードURL
 */
function _loadJson(url) {
  var jsonScript = document.getElementById('jsonScript');
  if (jsonScript) {
    jsonScript.parentNode.removeChild(jsonScript);
  }
  var script = document.createElement('script');
  script.setAttribute('src', url);
  script.setAttribute('id', 'jsonScript');
  script.setAttribute('type', 'text/javascript');
  script.setAttribute('charset', 'utf-8');
  document.documentElement.firstChild.appendChild(script);
}

/**
 * リストフィードエントリから行データを取得。
 * 列名の揺れを吸収するのが主な目的。
 * また、timestampはあらかじめDateオブジェクトに変換。
 * リストフィードから行データを取得する際に
 * フィールド名に gsx$ 接頭辞がつくのは
 * Google Spreadsheets の仕様
 * @param entry リストフィードエントリオブジェクト
 */
function getRowData(entry) {
  var fields = {
    date: 'gsx$timestamp',
    link: 'gsx$url',
    point: 'gsx$entry-point',
    title: 'gsx$title',
    desc: 'gsx$abstract',
    icon: 'gsx$icon',
    nick: 'gsx$nickname',
    photo: 'gsx$photo'
  };
  var hash = new Object();
  for (var k in fields) {
    if (entry[fields[k]]) {
      hash[k] = entry[fields[k]].$t;
    }
  }
  if (hash.date) {
    hash.date = new Date(hash.date);
  }
  return hash;
}

/**
 * マイマップを開いたときにそのマップ名などの情報を表示。
 * HTML処理
 * @param marker マーカ
 */
function setMapName(marker) {
  var str = [
             '<a href="#mapTitle" class="img" onclick="reopenMyMapInfo();">',
             '<img src="images/map-icon-',
             marker.icon,
             '-title.gif" />',
             '</a>',
             '<span>',
             '<a href="#mapTitle" onclick="reopenMyMapInfo();">',
             marker.title,
             ' ',
             marker.nick,
             '</a>',
             '</span>'
             ].join('');

  document.getElementById('mapName').innerHTML = str;
}

/**
 * マイマップを閉じたときに、
 * 開いていたマイマップに関する情報を消去。
 * HTML処理
 */
function clearMapName() {
  document.getElementById('mapName').innerHTML = '';
}
