// // function searchList(div) {

var searchesByDate = nestByDate.entries(date.top(40));

div.each(function() {
  var date = d3.select(this).selectAll(".date")
      .data(searchesByDate, function(d) { return d.key; });

  date.enter().append("div")
      .attr("class", "date")
    .append("h2")
      .attr("class", "day")
      .text(function(d) { return formatDate(d.values[0].date); });

  date.exit().remove();

  var search = date.order().selectAll(".search")
      .data(function(d) { return d.values; }, function(d) { return d.index; });

  var searchEnter = search.enter().append("div")
      .attr("class", "search");         

  searchEnter.append("div")
      .attr("class", "time")
      .text(function(d) { return formatTime(d.date); });

  searchEnter.append("div").text("Found");

  searchEnter.append("div")
      .attr("class", "total")
      .text(function(d) { return formatNumber(d.total); });

  searchEnter.append("div").text(":");

  searchEnter.append("div")
      .attr("class", "text")
      .text(function(d) { return d.text; });

  searchEnter.append("div").text("# alloc");

  searchEnter.append("div")
      .attr("class", "allocation")
      .text(function(d) { return formatNumber(d.allocations); });

  searchEnter.append("div").text("/ offset");

  searchEnter.append("div")
      .attr("class", "offset")
      .text(function(d) { return formatNumber(d.offset); });

  searchEnter.append("div").text("in");

  searchEnter.append("div")
      .attr("class", "duration")
      .text(function(d) { return formatFloat(d.duration); });

  searchEnter.append("div").text("s");

  search.exit().remove();

  search.order();
});

}

// A bar chart. // function barChart() {

if (!barChart.id) barChart.id = 0;

var margin = {top: 10, right: 10, bottom: 20, left: 10},
    x,
    y = d3.scale.linear().range([100, 0]),
    id = barChart.id++,
    axis = d3.svg.axis().orient("bottom"),
    brush = d3.svg.brush(),
    brushDirty,
    dimension,
    group,
    round;

function chart(div) {
  var width = x.range()[1],
      height = y.range()[0];

  y.domain([0, group.top(1)[0].value]);

  div.each(function() {
    var div = d3.select(this),
        g = div.select("g");

    // Create the skeletal chart.
    if (g.empty()) {
      div.select(".title").append("a")
          .attr("href", "javascript:reset(" + id + ")")
          .attr("class", "reset")
          .text("reset")
          .style("display", "none");

      g = div.append("svg")
          .attr("width", width + margin.left + margin.right)
          .attr("height", height + margin.top + margin.bottom)
        .append("g")
          .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

      g.append("clipPath")
          .attr("id", "clip-" + id)
        .append("rect")
          .attr("width", width)
          .attr("height", height);

      g.selectAll(".bar")
          .data(["background", "foreground"])
        .enter().append("path")
          .attr("class", function(d) { return d + " bar"; })
          .datum(group.all());

      g.selectAll(".foreground.bar")
          .attr("clip-path", "url(#clip-" + id + ")");

      g.append("g")
          .attr("class", "axis")
          .attr("transform", "translate(0," + height + ")")
          .call(axis);

      // Initialize the brush component with pretty resize handles.
      var gBrush = g.append("g").attr("class", "brush").call(brush);
      gBrush.selectAll("rect").attr("height", height);
      gBrush.selectAll(".resize").append("path").attr("d", resizePath);
    }

    // Only redraw the brush if set externally.
    if (brushDirty) {
      brushDirty = false;
      g.selectAll(".brush").call(brush);
      div.select(".title a").style("display", brush.empty() ? "none" : null);
      if (brush.empty()) {
        g.selectAll("#clip-" + id + " rect")
            .attr("x", 0)
            .attr("width", width);
      } else {
        var extent = brush.extent();
        g.selectAll("#clip-" + id + " rect")
            .attr("x", x(extent[0]))
            .attr("width", x(extent[1]) - x(extent[0]));
      }
    }

    g.selectAll(".bar").attr("d", barPath);
  });

  function barPath(groups) {
    var path = [],
        i = -1,
        n = groups.length,
        d;
    while (++i < n) {
      d = groups[i];
      path.push("M", x(d.key), ",", height, "V", y(d.value), "h9V", height);
    }
    return path.join("");
  }

  function resizePath(d) {
    var e = +(d == "e"),
        x = e ? 1 : -1,
        y = height / 3;
    return "M" + (.5 * x) + "," + y
        + "A6,6 0 0 " + e + " " + (6.5 * x) + "," + (y + 6)
        + "V" + (2 * y - 6)
        + "A6,6 0 0 " + e + " " + (.5 * x) + "," + (2 * y)
        + "Z"
        + "M" + (2.5 * x) + "," + (y + 8)
        + "V" + (2 * y - 8)
        + "M" + (4.5 * x) + "," + (y + 8)
        + "V" + (2 * y - 8);
  }
}

brush.on("brushstart.chart", function() {
  var div = d3.select(this.parentNode.parentNode.parentNode);
  div.select(".title a").style("display", null);
});

brush.on("brush.chart", function() {
  var g = d3.select(this.parentNode),
      extent = brush.extent();
  if (round) g.select(".brush")
      .call(brush.extent(extent = extent.map(round)))
    .selectAll(".resize")
      .style("display", null);
  g.select("#clip-" + id + " rect")
      .attr("x", x(extent[0]))
      .attr("width", x(extent[1]) - x(extent[0]));
  dimension.filterRange(extent);
});

brush.on("brushend.chart", function() {
  if (brush.empty()) {
    var div = d3.select(this.parentNode.parentNode.parentNode);
    div.select(".title a").style("display", "none");
    div.select("#clip-" + id + " rect").attr("x", null).attr("width", "100%");
    dimension.filterAll();
  }
});

chart.margin = function(_) {
  if (!arguments.length) return margin;
  margin = _;
  return chart;
};

chart.x = function(_) {
  if (!arguments.length) return x;
  x = _;
  axis.scale(x);
  brush.x(x);
  return chart;
};

chart.y = function(_) {
  if (!arguments.length) return y;
  y = _;
  return chart;
};

chart.dimension = function(_) {
  if (!arguments.length) return dimension;
  dimension = _;
  return chart;
};

chart.filter = function(_) {
  if (_) {
    brush.extent(_);
    dimension.filterRange(_);
  } else {
    brush.clear();
    dimension.filterAll();
  }
  brushDirty = true;
  return chart;
};

chart.group = function(_) {
  if (!arguments.length) return group;
  group = _;
  return chart;
};

chart.round = function(_) {
  if (!arguments.length) return round;
  round = _;
  return chart;
};

return d3.rebind(chart, brush, "on");

}