function AJAXRequest(console, fun) {
	this.responseText = null;
	this.responseXML = null;
	this.status = null;
	this.statusText = null;
	this.httpRequest = null;

	if (window.ActiveXObject){ // if IE
		try {
			this.httpRequest = new ActiveXObject("Msxml2.XMLHTTP")
		} 
		catch (e){
			try{
				this.httpRequest = new ActiveXObject("Microsoft.XMLHTTP")
			}
			catch (e){}
		}
	}
	else if (window.XMLHttpRequest){ // if FF, Mozilla, Safari etc
		this.httpRequest = new XMLHttpRequest();
		if (this.httpRequest.overrideMimeType) {
			this.httpRequest.overrideMimeType('text/xml');
		}		
	}	

	if (!this.httpRequest) {
		if(modularConf.getDebug()) alert('Poddaje się :( Nie mogę stworzyć instancji obiektu XMLHTTP');
		return false;
	}
	var self = this;
	this.httpRequest.onreadystatechange = function(){
		if (self.httpRequest.readyState == 4){
			with (self.httpRequest) {
				self.responseText = responseText;
				self.responseXML = responseXML;
				try {
					if (typeof status != "undefined")
					self.status = status;
					if (typeof statusText != "undefined")
					self.statusText = statusText;
				} catch (e) {
				}
			}

			if (self.status == 200) {
				if (fun)
				fun(console, self);
			} else if (self.status == 400) {
				if(modularConf.getDebug()) alert("Niepoprawne parametry zapytania");
			} else if (self.status == 500) {
				if(modularConf.getDebug()) alert("Wystąpił nieznany błąd aplikacji");
			} else {
			}
		}
	}
}

AJAXRequest.get = function(console, fun, url) {
	var requestData = new AJAXRequest(console, fun);
	requestData.httpRequest.open('GET', url, true);
	requestData.httpRequest.send('');
	return requestData;
}

AJAXRequest.post = function(console, fun, url, data) {
	var requestData = new AJAXRequest(console, fun);
	requestData.httpRequest.open('POST', url, true);
	requestData.httpRequest.send(data);
	return requestData;
}


function makeUniqueParam(){
	return '' + new Date().getTime().toString().substr(5) + Math.floor(Math.random() * 100).toString();
}

function generateParameters(parameters) {
	var queryString = '';
	for (var a in parameters) {
		if (queryString.length > 0)
		queryString += "&";
		if (typeof parameters[a] != "object")
		queryString += encodeURIComponent(a) + "=" + encodeURIComponent(parameters[a]);
		else {
			for (var i = 0; i < parameters[a].length; i++)
			queryString += encodeURIComponent(a) + "=" + encodeURIComponent(parameters[a][i]) + "&";
			queryString = queryString.slice(0, -1);
		}
	}
	return queryString;
}


/* COOKIES */
var Cookies = {
	init: function () {
		var allCookies = document.cookie.split('; ');
		for (var i=0;i<allCookies.length;i++) {
			var cookiePair = allCookies[i].split('=');
			this[cookiePair[0]] = cookiePair[1];
		}
		this.inited = true;
	},
	create: function (name,value,days) {
		var expires = "";
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			expires = "; expires="+date.toGMTString();
		}
		document.cookie = name+"="+value+expires+"; path=/";
		this[name] = value;
	},
	erase: function (name) {
		this.create(name,'',-1);
		this[name] = undefined;
	},
	get: function (name) {
		if (!this.inited)
		Cookies.init();
		return this[name];
	}
};



