$(function()
{
	jQuery.fn.center = function()
	{
		//this.css("position","absolute");
		this.css("top", ( $(window).height() - this.outerHeight() ) / 2+$(window).scrollTop() + "px");
		this.css("left", ( $(window).width() - this.outerWidth() ) / 2+$(window).scrollLeft() + "px");
		return this;
	}

	$('form[entity=ajax]').submit(function()
	{
		url = $(this).attr('action');
		form_data = $(this).serialize();
		if (form_data)
		{
			form_data = form_data+'&ajax_request=true';
			ajax_request(url, form_data, function(obj)
			{
				if (obj.response.errors)
				{
					$.jGrowl(obj.response.errors)
				}
				else
				{
					window.location = obj.response.action_url;
				}
			});
		}
		return false;
	});
});

function ajax_request(url, params, receiver, loader)
{
	if (loader == undefined)
	{
		loader = true;
	}

	set_loader(loader);

	$.post(
		url,
		params,
		function(data)
		{
			if (data.errors)
			{
				show_message(data.errors);
			}
			else
			{
				if ($.isFunction(receiver))
				{
					receiver(data ? data : false);
				}
				else
				{
					switch(data.response_type)
					{
						case 'redirect'	:
							window.location.href = data.response.msg;
							break;
						case 'data'		:
							break;
						case 'html'		:
						case 'default'	:
							$(data.response.selector).html(data.response.data);
							break;
					}
				}
			}
			set_loader(false);
		},
		'json'
	);
}

function set_loader(bool)
{
	if (bool)
	{
		$("#ajax_loader").show();
	}
	else
	{
		$("#ajax_loader").hide();
	}
}

function replace_text_scripts(text)
{
	var regex_all = new RegExp('<script[^>]*>([\u0001-\uFFFF]*?)</script>', 'img');
	var regex_one = new RegExp('<script[^>]*>([\u0001-\uFFFF]*?)</script>', 'im');
	var matches = text.match(regex_all);

	if(matches)
	{
		var script;
		var i;
		for(var i = 0; i < matches.length ; i++ )
		{
			if(matches[i].match(regex_one)[1])
			{
				script = document.createElement("SCRIPT");
				script.type = "text/javascript";
				document.body.appendChild(script);
				script.text = matches[i].match(regex_one)[1];
			}
		}
	}

	return matches ? text.replace(regex_all, '') : text;
}

function show_object_as_popup(selector)
{
	overlay('show');
	$(selector).center().wrapInner('<div style="background:#fff; "></div>').show();
}

function overlay(action)
{
	switch (action)
	{
		case 'show' :
			$('#overlay').fadeIn(400);
			break;
		case 'hide'	:
			$('#overlay').fadeOut(400);
			break;
	}
}

function show_message(msg)
{
	$.jGrowl(msg)
}
