var posts = document.getElementById("blog-posts");
var request = new XMLHttpRequest();

function setMessage(val) {
  posts.firstChild.textContent = val;
}

function handleRequest() {
  if (request.readyState != 4)
    return;

  if (request.status != 200) {
    setMessage("Error retrieving matching posts: " + request.statusText);
    return;
  }

  entries = request.responseXML.getElementsByTagName("entry");

  if (entries.length == 0) {
    setMessage("No matching posts found.");
  } else {
    populatePosts(entries);
  }
}

function populatePosts(entries) {
  clearPosts();
  var list = initializePostsList();
  for (var i = 0; i < entries.length; ++i)
    addEntry(entries[i], list)
}

function clearPosts() {
  while (posts.firstChild)
    posts.removeChild(posts.firstChild);
}

function initializePostsList() {
  var list = document.createElement("ul");
  posts.appendChild(list);
  return list;
}

function addEntry(entry, list) {
  var item = document.createElement("li");
  var link = document.createElement("a");
  var id = entry.getElementsByTagName("id")[0].textContent;
  if (id[0] == '/')
    id = "http://malvasiabianca.org" + id
  var title = entry.getElementsByTagName("title")[0].textContent;
  link.textContent = title;
  link.setAttribute("href", id);
  item.appendChild(link);
  list.appendChild(item);
  // TODO: Add date?
}

function fetchBlogPosts(query) {
  var postsFeed = "/~carlton/dbcdb/blogposts/?" + query;
  request.open("GET", postsFeed, true);
  request.onreadystatechange = handleRequest;
  request.send(null);
  setMessage("Searching for related blog posts...");
}

function pruneInitialText() {
  while (!posts.firstChild.firstChild)
    posts.removeChild(posts.firstChild);
}

function locateQuery() {
  pruneInitialText()
  var ref = posts.firstChild.getAttribute("href");
  return ref.match(/(s=dbcdb%2F.+%2F)/)[1];
}

fetchBlogPosts(locateQuery());
