// クラス名の定義
pane_class    = 'topicsarea';      // メニュー領域のクラス名
subpane_class = 'sub_pane';  // 折りたたみ領域のクラス名
folder_class  = 'folder';    // フォルダのクラス名
icon_class    = 'icon';      // フォルダアイコンのクラス名
// アイコンの定義
imgs = new Array(
  'img/tog_close.gif',      // 開いている状態のアイコン
  'img/tog_open.gif'     // 閉じている状態のアイコン
);
// display スタイルの定義
displays = new Array(
  'block',                     // 閉じている状態の display スタイル
  'none'                   // 開いている状態の display スタイル
);

// フォルダ状態を逆転する関数
function menu_toggle(folder,icon){
  // DOM チェック
  if(!document.hasChildNodes) return;

  // アイコンの変更
  var node = null, state = folder.folder_state?1:0;
  var new_state = state?0:1;
  if(icon){
    if(icon.className && icon.className == icon_class) node = icon;
    else if(icon.hasChildNodes()){
      var nodes = icon.childNodes;
      for(var i=0; i<nodes.length; i++){
        var n = nodes[i];
        if(n.className && n.className == icon_class){
          node = n;
          break;
        }
      }
    }
    if(node) node.src = imgs[new_state];
  }
  // メニュー表示の変更
  if(folder.parentNode.hasChildNodes()){
    var nodes = folder.parentNode.childNodes;
    for(var i=0; i<nodes.length; i++){
      var node = nodes[i];
      if(node.className){
        if(node.className == subpane_class){
          node.style.display = displays[new_state];
          break;
        }
      }
    }
    folder.folder_state = new_state;
  }
  return false;
}
// -->


//●このスクリプトは IE5.5, IE6, Mozilla1.4, Opera7.03( 以上 Windows ), Safari1.0, IE5.2( 以上 Mac 10.2 ), Konqueror3.1, Opera7.20 Beta7( 以上 RedHat 9 ) で確認しています
//これより古いバージョンのブラウザでは正常に動作しないかもしれません

//●Konqueror では同一フォルダのクリック動作で１回おきにしか menu_toggle関数が呼び出されないバグがあります

//●旧ブラウザでフォルダの選択動作を無効にする最も簡単な手法は onclickの指定をリンク( href付き Aタグ )ではなくアンカータグ( hrefなし A タグ )や span, imgタグに指定する方法でしょう

//●旧ブラウザや JavaScript オフのブラウザを考慮するとメニューの初期表示は全て展開した状態で表示させた方が良いと思われます
//( もちろん、onload で全てを閉じるスクリプトを追加するのはアリです f(^^; )

//●どうしても初期表示の状態を折り畳んだ状態にしたい場合は "sub_pane" クラスの display 属性を "none" にして、 imgs, displays の配列要素の順番を逆にします

//● "sub_pane" がブロック要素でない場合、displays 配列の定義の修正が必要です

//●多階層のメニューで階層毎にスタイルの指定を変えたい場合は、 menu_toggle 関数に "sub_pane" のクラス名を引数に追加する修正をすれば良いと思います 