/*
	what is this?: common prototype function enhancement
	version: 1.0
	author: hexaray@hotmail.com
	update: 14 dec. 2006
	history:
		14 dec. 2006	- release.
	license & warrantee:
		free with no warrantee.
	requirement:
		- javascript version 1.5
		- version 1.5 must be declared in <script>
	function list:
	node1.swapNode(node2) - swap node1 and node2.
*/

// source: http://www.faqts.com/knowledge_base/view.phtml/aid/10808
Node.prototype.swapNode = function (node)
{
	var nextSibling = this.nextSibling;
	var parentNode = this.parentNode;
	node.parentNode.replaceChild(this, node);
	parentNode.insertBefore(node, nextSibling);  
}

// check for XPath implementation -- for FireFox
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";} 
	}
}
