var ajaxEventComplete = 0;
var ajax_data = new Object();

function aj(ajax_event, param, value)
{
	//url - ���� ����� ��������� ������
	//reload_id  - ������������� �������������� ����������
	//indicate - ���� �������� ���� �� ����� �������������� �� ��� ������� ������� �������������� � ��� ������� ������
	//message - ��������� �������������, ���� ���� �� ��� ������ ������� ��������� ���� � ��������������
	
	if (ajax_data[ajax_event] == null)
	{
		ajax_data[ajax_event] = new Object();
		ajax_data[ajax_event]['reload_id'] = new Object();
		ajax_data[ajax_event]['url'] = new Object();
		ajax_data[ajax_event]['message'] = new Object();
		ajax_data[ajax_event]['indicate'] = new Object();
		ajax_data[ajax_event]['variable'] = new Object();
		
		ajax_data[ajax_event]['reload_id'] = false;
		ajax_data[ajax_event]['url'] = false;
		ajax_data[ajax_event]['message'] = false;
		ajax_data[ajax_event]['variable'] = false;
		ajax_data[ajax_event]['indicate'] = false;
	}
	
	ajax_data[ajax_event][param] = value;
}

function url(object_ajax_events, url)
{
	for (ajax_event in object_ajax_events)
		aj(object_ajax_events[ajax_event], 'url',  url);
}

function ajax_indication (elem, ajax_event, type)
{
	if (typeof(elem) == 'undefined')
		return;
	
	if (type == 'indicate')
	{
		var id = '#ajax_indicator_';
		$('body').append ("<div class=\"ajax_indicator\" id='ajax_indicator_"+ajax_event+"'></div>");
	}
	else
	{	
		var id = '#ajax_elem_';
		$('body').append ("<div class=\"ajax_elem\" id='ajax_elem_"+ajax_event+"'></div>");
	}
	
	$(document).ajaxStart(function(){
			$(id+ajax_event).css('left', $(elem).offset().left);
			$(id+ajax_event).css('top', $(elem).offset().top);
			$(id+ajax_event).css('width', (parseInt($(elem).width(), 10) + parseInt($(elem).css('paddingRight'), 10) + parseInt($(elem).css('paddingLeft'), 10)));
			$(id+ajax_event).css('height', (parseInt($(elem).height(),10) + parseInt($(elem).css('paddingTop'), 10) + parseInt($(elem).css('paddingBottom'), 10)));
	});

}

function get_elem_value(elem_id)
{
	var elem = $("#"+elem_id).get(0);
	var tag = elem.tagName;
	var tag_type = elem.type;

	if (tag == "SPAN")
	{	
		var val = $('#'+elem_id).text();
		if (!val) val = 1;
		return val;
	}	
	else if (tag == "INPUT" && (tag_type == "checkbox" || tag_type == "radio"))
	{
		if (elem.checked)
			return elem.value;
	}
	else
		return elem.value;

	return false;
}

function ajax_reload(ajax_event, elem)
{
	var reload_elem = "";
	
	if (ajax_data[ajax_event] == null)
		return;

	
	message = ajax_data[ajax_event]['message'];
	url = ajax_data[ajax_event]['url'];
	reload_elem = ajax_data[ajax_event]['reload_id'];
	indicate_elem = ajax_data[ajax_event]['indicate'];

	if (!indicate_elem)
		indicate_elem = reload_elem;
	
	if (message)
	{
		var isConfirmed = confirm(message);
	
		if (!isConfirmed)
			return;
	}
	
	
	var params = new Object();
	params['__ajax_event__'] = ajax_event;

	var id_elems = "ae_" + ajax_event + "_";
	var id = "";
	var ind = "";
	var value = 0;
	var var_name = "";
	var index_var = 0;

	if (elem)
		params[$(elem).attr("name")] = $(elem).attr("value");

	$("*[id*='"+ id_elems +"']"+ind+"").each(function()
	{
		id = $(this).attr("id");

		value = get_elem_value(id);

		var_name = $(this).attr("name");

		if (value && var_name)
			params[var_name] = value;	
	});
	
	if (ajax_data[ajax_event]['variable'])
		for (i in ajax_data[ajax_event]['variable'])
		{
			params[i] = ajax_data[ajax_event]['variable'][i];
		}

	if (elem)
		ajax_indication(elem, ajax_event, 'elem');

	var elem = $("#"+indicate_elem).get(0);
	
	ajax_indication(elem, ajax_event, 'indicate');
	
	$.post(url, params, function (html)
		{	
			ajaxEventComplete = ajax_event;
			$('#'+reload_elem).replaceWith(html);
			
			$("div[id='ajax_indicator_"+ajaxEventComplete+"']").remove();
			$("div[id='ajax_elem_"+ajaxEventComplete+"']").remove(); 
		}
	, 'html');
}

