function se(e, txt)
{
  elem = document.getElementById(e);
  if (elem != null) elem.innerHTML = txt;
}

function ge(e)
{
  elem = document.getElementById(e);
  if (elem != null) return elem.value;
  return null;
}

function start(f, skip_done)
{
  begin = parseInt(ge('taildemo_start'));
  end = parseInt(ge('taildemo_end'));
  se('taildemo_status', 'running');
  f(begin, end);
  if (skip_done == undefined)
    se('taildemo_status', 'done');
  return false;
}

function reset()
{
  se('taildemo_val', 'none');
  se('taildemo_status', 'none');
  return false;
}
// Simple loop version
//--------------------
function do_loop(start, end) {
  for (i=start; i <= end; i++) 
    se('taildemo_val', i);
}

// Basic recursive version
//------------------------
function do_recurse(i, stop)
{
  se('taildemo_val', i);
  if (i == stop)
    return;
  else
    do_recurse(i+1, stop);
}

// setTimeout version
//-------------------
function do_settimeout(i, stop)
{
  se('taildemo_val', i);
  if (i == stop)
    se('taildemo_status', 'done');
  else
    setTimeout('do_settimeout('+(i+1)+','+ stop+')', 0);
  // this would also work: 
  //setTimeout(function() {do_settimeout(i+1, stop) }, 0);
}

// tail() version
//---------------
function do_tail(i, stop)
{
  se('taildemo_val', i);
  if (i == stop)
    se('taildemo_status', 'done');
  else
    tail(i+1, stop);
}

// Floating box
//-------------
function float_box(height)
{
  if (height == undefined) height = 0.0;
  if (height > 5 || height < 0) float_box.direction *= -1.0;
  height += float_box.direction;
  var td = document.getElementById('taildemo_float');
  var shade = document.getElementById('taildemo_shade');
  td.style.right = height+'px';
  td.style.bottom = height+'px';
  shade.style.padding = (height/3.0)+'px';
  tail.sleep(10, height);
}
float_box.direction = 0.05;

function wait_for(fn, elems)
{
  for(var i = 0; i < elems.length; i++)
    if (document.getElementById(elems[i]) == null) 
      return tail.sleep(50, fn, elems);
  fn();
}

wait_for(float_box, ['taildemo_float', 'taildemo_shade']);
