﻿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)
{
  if(__EntityExists(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 __AddEntityFromString(xml)
{
  try
  {
    var entityXml=__LoadXml(xml);
    if(entityXml!=null&&entityXml.childNodes.length>0)
    {
      return(__AddEntity(entityXml.childNodes[0]));
    }
  }
  catch(e){}
  return(null);
}
function __AddEntityToDomFromString(parent,xml)
{
  try
  {
    var entityXml=__LoadXml(xml);
    if(entityXml!=null&&entityXml.childNodes.length>0)
    {
      return(__AddEntityToDom(parent,entityXml.childNodes[0]));
    }
  }
  catch(e){}
  return(null);
}
function __AddEntity(entity)
{
  try
  {
    if(__dataXml==null)
    {
      __dataXml=__LoadXml("<data><entities></entities></data>");
    }
    if(__dataXml!=null)
    {
      var entitiesNode=__dataXml.childNodes[0].childNodes[0];
      if(entitiesNode!=null)
      {
        return(__AddEntityToDom(entitiesNode,entity));
      }
    }
  }
  catch(e){}
  return(null);  
}
function __AddEntityToDom(parent,entity)
{
  try
  {
    if(parent!=null)
    {
      if(entity.ownerDocument!=parent.ownerDocument||(entity.ownerDocument==null&&parent.ownerDocument==null))
      {
        entity=__CloneEntityToDom(parent,entity);
      }
      else
      {
        if(BrowserDetect.browser=="Safari"||navigator.userAgent.indexOf("Safari")>-1)
        {
          entity=parent.ownerDocument.importNode(entity,true);
          parent.appendChild(entity);
        }
        else
        {
          parent.appendChild(entity);
        }
      }
      return(entity);
    }
  }
  catch(e){}
  return(null);
}
function __InsertEntityFromString(xml,pos)
{
  var entity=__AddEntityFromString(xml);
  if(entity!=null)
  {
    var parent=entity.parentNode;
    return(__InsertEntityToDom(parent,entity,pos));
  }
  return(null);
}
function __InsertEntityInDomFromString(parent,xml,pos)
{
  if(parent!=null)
  {
    var entity=__AddEntityToDomFromString(parent,xml);
    if(entity!=null)
    {
      return(__InsertEntityToDom(parent,entity,pos));
    }
  }
  return(null);
}
function __InsertEntity(entity,pos)
{
  var entity=__AddEntity(entity);
  if(entity!=null)
  {
    var parent=entity.parentNode;
    return(__InsertEntityToDom(parent,entity,pos));
  }
  return(null);
}
function __InsertEntityToDom(parent,entity,pos)
{
  if(entity!=null&&parent!=null)
  {
    __RemoveEntityByRef(entity);
    if(pos<parent.childNodes.length)
    {
      parent.insertBefore(entity,parent.childNodes[pos]);
    }
    else
    {
      __AddEntityToDom(parent,entity);
    }
    return(entity);
  }
  return(null);
}
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);
}