if (typeof(XMLib) == 'undefined') {
    XMLib = {};
}
XMLib.VERSION = "1.0";
XMLib.NAME = "XMLib";
XMLib.__repr__ = function () {
    return "[" + this.NAME + " " + this.VERSION + "]";
};
XMLib.toString = function () {
    return this.__repr__();
};

XMLib.XMLResponse = function() {
	this.code = null;
	this.data = null;
};

XMLib.parseXMLResponse = function (domXML) {
	var i, child;
	var res = new XMLib.XMLResponse();
	
	var responseXML = domXML.getElementsByTagName("response")[0];
	for (i=0;i<responseXML.childNodes.length;i++) {
		child = responseXML.childNodes.item(i);
		if (child.nodeName == "code") {
			res.code = DOMUtil.getTextContent(child);
		}
		else if (child.nodeName == "data") {
			res.data = child.cloneNode(true);
			DOMUtil.cleanWhitespace(res.data);
		}
	}
	if (res.code == null || res.data == null) {
		return null;
	}
	return res;
};

XMLib.processOneLevelXML = function (domXML) {
	addNode = function(obj, name, value) {
		if (typeof(obj[name]) == 'undefined') {
			obj[name] = value
		}
		else if (MochiKit.Base.isArrayLike(obj[name])) {
			obj[name][(obj[name].length)] = value;
		}
		else {
			var nuevo = new Array(obj[name], value);
			obj[name] = nuevo;
		}
	}
	
	var res = new Object();
	var child, i, parcial;

	DOMUtil.cleanWhitespace(domXML);

	for(i=0;i<domXML.childNodes.length;i++) {
		child = domXML.childNodes.item(i);
		if (child.nodeType == document.ELEMENT_NODE) {
			if (child.childNodes.length == 0) {
				addNode(res, child.nodeName, null);
			}
			else {
				addNode(res, child.nodeName, XMLib.processOneLevelXML(child));
			}
		}
		else if (child.nodeType == document.TEXT_NODE) {
			res = child.nodeValue;
		}
	}
		
	return res;
}

if (document.ELEMENT_NODE == null || typeof(document.ELEMENT_NODE) == 'undefined') {
  document.ELEMENT_NODE = 1;
  document.ATTRIBUTE_NODE = 2;
  document.TEXT_NODE = 3;
  document.CDATA_SECTION_NODE = 4;
}

if (typeof(DOMUtil) == 'undefined') {
    DOMUtil = {};
}
DOMUtil.VERSION = "0.1";
DOMUtil.NAME = "DOMUtil";
DOMUtil.__repr__ = function () {
    return "[" + this.NAME + " " + this.VERSION + "]";
};

DOMUtil.toString = function () {
    return this.__repr__();
};

DOMUtil.cleanWhitespace = function (element) {
   for (var i = 0; i < element.childNodes.length; i++) {
 	   var node = element.childNodes[i];
  	   if (node.nodeType == document.TEXT_NODE && !/\S/.test(node.nodeValue)) 
	      element.removeChild(node);
	}
};

DOMUtil.getTextContent = function (element) {
	var texto = '';
	var nodoTexto = element.firstChild;
	if (nodoTexto != null && nodoTexto.nodeType == document.TEXT_NODE) {
		texto = nodoTexto.nodeValue;
	}
	return texto;
};
