function goal_siblings(li_elem)
{
  var ul_parent = li_elem.ancestors()[0];
  return ul_parent.immediateDescendants();
}

function goal_input(elem)
{
  return elem.immediateDescendants().detect(function(e) { return e.tagName == "INPUT"; });
}

function goal_children(elem)
{
  return elem.immediateDescendants().detect(function(e) { return e.tagName == "UL"; });
}

function goal_form(elem)
{
  return elem.ancestors().detect(function(e) { return e.tagName == "FORM"; });
}

function reset_goal_children(elem)
{
  elem.select('input').each(function(c) { c.checked = false; });
  elem.select('li.all input').each(function(c) { c.checked = true; });
}

function toggle_adjust(toggle_li, event)
{
  var input_elem = goal_input(toggle_li);
	var children = goal_children(toggle_li);
	if (!children)
	  return;
  if (event.findElement().ancestors().detect(function(e) { return e == children; }))
    return;
	if (input_elem.checked)
	{
    children.removeClassName('hide');
	  children.setStyle({display: 'block'});
	}
	else
	{
	  children.setStyle({display: 'none'});
	}
	reset_goal_children(children);
}

function init_toggle(elem)
{
  if (elem.hasClassName("tograd"))
  {
    var sibs = goal_siblings(elem);
    var vindaloo = toggle_adjust.curry(elem);
    sibs.each(function(e)
  		{
  		  e.observe('click', vindaloo);
  		});
  }
  else
  {
    elem.observe('click', toggle_adjust.curry(elem));
  }
}

function slider_toggle_click(input_id, children_id)
{
	var input_elem = $(input_id);
	var elem = $(children_id)
	var slider = BestInClass.GoalSlider.from_elem(elem.down('li.slider_goal'));
	if (input_elem.checked)
	{
    elem.removeClassName('hide');
	  elem.setStyle({display: 'block'});
	  slider.show();
	}
	else
	{
	  slider.clear();
	  elem.setStyle({display: 'none'});
	}
}

function more_click(input_id, children_id)
{
  var input_elem = $(input_id);
  var elem = $(children_id);
  elem.removeClassName('hide');
  elem.setStyle({display: 'block'});
  input_elem.setStyle({display: 'none'});
}

var last_help = null;

function help(id)
{
  close_help(last_help);
  $('help_' + id).setStyle({display: 'block'});
  last_help = id;
}

function close_help(id)
{
  if (id)
    $('help_' + id).setStyle({display: 'none'});
}

function allset_uncheck(elem, all_clicked)
{
  var is_all = elem.hasClassName('all');
  if (all_clicked == is_all)
    return;
  var inputs = elem.select('input');
  if (inputs.size() == 0)
    return;
  inputs[0].checked = false;
}

function allset_click(event)
{
  var elem = event.element();
  var ancestors = elem.ancestors();
  var li_parent = ancestors[0];
  var allset_parent = ancestors.detect(function(e) {
    return e.hasClassName('allset');
  });
  var is_all_elem = li_parent.hasClassName('all');
  var related_lis = allset_parent.getElementsBySelector('.children li');
  related_lis.each(function(e) {
    allset_uncheck(e, is_all_elem);
  });
}

function reveal_submit(elem)
{
  var gset = elem.ancestors().detect(function(e) {
    return e.hasClassName('gset');
  });
  if (gset == null)
    return;
  gset.getElementsBySelector('.sub').each(function(e){
    e.removeClassName('hide');
  });
}

function form_click(event, elem)
{
  var elem = event.element();
  if (elem.tagName.toLowerCase() != "input")
    return;
  reveal_submit(elem);
}

function form_submit()
{
  $('questionnaire').submit();
}

Event.observe(window, 'load', function() {
  var qnaire = $('qnaire');
  if (qnaire == null)
    return;
  var form = goal_form(qnaire);
  form.observe('click', form_click);
  BestInClass.GoalSlider.init();
  BestInClass.GoalSlider.sliders.each(function(e) {
    e.submit_elem = form;
  });
  $$('.allset .children li input').each(function(e) {
    e.observe('click', allset_click)
  });
  $$('.toggle').each(function(e) {
    init_toggle(e);
  });
});

