// AJAX - javascript ext

var withAJAX = false;

function ajax_default_respmngr() {
	this.exec_failedopen = 'alert(\'AJAX: XMLHTTP request component error\');';
	this.exec_0 = '';
	this.exec_1 = '';
	this.exec_2 = '';
	this.exec_3 = '';
	this.exec_4 = 'alert (\'AJAX: download complete:\\r\\n\\r\\n\'+request.responseText);';
	this.failedopen = function (e)
	{
		// can't download file (incorrect name, can't access file, etc.)
		// e contains error message
		eval(this.exec_failedopen);
	}
	this.changestate=function () {
		request = this.request;
		switch (request.readyState) {
			case 0: // request not initialized
				eval(this.exec_0);
				break;
			case 1: // request has been set up
				eval(this.exec_1);
				break;
			case 2: // request has been sent
				eval(this.exec_2);
				break;
			case 3: // request in process
				eval(this.exec_3);
				break;
			case 4: // request complete
				responseText = request.responseText;
				eval(this.exec_4);
				break;
		}
	}
}

function ajax_load(url, vars, resp) {
	if (resp==null) resp = new ajax_default_respmngr;
	_ajax_post(url, vars, resp);
}

var script_tag;
function get_ajax_request()
{
	var request;
	try
	{
		// Firefox, Opera 8.0+, Safari
		request=new XMLHttpRequest();
	}
	catch (e)
	{
		// Internet Explorer
		try
		{
			request=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				request=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
				// alert("Your browser does not support AJAX!");
				return false;
			}
		}
	}
	try
	{
		/*script_tag = /./;
		script_tag.compile(/\<script[^\>]*\>(.*?)\<\/script\>/ig);*/
	}
	catch (e)
	{
		// can't create regular expression
		return false;
	}
	return request;
}

function _ajax_post(url, vars, respmngr) {
	var request;

	request = get_ajax_request();
	if (!request)
	{
	        return false;
	}

	respmngr.request = request;
	request.onreadystatechange = function () {
		respmngr.changestate();
	}
	
	try
	{
		request.open('post', url, true);
	}
	catch (e)
	{
		respmngr.failedopen(e);
		return false;
	}

	request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	snd = "";
	for (var i=0; i < vars.length; i++)
	{
		if (snd!="")
		{
			snd += "&";
		}
		snd += vars[i];
	}
	request.send(snd);
}

function ajax_test() {
	ajax_load('about:blank', [], null);
}

function ajax_parseResponse(response, type)
{
	var scripts = new Array();
	var oneline = response.split('\n').join('`newlinebreak`');
	var matches;
	var script_tag = /(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/img;
	while ((matches = script_tag.exec(oneline)) != null)
	{
		var match = matches[1].split('`newlinebreak`').join('\n');
		scripts.push (match);
		matches = null;
	}
	oneline = oneline.replace(script_tag, '');
	oneline = oneline.split('`newlinebreak`').join('\n');
	if (type == 'other')
	{
		return oneline;
	}
	else if (type == 'scripts')
	{
		return scripts;
	}
	else
	{
		alert ('Not supported yet.');
	}
}

var ajax_temp_request = get_ajax_request();
if (!ajax_temp_request)
{
	withAJAX = false;
}
else
{
	withAJAX = true;
	ajax_temp_request = null;
}
