function SoftXpath(){
		function completeLoad(){
			var l=false;
			if(moz){
				l = (xmlDom.documentElement==null?false:true);
			}
			else{
				if(xmlDom.readyState=="4"){
						l = (xmlDom.documentElement==null?false:true);
					}
				}
			getLoaded.call(this,l);
		}
		
		function getLoaded(status){
			o.Loaded=status;
		}
		var moz = (typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined') && !document.implementation.hasFeature('LS', '3.0') ;
		var xmlDomOpera = ((document.implementation) && (document.implementation.createDocument) && document.implementation.hasFeature('LS', '3.0')?true:false);
		var xmlDom = (moz || xmlDomOpera?document.implementation.createDocument("", "doc", null):new ActiveXObject("MSXML2.DOMDocument.3.0"));
		
		var o = this;
		var ns="";
		this.DefaultNameSpace=function(n){ns=n;};
		if(xmlDomOpera){
			ls = document.implementation.createLSParser(1,null);
		}
		this.load = function(filepath){
			xmlDom.async = false;
			if(moz){
				xmlDom.addEventListener("load", completeLoad, false);
			}
			else{
				xmlDom.onreadystatechange=completeLoad;
			}
			if(xmlDomOpera){
				xmlDom = ls.parseURI(filepath);
				o.Loaded = (xmlDom.documentElement.nodeName=="parsererror"?false:true);
			}
			else{
				xmlDom.load(filepath);
			}
		}
		this.loadXML = function(xmlstring){
			if(moz  || xmlDomOpera){
			    var parser = new DOMParser();
				xmlDom = parser.parseFromString(xmlstring, "text/xml");
				o.LoadedXML=(xmlDom.documentElement.nodeName=="parsererror"?false:true);
				
			}
			
			else{
				la = xmlDom.loadXML(xmlstring);
				o.LoadedXML=(la==true?true:false);
			}
		}
		
		this.selectNodes = function(xpath){
			var resultsI = new Array();
			if(moz){
				
				var xpe = new XPathEvaluator();
				var nsResolver = (new XPathEvaluator()).createNSResolver(xmlDom.ownerDocument == null ? xmlDom.documentElement : xmlDom.ownerDocument.documentElement);
				var result = (xpath>""?xpe.evaluate(xpath, xmlDom, nsResolver, 0, null):"0");
				if(result!="0"){
				    while (res = result.iterateNext()){
					    resultsI[resultsI.length]={nodeName:res.nodeName,text:res.textContent,me:res};
				    }
				} 
				
			}
			
			else{
			    
			    try{
			        try{
			            (document.implementation.hasFeature("SelectionLanguage","XPath"));
			            xmlDom.setProperty ("SelectionNamespaces", this.DefaultNameSpace);
			            xmlDom.setProperty ("SelectionLanguage", "XPath");
			        }
			        catch(e){};
			        
			        
            		nodes = xmlDom.selectNodes(xpath);
				    for(i=0;i<nodes.length;i++){
					    resultsI[i]={nodeName:nodes[i].nodeName,text:nodes[i].text,me:nodes[i]};
				    }
				 }
				 catch(e){};
				    
			}
			return resultsI;
		}
} 
SoftXpath.prototype.DefaultNameSpace = function(n){this.ns = n;}


