function XmlObj()
{
	this.XmlDoc = new Object();
	
	this.ParseFromFile = function(xmlFile)
	{
		if (Browser.isIE)
		{
			try
			{
				this.XmlDoc = new ActiveXObject("Microsoft.XMLDOM");
				this.XmlDoc.async = "false";
				this.XmlDoc.load(xmlFile);

				this.CreateRootObject();
				
				return true;
			}
			catch(e)
			{
				return false;
			}
		}
		else if(Browser.isFirefox || Browser.isOpera || Browser.isNS || Browser.isSafari || Browser.isChrome )
		{
			try
			{
				if (document.implementation && document.implementation.createDocument)
				{
					this.XmlDoc = document.implementation.createDocument("","",null);
					this.XmlDoc.load(xmlFile);
					this.XmlDoc.onload = this.CreateRootObject;
				}
				
				return true;
			}
			catch(e)
			{
				return false;
			}
		}
		return false;
	}
	
	this.ParseFromString = function(xmlString)
	{
		if(Browser.isIE)
		{
			try
			{
				this.XmlDoc = new ActiveXObject("Microsoft.XMLDOM");
				this.XmlDoc.async = "false";
				this.XmlDoc.loadXML(xmlString);
				this.CreateRootObject();
				
				return true;
			}
			catch(e)
			{
				alert("Erro: ParseFromString (" + e + ")");
				return false;
			}
		}
		else if(Browser.isFirefox || Browser.isOpera || Browser.isNS || Browser.isSafari || Browser.isChrome)
		{
			try
			{
				FirefoxParser = new DOMParser();
				this.XmlDoc = FirefoxParser.parseFromString(xmlString,"text/xml");
                
				this.CreateRootObject();
				
				alert("aqui");
				return true;
			}
			catch(e)
			{
				return false;
			}
		}
	}
	
	this.CreateRootObject = function()
	{
		alert("CreateRootObject");
	
		if(Browser.isIE)
		{
			RootNode = this.XmlDoc.documentElement;
			RootName = RootNode.nodeName.toLowerCase();            
            
			alert(RootName);
			
            //2008/08/06 - Alterado por Rudnei, para corrigir problema do soap
            RootName = RootName.replace(/:/g, "");            
			eval(RootName + " = new Object()");
            
			this.ParseTree(RootNode,RootName);
		}
		else if(Browser.isFirefox || Browser.isOpera || Browser.isNS || Browser.isSafari || Browser.isChrome)
		{
			RootNode = XmlObj.XmlDoc.documentElement;
			RootName = RootNode.nodeName.toLowerCase();
		
			alert(RootName);
		
            //2008/08/06 - Alterado por Rudnei, para corrigir problema do soap
            RootName = RootName.replace(/:/g, "");
			eval(RootName + " = new Object()");
		
			XmlObj.ParseTree(RootNode,RootName);
		}
		
		return true;

	}
	
	this.ParseTree = function(CurrentNode, PreviewsNodesNomes)
	{
		for(var i=0;i<CurrentNode.childNodes.length;i++)
		{
			Node = CurrentNode.childNodes[i];
			if(Node.nodeType == 1)
			{
				if(Node.hasChildNodes())
				{
					ObjectName 	= PreviewsNodesNomes + "." + Node.nodeName.toLowerCase();
					ObjectValue	= Node.firstChild.nodeValue;
					ObjectType	= (Node.getAttribute("TYPE") != null && Node.getAttribute("TYPE") != undefined)? Node.getAttribute("TYPE") : Node.getAttribute("type");
					
					if(ObjectValue != null && ObjectType != "array")
					{
						if(ObjectValue=="#") ObjectValue = "nothing";
						eval(ObjectName + " = new Function(\"return '" + ObjectValue + "'\")");
					}
					else
					{
						if(ObjectType == "array")
						{
                            //2007/12/03 - Alterado por Rudnei, para que nao haja problema na navegacao entre mais de um nivel no array
							//if(j == undefined || ObjectName != CurrentArray) var j = 0;
                            if(j == undefined) var j = 0;
							if(j==0)
							{
								eval(ObjectName + " = new Array()");
								CurrentArray = ObjectName;
							}
                            ObjectName = ObjectName.replace(/:/g, "");
							ObjectName = ObjectName + "["+ j +"]";
							eval(ObjectName + " = new Object()");
							j++;
						}
						else
						{
                            //2008/08/06 - Alterado por Rudnei, para corrigir problema do soap
                            ObjectName = ObjectName.replace(/:/g, "");                            
							eval(ObjectName + " = new Object()");
						}
						
						if(Browser.isIE)
						{
							this.ParseTree(Node, ObjectName);
						}
						else if(Browser.isFirefox || Browser.isOpera || Browser.isNS || Browser.isSafari || Browser.isChrome)
						{
							XmlObj.ParseTree(Node, ObjectName);
						}
					}
				}
			}
		}
        //alert("dentro do parser: " + search.segmento[0].id());
	}
	
	this.ExtractSoapHeader = function( _delimitador, _xml )
    {
        try
        {
            var _start = _xml.indexOf(_delimitador) + _delimitador.length + 1;
            var _length = _xml.lastIndexOf(_delimitador) - _xml.indexOf(_delimitador) - _delimitador.length - 3;            
            return _xml.substr(_start, _length);
        }
        catch(e)
        {
            throw(e);
            return false;
        }
    }
    
/*
	this.ParseTree = function(CurrentNode, PreviewsNodesNomes)
	{
		for(var i=0;i<CurrentNode.childNodes.length;i++)
		{
			Node = CurrentNode.childNodes[i];
			if(Node.nodeType == 1)
			{
				if(Node.hasChildNodes())
				{
					ObjectName 	= PreviewsNodesNomes + "." + Node.nodeName.toLowerCase();
					ObjectValue	= Node.firstChild.nodeValue;
					ObjectType	= (Node.getAttribute("TYPE") != null && Node.getAttribute("TYPE") != undefined)? Node.getAttribute("TYPE") : Node.getAttribute("type");
					
					if(ObjectValue != null && ObjectType != "array")
					{
						if(ObjectValue=="#") ObjectValue = "nothing";
						eval(ObjectName + " = new Function(\"return '" + ObjectValue + "'\")");
					}
					else
					{
						if(ObjectType == "array")
						{
							if(j == undefined || ObjectName != CurrentArray) var j = 0;
							if(j==0)
							{
								eval(ObjectName + " = new Array()");
								CurrentArray = ObjectName;
							}
							ObjectName = ObjectName + "["+ j +"]";
							eval(ObjectName + " = new Object()");
							j++;
						}
						else
						{
							eval(ObjectName + " = new Object()");
						}
						
						if(Browser.isIE)
						{
							this.ParseTree(Node, ObjectName);
						}
						else if(Browser.isFirefox || Browser.isOpera || Browser.isNS)
						{
							XmlObj.ParseTree(Node, ObjectName);
						}
					}
				}
			}
		}
	}	
*/
	
}
