if(window.XMLDocument && document.implementation.hasFeature("XPath","3.0") && !XMLDocument.prototype.selectNodes)
{	XMLDocument.prototype.selectNodes = function(cXPathString, xNode)
	{
	    if(!xNode) xNode = this;
	    var oNSResolver = this.createNSResolver(this.documentElement);
	    var aItems = this.evaluate(cXPathString, xNode, oNSResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
	    var aResult=[];
	    for(var i=0;i<aItems.snapshotLength;i++) aResult[i] = aItems.snapshotItem(i);
	    return aResult;
	 };

	 XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode)
	 {	 	if(!xNode) xNode = this;
	 	var oNSResolver = this.createNSResolver(this.documentElement);
	 	var xItems = this.evaluate(cXPathString, xNode, oNSResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
	 	if(xItems.snapshotLength>0) return xItems.snapshotItem(0);
 		return null;
	 };

	 Element.prototype.selectNodes = function(cXPathString)
	 {	 	if(this.ownerDocument.selectNodes)
	 		return this.ownerDocument.selectNodes(cXPathString, this)
	 	else
	 		throw"For XML Elements Only";
	 };

	 Element.prototype.selectSingleNode = function(cXPathString)
	 {	 	if(this.ownerDocument.selectSingleNode)
	 		return this.ownerDocument.selectSingleNode(cXPathString,this)
	 	else
	 		throw "For XML Elements Only";
	 }

	 function xText(xNode)
	 {	 	if(!xNode) return '';
	 	return xNode.text || xNode.textContent;	 }

	 function xTextXML(s)
	 {	 	 var x;
         if (typeof(DOMParser) == "undefined")
         {
             x = new ActiveXObject("Microsoft.XMLDOM");
             x.async = "false";
             x.loadXML(s);
         }
         else
         {
 		     x = (new DOMParser()).parseFromString(s, "text/xml");
 		 }
	     return x;	 }
};

