function getDomAdapter()
{
var adapter = '';
if ('undefined' != typeof ActiveXObject) {
adapter = 'MS';
} else if ('undefined' != typeof document
&& document.implementation
&& document.implementation.createDocument
&& 'undefined' != typeof DOMParser)
{
adapter = 'default';
}
switch (adapter) {
case 'MS':
return new (function () {
this.createDocument = function () {
var names = ["Msxml2.DOMDocument.6.0",
"Msxml2.DOMDocument.3.0", "MSXML2.DOMDocument",
"MSXML.DOMDocument", "Microsoft.XMLDOM"];
for (var key in names) {
try {
return new ActiveXObject(names[key]);
} catch (e) {}
}
throw new Error('Unable to create DOMDocument');
};
this.serialize = function (doc) {
return doc.xml;
};
this.parseXml = function (xml) {
var doc = this.createDocument();
if (!doc.loadXML(xml)) {
throw new Error('Parse error');
}
return doc;
};
})();
case 'default':
return new (function () {
this.createDocument = function () {
return document.implementation.createDocument("", "", null);
};
this.serialize = function (doc) {
return new XMLSerializer().serializeToString(doc);
};
this.parseXml = function (xml) {
var doc = new DOMParser().parseFromString(xml, "text/xml");
if ("parsererror" == doc.documentElement.nodeName) {
throw new Error('Parse error');
}
return doc;
};
})();
default:
throw new Error('Unable to select the DOM adapter');
}
};




getElementsNS = function(prefix, local, parentElem)
{

// circumvent browser differences in getElementsByTagNameNS
// and/or getElementsByTagName

var prefixwithlocal = (prefix) ?
parentElem.getElementsByTagName(prefix+ ":"+local) : null;

var result = (prefix&&prefixwithlocal[0]) ?
prefixwithlocal : parentElem.getElementsByTagName(local);


return result;

}




getAttributeNS = function(prefix, local,element)
{

// circumvent browser differences in getElementsByTagNameNS
// and/or getElementsByTagName

var prefixwithlocal = (prefix) ?
element.getAttribute(prefix+ ":"+local) : null;


var result = (prefix&&prefixwithlocal) ?
prefixwithlocal : element.getAttribute(local);


return result;

}
