/////////////////////////////////////////////////////////////////////////
//XMLHelper
/////////////////////////////////////////////////////////////////////////
XMLHelper = function(){};
XMLHelper.selectSingleNode = function(node, tagName)
{   
		if (node == null)
			return null;
			
		var Result = null;
		
		for (var i = 0; i < node.childNodes.length; i++)
		{
			var tmpNode = node.childNodes[i];
		
			if ((tmpNode.nodeName == tagName) || (tmpNode.nodeName == tagName.toUpperCase()) || (tmpNode.nodeName == tagName.toLowerCase()))
				return tmpNode;
		}

    return null;        
}

XMLHelper.selectNodes = function(node, tagName, immediatesOnly)
{
    if (immediatesOnly)
    {
	var nodesArray = new Array();	
	for (var i = 0; i < node.childNodes.length; i++)
	{
		var tmpNode = node.childNodes[i];
		if ((tmpNode.nodeName == tagName) || (tmpNode.nodeName == tagName.toUpperCase()) || (tmpNode.nodeName == tagName.toLowerCase()))
			nodesArray.push(tmpNode);
	}
	return nodesArray;
    }
    else
    {
	var a = node.getElementsByTagName(tagName);
	if(a.length == 0)
		a = node.getElementsByTagName(tagName.toUpperCase());   
	return a;
    }
}

XMLHelper.selectNodesByAttrValue = function(node, attrName, value, single)
{   
    var nodes = [];
    var find = function(node)
    {        
        if(node.getAttribute != undefined)
        {      
            var c = node.getAttribute(attrName);
            if(c == value)          
               nodes.push(node);   
        }                                      
    }    
    if(single && nodes.length ==1)
        return nodes;
    walkTheDom(node, find);        
    return nodes;
}

XMLHelper.selectNodesByNodeValue = function(node, value, single)
{
    var nodes = [];
    var find = function(node)
    {
        if(node.nodeValue == value)                  
            nodes.push(node);                            
    }    
    walkTheDom(node, find);    
    return nodes;
}
XMLHelper.createXMLDocumentFromString = function(xmlstring)
{
	if(typeof DOMParser != "undefined")
	{
		return (new DOMParser()).parseFromString(xmlstring, "text/xml");	
	}
	else
	{
		var xmlobject = new XMLDocument();	
	    xmlobject.loadXML(xmlstring);	
		return xmlobject;
	}
}

XMLHelper.setTextValue = function(xmlDoc, node, value)
{
	if(typeof DOMParser != "undefined")
	{
		// Try to determine if we need a CDATA Section or not.
		var textNode;
		if ((typeof(value) == "string") && (value.indexOf("<") > -1 || value.indexOf(">") > -1))
			textNode = xmlDoc.createCDATASection(value);
		else
			textNode = xmlDoc.createTextNode(value);
		this.importNode(textNode,xmlDoc,true,node);
	}
	else
	{
		node.text = value;
	}
}

XMLHelper.createXMLObject = function()
{
	//Always create a document with a RootNode, for Cross Browser Support
	return this.createXMLDocumentFromString("<rootNode/>");
}

XMLHelper.createXMLStringfromDoc = function(xmlDoc)
{
	var doc;
	
	// We need to grab the relevant node instead of the filler "safariData" node.
	if(xmlDoc.documentElement && xmlDoc.documentElement.nodeName == "rootNode")
		doc = xmlDoc.documentElement.childNodes[0];
	else
		doc = xmlDoc;
		
	if(typeof XMLSerializer != "undefined")
	{
		var serializer = new XMLSerializer();
		var xml = serializer.serializeToString(doc);
		return xml;	
	}
	else
	{
		return doc.xml;	
	}
}

XMLHelper.importNode = function(importedNode, xmlDoc, deep, appendToNode)
{
	if(typeof DOMParser != "undefined")
	{
		var n = xmlDoc.importNode(importedNode,deep);
		appendToNode.appendChild(n);
	}
	else
	{
		appendToNode.appendChild(importedNode);
	}

}

XMLHelper.isXmlDocument = function(doc)
{
	if(doc.documentElement!=null)
		return true;
	else
		return false;
}

XMLHelper.selectAttribute = function(xml,attribute)
{
	var val = xml.getAttribute(attribute);
	if(val == null)
		return xml.getAttribute(attribute.toLowerCase( ));
	else
		return val;
	
}

XMLHelper.getNodeTextValue = function(element)
{
	if(element.lastChild)
		return element.lastChild.nodeValue;
	else
		return "";
}

XMLHelper.appendChild = function(newNode, referenceNode) {
	if (!newNode || !referenceNode) 
	   return null;
        
	if (referenceNode.documentElement) {
		return referenceNode.documentElement.appendChild(newNode); 
    } else {
		return referenceNode.appendChild(newNode);
    }
}

XMLHelper.swapNodes = function(node1,node2) 
{
	var tmp = node1.cloneNode(1);
	var parent = node1.parentNode;

	node2 = parent.replaceChild(tmp,node2);

	parent.replaceChild(node2,node1);

	parent.replaceChild(node1,tmp);
	tmp = null;
}

XMLHelper.getResponseText = function(wsResponse)
{
	if (wsResponse.response.textContent) // Safari
		return wsResponse.response.textContent;
	else // IE
		return wsResponse.response.text;
}

//end HTMLHelper

