svnwikiJavascript = new Object();

svnwikiJavascript.requests = new Array();

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

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

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

svnwikiJavascript.loadXmlDone = function (xmlDoc, proc) {
  if (xmlDoc.readyState == 4) { // if "loaded"
    svnwikiJavascript.removeRequest(xmlDoc);
    if (xmlDoc.status == 200) { // if "OK"
      proc(xmlDoc.responseXML); // pass DOM
    } else if (xmlDoc.status >= 400) {
      alert("There was a problem (status = "+xmlDoc.status+")\nretrieving the XML data:\n" + xmlDoc.statusText);
    }
  }
}

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

svnwikiJavascript.loadXml = function (href, proc, postData) {
  var xmlDoc;

  if (window.XMLHttpRequest && !(window.ActiveXObject)) {
    try {
      xmlDoc = new XMLHttpRequest();
      xmlDoc.onreadystatechange = function () { svnwikiJavascript.loadXmlDone(xmlDoc, proc); };
      xmlDoc.open(postData ? "POST" : "GET", href, true);
      if (postData) {
        xmlDoc.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlDoc.setRequestHeader("Content-length", postData.length);
        xmlDoc.setRequestHeader("Connection", "close");
        xmlDoc.send(postData);
      } else {
        xmlDoc.send("");
      }
    }
    catch(e) {
      xmlDoc = false;
    }
  }

  if (!xmlDoc && document.implementation && document.implementation.createDocument) {
    xmlDoc = document.implementation.createDocument("", "", null);
    xmlDoc.onload = function () { svnwikiJavascript.removeRequest(xmlDoc); proc(xmlDoc) };
    if (postData) {
      xmlDoc.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      xmlDoc.setRequestHeader("Content-length", data.length);
      xmlDoc.setRequestHeader("Connection", "close");
      xmlDoc.send(data);
    } else {
      xmlDoc.load(href);
    }
  }

  if (!xmlDoc && window.ActiveXObject) {
    try {
      xmlDoc = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(e) {
      try {
        xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch(e) {
        xmlDoc = false;
      }
    }
    if (xmlDoc) {
      xmlDoc.onreadystatechange = function() { svnwikiJavascript.loadXmlDone(xmlDoc, proc); }
      if (postData) {
        xmlDoc.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlDoc.setRequestHeader("Content-length", data.length);
        xmlDoc.setRequestHeader("Connection", "close");
        xmlDoc.send(data);
      } else {
        xmlDoc.load(href);
      }
    }
  }

  if (!xmlDoc) {
    alert('Your browser can\'t handle this script');
    return;
  }

  svnwikiJavascript.requests.push(xmlDoc);
}

svnwikiJavascript.showTopList = function(xmlDoc, objName, desc) {
  var items = xmlDoc.getElementsByTagName('item');
  if (!items.length)
    return;

  var obj = svnwikiJavascript.cleanContent(document.getElementById(objName));
  obj.appendChild(svnwikiJavascript.makeElement('p', document.createTextNode(desc)));
  var list = svnwikiJavascript.makeElement('ul');
  for (var i = 0; i < items.length; i++)
    {
      var name = items[i].getAttribute('name');
      var file = items[i].getAttribute('file');
      var score = items[i].getAttribute('score');

      var li = svnwikiJavascript.makeElement('li');
      li.appendChild(svnwikiJavascript.makeLink(file, document.createTextNode(name)));
      li.appendChild(document.createTextNode(' (' + score + ')'));

      list.appendChild(li);
    }
  obj.appendChild(list);
}

svnwikiJavascript.queryStringInit = function () {
  if (svnwikiJavascript.queryString != null)
    return;
  svnwikiJavascript.queryString = [];
  var qstr = location.search.substring(1).split('&');
  for (i in qstr) {
    var namePos = qstr[i].indexOf("=");
    var name, value;
    if (namePos == -1) {
      name = qstr[i];
      value = '';
    } else {
      name = qstr[i].substring(0, namePos);
      value = qstr[i].substring(namePos + 1);
    }
    name = decodeURIComponent(name);
    value = decodeURIComponent(value);
    if (svnwikiJavascript.queryString[name] == null)
      svnwikiJavascript.queryString[name] = [];
    svnwikiJavascript.queryString[name].push(value);
  }
}