// LIB ajax 
// Made by Paul Rydvanskiy
// Использование:
// метод GET
// obj = new ajax('GET', url, callback); - создания объекта
// callback - пользовательская функция входным параметром которой 
// является результат запроса. 
// obj.load(); - выполнение запроса
// obj.url = newurl; - для смены url и повторной загрузки
//
// метод POST
// obj = new ajax('POST', url, callback); создание объекта
// obj.params - ассоциативный массив параметров, которые передаются на сервер. 
// obj.load(); - выполнение запроса
//
// Вне зависимости от выбранного метода при инициализации объекта в любое время
// ожно сменить метод.
// obj.method = 'get'; - для смены метода созданного объекта
// Также можно сменить и callback функцию.
// obj.callback = newcallback; - для смены collback функции.


function ajax(method, url, callback) {
	this.method = method.toLowerCase();
	this.url = url;
	this.callback = callback;
	this.params = {};
        this.paramsStr = null;
	this.request = null;

	this.load = function() {
		if (window.XMLHttpRequest) {
			this.request = new XMLHttpRequest();
		} else {
			if (typeof ActiveXObject != 'undefined') {
				try {
					this.request = new ActiveXObject("Msxml2.XMLHTTP");
				} catch (e) {
					try {
						this.request = new ActiveXObject("Microsoft.XMLHTTP");
					} catch (E) {
						this.request = false;
					}
				}
			}
		}

		var tmp_param = null;
		if (this.method == 'post') {
			tmp_param = '';
                        if (this.paramsStr == null)
                        {
                            var i = 0;
                            for (name in this.params) {
                                    if (i > 0)
                                            tmp_param = tmp_param + "&";
                                    tmp_param = tmp_param + name + "=" + encodeURIComponent(this.params[name]);
                                    i++;
                            }
                        }
                        else tmp_param = this.paramsStr;
                        
			this.request.open("POST", this.url, true);
			this.request.setRequestHeader("Content-type",
					"application/x-www-form-urlencoded");
//			this.request.setRequestHeader("Content-length", tmp_param.length);
//			this.request.setRequestHeader("Connection", "close");

		} else {
			this.request.open("GET", this.url, true);
		}

                var callback = this.callback;
                var request = this.request;

		this.request.onreadystatechange = function() {
		if (request.readyState == 4 && request.status == 200) {
                        callback(request.responseText);
		}
	};
		this.request.send(tmp_param);
	}

}

