/*
 * Validation tools
 */
var Validator = {

	errorsArray: false,

	add_error_msg: function (thisObject, fieldName, error) {
		$(thisObject).next('.error_message').remove();
		$(thisObject).after('<span class="error_message" id="'+ fieldName +'_exists">' + error + '</span>');
	},

	remove_error_msg: function (fieldName) {
		$('#' + fieldName + '_exists').remove();
	},

	set_errors: function (errors) {
		this.errorsArray = errors;
	},

	handle_field_error: function (thisObject) {
		var this_field_name = $(thisObject).attr('id');
		if (this.errorsArray){
			this.remove_error_msg(this_field_name);
			$.each(this.errorsArray, function(field_name, error_msg) {
				if (this_field_name == field_name){
					Validator.add_error_msg('#'+field_name, field_name, error_msg);
				}
			});
		}
	},

	handle_form_errors: function (formName) {
		if (!this.errorsArray){ $('#'+formName).submit(); }
		
		$('.error_message').remove();

		$.each(this.errorsArray, function(field_name, error_msg) {
			Validator.add_error_msg('#'+field_name, field_name, error_msg);
		});
	},

	validate_field: function (thisObject, formName, modelName) {
		$.ajax({
			type: 'POST',
			url: '/ajax/validation/check_form/' + modelName,
			data: $('#' + formName).serialize(),
			dataType: 'json',
			success: function(errors) {
				Validator.set_errors(errors);
				return Validator.handle_field_error(thisObject);
			}
		});
	},

	validate_form: function(formName, modelName) {
		$.ajax({
			type: 'POST',
			url: '/ajax/validation/check_form/' + modelName,
			data: $('#' + formName).serialize(),
			dataType: 'json',
			success: function(errors) {
				Validator.set_errors(errors);
				return Validator.handle_form_errors(formName);
			}
		});
	}

}

