/* copyright 2009-2010 atomic enterprises inc */

function catpage_mkonclick(catid) {
  return function(e) {
    if (!e) var e = window.event;
    return catpage_click(catid) ? killEvent(e) : true;
  }
}

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 = firstkid(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+" XHR gave no rows: "+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);

    // There are some categories with only one subcat.
    // Expand them now.
    if (rows.length == 1 && !itemsInCat) catpage_click(subcatid);
  }
  
  return true;
}

function catpageRegister() {
  if (!document.getElementsByTagName) return;
  var els = document.getElementsByTagName('li');
  for (i in els) {
    var li = els[i];
    if (!li.id || li.id.substring(0, 9) != 'catbranch') continue;
    var link = firstkid(li, 'a');
    if (!link) {
      alert(li.id+" has no link");
      continue;
    }
    link.onclick = catpage_mkonclick(parseInt(li.id.substring(9)));
  }
}
domReady(catpageRegister);

