Element.addMethods({
  body: function() {
    return $$("body").first();
  },

  makeRemote: function(element, context, options) {
    options = $H({method: "get"}).merge(options);
    element.observe("click", (function(event) {
      event.stop();
      new Ajax.Request(element.getAttribute("href"), options.toObject());
    }).bindAsEventListener(context));
  },

  shrinkToContentWidth: function(element) {
    element = $(element);
    var w = element.childElements().inject(0, function(acc, child) {
      // BUG: c will always be NULL...
      if (child.childElements()) { var c = child.shrinkToContentWidth(); }
      return acc + (c || 0) + child.getWidth();
    });
    if (w > 0) { element.setStyle({"width": w + "px"}); }
  },

  centerOver: function(element, target) {
    element = $(element);
    target  = $(target);

    var targetDimensions = target.getDimensions();
    var targetOffset     = target.cumulativeOffset();
    var targetMidpoint   = {
      y: targetOffset.top + Math.ceil(targetDimensions.height / 2),
      x: targetOffset.left + Math.ceil(targetDimensions.width / 2)
    }

    element.setStyle({
      "position": "absolute",
      "top"     : (targetMidpoint.y - (Math.ceil(element.getHeight()) / 2)) + "px",
      "left"    : (targetMidpoint.x - (Math.ceil(element.getWidth()) / 2)) + "px"
    });
    return element;
  }
});