//------------------------------------------------------------------
// Browser-independent XmlHttp factory. If the browser is not capable
// of doing XmlHttp, then we need to return a value.
//------------------------------------------------------------------

var ELEMENT_NODE = 1;
var TEXT_NODE = 3;

// helpers
function getControlPrefix() {
        if (getControlPrefix.prefix)
                return getControlPrefix.prefix;

        var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
        var o, o2;
        for (var i = 0; i < prefixes.length; i++) {
                try {
                        // try to create the objects
                        o = new ActiveXObject(prefixes[i] + ".XmlHttp");
                        o2 = new ActiveXObject(prefixes[i] + ".XmlDom");
                        return getControlPrefix.prefix = prefixes[i];
                        }
                catch (ex) {};
                }

        throw new Error("Could not find an installed XML parser");
        }


// XmlHttp factory
function XmlHttp() {}

XmlHttp.create = function () {
	if (window.XMLHttpRequest) {
        var req = new XMLHttpRequest();

		// The XMLHttpRequest implementation in the browser needs to support
		// the readyState property and the onreadystatechange event, so do
		// nothing if it doesn't.
        if (req.readyState == null) return;

		/*
        if (req.readyState == null) {
            req.readyState = 1;
            if (req.addEventListener) { 
				req.addEventListener("load", function () {
                            req.readyState = 4;
                            if (typeof req.onreadystatechange == "function")
                            req.onreadystatechange();}, false);
            }
        }
        */
        return req;
    }
	if (window.ActiveXObject) {
        s = getControlPrefix() + '.XmlHttp';
        return new ActiveXObject(getControlPrefix() + ".XmlHttp");
    }
	return;
};

function getChildNodes(xmlDomElem) {
    // get element nodes among childNodes of elem
    var result = new Array();

    var items = xmlDomElem.childNodes;
    var numitems = items.length;
    var currentItem;
    for (var i = 0; i < numitems; i++) {
            currentItem = items[i];

            if (currentItem.nodeType != ELEMENT_NODE) {
                    continue;
                    }

            result.push(currentItem);
            }
    return result;
    }

function getNamedChildNode(xmlDomElem, nodeName) {
    // Get the specified child element node among childNodes of elem.
    // Gets the first one matching.
    var result = new Array();

    var items = xmlDomElem.childNodes;
    var numitems = items.length;
    var currentItem;
    for (var i = 0; i < numitems; i++) {
		currentItem = items[i];

        if (currentItem.nodeType == ELEMENT_NODE && currentItem.nodeName == nodeName) {
            return (currentItem);
        }
    }
    return (null);
}

