// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// dungeon/control.js
//
// copyright (c) 2009-2010 drow <drow@bin.sh>
// all rights reserved.

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// configuration

var form = 'dungeon_form';
var preview_url = '/dungeon/lib/preview.cgi';

var preview_fields = [
  'map_style', 'grid', 'dungeon_layout', 'peripheral_egress', 'add_stairs',
  'room_layout', 'door_set', 'corridor_layout', 'remove_deadends'
];
var square_fields = [
  'add_stairs', 'room_size', 'room_layout', 'door_set',
  'corridor_layout', 'remove_deadends'
];

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// initialize form

function init_form () {
  var form_elem = $(form).elements;

  if (form_elem['infest']) {
    infest_reaction();
  }
  if (form_elem['image_size']) {
    init_image_size(form_elem['image_size']);
  }
  if (form_elem['dungeon_layout']) {
    layout_reaction();
  }
  preview();
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// set field

function set_field (field) {
  preview();
}
function set_infest (field) {
  infest_reaction(); set_field();
}
function set_layout (field) {
  layout_reaction(); set_field();
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// infest reaction

function infest_reaction () {
  var form_elem = $(form).elements;
  var infest = selv(form_elem['infest']);

  if (infest == 'None') {
    form_elem['motif'].disabled = true;
  } else {
    form_elem['motif'].disabled = false;
  }
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// init image size

function init_image_size (sel) {
  var dim = screen.width + 'x' + screen.height;

  for (i = 0; i < sel.options.length; i++) {
    if (sel.options[i].value == dim) { sel.selectedIndex = i; return; }
  }
  sel.appendChild(build_option(dim,dim));
  sel.selectedIndex = sel.options.length - 1;
}
function build_option (value,text) {
  var option = new Element ('option', { 'value': value });
    option.appendChild(create_text(text));
  return option;
}
function create_text (text) {
  return document.createTextNode(text);
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// layout reaction

function layout_reaction () {
  var form_elem = $(form).elements;
  var layout_field = form_elem['dungeon_layout'];

  if (layout_field.options) {
    var layout = selv(layout_field);

    if (layout == 'Cavernous') {
      square_fields.each(function (id) { form_elem[id].disabled = true });
    } else {
      square_fields.each(function (id) { form_elem[id].disabled = false });
    }
  }
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// preview dungeon

function preview () {
  var form_elem = $(form).elements;

  var query = {
    'preview':          1,
    'seed':             form_elem['seed'].value,
    'dungeon_size':     'Preview',
    'room_size':        'Small',
  };
  preview_fields.each(function (id) {
    if (field = form_elem[id]) { query[id] = field_value(field); }
  });
  if (query['map_style'] == '') {
    query['map_style'] = 'Standard';
  }
  query = $H(query).toQueryString();

  $('preview_img').src = preview_url + '?' + query;
  $('preview').show();
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// field value

function field_value (field) {
  return (field.options) ? selv(field) : field.value;
}
function selv (sel) {
  return sel.options[sel.selectedIndex].value;
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// showtime

document.observe('dom:loaded',init_form);

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


