//
//
//
function loadReversiFunctions(namespace, ci) {
  (function() {
    var contentsIndex = ci;
    var baseDiv;

    // div 要素
    var dispatcher; // ディスパッチャー (swf)
    var reversi;     // プレイヤー (swf)

    //
    //
    //
    function makeHtml(aBaseDiv) {
      //
      baseDiv = aBaseDiv;
      var div = baseDiv;

      // Dispatcher Flash を表示する
      div.append('<div id="dispatcher' + contentsIndex + '"></div>');
      showDispatcherFlash(contentsIndex, '/reversi/ReversiSub.swf', "dispatcher" + contentsIndex, namespace);

      // UI Flash を表示する
      div.append('<div id="reversi' + contentsIndex + '"></div>');
      showContentsFlash(contentsIndex, '/reversi/ReversiScreen.swf', 'reversi' + contentsIndex , 'UI', '380', '380', namespace, 'reversi');

      //
      div.append('<table><tr><td><div style="font-size: 14px;">先手</div></td><td><div id="player0" style="font-size: 14px;"></div></td><td width="50"></td><td><div style="font-size: 14px;">後手</div></td><td><div id="player1" style="font-size: 14px;"></div></td></tr></table>');
    }

    //
    var loadCount = 0;
    function loaded(t) {
      loadCount++;
      if (loadCount >= 2) {
        namespace.dispatcher.sendLoaded();
      }
    }

    // controller -> screen

    //
    function setMode(mode) {
      namespace.reversi.setMode(mode);
    }

    //
    function setJoinUsername(idx, username) {
      namespace.reversi.setJoinUsername(idx, username);
    }

    //
    function setReadyState(idx, state) {
      namespace.reversi.setReadyState(idx, state);
    }

    //
    function setPlayerData(idx, conn, userid, nickname) {
      if (idx == 0) {
        baseDiv.find('#player0').html(nickname);
      }
      if (idx == 1) {
        baseDiv.find('#player1').html(nickname);
      }
    }

    //
    function setBoard(str) {
      namespace.reversi.setBoard(str);
    }

    //
    function setCurrentPlayer(idx) {
      if (idx == 1) {
        baseDiv.find('#player0').css({'color' : '#4040ff'});
        baseDiv.find('#player1').css({'color' : '#808080'});
      }
      if (idx == 2) {
        baseDiv.find('#player0').css({'color' : '#808080'});
        baseDiv.find('#player1').css({'color' : '#4040ff'});
      }
    }

    //
    function putStone(x, y) {
      namespace.reversi.putStone(x, y);
    }

    //
    function setStone(x, y, s) {
      namespace.reversi.setStone(x, y, s);
    }

    //
    function redrawStones() {
      namespace.reversi.redrawStones();
    }

    //
    function setBoard(w, h, p) {
      namespace.reversi.setBoard(w, h, p);
    }

    // screen -> controller

    //
    function sendJoin() {
      namespace.dispatcher.sendJoin();
    }

    //
    function sendReady() {
      namespace.dispatcher.sendReady();
    }

    //
    function sendLeave() {
      namespace.dispatcher.sendLeave();
    }

    //
    function sendPut(x, y) {
      namespace.dispatcher.sendPut(x, y);
    }

    //
    namespace.makeHtml = makeHtml;
    namespace.loaded   = loaded;

    //
    namespace.setMode          = setMode;
    namespace.setJoinUsername  = setJoinUsername;
    namespace.setReadyState    = setReadyState;
    namespace.setPlayerData    = setPlayerData;
    namespace.putStone         = putStone;
    namespace.setStone         = setStone;
    namespace.redrawStones     = redrawStones;
    namespace.setBoard         = setBoard;
    namespace.setCurrentPlayer = setCurrentPlayer;

    //
    namespace.sendJoin  = sendJoin;
    namespace.sendReady = sendReady;
    namespace.sendLeave = sendLeave;
    namespace.sendPut   = sendPut;
  }) (namespace);
}
