//Codice per creare la classe per leggere i file Xml
var AxXml = new Class
({
	//Proprietà della classe
	ErrorMessage: "Attenzione, il tuo browser non permette la corretta esecuzione dello script",
	BrowserType: null,
	
	//Costruttore della classe
	initialize: function(pOptions)
	{		
		//Se il browser è Internet Explorer (quindi istanzia un oggetto ActiveX)
		if (window.ActiveXObject)
		{
			//Imposto la proprietà che indica il tipo di browser utilizzato
			this.BrowserType = "IE";
		}
		//Invece se il browser appartiene alle altre famiglie (Mozilla, Firefox, Opera ecc.)
		else if (document.implementation && document.implementation.createDocument)
		{
			//Imposto la proprietà che indica il tipo di browser utilizzato
			this.BrowserType = "Mozilla";
		}
		else
		{	
			//Verifico che le opzioni siano passate tramite oggetto Hash	  		  	
		  	if(Object.isHash(pOptions))
		  	{		
			  	//Verifico se ho passato l'option ErrorMessage
			  	if(pOptions.get('errorMessage') != '' && pOptions.get('errorMessage') != null)
			  	{ 
		  			//Recupero il messaggio di errore custom
		  			this.ErrorMessage = pOptions.get('errorMessage');	 	
	  			}  				
	  		}	  		
					
			//Visualizzo con un alert il messaggio di errore
			alert(this.ErrorMessage);		
			
			//Genero un eccezione
			throw this.ErrorMessage;	
		}				
	},
	
	//Funzione per elaborare l'output di un xml con un file xsl
	LoadXmlDocument: function(pObjXml,pXslFileName,pObjContainer)
	{		
		//Se il browser è Internet Explorer
		if (this.BrowserType == "IE")
		{	
			//Creo l'oggetto per leggere il file Xsl
		  	objXsl = new ActiveXObject("Microsoft.XMLDOM");
		  	
		  	//Imposto la sincronicità con l'esecuzione dello script
		  	objXsl.async = false;
		  	
		  	//Carico il file Xsl
		  	objXsl.load(pXslFileName);
		  		
		  	//Richiamo il metodo per la trasformazione del documento Xsl
			objTransformDoc = pObjXml.transformNode(objXsl);
			
			//Imposto l'oggetto restituito come output sull'elemento passato (tipo DIV)	
			pObjContainer.innerHTML = objTransformDoc;
		}
		//Invece se il browser appartiene alle altre famiglie (Mozilla, Firefox, Opera ecc.)
		else if (this.BrowserType == "Mozilla")
		{
			//Creo l'oggetto per leggere processare il file Xsl
			objXsltProcessor = new XSLTProcessor();
		
			//Creo l'oggetto per effettuare un richiesta via GET
			objRequestForXsl = new XMLHttpRequest();
			
			//Apro la richiesta XmlHttp
			objRequestForXsl.open("GET", pXslFileName, false);
						
			//Effettuo la richiesta
			objRequestForXsl.send(null);
			 
			//Richiamo il metodo per ottenere la risposta Xml che contiene la lettura del file Xsl
			objXsl = objRequestForXsl.responseXML;
			
			//Richiamo il metodo per importare nel processore Xslt il file Xsl recuperato
			objXsltProcessor.importStylesheet(objXsl);
			
			//Richiamo la funzione per recuperare l'output del file Xml trasformato	
		  	objTransformDoc = objXsltProcessor.transformToFragment(pObjXml, document);
			
		  	//Resetto l'output del tag Div o simile
		  	pObjContainer.innerHTML = "";
		 
		  	//Appendo al tag Div o simile l'output Xml trasformato
			pObjContainer.appendChild(objTransformDoc);
		}
	}
});