document.observe('dom:loaded', function() {
  var form = $('add_feedback');

  if (form && !form.hasClassName('already_described_or_rated')) {
    var cancel_button = form.down("input[name=cancel]");
    cancel_button.stopObserving('click');        // cancel existing handlers the Prototype way
    cancel_button.addClassName('stop-default');  // cancel existing handler manually in IE
    cancel_button.observe('click', function(event) {
      event.stop();
      if (confirm('Do you want to cancel?')) {
        form.reset();
      }
    });
  }

  if (form && form.hasClassName('already_described_or_rated')) {
    $('feedback_form_wrapper').hide();

    var toggle = new Element('a', {'href': '#'}).update('Edit or remove my description / rating').addClassName('toggle_link');
    toggle.observe('click', function(event) {
      event.stop();
      $('feedback_form_wrapper').show();
      toggle.hide();
    });

    $$('a[href=#feedback_form]').each(function(in_context_link) {
      in_context_link.observe('click', function(event) {
        $('feedback_form_wrapper').show();
        toggle.hide();
      });
    });

    var cancel_button = form.down("input[name=cancel]");
    cancel_button.stopObserving('click');        // cancel existing handlers the Prototype way
    cancel_button.addClassName('stop-default');  // cancel existing handlers manually in IE
    cancel_button.observe('click', function(event) {
      event.stop();
      if (confirm('Do you want to cancel?')) {
        form.reset();
        $('feedback_form_wrapper').hide();
        toggle.show();
      }
    });

    form.up('div.mlc_item_add_feedback').insert({'top': toggle});
  }

  // Catch the delete feedback form and replace it with a confirmation popup
  var delete_feedback_form = $$('.delete_feedback').first();

  if (delete_feedback_form) {
    delete_feedback_form.observe('submit', function(event) {
      event.stop();
      if (confirm('Do you want to delete your comment and rating?')) {
        new Ajax.Request(delete_feedback_form.readAttribute('action'), {
          'method': 'delete',
          'parameters': {
            'authenticity_token': delete_feedback_form['authenticity_token'].getValue()
          },
          onSuccess: function(response) {
            form['description'].value = '';
            RatingWidget.clear();
            form.removeClassName('already_described_or_rated');
            toggle.hide();
            delete_feedback_form.up('div').remove();
          }
        });
      }
    });
  }
});