Event.observe(window,"load", function() {
  $$('input.clear\_on\_click').each(function(element) {
    new ClearOnClick(element);
  });
  generate_toc();
});
var ClearOnClick = Class.create();
  Object.extend(ClearOnClick.prototype, {
    initialize: function(element) {
      this.element = $(element);
      this.originalValue = $F(element);
      this.element.observe("blur", this.onBlur.bind(this));
      this.element.observe("focus", this.onFocus.bind(this));
      var form = this.element.up("form");
      if(form) $(form).observe("submit", this.onFocus.bind(this));
    },
    onFocus: function(event) {
      if($F(this.element) == this.originalValue) {
        this.element.value = "";
        this.element.removeClassName("clear\_on\_click");
      }
    },
    onBlur: function(event) {
      if($F(this.element).match(/^\s*$/)) {
        this.element.value = this.originalValue;
        this.element.addClassName("clear\_on\_click");
      }
    }
  });

function generate_toc() {
  headings =  $$('#toc h3');
  if (headings.length < 2) return false;
  var toc = '';
  var toc_select = '';
  $('toc').insert({ top: toc = new Element('form', { id: 'jump_to'})});
  toc.insert("<label for='speakers'>Jump to speaker...</label>");
  toc.insert(toc_select = new Element('select', { id: 'speakers', name: 'speakers' }));

  headings.each(function(heading) {
    var heading_id = heading.id || heading.innerHTML.stripTags().toLowerCase().replace(/\W/g,'');
    heading.id = heading_id;
    toc_select.insert(new Element('option', { value: heading_id }).update(heading.innerHTML.stripTags()));
  });
  
  Event.observe('speakers',"change", function() {  window.location.hash = '#'+this.value; });
}
