function xmlProxy() {
	this.xmlObj = null;

	this.initializeData = function() {
		this.method = "POST";
		this.invokeMethod = null;
		this.vars = new Object();
		this.responseDoc = null;
		this.responseText = null;
		this.errorMessage = '';
	}
	
	this.initializeFunctions = function() {
		this.onLoading = function() { };
		this.onCompletion = function() { };
		this.onError = function() { };
	}
	
	this.initializeXmlProxy = function() {
		try	{
			this.xmlObj = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				this.xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e1) {
				try {
					this.xmlObj = new XMLHttpRequest();
				} catch(e2) {
					this.xmlObj = null;
				}
			}
		}	
	}
	
	this.initialize = function() {
		this.initializeData();
		this.initializeFunctions();
		this.initializeXmlProxy();
		
		if (arguments.length > 0) {
			this.invokeMethod = arguments[0];
		}
	}

	this.initialize();

	this.getServiceHandlerPath = function () {
	
		return "/includes/service_handler.php?service=";
	}
	
	this.addVariable = function(name, value) {
		this.vars[name] = Array(value, false);
	}

	this.invokeXMLResponse = function() {
		var self = this;
		var encodeString;

		if (arguments.length > 0) {
			this.onCompletion = arguments[0];
		}
		this.xmlObj.open(this.method, this.getServiceHandlerPath() + this.invokeMethod);
		this.xmlObj.setRequestHeader("Host","http://" + document.domain);
		this.xmlObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		
		this.xmlObj.onreadystatechange = function() {
			if(self.xmlObj.readyState == 4) {
				if(self.xmlObj.status == 200) {
					self.responseDoc = self.xmlObj.responseXML.documentElement;
					self.onCompletion();
				} else {
					self.onError();					
				}
			} else if (self.xmlObj.readyState == 4) {
				self.onLoading();
			}
		
		}
		encodeString = this.encodeVariables();
		this.xmlObj.setRequestHeader("Content-Length","" + encodeString.length + "");
		this.xmlObj.send(encodeString);
	
	}
	
	this.invokeTextResponse = function() {
		var self = this;
		var encodeString;

		if (arguments.length > 0) {
			this.onCompletion = arguments[0];
		}
		this.xmlObj.open(this.method, this.getServiceHandlerPath() + this.invokeMethod);
		this.xmlObj.setRequestHeader("Host","http://" + document.domain);
		this.xmlObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		
		this.xmlObj.onreadystatechange = function() {
			if(self.xmlObj.readyState == 4) {
				if(self.xmlObj.status == 200) {
					self.responseText = self.xmlObj.responseText;
					self.onCompletion();
				} else {
					self.onError();					
				}
			} else if (self.xmlObj.readyState == 4) {
				self.onLoading();
			}
		
		}
		encodeString = this.encodeVariables();
		this.xmlObj.setRequestHeader("Content-Length","" + encodeString.length + "");
		this.xmlObj.send(encodeString);
	
	}

	this.encodeVariables = function() {
		var encodeString = '';
		
		var ii = 0;
		for (key in this.vars) { 
			if (ii != 0){
    				encodeString += "&" + key + "=" + encodeURI(this.vars[key][0]);
    			} else {
    				encodeString += key + "=" + encodeURI(this.vars[key][0]);
    			}
    			ii++;
		}
		
		return encodeString;
	}

	this.loadListbox = function(lst, xmlRootNode, textField, valueField) {
		var text; 
		var sValue;
		var listItem;
		var newOption;

		lst.options.length = 0;

		var optionText = xmlRootNode.getElementsByTagName(textField);
		if (valueField) {
			var optionValues = xmlRootNode.getElementsByTagName(valueField);
			for (ii=0; ii < optionText.length; ii++)
			{
   				text = (optionText[ii].textContent || optionText[ii].innerText || optionText[ii].text);
   				sValue = (optionValues[ii].textContent || optionValues[ii].innerText || optionValues[ii].text);
				listItem = new Option(text, sValue);
				lst.options.add(listItem);
			}
		} else {
			for (ii=0; ii < optionText.length; ii++)
			{
   				text = (optionText[ii].textContent || optionText[ii].innerText || optionText[ii].text);
				listItem = new Option(text, text);
				lst.options.add(listItem);
			}		
		}
		
	}
	
	this.loadDivList = function(dv, xmlRootNode, textField, valueField) {
		var text; 
		var sValue;
		var listItem;
		var newOption;

		dv.innerHTML = '';

		var optionText = xmlRootNode.getElementsByTagName(textField);
		if (valueField) {
			var optionValues = xmlRootNode.getElementsByTagName(valueField);
			for (ii=0; ii < optionText.length; ii++)
			{
   				text = (optionText[ii].textContent || optionText[ii].innerText || optionText[ii].text);
   				sValue = (optionValues[ii].textContent || optionValues[ii].innerText || optionValues[ii].text);
								
				if (arguments.length > 4 && arguments[4] == text) {
					listItem = '<div class="divListItemSel" id="selectedItem" value="' + sValue + '">' + text + '</div>';
				} else {
					listItem = '<div class="divListItem" value="' + sValue + '">' + text + '</div>';
				}
				dv.innerHTML += listItem;
			}			
		} else {
			for (ii=0; ii < optionText.length; ii++)
			{
   				text = (optionText[ii].textContent || optionText[ii].innerText || optionText[ii].text);
				listItem = '<div class="divListItem">' + text + '</div>';
				dv.innerHTML += listItem;
			}		
		}
		
	}

	this.getSaveStatus = function(xmlRootNode) {
		var result = xmlRootNode.getElementsByTagName('result');
								
		if (result.length > 0) {
			var text = (result[0].textContent || result[0].innerText || result[0].text);
			if (text == '1') {
				return true;
			} else {
				this.errorMessage = text;
				return false;
			}
		} else {
			return false;
		}
	
	}
}
