var AJAX_TYPE = "GET";
function ajax_debug(text) 
{
	if (window.AJAX_DEBUG && window.AJAX_DEBUG == 1)
	{
		alert("AJAX: " + text);
	}
}

function pdTry()
{
	var retVal;
	for (var i=0; i<arguments.length; i++)
	{
		try{
			retVal = arguments[i]();
			break;
		}
		catch (e) {}
	}
	return retVal;
}

function ajax_get_transport() 
{
	var ajaxObj;
	ajax_debug("initialize...")
    ajaxObj = pdTry(
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
      function() {return new ActiveXObject('Microsoft.XMLHTTP')},
      function() {return new XMLHttpRequest()}
    ) || false;
    if (!ajaxObj) ajax_debug("initialization failed");
    return ajaxObj;
}

function ajax_abort(ajaxObj)
{
	ajaxObj.abort();
	ajax_debug("Request aborted");
}

function ajax_call(func_name, args) 
{
	var i, ajaxObj, n;
	var uri;
	var post_data;
	var callback_index;
	var sync = true;
	
	if (typeof(args[args.length-1]) == "function" || typeof(args[args.length-1]) == "object")
	{
		callback_index = args.length-1;
	}
	else if (typeof(args[args.length-2]) == "function" || typeof(args[args.length-2]) == "object")
	{
		callback_index = args.length-2;
		sync = args[args.length-1];
	}
	else
	{
        sync = args[args.length-1];
		ajax_debug("Unexistant callback called");
	}
	
	uri = "http://printdirect.ru/index.php?mode=ajax&action=call";
	if (window.AJAX_TYPE == "GET") 
	{
		if (uri.indexOf("?") == -1)
		{
			uri = uri + "?xfunc=" + escape(func_name);
		}
		else
		{
			uri = uri + "&xfunc=" + escape(func_name);
		}
		for (i = 0; i < args.length-1; i++)
		{ 
			uri = uri + "&xargs[]=" + escape(args[i]);
		}
		uri = uri + "&xrnd=" + new Date().getTime();
		post_data = null;
	} 
	else 
	{
		post_data = "xfunc=" + escape(func_name);
		for (i = 0; i < args.length-1; i++) 
		{
			post_data = post_data + "&xargs[]=" + escape(args[i]);
		}
	}
	ajaxObj = ajax_get_transport();
	if (!ajaxObj) return;
	ajaxObj.open(AJAX_TYPE, uri, sync);
	if (AJAX_TYPE == "POST") 
	{
		ajaxObj.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
		ajaxObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset: windows-1251");
	}
	if (sync)
	{
		ajaxObj.onreadystatechange = function() 
		{
			var data;				
			if (ajaxObj.readyState != 4)
			{
				ajax_debug("State changed:"+ajaxObj.readyState);
				return;
            }
			ajax_debug("AJAX response received " + ajaxObj.responseText);
			
			var status;
			
			status = ajaxObj.responseText.charAt(0);
			data = ajaxObj.responseText.substring(2);
			if (status == "-") 
			{
				alert("Error: " + data);
			}
			else
			{  
				args[callback_index](data);
			}
		}
	}
	ajaxObj.send(post_data);
	ajax_debug(func_name + " uri = " + uri + "/post = " + post_data);
	ajax_debug(func_name + " waiting..");
	if (!sync)
	{
		var data;
		ajax_debug("SJAX response received: " + ajaxObj.responseText);
		var status = ajaxObj.responseText.charAt(0);
		var data = ajaxObj.responseText.substring(2);
		if (status == "-")
		{
			alert("Error: " + data);
		}
		else
		{
			//args[callback_index](data);
			return unescape(data);
		}
	}
	return ajaxObj;
}

