/*
ajax request object
example of usage

    new httpRequest({
    	url: 'serverside.php',
    	method: 'POST',
    	postData: 'asd=123&ffr=56',
    	callbackFunc: function(requestObj) {
    	    alert(requestObj.responseText);
    	}
    });

*/


	function httpRequest(oArgs) {
	
		var url = oArgs.url;
		var method = oArgs.method;
		var callbackFunc = oArgs.callbackFunc;
		var postData = oArgs.postData;

		var RetypeAmount =0;
		var MaxRetypeAmount = 10;

		var showErrors = true;
	
			// check user browser and create request object
		if(window.XMLHttpRequest)
		{
			var requestObj = new XMLHttpRequest(); //not for IE
		} 
		else if (window.ActiveXObject)
		{
			var requestObj = new ActiveXObject("Msxml2.XMLHTTP"); //for IE
			if (!requestObj)
			{
			    var requestObj = new ActiveXObject("Microsoft.XMLHTTP");
			}
		}
	
		var sendRequest = function()
		{
			if(method=='POST' && (requestObj.readyState == 4 || requestObj.readyState == 0))
			{
				requestObj.open(method, url, true);
				requestObj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
				requestObj.send(postData);
			}
			else if(method=='GET' && (requestObj.readyState == 4 || requestObj.readyState == 0))
			{
				requestObj.open(method, url, true);
				requestObj.send(null);
			}
		}
	
		// call-back function
		requestObj.onreadystatechange = function ()
		{
			if(requestObj.readyState == 4)
			{
				var status = requestObj.status;
				if (status == 200)
				{
					try
					{
						callbackFunc(requestObj);
					}
					catch(e)
					{
						if(showErrors) alert(e.toString());
					}
				} 
				else if (status == 400)
				{
					alert('Incorrect demand');
				} 
				else if (status == 500)
				{
					alert('Error on the server');
				} 
				else if (status == 503)
				{
					if(RetypeAmount>=MaxRetypeAmount)
					{
					   Alert('Server is overloaded.');
					}
					else
					{
					   RetypeAmount++;
					   
					   var time = requestObj.getResponseHeader('Retry-After')*1000;
					   setTimeout(sendRequest(),time);
 					   /*if(confirm('Server is overloaded. Do you want to send request again ?')) 
 					   {
 						sendRequest();
 					   }*/
					}
				} 
				else 
				{
					alert('Erroneous answer of the server');
				}
			}            
		}
	
		sendRequest();
	}