function HttpClient() {}
HttpClient.prototype = {
	
	
	// type GET, POST passed to open	
	requestType:'GET',
	// when set to true, async calls are made
	isAsync:false, 

	// where an XMLHttpRequest instance is stored
	xmlhttp:false,
	// what is called when a successful async call is made
	callback:false,
	// what is called when send is called on XMLHttpRequest set your own function to onSend to have a custom loading effect
	onSend:function (){
		document.getElementById('HttpClientStatus').style.display = 'block'; 
		},
	// what is called when readyState 4 is reached, this is called before your callback
	onload:function(){
		document.getElementById('HttpClientStatus').style.display = 'none';
		},
	onError:function(error){ 
			alert(error);
		},


// method to initialize an xmlhttpclient
	init:function(){
		try { //mozilla/safari
				this.xmlhttp = new XMLHttpRequest();
			}
		catch (e){
				// IE
				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.'); }
			}	
		},

	// method to make a page request 
	//  @param string url the page to make the request to 
	// @param string - payload POST request 
	makeRequest: function (url,payload){
			if (!this.xmlhttp){
					this.init();
				}
			
			this.xmlhttp.open(this.requestType,url,this.isAsync);
			// set onreadystatechange here since it will be reset after a completed call in mozilla
			var self = this;
			
			this.xmlhttp.onreadystatechange = function (){
					self._readyStateChangeCallback();
				}
			this.xmlhttp.send(payload);
			
			
			if(!this.isAsync){
					return this.xmlhttp.responseText;
				}
			
			
		},
	// internal method used to handle ready state changes
	_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:');
								document.getElementById('HttpClientStatus').style.display = 'block'; 
							}	
						break;
				
				}
		}
	
}
