var AjaxForm = Class.create(FormSupport, {
	initialize: function (rootElement,instanceId) {
		this.rootElement = rootElement;
		this.url = rootElement.getAttribute("js:ajax-url");
		this.refreshOnLoad = 'true' == rootElement.getAttribute("js:refreshOnLoad");
		this.errorClass = rootElement.getAttribute('js:errorClass');
		this.updateId = rootElement.id;
		this.submitButton = rootElement.down('div.'+rootElement.getAttribute("js:submit"));  
		this.spinnerElement = rootElement.down('div.'+rootElement.getAttribute("js:spinner"));
		
		this.initElements();
		
		var initParams = rootElement.getAttribute('js:initParams');
		if (typeof initParams != 'undefined') {
			initParams = this.parseInitParams(initParams);
		} else {
			initParams = {};
		}
		if (this.refreshOnLoad) {
			new Ajax.Updater(this.updateId, this.url, {
			  parameters: initParams,
			  method: 'GET',
			  onComplete: function () {
				  this.initElements();
				  this.submitHref.observe('click',
						this.submit.bindAsEventListener(this));
				  this.listen(this.form);
			  }.bind(this)
			});
		} else {
			this.submitHref.observe('click',
						this.submit.bindAsEventListener(this));
			this.listen(this.form);
		}
	},
	submit: function (event) {
		if (this.checkMandatoryFields()) {
			if (typeof this.submitButton != 'undefined') {
				this.submitButton.hide();
			}
			if (typeof this.spinnerElement != 'undefined') {
				this.spinnerElement.show();
			}
			new Ajax.Updater(this.updateId, this.url, {
				  parameters: this.form.serialize(this),
				  method: 'POST',
				  onComplete: function () {
					  this.initElements();
					  this.submitHref.observe('click',
							this.submit.bindAsEventListener(this));
					  this.listen(this.form);
				  }.bind(this)
				});
		}
	},
	parseInitParams: function (s) {
		if (s == null) {
			return {};
		}
		var pairs = s.split(',');
		var result = {};
		for (var i = 0; i < pairs.length; i++) { 
			var pair = pairs[i].split(':');
			result[pair[0]] = pair[1];
		}
		return result;
	},
	initElements: function() {
		this.form = this.rootElement.down('form');
		this.submitHref = this.rootElement.down('a.ajax-form-submit');
	}
});