var xmlHttp = null;

function createXmlHttpRequestObject() {
	
	var xmlHttp;
	
	try {
		xmlHttp = new XMLHttpRequest();
	}
	catch(e) {
		var XmlHttpVersions = new Array('MSXML2.XMLHTTP.6.0',
		                                'MSXML2.XMLHTTP.5.0',
                                        'MSXML2.XMLHTTP.4.0',										
										'MSXML2.XMLHTTP.3.0',
										'MSXML2.XMLHTTP',
										'Microsoft.XMLHTTP');
		for (var i = 0; i < XmlHttpVersions.length && !xmlHttp; i++) {
			try {
				xmlHttp = new ActiveXObject(XmlHttpVersions[i]);				
			}
			catch(e) {
			}
		}
	}
	
	if(!xmlHttp)
		alert('Ошибка создания модуля Ajax.');
	else
		return xmlHttp;
}

function AjaxRequestGet(url, callbackSucc, callbackFail) {

	var innerCallbackSucc = callbackSucc,
		innerCallbackFail = callbackFail;
		
	if (!xmlHttp)	
		xmlHttp = createXmlHttpRequestObject();

	if (xmlHttp && (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)) {
		xmlHttp.open('GET', url, true);
		xmlHttp.onreadystatechange = handleGettingResults;
		xmlHttp.send(null);	
	}
	else 
		setTimeout('AjaxRequestGet(\''+url+'\','+callbackSucc+','+callbackFail+')', 1000);
			
	function handleGettingResults() {
		
		if(xmlHttp.readyState == 4) {
			if(xmlHttp.status == 200) {
				if(innerCallbackSucc) {					
					innerCallbackSucc(xmlHttp.responseText);				
				}	
			}
			else {
				if(innerCallbackFail)
					innerCallbackFail(xmlHttp.statusText);
			}
		}		
	}	
}

function AjaxRequestGetXML(url, callbackSucc, callbackFail) {

	var innerCallbackSucc = callbackSucc,
		innerCallbackFail = callbackFail;
		
	if (!xmlHttp)	
		xmlHttp = createXmlHttpRequestObject();

	if (xmlHttp && (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)) {		
		xmlHttp.open('GET', url, true);
		xmlHttp.onreadystatechange = handleGettingResults;
		xmlHttp.send(null);		
	}
	else		
		setTimeout('AjaxRequestGetXML(\''+url+'\','+callbackSucc+','+callbackFail+')', 1000);
			
	function handleGettingResults() {
		
		if(xmlHttp.readyState == 4) {
			if(xmlHttp.status == 200) {
				if(innerCallbackSucc)
					innerCallbackSucc(xmlHttp.responseXML);				
			}
			else {
				if(innerCallbackFail)
					innerCallbackFail(xmlHttp.statusText);
			}
		}		
	}	
}

function AjaxRequestPOST(url, callbackSucc, callbackFail, params) {

	var innerCallbackSucc = callbackSucc,
		innerCallbackFail = callbackFail;
		
	if (!xmlHttp)	
		xmlHttp = createXmlHttpRequestObject();

	if (xmlHttp && (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)) {			
		xmlHttp.open('POST', url, true);
		xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		xmlHttp.onreadystatechange = handleGettingResults;	
		xmlHttp.send(params);		
	}
	else 
		setTimeout('AjaxRequestPOST(\''+url+'\', '+callbackSucc+','+callbackFail+',\''+params+'\')', 1000);
			
	function handleGettingResults() {
		
		if(xmlHttp.readyState == 4) {
			if(xmlHttp.status == 200) {
				if(innerCallbackSucc)
					innerCallbackSucc(xmlHttp.responseXML);				
			}
			else {
				if(innerCallbackFail)
					innerCallbackFail(xmlHttp.statusText);
			}
		}		
	}	
}

function AjaxRequestPOSTXML(url, callbackSucc, callbackFail, params) {

	var innerCallbackSucc = callbackSucc,
		innerCallbackFail = callbackFail;
		
	if (!xmlHttp)	
		xmlHttp = createXmlHttpRequestObject();

	if (xmlHttp && (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)) {			
		xmlHttp.open('POST', url, true);
		xmlHttp.setRequestHeader('Content-Type', 'text/xml');
		xmlHttp.setRequestHeader('Charset', 'windows-1251');		
		xmlHttp.onreadystatechange = handleGettingResults;	
		xmlHttp.send(params);		
	}
	else 
		setTimeout('AjaxRequestPOSTXML(\''+url+'\', '+callbackSucc+','+callbackFail+',\''+params+'\')', 1000);
			
	function handleGettingResults() {
		
		if(xmlHttp.readyState == 4) {
			if(xmlHttp.status == 200) {
				if(innerCallbackSucc)
					innerCallbackSucc(xmlHttp.responseText);				
			}
			else {
				if(innerCallbackFail)
					innerCallbackFail(xmlHttp.statusText);
			}
		}		
	}	
}
