instanceSimpleXMLDOMWrapper();

function instanceSimpleXMLDOMWrapper() {
	if( typeof simpleXMLDOMWrapper == 'undefined' ) {
	
		simpleXMLDOMWrapper = new function() {
			this.browser = {
				"msie": ( navigator.userAgent.toLowerCase().indexOf( "msie" ) != -1 ),
				"gecko" : (navigator.userAgent.toLowerCase().indexOf( "gecko" ) != -1 )
			};
		}
		

		simpleXMLDOMWrapper.getMSIEDOM = function() {

			var ARR_ACTIVEX = ["Msxml4.DomDocument", "Msxml3.DomDocument", "Msxml2.DomDocument", "Msxml.DomDocument", "microsoft.XMLDOM"];
			var bFound = false;
			var msieDOM = null;

			for ( var i=0; i < ARR_ACTIVEX.length && !bFound; i++ ) {
				try {
					msieDOM = new ActiveXObject( ARR_ACTIVEX[i] );
					bFound = true                
				} catch ( objException ) { 
					//ignore
				}
			}

			if (!bFound) { throw "Can't parse XML documents: XMLDOM not implemented on this client." };
			return msieDOM;
		}

		simpleXMLDOMWrapper.node_xmlPropertyImpl = function() {
			//For cross browser compatibility we mimic the .xml property behavior of MSIE DOM.

			var strXML = "<" + this.tagName + " xmlns=\"" + this.namespaceURI + "\">" + this.innerHTML + "</" + this.tagName + ">";			 

			return strXML;
		}

		simpleXMLDOMWrapper.document_xmlPropertyImpl = function() {

			var objXMLSerializer = new XMLSerializer;
			var strXML = objXMLSerializer.serializeToString( this );

			return strXML;
		}

		simpleXMLDOMWrapper.createDOMDocument = function( xmlText ) {

			var objDOM = null;

			if ( simpleXMLDOMWrapper.browser.gecko ) {
				var objDOMParser = new DOMParser();
				objDOM = objDOMParser.parseFromString( xmlText, "text/xml" );
				simpleXMLDOMWrapper.defineGeckoXMLProperty();
			} else {
				if ( simpleXMLDOMWrapper.browser.msie ) {
				objDOM = this.getMSIEDOM();
				objDOM.loadXML( xmlText );
				}
			}
			return objDOM;
		}

		simpleXMLDOMWrapper.defineGeckoXMLProperty = function() {
			Node.prototype.__defineGetter__( "xml", this.node_xmlPropertyImpl );
			Document.prototype.__defineGetter__( "xml", this.document_xmlPropertyImpl );
		}
	}

}
