/*
 * phClientXml.js
 *
 * Lasse F. Pedersen, IT-Sundhed
 * 25/Mar/2004
 */

function getXmlDocument(xmlContainerId) {

  var xmlContainer = document.getElementById(xmlContainerId);
  var xmlDoc       = new ActiveXObject("MSXML.DOMDocument");

  // Disable asynchronous fetch
  xmlDoc.async = false;
  
  // Disable document DTD and more
  xmlDoc.resolveExternals = false;

  // Fetch XML data from form element
  xmlDoc.loadXML(xmlContainer.value);

  //alert(xmlContainer.value);

  // Check if the parser found errors
  if(xmlDoc.parseError.errorCode != 0) {
    alert("XML parse error: " + xmlDoc.parseError.reason);
    alert(xmlContainerId + " = " + xmlContainer.value);
  }
  
  return xmlDoc;

}

function setNodeAttribute(xmlDoc, xmlNode, attrName, attrValue) {

  var attr = xmlNode.attributes.getNamedItem(attrName);

  // If attribute does not exist
  if(attr == null) {

    // Create attribute
    attr = xmlDoc.createAttribute(attrName);

    // Add attribute to node
    xmlNode.attributes.setNamedItem(attr);

  }

  // Set attribute value
  attr.value = attrValue;

}

function integerSort(one, two) {

  if(one < two) {
    return -1;
  } else if(one > two) {
    return 1;
  } else {
    return 0;
  }

}

function getNextNodeId(nodeRoot) {

  var nextId = 1;
  var nodes  = nodeRoot.childNodes;
  var idList = new Array();
  
  //alert(nodeRoot.xml);
  
  for(var i = 0; i < nodes.length; i++) {

    var node   = nodes(i);
    var nodeId = parseInt(node.attributes.getNamedItem("id").value);

    idList.push(nodeId);
  
  }

  idList = idList.sort(integerSort);

  for(var i = 0; i < idList.length; i++) {
  
    if(idList[i] != nextId) {
      break;
    }
    
    nextId++;
  
  }

  return nextId;

}

function getNodeById(nodeRoot, getId) {

  var nodes = nodeRoot.childNodes;

  for(var i = 0; i < nodes.length; i++) {
  
    var node   = nodes(i);
    var nodeId = node.attributes.getNamedItem("id").value;

    if(nodeId != getId) {
      continue;
    }
  
    return node;
  
  }

}

