var Validate = (function($) {
var $form;
var errors = [];
function validationError($field, errormsg) {
$field.addClass('incomplete');
/*
$('
' + errormsg + '
')
.insertBefore($field.parent());
*/
}
function validateField($field) {
$('.alert', $field.closest('.form-group')).remove();
$field.removeClass('incomplete');
var val = $field.val();
if($field.is('[data-required]')) {
// Validating ajaxselects
if($field.hasClass('da-ajaxselect')) {
if(!$field.find('.da-ajaxselect-value').val()){
validationError($field, 'Field required.');
$field.find('.da-ajaxselect-search').addClass('required-incomplete');
return false;
} else {
$field.find('.da-ajaxselect-search').removeClass('required-incomplete');
}
} else {
if(val === ''){
validationError($field, 'Field required.');
var tabid = $field.closest('.tab-pane').attr('id');
if(tabid){
$('.nav-tabs').find('[href="#' + tabid + '"]').addClass('required-incomplete');
}
return false;
}
}
} else if($field.is('[data-pattern]')) {
var pattern = $field.data('pattern');
var regex = new RegExp(pattern);
if(regex && val && !regex.test(val)) {
validationError($field, 'Invalid format.');
return false;
}
}
if ($field.is('[data-validate]')) {
$formGroup = $field.closest('.form-group');
if ($formGroup.length) $formGroup.find('.validation-label').remove();
// Return this value if the validation class and method is missing or undefined
var defaultValidationResult = true;
var data = $field.data('validate');
if (!data.length) return defaultValidationResult;
var split = data.split('.');
if (split.length !== 2) return defaultValidationResult;
var validateClass = window[split[0]];
var validateMethod = split[1];
if (typeof validateClass === 'undefined') return defaultValidationResult;
if (typeof validateClass[validateMethod] === 'undefined') return defaultValidationResult;
var result = validateClass[validateMethod]($field);
if (result.success === false) {
validationError($field, result.message);
// Store message
var message = result.message;
if ($field.closest('.form-group').find('label').length) {
message = $field.closest('.form-group').find('label').text() + ': ' + message;
}
errors[$field.attr('name')] = message;
if ($formGroup.length) {
$formGroup.find('.validation-label').remove();
$formGroup.append('' +
result.message +
'
');
}
return false;
}
}
return true;
}
function validateForm() {
errors = [];
$('.validation-label').remove();
$('.alert', $form).remove();
$('.incomplete', $form).removeClass('incomplete');
var returnval = true;
$('input, select, textarea', $form).each(function() {
if(!validateField($(this))) returnval = false;
});
$('.da-ajaxselect', $form).each(function() {
if(!validateField($(this))) returnval = false;
});
return returnval;
}
var init = function(formID) {
$form = $('#' + formID);
$form.submit(function(e) {
// check for save/publish
if($('#savefield').val() == '1' || $('#publishfield').val() == '1') {
if(!validateForm()) {
e.preventDefault();
if (!Object.keys(errors).length) {
InvModal.alert('Please complete all required fields');
} else {
var errorList = '';
for(var key in errors) {
errorList += '- ' + errors[key] + '
';
}
errorList += '
';
InvModal.showModal({
'title': 'Please complete all required fields and fix the following errors',
'content': errorList
});
console.log(errorList);
}
}
}
});
$('input, select, textarea', $form).each(function() {
$(this).change(function() {
if($(this).hasClass('datefield')) {
validateField($('.date-human', $(this).parent()));
} else {
validateField($(this));
}
});
});
$('.da-ajaxselect', $form).each(function() {
$(this).change(function() {
validateField($(this));
});
});
}
return {
init: init,
validateField: validateField
}
})(jQuery);