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

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

var form = 'world_form';

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

function init_form () {
  palette_reaction();
  preview();
  $('preview_img').observe('click',rotate_world);
}

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

function set_projection (field) {
  var form_elem = $(form).elements;
  var projection = selv(form_elem['projection']);

  if (projection == 'Animated Globe') {
    alert('This projection generates a rotating globe as an animated GIF.'
        + ' Since this image can be very large, please set the map height'
        + ' to a reasonable small size.');
    form_elem['height'].focus();
    disable(form_elem['rotate'],0);
  } else {
    enable(form_elem['rotate']);
  }
}
function set_palette (field) {
  palette_reaction(); preview();
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// palette reaction

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

  if (palette == 'Chthonian') {
    enable(form_elem['pct_water']);
      $('label_pct_water').update('% Magma:');
    disable(form_elem['pct_ice'],0);
  } else {
      $('label_pct_water').update('% Water:');
    if (palette == 'Martian') {
      disable(form_elem['pct_water'],0);
      enable(form_elem['pct_ice']);
    } else if (palette == 'Greyscale') {
      disable(form_elem['pct_water'],0);
      disable(form_elem['pct_ice'],0);
    } else {
      enable(form_elem['pct_water']);
      enable(form_elem['pct_ice']);
    }
  }
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// rotate world

function rotate_world (event) {
  var img_x = $('preview_img').cumulativeOffset().left;
  var img_w = $('preview_img').getWidth();
  var click_x = event.pointerX() - img_x;
  var form_elem = $(form).elements;
  var theta = parseInt(form_elem['rotate'].value);
  var delta = Math.floor(((click_x / img_w) - 0.5) * 180);

  form_elem['rotate'].value = (theta + delta + 360) % 360;
  preview();
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// preview world

function preview () {
  var form_elem = $(form).elements;
  var palette = selv(form_elem['palette']);
  var pct_water = form_elem['pct_water'].value;

  if (palette == 'Martian') {
    pct_water = 10;
  } else if (palette == 'Greyscale') {
    pct_water = 50;
  }
  var preview = {
    'projection':       'Spherical',
    'height':           '200',
    'palette':          palette,
    'seed':             form_elem['seed'].value,
    'iter':             form_elem['iter'].value,
    'pct_water':        pct_water,
    'pct_ice':          form_elem['pct_ice'].value,
    'rotate':           form_elem['rotate'].value
  };
  $('preview_img').src = worldgen_url(preview);
  $('preview').show();
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// select field

function selv (sel) {
  return sel.options[sel.selectedIndex].value;
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// disable field

var safe = { };

function enable (field) {
  if (field.disabled) {
    field.disabled = false;
    field.value = safe[field.name];
  }
  return field.value;
}
function disable (field,set) {
  if (! field.disabled) {
    field.disabled = true;
    safe[field.name] = field.value;
    field.value = set;
  }
  return field.value;
}

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

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

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


