﻿/* Embeber datos XML */
/*
 function initXML(){
 	var outlineRequest = new XMLDoc();
	outlineRequest.loadXMLDoc("../xmls/Noticias.xml", insertar);
 }
*/

/*
 * La siguiente función constructora, XMLDoc(), crea un objeto preparado para utilizar
 * el objeto XMLHttpRequest para la carga de datos XML externos y luego llamara a una función
 * de creación propia para controlar esos datos accediendo a su árbol de nodos de manera uniforme
 */

// función constructora para un objeto XML request
function XMLDoc(){
	var me = this;
	var req = null;
	// rama para el objeto XMLHttpRequest nativo
	if (window.XMLHttpRequest) {
		try {
			req = new XMLHttpRequest();
		} 
		catch (e) {
			req = null;
		}
	}
	else if (window.ActiveXObject) {
			try {
				req = new ActiveXObject("Msxm12.XMLHTTP");
			} 
			catch (e) {
				req = null;
			}
	}
	else {
		alert("");
	}
	
	// guardamos la referencia al objeto request para más adelante
	this.request = req;
	
	// método "público" al que llamar cuando sea preciso
	// loadHandler es la función que manejará la inform/doc obtenido del servidor
	this.loadXMLDoc = function(url, loadHandler){
		if (this.request){
			this.request.open("GET", url,true);
			this.request.onreadystatechange = function () {loadHandler(me)};
			this.request.setRequestHeader("Content-Type","text/xml");
			this.request.send("");
		}
	};
}
	
/* 
 * Convertir datos XML en objetos Javascript
 * La siguiente función supone que los datos XML tienen una estructura de tipo registro.
 * Se necesitan dos parámetros: una referencia para el objeto que es el documento XML virtual
 * (que se puede obtener con la función anterior) y el nombre de la etiqueta del documento XML
 * que es el nodo padre de los registros repetidos
 */	
// convierte los datos XML en un vector Javascript de objetos Javascript
function XML2JS(xmlDoc,containerTag){
	var output= new Array()
/*	if (xmlDoc != null){
		alert('xmlDoc no es nulo')
	}*/
	var rawData = xmlDoc.getElementsByTagName(containerTag)[0];
	var i,j,oneRecord, oneObject;
	for (i=0; i < rawData.childNodes.length; i++){ // mientras haya hijos en el arbol de nodos
		if(rawData.childNodes[i].nodeType == 1){	// si el hijo es de tipo 1 es un registro xml
			oneRecord = rawData.childNodes[i];	    // asignamos el nodo completo a un registro 
			oneObject = output[output.length] = new Object();   // creamos un objeto y lo añadimos al final del array
			for (j = 0; j < oneRecord.childNodes.length; j++){  // recorremos los campos del registro xml asignándoselos al vector
				if (oneRecord.childNodes[j].nodeType == 1){
					oneObject[oneRecord.childNodes[j].tagName] = oneRecord.childNodes[j].firstChild.nodeValue;	// 
				}
			}
		}
	}
	return output;
}
