(function () {
	if(navigator.appName == 'Netscape'){
    // 処理を行う文字列の条件.
    var threshold = new RegExp(/[\x21-\xff]{50}/);
    // 改行許可する条件($1=改行許可直前の文字, $2=改行許可直後の文字)
    var wrapChr = new RegExp(/([\.\/\?])|([&%\-])/g);
    // 処理を行わないHTML要素.
    var avoidElm
        = new RegExp(/SCRIPT|INPUT|TEXTAREA|OPTION|PRE|XMP|PLAINTEXT/);
    // 必ず改行許可を与える文字数.
    var lineMin = 16;

    var walker = document.createTreeWalker(
        document.body, NodeFilter.SHOW_TEXT, null, true);

    while (cNode = walker.nextNode()) {
        s1 = cNode.nodeValue;
        pNode = cNode.parentNode;
        pNodeName = pNode.nodeName;

        if (!pNodeName.match(avoidElm) && s1.match(threshold)) {
            s1 = s1.replace(wrapChr, '$1<dummyWBR>$2');
            s2 = s1.split('<dummyWBR>');

            // 長い文字列は分割
            for(var i = 0; i < s2.length; i++) {
                var s2Sub;
                if(s2[i].length > lineMin) {
                    var s2Current = s2[i];
                    var s2Tail = s2.slice(i + 1);   // 最後NULLになる?
                    s2 = s2.slice(0, i);
                    var partsNum = parseInt(s2Current.length / lineMin)
                        + ((s2Current.length % lineMin) != 0);
                    s2Sub = new Array(partsNum);
                    for(var j = 0; j < partsNum; j++) {
                        s2Sub[j] = s2Current.substr(lineMin * j, lineMin);
                    }
                    s2 = s2.concat(s2Sub);
                    s2 = s2.concat(s2Tail);

                    i += (s2Sub.length - 1);    // forカウンタ分マイナス
                }
            }

            cNode.nodeValue = s2.pop();

            for (i=0; i<s2.length; i++) {
                nNode = document.createTextNode(s2[i]);
                pNode.insertBefore(nNode, cNode);

                // UA別に処理を振り分け
                if(navigator.userAgent.indexOf("Gecko") == -1) {
                    nNode = document.createTextNode("\xad");    // &shy;
                } else {
                    nNode = document.createElement('WBR');
                }
                pNode.insertBefore(nNode, cNode);
            }
        }
    }

    // ページ再計算をさせる為にwidthを定義しなおす.
    var width = document.body.style.width;
    if(!width) width = '100%';   // 100%だと横に長くなるので
    document.body.style.width = width;
    focus();
	}
})();
