﻿
function HttpClient() {}

HttpClient.prototype = 
{
	requestType: 'GET',
	isAsync: true,
	xmlhttp: false, 
	callback: false,
	
	onSend: function() { document.getElementById('HttpClientStatus').style.display = 'block'; },
	onLoad: function() { document.getElementById('HttpClientStatus').style.display = 'none'; },
	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('Przykro mi, ale przeglądarka nie obsługuje obiektu 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;
		}
	},
	
	_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('Błąd podczas wysyłania żadania'); }
				break
		}
	}
}