﻿var __dataXml=null;

function __EntityExists(entityName)
{
  if(__dataXml==null)
  {
    return(false);
  }
  else
  {
    return(__SelectSingleNode(__dataXml.childNodes[0].childNodes[0],entityName)!=null);
  }
}
function __AddElementToDom(xml,elementName)
{
  if(xml!=null)
  {
    var element=__dataXml.createElement(elementName);
    xml.appendChild(element);
    return(element);
  }
  else
  {
    return(null);
  }
}
function __AddNodeToDom(xml,nodeName,nodeValue)
{
  if(xml!=null)
  {
    var node=__dataXml.createElement(nodeName);
    var nodeContent=__dataXml.createTextNode(nodeValue);
    node.appendChild(nodeContent);
    xml.appendChild(node);
    return(node);
  }
  else
  {
    return(null);
  }
}
function __AddCdataToDom(xml,nodeName,nodeValue)
{
  if(xml!=null)
  {
    var node=__dataXml.createElement(nodeName);
    __AddCdataToNode(node,nodeValue);
    xml.appendChild(node);
    return(node);
  }
  else
  {
    return(null);
  }
}
function __AddCdataToNode(node,nodeValue)
{
  if(node!=null)
  {
    var nodeContent=__dataXml.createCDATASection(nodeValue);
    node.appendChild(nodeContent);
  }
  return(node);
}
function __RemoveEntityByRef(entity)
{
  if(entity!=null)
  {
    entity.parentNode.removeChild(entity);
  }
}
function __RemoveEntityFromDom(xml,entityName)
{
  var entities=__SelectNodes(xml,entityName);
  if(entities!=null)
  {
    for(var i=entities.length-1;i>=0;i--)
    {
      entities[i].parentNode.removeChild(entities[i]);
    }
  }
}
function __RemoveEntity(entityName)
{
  var entities=__SelectNodes(__dataXml,entityName);
  if(entities!=null)
  {
    for(var i=entities.length-1;i>=0;i--)
    {
      entities[i].parentNode.removeChild(entities[i]);
    }
  }
}
function __AddEntitiesFromString(xml)
{
  var success=false;
  try
  {
    var entityXml=__LoadXml(xml);
    if(entityXml!=null&&entityXml.childNodes.length>0)
    {
      var rootNode=entityXml.childNodes[0];
      success=__AddEntity(rootNode);
    }
  }
  catch(e){}
  return(success);
}
function __AddEntitiesToDomFromString(parent,xml)
{
  var success=false;
  try
  {
    var entityXml=__LoadXml(xml);
    if(entityXml!=null&&entityXml.childNodes.length>0)
    {
      var rootNode=entityXml.childNodes[0];
      success=__AddEntityToDom(parent,rootNode);
    }
  }
  catch(e){}
  return(success);
}
function __AddEntity(entity)
{
  var success=false;
  try
  {
    if(__dataXml==null)
    {
      __dataXml=__LoadXml("<data><entities></entities></data>");
    }
    if(__dataXml!=null)
    {
      var entitiesNode=__dataXml.childNodes[0].childNodes[0];
      if(entitiesNode!=null)
      {
        success=__AddEntityToDom(entitiesNode,entity);
      }
    }
  }
  catch(e){}
  return(success);  
}
function __AddEntityToDom(parent,entity)
{
  var success=false;
  try
  {
    if(parent!=null)
    {
      if(entity.ownerDocument!=parent.ownerDocument||(entity.ownerDocument==null&&parent.ownerDocument==null))
      {
        __CloneEntityToDom(parent,entity);
        success=true;
      }
      else
      {
        if(BrowserDetect.browser=="Safari"||navigator.userAgent.indexOf("Safari")>-1)
        {
          var newNode=parent.ownerDocument.importNode(entity,true);
          parent.appendChild(newNode);
          success=true;
        }
        else
        {
          parent.appendChild(entity);
        }
        success=true;
      }
    }
  }
  catch(e){}
  return(success);
}
function __CloneEntity(entity)
{
  var clonedNode=null;
  try
  {
    if(__dataXml==null)
    {
      __dataXml=__LoadXml("<data><entities></entities></data>");
    }
    if(__dataXml!=null)
    {
      var entitiesNode=__dataXml.childNodes[0].childNodes[0];    
      if(entitiesNode!=null)
      {
        clonedNode=__CloneEntityToDom(entitiesNode,entity);
      }
    }
  }
  catch(e){}
  return(clonedNode);
}
function __CloneEntityToDom(parent,entity)
{
  var clonedNode=null;
  try
  {
    if(parent!=null&&entity!=null)
    {
      var nodeParent=(parent.nodeType==9?parent.documentElement:parent);
      var nodeEntity=(entity.nodeType==9?entity.documentElement:entity);
      try
      {
        clonedNode=nodeParent.ownerDocument.importNode(nodeEntity,true);
      }
      catch(e)
      {
        clonedNode=entity.cloneNode(true);
      }
      if(clonedNode!=null)
      {
        var nodeClone=(clonedNode.nodeType==9?clonedNode.documentElement:clonedNode);
        nodeParent.appendChild(nodeClone);
      }     
    }
  }
  catch(e){}
  return(clonedNode);
}
function __UniqueId(nodes,keyName)
{
  var i=1;
  if(nodes!=null)
  {
    var found;
    do
    {
      found=false;
      for(var x=0;x<nodes.length&&!found;x++)
      {
        var keyNode=__SelectSingleNode(nodes[x],keyName);
        if(keyNode!=null)
        {
          var keyNodeVal=__CurrentNodeValue(keyNode);
          keyNodeVal=keyNodeVal.replace("-","");
          if(!isNaN(keyNodeVal)&&(keyNodeVal*1)==i)
          {
            found=true;
          }
        }
      }
      if(found)
      {
        i++;
      }
    }while(found);
  }
  return("-"+i);
}