//
// AJAX/XML FUNKTIONER
//

function parseXml(xml) {
    dom = createXmlDom();
    if (window.ActiveXObject){
      dom.loadXML(xml);
    }else if ((typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined')){
      var parser = new DOMParser();
      dom = parser.parseFromString(xml, "text/xml");
      delete parser;
    }else{
      alert("XMLDom ikke understøttet.");
    }
    return dom;
}


function createXmlDom() {
    var dom = null;
    if (window.ActiveXObject){
      dom = new ActiveXObject("Microsoft.XMLDOM");
      dom.setProperty("SelectionLanguage", "XPath");
      dom.async = false;
    }else if ((typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined')){
      implementFirefoxSelect();
      dom = document.implementation.createDocument("", "doc", null);
      dom.async = false;
    }else{
      alert("XMLDom ikke understøttet.");
    }
    return dom;
}  


function implementFirefoxSelect() {
    if( document.implementation.hasFeature("XPath", "3.0") ){
      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;
    }
    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;
      }
    }
    Element.prototype.selectNodes = function(cXPathString)
    {
      if(this.ownerDocument.selectNodes)
      {
        return this.ownerDocument.selectNodes(cXPathString, this);
      }
      else{throw "For XML Elements Only";}
    }
    Element.prototype.selectSingleNode = function(cXPathString)
    {	
      if(this.ownerDocument.selectSingleNode)
      {
        return this.ownerDocument.selectSingleNode(cXPathString, this);
      }
      else{throw "For XML Elements Only";}
    }
    Node.prototype.transformNode = function (oXslDom) {
        var oProcessor = new XSLTProcessor();
        oProcessor.importStylesheet(oXslDom);
        var oResultDom = oProcessor.transformToDocument(this);
        var sResult = serializeDom(oResultDom);
        if (sResult.indexOf("<transformiix:result") > -1) {
            sResult = sResult.substring(sResult.indexOf(">") + 1, 
                                        sResult.lastIndexOf("<"));
        }
        return sResult;                
      }
    }
}


function getTagVal (node,tagname) {
  var tagValue = "";
  // If tag exists
  if (node.getElementsByTagName(tagname)[0]) {
  // If tag is not empty get the value
    if (node.getElementsByTagName(tagname)[0].firstChild) {
      tagValue = node.getElementsByTagName(tagname)[0].firstChild.nodeValue;
    } 
  }
  return tagValue;
}


function requestAndParseXml(url, parameters)
{ 
  var xmlLoader = dhtmlxAjax.postSync(url,parameters); 
  return parseXml(xmlLoader.xmlDoc.responseText);
}

