function XMLProcessor(XML, XSL, Target, Param1, Param2, Param3, Param4, Param5){
	
	document.getElementById(Target).innerHTML = "";
	
	var resultDocument;
	
	var platformMoz = (document.implementation && document.implementation.createDocument);
	var platformIE = (!platformMoz && document.getElementById && window.ActiveXObject);
	
	this.Load = function Load(){
		if(platformIE){
			document.getElementById(Target).innerHTML = resultDocument;
		} else {
			document.getElementById(Target).appendChild(resultDocument);
		}
		return true;
	}
	
	this.Build = function Build(){
		if(platformIE){
			//Load DOM and variables
			var xslt = new ActiveXObject("Msxml2.XSLTemplate");
			var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
			var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
			var xslProc;
			
			// Load XSL
			xslDoc.async = false;
			xslDoc.resolveExternals = false;
			xslDoc.load(XSL);
			xslt.stylesheet = xslDoc;
			
			// Load XML
			xmlDoc.async = false;
			xmlDoc.resolveExternals = false;
			xmlDoc.onreadystatechange=verify;
			xmlDoc.load(XML);
			
			// XSLT processor
			xslProc = xslt.createProcessor();
			xslProc.input = xmlDoc;
			
			// Pass Parameters
			if (Param1!=null) xslProc.addParameter("key1", Param1);
			if (Param2!=null) xslProc.addParameter("key2", Param2);
			if (Param3!=null) xslProc.addParameter("key3", Param3);
			if (Param4!=null) xslProc.addParameter("key4", Param4);
			if (Param5!=null) xslProc.addParameter("key5", Param5);
			
			// Transform
			xslProc.transform();
			
			// Output
			resultDocument = xslProc.output;		
		}
		
		if(platformMoz){
			
			var xsltProcessor = new XSLTProcessor();
			
			// Load XML 		
			myXMLHTTPRequest = new XMLHttpRequest();
			myXMLHTTPRequest.onreadystatechange=verify;
			myXMLHTTPRequest.open("GET", XML, false);
			myXMLHTTPRequest.send(null);
			var xmlSource = myXMLHTTPRequest.responseXML;
			
			// Load XSL
			var myXMLHTTPRequest = new XMLHttpRequest();
			myXMLHTTPRequest.open("GET", XSL, false);
			myXMLHTTPRequest.send(null);
			xslStylesheet = myXMLHTTPRequest.responseXML;
			
			//Transform
			xsltProcessor.importStylesheet(xslStylesheet);
			
			//Pass Parameter
			if (Param1!=null) xsltProcessor.setParameter(null, "key1", Param1) ; 
			if (Param2!=null) xsltProcessor.setParameter(null, "key2", Param2) ; 
			if (Param3!=null) xsltProcessor.setParameter(null, "key3", Param3) ; 
			if (Param4!=null) xsltProcessor.setParameter(null, "key4", Param4) ; 
			if (Param5!=null) xsltProcessor.setParameter(null, "key5", Param5) ; 
		
			// Ouput
			resultDocument = xsltProcessor.transformToFragment(xmlSource, document);
		}
		
		function verify() { 
			if (xmlDoc.readyState == 1){ 
				if(platformIE){
					document.getElementById(Target).innerHTML = "<div class='loading'>Loading, please wait...</div>";
				} else {
					document.getElementById(Target).appendChild("<div class='loading'>Loading, please wait...</div>");
				}
			}
		}
	}
}
