var ajaxA= new Array(); //Multiple, simultaneous, async requests
			var ajaxE = "Error Log\n------------------------------------------"; //Error log
			function ajaxProc(url,msg,proc){
			/*
				The Microsoft responseXML will be null unless the status is 200.
				This will only be true if it receives the document via HTTP.

			*/
				
				var x = ajaxA.length;
				if(window.XMLHttpRequest){
					ajaxA[x] = new XMLHttpRequest();
				}
				if(window.ActiveXObject){
					ajaxA[x] = new ActiveXObject("MSXML2.XMLHTTP.4.0");
				}
				if(ajaxA[x] != null){
					var strArg = "";
					for(i=3;i<arguments.length;i++){
						strArg += ",'"+arguments[i]+"'";
					}
					ajaxA[x].onreadystatechange = function(){
						if(ajaxA[x].readyState==4){
							if(ajaxA[x].status==200){
								window.status = proc+"("+x+strArg+")";			
								eval(proc+"("+x+strArg+")");
							}else{
								ajaxE+="\n" + url + ": " + ajaxA[x].status;
							}
						}
					}
					ajaxA[x].open(((msg=="")?"GET":"POST"),url,true);
					ajaxA[x].send(msg);
					return true;
				}else{
					return false;
				}
			}


			

			/* 	------------------------------------------------------------------
				Add selectNodes to the Moz implementation.
				Prefix-correcting evaluate statement from http://www.faqts.com/knowledge_base/view.phtml/aid/34022/fid/119
				------------------------------------------------------------------ */
			if( document.implementation.hasFeature("XPath", "3.0") ){
				XMLDocument.prototype.selectNodes = function(cXPathString, xNode){
					if( !xNode ) {
						xNode = this;
					}
				
					var defaultNS = this.defaultNS;

					var aItems = this.evaluate(cXPathString, xNode,{
						normalResolver:
							this.createNSResolver(this.documentElement),
    							lookupNamespaceURI : function (prefix) {
      								switch (prefix) {
        								case "dflt":
          									return defaultNS;
        								default:
          									return this.normalResolver.lookupNamespaceURI(prefix);
      								}
    							}
  							},XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);

					var aResult = [];
					for( var i = 0; i < aItems.snapshotLength; i++){
         					aResult[i] =  aItems.snapshotItem(i);
					}
					return aResult;
				}

				Element.prototype.selectNodes = function(cXPathString){
					if(this.ownerDocument.selectNodes){
						return this.ownerDocument.selectNodes(cXPathString, this);
					}else{
						throw "For XML Elements Only";
					}
   				}

				/* set the SelectionNamespaces property the same for NN or IE: */
				XMLDocument.prototype.setProperty = function(p,v){
					if(p=="SelectionNamespaces" && v.indexOf("xmlns:dflt")==0){
						this.defaultNS = v.replace(/^.*=\'(.+)\'/,"$1");
					}
				}

				XMLDocument.prototype.defaultNS;

				/*
					EXAMPLE USAGE:
					[doc].setProperty("SelectionNamespaces","xmlns:dflt='http://purl.org/atom/ns#'");
				*/
			}