var _ajax = false;

var pajax_baseurl = '';
function pajax_call() 
{

	var _ajax = new Ajax();
		
	var args = pajax_call.arguments;
	_ajax.clearParams();
	
	for (i=1; i<args.length; i++)
		_ajax.setParam('args'+(i-1)+'', args[i]);
	
	_ajax.setParam('func', args[0]);
	
	var rnd = (new Date()).getTime()+'';
	_ajax.setParam('rnd', rnd);
	_ajax.doRequest(pajax_baseurl+'pajaxhandle.php', pajax_callback, 'post');
} 

function pajax_call_to() 
{
	
	var _ajax = new Ajax();
		
	var args = pajax_call_to.arguments;
	_ajax.clearParams();
	
	for (i=2; i<args.length; i++)
		_ajax.setParam('args'+(i-2)+'', args[i]);
	
	_ajax.setParam('func', args[1]);
	var url = args[0];
	
	var rnd = (new Date()).getTime()+'';
	_ajax.setParam('rnd', rnd);
	_ajax.doRequest(url, pajax_callback, 'post');
} 

function pajax_callback(responseText)
{
	if (responseText.length < 2 || responseText.indexOf('{"') != 0)
	{
		
		return;
	}
	eval('var result = ' + responseText);
	
	if (!result.callback)
		alert(responseText);
	
	var callback = result.callback + '(';
	
	for (var i=0; i<result.args.length; i++)
	{
		if (i > 0)
			callback += ', ';
		callback += 'result.args[' + i + ']';
	}
	callback += ');';
	eval(callback);
} 


function Ajax()
{
	
 
  if (typeof(_ajax_prototype_called) == 'undefined')
  {
     _ajax_prototype_called = true;
     Ajax.prototype.setParam = setParam;
     Ajax.prototype.clearParams = clearParams;
     Ajax.prototype.doRequest = doRequest;
     Ajax.prototype._getHttpRequest = _getHttpRequest;
     Ajax.prototype._getParams = _getParams;
     Ajax.prototype._getParamsArray = _getParamsArray;
     Ajax.prototype._urlEncode = _urlEncode;
  }

	function setParam(param, val)
	{
		paramCount = this.parameters.length;
		this.parameters[paramCount] = param;
		this.values[paramCount] = val;
	} 
	
	function clearParams()
	{
		this.parameters = new Array();
		this.values = new Array();
	} 

	function doRequest(url, callback, method)
	{ 
		if (!this.httpRequest)
		{
			
		}
		else
		{
			httpRequest = this.httpRequest;
			httpRequest.abort();
			httpRequest.onreadystatechange = function ()
			{
				if (httpRequest.readyState == 4)
				{
					ffError = true;
					try
					{
						httpRequest.statusText;
						ffError = false;
					}
					catch(e)
					{
											}
					
					if (!ffError)
					{
						if (httpRequest.status == 200 || httpRequest.status == 0)
						{
							callback(httpRequest.responseText);
						}
						else
						{
													}
					}
					
				}
			}

			if (method.toLowerCase() == 'get')
			{
				
				if (this.parameters.length > 0)
					url += '?' + this._getParams();
				
				httpRequest.open('GET', url, true); 
				httpRequest.send(null);
			}
			else if (method.toLowerCase() == 'post')
			{
				httpRequest.open('POST', url, true); 
				httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 
				params = this._getParams();
				httpRequest.setRequestHeader("Content-Length", params.length);
				httpRequest.send(params);
			}
			else
			{
				alert("Unknown method: " + method);
			}
		}
	} 

	function _getHttpRequest()
	{
		var httpRequest = false;
		if (window.XMLHttpRequest)
		{ 
			httpRequest = new XMLHttpRequest(); 
		}
		else if (window.ActiveXObject)
		{ 
			try
			{ 
				httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
	   	} 
	   	catch (e)
	   	{ 
	   		try
	   		{ 
	   			httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
	   		} 
	   		catch (e) {} 
	   	} 
		}

		return httpRequest;
	} 
	
	function _getParams()
	{
		var params = '';
		for (i=0; i<this.values.length; i++)
		{
			if (i > 0)
				params += '&';
			
			if (typeof(this.values[i]) === 'object')
			{
				
				params += this._getParamsArray(this.parameters[i], this.values[i], 0);
			}
			else
			{
				
				params += this._urlEncode(this.parameters[i]);
				params += '=';
				params += this._urlEncode(this.values[i]);
			}
		}
		
		return params;
	} 
	
	function _getParamsArray(parameter, values, depth)
	{
		
		if (aparams == null)
		{
			var aparams = new Array();
			var indexes = new Array();
		}
		
		aparams[depth] = '';
		indexes[depth] = 0;
		for (key in values)
		
		{
			if (indexes[depth] > 0)
				aparams[depth] += '&';
				
			if (typeof(values[indexes[depth]]) === 'object')
			{
				aparams[depth] += this._getParamsArray(parameter+'['+key+']', values[key], depth+1);
			}
			else
			{
				aparams[depth] += parameter+'['+key+']';
				aparams[depth] += '=';
				aparams[depth] += this._urlEncode(values[key]);
			}
			
			indexes[depth]++;
		}
		
		return aparams[depth];
	} 
	
	
	function _urlEncode(str)
	{
		encodedStr = escape(str);
 		encodedStr = encodedStr.replace("+", "%2B");
  	encodedStr = encodedStr.replace("/", "%2F"); 
  	return encodedStr;
	} 

	this.httpRequest = _getHttpRequest();
	this.parameters = new Array();
	this.values = new Array();
	
} 