city_mousemove = function (e) {
  if (!e) e = window.event;
  var x = e.layerX || e.offsetX;
  var y = e.layerY || e.offsetY;

  if (GAME_STATE == GS_NORMAL) {

  }
  else if (GAME_STATE == GS_ADDROAD) {

  }
  else if (GAME_STATE == GS_ADDSETT) {

  }
  else if (GAME_STATE == GS_ADDCITY) {

  }
};


city_click = function (e) {
  if (!e) e = window.event;
  var x = e.layerX || e.offsetX;
  var y = e.layerY || e.offsetY;

  if (GAME_STATE == GS_NORMAL) {

  }
  else if (GAME_STATE == GS_ADDROAD) {

  }
  else if (GAME_STATE == GS_ADDSETT) {

  }
  else if (GAME_STATE == GS_ADDCITY) {
    if (this == BOARD.new_city && this.ok) save_city();
  }
};


function start_add_city () {
  if (GAME_STATE == GS_ADDCITY) {
    cancel_city();
    return;
  }
  else if (GAME_STATE != GS_NORMAL) {
    alert("You're busy doing something else!");
    return;
  }

  var sbox = $ID('city_color');
  var color = sbox.options[sbox.selectedIndex].value;

  if (REMAINING['city'][color] == 0) {
    alert("You don't have any cities left!");
    return;
  }

  if (! BOARD.setts[color]) {
    alert("You can't build any cities yet!");
    return;
  }

  REMAINING['city'][color]--;
  sbox.options[sbox.selectedIndex].text = color + " (" + REMAINING['city'][color] + ")";

  add_city(color);
}


function add_city (color) {
  if (GAME_STATE != GS_NORMAL) return;

  var img = $EL('IMG', '', 'sett');
  img.color = color;
  img.onmousemove = city_mousemove;
  img.onclick = city_click;

  GAME_STATE = GS_ADDCITY;
  BOARD.appendChild(img);
  BOARD.new_city = img;
}


function cancel_city () {
  if (GAME_STATE != GS_ADDCITY) return;

  var sbox = $ID('city_color');
  var color = sbox.options[sbox.selectedIndex].value;
  REMAINING['city'][color]++;
  sbox.options[sbox.selectedIndex].text = color + " (" + REMAINING['city'][color] + ")";

  BOARD.removeChild(BOARD.new_city);
  GAME_STATE = GS_NORMAL;
}


function save_city () {
  if (GAME_STATE != GS_ADDCITY) return;
  var hex_v = BOARD.new_city.vertex;
  var this_h = BOARD.new_city.hex;
  var vertex = VERTICES[this_h.n-18][hex_v];

  for (var h in HEX_AT_VERTEX[vertex]) {
    var hex_id = HEX_AT_VERTEX[vertex][h];
    BOARD.zones[hex_id[0]].cities[hex_id[1]] = BOARD.new_city;
  }

  this_h.setts[hex_v].style.visibility = 'hidden';
  BOARD.removeChild(this_h.setts[hex_v]);

  var sbox = $ID('sett_color');
  var color = sbox.options[sbox.selectedIndex].value;
  REMAINING['sett'][color]++;
  sbox.options[sbox.selectedIndex].text = color + " (" + REMAINING['sett'][color] + ")";

  GAME_STATE = GS_NORMAL;
}


function can_place_city (hex, v) {
  if (v == null) return false;
  var vertex = VERTICES[hex.n-18][v];

  // we can only place a city if it's on top of
  // a settlement of the same color
  if (hex.setts[v] && hex.setts[v].color == BOARD.new_city.color) return true;

  return false;
}

