var xmlDoc = null;

function getControlPrefix()
{
   if(getControlPrefix.prefix) return getControlPrefix.prefix;
   
   var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
   var o, o2;
   for (var i = 0; i < prefixes.length; i++)
   {
      try
      {
         // try to create the objects
         o = new ActiveXObject(prefixes[i] + ".XmlHttp");
         o2 = new ActiveXObject(prefixes[i] + ".XmlDom");
         return getControlPrefix.prefix = prefixes[i];
      }
      catch (ex)
      {
      };
   }   
   throw new Error("Could not find an installed XML parser");
}


// XmlDocument factory
function XmlDocument(){}

XmlDocument.create = function()
{
   try
   {
      // DOM2
      if(document.implementation && document.implementation.createDocument)
      {
         var doc = document.implementation.createDocument("", "", null);
			
         // some versions of Moz do not support the readyState property
         // and the onreadystate event so we patch it!
         if (doc.readyState == null)
         {
            doc.readyState = 1;
            doc.addEventListener("load", function () {
               doc.readyState = 4;
               if (typeof doc.onreadystatechange == "function")
                  doc.onreadystatechange();
            }, false);
         }
         
         return doc;
      }
      
      if (window.ActiveXObject)
      {
				 var sActiveXClass = getControlPrefix() + ".XmlDom";
         return new ActiveXObject(sActiveXClass);
      }
   }
   catch (ex) {}
   throw new Error("Your browser does not support XmlDocument objects");
};


function LoadXmlMoz(xml, doc)
{					    
	// Parsear el xml.
	var doc2 = (new DOMParser()).parseFromString(xml, "text/xml");
			
	// Vaciar los nodos del documento xml.
	while (doc.hasChildNodes())
			doc.removeChild(doc.lastChild);
					
	// Insertar los nuevos nodos.
	for (var i = 0; i < doc2.childNodes.length; i++) {
			doc.appendChild(doc.importNode(doc2.childNodes[i], true));
	}
};


function LoadXML(xmlContent)
{		
	xmlDoc = XmlDocument.create();
	
	if (window.ActiveXObject)
	{
		xmlDoc.loadXML(xmlContent);
	}
	else
	{
		LoadXmlMoz(xmlContent, xmlDoc);
	}
	return xmlDoc;
}

function GetElement(xPath)
{
	if (window.ActiveXObject)
	{
		var oNodes = xmlDoc.selectNodes(xPath);
		if(oNodes.length == 0) return null;
		return oNodes[0].text; 
	}
	else
	{	
		var oTagNames = xPath.split('/');
		
		var oRoot = xmlDoc;
		var iMax = oTagNames.length - 1;
		for(var i = 0; i < oTagNames.length; i++)
		{
			if(oTagNames[i] == "") continue;
			
			var oChildren = oRoot.getElementsByTagName(oTagNames[i]);
			if(oChildren.length == 0) return null;
			else if(i == iMax) return oChildren[0].firstChild.nodeValue;
			else oRoot = oChildren[0];
		}

		return null;
	}
}
