﻿function OrtCreateXmlDocument ()
{
    var xml = null;
    if(document.implementation && document.implementation.createDocument)
        xml = document.implementation.createDocument ("", "", null);
    else
    {
        var versions = new Array ("MSXML2.DOMDocument.6.0","Msxml2.DOMDocument.5.0","MSXML2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","Microsoft.XMLDom");
        for (var i = 0; i < versions.length; i++)
        {
           try
           {
             xml = new ActiveXObject (versions[i]);
             if (xml != null)
                break;
           }
           catch (e)
           {
           }
        }
    }

    return (xml);
}

function OrtComposeTableXml (columns, records)
{
    var xml = OrtCreateXmlDocument ();
    if (xml == null)
        return (xml);

    var rootNode = xml.createElement ("rows");
    xml.appendChild (rootNode);
    if (columns == null || records == null)
        return (xml);
    if (columns.length == 0)
        return (xml);

    for (var i = 0; i < records.length; i ++)
    {
        var rowNode = xml.createElement ("row");
        rootNode.appendChild (rowNode);

        for (var j = 0; j < columns.length; j ++)
        {
            var colNode = xml.createElement (columns[j]);
            if (j < records[i].length)
                colNode.text = records[i][j];
            rowNode.appendChild (colNode);
        }
    }

    return (xml);
}

function OrtAnanlyTableXml (xml, columns)
{
    var records = new Array ();
    
    if (xml == null || columns == null)
        return (records);
    if (columns.length == 0)
        return (records);
    
    var rootNode = xml.documentElement;
    if (rootNode == null)
        return (records);
    var rowNodes = rootNode.childNodes;
    if (rowNodes == null)
        return (records);
    for (var i = 0; i < rowNodes.length; i++)
    {
        records[i] = new Array ();
        for (var j = 0; j < columns.length; j++)
            records[i][j] = "";
        
        var colNodes = rowNodes[i].childNodes;
        for (var j = 0; j < colNodes.length; j ++)
        {
            var colNode = colNodes[j];
            for (var k = 0; k < columns.length; k++)
            {
                if (colNode.nodeName == columns[k])
                {
                    records[i][k] = colNode.text;
                    break;
                }
            }
        }
    }
    
    return (records);
}

function OrtCreateRequest ()
{
    var request = null;

    if (window.XMLHttpRequest)
    {
        request = new XMLHttpRequest ();
        if (request.overrideMimeType)
            request.overrideMimeType ('text/xml');
    }
    else if (window.ActiveXObject)
    {
        try
        {
            request = new ActiveXObject ("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            try
            {
                request = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e)
            {
            }
        }
    }
    
    return (request);
}

function OrtRequestText (url, asyn, obj, fun)
{
    var request = OrtCreateRequest ();
    if (request == null)
        return (false);

    if (fun != null)
    {
        request.onreadystatechange = function()
        {
            if (request.readyState == 4)
            {
                if (request.status == 200)
                    fun (obj, true, request.responseText);
                else
                    fun (obj, false, '');
            }
        };
    }
    request.open ("get", url, asyn);
    request.send (null);
    
    return (true);
}

function OrtRequestXml (url, asyn, obj, fun)
{
    var request = OrtCreateRequest ();
    if (!request)
        return (false);

    if (fun != null)
    {
        request.onreadystatechange = function()
        {
            if (request.readyState == 4)
            {
                if (request.status == 200)
                    fun (obj, true, request.responseXML);
                else
                    fun (obj, false, '');
            }
        };
    }
    request.open ("get", url, asyn);
    request.send (null);
    
    return (true);
}

function OrtRequestTextByXml (url, xml, asyn, obj, fun)
{
    var request = OrtCreateRequest ();
    if (request == null)
        return (false);

    if (fun != null)
    {
        request.onreadystatechange = function()
        {
            if (request.readyState == 4)
            {
                if (request.status == 200)
                    fun (obj, true, request.responseText);
                else
                    fun (obj, false, '');
            }
        };
    }
    request.open ("post", url, asyn);
    request.send (xml);
    
    return (true);
}

function OrtRequestXmlByXml (url, xml, asyn, obj, fun)
{
    var request = OrtCreateRequest ();
    if (!request)
        return (false);

    if (fun != null)
    {
        request.onreadystatechange = function()
        {
            if (request.readyState == 4)
            {
                if (request.status == 200)
                    fun (obj, true, request.responseXML);
                else
                    fun (obj, false, '');
            }
        };
    }
    request.open ("post", url, asyn);
    request.send (xml);
    
    return (true);
}

