var g_form;

window.addEvent('domready', function() {
    var formContainer = $E('div#form-container');
    if (formContainer) {
        g_form = new AutoFormController(formContainer, {
            fieldsSelector: '.autoform-field',
            onProcessCode: function(formController) {
                focusBehavior(formController);
                bindButtons(formController);
            },
            onBeforeAction: function(formController, action) {
                var form = formController.getForm();
                if (formController._formUrl.indexOf('?') != -1) {
                    form.setProperty('action', formController._formUrl+'&task='+action);
                } else {
                    form.setProperty('action', formController._formUrl+'?task='+action);
                }
            },
            onActionError: function(formController, responseText, responseXml) {},
            onFormUpdate: function(formController, response) {
                if ('hasError' in response) {
                    shakeBehavior(formController);
                }
                var messageContainer;
                messageContainer = formController._formContainer.getElement('.error-message');
                if ('errors' in response) {
                    messageContainer.setHTML(response.errors.join('<br/>'));
                    messageContainer.setStyle('display', 'block');
                } else {
                    messageContainer.empty();
                    messageContainer.setStyle('display', 'none');
                }
                messageContainer = formController._formContainer.getElement('.success-message');
                if ('messages' in response) {
                    messageContainer.setHTML(response.messages.join('<br/>'));
                    messageContainer.setStyle('display', 'block');
                } else {
                    messageContainer.empty();
                    messageContainer.setStyle('display', 'none');
                }
            },
            onPageUpdate: function(formController, pageUpdate) {
                var pageContainer = formController._formContainer.getElement('#page-container');
                pageContainer.empty();
                pageContainer.setHTML(pageUpdate);
            },
            onFieldUpdate: function(fieldContainer, fieldUpdate) {
                var errorContainer = fieldContainer.getElement('div.field-error');
                if ('error' in fieldUpdate) {
                    fieldContainer.addClass('form-field-error');
                    if (errorContainer) {
                        errorContainer.setHTML(fieldUpdate.error.join('\n'));
                        errorContainer.setStyle('display', 'block');
                    }
                } else {
                    fieldContainer.removeClass('form-field-error');
                    if (errorContainer) {
                        errorContainer.empty();
                        errorContainer.setStyle('display', 'none');
                    }
                }
                var element;
                if (fieldContainer.id == fieldUpdate.name) {
                    element = fieldContainer;
                } else {
                    element = fieldContainer.getElement('#'+fieldUpdate.name);
                }
                updateFieldValue(element, fieldUpdate.value);
            }
        });
    }
});

