try {
		document.domain="mail.ru";
	} catch(e) {
}


/* JSON END */

    var ajax_requests = [];
    var ajaxHandleStateChange = function() {
	for(var k = 0; k<ajax_requests.length; k++) {
	    if (ajax_requests[k].request == null) {
		ajax_requests.splice(k--,1);
		continue;
	    }
	    if (ajax_requests[k].request.readyState == 4) {
		var request = ajax_requests[k];
		ajax_requests.splice(k--,1);
		try {
		    request.ready();
		} catch (e) {}
		continue;
	    }
	}
    }

function GetAjaxRequest()
{
	var request = null;
	// branch for native XMLHttpRequest object
	if (typeof XMLHttpRequest != "undefined") {
		try {
		request = new XMLHttpRequest();
		} catch(e) {
		request = null;
		}
	// branch for IE/Windows ActiveX version
	} else if(window.ActiveXObject) {
		try {
		request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
			request = new ActiveXObject("Microsoft.XMLHTTP");
				} catch(e) {
				request = null;
			}
		}
	}
	return request;
}

function AjaxRequest(method,script_name,func_name,args,callback,callback_object)
{
	this.method = method;
	this.callback = callback;
	this.callback_object = callback_object;
	this.args = args;
	if (func_name && func_name != 'undefined') {
		this.url = script_name+"?ajax_call=1&func_name="+escapePlus(func_name)+"&back="+escapePlus(window.location)+"&data="+escapePlus(Object.toJSON(this.args));
	}
	else {
		this.url = script_name;
	}
}

AjaxRequest.prototype = {
	send : function() {
		var request = GetAjaxRequest();
		if (request) {
			this.request = request;
			request.onreadystatechange = ajaxHandleStateChange;
			if (this.method == "POST") {
				var idx=this.url.indexOf('?');
				var post = this.url.substr(idx+1);
				var url = this.url.substr(0,idx);
				try {
					// some old browsers would trigger security error here
					request.open("POST", url, true);
				} catch(e) {
					return false;
				}
				request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				try {
					// Opera 8.54 hung here, not on request.open
					request.send(post);
				} catch(e) {
					return false;
				}
			} else {
				try {
					request.open("GET", this.url, true);
				} catch(e) {
					return false;
				}
				try {
					// Opera 8.54
					request.send(null);
				} catch(e) {
					return false;
				}
			}
			return true;
		} else {
			return false;
		}
	},
	ready : function() {
		if(this.request.status != 200) return;
		var rt = this.request.responseText;
		if (this.callback_object && this.callback_object != 'undefined' && this.callback_object['nomagick'])
		{
			rt = '["AjaxResponse","OK","' + rt + '"]';
			this.callback_object['nomagick'] = null;
		}
		var data = eval(rt);
		var magick = data.shift();
		if(magick != "AjaxResponse") return;
		var result = data.shift();
		if(result != "OK" && result != "Redirect") return;
		if(result && result == "OK") {
			if(this.callback) this.callback.apply(this.callback_object?this.callback_object:window,data);
		}
		else if(result == "Redirect") redirect.apply(window,data);
		return;
	}
}



function redirect(url) {
	window.location=url;
}

function escapePlus(param) {
	param = escape(param);
	return String(param).replace(/\+/g,'%2B');
}

function escapeParam(param) {
	return String(param).replace(/\\/g,"\\\\").replace(/&/g,"\\&");
}

function unescapeParam(param) {
	return String(param).replace(/\\&/g,"&").replace(/\\\\/g,"\\");
}

function splitParam(param)
{
	if(param == "") return new Array();
	var params = unescapeParam(param).split("&");
	for(var i = 0; i<params.length; i++) {
		if(params[i].substr(params[i].length-1,1) == "\\" && params.length>i+1) {
			params.splice(i,2,params[i]+"&"+params[i+1]);
			i--;
		}
	}
	for(var i = 0; i<params.length; i++)
		params[i]=params[i].substr(1,params[i].length-2);
	return params;
}
//////////////////////////////




function ajax_call_static() { 
	var args = ajax_call_static.arguments; 
	var url = args[0]; 
	var callback = args[1]; 

	var pos = ajax_requests.length; 
	var request = new AjaxRequest("GET",url,'','',callback,''); 
	ajax_requests[pos] = request; 
	if (!request.send()) { 
		ajax_requests.splice(ajax_requests.length-1,1); 
		return false; 
	} else { 
		return true; 
	} 
} 

