// We use this to avoid the GC from collecting objects from loadXml before
// they have actually loaded their documents and processed them:

var requests = new Array();

function loadXml (href, process)
{
  var xmlDoc;
  var len = requests.length;

  if (document.implementation && document.implementation.createDocument)
    {
      xmlDoc = document.implementation.createDocument("", "", null);
      xmlDoc.onload = function () { removeRequest(xmlDoc); process(xmlDoc) };
    }
  else if (window.ActiveXObject)
    {
      xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
      xmlDoc.onreadystatechange = function () { if (xmlDoc.readyState == 4) { removeRequest(xmlDoc); process(xmlDoc); } };
    }
  else
    {
      alert('Your browser can\'t handle this script');
      return;
    }

  requests.push(xmlDoc);
  xmlDoc.load(href);
}

function removeRequest (element)
{
  var rd, wr;
  for (rd = 0, wr = 0; rd < requests.length; rd ++)
    if (requests[rd] != element)
      requests[wr ++] = requests[rd];
  while (wr < requests.len)
    requests.pop();
}

function cleanContent (element)
{
  while (element.hasChildNodes())
    element.removeChild(element.firstChild);
}

function makeLink ( target, content )
{
  var link = makeElement('A', content);
  link.setAttribute('href', target);
  return link;
}

function makeElement (type, content)
{
  var elem = document.createElement(type);
  if (content)
    elem.appendChild(content);
  return elem;
}

function showArchive (xmlDoc, obj, prefix)
{
  var years = xmlDoc.getElementsByTagName('year');

  if (!years.length)
    return;

  var content = document.getElementById(obj)
  cleanContent(content)

  var list = makeElement('ul');
  list.setAttribute('class', 'archive');

  for (var i = 0; i < years.length; i++)
    {
      var months = years[i].getElementsByTagName('month');

      for (var j = 0; j < months.length; j ++)
        {
          var link_text = years[i].getAttribute('name') + '-' + months[j].getAttribute('name');
          var link_target = prefix + "/" + years[i].getAttribute('name') + '-' + months[j].getAttribute('name');

          var m =  makeElement('p');
          m.setAttribute('class', 'archive');

          var link = makeLink(link_target, document.createTextNode(link_text));
          link.setAttribute('class', 'archive');

          m.appendChild(link);
          m.appendChild(document.createTextNode(' (' +  months[j].getAttribute('files') + ')'));

          list.appendChild(makeElement('li',  m));
        }
    }
  content.appendChild(list);
}  