/*	Converted to innerHTML for portability */

function getLikeElements(tagName, attrName, attrValue) {
    var startSet;
    var endSet = new Array();
    if (tagName) {
        startSet = document.getElementsByTagName(tagName);    
    } else {
        startSet = (document.all) ? document.all : document.getElementsByTagName("*");
    }
    if (attrName) {
        for (var i = 0; i < startSet.length; i++) {
            if (startSet[i].getAttribute(attrName)) {
                if (attrValue) {
                    if (startSet[i].getAttribute(attrName) == attrValue) {
                        endSet[endSet.length] = startSet[i];
                    }
                } else {
                    endSet[endSet.length] = startSet[i];
                }
            }
        }
    } else {
        endSet = startSet;
    }
    return endSet;
}

// ----------

var doAll = false;

function walkChildNodes(objRef, n) {

	function showProps(obj) {
		// var reportOn = ",outerhtml,innerhtml,id,class,width,style,";
		var reportOn = ",id,class,width,style,type,checked,";
		
		for (var prop in obj) {
			var s = "," + prop + ",";
			s = s.toLowerCase();
			if (doAll || reportOn.indexOf(s) >= 0) {
				output += indent + '-----';
				if (prop=='style')
					output += prop + ": [" + getAtt(obj,'className') + "]<br />";
				else
					output += prop + ": " + obj[prop] + "<br />"; 
			}
		}
	} // showProps
    var obj;
    if (objRef) {
        if (typeof objRef == "string") {
            obj = document.getElementById(objRef);
        } else {
            obj = objRef;
        }
    } else {
        obj = (document.body.parentElement) ? 
            document.body.parentElement : document.body.parentNode;
    }
    var output = "";
    var indent = "";
    var i, group, txt;
    if (n) {
        for (i = 0; i < n; i++) {
            indent += "+---";
        }
    } else {
        n = 0;
        output += "Child Nodes of &lt;" + obj.tagName .toLowerCase() + "&gt;" + ((obj.id) ? " ID=" + obj.id : "");
        output += "<br />==================================<br />";
    }
    group = obj.childNodes;
    for (i = 0; i < group.length; i++) {
    		output += group[i].nodeType + " ";
        output += indent;
        switch (group[i].nodeType) {
            case 1:
                output += "&lt;" + group[i].tagName.toLowerCase();
                output += (group[i].id) ? " ID=" + group[i].id : "";
                output += (group[i].name) ? " NAME=" + group[i].name : "";
                output += "&gt;<br />";
                showProps(group[i]);
                break;
            case 0:
                txt = group[i].nodeValue.substr(0,15);
                output += "[Text:\"" + txt.replace(/[\r\n]/g,"&lt;cr&gt;");
                if (group[i].nodeValue.length > 15) {
                    output += "...";
                }
                output += "\"]<br />";
                break;
            case 3:
                txt = group[i].nodeValue.substr(0,15);
                output += "[Text:\"" + txt.replace(/[\r\n]/g,"&lt;cr&gt;");
                if (group[i].nodeValue.length > 15) {
                    output += "...";
                }
                output += "\"]<br />";
                break;
            case 8:
                output += "[!COMMENT!]<br />";
                break;
            default:
                output += "[Node Type = " + group[i].nodeType + "]<br />";
        }
        if (group[i].childNodes.length > 0) {
            output += walkChildNodes(group[i], n+1);
        }
    }
    return output;
}

// ----------

function authorAttrFilter(node) {
    if (node.hasAttribute("author")) {
        return NodeFilter.FILTER_ACCEPT;        
    }
    return NodeFilter.FILTER_SKIP;
}

function traverse(target, all) {
	doAll = all;
	getEl(target).innerHTML = '';
	//getEl("traverseOut").innerHTML = walkChildNodes(document.body)
	getEl(target).innerHTML = walkChildNodes(document.head)
}

function traverseEl (target, all, el) {
	el = getEl(el);
	doAll = all;
	getEl(target).innerHTML = '';
	getEl(target).innerHTML = walkChildNodes(el)
} // traverseEl


// var authorsOnly = document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT, 
                  // authorAttrFilter, false);
