base_href = '/catalog/';

function getFirstChildByTagName(parent, tagName) {
  var els = parent.childNodes;
  for (var i in els) {
    var el = els[i];
    if (el && el.nodeType == 1 && el.nodeName.toLowerCase() == tagName) return el;
  }
  return null;
}

function ihref(url, txt, onclick) {
  var a = document.createElement("a");
  a.href = base_href + url;
  if (onclick) {
    a.onclick = onclick;
  }
  a.appendChild(document.createTextNode(txt));
  return a;
}

function catpage_mkonclick(catid) {
  return function() { return !catpage_click(catid); }
}

function catpage_click(catid) {
  // Use noscript navigation for old browsers (incl. IE up to 6)
  if (!document || !document.getElementById || !XMLHttpRequest) return false;

  var catbranch = document.getElementById('catbranch' + catid);
  var sublist = getFirstChildByTagName(catbranch, 'ul');
  // click on a category that is expanded, and the category collapses
  if (sublist) {
    catbranch.removeChild(sublist);
    return true;
  }
  var li = document.createElement("li");
  li.appendChild(document.createTextNode("Loading"));
  var ul = document.createElement("ul");
  ul.appendChild(li);
  catbranch.appendChild(ul);

  var url = base_href+'cattree_xhr.php?catid=' + catid;
  var infp = new XMLHttpRequest();
  infp.open('GET', url, false);
  infp.send(null);
  
  ul.removeChild(li);
  var result = infp.responseText;
  var rows = jsonParse(result);
  if (!rows) {
    catbranch.removeChild(ul);
    alert(url);
    alert(result);
    return false;
  }
  for (var i in rows) {
    var subcatid = rows[i][0];
    var subcatName = rows[i][1];
    var itemsInCat = rows[i][2];
    var a = ihref("viewcat?catid=" + subcatid, subcatName,
                  itemsInCat ? null : catpage_mkonclick(subcatid));
    li = document.createElement("li");
    li.setAttribute("id","catbranch" + subcatid);
    li.appendChild(a);
    if (itemsInCat) {
      li.appendChild(document.createTextNode(' (' + itemsInCat + ')'));
    }
    ul.appendChild(li);
  }
  
  return true;
}

