﻿function __LoadXmlFile(fileName)
{
  var xmlDoc;
  try
  {
    if(window.ActiveXObject)
    {
      xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
      xmlDoc.async=false;
      xmlDoc.load(fileName);
    }
    else
    {    
      if(BrowserDetect.browser=="Safari"||navigator.userAgent.indexOf("Safari")>-1)
      {
        var req=new XMLHttpRequest();
	    req.open("GET",fileName,false);
	    req.send(null);
	    xmlDoc=req.responseXML;
      }
      else
      {
        xmlDoc=document.implementation.createDocument("","",null);
        xmlDoc.async=false;
        xmlDoc.load(fileName);
      }
    }
  }
  catch(e)
  {
    xmlDoc=null;
  }
  return(xmlDoc);
}

function __LoadXml(xml)
{
  try
  {
    if(window.ActiveXObject)
    {
      xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
      xmlDoc.async="false";
      xmlDoc.loadXML(xml);
      return(xmlDoc);
    }
    else
    {
      if(BrowserDetect.browser=="Safari"||navigator.userAgent.indexOf("Safari")>-1) {
        var req = new XMLHttpRequest();
        req.open("POST",__RequestPath+"/DesktopModules/OALUtils/xmlprocessor.aspx",false);
        req.setRequestHeader("Content-Type", "text/xml charset=utf-8");
        req.send(xml);
		return(req.responseXML);
      } 
      else
      {
        parser=new DOMParser();
        xmlDoc=parser.parseFromString(xml,"application/xml");
        return(xmlDoc);
      }
    }
  }
  catch(e)
  {
    return(null);
  }
}

function __SelectSingleNode(xmlDoc, nodeName) {
  var returnValue=null;
  if(xmlDoc==__dataXml)
  {
    xmlDoc=__dataXml.childNodes[0].childNodes[0];
  }
  else
  {
    if(xmlDoc==__Resp)
    {
      xmlDoc=__Resp.childNodes[0];
    }
  }
  if(nodeName.indexOf("/")>-1)
  {
    var parentNode=__SelectSingleNode(xmlDoc,nodeName.substr(0,nodeName.indexOf("/")));
    if(parentNode!=null)
    {
      return(__SelectSingleNode(parentNode,nodeName.substr(nodeName.indexOf("/")+1)));
    }
    else
    {
      return(null);
    }
  }
  else
  {
    var nodes=xmlDoc.getElementsByTagName(nodeName);
    if(nodes!=null)
    {
      for(var i=0;i<nodes.length;i++)
      {
        if((nodes[i].parentNode==xmlDoc)||(nodes[i].parentNode.nodeType==1&&nodes[i].parentNode.parentNode==xmlDoc))
        {
          returnValue=nodes[i];
          i=nodes.length;
        }
      }
    }
  }
  return(returnValue);
}

function __SelectNodes(xmlDoc, nodeName)
{
  if(xmlDoc==__dataXml)
  {
    xmlDoc=__dataXml.childNodes[0].childNodes[0];
  }
  else
  {
    if(xmlDoc==__Resp)
    {
      xmlDoc=__Resp.childNodes[0];
    }
  }
  if(nodeName.indexOf("/")>-1)
  {
    var parentNode=__SelectSingleNode(xmlDoc,nodeName.substr(0,nodeName.indexOf("/")));
    if(parentNode!=null)
    {
      return(__SelectNodes(parentNode,nodeName.substr(nodeName.indexOf("/")+1)));
    }
    else
    {
      return(null);
    }
  }
  else
  {
    var nodes=xmlDoc.getElementsByTagName(nodeName);
    if(nodes!=null&&nodes.length>0)
    {
      return(nodes);
    }
    else
    {
      return(null);
    }    
  }
}

function __GetAttribute(node,attrName)
{
  if(node!=null)
  {
    var returnVal;
    if(node.nodeType==9)
    {
      returnVal=node.documentElement.getAttribute(attrName)
    }
    else
    {
      returnVal=node.getAttribute(attrName)
    }
    if(returnVal==null)
    {
      returnVal="";
    }
    return(returnVal);
  }
  else
  {
    return("");
  }
}

function __GetBooleanAttribute(node,attrName)
{
  var boolVal=false;
  var attr=__GetAttribute(node,attrName);
  if(attr)
  {
    var val=attr.toLowerCase();    
    if(val=="true"||val=="yes")
    {
      boolVal=true;
    }
  }
  return(boolVal);
}

function __GetNumericAttribute(node,attrName)
{  
  var val=__GetAttribute(node,attrName);
  if(val)
  {
    if(isNaN(val))
    {
      return(0);
    }
    else
    {
      return(val*1);
    }
  }
  else
  {
    return(0);
  }
}

function __SetAttribute(node,attrName,value)
{
  if(node!=null)
  {
    if(node.nodeType==9)
    {
      node.documentElement.setAttribute(attrName,value);
    }
    else
    {
      node.setAttribute(attrName,value);
    }
  }
}

function __NodeValue(xmlDoc, nodeName)
{
  var node=__SelectSingleNode(xmlDoc, nodeName);
  return(__CurrentNodeValue(node));
}

function __CurrentNodeValue(node)
{
  if(node!=null&&node.childNodes.length>0)
  {
    return(node.childNodes[0].nodeValue);
  }
  else
  {
    return("");
  } 
}

function __BooleanNodeValue(xmlDoc, nodeName)
{
  var node=__SelectSingleNode(xmlDoc, nodeName);
  return(__CurrentBooleanNodeValue(node));
}

function __CurrentBooleanNodeValue(node)
{
  var val=__CurrentNodeValue(node).toLowerCase();
  var boolVal=false;
  if(val=="true"||val=="yes")
  {
    boolVal=true;
  }
  return(boolVal);
}

function __NumericNodeValue(xmlDoc, nodeName) {
  var node=__SelectSingleNode(xmlDoc, nodeName);
  return(__CurrentNumericNodeValue(node));
}

function __CurrentNumericNodeValue(node)
{
  var val=__CurrentNodeValue(node);
  if(isNaN(val))
  {
    return(0);
  }
  else
  {
    return(val*1);
  }
}

function __SetNodeValue(xmlDoc, nodeName, nodeValue)
{
  var node=__SelectSingleNode(xmlDoc, nodeName);
  __SetCurrentNodeValue(node, nodeValue);
}

function __SetCurrentNodeValue(node, nodeValue)
{
  if(node!=null)
  {
    if(node.childNodes.length>0)
    {
      node.childNodes[0].nodeValue=nodeValue;
    }
    else
    {
      var nodeContent=node.ownerDocument.createTextNode(nodeValue);
      node.appendChild(nodeContent);
    }
  }
}

function __Transform(dest, xmlDoc, xslName, paramNames, paramVals) 
{
  if(xmlDoc==null)
  {
    xmlDoc=__LoadXml("<empty />");
  }
  dest.innerHTML="";
  if((paramNames==null&&paramVals==null)||(paramNames.length==paramVals.length))
  {
    if (window.ActiveXObject)
    {
      var xslt = new ActiveXObject("Msxml2.XSLTemplate");
      if(xslt)
      {
        var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
        if(xslDoc)
        {
          xslDoc.async = false;
          xslDoc.resolveExternals = true;
          xslDoc.load(xslName);
          xslt.stylesheet=xslDoc;
          var xslProc=xslt.createProcessor();
          xslProc.input = xmlDoc;
          if(paramNames!=null)
          {
            for(var i=0;i<paramNames.length;i++)
            {
              xslProc.addParameter(paramNames[i],paramVals[i]);
            }
          }
          xslProc.transform();
          dest.innerHTML=xslProc.output;
        }      
      }
    }
    else
    {
      if (document.implementation && document.implementation.createDocument)
      {
        var xsl=__LoadXmlFile(xslName)
        if(xsl)
        {
          var xsltProcessor=new XSLTProcessor();
          xsltProcessor.importStylesheet(xsl);
          if(paramNames!=null)
          {
            for(var i=0;i<paramNames.length;i++)
            {
              xsltProcessor.setParameter(null,paramNames[i],paramVals[i]); 
            }
          }
          var resultDocument = xsltProcessor.transformToFragment(xmlDoc,document);
          dest.appendChild(resultDocument);
        }        
      }
    }
  }
  dest.innerHTML=__Replace(__Replace(dest.innerHTML,"&lt;","<"),"&gt;",">");
}
function __GetXML(xmlDoc)
{
  if(xmlDoc!=null)
  {
    if(xmlDoc.xml)
    {
      return(xmlDoc.xml);
    }
    else
    {
      var serializer = new XMLSerializer();
      return(serializer.serializeToString(xmlDoc));
    }
  }  
  else
  {
    return("");
  }
}
