// Sending AJAX-request for CMS Cube
// string url - URL of ajax-request, can be object (link to form) or string
// string/object place - where place request results
// string/object loading - object of loading bar
// string/object form - form that should be sended as data array
// string method - send method (get, post, etc.)
var cbAjaxNoHideLoadBar = false;

function cbAjax(url, place, loading, form, method, loadText)
{
	if (url == '')
		return;
		
	if (typeof(url) == 'object')
	{
		var objUrl = url;
		url = $(url).attr('action');
		
		if (url == undefined)
		{
			url = $(objUrl).attr('href');
		}
	}
		
	if ($(loading).css('position') == 'absolute')
		cbCenter(loading);
		
	var savedText = $(loading).html();
	if (loadText != '')
		$(loading).html(loadText);
	
	if (!method || method == '')
	{
		if (form)
			method = 'POST';
		else
			method = 'GET';
	}
	
	$(loading).slideDown(500);
	
	$.ajax({
	url: url,
	//cache: false,
	beforeSend: function(request)
	{
		request.setRequestHeader('AJAX', 1);
	},
	success: function(data)
	{
		var ajaxIndex = data.indexOf('<ajax>');
		$(loading).slideUp(500);
		if (ajaxIndex < 0)
		{
			if ($(place).css('display') == 'none')
				$(place).slideDown(500);
			
			$(place).html(data);
		}
		else
		{
			var parsedData = data.substr(ajaxIndex, data.indexOf('</ajax>') - ajaxIndex);
			var addData = data.substr(0, ajaxIndex);
			
			var versionDetect = /<version>([0-9\.]+)<\/version>/;
			var locationDetect = /<location delay="([0-9]+)">([\s\S]*?)<\/location>/;
			var setDetect = /<set name="([a-zA-Z0-9_#\.]+)">([\s\S]*?)<\/set>/;
			var dataDetect = /<data method="(replace|add)">([\s\S]*?)<\/data>/m;
			
			var version = '';
			var location = '';
			var delay = 0;
			var setters = new Array();
			var mainData = new Array();
			
			if (versionDetect.test(parsedData))
			{
				version = versionDetect.exec(parsedData)[1];
			}
			
			if (version == '1.0')
			{
				var mainData = dataDetect.exec(parsedData);
				
				if (mainData)
				{
					var dataMethod = mainData[1];
					data = mainData[2];
					
					if (dataMethod == 'add')
					{
						$(place).html($(place).html() + data);
					}
					else
					{
						$(place).html(data);
					}
				}
				
				setters = setDetect.exec(parsedData);
				if (setters != null)
				{
					if ($(setters[1]).length > 0)
						$(setters[1]).html(setters[2]);
				}
				
				if (locationDetect.test(parsedData))
				{
					var locationData = locationDetect.exec(parsedData);
					location = locationData[2];
					delay = locationData[1];
					if (location == 'refresh')
						setTimeout('cbAjax(\'' + url + '\', \'' + place + '\', \'' + loading + '\')', delay);
					else
						setTimeout('cbAjax(\'' + location + '\', \'' + place + '\', \'' + loading + '\')', delay);
					
					cbAjaxNoHideLoadBar = true;
				}
			}
			else
			{
				alert('This version (' + version + ') of AJAX system response is not supported. Get the updates to solve this problem.');
			}
		}
	},
	complete: function(request, status)
	{
		if (status != 'success')
		{
			$(place).html(status);
				
			if (!cbAjaxNoHideLoadBar)
				$(loading).slideUp(500);
		}
		$(loading).html(savedText);
	},
	type: method,
	data: $(form).serialize()
	});
}

function cbCenter(obj)
{
	if (!$(obj).length)
		return;
		
	var scrollTop = $(document).scrollTop();
	var scrollLeft = $(document).scrollLeft();
	//var documentWidth = $(document.body).width();
	//var documentHeight = $(document.body).height();
	var documentWidth = screen.width;
	var documentHeight = screen.height;
	var objWidth = $(obj).width();
	var objHeight = $(obj).height();
	
	var allTop = (documentHeight / 2) - (objHeight / 2);
	
	allTop = ((scrollTop + allTop > 0)) ? allTop : 0;
	
	var allLeft = documentWidth / 2 - objWidth / 2;
	allLeft = ((scrollLeft + allLeft) > 0) ? allLeft : 0;
		
	$(obj).css('top', scrollTop + allTop);
	$(obj).css('left', scrollLeft + allLeft);
}

function cbShowCenter(obj)
{
	if (!$(obj).length)
		return;
		
	if ($(obj).css('position') == 'static')
		$(obj).css('position', 'absolute');
		
	cbCenter(obj);
	$(obj).show(500);
}

function cbSendForm(form, formId)
{
	if ($(form).attr('method') == 'post')
		return true;
		
	var formData = $(form).serialize();
	var formAction = $('#' + formId).attr('action');
	
	while (formData.indexOf('&', 0) > 0 || formData.indexOf('=', 0) > 0)
	{
		formData = formData.replace('&', '/');
		formData = formData.replace('=', '/');
		formData = formData.replace('%5B', '[');
		formData = formData.replace('%5D', ']');
	}
	
	formData = (formData != '') ? formData + '/' : '';
	
	$(form).attr('method', 'post');
	
	if (formAction[formAction.length - 1] != '/' && formData[0] != '/')
		formData = '/' + formData;
	
	$(form).attr('action', formAction + formData);
	
	return true;
}
