﻿

////////////////////////////////////////////////////////////////////////////////////////////////////
// XmlNodeTypes
////////////////////////////////////////////////////////////////////////////////////////////////////
var XmlNodeTypes =
{
    'Element' : 1,
    'Attribute' : 2,
    'Text' : 3,
    'CDATASection' : 4,
    'EntityReference' : 5,
    'Entity' : 6,
    'ProcessingInstruction' : 7,
    'Comment' : 8,
    'Document' : 9,
    'DocumentType' : 10,
    'DocumentFragment' : 11,
    'Notation' : 12
};


////////////////////////////////////////////////////////////////////////////////////////////////////
// XmlManager
////////////////////////////////////////////////////////////////////////////////////////////////////
function XmlManager()
{
    var This = this;

    // Methods
    This.Load = function(iUrl, iOnLoad)
    {
        if (iOnLoad)
        {
            var httpRequest = new HttpRequest(true);
            httpRequest.OnLoad.Add(function(iUrl, iContent) { iOnLoad(This.Parse(iContent)); });
            httpRequest.Get(iUrl);
        }
        else
        {
            var httpRequest = new HttpRequest(false);
            var xmlAsText = httpRequest.Get(iUrl);
            return This.Parse(xmlAsText);
        }
    }
    
    This.Parse = function(iXmlAsText)
    {
        if (window.DOMParser)
        {
            parser = new DOMParser();
            return parser.parseFromString(iXmlAsText, "text/xml");
        }
        else // Internet Explorer
        {
            var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async = "false";
            xmlDoc.loadXML(iXmlAsText);
            return xmlDoc;
        }
    }

    This.GetChildElements = function(iElement, iChildElementName)
    {
        var children = iElement.childNodes;
        var elements = [];

        if (iChildElementName)
        {
            for (var i = 0; i < children.length; i++)
            {
                var child = children[i];
                if (child.nodeType == XmlNodeTypes.Element && child.nodeName == iChildElementName)
                    elements.push(child);
            }
        }
        else
        {
            for (var i = 0; i < children.length; i++)
            {
                var child = children[i];
                if (child.nodeType == XmlNodeTypes.Element)
                    elements.push(child);
            }
        }

        return elements;
    }

    This.GetFirstChildElement = function(iElement, iChildElementName)
    {
        var elements = This.GetChildElements(iElement, iChildElementName);
        return (elements.length) ? elements[0] : null;
    }
}

////////////////////////////////////////////////////////////////////////////////////////////////////

var Xml = new XmlManager();

////////////////////////////////////////////////////////////////////////////////////////////////////
