

box.dom(document).ready(function() {
	box.ui('form').addPatterns({
		password: /^[a-zA-Z0-9]{6,}$/,
		zipcode: /^[0-9]{1,8}$/
	});
	
    box.ui('form').create({
        element: '#registrationForm'
    }).addReplacement().mustValidate(function(form) {
        /*form.field('civility').mustValidate(function(field) {
            if(field.getValue() == 'c0') {
                return l10n.errors.required.msg;
            }
        });*/
		
		form.field('firstname').mustValidate(function(field) {
            if(field.isEmpty()) {
                return l10n.errors.required.EM_SW_04;
            }
        });
		
		form.field('lastname').mustValidate(function(field) {
            if(field.isEmpty()) {
                return l10n.errors.required.EM_SW_05;
            }
        });
		

		form.field('password').mustValidate(function(field) {	
			if(field.isEmpty()) {
                return l10n.errors.required.EM_SW_37;
            } else
            if(!field.isMatching('password') ) { 
                return l10n.errors.required.EM_SW_37;
            }
        });

		form.field('confirmpassword').mustValidate(function(field) {
            if(!form.field('password').getError() && !field.isEqualTo(form.field('password').getValue())) {
                return l10n.errors.required.EM_SW_38;
            }
        });

		
		form.field('address').mustValidate(function(field) {
            if(field.isEmpty()) {
                return l10n.errors.required.EM_SW_11;
            }
        });
		
		form.field('cp').mustValidate(function(field) {
            if(field.isEmpty()) {
                return l10n.errors.required.EM_SW_12;
            } else if (!field.isMatching('zipcode')) {
                return l10n.errors.required.EM_SW_12;
            }
        });
		
		form.field('city').mustValidate(function(field) {
            if(field.isEmpty()) {
                return l10n.errors.required.EM_SW_13;
            }
        });
		
       /* form.field('country').mustValidate(function(field) {
            if(field.getValue() == '' || field.getValue() == '0') {
                return l10n.errors.required.msg;
            }
        });*/
		
		form.field('phone').mustValidate(function(field) {
            if(field.isEmpty()) {
                return l10n.errors.required.EM_SW_14;
            }
        });
        
        form.field('email').mustValidate(function(field) {
            if(field.isEmpty()) {
                return l10n.errors.required.EM_SW_06;
            } else if(!field.isMatching('email')) {
                return l10n.errors.required.EM_SW_06;
            }
        });
		
		form.field('conditions').mustValidate(function(field) {
            if(!field.isChecked()) {
                return l10n.errors.required.EM_SW_07;
            }
        });
            
        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 sourceForm = $('#'+e.id).parents('form').attr('id');
		addErrorIcon(e.source, $('#'+sourceForm+' div.alert .content p'));
    };
    
    var removeFieldError = function(e) {
        getErrorTarget(e.source).removeClass(errorCls);
		box.dom('#' + e.source.name + 'Error').remove();
    };
	

	var addErrorIcon = function(field, target) {
		var id = field.name + 'Error';
		var img = box.dom('#' + id);
		if(img.length) {
		  img.attr('alt', field.getError());
		} else {
		  //target.append('<img id="' + id + '" alt="' + field.getError() + '" src="' + l10n.url.img.error + '" />');
		  target.append('<span id="' + id + '">- ' + field.getError() + '<br/></span>');
		}
	  };

    
    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 {
            //e.source.getElement().prepend('<div id="' + id + '" class="' + errorCls + '">' + msg + '</div>');
			//$('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,
		'valid.field': removeFieldError,
		'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
    });
});

