    /************************************************************
        MAKES selectSingleNode && selectNodes && text WORK FOR FIREFOX 
        :)
    **************************************************************/
    
    // 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";
            }
        }
        
        // 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.__defineGetter__("text", 
                  function () 
                  { 
                    return( this.textContent ); 
                  } );
				  
        XMLDocument.prototype.__defineSetter__("text", 
                  function ( value ) 
                  { 
				  	this.firstChild.nodeValue = value; 
                  } );
		
		 XMLDocument.prototype.__defineGetter__("xml", 
                  function () 
                  { 
				  	var objXMLSerializer = new XMLSerializer(); 
            		var strXML = objXMLSerializer.serializeToString( this );
            
					var reAttr = /[\<]{1}([^ \>]*?)([ ]{1}[^\/\>]*?)[\/]{1}[>]{1}/gim;
					strXML = strXML.replace( reAttr,"<$1$2><\/$1>" );
					
            		var re = /[\<]{1}([^\/\>]*?)[\/]{1}[>]{1}/gim;
            		strXML = strXML.replace( re,"<$1><\/$1>" );
					
                    return( strXML ); 
                  } );
        
        // prototying the Element          
        Element.prototype.__defineGetter__("text", 
                  function () 
                  { 
                    return( this.textContent ); 
                  } );
		
		Element.prototype.__defineSetter__("text", 
                  function ( value ) 
                  { 
				  	this.firstChild.nodeValue = value; 
                  } );
        
    }
