var transformed = false;
function parserXml(xml, xsl, target, params){
	if (!browserSupportsXSLT()) 
		return;
		
	// code for IE
	if (window.ActiveXObject) {
		var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
		xslDoc.async = false;
		xslDoc.load(xsl);
		//Chargement du document XML
		var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
		xmlDoc.async = false;
		xmlDoc.load(xml);
		var xslt = new ActiveXObject("Msxml2.XSLTemplate");
		xslt.stylesheet = xslDoc;
		var xslProc;
		xslProc = xslt.createProcessor();
		xslProc.input = xmlDoc;
		for (parm in params) {
			if(params.hasOwnProperty(parm)) 
			{
				xslProc.addParameter(parm, params[parm]);
			}
		}
		xslProc.transform();
		$(target).innerHTML = xslProc.output;
	}
	else
	{
		transformed = false;
		var xm = {
			readyState: 4
		};
		var xs = {
			readyState: 4
		};
		
		xm = new XMLHttpRequest();
		xm.onreadystatechange = function() {change(xm, xs, target, params);};
		xm.open("GET", xml);
		xm.send(null);

		xs = new XMLHttpRequest();
		xs.onreadystatechange = function() {change(xm, xs, target, params);};
		xs.open("GET", xsl);
		xs.send(null);
            
	}
	// code for Mozilla, Firefox, Opera, etc.
	/*else if (document.implementation && document.implementation.createDocument) {
			xmlDoc = document.implementation.createDocument("", "", null);
			xmlDoc.async = false;
			xmlDoc.load(xml);
			
			xslDoc = document.implementation.createDocument("", "", null);
			xslDoc.async = false;
			xslDoc.load(xsl);
			
			var xsltProcessor = new XSLTProcessor();
			xsltProcessor.importStylesheet(xslDoc);
			
			for (parm in params) {
				if(params.hasOwnProperty(parm)) 
				{
					xsltProcessor.setParameter(null, parm, paramsXSL[parm]);
				}
			}
			
			resultDocument = xsltProcessor.transformToFragment(xmlDoc, document);
			
			$(target).appendChild(resultDocument);
		}*/
}

var change = function(xm, xs, target, params) {
	if (xm.readyState == 4 && xs.readyState == 4 && !transformed) {
		xmlDoc = xm.responseXML;
		xsltDoc = xs.responseXML;
		var resultDoc;
		var processor = new XSLTProcessor();

		if (typeof processor.transformDocument == 'function') {
			// obsolete Mozilla interface
			resultDoc = document.implementation.createDocument("", "", null);
			for (parm in params) {
				if(params.hasOwnProperty(parm)) 
				{
					processor.setParameter(null, parm, params[parm]);
				}
			}
			processor.transformDocument(xm.responseXML, xs.responseXML, resultDoc, null);
			var out = new XMLSerializer().serializeToString(resultDoc);
			$(target).update(out);
		}
		else {
			processor.importStylesheet(xs.responseXML);
			for (parm in params) {
				if(params.hasOwnProperty(parm)) 
				{
					processor.setParameter(null, parm, params[parm]);
				}
			}
			resultDoc = processor.transformToFragment(xm.responseXML, document);
			$(target).innerHTML = '';
			$(target).appendChild(resultDoc);
		}
		transformed = true;
	}
}



function browserSupportsXSLT() {
    var support = false;
    if (document.recalc) { // IE 5+
        support = true;
    }
    else if (window.XMLHttpRequest != undefined && window.XSLTProcessor != undefined) { // Mozilla 0.9.4+, Opera 9+
       var processor = new XSLTProcessor();
       if (typeof processor.transformDocument == 'function') {
           support = window.XMLSerializer != undefined;
       }
       else {
           support = true;
       }
    }
    return support;
}


