﻿// initXsl('http://....xslurl')
// sendRequest('http://....xmlUrl', GotData);
// function GotData(req) { var xml = req.responseText; 
//          var params = new Array();
//            params[0] = new Array();
//            params[0][0] = "Key";
//            params[0][1] = 'Value';
//      $get('SomeDivID').innerHTML = xslt(getDomFromXml(xml), xslDom, params);
//      }
var N = (document.all) ? 0 : 1;
//function $g(v) { return document.getElementById(v); };
function sendRequest(url, callback, postData) {
    var req = createXMLHTTPObject();
    if (!req) return;
    var method = (postData) ? "POST" : "GET";
    req.open(method, url, true);
    req.setRequestHeader('User-Agent', 'XMLHTTP/1.0');
    if (postData)
        req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    req.onreadystatechange = function () {
        if (req.readyState != 4) return;
        if (req.status != 200 && req.status != 304) {
            //			alert('HTTP error ' + req.status);
            return;
        }
        callback(req);
    }
    if (req.readyState == 4) return;
    req.send(postData);
};

var XMLHttpFactories = [
	        function () { return new XMLHttpRequest() },
	        function () { return new ActiveXObject("Msxml2.XMLHTTP") },
	        function () { return new ActiveXObject("Msxml3.XMLHTTP") },
	        function () { return new ActiveXObject("Microsoft.XMLHTTP") }
        ];

function createXMLHTTPObject() {
    var xmlhttp = false;
    for (var i = 0; i < XMLHttpFactories.length; i++) {
        try {
            xmlhttp = XMLHttpFactories[i]();
        } catch (e) { continue; }
        break;
    }
    return xmlhttp;
};

function getDomFromXml(xml) {
    if (typeof ActiveXObject != 'undefined') {
        var dom = new ActiveXObject("Microsoft.XMLDOM");
        dom.async = false;
        dom.loadXML(xml);
    }
    else {
        parser = new DOMParser();
        dom = parser.parseFromString(xml, "text/xml");
    }
    return dom;
};

//Added By E  
function getNodesFromDom(dom, xPath) {
    var nodes;
    if (typeof ActiveXObject != 'undefined')
        nodes = dom.documentElement.selectNodes(xPath);
    else
        nodes = dom.documentElement.childNodes;

    return nodes;
};

//Added By E - Getting the field attribute according to the browser type.
function getNodeAttribute(node, attr) {
    if (typeof ActiveXObject != 'undefined') {
        if (attr == 'Content')
            return node.text;
        else
            return node.getAttribute(attr);
    }
    else {
        try {
            if (attr == 'Content')
                return node.textContent;
            else
                return node.attributes[attr].nodeValue;
        }
        catch (exp) {
            return null;
        }
    }
};

//Added By E - Setting the field attribute according to the browser type.
function setNodeAttribute(node, index, attr, attValue) {
    if (typeof ActiveXObject != 'undefined') {
        if (attr == 'Content')
            node(index).text = attValue;
        else
            node(index).setAttribute(attr, attValue);
    }
    else {
        if (attr == 'Content')
            node[index].textContent = attValue;
        else
            node[index].setAttribute(attr, attValue);
    }
};

//Added By E - getting the document xml representation string according to the browser type.
function getDomXml(dom) {
    if (typeof ActiveXObject != 'undefined')
        return dom.xml;
    else {
        var serializer = new XMLSerializer();
        return serializer.serializeToString(dom);
    }
};

function xslt(xmlDoc, xslDoc, prms) {
    var transform;
    if (typeof ActiveXObject != 'undefined') {
        var template = new ActiveXObject("MSXML2.XSLTemplate.3.0")
        template.stylesheet = xslDoc;
        var xslProc = template.createProcessor()
        xslProc.input = xmlDoc;
        if (prms) {
            for (var i = 0; i < prms.length; i++) {
                xslProc.addParameter(prms[i][0], prms[i][1])
            }
        }
        xslProc.transform()
        transform = xslProc.output;
    }
    else {
        var xsl = new XSLTProcessor();
        xsl.importStylesheet(xslDoc);
        if (prms) {
            for (var i = 0; i < prms.length; i++) {
                xsl.setParameter(null, prms[i][0], prms[i][1])
            }
        }
        var fragment = xsl.transformToFragment(xmlDoc, document);
        if (fragment.childNodes.length > 0)
            transform = fragment.childNodes[0].innerHTML;
        else
            alert("error AjaxXmlXsl.js");
    }
    return transform;
};

var xslDom;

function setXsl(req) {    
    if (N)
        xslDom = getDomFromXml(req.responseText);
    else {
        xslDom = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.3.0");
        xslDom.async = false;
        xslDom.loadXML(req.responseText);
    }
};

function initXsl(xslUrl) {
    sendRequest(xslUrl, setXsl);
}
