var mainNode;
var board;
var player;
var userActions = new Array(7);

function initPages(){
  board=new Array(7);
  for(var i=0;i<board.length;i++){
    board[i]=[0,0,0,0,0,0];
  }
  for (var i=0; i< 7;i++){
    userActions[i] = getUserAction(i);
  }
    
  mainNode=document.getElementById('board');
  while(mainNode.hasChildNodes()){
    mainNode.removeChild(mainNode.lastChild);
  }
  var _p1_button = document.createElement('input');
  _p1_button.type = 'button';
  _p1_button.value = "先行";
  eventAttach(_p1_button,'click',setPlayer1);
  var _p2_button = document.createElement('input');
  _p2_button.type = 'button';
  _p2_button.value = "後攻";
  eventAttach(_p2_button,'click',setPlayer2);
  mainNode.appendChild(_p1_button);
  mainNode.appendChild(_p2_button);
  return true;
}
function setPlayer1(event){
  setPlayer(event,1);
  return true;
}
function setPlayer2(event){
  setPlayer(event,2);
  return true;
}
function setPlayer(event,p){
  event = event || window.event;
  if (event.preventDefault) {
    event.preventDefault();
  }else{
    event.returnValue = false;
  }
  if(event.stopPropagation) {
    event.stopPropagation();
  }else{
    event.cancelBubble = true
  }
  player = p;
  if(player == 2){
    getServerPlay();
  }
  showBoard();
  return true;
}
function isWon(){
  // 右横
  for(var i=0;i<4;i++){
    for(var j=0;j<6;j++){
      if(board[i][j]==board[i+1][j] && board[i][j]==board[i+2][j] && board[i][j]==board[i+3][j] && board[i][j]!=0){
        return board[i][j];
      }
    }
  }
  // 上
  for(var i=0;i<7;i++){
    for(var j=0;j<3;j++){
      if(board[i][j]==board[i][j+1] && board[i][j]==board[i][j+2] && board[i][j]==board[i][j+3] && board[i][j]!=0){
        return board[i][j];
      }
    }
  }
  // 右上 
  for(var i=0;i<4;i++){
    for(var j=0;j<3;j++){
      if(board[i][j]==board[i+1][j+1] && board[i][j]==board[i+2][j+2] && board[i][j]==board[i+3][j+3] && board[i][j]!=0){
        return board[i][j];
      }
    }
  }
  // 左上 
  for(var i=3;i<7;i++){
    for(var j=0;j<3;j++){
      if(board[i][j]==board[i-1][j+1] && board[i][j]==board[i-2][j+2] && board[i][j]==board[i-3][j+3] && board[i][j]!=0){
        return board[i][j];
      }
    }
  }
  var nextp = nextPosition();
  for(var i=0;i<7;i++){
    if(nextp[i]!=6){
      return 0;
    }
  }
  return 3; //cannot continue
}

function showBoard(){
  while(mainNode.hasChildNodes()){
    mainNode.removeChild(mainNode.lastChild);
  }
  var wonlost = isWon();
  var maintable = document.createElement('table');
  var _tbody = document.createElement('tbody');
  if(wonlost !=0){
    if(wonlost == player){
      mainNode.appendChild(document.createTextNode("あなたの勝ちです。"));
    }else if(wonlost != 3){
      mainNode.appendChild(document.createTextNode("わたしの勝ちです。"));
    }else{
      mainNode.appendChild(document.createTextNode("引き分けです。"));
    }
  }else{
    var _operation_tr = document.createElement('tr');
    var nextp = nextPosition();
    for(var j=0;j<7;j++){
      var _operation_td = document.createElement('td');
      if(nextp[j] !=6){
        var _button = document.createElement('input');
        _button.type = 'button';
        _button.value = j;
        eventAttach(_button,'click',userActions[j]);
        _operation_td.appendChild(_button);
      }
      _operation_tr.appendChild(_operation_td);
    }
    _tbody.appendChild(_operation_tr);
  }
  for(var j=(board[0].length-1);j>=0;j--){
    var _tr = document.createElement('tr');
    for(var i=0;i<board.length;i++){
      var _td = document.createElement('td');
      _td.className = "player" + board[i][j]
      if(board[i][j] !=0){
        _td.appendChild(document.createTextNode("●"));
      }else{
        _td.appendChild(document.createTextNode("　"));
      }
      _tr.appendChild(_td);
    }
    _tbody.appendChild(_tr);
  }
  maintable.appendChild(_tbody);
  mainNode.appendChild(maintable);
  return true;
}

function getUserAction(p){
  var place = p;
  return function(event){
    event = event || window.event;
    if (event.preventDefault) {
      event.preventDefault();
    }else{
      event.returnValue = false;
    }
    if(event.stopPropagation) {
      event.stopPropagation();
    }else{
      event.cancelBubble = true
    }
    putIt(place,"user");
    if(isWon() != player){;
      getServerPlay();
    }else{
      showBoard();
    }
    return true;
  }
}

function putIt(place,who){
  var nextp = nextPosition();
  if(who == "user"){
    board[place][nextp[place]] = player;
  }else{
    board[place][nextp[place]] = 3 - player;
  }
  return true;
}

function nextPosition(){
  var result=new Array(6);
  for(var i=0;i<7;i++){
    for(var j=0;j<=6;j++){
      if(board[i][j] == 0 || j==6){
        result[i]=j;
        break;
      }
    }
  }
  return result;
}

function boardStr(){
  var boardstr = "";
  for(var i=0;i<7;i++){
    for(var j=0;j<6;j++){
      boardstr += board[i][j] + "_";
    }
  }
  return boardstr;
}

function getServerPlay(){
  var req = getXmlHttpRequest();
  req.open('GET',"perl_hamlett.cgi?player=" + player + "&board=" + boardStr() , false);
  req.send(null);
  resultText = req.responseText;
  putIt(parseInt(resultText),"server");
  showBoard();
  return true;
}

