﻿var isIE = window.navigator.appVersion.indexOf("MSIE"!=-1);
var bVersion=navigator.userAgent.toLowerCase();

function SelectSingleNode(node, xpath) {
    
    if(node.evaluate)
    {
        node = node.evaluate(xpath, node.documentElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
        return node.singleNodeValue;
    }
    else
    {
        return node.selectSingleNode(xpath);
    }
}
function SelectNodes(node, xpath) {

    if(window.ActiveXObject)
    {
        return node.selectNodes(xpath);
    }
    else
    {
        var xpe = new XPathEvaluator();
        var nsr = xpe.createNSResolver(node.ownerDocument == null ?node.documentElement : node.ownerDocument.documentElement);
        var result = xpe.evaluate(xpath, node, nsr, 0, null);
        var found = [];
        var res;
        while (res = result.iterateNext()) found.push(res);
        return found;
    }
}   
function OuterXML(xmlDoc)
{
    var str;
    if(window.ActiveXObject)
    {
        str = xmlDoc.xml;
    }
    else if (document.implementation && document.implementation.createDocument)
    {
        var s = new XMLSerializer();
        str = s.serializeToString(xmlDoc);
    }
    return str;
}
function LoadXML(str)
{ 
    var doc;
    if (window.ActiveXObject)
    {
        doc = new ActiveXObject("Microsoft.XMLDOM");
        doc.async= false;
        doc.loadXML(str);
    }
    else
    {
        var parser = new DOMParser();
        doc = parser.parseFromString(str,"text/xml");
    }
    return doc;
}

function CreateXMLDocument(xmlPath)
{
	var xmlDocument = null;
	if(document.implementation && document.implementation.createDocument)
	{
		xmlDocument = document.implementation.createDocument("", "", null); 
	}
	else
	{
		if(xmlPath == null)
			xmlDocument = new ActiveXObject("Microsoft.XMLDOM");
		else
			xmlDocument = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
	}
	xmlDocument.async = false;
	if (xmlPath != null) 
	{
		xmlDocument.load(xmlPath);
	}
	return xmlDocument;
}

function CreateXSLTProcessor(xslTransform)
{
	var xsltProcessor = null;
	if(document.implementation && document.implementation.createDocument)
	{
		xsltProcessor = new XSLTProcessor();
		xsltProcessor.importStylesheet(xslTransform);
	}
	else
	{
		var xslTemplate = new ActiveXObject("MSXML2.XSLTemplate");
		xslTemplate.stylesheet = xslTransform;
		xsltProcessor = xslTemplate.createProcessor();
	}

	return xsltProcessor;
}

function XSLTProcessorTransform(xslProcessor, xmlInput, xslParameter)
{
	var transDoc = null;

	if(document.implementation && document.implementation.createDocument)
	{
		var newDocument = xslProcessor.transformToDocument(xmlInput); 
		transDoc = OuterXML(newDocument);
	}
	else
	{
		xslProcessor.input = xmlInput;
		xslProcessor.transform();
		transDoc = xslProcessor.output;
	}
	return transDoc;
}

function XSLTProcessorParamsAdd(xslProcessor, key, value)
{
	if(document.implementation && document.implementation.createDocument)
	{
		xslProcessor.setParameter(null, key, value);
	}
	else
	{
		xslProcessor.addParameter(key, value);
	}
}

function Transform(xmlDoc,xslDoc)
{
    var result;
    if (window.ActiveXObject)
    {
        result = xmlDoc.transformNode(xslDoc);
    }
    else if (document.implementation && document.implementation.createDocument)
    {
        var processor = new XSLTProcessor();
        processor.importStylesheet(xslDoc);
        var newDocument = processor.transformToDocument(xmlDoc);    
        result = OuterXML(newDocument);
    }
    else
    {
        alert('Your browser does not support XSLT transformation.');
    }
    return result;
}

function GetNodeText(node)
{
    var result;
    if(window.ActiveXObject)
    {
        result =  node.text;
    }
    else
    {
        result = node.firstChild.nodeValue;
    }
    return result;
}

//When the browser is Safari use this function to transform the xml document
function LoadServerTransformedDoc(url, container, xmlStr, xmlFile, xslFile, params, afterScriptFunction)
{ 
	var xmlhttp = new XMLHttpRequest();
	xmlhttp.open('POST', url, true);
	
	xmlhttp.onreadystatechange = function()
	{ 
		if (xmlhttp.readyState == 4)
		{
			if (xmlhttp.status == 200)
			{
				setTransformedStream(container, xmlhttp.responseText, afterScriptFunction);
			}
			else 
			{
				alert ("Error reading the document: " + xmlhttp.status);
				return;
			}
		}
	};

	//alert("xmlStr=" + xmlStr + "&xmlFile=" + xmlFile + "&xslFile=" + xslFile);
	xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	xmlhttp.send("xmlStr=" + xmlStr + "&xmlFile=" + xmlFile + "&xslFile=" + xslFile + "&params=" + params);
}

function setTransformedStream(container, content, afterScriptFunction)
{
    container.innerHTML = content;
    if (afterScriptFunction)
    {
        if(window.execScript)
        {
            window.execScript(afterScriptFunction + '()'); 
        }
    else 
        {
            window.setTimeout(eval(afterScriptFunction), 0)
        }
    }
}


