var AjaxForm = Class.create({

	cancelled: false,

	initialize: function(formId, options) {

		if (!Object.isElement($(formId)))
			return;
			
		this.form = $(formId);

		if (typeof options == 'object')
		{
			this.onComplete = (options.onComplete) ? options.onComplete : function(){};
			this.onSubmit = (options.onSubmit) ? options.onSubmit : function(){};
		}
		else
		{
			this.onComplete = function(){};
			this.onSubmit = function(){};
		}
		
		this.form.onsubmit = function(){return false};
		
		if (!this.form.action)
			this.form.action = location.href;

		this.form.observe('submit', function(ev) {
//			if (this.form.hasClassName('_busy'))
//				return;
			this.form.addClassName('_busy');
			this.onSubmit();
			if (!this.cancelled)
				ajax_submitForm(this.form, function(response){
					this.form.removeClassName('_busy');
					this.onComplete.bind(this)(response);
				}.bind(this));
			this.cancelled = false;
		}.bindAsEventListener(this));
	},
	
	reSubmit: function() {
		ajax_submitForm(this.form, this.onComplete.bind(this));
	}, 
	
	cancel: function() {
		this.cancelled = true;
	}

});


ajaxOnComplete = function(ajax, afterOnComplete)
{
	try {
		response = ajax.responseText.evalJSON();
	}
	catch(e)
	{
		response = ajax.responseText;
	}
	if (typeof response == 'object') 
	{
		if (response.event)
			document.fire(response.event, {response:response});

		if (response.content)
		{
			window.scrollTo(0, 0);
			$('content').update(response.content);
		}

		if (response.errors && response.errors.length)
			showErrorMessage(response.errors);
		else if (response.message)
			Messages.ShowMessage(response.message, response.redirect);
		else if (response.redirect)
			location.href = response.redirect;
		else if (response.reload)
			location.reload();

		if (afterOnComplete)
			afterOnComplete(response);
	}
	else
		Modalbox.show(ajax.responseText);
}


ajax_submitForm = function(formId, afterOnComplete)
{
	var lm = new Messages.ShowLoadingMessage('Kis türelmet...');
	$(formId).request({ 
		onComplete: function(ajax){
			lm.remove();
			ajaxOnComplete(ajax, afterOnComplete);
		},
		requestHeaders: {
			Accept: 'application/json'
		}
	})
}



ajax_submitURL = function(URL, afterOnComplete)
{
	new Ajax.Request(URL, {
		method: 'get',
		onComplete: function(ajax) {
			ajaxOnComplete(ajax, afterOnComplete);
		},
		requestHeaders: {
			Accept: 'application/json'
		}
	});
}


ajax_submitPostURL = function(URL, parameters, afterOnComplete)
{
	var lm = new Messages.ShowLoadingMessage('Kis türelmet...');
	new Ajax.Request(URL, {
		method: 'post', 
		parameters: parameters, 
		onComplete: function(ajax) {
			lm.remove();
			ajaxOnComplete(ajax, afterOnComplete);
		},
		requestHeaders: {
			Accept: 'application/json'
		}
	});
}


ajax_submitPost = function(parameters, afterOnComplete)
{
	ajax_submitPostURL(location.href, parameters, afterOnComplete);
}


