/* -*- mode:Java; coding:euc-jp; tab-width:2; c-basic-offset:2; indent-tabs-mode:nil -*- */
////////////////////////////////////////////////////////////////////////////
//
var _suported = false;
var _expanded = {
  "P2P"         : 1,
  "development" : 1,
  "lang"        : 1,
  "network"     : 1,
  "platform"    : 1,
  "programming" : 1,
  "software"    : 1,
  "www"         : 1
};

checkVersion();
bindEvent(outline);

////////////////////////////////////////////////////////////////////////////
//
function outline() {
  var sidebar = document.getElementById("sidebar");
  if (sidebar == null)
    return;
  var parent = getElementByClass(sidebar, "side-box");
  if (parent == null)
    return;
  var ul = getElementByClass(parent, "category");
  if (ul == null) 
    return;
  var li = ul.getElementsByTagName("li");
  if (li == null)
    return;

  sort(ul, li);

  makeFolders(ul);

  indent(ul, li);
}

////////////////////////////////////////////////////////////////////////////
//
function toggle(o) {
  var n = this.nextSibling;
  var expanded = false;
  try {
    while (n.className != "folder") {
      if (n.nodeName != "LI") {
        n = n.nextSibling;
        continue;
      }
      if (n.style.display == "none") {
        n.style.display = "block";
        expanded = true;
      } else {
        n.style.display = "none";
      }
      n = n.nextSibling;
    }
    if (expanded) {
      this.title = "クリックで閉じます";
      this.style.backgroundImage
        = "url(http://blog-imgs-23.fc2.com/m/e/m/memolet/expand.png)";
    } else {
      this.title = "クリックで開きます";
      this.style.backgroundImage
        = "url(http://blog-imgs-23.fc2.com/m/e/m/memolet/collapse.png)";
    }
  } catch (e) {
    //alert(e);
  }
}

////////////////////////////////////////////////////////////////////////////
//
function getElementByClass(node, className) {
  var child = node.firstChild;
  while (child.className != className) {
    child = child.nextSibling;
  }
  return child;
}

function makeFolders(ul) {
  var li = ul.firstChild;
  var prev = null;
  while (li) {
    if (li.nodeName != "LI") {
      li = li.nextSibling;
      continue;
    }
    s = li.firstChild.firstChild.nodeValue;

    foldername = s.substring(0, s.indexOf("/") < 0 ? s.length : s.indexOf("/"));
    if (prev != foldername) {
      var folders_li = document.createElement('li');
      var folders_lnk = document.createElement('a');
      folders_lnk.href = "javascript:;";
      folders_lnk.appendChild(document.createTextNode(foldername));
      folders_li.appendChild(folders_lnk);
      if (_expanded[foldername]) {
        folders_li.title = "クリックで閉じます";
        folders_li.style.backgroundImage = "url(http://blog-imgs-23.fc2.com/m/e/m/memolet/expand.png)";
      } else {
        folders_li.title = "クリックで開きます";
        folders_li.style.backgroundImage = "url(http://blog-imgs-23.fc2.com/m/e/m/memolet/collapse.png)";
      }
      folders_li.className = "folder";
      folders_li.onclick = toggle;
      folders_li.style.display = "block";
      ul.insertBefore(folders_li,li);
    }
    prev = foldername;
    li = li.nextSibling;
  }
}

function indent(parent, nodes) {
  var prev = "*";
  try {
    for (i = 0; i < nodes.length; i++) {
      if (nodes[i].firstChild.firstChild == null) {
        ctg = nodes[i].firstChild.firstChild.nodeValue;
        prev = ctg.substring(0, ctg.indexOf("/"));
        prev = "*";
        continue;
      }
      s = nodes[i].firstChild.firstChild.nodeValue;
      if (0 < s.indexOf("/")) {
        basedir = s.substring(0, s.indexOf("/"));
        filename = s.substring(s.indexOf("/") + 1);
      } else {
        basedir = s;
        filename = ".";
      }
      if (prev != basedir) {
        nodes[i].firstChild.firstChild.nodeValue = basedir + "/";
      } else {
        nodes[i].firstChild.firstChild.nodeValue = filename;
        nodes[i].style.display = (_expanded[basedir]) ? "block" : "none";
        nodes[i].style.paddingLeft = "40px";
        nodes[i].style.backgroundImage = "none";
      }
      prev = basedir;
    }
  } catch (e) {
    //alert(e);
  }
}

function sort(parent,nodes) {
  var gap = nodes.length;
  gap = Math.floor(gap / 1.3);
  do {
    if (gap < 1) gap = 1;
    if (gap == 9 || gap == 10) gap = 11;
    flag = 0;
    var range = nodes.length - gap;
    for (var i = 0; i < range; i++) {
      var j = i + gap;
      if (nodes[i].firstChild.firstChild.nodeValue
          > nodes[j].firstChild.firstChild.nodeValue) {
        inode = nodes[i].cloneNode(true);
        jnode = nodes[j].cloneNode(true);
        parent.replaceChild(jnode, nodes[i]);
        parent.replaceChild(inode, nodes[j]);
        flag = i;
      }
    }
    gap = Math.floor(gap / 1.3);
  } while (gap > 0 || flag != 0);
}

function checkVersion() {
  _supported = false;
  if (navigator.appVersion.match(/MSIE (\d+\.\d+)/i)) {
    if (( RegExp.$1+0 ) >= 5.5)
      _supported = true;
  } else {
    _supported = true;
  }
}

function bindEvent( f ) {
  if (_supported) {
    if (window.addEventListener) {
      window.addEventListener("load", f, false);
    } else if (window.attachEvent) {
      window.attachEvent("onload", f);
    }
  }
}

