var BOARD;

REMAINING = [];

REMAINING['sett'] = [];
REMAINING['sett']['blue'] = 5;
REMAINING['sett']['red'] = 5;
REMAINING['sett']['white'] = 5;
REMAINING['sett']['gold'] = 5;

REMAINING['road'] = [];
REMAINING['road']['blue'] = 15;
REMAINING['road']['red'] = 15;
REMAINING['road']['white'] = 15;
REMAINING['road']['gold'] = 15;

REMAINING['city'] = [];
REMAINING['city']['blue'] = 4;
REMAINING['city']['red'] = 4;
REMAINING['city']['white'] = 4;
REMAINING['city']['gold'] = 4;

NEXT_ID = 0;

SQRT_3 = Math.sqrt(3);

HEX_ON = 0x01;
HEX_OFF = 0x02;
HEX_DROP = 0x03;

HEX_SIDE = 40;

HEX_POS = [
  [HEX_SIDE*5, HEX_SIDE/2],

  [HEX_SIDE * 3/2, HEX_SIDE*SQRT_3/2],
  [HEX_SIDE * 3/2, HEX_SIDE*SQRT_3/2],
  [HEX_SIDE * 3/2, HEX_SIDE*SQRT_3/2],
  [0, HEX_SIDE*SQRT_3-1],
  [0, HEX_SIDE*SQRT_3-1],
  [0, HEX_SIDE*SQRT_3-1],
  [-HEX_SIDE * 3/2, HEX_SIDE*SQRT_3/2],
  [-HEX_SIDE * 3/2, HEX_SIDE*SQRT_3/2],
  [-HEX_SIDE * 3/2, HEX_SIDE*SQRT_3/2],
  [-HEX_SIDE * 3/2, 2-HEX_SIDE*SQRT_3/2],
  [-HEX_SIDE * 3/2, 2-HEX_SIDE*SQRT_3/2],
  [-HEX_SIDE * 3/2, 2-HEX_SIDE*SQRT_3/2],
  [0, 2-HEX_SIDE*SQRT_3],
  [0, 2-HEX_SIDE*SQRT_3],
  [0, 2-HEX_SIDE*SQRT_3],
  [HEX_SIDE * 3/2, -HEX_SIDE*SQRT_3/2],
  [HEX_SIDE * 3/2, -HEX_SIDE*SQRT_3/2],
  [HEX_SIDE * 3/2, HEX_SIDE*SQRT_3/2-1],

  [HEX_SIDE * 3/2, HEX_SIDE*SQRT_3/2],
  [HEX_SIDE * 3/2, HEX_SIDE*SQRT_3/2],
  [0, HEX_SIDE*SQRT_3-1],
  [0, HEX_SIDE*SQRT_3-1],
  [-HEX_SIDE * 3/2, HEX_SIDE*SQRT_3/2],
  [-HEX_SIDE * 3/2, HEX_SIDE*SQRT_3/2],
  [-HEX_SIDE * 3/2, 2-HEX_SIDE*SQRT_3/2],
  [-HEX_SIDE * 3/2, 2-HEX_SIDE*SQRT_3/2],
  [0, 2-HEX_SIDE*SQRT_3],
  [0, 2-HEX_SIDE*SQRT_3],
  [HEX_SIDE * 3/2, -HEX_SIDE*SQRT_3/2],
  [HEX_SIDE * 3/2, HEX_SIDE*SQRT_3/2-1],

  [HEX_SIDE * 3/2, HEX_SIDE*SQRT_3/2],
  [0, HEX_SIDE*SQRT_3-1],
  [-HEX_SIDE * 3/2, HEX_SIDE*SQRT_3/2],
  [-HEX_SIDE * 3/2, 2-HEX_SIDE*SQRT_3/2],
  [0, 2-HEX_SIDE*SQRT_3],
  [HEX_SIDE * 3/2, HEX_SIDE*SQRT_3/2-1]
];

HEX_JUMP = [];

HEX_JUMP[18] = HEX_JUMP[29] = 30;
for (var hj = 19; hj <= 28; hj += 2) HEX_JUMP[hj] = HEX_JUMP[hj+1] = 31 + (hj - 19)/2;

HEX_ADJACENCY = [
  [0,0,0,19,30,29], [18,0,0,20,31,30], [19,0,0,0,21,31],
  [31,20,0,0,22,32], [32,21,0,0,0,23], [33,32,22,0,0,24],
  [25,33,23,0,0,0], [26,34,33,24,0,0], [0,27,34,25,0,0],
  [0,28,35,34,36,0], [0,0,29,35,27,0], [0,0,19,30,35,28],
  [29,18,19,31,36,35], [30,19,20,31,36,35], [36,31,21,22,23,33],
  [34,36,32,23,24,25], [27,35,36,33,25,26], [28,29,30,36,34,27],
  [35,30,31,32,33,34]
];


VERTICES = [
  [ 0, 1, 2,31,30,29], [ 2, 3, 4,33,32,31], [ 4, 5, 6, 7,34,33],
  [34, 7, 8, 9,36,35], [36, 9,10,11,12,37], [38,37,12,13,14,39],
  [40,39,14,15,16,17], [42,41,40,17,18,19], [22,43,42,19,20,21],
  [24,45,44,43,22,23], [26,27,46,45,24,25], [28,29,30,47,46,27],
  [30,31,32,49,48,47], [32,33,34,35,50,49], [50,35,36,37,38,51],
  [52,51,38,39,40,41], [44,53,52,41,42,43], [46,47,48,53,44,45],
  [48,49,50,51,52,53]
];

VERTEX_ADJACENCY = [];
HEX_AT_VERTEX = [];

for (var v = 0; v < 19; v++) {
  for (var vi = 0; vi < 6; vi++) {
    var tv = VERTICES[v][vi];
    if (! HEX_AT_VERTEX[tv]) HEX_AT_VERTEX[tv] = [];
    if (! VERTEX_ADJACENCY[tv]) VERTEX_ADJACENCY[tv] = [];

    HEX_AT_VERTEX[tv].push([18 + v, vi]);
    VERTEX_ADJACENCY[tv].push(VERTICES[v][(vi+1)%6]);
    VERTEX_ADJACENCY[tv].push(VERTICES[v][(vi+5)%6]);
  }
}


GS_NORMAL = 0x01;
GS_ADDSETT = 0x02;
GS_ADDROAD = 0x03;
GS_ADDCITY = 0x04;
GS_MVTHIEF = 0x05;

GAME_STATE = GS_NORMAL;

ROAD_W = 8;
SETT_W = 15;
SETT_H = 22;
CITY_W = 30;
CITY_H = 29;

CHITS = [
  { letter: 'A', roll: 5 },
  { letter: 'B', roll: 2 },
  { letter: 'C', roll: 6 },
  { letter: 'D', roll: 3 },
  { letter: 'E', roll: 8 },
  { letter: 'F', roll: 10 },
  { letter: 'G', roll: 9 },
  { letter: 'H', roll: 12 },
  { letter: 'I', roll: 11 },
  { letter: 'J', roll: 4 },
  { letter: 'K', roll: 8 },
  { letter: 'L', roll: 10 },
  { letter: 'M', roll: 9},
  { letter: 'N', roll: 4 },
  { letter: 'O', roll: 5 },
  { letter: 'P', roll: 6 },
  { letter: 'Q', roll: 3 },
  { letter: 'R', roll: 11 }
];

