String.prototype.trim = function () {
  return this.replace(/\s*/, "");
};

function Link(href,text) {
  this.href = href.trim();
  this.text = text.trim();
}

Link.toString = function(l) {
  return l.text + "@" + l.href;
};

function Reddit(title,site,time,user,subreddit,points,comments) {
    this.title      = title;
    this.site       = site;
    this.time       = time;
    this.user       = user;
    this.subreddit  = subreddit;
    this.points     = parseInt(points);
    this.comments   = comments;
}

Reddit.toString = function(r) {
  var res = "";
  res += "title: "     + Link.toString(r.title)     + "\n";
  res += "site: "      + Link.toString(r.site)      + "\n";
  res += "time: "      + r.time                     + "\n";
  res += "user: "      + Link.toString(r.user)      + "\n";
  res += "subreddit: " + Link.toString(r.subreddit) + "\n";
  res += "points: "    + r.points                   + "\n";
  res += "comments: "  + Link.toString(r.comments)  + "\n";
  return res;
};


function entries(func,before,after) {
  if (before) before();
  var divs = document.getElementsByTagName("div");
  for (var i=0; i<divs.length; i++) {
    var d = divs[i];
    if (!d.className.match(/thing/)) continue;
    var title = 0;
    var site = 0;
    var time = 0;
    var user = 0;
    var subreddit = 0;
    var points = 0;
    var comments = 0;
    var ds = d.getElementsByTagName("div");
    for (var j=0; j<ds.length; j++) {
      var dd = ds[j];
      if (dd.className == "score") {
        points = dd.innerHTML.trim();
      }
    }
    var as = d.getElementsByTagName("a");
    for (var j=0; j<as.length; j++) {
      var a = as[j];
      if (a.className == "title") {
        title = new Link(a.href,a.innerHTML);
      }
      if (a.className == "comments") {
        var text = a.innerHTML.split(" ")[0];
        comments = new Link(a.href,text);
      }
      if (a.className == "subreddit hover") {
        subreddit = new Link(a.href,a.innerHTML);
      }
      if (a.className == "author") {
        user = new Link(a.href,a.innerHTML);
      }
    }
    var ss = d.getElementsByTagName("span");
    for (var j=0; j<ss.length; j++) {
      var s = ss[j];
      if (s.className == "domain") {
        var domainLink = s.getElementsByTagName("a")[0];
        site = new Link(domainLink.href,domainLink.innerHTML);
      }
    }
    var ps = d.getElementsByTagName("p");
    for (var j=0; j<ps.length; j++) {
      var pp = ps[j];
      if (pp.className == "tagline") {
        var txt = pp.innerHTML;
        if (res = txt.match(/submitted (\d+ \w+)/)) {
          time = res[1];
        }
      }
    }
    if (!subreddit) continue;
    if (!points.match(/\d+/)) continue;
    var r = new Reddit(title,site,time,user,subreddit,points,comments);
    func(r);
  }
  if (after) after();
}

