var XML = {

	namedChildNode : function (oNode, sChildName) {
		// returns first child node with node name sChildName
		// if no such node exists, false is returned
		for ( var i = 0; i < oNode.childNodes.length; i++ )
			if ( oNode.childNodes[i].nodeName == sChildName )
				return oNode.childNodes[i];
		return false;
	},

	getCDATA : function (oNode) {
		if ( oNode.childNodes.length > 0 )
			return oNode.childNodes[0].nodeValue;
		else
			return '';
	},

	getAttribute : function (oNode, sAttribute) {
		var oAttribute = oNode.attributes.getNamedItem(sAttribute);
		if ( oAttribute )
			return oAttribute.nodeValue;
		else
			return false;
	},

	selectNodes : function (oNode, sPath) {
		if ( !oNode ) {
			return new Array();
		}
		if ( document.all ) { 
			// IE
			return oNode.selectNodes(sPath) ;
		} else { 
			// W3C
			var oDocument = ( oNode.nodeName == '#document' ? oNode : oNode.ownerDocument );
			var oResult = oDocument.evaluate( sPath, oNode, oDocument.createNSResolver(oDocument.documentElement), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
			var aNodes = new Array();
			if ( oResult ) {
				var oResultNode = oResult.iterateNext();
	 			while( oResultNode ) {
	 				aNodes.push(oResultNode);
	 				oResultNode = oResult.iterateNext();
	 			}
			}
			return aNodes ;
		}
	},

	selectNode : function (oNode, sPath) {
		var aNodes = XML.selectNodes(oNode, sPath);
		if ( aNodes.length > 0 )
			return aNodes[0];
		else 
			return null;
	}
	
}
