// JScript File
function getFirstChild(current) {
    var result = current.firstChild;
    while(result != null && result.nodeType == 3)
        result = result.nextSibling;
    return result;
}

function getNextSibling(current) {
    var result = current.nextSibling;
    while(result != null && result.nodeType == 3)
        result = result.nextSibling;
    return result;
}


function checkHeights() {
    
    document.getElementById("ruler").style.height = "0px";
    
    if (document.getElementById("env").offsetHeight < top.innerHeight) {
        document.getElementById("ruler").style.height = (top.innerHeight - document.getElementById("env").offsetHeight) + "px";
    }
}

function getXMLFromURL(URL, callBack)
{
    doXMLHttpRequest(URL, null, 
        function (result) {
            getXMLFromText(result, callBack);
        }
    );
}

function getXMLFromText(text, callBack)
{
    var parser = new DOMParser();
    var xmlDoc = parser.parseFromString(text, "text/xml");
    callBack(xmlDoc);
}

function selectSingleNodeValue(xml, xPath) {
    var result = null;
    var node = selectSingleNode(xml, xPath);
    if (node != null && node.textContent != null)
        result = node.textContent;
    return  result;
}

function selectSingleNode(xml, xPath)
{
    var xPathResult = xml.evaluate(xPath, xml.documentElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
    return xPathResult != null ? xPathResult.singleNodeValue : null;
}

function setNodeText(text, node)
{
    if (text != null && text.length && text.length > 0) {
        text = jsStringReplace(text, "&", "&amp;");
        text = jsStringReplace(text, "<", "&lt;");
        text = jsStringReplace(text, ">", "&gt;");
    }
    
    if (node != null) {
        //debugger;
        node.textContent = text;
    }
}

function getOuterXml(node)
{
    var result = "";
    
    if (node.nodeType == 9)
        node = node.documentElement;
        
    if (node.nodeType == 1)
    {
        result += "<" + node.nodeName + ">";
        if (node.childNodes.length > 0)
        {
            var child = node.childNodes[0];
            while(child != null)
            {
                if (child.nodeType == 3)
                    result += child.nodeValue;
                child = child.nextSibling;
            }
            
            child = node.childNodes[0];
            while(child != null)
            {
                if (child.nodeType == 1)
                    result += getOuterXml(child);
                child = child.nextSibling;
            }
        }
        result += "</" + node.nodeName + ">";
    }
    
    return result;

}

function setInnerHTML(container, xmlText)
{
    if (container) {
        var text1 = "<root>" + xmlText + "</root>";
        var doc = getXMLFromText(text1, 
            function (doc)
            {
                var nodes = parseToHtml(doc);
                
                var current = container.innerHTML = "";

                for (var i = 0; i < nodes.length; i++)
                    if (nodes[i].tagName != "SCRIPT")
                        container.appendChild(nodes[i]);

                var ihtml = "";
                
                ihtml += container.innerHTML;
                container.innerHTML = "";
                container.innerHTML = ihtml;
                
                for (var i = 0; i < nodes.length; i++)
                    if (nodes[i].tagName == "SCRIPT")
                        container.appendChild(nodes[i]);

            }
        );
    }
}

function parseToHtml(xmlDoc) 
{
    var result = new Array();
    var current = xmlDoc.documentElement.firstChild;
    var i = 0;
    while(current != null)
    {
        result[i] = parseToHtml1(current);
        i++;
        current = current.nextSibling;
    }
    return result;   
}

function parseToHtml1(xmlNode) 
{
    var imported = null;
    
    if (xmlNode.nodeName.toUpperCase() == "SCRIPT")
    {
        imported = document.createElement("script");
        //debugger;
        imported.text = xmlNode.textContent;
    } 
    else if (xmlNode.nodeType == 1)
    {
        imported = document.createElement(xmlNode.nodeName);
        for (var i = 0; i< xmlNode.attributes.length; i++)
        {
            if (xmlNode.attributes[i].nodeName == "style" || xmlNode.attributes[i].nodeName == "STYLE")
                imported.style.cssText = xmlNode.attributes[i].nodeValue;
            else
            {
                var attribute = document.createAttribute(xmlNode.attributes[i].nodeName);
                attribute.nodeValue = xmlNode.attributes[i].nodeValue;
                imported.setAttributeNode(attribute);
            }
        }

        var current = xmlNode.firstChild;
        while(current != null)
        {
            var child = parseToHtml1(current);
            imported.appendChild(child);
            current = current.nextSibling;
        }
    }
    else if (xmlNode.nodeType == 3)
        imported = document.createTextNode(xmlNode.nodeValue);
    else 
    {
    }
    
    return imported;
}


//var xpathResult = document.evaluate(xpathExpression, contextNode, namespaceResolver, resultType, result);
//XPathResult.UNORDERED_NODE_ITERATOR_TYPE: Iterator, Unordered 
//XPathResult.ORDERED_NODE_ITERATOR_TYPE: Iterator, Ordered 
//XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE: Snapshot, Unordered 
//XPathResult.ORDERED_NODE_SNAPSHOT_TYPE: Snapshot, Ordered 
//XPathResult.ANY_UNORDERED_NODE_TYPE: Single node, Unordered 
//XPathResult.FIRST_ORDERED_NODE_TYPE: Single node, Ordered 


//                        case 1: // ELEMENT_NODE
//                        case 5: // ENTITY_REFERENCE_NODE
//                        case 3: // TEXT_NODE
//                        case 2: // ATTRIBUTE_NODE
//                        case 4: // CDATA_SECTION_NODE
//                        case 6: // ENTITY_NODE
//                        case 7: // PROCESSING_INSTRUCTION_NODE
//                        case 8: // COMMENT_NODE
//                        case 9: // DOCUMENT_NODE
//                        case 10: // DOCUMENT_TYPE_NODE
//                        case 11: // DOCUMENT_FRAGMENT_NODE
//                        case 12: // NOTATION_NODE
