var request = null;
var ReloadOnError = false;
var abortRequest = null;
var debugMode = false;

function doLoad(url, params, async) {
	try{
		request.abort(); 
		request = null;
	}
	catch (err) {}
	request = new ActiveXObject("Microsoft.XMLHTTP");
	request.onreadystatechange = processRequestChange;
	if (request) {
		request.open("POST", url, async);
		request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=windows-1251");
		try {
			res = '';
			data = params.split('&');
			for (nI=0; nI<data.length; nI++)
			{
				tmp = data[nI].split('=');
				res = res+tmp[0]+'='+escape(tmp[1])+'&';
			}
			params = res;
		}
		catch (err) { params=params; }
		request.send(params);
		abortRequest = window.setTimeout("AbortRequest(1);", 30000);
	}
	else alert('Невозможно создасть соединение с сервером!');
}

function processRequestChange() {
	try {
		if (request.readyState == 4) {
			clearTimeout(abortRequest);
			if (request.status == 200) {
				try {
					//alert(request.responseText);
					eval(request.responseText);
					request.abort();
					request = null;
				}
				catch (err) {
					if (debugMode) alert ('Произошла ошибка при получении данных с сервера.\n\n'+err.name+' '+err.message+'\n\nПожалуйста, обновите страницу.');
				}
			}
			if (request.status == 12029 || request.status == 403 || request.status == 404) AbortRequest(2);
		}
	}
	catch (err)
	{}
}

function AbortRequest(type){
	clearTimeout(abortRequest);
	try{
		request.abort(); 
		request = null;
		RequestProcessError(type);
	}
	catch (err) {
		RequestProcessError(type);
	}
}

//---------------------------------------------------------------

function ajax_encode(string){
	return escape(_utf8_encode(String(string)));
}
function ajax_decode (string){
    return _utf8_decode(unescape(String(string)));
}
function _utf8_encode(string){
    string = string.replace(/\r\n/g,"\n");
    var utftext = "";
    for (var n = 0; n < string.length; n++) {
        var c = string.charCodeAt(n);
        if (c < 128) {
            utftext += String.fromCharCode(c);
        }
        else if((c > 127) && (c < 2048)) {
            utftext += String.fromCharCode((c >> 6) | 192);
            utftext += String.fromCharCode((c & 63) | 128);
        }
        else {
            utftext += String.fromCharCode((c >> 12) | 224);
            utftext += String.fromCharCode(((c >> 6) & 63) | 128);
            utftext += String.fromCharCode((c & 63) | 128);
        }
    }
    return utftext;
}
function _utf8_decode(utftext){
    var string = "";
    var i = 0;
    var c = c1 = c2 = 0;
    while ( i < utftext.length ) {
        c = utftext.charCodeAt(i);
        if (c < 128) {
            string += String.fromCharCode(c);
            i++;
        }
        else if((c > 191) && (c < 224)) {
            c2 = utftext.charCodeAt(i+1);
            string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
            i += 2;
        }
        else {
            c2 = utftext.charCodeAt(i+1);
            c3 = utftext.charCodeAt(i+2);
            string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }
    }
    return string;
}
