// JavaScript Document

function XSLTransform()
{
	this.transform = function(xml, xsl, xslVars, element)
	{
		var result = '';
		var xsltProcessor;
		var xslMSObject;
		var xslDoc;
		
		// code for IE
		if (window.ActiveXObject)
		{
			xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
			xslDoc.loadXML(xsl.xml);

			xslMSObject = new ActiveXObject("Msxml2.XSLTemplate");
			xslMSObject.stylesheet = xslDoc;
			
			xsltProcessor = xslMSObject.createProcessor();
			xsltProcessor.input = xml;
			
			if(xslVars)
			{
				for(var i in xslVars)
				{
					xsltProcessor.addParameter(i, xslVars[i]);
//					alert("ActiveX" + "i:" + i + "xslVars[i]" + xslVars[i]);
				}
			}
			xsltProcessor.transform();
			result = xsltProcessor.output;			

			if(element)
			{
				element.innerHTML = result;
			}
		}
		// code for Mozilla, Firefox, Opera, etc.
		else if (document.implementation && document.implementation.createDocument)
		{
			xsltProcessor	= new XSLTProcessor();
			xsltProcessor.importStylesheet(xsl);
			if(xslVars)
			{
				for(var i in xslVars)
				{
					xsltProcessor.setParameter('',i,xslVars[i]);
//					alert("i:" + i + "xslVars[i]" + xslVars[i]);					
				}
			}
			
			result = xsltProcessor.transformToFragment(xml,document);

			var serializer = new XMLSerializer();
//			result = XML(serializer.serializeToString(result)).toXMLString();
		    result = serializer.serializeToString(result);	
			if(element)
			{
				element.innerHTML = '';
				element.appendChild(result);
			}
			
		}
		
		return result;
	}
}
