var MozTimeplot = {};

MozTimeplot.PerfEventSource = function(eventIndex, minTime) {
	Timeplot.DefaultEventSource.apply(this, arguments);
  this._minTime = minTime;
};

Object.extend(MozTimeplot.PerfEventSource.prototype, Timeplot.DefaultEventSource.prototype);

MozTimeplot.PerfEventSource.prototype._minTime = null;

MozTimeplot.PerfEventSource.prototype.loadText = function(text, separator, url, filter, format) {
  if (!text)
    return;

  this._events.maxValues = new Array();
  var added = false;

  if (filter)
    text = filter(text);

  if (text) {
    var lines = text.split("\n");

    for (var i = 0; i < lines.length; i++) {
      var line = lines[i].replace(/^\s+|\s+$/g, "");
      var parts = line.split(/\s+/);
      if (parts.length != 3)
        continue;
      var date = parts[1].split(":");
      if (date.length != 6)
        continue;
      var time = new Date(date[0], date[1] - 1, date[2], date[3], date[4], date[5], 0);
      if (time.getTime() < this._minTime)
        continue;
      var evt = new Timeplot.DefaultEventSource.NumericEvent(time, [ parts[2] ]);
      this._events.add(evt);
      added = true;
    }
  }

  if (added)
    this._fire("onAddMany", []);
}

MozTimeplot.BonsaiEventSource = function(eventIndex) {
	Timeplot.DefaultEventSource.apply(this, arguments);
};

Object.extend(MozTimeplot.BonsaiEventSource.prototype, Timeplot.DefaultEventSource.prototype);

const BonsaiDate = /(\d\d\d\d)-(\d\d)-(\d\d)&nbsp;(\d\d):(\d\d)/;

MozTimeplot.BonsaiEventSource.prototype.loadText = function(text, separator, url, filter, format) {
  if (!text)
    return;

  var added = false;

  var pos = text.indexOf("<TD WIDTH=47% VALIGN=TOP");
  while (pos >= 0) {
    var commentStart = text.indexOf(">", pos) + 1;
    var commentEnd = text.indexOf("\n</tr>", commentStart);
    var dateStart = text.lastIndexOf("<tr>\n<TD width=2%>", commentStart) + 55;
    var dateEnd = text.indexOf("</font>", dateStart);
    var dateParts = BonsaiDate.exec(text.substring(dateStart, dateEnd));
    var date = new Date(dateParts[1], dateParts[2] - 1, dateParts[3], dateParts[4], dateParts[5], 0, 0);
    var whoStart = text.indexOf(" >", dateEnd) + 2;
    var whoEnd = text.indexOf("</a>", whoStart);
    
    var evt = new Timeline.DefaultEventSource.Event("", date, null, null, null, null, 
                                                    text.substring(whoStart, whoEnd),
                                                    text.substring(commentStart, commentEnd),
                                                    null, null, null, null, null);
    this._events.add(evt);
    added = true;
    pos = text.indexOf("<TD WIDTH=47% VALIGN=TOP", commentEnd + 6);
  }

  if (added)
    this._fire("onAddMany", []);
}

