﻿
function GetXmlHttpObject(url, async)
{
    var xmlhttp = null;
    
    // code for Mozilla, etc.
    if (window.XMLHttpRequest)
    {
        xmlhttp = new XMLHttpRequest();
    }
    // code for IE
    else if (window.ActiveXObject)
    {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else
    {
        //alert("Your browser doesn't support XmlHttp.  Please try again using FireFox or Internet Explorer (or any other modern browser which supports XmlHttp)");
        return null;
    }

    InitXmlFunctions();
    
    xmlhttp.open("GET", url, async);
    
    return xmlhttp;
}
        
function getXmlNodeInnerText (node) 
{
    if (null== node)
    {
        return "";
    }
    
	if (typeof node.textContent != 'undefined') 
	{
		return node.textContent;
	}
	else if (typeof node.innerText != 'undefined') 
	{
		return node.innerText;
	}
	else if (typeof node.text != 'undefined') 
	{
		return node.text;
	}
	else 
	{
		switch (node.nodeType) 
		{
		case 3:
		case 4:
			return node.nodeValue;
			break;
		case 1:
		case 11:
			var innerText = '';
			for (var i = 0; i < node.childNodes.length; i++) 
			{
				innerText += getInnerText(node.childNodes[i]);
			}
			return innerText;
			break;
		default:
		return '';
		}
	}
}

///////////////////////////////////////////////////////////////////////////////
var xmlFunctionsDefined = false;
function InitXmlFunctions()
{
	if (xmlFunctionsDefined)
	{
		return;
	}
	xmlFunctionsDefined = true;
	
	// check for XPath implementation
	if( document.implementation.hasFeature("XPath", "3.0") )
	{  
		// 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";
			}  
		}
	}   

	// 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";
			}  
		}
	}
}


