box.dom(document).ready(function() {
	box.ui('form').addPatterns({
		emailregex: /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/
	});
    box.ui('form').create({
        element: '#newsletterForm'
    }).addReplacement().mustValidate(function(form) {
	
        form.field('email').mustValidate(function(field) {
            if(field.isEmpty()) {
                return l10n.errors.required.EM_SW_06;
            } else if(!field.isMatching('emailregex')) {
                return l10n.errors.required.EM_SW_06;
            }
			
        });
        
		form.field('legales').mustValidate(function(field) {
			if (!field.isChecked()) {
				return l10n.errors.required.EM_SW_43;
			}
		}); 
		
        return l10n.errors.form;
    });
    
    var errorCls = 'error';
	
    var getErrorTarget = function(field) {
        if('radio' != field.type) {
            return field.getLabel();
        } else {
            return field.getElements().parent().parent().prev();
        }
    };
	
    var addFieldError = function(e) {
		getErrorTarget(e.source).addClass(errorCls);
    };
    
    var removeFieldError = function(e) {
        getErrorTarget(e.source).removeClass(errorCls);
    };
    
    var addFormError = function(e) {
        var id = e.source.id + 'Error';
		var msg = e.source.msg;
        var error = box.dom('#' + id);
        if(error.length) {
            error.html(msg);
        } else {
			$('div.alert .content p').text(msg);
			$('#' + e.source.id + ' div.alert').show();
        }
    };
    
    var removeFormError = function(e) {
        box.dom('#' + e.source.id + 'Error').remove();
    };
    
    // binding des événements
    box.bind({
        'error.form': addFormError,
        'valid.form': removeFormError,
        'error.field.text': addFieldError,
		'error.field.select': addFieldError,
        'error.field.radio': addFieldError,
        'error.field.checkbox': addFieldError,
        'valid.field.text': removeFieldError,
		'valid.field.select': removeFieldError,
        'valid.field.radio': removeFieldError,
        'valid.field.checkbox': removeFieldError
    });
});