
He.Bootstrap('He.Framework.Ajax');

He.Framework.Ajax.Loading = function(_onoff)
{
// 	if(He.IsUndefined(He.Framework.Ajax.Loading.stylesheet))
// 	{
// 		He.Framework.Ajax.Loading.stylesheet = document.
// 	}
// 	He.Framework.Ajax.Loading.stylesheet;
	var prev = He.Framework.Ajax.Loading;
	if(_onoff === false)
	{
		--He.Framework.Ajax.Loading.count;
		if(He.Framework.Ajax.Loading.count < 0)
		{
			He.Framework.Ajax.Loading.count = 0;
		}
	}
	else
	{
		++He.Framework.Ajax.Loading.count;
	}

	if(document.body)
	{
		if(He.Framework.Ajax.Loading.count > 0)
		{
			document.body.style.cursor = 'wait';
		}
		else
		{
			document.body.style.cursor = 'auto';
		}
	}
}

He.Framework.Ajax.Loading.count = 0;

He.Framework.Ajax.Update = function(_target, _url, _params, _callback)
{
	He.Framework.Ajax.Loading();
	return new Ajax.Updater(_target,_url,
	{
		evalScripts: true,
		parameters: _params,
		onFailure : function(){He.Framework.Ajax.Loading(false);},
		onException : function(){He.Framework.Ajax.Loading(false);},
		onComplete : function()
		{
			He.Framework.Ajax.Loading(false);
			if(He.IsFunction(_callback))
			{
				_callback.apply(this, arguments);
			}
		}
	});
}

He.Framework.Ajax.Request = function(_url, _params, _callback)
{
	return He.Framework.Ajax.Update(document.createElement('div'), _url, _params, _callback);
}

He.Framework.Ajax.PostForm = function(_form, _callback)
{
	_form = $(_form);

	if(_form.signed !== true)
	{
		He.Framework.Form.Sign(_form);
	}

	var _url = _form.readAttribute('action') || '';
	if(_url == '')
	{
		_url = window.location.href.replace(/([^:]+)(\:[^:]+)*\/?$/,'$1');
	}

	return He.Framework.Ajax.Request(_url, _form.serialize(true), function()
	{
		_form.signed = false;
		_callback.apply(_callback,$A(arguments));
	});
}
