﻿/*  ==================================================================================================================
FILE 						:XMLXSLTparser.js 
DESCRIPTION 		:This javascript fille provides parsing for  XML files.  After the parsing of an XML and an XSL file , an XSLT transformation can be performed on client side. 
COMPATIBILITY 		:IE6+ ; NN  ; FF 
ATTENTION 			: url 's are provided for local testing as  "file ://"
AUTHOR 				: J.Vannieuwenhuyse  - Feb , 2007
==================================================================================================================*/
<!--

function parseXML(sFileName) {
	if (navigator.userAgent.indexOf("MSIE") != -1) {
		//1A. IE : een instantie van het DOM document aanmaken
		oDomDoc =  new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
		oDomDoc.validateOnParse = true;		//default : true
	}
	
	if ( (navigator.appName =='Netscape') && ( navigator.userAgent.indexOf('Opera') == -1) ) {
		//1B.Mozilla:een instantie van het DOM document aanmaken
		oDomDoc = document.implementation.createDocument("MijnNS", "rootElement",null); 
		//voor snelheid van parsing: een eventlistener toevoegen
		oDomDoc.addEventListener("load", documentLoaded, false);//NN alternatief op oDom.async	
	}
	
	//2.opladen in het geheugen 
	oDomDoc.async = false; // true = wacht niet op volledige parsing
	oDomDoc.validateOnParse = true;
	oDomDoc.load(sFileName);
	
	documentLoaded("");
	
	return oDomDoc;
}	
	
function documentLoaded(e) {
	var sXML ;  
	var sErrorXML ;
	
	//3A. foutdetectie IE
	if (navigator.userAgent.indexOf("MSIE") != -1) {
		sErrorXML = oDomDoc.parseError;
		if (sErrorXML.errorCode != 0 ) {
			// alert ( sErrorXML.reason + '\n Line ' + sErrorXML.line ) ;
		} 
		else {
			sXML =oDomDoc.xml;	
		}
	}
	
	// 3B.foutdetectie NN
	if ( (navigator.appName =='Netscape') && ( navigator.userAgent.indexOf('Opera') == -1) ) {
		//Mozilla voorziet actueel geen XML validatie (DTD/Schema)
	
		if (oDomDoc.documentElement != null) {
			if (oDomDoc.documentElement.nodeName == "parsererror") {
				var oXMLSerializer = new XMLSerializer();
				sErrorXML= oXMLSerializer.serializeToString(oDomDoc);
				//alert  (sErrorXML);
			} 
			else {
				// test purposes only- object naar string convertor
				var oSerializer = new XMLSerializer();
				var sXML = oSerializer.serializeToString(oDomDoc);
				//alert  (sXML) ;
			}
		}
		else {
			// test purposes only- object naar string convertor
			var oSerializer2 = new XMLSerializer();
			var sXML = oSerializer2.serializeToString(oDomDoc);
			//alert  (sXML) ;
		}
	}
	
	//4. test  en dugging purposes only : show loaded XML file 
	//window.alert (sXML);
	//window.alert (oDomDoc.documentElement.nodeName + " is  loaded .") ;
}
	
function transformXML( xmlURL , xslURL , arrParam) {
	//5. Parsen van de  XML file :
	oDomDocXML = parseXML(xmlURL) ;
	//6. Parsen van de XSL file  : 
	oDomDocXSL = parseXML(xslURL) ;
	//7. transformatie uitvoeren
	var processor ;
	var  sNewDocument ;
	
	if ( (navigator.appName =='Netscape') && ( navigator.userAgent.indexOf('Opera') == -1) ) { 
		processor = new XSLTProcessor();
		processor.importStylesheet(oDomDocXSL); 
		//8. parameters toevoegen binnen Mozilla 
		if ( arguments.length > 2) {
			for ( i=0 ; i<arguments.length-2 ; i++)  {
				sParamTxt ='param'+i  //param0 ; param1 ... 
				sParamValue = arguments[2+i] ;
				//alert (sParamTxt + ":" + sParamValue) // Moz.debugging purposes only 
				processor.setParameter( null,sParamTxt,sParamValue) ;//namespace, localName , value 
			}
		}
		oNewDocument = processor.transformToDocument(oDomDocXML);
		var oSerializer = new XMLSerializer(); // blijft anders een (HTML) object .
		sNewDocument = oSerializer.serializeToString(oNewDocument);
	} 
	else {
		var xslt = new ActiveXObject("Msxml2.XSLTemplate"); 
		xslt.stylesheet = oDomDocXSL;
		var xslProc = xslt.createProcessor(); 
		xslProc.input = oDomDocXML; 
		//8. parameters toevoegen binnen IE 
		if ( arguments.length > 2) {
			for ( i=0 ; i<arguments.length-2 ; i++)  {
			sParamTxt ='param'+i;  //param0 ; param1 ... 
			sParamValue = arguments[2+i] ;
			//alert (sParamTxt + ":" + sParamValue) // IE debugging purposes only 
			xslProc.addParameter( sParamTxt, sParamValue); 
			}
		}
		//9. transformatie uitvoeren
		xslProc.transform(); 
		sNewDocument = xslProc.output;	// prerendering noodzakelijk alvorens return 
		//		sNewDocument = oDomDocXML.transformNode(oDomDocXSL)
	}
	
	//test and debugging purposes only 
	//alert  ( sNewDocument);  // transformed document
	return sNewDocument;
}


function showInWindow(sNewDocument, iWidth, iHeight , iLeft , iTop  ) {
	var newWindow = window.open("", "XSL_Transformation", 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=auto, resizable=yes,copyhistory=yes,width='+iWidth+',height='+iHeight+', left='+iLeft+', top='+iTop+'');
	newWindow.document.write(sNewDocument);		
	newWindow.document.close();   
}

function  getAppLocation() {
	//FF verwacht het fullpath bij local rendering 
	applicationLocation= unescape(document.location.href.substring(0 , location.href.lastIndexOf("/")+1));  // substring 10 wo disk
	return applicationLocation;
}
-->

