// AJAXLib v. 1.0
// author: Jacek Karaszewski, http://www.karaszewski.com/tools/ajaxlib/
// licenced under Creative Commons Attribution 2.5 License

// public
var resultXML;
var resultTXT;
// function loadXMLDoc(xml_url, function_name, ignore_white)

function loadXMLDoc(url, callFunc, ignoreWhite) {
	functionToCall = callFunc;
	stripWS = ignoreWhite;
	/*if (window.ActiveXObject)
  	xmlRequestObj = new ActiveXObject("Microsoft.XMLHTTP");
	else if (window.XMLHttpRequest)
  	xmlRequestObj = new XMLHttpRequest();*/
  xmlRequestObj = false;  
  try {  xmlRequestObj = new XMLHttpRequest();  } 
  catch (trymicrosoft) {  
  	try {	  xmlRequestObj = new ActiveXObject("Msxml2.XMLHTTP");  }
  	catch (othermicrosoft) {
  		  try {  xmlRequestObj = new ActiveXObject("Microsoft.XMLHTTP");  }
  		  catch (failed) {	  xmlRequestObj = false;  } 
  	}  
  }
	if (!xmlRequestObj)  alert("ERROR AL INICIALIZAR!");
	//xmlRequestObj = window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP")
	xmlRequestObj.onreadystatechange = proccessXML;
	xmlRequestObj.open("GET", url, true);
	xmlRequestObj.send(null);
}


// private

function is_ws(nod) {
	return !(/[^\t\n\r ]/.test(nod.data));
}

function findWhiteSpace(node, nodeNo) {
	for (i=0; i<node.childNodes.length; i++) {
		if (node.childNodes[i].nodeType == 3 && is_ws(node.childNodes[i])) {
			nodesToDelete[nodesToDelete.length] = node.childNodes[i];
		}
		if (node.childNodes[i].hasChildNodes()) {
			findWhiteSpace(node.childNodes[i], i);
		}
	}
	node = node.parentNode;
	i = nodeNo;
}

function stripWhiteSpace(node) {
	nodesToDelete = Array();
	findWhiteSpace(node, 0);
	for(i=nodesToDelete.length-1;i>=0;i--) {
		nodeRef = nodesToDelete[i];
		nodeRef.parentNode.removeChild(nodeRef);
	}
}

function _xml2arrayReal (myXML) {//puede devolver un Array o un String??? porque es recursiva hasta los nodos

		var nodeArr;
		var searchNode;
		var tmp_node;
		var repeatedNode = 0;
		
		if ( !myXML.hasChildNodes() ) {
			var nodeArr;		
			return "<-";
		}
		
		// Descend and search children.
		searchNode = myXML.firstChild;
		var nodeArr = "";
		while (searchNode != null) {
			tmp_node = searchNode;
		
			if (searchNode.nodeType == 3) {
				//var nodeArr:String = new String();
				var nodeArr;
				nodeArr = searchNode.nodeValue;
				//nodeArr = "hola.chau";
				return nodeArr;
			}
			
			if (searchNode.nodeType == 1 && searchNode.hasChildNodes()) {
				var tmpVar = this._xml2arrayReal(searchNode);
				nodeArr += searchNode.nodeName + "->" + tmpVar + "\n";
			}
			searchNode = searchNode.nextSibling;
		}
	return nodeArr;
}

function proccessXML() {
	if (xmlRequestObj.readyState == 4 && (xmlRequestObj.status == 200 || xmlRequestObj.status == 304)) {
		if(stripWS) {
			stripWhiteSpace(xmlRequestObj.responseXML);
		}
		resultXML = xmlRequestObj.responseXML;
		resultTXT = xmlRequestObj.responseText;
		
		//alert(_xml2arrayReal(resultXML.documentElement));
		//alert(_xml2arrayReal((resultXML.documentElement.firstChild).firstChild.nodeValue))
		
		functionToCall()
	}
}

