// This code is taken from http://km0.la/js/mozXPath/
// Implements methods <selectNode> and <selectNodes> 
// --------------------------------------------------
// check for XPath implementation
if( document.implementation.hasFeature("XPath", "3.0") )
{  // prototying the XMLDocument  
	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;
  }  
  // prototying the Element  
  Element.prototype.selectNodes = function(cXPathString)  
  {
  	if(this.ownerDocument.selectNodes)     
  	{        
  		return this.ownerDocument.selectNodes(cXPathString, this);     
  	}
  	else
  	{ 
  		throw "For XML Elements Only";
  	}  
  }
  
	// prototying the XMLDocument  
	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;     
		}  
	}    
	// prototying the Element  
	Element.prototype.selectSingleNode = function(cXPathString)  
	{         
		if(this.ownerDocument.selectSingleNode)     
		{        
			return this.ownerDocument.selectSingleNode(cXPathString, this);     
		}     
		else
		{
			throw "For XML Elements Only";
		}  
	}
} 
// --------------------------------------------------


function requestXML(url, callbackFunction) 
{
  var request;
  var async = (typeof(callbackFunction) == 'function');
  
  try
  {
  	request = new XMLHttpRequest();
  }
  catch(err)
  {
  	try
  	{
  		request = new ActiveXObject("MSXML2.XMLHTTP.3.0");
  	}
  	catch(err)
  	{
  		alert('Error performing an XMLHttpRequest function');
  		return;
  	}
  }
  
  request.open("GET", url, async);
 
 	if (async)
 	{
  	request.onreadystatechange = function() 
  	{
    	if (request.readyState == 4 && request.status == 200) 
    	{
    		callbackFunction(request.responseXML);
    	}
    }
    request.send('');
  }
  else
  {
  	request.send('');
  	return request.responseXML;
  }
}
