function pobierzPodobneElem(nazwaZnacz, nazwaAtryb, wartoscAtryb) {
    var zbiorPoczatkowy;
    var zbiorKoncowy = new Array();
    if (nazwaZnacz) {
        zbiorPoczatkowy = document.getElementsByTagName(nazwaZnacz);    
    } else {
        zbiorPoczatkowy = (document.all) ? document.all : document.getElementsByTagName("*");
    }
    if (nazwaAtryb) {
        for (var i = 0; i < zbiorPoczatkowy.length; i++) {
            if (zbiorPoczatkowy[i].getAttribute(nazwaAtryb)) {
                if (wartoscAtryb) {
                    if (zbiorPoczatkowy[i].getAttribute(nazwaAtryb) == wartoscAtryb) {
                        zbiorKoncowy[zbiorKoncowy.length] = zbiorPoczatkowy[i];
                    }
                } else {
                    zbiorKoncowy[zbiorKoncowy.length] = zbiorPoczatkowy[i];
                }
            }
        }
    } else {
        zbiorKoncowy = zbiorPoczatkowy;
    }
    return zbiorKoncowy;
}

-----------

function analizujWezlyPotomne(obiektOdniesienia, n) {
    var ob;
    if (obiektOdniesienia) {
        if (typeof obiektOdniesienia == "string") {
            ob = document.getElementById(obiektOdniesienia);
        } else {
            ob = obiektOdniesienia;
        }
    } else {
        ob = (document.body.parentElement) ? 
            document.body.parentElement : document.body.parentNode;
    }
    var wynik= "";
    var wciecie = "";
    var i, grupa, tekst;
    if (n) {
        for (i = 0; i < n; i++) {
            wciecie += "+---";
        }
    } else {
        n = 0;
        wynik+= "Wzy potomne elementu <" + ob.tagName .toLowerCase();
        wynik+= ">\n================================\n";
    }
    grupa = ob.childNodes;
    for (i = 0; i < grupa.length; i++) {
        wynik+= wciecie;
        switch (grupa[i].nodeType) {
            case 1:
                wynik+= "<" + grupa[i].tagName.toLowerCase();
                wynik+= (grupa[i].id) ? " ID=" + grupa[i].id : "";
                wynik+= (grupa[i].name) ? " NAME=" + grupa[i].name : "";
                wynik+= ">\n";
                break;
            case 3:
                tekst = grupa[i].nodeValue.substr(0,15);
                wynik+= "[Tekst:\"" + tekst.replace(/[\r\n]/g,"<cr>");
                if (grupa[i].nodeValue.length > 15) {
                    wynik+= "...";
                }
                wynik+= "\"]\n";
                break;
            case 8:
                wynik+= "[!KOMENTARZ!]\n";
                break;
            default:
                wynik+= "[Typ wza = " + grupa[i].nodeType + "]\n";
        }
        if (grupa[i].childNodes.length > 0) {
            wynik+= analizujWezlyPotomne(grupa[i], n+1);
        }
    }
    return wynik;
}

-------------

function filtrAtrybAutor(wezel) {
    if (wezel.hasAttribute("autor")) {
        return NodeFilter.FILTER_ACCEPT;
    }
    return NodeFilter.FILTER_SKIP;
}

var tylkoAutorzy = document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT, filtrAtrybAutor, false);
