//drjs.xml.js
//XML Functions

var XMLParser = {
	GetXML: function(xmlText) {
		var xmlDocument;
		if(window.ActiveXObject) {
			var parser = new ActiveXObject("Microsoft.XMLDOM");
			parser.loadXML(xmlText);
			xmlDocument = parser.documentElement;
		} else {
			var parser = new DOMParser();
			xmlDocument = parser.parseFromString(xmlText, "text/xml").documentElement;
		}
		return new XMLNodeList(xmlDocument);
	}
}

var XMLNode = Class.Create();
XMLNode.AddMethods({
	node:null,
	_constructor: function(node){
		this.node = node;
	},
	GetNode: function(nodeName) {
		var retValue=null;
		if(nodeName.indexOf("/")>0 && nodeName.indexOf("\\/")!=nodeName.indexOf("/")+1) {
			var nodes = nodeName.split("/");
			var firstNode = nodes[0];
			retValue = new XMLNode(this.node.getElementsByTagName(firstNode)[0]).GetNode(nodeName.substr(nodeName.indexOf("/")+1));
		} else {
			retValue = new XMLNode(this.node.getElementsByTagName(nodeName)[0]);
		}
		try {
			var test = retValue.GetValue();
			return retValue;
		} catch(e) {
			return false;
		}
	},
	GetNodeList: function(nodeNames) {
		return new XMLNodeList(this.node.getElementsByTagName(nodeNames));
	},
	GetValue: function() {
		//alterado por moises - 23/02/08 22:03 (dava pau qndo o nodo era vazio)
		//no exemplo abaixo
		//"<smart><response><done>1</done><id>starta.moises</id></response><error></error></smart>"
		//ao ler xmlDoc.GetNode("error").GetValue()
		// dava erro Object doesn't support this property or method
		if (this.node.childNodes.length > 0) {		// tb funciona if (this.node.childNodes[0] != null)
			return this.node.childNodes[0].nodeValue;
		} else {
			return this.node.text;
		}
	}
});

var XMLNodeList = Class.Create();
XMLNodeList.AddMethods({
	nodelist: null,
	Length: null,
	_constructor: function(nodelist){
		this.nodelist = nodelist;
		this.Length = this.nodelist.length;
	},
	GetNode: function(nodeName) {
		if(typeof(nodeName)=="number" || typeof(nodeName)=="integer" || typeof(nodeName)=="int") {
			return this.getNodeByPos(nodeName);
		} else {
			return this.getNodeByName(nodeName);
		}
	},
	getNodeByName: function(nodeName) {
		var retValue=null;
		if(nodeName.indexOf("/")>0 && nodeName.indexOf("\\/")!=nodeName.indexOf("/")+1) {
			var nodes = nodeName.split("/");
			var firstNode = nodes[0];
			retValue = new XMLNode(this.nodelist.getElementsByTagName(firstNode)[0]).GetNode(nodeName.substr(nodeName.indexOf("/")+1));
		} else {
			retValue = new XMLNode(this.nodelist.getElementsByTagName(nodeName)[0]);
		}
		try {
			var test = retValue.GetValue();
			return retValue;
		} catch(e) {
			return false;
		}
	},
	getNodeByPos: function(pos) {
		return new XMLNode(this.nodelist[pos]);
	},
	GetNodeList: function(nodeNames) {
		return new XMLNodeList(this.nodelist.getElementsByTagName(nodeNames));
	}
});

drjs.loadComplete(drjs.files.xml);