// XMLLoader.js
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
// Historique de mise à jour
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
// 2008-02-23 : Vincent
//				Création du script
//
// 2008-02-24 : Vincent
//				Ajout de la possibilité de passer un objet en référence
//
//
// Objet créé sans objet référencé
//    new XMLLoader(fichierXML:String, parser:Function {, referenceObject:Null, returnXML:Boolean, methode:String[GET|POST]});
//
// Objet créé avec un objet référencé
//    new XMLLoader(fichierXML:String, parser:String {, referenceObject:Object, returnXML:Boolean, methode:String[GET|POST]});





function XMLLoader() {
	
	if ( XMLLoader.arguments.length >= 2 ) {
		// Propriétés obligatoires
		this.fichier   = XMLLoader.arguments[0];
		this.parser    = XMLLoader.arguments[1];
		
		// Propriétés négligeables
		this.refObject = XMLLoader.arguments[2] ? XMLLoader.arguments[2] : null;
		this.returnXML = typeof(XMLLoader.arguments[3]) == "boolean" ? XMLLoader.arguments[3] : true;
		this.methode   = XMLLoader.arguments[4] ? XMLLoader.arguments[4].toUpperCase() : "GET";
	
		// Propriétés non paramétrables
		this.requete       = null;
		this.data          = null;
		this.loadXML       = XMLLoader_LoadXML;
		this.doRequest     = XMLLoader_DoRequest;
		
		this.loadXML();
	} else
		return null;
}





function XMLLoader_DoRequest() {
	if ( this.requete.readyState == 4 ) {
		if ( this.requete.status == 200 ) {
			if ( this.returnXML ) {
				var xml = this.requete.responseXML;
				for ( var cNodes = 0; cNodes < xml.childNodes.length; cNodes++) {
					var treeNode = xml.childNodes[cNodes];
					if (treeNode.nodeType == 1) {
						this.data = treeNode;
						cNodes = xml.childNodes.length;
					}
				}
			} else
				this.data = this.requete.responseText;
			
			if ( this.refObject )
				this.refObject[this.parser](this.data);
			else
				this.parser(this.data);
		} else {
			//alert("Unable to load XML file:\n" + this.fichier + "\n\nError: " + this.requete.statusText);
		}
	}
}





function XMLLoader_LoadXML() {
	var refObject = this;
	if ( window.XMLHttpRequest ) {
		this.requete = new XMLHttpRequest();
		this.requete.onreadystatechange = function() { refObject.doRequest(); };
		this.requete.open(this.methode, this.fichier, true);
		this.requete.send(null);
	} else if ( window.ActiveXObject ) {
		this.requete = new ActiveXObject("Microsoft.XMLHTTP");
		if ( this.requete ) {
			this.requete.onreadystatechange = function() { refObject.doRequest(); };
			this.requete.open(this.methode, this.fichier, true);
			this.requete.send();
		}
	}
}





function XMLLoader_GetXML() {
	//this.returnXML = true;
	this.loadXML();
}





function XMLLoader_GetText() {
	//this.returnXML = false;
	this.loadXML();
}


/*function XMLLoader( xmlURI, parseFunction ) {
	if ( window.XMLHttpRequest ) {
		request = new XMLHttpRequest();
		request.onreadystatechange = function() { doRequest(xmlURI, parseFunction); };
		request.open("GET", xmlURI, true);
		request.send(null);
	} else if ( window.ActiveXObject ) {
		isIE = true;
		request = new ActiveXObject("Microsoft.XMLHTTP");
		if ( request ) {
			request.onreadystatechange = function() { doRequest(xmlURI, parseFunction); };
			request.open("GET", xmlURI, true);
			request.send();
		}
	}
}*/




/* Execute la requête au contenu XML, en extrait les données et lance l'écriture du contenu */
/*function doRequest(xmlURI, parseFunction) {
	if ( request.readyState == 4 ) {
		if (request.status == 200) {
			var data;
			var xml = request.responseXML; 
			for ( var cNodes = 0; cNodes < xml.childNodes.length; cNodes++) {
				var treeNode = xml.childNodes[cNodes];
				if (treeNode.nodeType == 1) {
					data = treeNode;
					cNodes = xml.childNodes.length;
				}
			}
			
			parseFunction(data);
		} else {
			alert("Unable to load XML file:\n" + xmlURI + "\n\nError: " + request.statusText);
		}
	}
}*/