/**
 * Plugin for form
 */


Ext.define('Ext.ux.formprocessor', {
    constructor: function(config) {
        Ext.apply(this, config || {}, this.defaults);
    },
    
    init: function(form) {
    	form.setErrors = this.setErrors;
    	form.serverError = this.serverError;
    	form.on('fieldvaliditychange',this.updateErrorState);
    	form.on('fielderrorchange',this.updateErrorState);
    },

    updateErrorState: function() {
        var me = this,
            fields, errors;
        if (me.hasBeenDirty || me.getForm().isDirty()) { 
            
            fields = me.getForm().getFields();
            errors = [];
            fields.each(function(field) {
                Ext.Array.forEach(field.getErrors(), function(error) {
                    errors.push({name: field.getFieldLabel(), error: error});
                });
            });
            me.setErrors(errors);
            me.hasBeenDirty = true;
        }
    },
    
    setErrors: function(errors) {
        var errorCmp = this.previousSibling();
        var errors = Ext.Array.from(errors);
        if (errors.length) {
        	errorCmp.update(errors);
        	errorCmp.show();
        } else {
        	errorCmp.update('');
        	errorCmp.hide();
        }
    },
    
    serverError: function (servererrors){
    	var errorCmp = this.previousSibling();
        var errors = [];
        for (var name in servererrors) {
        	errors[errors.length] = {name:name,error:servererrors[name]};
        }
        if (errors.length) {
        	errorCmp.update(errors);
        	errorCmp.show();
        } else {
        	errorCmp.update('');
        	errorCmp.hide();
        }
    }


});
