// Copyright (c) 2005 koikikukan All Rights Reserved.
// http://yujiro.dyndns.com/blog/koikikukan/
// License is granted if and only if this entire
// copyright notice is included. By Yujiro ARAKI.

// Ver1.00 initial version.
// Ver1.01 corresponds to tree structure.
// Ver1.02 corresponds to MTSubCategories tag.
// Ver1.03 2005.09.10 fix bug for Mozilla.
// Ver1.04 2005.10.26 fix bug for empty data.
// Ver1.05 2006.01.26 corresponds to Serene Bach and sb.

// 不要テキストノード削除(Mozilla対応)
function deleteTextNode(nodes) {
    for (var k = 0; k < nodes.length; k++) {
        if(nodes[k].nodeName == '#text') {
            nodes[k].parentNode.removeChild(nodes[k]);
        }
    }
}

// サブカテゴリー用（再帰呼び出し）
function setClass(nodes){

    // サブカテゴリーが存在しない場合の対処
    if(!nodes[0]){
        return;
    }

    // 最初の要素がULの場合, class属性(tree)を設定
    for (var i = 0; i < nodes.length; i++) {
        if(nodes[i].nodeName == 'UL'|| nodes[i].nodeName == 'ul'){
            nodes[i].setAttribute('class', 'tree');
            nodes[i].setAttribute('className', 'tree');
            break;
        }
    }

    for (var i = 0; i < nodes.length; i++) {

        // 現在の要素がULの場合, 最後の子要素(LI)にclass属性(end)を設定
        if(nodes[i].nodeName == 'UL' || nodes[i].nodeName == 'ul'){
            var ulNodes = nodes[i].childNodes;

            // 不要テキストノード削除(Mozilla対応)
            deleteTextNode(ulNodes);

            // Mozilla 警告対処 2005.09.10
            if(ulNodes[ulNodes.length - 1].innerHTML){
                ulNodes[ulNodes.length - 1].setAttribute('class', 'end');
                ulNodes[ulNodes.length - 1].setAttribute('className', 'end');
            }
        }

        // 再帰処理
        var childNodes = nodes[i].childNodes;
        if(childNodes.length > 0){
            setClass(childNodes);
        }
    }
}

// サブカテゴリーリスト用ツリー化
function generateSubcategoryTree(){
    if(document.getElementById('categories') == null) {
        return;
    }
    nodes = document.getElementById('categories').childNodes;
    deleteTextNode(nodes);    // 不要テキストノード削除(Mozilla対応)
    setClass(nodes);
}

// ツリー構造リスト用ツリー化
function generateTreeForTreeStructure(name){
    if(document.getElementById(name) == null) {
        return;
    }
    nodes = document.getElementById(name).childNodes;
    deleteTextNode(nodes);    // 不要テキストノード削除(Mozilla対応)
    setClass(nodes);
}

// 一般リスト用ツリー化
function generateNormalTree(name) {
    if(document.getElementById(name) == null) {
        return;
    }
    nodes = document.getElementById(name).childNodes;

    // 不要テキストノード削除(Mozilla対応)
    deleteTextNode(nodes);

    for (var i = 0; i < nodes.length; i++) {

        // ul要素へのクラス属性追加
        if(nodes[i].nodeName == 'UL'|| nodes[i].nodeName == 'ul'){
            nodes[i].setAttribute('class', 'tree');
            nodes[i].setAttribute('className', 'tree');
        }
        list = nodes[i].getElementsByTagName('li');

        // li要素にclass属性(tree)を設定
        for (var j = 0; j < list.length; j++) {
            list[j].setAttribute('className', 'tree');
            list[j].setAttribute('class', 'tree');
            list[list.length - 1].setAttribute('className', 'end');
            list[list.length - 1].setAttribute('class', 'end');
        }
    }
}
