
function JXmlDom (xml,isFile) {
    this.load=load;
    this.loadXML=loadXML;
    this.selectNodes=selectNodes;
    this.text=text;
    this.selectSingleNode=selectSingleNode;
    this.documentElement=documentElement;
    this.transformNode=transformNode;
    if (isFile) {
        this.dom=this.load (xml);
       
    }else {
        this.dom=this.loadXML (xml);
        
    }
    
    function load (xml) {
        if (window.ActiveXObject) {
    		var dom=new ActiveXObject("Microsoft.XMLDOM");
        }
    	if (document.implementation && document.implementation.createDocument) {
    		var dom=document.implementation.createDocument("","",null);
    	}
    	dom.async=false;
    	dom.load (xml);
    	return dom;
    }
    
    function loadXML (xml) {
         if (window.ActiveXObject) {
    		var dom=new ActiveXObject("Microsoft.XMLDOm");
    		dom.async=false;
    	    dom.loadXML (xml);
        }
    	if (document.implementation && document.implementation.createDocument) {
    		var domParser=new DOMParser();
    		var dom=domParser.parseFromString (xml,"text/xml");
			//alert(dom.createNSResolver(dom.documentElement).lookupNamespaceURI("soap"));
			
    	}
    	return dom;
    }
    
    function selectNodes (xpath) {
        if (window.ActiveXObject) {
            var nodes=this.dom.selectNodes (xpath);
            var arr=new Array();
            for (var i=0;i<nodes.length;i++) {
                arr[i]=nodes[i];
           }
            return arr;
        }
       if (document.implementation && document.implementation.createDocument) {
		   if(navigator.userAgent.indexOf("Opera") == -1) {
				var result=this.dom.evaluate (xpath,this.dom,this.dom.createNSResolver(this.dom.documentElement),0,null);
				var arr=new Array();
				var row;
				while ((row=result.iterateNext())) {
					arr[arr.length]=row;
				}
				return arr;
			}else {
				return selectNodesOpera(this.dom, xpath);
			}
      

       }
    }
    
    function selectSingleNode (xpath) {
         if (window.ActiveXObject) {
            return this.dom.selectSingleNode (xpath);
        }
       if (document.implementation && document.implementation.createDocument) {
		  if(navigator.userAgent.indexOf("Opera") == -1) {
			var result=this.dom.evaluate (xpath,this.dom,this.dom.createNSResolver(this.dom.documentElement),9,null);
			return result.singleNodeValue;
		  }else {
			var nodes = selectNodesOpera(this.dom, xpath);
			if(nodes.length > 0) return nodes[0];
			return null;
		  }
       }
    }
    function text (node) {
        if (node.childNodes[0]) {
            return node.childNodes[0].nodeValue;
        }else {
            return " ";
        }
    }
    
    function transformNode (xsl,id) {
        if (window.ActiveXObject) {
            return this.dom.transformNode (xsl.dom);
        }
        if (document.implementation && document.implementation.createDocument) {
            var xsltProcessor=new XSLTProcessor ();
            xsltProcessor.importStylesheet (xsl.dom);
            return xsltProcessor.transformToFragment(this.dom, document);
            
            
        }
    }
    
    function documentElement() {
        return this.dom.documentElement;
    }
    
    
    
}

function getXmlHttpObject() {
	 if (window.ActiveXObject) {
		 return new ActiveXObject("Microsoft.XMLHTTP");
	 }
	 if (document.implementation && document.implementation.createDocument) {
		 return new XMLHttpRequest();
	 }

}


function selectNodesOpera(dom, xpath) {
	var isAttrs = false;
	var arrAttr = new Array();
	var eleName = xpath.replace( /\[.*\]/ , "").replace(/.*\//,"");
	if(xpath.indexOf("[") > 0) isAttrs = true;
	if(isAttrs) {
		var arr = xpath.replace(/.*\[/, "").replace(/\]/,"").split("and");
		for(var i = 0; i < arr.length; i++) {
			var checkAttr = arr[i].replace(/\s*@/,"").replace(/=.*/,"");
			var checkValue = arr[i].replace(/.*@.*='/,"").replace(/'\s*/,"");
			arrAttr[checkAttr] = checkValue;
		}
	}
	var resultArray = new Array();
	var elements = dom.getElementsByTagName(eleName);
	var isAdd = true;
	for(var i = 0; i < elements.length; i++) {
		isAdd = true;
		if(isAttrs) {
			for(var att in arrAttr) {
				if(elements[i].getAttribute(att) != arrAttr[att]) isAdd = false;
			}
			
		}else {
			isAdd = true;
		}
		if(isAdd) resultArray[resultArray.length] = elements[i];
	}
	return resultArray;
}
