function ValidateEmail(email) {
if(IsEmpty(email) || email.trim()=='') return { status:false, message:'email_cannot_be_empty' };
var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
var result=re.test(String(email).toLowerCase());
return { status:result, message:(result ? 'OK' : 'invalid_email_address') };
}
function Post(url, params, on_success, on_error) {
$.ajax({
url: url,
type: 'post',
data: params,
dataType: 'json',
success: function (response) {
if(!IsEmpty(on_success)) on_success(response);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
if(!IsEmpty(on_error)) on_error(jqXHR, textStatus, errorThrown);
}
});
}
function PostUpload(url, params, on_success, on_error) {
$.ajax({
url : url,
type : 'post',
data : params,
processData: false,
contentType: false,
dataType: 'json',
timeout: 60000,
xhr: function () {
var myXhr = $.ajaxSettings.xhr();
if (myXhr.upload) {
myXhr.upload.addEventListener('progress', function (event) {
try {
var percent = 0;
var position = event.loaded || event.position;
var total = event.total;
var progress_bar_id = "#progress-wrp";
if (event.lengthComputable) percent = Math.ceil(position / total * 100);
$(progress_bar_id + " .progress-bar").css("width", +percent + "%");
$(progress_bar_id + " .status").text(percent + "%");
} catch(e) { }
}, false);
}
return myXhr;
},
success: function (response) {
if(!IsEmpty(on_success)) on_success(response);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
if(!IsEmpty(on_error)) on_error(jqXHR, textStatus, errorThrown);
}
});
}
function ForceHideModal() {
$('#app_modal').modal('hide');
$('body').removeClass('modal-open');
$('.modal-backdrop').remove();
}
function ShowModal(title, message, button_positive, button_action, on_close_action) {
message = message.replace(/(?:\r\n|\r|\n)/g, '
');
if($('#app_modal').length) $('#app_modal').remove();
var m='\
\
';
$('body').append(m);
$('#app_modal').modal('show');
$('#app_modal').on('hidden.bs.modal', function () {
if(!IsEmpty(on_close_action)) eval(on_close_action);
});
}
function Redirect(url) {
var u=url.split('?');
var action=u[0];
var inputs='';
var params=u.length>1 ? u[1].split('&') : [];
for(var i=0;i';
}
if($('#form_redirect').length) $('#form_redirect').remove();
var html='';
$('body').append(html);
setTimeout(function() { $('#form_redirect').submit(); }, 500);
}
/*
function ValidateEmail(email) {
var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
return regex.test(email);
} */
function ValidateFormByType(form) {
var has_error=false;
$("input", form).each(function( index ) {
$(this).removeClass('erroneous');
if($(this).attr('offline')!=undefined) return;
if($(this).attr('dont_check')!=undefined) return;
if($(this).attr('type').toLowerCase()=='text' || $(this).attr('type').toLowerCase()=='email') {
if($(this)[0].hasAttribute('not_null') && $(this).val().trim()=='') {
$(this).addClass('erroneous');
has_error=true;
} else if($(this).attr('type').toLowerCase()=='email' && $(this).val().trim()!='' && ValidateEmail($(this).val()).status==false) {
$(this).addClass('erroneous');
has_error=true;
} else if($(this).attr('id').toLowerCase()=='afm' && $(this).val().trim()!='' && ValidateAfm($(this).val())==false) {
$(this).addClass('erroneous');
has_error=true;
}
} else if($(this).attr('type').toLowerCase()=='number') {
if($(this)[0].hasAttribute('not_null') && $(this).val().trim()=='') {
$(this).addClass('erroneous');
has_error=true;
} else if(!$(this)[0].hasAttribute('not_null') && $(this).val().trim()!='' && isNaN(parseInt($(this).val().trim()))) {
$(this).addClass('erroneous');
has_error=true;
}
} else if($(this).attr('type').toLowerCase()=='password' && $(this).val().trim()=='') {
$(this).addClass('erroneous');
has_error=true;
} else if($(this).attr('type').toLowerCase()=='file' && $(this).val().trim()=='') {
$(this).addClass('erroneous');
has_error=true;
}
});
$("textarea", form).each(function( index ) {
$(this).removeClass('erroneous');
if($(this).attr('offline')!=undefined) return;
if($(this).attr('dont_check')!=undefined) return;
if($(this)[0].hasAttribute('not_null') && $(this).val().trim()=='') {
$(this).addClass('erroneous');
has_error=true;
}
});
return !has_error;
}
function PostEditForm(form) {
var has_upload=false;
var params={};
var upload_form_data=new FormData();
$("textarea", form).each(function( index ) {
if($(this).attr('offline')!=undefined) return;
params[$(this).attr('id')]=$(this).val();
upload_form_data.append($(this).attr('id'), $(this).val());
});
$("input:not(:checkbox):not(:file)", form).each(function( index ) {
if($(this).attr('offline')!=undefined) return;
params[$(this).attr('id')]=$(this).val();
upload_form_data.append($(this).attr('id'), $(this).val());
});
$("input:checkbox", form).each(function( index ) {
if($(this).attr('offline')!=undefined) return;
params[$(this).attr('id')]=$(this).is(':checked') ? 1 : 0;
upload_form_data.append($(this).attr('id'), $(this).is(':checked') ? 1 : 0);
});
$("input:file", form).each(function( index ) {
if($(this).attr('offline')!=undefined) return;
has_upload=true;
params[$(this).attr('id')]= $(this)[0].files[0];
upload_form_data.append($(this).attr('id'), $(this)[0].files[0]);
});
$("select", form).each(function( index ) {
if($(this).attr('offline')!=undefined) return;
params[$(this).attr('id')]=$(this).val();
upload_form_data.append($(this).attr('id'), $(this).val());
});
if(has_upload) {
$(form).css('filter', 'blur(3px)').css('webkitFilter', 'blur(3px)').css('mozFilter', 'blur(3px)').css('oFilter', 'blur(3px)').css('msFilter', 'blur(3px)').css('cursor', 'wait').prop('disable', true);
PostUpload($(form).attr('save_link'), upload_form_data,
function (response) {
$(form).css('cursor', 'default');
if(IsEmpty(response) || response.is_error==undefined) {
alert('Invalid server response');
} else if(response.is_error) {
alert(response.message);
} else {
window.location=$(form).attr('after_save_link');
}
$(form).css('filter', 'blur(0px)').css('webkitFilter', 'blur(0px)').css('mozFilter', 'blur(0px)').css('oFilter', 'blur(0px)').css('msFilter', 'blur(0px)').css('cursor', 'default').prop('disable', false);
},
function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
$(form).css('filter', 'blur(0px)').css('webkitFilter', 'blur(0px)').css('mozFilter', 'blur(0px)').css('oFilter', 'blur(0px)').css('msFilter', 'blur(0px)').css('cursor', 'default').prop('disable', false);
}
);
} else {
$(form).css('filter', 'blur(3px)').css('webkitFilter', 'blur(3px)').css('mozFilter', 'blur(3px)').css('oFilter', 'blur(3px)').css('msFilter', 'blur(3px)').css('cursor', 'wait').prop('disable', true);
Post($(form).attr('save_link'), params,
function (response) {
$(form).css('cursor', 'default');
if(IsEmpty(response) || response.is_error==undefined) {
alert('Invalid server response');
} else if(response.is_error) {
alert(response.message);
} else {
window.location=$(form).attr('after_save_link');
}
$(form).css('filter', 'blur(0px)').css('webkitFilter', 'blur(0px)').css('mozFilter', 'blur(0px)').css('oFilter', 'blur(0px)').css('msFilter', 'blur(0px)').css('cursor', 'default').prop('disable', false);
},
function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
$(form).css('filter', 'blur(0px)').css('webkitFilter', 'blur(0px)').css('mozFilter', 'blur(0px)').css('oFilter', 'blur(0px)').css('msFilter', 'blur(0px)').css('cursor', 'default').prop('disable', false);
}
);
}
}
var simple_checkbox = function ( data, type, full, meta ) {
var is_checked = data == true || data == 1 ? "checked" : "";
return '';
}
function ViewDocument(document_id) {
if(IsEmpty(document_id)) return;
Post('/api/', { controller: 'document', action: 'view', id: document_id },
function (response) {
if(IsEmpty(response) || response.is_error==undefined) {
ShowModal('Document', 'Invalid server response');
} else if(response.is_error) {
ShowModal('Document', response.message);
} else {
ShowModal('Document', response.data, 'Download', 'window.open(\'/api/?controller=document&action=get&dispose=1&id=' + document_id + '\', \'_blank\');');
}
},
function(jqXHR, textStatus, errorThrown) {
ShowModal('Dowcument', textStatus + '\n' + jqXHR.responseText);
}
);
}
function IsSet(look) {
return look!=undefined && look!=null;
}
function IsEmpty(look) {
return look==undefined || look==null || look=='';
}
function Includes(haystack, needle) {
if(haystack==undefined || haystack==null || haystack=='') return false;
else if(needle==undefined || needle==null || needle=='') return false;
else return haystack.indexOf(needle)>=0;
}
var entity_map = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": ''',
'/': '/',
'`': '`',
'=': '='
};
function EscapeHtml(string) {
return String(string).replace(/[&<>"'`=\/]/g, function (s) { return entity_map[s]; });
}
var Trim=function(text) {
return String(text).replace(/^\s+|\s+$/gm,'');
}
function ValidateAfm(afm) {
if (!afm.match(/^\d{9}$/) || afm == '000000000') return false;
var m = 1, sum = 0;
for(var i=7;i>=0;i--) {
m*= 2;
sum+=afm.charAt(i) * m;
}
return sum % 11 % 10 == afm.charAt(8);
}
function ReloadPage() {
window.location.reload();
}
function isValidUrl(str) {
const pattern = new RegExp(
'^([a-zA-Z]+:\\/\\/)?' + // protocol
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name
'((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path
'(\\?[;&a-z\\d%_.~+=-]*)?' + // query string
'(\\#[-a-z\\d_]*)?$', // fragment locator
'i'
);
return pattern.test(str);
}