if( document.implementation.hasFeature("XPath", "3.0") )
{
	if( typeof XMLDocument == "undefined" ){ XMLDocument = Document; }
    
  	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 xItems = this.selectNodes(cXPathString, xNode);
		if( xItems.length > 0 ){return xItems[0];	}
		else{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 XHConn()
{
    var xmlhttp, bComplete = false;
    try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
    catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
    catch (e) { try { xmlhttp = new XMLHttpRequest(); }
    catch (e) { xmlhttp = false; }}}
    
    if (!xmlhttp) return null;
    
    this.connect = function(sURL, sMethod, sVars, fnDone)
    {
    	if (!xmlhttp) return false;
    	bComplete = false;
   		sMethod = sMethod.toUpperCase();
    
    	try 
    	{
    		if (sMethod == "GET")
    		{
    			xmlhttp.open(sMethod, sURL+"?"+sVars, true);
    			sVars = "";
    		}
    		else
    		{
                xmlhttp.open(sMethod, sURL, true);
                xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
                xmlhttp.setRequestHeader("Content-Type",
                "application/x-www-form-urlencoded");
    		}
            
    		xmlhttp.onreadystatechange = function()
            {
			    if (xmlhttp.readyState == 4 && !bComplete)
    			{
    				bComplete = true;
    				fnDone(xmlhttp);
    			}
			};
            
			xmlhttp.send(sVars);
    	}
    
    	catch(z) { return false; }
    	return true;
    
    };
        
    return this;
}