/****************************************************/
/****** Classe XMLTOOL ******************************/
/****************************************************/

// Constructeur 
// xmlURL : url du fichier xmkl source
// xslURL : url du fichier xsl source
// Le constructeur charge les 2 fichiers
function XMLTool( xmlURL, xslURL )
{
	this.xml = this.loadXML( xmlURL );
	
	if ( xslURL != null ) {
		this.xsl = this.loadXML( xslURL );
	}
}


// Méthode init
// id = identifiant de l'élement dans lequel il faut mettre le HTML généré
// Construit le HTML à parir des fichiers xml et xsl et l'affiche dans l'élément ayant le id spécifié
XMLTool.prototype.init = function( id )
{
	this.transform( this.xml, this.xsl, id );
}


//Méthode loadXML
// url : url du fichier à charger
// charge de manière synchrone le fichier xml ou xsl spécifié
XMLTool.prototype.loadXML = function( url )
{
	try
	{
		
		// Cas Firefox
		if (document.implementation && document.implementation.createDocument)
		{
			xmlDoc = document.implementation.createDocument('', '', null);
			xmlDoc.async=false;
			xmlDoc.load(url);
		}
		
		// Cas Internet Explorer
		else if (window.ActiveXObject)
		{
			try
			{ 
				xmlDoc = new ActiveXObject('Msxml2.XMLDOM');  
			}
			catch (e)
			{
				xmlDoc = new ActiveXObject('Microsoft.XMLDOM'); 
			}
			
			xmlDoc.async = false;
			xmlDoc.load(url);
		}
		
		// autre ?? 
		else if (window.XMLHttpRequest)
		{
			xmlDoc = new XMLHttpRequest();
			xmlDoc.overrideMimeType('text/xml');
			xmlDoc.open('GET', url, false);
			xmlDoc.send(null);
			
			if (this.xmlDoc.readyState == 4 && xhr.status == 200)
			{
				xmlDoc = xmlDoc.responseXML;
			}
		}
	}
	catch ( e )
	{
		alert( "loadXML => " + e );
		return e;
    }

	return xmlDoc;
}


// Méthode tranform
// xml : document xml chargé
// xsl document xsl chargé
// id : id dans lequel il faut généré le HTML
// Génère le HTML et l'écrit dans l'élément spécifié par son id
XMLTool.prototype.transform = function( xml, xsl, id )
{
	try
	{
		// FireFox
		if ( window.XSLTProcessor )
		{
			var xsltProcessor = new XSLTProcessor();   
			xsltProcessor.importStylesheet( xsl );
			var fragment = xsltProcessor.transformToFragment( xml, window.document );
			var target = document.getElementById( id );
			
			rng = document.createRange();
			rng.setStartBefore( target );
			
			while ( target.hasChildNodes() )
			{
				target.removeChild(target.lastChild);
			}
			
			target.appendChild( fragment );
		}
		
		//Windows
		else if (window.ActiveXObject)
		{
			var target = document.getElementById(id);
			target.innerHTML = xml.transformNode(xsl);
        }
    }	 
	catch (e) 
	{
		alert("transform => " + e);
    	return e;
	}
}
