function loadConfigXml(urlXml)
{
	try{	
		if(document.implementation && document.implementation.createDocument){
	        var Xmlhttp = new XMLHttpRequest();   
			var dom = document.implementation.createDocument("","",null);
			Xmlhttp.open("GET",urlXml,false);
			Xmlhttp.setRequestHeader("Content-Type","text/xml");
			Xmlhttp.send(null);
			parser=new DOMParser(); 
			dom = parser.parseFromString(Xmlhttp.responseXML.xml,"text/xml");
			return dom;
	    }else if(typeof window.ActiveXObject != 'undefined') {      
	        var Xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			var dom=new ActiveXObject("Msxml2.DOMDOCUMENT");
			Xmlhttp.open("GET",urlXml,false);
			Xmlhttp.setRequestHeader("Content-Type","text/xml");
			Xmlhttp.send();		
			dom.loadXML(Xmlhttp.responseText);
			return dom;
	    }
	} catch(e){
		alert(e.description);
	}
}

function getparameters(urlXml,args)
{
	try{
	    if(document.implementation && document.implementation.createDocument){ 	
		    var thisargs = args;
			var dom = loadConfigXml(urlXml);		
			var names = dom.selectNodes("/CONFIG/PARAMETER/NAME");
			var values = dom.selectNodes("/CONFIG/PARAMETER/VALUE");
			for(var i=0; i<names.length; i++){  
			   thisargs[names[i].childNodes[0].nodeValue] = values[i].childNodes[0].nodeValue;
			}
			return thisargs;    
	    }else if(typeof window.ActiveXObject != 'undefined') {
	        var thisargs = args;
			var dom = loadConfigXml(urlXml);
			var names = dom.selectNodes("/CONFIG/PARAMETER/NAME");
			var values = dom.selectNodes("/CONFIG/PARAMETER/VALUE");
	       	for(var i=0; i<names.length; i++)
			{
				thisargs[names.item(i).text] = values.item(i).text;
			}
			return thisargs;
	    }
	} catch(e){
		alert(e.description);
	}
}

//?FIREFOX??selectNodes()?selectSingleNode()
//?????http://km0ti0n.blunted.co.uk/mozXPath.xap
// check for XPath implementation
if( document.implementation.hasFeature("XPath", "3.0") )
{
	// prototying the XMLDocument
	XMLDocument.prototype.selectNodes = function(cXPathString, xNode)
	{
		if( !xNode ) { xNode = this; } 
		var oNSResolver = this.createNSResolver(this.documentElement)
		var aItems = this.evaluate(cXPathString, xNode, oNSResolver, 
		XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
		var aResult = [];
		for( var i = 0; i < aItems.snapshotLength; i++)
		{
			aResult[i] = aItems.snapshotItem(i);
		}
		return aResult;
	}

	// prototying the Element
	Element.prototype.selectNodes = function(cXPathString){
		if(this.ownerDocument.selectNodes){
		  return this.ownerDocument.selectNodes(cXPathString, this);
		}else{
			throw "For XML Elements Only";
		}
	}
}
	
	// check for XPath implementation
if( document.implementation.hasFeature("XPath", "3.0")){
	// prototying the XMLDocument
	XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode){
		if( !xNode ){
			xNode = this;
		} 
		var xItems = this.selectNodes(cXPathString, xNode);
		if( xItems.length > 0 ){
			return xItems[0];
		}else{
			return null;
		}
	}
	
	// prototying the Element
	Element.prototype.selectSingleNode = function(cXPathString){ 
		if(this.ownerDocument.selectSingleNode){
			return this.ownerDocument.selectSingleNode(cXPathString, this);
		}else{
			throw "For XML Elements Only";
		}
	}
}


//?fireFox???xmlDom.xml
if(!document.all)
	Node.prototype.__defineGetter__
	(
		"xml",
		function()
		{
			return (new XMLSerializer).serializeToString(this);
		}
	);

//???????????????????
function checkNodes(dom,nodeName,index){
	
	if((typeof dom.getElementsByTagName(nodeName)[index].childNodes[0])=='undefined'){
		var newtext = dom.createTextNode("");
		dom.getElementsByTagName(nodeName)[index].appendChild(newtext);
	} 
}
