﻿function AkimanXmlDocument(xml, async) {
	var innerXml = xml;
	this.objXml = null;     
	
	if(async==null || async.constructor != Boolean) {
		async = false;
	}
	
	if(window.ActiveXObject) {
		this.objXml = new ActiveXObject("Microsoft.XMLDOM");
		this.objXml.async = async;
		this.objXml.loadXML(xml);
	}
	else {
		var parser = new DOMParser();
		this.objXml = parser.parseFromString(xml, "text/xml");
	}

	this.transform = function(xslDocument) {
		if(window.ActiveXObject) {
			return this.objXml.transformNode(xslDocument.objXsl);
		}
		else {
			var xsltProcessor = new XSLTProcessor();
			xsltProcessor.importStylesheet(xslDocument.objXsl);
			//xsltProcessor.importStylesheet(globalXSL.objXsl);
			var XHTML = xsltProcessor.transformToDocument(this.objXml);
			var xmlSerializer = new XMLSerializer();
			return xmlSerializer.serializeToString(XHTML); 
		}
	}
	
	this.innerXml = function() {
		return innerXml;
	}
}

function AkimanXslDocument(xslUrl, async) {
	this.objXsl = null;
	
	if(async==null || async.constructor != Boolean) {
		async = false;
	}
	
	if(window.ActiveXObject) {
		this.objXsl = new ActiveXObject("Microsoft.XMLDOM");
	}
	else {
		this.objXsl = document.implementation.createDocument("", "doc", null);
	}
	
	this.objXsl.async = async;
	this.objXsl.load(xslUrl);
}

function TransformXML(xml, xslUrl, async) {
	var xslt = null;
	
	if(DEBUG) {
		xslt = new AkimanXslDocument("layout/" + xslUrl);
	}
	else {
		xslt = GetXSLT(xslUrl);
		if(xslt == null) {
			xslt = new AkimanXslDocument("layout/" + xslUrl);
			glbXslCacheArray.push(new Array(xslUrl, xslt));
		}
	}	

	var xml = new AkimanXmlDocument(xml, async)
	var result = xml.transform(xslt);
	
	xslt = null;
	xml = null;
	
	return result;
}

function GetXmlNodeValue(nodes, index) {
	if(index == null) index = 0;
	
	if(nodes && nodes.length > index) {
		if (nodes[index].text) 
			return nodes[index].text;	
		else if(nodes[index].textContent) 
			return nodes[index].textContent
			
		else
			return "";
	}
	else {
		return null;
	}
}

function GetXSLT(strXSL) {
	for(var i=0; i<glbXslCacheArray.length; i++) {
		if(glbXslCacheArray[i][0] == strXSL) {
			return glbXslCacheArray[i][1];
		}
	}
	
	return null;
}

