var _ajx_data = {};

/**
* funkcja pobiera html z podanego urla i umieszcza go w określonym divie
* @param: data['a'] obiekt a, z niego pobierany href, jako url,
* @param: data['url'] url do elementu (jeżeli nie podano a),
* @param: data['id'] id elementu div, do którego ma być wstawiony html,
*/
function r_get(data)
{
	var request_obj = _get_request_obj();

	if(!_ajx_data['busy'] && request_obj)
	{
		_setBusy(true);
		_set_data(data, request_obj);

		wr = (typeof(webroot) != 'undefined') ? webroot : '';
		url = data['a'] ? data['a'].href : wr + data['url'];

		if(url)
		{
			url += (url.indexOf('?') < 0 ? '?' : '&') + '&_ts=' + new Date().getTime();
			url = url.replace(/\&amp;/g, '&');
		}

		request_obj.onreadystatechange = _r_response;
		request_obj.open('GET', url, true);
		request_obj.send(null);
	}

	return false;
}

/**
* funkcja zapisuje dane postem, wynik umieszcza w określonym divie
* @param: data['action'] akcja formularza,
* @param: data['id'] id elementu div, do którego ma być wstawiony html,
*/
function r_post(data)
{
	var request_obj = _get_request_obj();

	if(!_ajx_data['busy'] && request_obj)
	{
		_setBusy(true);
		_set_data(data, request_obj);

		parameters = _get(data['form']);
		parameters += '&_ts=' + new Date().getTime();

		url = data['form'].action;

		request_obj.onreadystatechange = _r_response;
		request_obj.open('POST', url, true);
		request_obj.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
		request_obj.setRequestHeader("Content-length", parameters.length);
		request_obj.send(parameters);
	}

	return false;
}

function r_post_f(data)
{
	return r_post(data);
}

/* --- inner --- */

function _set_data(data, request_obj)
{
	_ajx_data['id'] = data['id'];
	_ajx_data['name'] = data['name'];
	_ajx_data['request_obj'] = request_obj;
	_ajx_data['onload'] = data['onload'];
	_ajx_data['form'] = data['form'];
	_ajx_data['out_form'] = data['out_form'] ? data['out_form'] : _ajx_data['form'];
}

function _get_request_obj()
{
	if(window.XMLHttpRequest)
		return new XMLHttpRequest();
	else
		if(window.ActiveXObject)
			return new ActiveXObject("Microsoft.XMLHTTP");

	return null;
}

function _setBusy(on)
{
	_ajx_data['busy'] = on;
}

function _r_response()
{
	if(_ajx_data['request_obj'].readyState == 4 && _ajx_data['request_obj'].status == 200)
	{
		var responseText = _ajx_data['request_obj'].responseText;

		if(responseText)
		{
			if(_ajx_data['id'])
				document.getElementById(_ajx_data['id']).innerHTML = responseText;

			if(_ajx_data['name'])
				_ajx_data['out_form'][_ajx_data['name']].value = responseText.replace(/<!--.*-->/g, '');

			_setBusy(false);

			if(_ajx_data['onload'])
			{
				f = _ajx_data['onload'];
				f();
			}
		}
	}
}

function _get(form)
{
	var getstr = '';

	var name;
	var value;

	for(i = 0; i < form.elements.length; i++)
	{
		var el = form.elements[i];
		name = null;
		value = null;

		switch(el.type)
		{
			case 'text':
			case 'password':
			case 'hidden':
			case 'textarea':
				name = el.name;
				value = el.value;
				break;

			case 'select-one':
				if(el.selectedIndex >= 0)
				{
					name = el.name;
					value = el.options[el.selectedIndex].value;
				}
				break;

			case 'checkbox':
			case 'radio':
				if(el.checked)
				{
					name = el.name;
					value = el.value;
				}
				break;
		}

		if(name)
		{
			getstr += _enc(name) + '=';

			if(value)
				getstr += _enc(value);

			getstr += '&';
		}
	}

	return getstr;
}

function _enc(str)
{
	return encodeURIComponent(str).replace(/%20/, '+');
}