function showHelp() {
  setHelpVisible(true);
}
function hideHelp() {
  setHelpVisible(false);
}

function hideHelpBox(help_box) {
  help_box.hide();
  update_database(help_box, false);
  updateHelpButtons();
}

function url_for_set_value_owner_settings() {
  return '/owner_settings/set_value'; // TODO set this from a hidden form element
}

function update_database(help_box, visible) {
  new Ajax.Request(url_for_set_value_owner_settings(), {
    'parameters':{
      'name': help_box.id + '_tip_visible',
      'value': visible
    }
  });
}

function setHelpVisible(visible) {
  $$('.help_box').each(function(help_box) {
    if (visible) {
      help_box.show();
      update_database(help_box, 'true')
    } else {
      help_box.hide();
      update_database(help_box, 'false')
    }
  });
}

function anyHelpVisible() {
  return $$('.help_box').any(function(o) {
    return o.visible();
  });
}

function hasHelpBoxes() {
  return $$('.help_box').size() > 0
}

function updateHelpButtons() {
  $$('.help_button').each(function(help_button) {
    if (hasHelpBoxes()) {
      help_button.show();
    }
    if (anyHelpVisible()) {
      help_button.shouldHide();
    } else {
      help_button.shouldShow();
    }
    help_button.onclick = function() {
      if (help_button.hasClassName('show_help')) {
        showHelp();
        help_button.hide();
      } else {
        hideHelp();
        help_button.shouldShow();
      }
    }
  });
}

var HelpButton = {
  shouldShow: function(element) {
    element.removeClassName('hide_help').addClassName('show_help');
    return element;
  },
  shouldHide: function(element) {
    element = $(element);
    element.removeClassName('show_help').addClassName('hide_help');
    return element;
  }
};

Event.observe(window, 'load', function() {
  Element.addMethods(HelpButton); 
  updateHelpButtons();
  
  $$('a.hide_help_link').each(function(hide_help_link) {
    var help_box = hide_help_link.up();
    hide_help_link.onclick = function() {
      hideHelpBox(help_box);
    }
  });
});