//----------------------------------------------------------------------------//

// ローカルコネクション用乱数ID

var dateForMD5 = new Date();

var connectionID = MD5_hexhash(dateForMD5 + ' ' + dateForMD5.getMilliseconds() + ' ' + Math.random());

dateForMD5 = null;

// オープニング表示
//
// true  : 表示
// false : 非表示

var isOpening = true;

// エリア選択画面
//
// true  : エリア選択
// false : トップ

var isArea = false;

// 説明の表示モード
//
// 1 : ？？？？？
// 2 : オリジナルコース選択時
// 3 : 初めの3スポット選択時

var EXPLANATION_MODE = {
  Foo:      1,
  Original: 2,
  Default:  3
};

var explanationMode = EXPLANATION_MODE.Default;

// 説明ボックスの表示モード
//
// 1 : ボタンのみ
// 2 : 説明ボックス

var EXPLANATION_BOX_MODE = {
  ButtonOnly: 1,
  ShowBox:    2
};

var explanationType = EXPLANATION_BOX_MODE.ButtonOnly;

// 選択されたスポット
//
// 1〜60

var spot0 = null;
var spot1 = null;
var spot2 = null;

// 選択されたスポットの数
//
// 0〜3

var spotNum = 0;

// ミニマップの表示モード
//
// 1 : ボタンのみ
// 2 : ミニマップ

var INFORMATION_MODE = {
  ButtonOnly: 1,
  MiniMap:    2
};

// 詳細のカテゴリID

var showDetailID = 0;

// 詳細のスポットID

var showDetailSpotID = 0;

// 詳細を表示する際、スポットが選択済みかどうか
// ではなくて、そのスポットを選択「できない」かどうか
//
// true  : 選択済
// false : 未選択

var isEndChoiceSpot = false;

// おすすめか
//
// true  : おすすめ
// false : 個別選択

var isAreaChoice = true;

// ドライブムービーを見る
//
// true  : 見る
// false : 応募

var isDriveMovie = true;

// ドライブムービーを見たかどうか
//
// true  : 見た
// false : 見てない

var hasSeenDriveMovie = false;

// ミニマップ用エリアID

var minMapAreaID;

// 定数

var DEFAULT_LATITUDE   = 38;
var DEFAULT_LONGITUDE  = 138;
var DEFAULT_ZOOM_LEVEL = 5;

var SPOT_TYPE = {
  Auberge:    0,
  Restaurant: 1,
  Attraction: 2
};

var PIN_TYPE = {
  Auberge:    SPOT_TYPE.Auberge,
  Restaurant: SPOT_TYPE.Restaurant,
  Attraction: SPOT_TYPE.Attraction,
  Dealer:     4
};

var NADA_ICON = 'img_c/nada.gif';

// マップとかもろもろ

var map = null;

var areas = new Array(
  FPVArea.Hokkaido,
  FPVArea.TohokuHokuriku,
  FPVArea.KantoKoshinetu,
  FPVArea.Tokai,
  FPVArea.Kansai,
  FPVArea.ChugokuShikoku,
  FPVArea.Kyushu
);

var lineLayer   = new VEShapeLayer();
var dealerLayer = new VEShapeLayer();

//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//

/*
 * ローカルコネクション用IDをFlashに渡す
 *
 * @return Number
 */

function getConnectionID()
{
  return connectionID;
}

//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//

/*
 * マップオブジェクト作成
 */

function GetMap()
{
  map = new VEMap('myMap');

  map.onLoadMap = SetPins;

  map.SetDashboardSize(VEDashboardSize.Small);

  map.LoadMap(new VELatLong(DEFAULT_LATITUDE, DEFAULT_LONGITUDE), DEFAULT_ZOOM_LEVEL);

  map.AttachEvent('onclick', ClickMap);

  map.SetScaleBarDistanceUnit(VEDistanceUnit.Kilometers);

  map.AddShapeLayer(lineLayer);
}

//----------------------------------------------------------------------------//

/*
 * マップクリック時の処理
 */

function ClickMap(e)
{
  // ピンをクリックされたら選択されたことに
  
  if (e.elementID != undefined && e.elementID.match(/msftve_1004_200(\d{3})/)){
    var o = new Object();

    o.spotID     = RegExp.$1 - FPVPrefectures.length - dealers.length + 1;
    o.categoryID = pins[o.spotID - 1].Type;

    // ただし、選べない状態の場合は選べない

    if (pins[o.spotID - 1].Shape.GetCustomIcon().CustomHTML == pins[o.spotID - 1].OffIcon) {
      return; 
    }

    choiceSpot(o);
  }
}

//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//

/*
/* トップの状態をFlashに渡す
 *
 * @return {isOpening:Boolean, isArea:Boolean}
 */

function getTopCondition()
{
  var o = new Object();

  o.isOpening = isOpening;
  o.isArea    = isArea;

  return o;
}

//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//

/*
 * 各フッターのリンクへ移動
 *
 * @param Number(1:プライバシー, 2:使用条件, 3:公式サイト)
 *
 */

function setFooterURL(n)
{
  if (n == 1) {
    // プライバシーポリシー

    window.open('http://privacy2.msn.com/_shortnotice_nl.aspx?cp-documentid=558957&amp;culture=ja-jp&amp;shellcontent=privacy/short/ja-jp/content.xml&amp;shellversion=msn9lite&amp;wa=wsignin1.0', '_blank'); 
  } else if (n == 2) {
    // 使用条件

    window.open('http://tou.live.com/help.aspx?project=a&market=ja-JP', '_blank');
  } else {
    // 公式サイト

    window.open('http://g.jp.msn.com/jpfe/766', '_blank');
  }
}

//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//

/*
 * ドライブ・プランの表示
 */

function changeSceneDriveSample()
{
  detailNone();
  sampleBlock();
}

//----------------------------------------------------------------------------//

/*
 * ドライブ・プランの非表示
 */

function hideDriveSample()
{
  sampleNone();
}

//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//

/*
 * エリア選択に応じてマップ等をセットする
 *
 * @param Number(1:北海道, 2:東北・北陸, 3:関東・甲信越, 4:東海, 5:関西, 6:中国・四国, 7:九州);
 *
 */

function setMapArea(id)
{
  isAreaChoice = true;

  explanationMode = EXPLANATION_MODE.Default;

  // ミニマップ用にIDを記憶

  minMapAreaID = id;

  // IDを使いやすくしとく
  
  id--;

  // ここで地図を表示

  if (map == null) {
    GetMap();
  }

  document.getElementById("wrapper").style.backgroundColor = "#FFFFFF";

  // 選択されたエリアに寄る

  map.SetCenterAndZoom(
    new VELatLong(
      areas[id].Latitude,
      areas[id].Longitude
    ),
    areas[id].ZoomLevel
  );

  // 選択されたスポットを記憶

  spot0 = recommends[id][0] + 1;
  spot1 = recommends[id][1] + 1;
  spot2 = recommends[id][2] + 1;

  spotNum = 3;

  // ピン表示

  OrganizeSpots();

  // ディーラー表示

  dealerLayer.Show();
}

//----------------------------------------------------------------------------//

/*
 * トップのswfを消す
 */

function hideTopSwf()
{
  spotBlock();
  changeExplanationSwf(EXPLANATION_BOX_MODE.ShowBox);
  changeInfomationSwf(INFORMATION_MODE.MiniMap);
  endspotBlock();
  topNone();
}

//----------------------------------------------------------------------------//

/*
 * 「プジュー207SWについて」のページへ移動
 */

function setPeugeot207SWURL()
{
  window.open('/products/', '_blank');
}

//----------------------------------------------------------------------------//

/*
 * 「プレゼントの内容はこちら」のページへ移動
 */

function setHowToPresentURL()
{
}

//----------------------------------------------------------------------------//

/*
 * トップに戻る
 */

function changeSceneTop()
{
  isOpening = false;
  isArea    = false;

  showTopSwf();
}

//----------------------------------------------------------------------------//

/*
 * エリアを選び直す
 */

function changeSceneArea()
{
  isOpening = false;
  isArea    = true;

  showTopSwf();

  lineLayer.DeleteAllShapes();
}

//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//

/*
 * トップの表示
 */

function showTopSwf()
{
  explanationOnNone();
  explanationOffNone();
  sampleNone();
  endspotNone();
  drivingNone();
  detailNone();
  infomationOnNone();
  infomationOffNone();
  spotNone();
  topBlock();
}

//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//

/*
 * 選択された3つのスポットの情報をFlashに渡す
 *
 * @return {spotID0:{spotID:Number, categoryID:0}, spotID1:{spotID:Number, categoryID:1}, spotID2:{spotID:Number, categoryID:2}, isAreaChoice:Boolean}
 */

function getThreeSpot()
{
  var o = new Object();

  for (i = 0; i < 3; i++) {
    var oo = new Object();

    oo.spotID     = this['spot' + i];
    oo.categoryID = i;

    o['spotID' + i] = oo;
  };

  o.isAreaChoice = isAreaChoice;

  return o;
}

//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//

/*
 * ミニマップ用の情報をFlashに返す

 * @return {areaID:Number}
 */

function getInfoCondition()
{
  var o = getAreaSpotAndShopData(minMapAreaID);

  o.areaID = minMapAreaID;

  return o;
}

//----------------------------------------------------------------------------//

/*
 * エリアごとのスポットとディーラーの情報を返す
 *
 * @param Number エリアID
 * @return Object
 */

function getAreaSpotAndShopData(id)
{
  var o = new Object();

  o.aubergeAry = new Array();
  o.spotAry    = new Array();

  for (i = 0; i < pins.length; i++) {
    var a;

    if (pins[i].Area != id - 1) {
      continue; 
    }

    switch(pins[i].Type) {
      case PIN_TYPE.Auberge:
        a = o.aubergeAry;

        break;

      case PIN_TYPE.Restaurant:
      case PIN_TYPE.Attraction:
        a = o.spotAry;

        break;
    }

    a.push({spotID: i + 1, name: pins[i].Name});
  }

  o.shopAry = new Array();

  for (i = 0 ; i < dealers.length; i++) {
    if (dealers[i].Area == id - 1){
      o.shopAry.push({spotID: i + 1, name: dealers[i].Name}); 
    }
  }
  
  return o; 
}

//----------------------------------------------------------------------------//

/*
 * ミニマップでのエリア選択
 *
 * @parame Number
 * @return Object
 */

function choiceInfoArea(id)
{
  minMapAreaID = id;

  var obj = getAreaSpotAndShopData(id);

  return obj;
}

//----------------------------------------------------------------------------//

/*
 * ミニマップでの都道府県の選択
 *
 * @parame Number
 */

function choiceInfoPrefecture(id)
{
  map.SetCenter(
    new VELatLong(
      FPVPrefectures[id - 1].Latitude,
      FPVPrefectures[id - 1].Longitude
    )
  );
}

//----------------------------------------------------------------------------//

/*
 * ミニマップでのスポットの選択
 *
 * @parame Number
 */

function choiceInfoSpot(id)
{
  map.SetCenter(
    new VELatLong(
      pins[id - 1].Latitude,
      pins[id - 1].Longitude
    )
  );
}

//----------------------------------------------------------------------------//

/*
 * ミニマップでのディーラーの選択
 *
 * @parame Number
 */

function choiceInfoShop(id)
{
  map.SetCenter(
    new VELatLong(
      dealers[id - 1].Latitude,
      dealers[id - 1].Longitude
    )
  );
}

//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//

/*
 * スポットの削除
 *
 * @param {spotID:Number, categoryID:Number}
 */

function deleteSpot(obj)
{
  this['spot' + obj.categoryID] = null;

  spotNum = getSpotNum();

  if (spotNum ==2 ) {
    endspotNone();
  }

  OrganizeSpots();
}

//----------------------------------------------------------------------------//

/*
 * スポットの詳細表示
 *
 * @param {spotID:Number, categoryID:Number}
 */

function showSpotDetail(obj)
{
  showDetailSpotID = obj.spotID;
  showDetailID     = obj.categoryID;

  isEndChoiceSpot = spotNum == 3 || (spot0 == obj.spotID || spot1 == obj.spotID || spot2 == obj.spotID);

  detailBlock();
}

//----------------------------------------------------------------------------//

/*
 * スポットの詳細表示しつつ中心を移動
 *
 * @param {spotID:Number, categoryID:Number}
 */

function showSpotDetailAndSetCenter(obj)
{
  showSpotDetail(obj);

  map.SetCenter(
    new VELatLong(
      pins[obj.spotID - 1].Latitude,
      pins[obj.spotID - 1].Longitude
    )
  );
}

//----------------------------------------------------------------------------//

/*
 * スポット詳細の値をFlashに渡す
 *
 * @return {spotID:Number, categoryID:Number, endChoiceSpot:Boolean}
 */

function getDetailCondition()
{
  var o = new Object();

  o.spotID        = showDetailSpotID;
  o.categoryID    = showDetailID;
  o.endChoiceSpot = isEndChoiceSpot;

  return o;
}

//----------------------------------------------------------------------------//

/*
 * スポット詳細の非表示
 *
 * @param {spotID:Number, categoryID:Number}
 */

function hideDetail(obj)
{
  // objは使用しない

  detailNone();
}

//----------------------------------------------------------------------------//

/*
 * フキダシの非表示
 */

function HideInfoBox()
{
  map.HideInfoBox();
}

//----------------------------------------------------------------------------//

/*
 * スポットの選択
 *
 * @param {spotID:Number, categoryID:Number}
 */

function choiceSpot(obj)
{
  // レストランと観光スポットは、どちらもspot1にもspot2にもなれる

  // 来るはずないときは来ないでほしい

  if (spotNum == 3) {
    return; 
  }

  // すでに選択されているものはもう選択できない

  if (obj.spotID == spot0 || obj.spotID == spot1 || obj.spotID == spot2) {
    return; 
  }

  // 選択されたスポットをうまいこと記憶する

  if (obj.categoryID == SPOT_TYPE.Restaurant || obj.categoryID == SPOT_TYPE.Attraction) {
    if (spot1 == null) {
      spot1 = obj.spotID;

      obj.categoryID = 1;
    } else if (spot2 == null) {
      spot2 = obj.spotID;

      obj.categoryID = 2;
    } else {
      // 念の為、もう選択できないときは返る
      
      return;
    }
  } else{
    if (spot0 == null) {
      spot0 = obj.spotID;
    } else {
      // 念の為、もう選択できないときは返る

      return;
    }
  }

  // swf関連処理

  spotNum = getSpotNum();

  if (spotNum == 3) {
    endspotBlock();
  }

  detailNone();

  document.getElementById("spotexternal").choiceSpot(obj);

  // 選択ボタンやアイコンの描き変え

  OrganizeSpots();
}

//----------------------------------------------------------------------------//

/*
 * スポット詳細の外部リンク
 *
 * @param spotID:Number
 */

function setSpotDetailURL(spotID)
{
  window.open(pins[spotID - 1].URL, '_blank');
}

//----------------------------------------------------------------------------//

/*
 * 説明のタイプをFlashに渡す
 *
 * @return explanationMode:Number;
 */

function getExplanationCondition()
{
  return explanationMode;
}

//----------------------------------------------------------------------------//

/*
 * 説明の表示変更
 *
 * @param Number
 */

function changeExplanationSwf(mode)
{
  explanationType = mode;

  if (explanationType == EXPLANATION_BOX_MODE.ButtonOnly) {
    explanationOnNone();
    explanationOffBlock();
  } else {
    explanationOnBlock();
    explanationOffNone();
  }
}

//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//

/*
 * ミニマップの表示変更
 *
 * @param Number
 */

function changeInfomationSwf(mode)
{
  if (mode == INFORMATION_MODE.ButtonOnly) {
    infomationOnNone();
    infomationOffBlock();
  } else {
    infomationOnBlock();
    infomationOffNone();
  }
}

//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//

/*
 * おすすめかどうか
 *
 * @return isAreaChoice:Boolean
 */

function getAreaChoice()
{
  return isAreaChoice;
}

//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//

/*
 * オリジナルドライブコースを作る
 */

function makeOriginal()
{
  isAreaChoice = false;

  explanationMode = EXPLANATION_MODE.Original;

  if (explanationType == EXPLANATION_BOX_MODE.ShowBox) {
    document.getElementById("explanation_Onexternal").changeExplanationCondition(explanationMode);
  } else {
    changeExplanationSwf(EXPLANATION_BOX_MODE.ShowBox);
  }

  endspotNone();

  ResetSpots();
}

//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//

/*
 * ドライブムービーを見る
 */

function showDriveMovie()
{
  infomationOnNone();
  infomationOffNone();
  endspotNone();
  isDriveMovie = true;
  drivingBlock();
  explanationOnNone();

  hasSeenDriveMovie = true;

  // 一旦すべてのスポットを消す

  for (i = 0; i < pins.length; i++) {
    pins[i].Shape.SetCustomIcon(NADA_ICON);
    pins[i].Shape.SetDescription('');
  }

  // ディーラーも消す

  dealerLayer.Hide();

  // 選択されたスポットが全部入るようにマップを変更する

  map.SetMapView(
    new Array(
      new VELatLong(pins[spot0 - 1].Latitude, pins[spot0 - 1].Longitude),
      new VELatLong(pins[spot1 - 1].Latitude, pins[spot1 - 1].Longitude),
      new VELatLong(pins[spot2 - 1].Latitude, pins[spot2 - 1].Longitude)
    ) 
  );
}

//----------------------------------------------------------------------------//

/*
 * ドライブムービー用にスポットの情報を返す
 *
 * @return {spotID0:{spotID:Number, categoryID:0}, spotID1:{spotID:Number, categoryID:1}, spotID2:{spotID:Number, categoryID:2}, isDriveMovie:Boolean}
 */

function getDrivingSpot()
{
  var o = new Object();

  for (i=0; i<3; i++) {
    var oo = new Object();

    oo.spotID     = this['spot' + i];
    oo.categoryID = i;

    o['spotID' + i] = oo;
  };

  o.isDriveMovie = isDriveMovie;

  return o;
}

//----------------------------------------------------------------------------//

/*
 * 各スポットを出現させる
 *
 * @param {spotID:Number, categoryID:NUmber}
 */

function showSpotPin(obj)
{
  // さっきまでの線は消す

  lineLayer.DeleteAllShapes();

  // 線を引く

  if (pins[spot0 - 1].Shape.GetCustomIcon().CustomHTML == NADA_ICON) {
    // 最初は線を引かない 
  } else {
    var spotPoints = new Array();

    // spot0とspot1の間に線を引く

    spotPoints.push(new VELatLong(pins[spot0 - 1].Latitude, pins[spot0 - 1].Longitude));
    spotPoints.push(new VELatLong(pins[spot1 - 1].Latitude, pins[spot1 - 1].Longitude));

    if (pins[spot1 - 1].Shape.GetCustomIcon().CustomHTML != NADA_ICON) {

      // spot1とspot2の間にも線を引く

      spotPoints.push(new VELatLong(pins[spot2 - 1].Latitude, pins[spot2 - 1].Longitude));
    }

    var line = new VEShape(VEShapeType.Polyline, spotPoints);

    line.HideIcon();

    lineLayer.AddShape(line);
  }

  // スポット表示

  pins[obj.spotID - 1].Shape.SetCustomIcon(pins[obj.spotID - 1].SelectedIcon);
  pins[obj.spotID - 1].Shape.SetDescription(pins[obj.spotID - 1].DisabledDescription);
}

//----------------------------------------------------------------------------//

/*
 * 各スポットのピンに移動する
 *
 * @param {spotID:Number, categoryID:NUmber}
 */

function showSpotMap(obj)
{
  map.SetCenter(
    new VELatLong(
      pins[obj.spotID - 1].Latitude,
      pins[obj.spotID - 1].Longitude
    )
  );
}

//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//

/*
 * 応募画面へ
 */

function changeSceneApplication()
{
  infomationOnNone();
  infomationOffNone();

  explanationOnNone();
  explanationOffNone();

  if (!hasSeenDriveMovie) {
    drivingBlock();
  }

  isDriveMovie = false;
  spotNone();

  endspotNone();
}

//----------------------------------------------------------------------------//

/*
 * 応募画面からスポット選択へ戻る
 */

function changeSceneBack()
{
  isAreaChoice = false;

  explanationMode = EXPLANATION_MODE.Original;
  changeExplanationSwf(EXPLANATION_BOX_MODE.ButtonOnly);

  dealerLayer.Show();

  drivingNone();
  spotBlock();
  endspotBlock();
  changeInfomationSwf(INFORMATION_MODE.ButtonOnly);

  OrganizeSpots();

  lineLayer.DeleteAllShapes();

  hasSeenDriveMovie = false;
}

//----------------------------------------------------------------------------//

/*
 * 応募Jump!
 */

function choiceApplication()
{
  document.frm.action        = 'https://www2.peugeot.co.jp/207SWCampaign/main.php';
  document.frm.method        = 'post';
  document.frm.target        = '_blank';
  document.frm.auberge.value = spot0 < 10 ? '0' + spot0 : spot0;
  document.frm.spot1.value   = spot1 < 10 ? '0' + spot1 : spot1;
  document.frm.spot2.value   = spot2 < 10 ? '0' + spot2 : spot2;

  document.frm.submit();
}

//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//

// スポットのリセット

function ResetSpots()
{
  spot0   = null;
  spot1   = null;
  spot2   = null;
  spotNum = 0;

  OrganizeSpots();
}

//----------------------------------------------------------------------------//

// スポットの表示状態の整理

function  OrganizeSpots()
{
  if (spotNum == 0) {
    // 全部削除したら全てのスポットが選択可能になる 
  
    for (i = 0; i < pins.length; i++) {
      pins[i].Shape.SetCustomIcon(pins[i].OnIcon);
      pins[i].Shape.SetDescription(pins[i].EnabledDescription);
    }
  }else if (spotNum == 3) {
    // 全部選択したら全てのスポットが選択不可能になる 
  
    for (i = 0; i < pins.length; i++) {
      if (i == spot0 - 1 || i == spot1 -1 || i == spot2 - 1) {
        pins[i].Shape.SetCustomIcon(pins[i].SelectedIcon);
      } else {
        pins[i].Shape.SetCustomIcon(pins[i].OffIcon);
      }

      pins[i].Shape.SetDescription(pins[i].DisabledDescription);
    }
  } else {
    for (i = 0; i < pins.length; i++) {
      // 既に選択されているものは選択できなくする
      // アイコンもそれ用に変える

      if (i == spot0 - 1 || i == spot1 -1 || i == spot2 - 1) {
        pins[i].Shape.SetCustomIcon(pins[i].SelectedIcon);
        pins[i].Shape.SetDescription(pins[i].DisabledDescription);
      }else{

        if (spot0 != null) {
          // オーベルジュが選択済みの場合は、他のオーベルジュも選べない

          if (pins[i].Type == PIN_TYPE.Auberge) {
            pins[i].Shape.SetCustomIcon(pins[i].OffIcon);
            pins[i].Shape.SetDescription(pins[i].DisabledDescription);
          } else {
            pins[i].Shape.SetCustomIcon(pins[i].OnIcon);
            pins[i].Shape.SetDescription(pins[i].EnabledDescription);
          }
        } else {
          // スポット1とスポット2が埋まっていた場合は、
          // オーベルジュしか選べないように

          if (spot1 != null && spot2 != null) {
            if (pins[i].Type == PIN_TYPE.Auberge) {
              pins[i].Shape.SetCustomIcon(pins[i].OnIcon);
              pins[i].Shape.SetDescription(pins[i].EnabledDescription);
            } else {
              pins[i].Shape.SetCustomIcon(pins[i].OffIcon);
              pins[i].Shape.SetDescription(pins[i].DisabledDescription);
            }
          } else {
            pins[i].Shape.SetCustomIcon(pins[i].OnIcon);
            pins[i].Shape.SetDescription(pins[i].EnabledDescription);
          }
        }
      }
    }
  }
}

//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//

// 選択されているスポット数の計算

function getSpotNum() {
  return (spot0 == null ? 0 : 1) + (spot1 == null ? 0 : 1) + (spot2 == null ? 0 : 1); 
}
