function HttpClient(){ }
HttpClient.prototype={
	requestType:'GET', 
	isAsync:false, 
	xmlhttp:false, 
	callback:false, 
	dest:'', 
	
	onSend:function(){
//		document.getElementById('statusMessage').innerHTML = 'Loading ...';
	}, 
	
	onload:function(){
//		document.getElementById('statusMessage').innerHTML = '&nbsp;';
	},

	onError:function(error){
		alert(error);
	}, 
	
	init:function(){
		try {
			this.xmlhttp = new XMLHttpRequest();
		}catch(e){
			var XMLHTTP_IDS = new Array('MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP');
			var success = false;
			for(var i=0;i < XMLHTTP_IDS.length && !success; i++){
				try{
					this.xmlhttp = new ActiveXObject(XMLHTTP_IDS[i]);
					success = true;
				}catch(e){}
			}
			if(!success){
				this.onError('Unable to create XMLHttpRequest.');
			}
		}
	}, 
	
	makeRequest: function(url, payload){
		if (!this.xmlhttp){
			this.init();
		}
		this.xmlhttp.open(this.requestType, url, this.isAsync);
		var self = this;
		this.xmlhttp.onreadystatechange = function(){
			self._readyStateChangeCallback(); 
		}
		this.xmlhttp.send(payload);
		if(!this.isAsync){
			return this.xmlhttp.responseText;
		}
	}, 
	
	makeFormRequest: function(url, payload, form){
		if (!this.xmlhttp){
			this.init();
		}
		var xParam = this.getquerystring(form);
		url += (xParam.length > 0)?'?' + xParam:'';
		this.xmlhttp.open(this.requestType, url, this.isAsync);
		var self = this;
		this.xmlhttp.onreadystatechange = function(){
			self._readyStateChangeCallback(); 
		}
		this.xmlhttp.send(payload);
		if(!this.isAsync){
			return this.xmlhttp.responseText;
		}
	}, 
	
	_readyStateChangeCallback:function(){
		switch(this.xmlhttp.readyState){
			case 2:
				this.onSend();
				break;
			case 4:
				this.onload();
				if(this.xmlhttp.status == 200){
					this.callback(this.xmlhttp.responseText);
				}else{
					this.onError('HTTP Error Making Request: ' + '[' + this.xmlhttp.status + ']' + this.xmlhttp.statusText);
				}
				break;
		}
	}, 
	
	getquerystring:function(formname){
		var form = document.forms[formname];
		var qstr = "";
		
		function GetElemValue(name, value){
			qstr += (qstr.length > 0 ? "&" : "") + escape(name).replace(/\+/g, "%2B") + "=" + escape(value ? value : "").replace(/\+/g, "%2B");
			//+ escape(value ? value : "").replace(/\n/g, "%0D");
		}
		
		var elemArray = form.elements;
		for (var i = 0; i < elemArray.length; i++){
			var element = elemArray[i];
			var elemType = element.type.toUpperCase();
			var elemName = element.name;
			if (elemName){
				if(elemType == "TEXT" || elemType == "TEXTAREA" || elemType == "PASSWORD" || elemType == "BUTTON" || elemType == "RESET" || elemType == "SUBMIT" || elemType == "FILE" || elemType == "IMAGE" || elemType == "HIDDEN")
					GetElemValue(elemName, element.value);
				else if(elemType == "CHECKBOX" && element.checked)
					GetElemValue(elemName, element.value ? element.value : "On");
				else if(elemType == "RADIO" && element.checked)
					GetElemValue(elemName, element.value);
				else if(elemType.indexOf("SELECT") != -1)
					for(var j = 0; j < element.options.length; j++){
						var option = element.options[j];
						if(option.selected)
							GetElemValue(elemName, option.value ? option.value : option.text);
					}
			}
		}
		return qstr;
	}

}