// Объект пространства имен
var netAJAX = new Object();
// Конструктор
netAJAX.ContentLoader = function(key, url, params, onload, element, onerror) {
	this.hashKey = key;
	this.url = url;
	this.params = params;
	this.req=null;
	this.onload=onload;
	this.element = element;
	this.onerror=(onerror) ? onerror : this.defaultError;
	this.loadXMLDoc(url);
}

netAJAX.ContentLoader.prototype = {
	loadXMLDoc: function(url) {
		try {
			// Попытка создать объект XMLHttpRequest
			this.req = new XMLHttpRequest();
		} catch(e) {
			// Если браузер все же старой версии (Explorer 6 или ранее),
			// то пытаемся создать объект другой версии
			var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
			"MSXML2.XMLHTTP.5.0",
			"MSXML2.XMLHTTP.4.0",
			"MSXML2.XMLHTTP.3.0",
			"MSXML2.XMLHTTP",
			"Microsoft.XMLHTTP");
			// Попробовать все возможные prog id пока какой-нибудь не подойдет
			for(var i = 0; i < XmlHttpVersions.length; i++) {
				try {
					// Попытка создать объект XMLHtppRequest
					this.req = new ActiveXObject(XmlHttpVersions[i]);
				} catch (e) {}
			}

		}
		
		if(this.req) {
			try {
				var loader=this;
				this.req.onreadystatechange = function() {
					loader.onReadyState.call(loader);
				}
				// Отправляем запрос
				this.req.open('POST', url, true);
				this.req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
				this.req.send(this.params);
			} catch (err) {
				this.onerror.call(this);
			}
		}
	},
	
	// Функция обратного вызова
	onReadyState: function() {
		var req = this.req;
		var ready = req.readyState;
		if(ready == 4) {
			var httpStatus = req.status;
			if(httpStatus == 200 || httpStatus == 0) {
				//this.onload = function;
				this.onload.call(this);
			}
		}
		
	},
	
	// Функция обработки ошибок
	defaultError: function() {
		
	}
}

// Массив для хранения нескольких запросов
var requestsHash = [];
// Функция, создающая новый экземпляр объекта net.ContentLoader
// Записывает запросы в requestsHash
// Возвращает свойство unrequestBrowser
function setAjaxRequest(url, params, onload, element, onerror) {
      // Check of necessary parameters
      if (!url) {
            alert("Necessary parameters are not specified");
            return;
      }
      requestsHash.push(new netAJAX.ContentLoader(requestsHash.length, url, params, onload, element, onerror));
      return requestsHash[requestsHash.length - 1].unrequestBrowser;
}
