/* ============================ */
/* SalesMan CRM */
/* ============================ */
/* (C) 2018 Vladislav Andreev */
/* SalesMan Project */
/* salesman.pro */
/* ver. 2018.6 */
/* ============================ */
/**
* Аналог app.js, предназначенный для использования в плагинах
* @type {{BlackBerry: (function(): RegExpMatchArray), Windows: (function(): RegExpMatchArray), iOS: (function(): RegExpMatchArray), any: (function(): RegExpMatchArray), Opera: (function(): RegExpMatchArray), Android: (function(): RegExpMatchArray)}}
*/
var isMobilee = {
Android: function () {
return navigator.userAgent.match(/Android/i);
},
BlackBerry: function () {
return navigator.userAgent.match(/BlackBerry/i);
},
iOS: function () {
return navigator.userAgent.match(/iPhone|iPad|iPod/i);
},
Opera: function () {
return navigator.userAgent.match(/Opera Mini/i);
},
Windows: function () {
return navigator.userAgent.match(/IEMobile/i);
},
any: function () {
return (isMobilee.Android() || isMobilee.BlackBerry() || isMobilee.iOS() || isMobilee.Opera() || isMobilee.Windows());
}
};
var isMace = {
iOS: function () {
return navigator.userAgent.match(/Macintosh/i);
}
};
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
var isSafari = /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor);
//Вывод типа последней активности в колонке истории в списках клиентов, контактов, сделок
var showHistTip = 'yes';//'yes';
var isMobile = false;
var isPad = false;
var isMac = false;
//console.log(navigator);
if (isMobilee.any() || $(window).width() < 767) {
isMobile = true;
isPad = false;
}
if ($(window).width() > 767) {
isMobile = false;
isPad = true;
}
if ($(window).width() > 1024) isPad = false;
if (isMace.iOS()) isMac = true;
/**
* подключает javascript файл и выполняет его
* заносит название файла в реестр подключенных,
* дабы не дублировать
*/
var javascripts = [];
var $display = '';
/**
* Признак нахождения в карточке
*/
var isCard = false;
var tipCard = '';
var idCard = 0;
/**
* Период проверки почты
* По умолчанию = 10 мин
*/
var $yperiod = 10 * 60000;
/**
* Ключ Дадата
*/
var $dadata = '';
/**
* Открытие карточек Клиента, Контакта, Сделки
* во фрейме
* @type {number}
*/
var oF = parseInt( localStorage.getItem("openCardInFrame") );
var openFrame = (oF === 1);
var vO = parseInt( localStorage.getItem("viewAsOpen") );
var viewAsOpen = (vO === 1);
/**
* Основные элементы интерфейса
*/
var $elcenter = $('.ui-layout-center');
var $elwest = $('.ui-layout-west');
var $eleast = $('.ui-layout-east');
var $elnorth = $('.ui-layout-north');
var isCtrl = false;
//Даты и периоды
var period = {
all: ['', ''],
yestoday: [moment().subtract(1, 'days').format('YYYY-MM-DD'), moment().subtract(1, 'days').format('YYYY-MM-DD')],
today: [moment().format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')],
tomorrow: [moment().add(1, 'days').format('YYYY-MM-DD'), moment().add(1, 'days').format('YYYY-MM-DD')],
calendarweekprev: [moment().subtract(1, 'week').weekday(1).format('YYYY-MM-DD'), moment().subtract(1, 'week').weekday(7).format('YYYY-MM-DD')],
calendarweek: [moment().weekday(1).format('YYYY-MM-DD'), moment().weekday(7).format('YYYY-MM-DD')],
calendarweeknext: [moment().add(1, 'week').weekday(1).format('YYYY-MM-DD'), moment().add(1, 'week').weekday(7).format('YYYY-MM-DD')],
monthprev: [moment().subtract(1, 'months').startOf('month').format('YYYY-MM-DD'), moment().subtract(1, 'months').endOf('month').format('YYYY-MM-DD')],
month: [moment().startOf('month').format('YYYY-MM-DD'), moment().endOf('month').format('YYYY-MM-DD')],
monthnext: [moment().add(1, 'months').startOf('month').format('YYYY-MM-DD'), moment().add(1, 'months').endOf('month').format('YYYY-MM-DD')],
quartprev: [moment().subtract(1, 'quarter').startOf('quarter').format('YYYY-MM-DD'), moment().subtract(1, 'quarter').endOf('quarter').format('YYYY-MM-DD')],
quart: [moment().startOf('quarter').format('YYYY-MM-DD'), moment().endOf('quarter').format('YYYY-MM-DD')],
quartnext: [moment().add(1, 'quarter').startOf('quarter').format('YYYY-MM-DD'), moment().add(1, 'quarter').endOf('quarter').format('YYYY-MM-DD')],
year: [moment().startOf('year').format('YYYY-MM-DD'), moment().endOf('year').format('YYYY-MM-DD')],
yearnext: [moment().add(1, 'year').startOf('year').format('YYYY-MM-DD'), moment().add(1, 'year').endOf('year').format('YYYY-MM-DD')]
};
// блокировка ошибок
window.onerror = blockError;
/**
* Подключение js-файла
* @param path
* @returns {boolean}
*/
function includeJS(path) {
for (var i = 0; i < javascripts.length; i++) {
if (path === javascripts[i]) {
return false;
}
}
javascripts.push(path);
$.ajax({
url: path,
dataType: "script",// при типе script, JS сам инклюдится и воспроизводится
async: false
});
}
/**
* Подключение css-файлов. Можно списком с разделителем - запятая
* Пример: files = "css/one.css,css/two.css"
* Должен быть указан полный путь к файлу от корня папки
* @param files
*/
function includeCSS(files) {
var mass = files.split(",");
for (var i = 0; i < mass.length; i++) {
var a = document.createElement("link");
a.rel = "stylesheet";
a.href = mass[i];
document.getElementsByTagName("head")[0].appendChild(a)
}
}
$(function () {
if (isMobile) {
includeJS('/assets/js/smMobileTable.js');
includeJS('/assets/js/jquery/jquery.scrollTo.js');
}
if (!isMobile) {
includeJS("/assets/js/smTableColumnFixer.js");
}
getScreenSize();
$('.close').on('click', function () {
new DClose();
});
$("#dialog").draggable({handle: ".zagolovok", cursor: "move", opacity: "0.85", containment: "document"});
$('.selectBox')
.on('mouseover', function () {
$(this).animate({'max-height': 100}, 50).addClass('ha');
})
.on('mouseleave', function () {
$(this).animate({'max-height': 30}, 50).removeClass('ha');
});
$(document).on('keydown', function (e) {
var keycode = e.originalEvent.key;
//console.log(keycode)
if (keycode === 'Escape') { // escape, close box, esc
new DClose();
$('.popmenu.nothide').removeClass('open');
}
if (keycode === 'Control') {
isCtrl = true;
}
});
$(document).on('keyup', function () {
isCtrl = false;
});
$(document).on('mouseup', function (e) { // событие клика по веб-документу
var div = $(".submenu"); // тут указываем ID элемента
if (!div.is(e.target) // если клик был не по нашему блоку
&& div.has(e.target).length === 0) { // и не по его дочерним элементам
$('.submenu').css('display', 'none'); // скрываем его
}
});
$('.flyit').each(function () {
$(this).find('.yselectBox').detach().appendTo('#flyitbox');
});
$('.ydropString').each(function () {
var txt = $.trim(striptags($(this).find('label').text()).replace(/<[^p].*?>/g, ''));
$(this).prop("title", txt);
});
$(document).on('click', '.ydropDown', function () {
//скрываем остальные элементы
var $other = $('.ydropDown.open').not(this);
$other.find(".yselectBox").each(function () {
$(this).hide();
$other.find('i.icon-angle-up').removeClass('icon-angle-up').addClass('icon-angle-down');
$other.find(".action").addClass('hidden');
});
//если элемент не закреплен
if (!$(this).hasClass('flyit')) {
var $el = $(".yselectBox", this);
if (!$(this).hasClass('dWidth')) $el.css('width', $(this).actual('outerWidth'));
$el.toggle();
if ($(this).hasClass('open')) {
$(this).removeClass('open');
$el.removeClass('open');
}
else {
$(this).addClass('open');
$el.addClass('open');
}
if ($el.css('display') === 'none') $(this).find('i.icon-angle-up').removeClass('icon-angle-up').addClass('icon-angle-down');
else $(this).find('i.icon-angle-down').removeClass('icon-angle-down').addClass('icon-angle-up');
}
else {
var element = $(this).data('id');
var offset = $(this).offset();
var width = $(this).outerWidth();
var height = $(this).outerHeight() + 1;
if ($(this).hasClass('open')) {
$(this).removeClass('open');
$('.yselectBox[data-id="' + element + '"]').removeClass('open');
}
else {
$(this).addClass('open');
$('.yselectBox[data-id="' + element + '"]').addClass('open');
}
$('.yselectBox.open').not('[data-id="' + element + '"]').each(function () {
var el = $(this).data('id');
var $elm = $('.ydropDown[data-id="' + el + '"]');
$(this).removeClass('open').hide();
$elm.removeClass('open');
//если элемент закрыт
if ($elm.find(".yselectBox").hasClass('hidden')) {
$(this).find('i.icon-angle-up').removeClass('icon-angle-up').addClass('icon-angle-down');
//$elm.removeClass('open');
}
else {
//$elm.addClass('open');
//$(this).addClass('open');
$(this).find('i.icon-angle-down').removeClass('icon-angle-down').addClass('icon-angle-up');
}
//$('.ydropDown[data-id="' + el + '"]').find('i.icon-angle-down').removeClass('icon-angle-down').addClass('icon-angle-up');
});
$('.' + element).css({
"width": width + "px",
"top": (offset.top + height) + "px",
"left": (offset.left) + "px",
"z-index": "1000",
"position": "fixed"
}).toggle();
}
$(".action", this).toggleClass('hidden');
});
$(document).on('click', '.ydropString:not(.yRadio)', function () {
var ebox;
if (!$(this).closest('.yselectBox').hasClass('fly')) {
ebox = $(this).parents('.ydropDown');
var chk = $(this).parent('.yselectBox').find('input[type=checkbox]:checked').length;
var $f = $(this).parents('.ydropDown').find('.ydropCount');
var a = $f.html();
$f.html(chk + ' '+ $language.all.Selected);
}
else {
var element = $(this).closest('.yselectBox').data('id');
ebox = $('.ydropDown[data-id="' + element + '"]');
var $f2 = ebox.find('.ydropCount');
var ch2 = $(this).closest('.yselectBox').find('input[type=checkbox]:checked').length;
$f2.html(ch2 + ' '+ $language.all.Selected);
}
setTimeout(function () {
$('.yselectBox[data-id="' + element + '"]').show();
ebox.find('i.icon-angle-down').removeClass('icon-angle-down').addClass('icon-angle-up');
ebox.find('.action').removeClass('hidden');
}, 1);
//return false;
});
$(document).on('click', '.ydropString.yRadio', function () {
var rak;
var $fr;
var ebox;
if (!$(this).closest('.yselectBox').hasClass('fly')) {
ebox = $(this).parents('.ydropDown');
rak = $(this).find('input[type=radio]:checked').data('title');
$fr = $(this).parents('.ydropDown').find('.ydropText');
$fr.html(rak).prop('title', rak);
}
else {
var element = $(this).closest('.yselectBox').data('id');
ebox = $('.ydropDown[data-id="' + element + '"]');
rak = $(this).closest('.yselectBox').find('input[type=radio]:checked').data('title');
$fr = ebox.find('.ydropText');
$fr.html(rak).prop('title', rak);
}
$(this).addClass('bluebg-sub');
$(this).closest('.yselectBox').find('.ydropString').not(this).removeClass('bluebg-sub');
setTimeout(function () {
var $ee = ebox.find('.yselectBox');
if ($ee.is(':visible')) $ee.hide();
ebox.find('i.icon-angle-up').addClass('icon-angle-down').removeClass('icon-angle-up');
}, 11);
});
$(document).on('click', '.ySelectAll', function () {
var $elm = $(this).closest('.yselectBox');
var $box = $(this).closest('.ydropDown');
if (!$elm.hasClass('fly')) {
$elm.find('input[type=checkbox]').prop('checked', true);
var $f = $box.find('.ydropCount');
var ch = $box.find('input[type=checkbox]:checked').length;
$f.html(ch + ' ' + $language.all.Selected);
setTimeout(function () {
$elm.show();
}, 10);
}
else {
var element = $elm.data('id');
$box = $('.ydropDown[data-id="' + element + '"]');
$('.yselectBox[data-id="' + element + '"]').find('input[type=checkbox]').prop('checked', true);
var $f2 = $box.find('.ydropCount');
var ch2 = $elm.find('input[type=checkbox]:checked').length;
$f2.html(ch2 + ' '+ $language.all.Selected);
setTimeout(function () {
$('.yselectBox[data-id="' + element + '"]').show();
$box.find('i.icon-angle-down').toggleClass('icon-angle-down icon-angle-up');
$box.find('.action').removeClass('hidden');
}, 10);
}
//console.log( $box.find('.yDoit').is('div') );
if (typeof configpage === 'function' && !$box.find('.yDoit').is('div')) configpage();
//выполняем функцию
var fnc = $elm.data('func');
if (fnc)
eval(fnc)();
return false;
});
$(document).on('click', '.yunSelect', function () {
var $elm = $(this).closest('.ydropDown');
var $box = $(this).closest('.yselectBox');
if (!$box.hasClass('fly')) {
var chk = $box.find('input[type=checkbox]:checked').prop('checked', false);
var $f = $elm.find('.ydropCount');
$box.find('input[type=checkbox]:checked').prop('checked', false);
$f.html('0 ' + $language.all.Selected);
setTimeout(function () {
$(this).closest('.yselectBox').show();
}, 10);
}
else {
var element = $(this).closest('.yselectBox').data('id');
$box = $('.ydropDown[data-id="' + element + '"]');
$('.yselectBox[data-id="' + element + '"]').find('input[type=checkbox]').prop('checked', false);
var $f2 = $box.find('.ydropCount');
var ch2 = $box.find('input[type=checkbox]:checked').length;
$f2.html(ch2 + ' '+ $language.all.Selected);
setTimeout(function () {
$('.yselectBox[data-id="' + element + '"]').show();
$box.find('i.icon-angle-up').addClass('icon-angle-down').removeClass('icon-angle-up');
$box.find('.action').removeClass('hidden');
}, 10);
}
if (typeof configpage === 'function' && !$box.find('.yDoit').is('div') && !isCard) configpage();
//выполняем функцию
var fnc = $box.data('func');
if (fnc)
eval(fnc)();
return false;
});
$(document).mouseup(function (e) { // событие клика по веб-документу
var div = $(".ydropDown.open"); // тут указываем ID элемента
if (!div.is(e.target) && div.has(e.target).length === 0) { // и не по его дочерним элементам
$(".yselectBox.open").removeClass('open').hide();
div.find(".action").addClass('hidden');
div.removeClass('open');
div.find('i.icon-angle-up').addClass('icon-angle-down').removeClass('icon-angle-up');
}
});
$(document).on('click', '.tagsmenuToggler', function () {
$('.tagsmenu').not(this).addClass('hidden');
if ($(this).next().hasClass('.tagsmenu'))
$(this).next('.tagsmenu').toggleClass('hidden');
else
$(this).closest('div').find('.tagsmenu').toggleClass('hidden');
$(this).find('#mapii').toggleClass('icon-angle-down icon-angle-up');
});
$(document).mouseup(function (e) { // событие клика по веб-документу
//console.log(e);
var div = $(".tagsmenuToggler"); // тут указываем ID элемента
if (!div.is(e.target) && div.has(e.target).length === 0) { // и не по его дочерним элементам
$(".tagsmenu", this).addClass('hidden');
div.find('#mapii').addClass('icon-angle-down').removeClass('icon-angle-up');
}
});
$(document).on('click', '.pop', function () {
if ($(this).hasClass('donthidee') === false) {
$(".popmenu", this).toggle();
$(".popmenu-top", this).toggle();
}
});
$(".pop").not('.donthidee').mouseleave(function () { // событие клика по веб-документу
$(".popmenu", this).hide();
$(".popmenu-top", this).hide();
});
$(document).mouseup(function (e) { // событие клика по веб-документу
var div = $(".popmenu").not('.open'); // тут указываем ID элемента
//console.log(e);
if (!div.is(e.target) // если клик был не по нашему блоку
&& div.has(e.target).length === 0) { // и не по его дочерним элементам
if (e.target.id !== 'search' && e.target.className !== 'popbody') {
//div.hide();
$('.popmenu').not('.nothide').removeClass('open');
$(".popmenu-top", this).hide();
}
else return true;
}
});
$(document).mouseup(function (e) { // событие клика по веб-документу
var div = $("#subwindow"); // тут указываем ID элемента
if (!div.is(e.target) // если клик был не по нашему блоку
&& div.has(e.target).length === 0) { // и не по его дочерним элементам
$('#subwindow').removeClass('open').empty();
}
});
$("#swStart").datepicker({
dateFormat: 'yy-mm-dd',
firstDay: 1,
dayNamesMin: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],
monthNamesShort: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],
changeMonth: true,
changeYear: true
});
$("#swEnd").datepicker({
dateFormat: 'yy-mm-dd',
firstDay: 1,
dayNamesMin: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],
monthNamesShort: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],
changeMonth: true,
changeYear: true
});
$(document).on('click', '.pop', function () {
var element = $(this).find('.popmenu');
var wH = $(window).height();
var wW = $(window).width();
var eTop = wH - Math.round($(this).offset().top + 30);
var dId = $(this).data('id');
var hPop = element.height();
var hPopB = 0;
var hBody = 0;
if (!isMobile) {
if (element.find('.popblock').is('div')) hPopB = element.find('.popblock').actual('height');
hBody = hPop - element.find('.pophead').actual('height') - hPopB;
element.find('.popbody').css({"height": hBody + "px"});
}
else {
element.css({'height': wH + 'px', 'width': wW + 'px', 'left': '0', 'top': '0'});
element.find('.left-triangle-before').remove();
element.find('.left-triangle-after').remove();
hBody = wH - element.find('.pophead').outerHeight() - element.find('.popblock').outerHeight() - 5;
element.find('.popbody').css({"height": hBody + "px", "max-height": hBody + "px"});
}
if (!element.hasClass('open')) {
$(this).closest('ul').find('.popmenu').removeClass('open');
element.toggleClass('open');
element.find('.left-triangle-before').css({"bottom": eTop + "px"});
element.find('.left-triangle-after').css({"bottom": eTop + "px"});
if (dId === 'todo') {
element.find('.popbody').css({"height": hBody + "px"});
if (!isMobile) $(".popbody").find('.nano').nanoScroller();
}
}
});
$('div.leftpop').bind('mouseover', function () {
var element = $(this).find('.popmenu');
element.addClass('open');
});
$(document).on('click', '.popcloser', function () {
if ($(this).closest('li').data('id') === 'search') {
$(this).closest('.popmenu').removeClass('open').css({"display": "none"});
var el = $('li.lpop');
el.off("click", popsearchhandler);
setTimeout(function () {
el.on("click", popsearchhandler);
}, 100);
}
else {
$(this).closest('.popmenu').removeClass('open').css({"display": "none"});
}
if (isMobile)
$('#rmenu').css({'z-index' : '28'});
return false;
});
if (isMobile || $(window).width() < 500) {
$('input.datum').each(function () {
this.setAttribute('type', 'date');
});
$('input.inputdate').each(function () {
this.setAttribute('type', 'date');
});
}
//расставляем периоды, если у селекта не установлен признак data-select="false"
$('#period').each(function () {
var $auto = $(this).data('select');
//console.log($auto);
if ($auto !== false) {
var $goal = $(this).data('goal');
var $elm = $('#' + $goal);
$elm.append($elm);
$elm.find('.dstart').val(period.calendarweek[0]);
$elm.find('.dend').val(period.calendarweek[1]);
$('option[data-period="calendarweek"]', this).prop('selected', true);
}
});
});
$(window).on('resize', function () {
if (this.resizeTO) clearTimeout(this.resizeTO);
this.resizeTO = setTimeout(function () {
$(this).trigger('resizeEnd');
}, 500);
if ($('#dialog').is(':visible')) {
$('#dialog').center();
$('.dialog-preloader').center();
$('#dialog_container').css('height', $(window).height());
}
$('.ui-layout-north').css("position", "absolute");
});
$(window).on('resizeend', 200, function () {
if (isMobilee.any() || $(window).width() < 767) {
isMobile = true;
isPad = false;
}
if ($(window).width() > 767) {
isMobile = false;
isPad = true;
}
if ($(window).width() > 1024) isPad = false;
getScreenSize();
});
$(window).load(function () {
});
$(document).on('click', '.toggler', function () {
var id = $(this).data('id');
$(this).closest('div').find('#' + id).toggleClass('hidden');
if ($('#' + id).hasClass('hidden')) localStorage.setItem(id, '');
else localStorage.setItem(id, 'show');
if (!isMobile) $('.nano').nanoScroller();
});
$(document).on('click', '.togglerbox', function () {
var id = $(this).data('id');
$(this).parents('div').find('#' + id).toggleClass('hidden');
$(this).closest('div').find('#mapic').toggleClass('icon-angle-up icon-angle-down');
if ($('#dialog').is(':visible'))
$('#dialog').center();
});
$(document).on('click', '.togglerfly', function () {
var id = $(this).data('id');
$('#' + id).toggleClass('hidden');
});
$(document).on('click', '#che', function checkAll() {
if ($(this).prop('checked')) {
$('#contentdiv').find('.mc').not(':disabled').prop('checked', true);
}
else {
$('#contentdiv').find('.mc').not(':disabled').prop('checked', false);
}
});
$(document).on('click', '.variants .list span', function () {
var st = $(this).html();
$(this).closest('.variants').find('input').val(st);
});
$(document).on('click', '.cardResizer', function () {
var pozi = $(this).data('pozi');
var h = $(this).prev('.cardBlock').data('height');
if (pozi === 'close') {
$(this).data("pozi", "open");
$(this).prev('.cardBlock').css('height', 'auto');
}
else {
$(this).data("pozi", "close");
$(this).prev('.cardBlock').css('height', h + 'px');
}
$(this).find('i').toggleClass('icon-angle-down icon-angle-up');
});
$(document).on('click', '.adder', function () {
var block = $(this).data('block');
var main = $(this).data('main');
var el = $('#' + main);
el.find('.' + block + ':last').clone(true).appendTo('#' + main);
if (el.find('.' + block + ':first').find('.phone').hasClass('required')) {
el.find('.' + block).not(':last').find('.phone').addClass('required');
el.find('.' + block).not(':last').find('.remover').removeClass('hidden');
}
el.find('.' + block).not(':last').find('.adder').remove();
el.find('.' + block + ':last').find('.phone').removeClass('required').val('');
//el.find('.' + block + ':last').find('.remover').remove();
});
$(document).on('click', '.remover', function () {
var main = $(this).data('parent');
var main2 = $(this).parent('.phoneBlock');
var block = main2.find('.adder').data('block');
var el = $('#' + main);
var count = el.find('.phone').length;
var count2 = main2.find('.adder').length;
var req = 0;
if (el.find('.phoneBlock:first-of-type').find('.phone').hasClass('required')) req = 1;
if (count > 0 && count2 === 0) $(this).parent('.phoneBlock').remove();
else {
main2.find('input').val('');
if (el.find('.' + block + ':first').find('.phone').hasClass('required')) main2.find('input').addClass('required');
}
var newcount = el.find('.phone').length;
if (newcount === 1 && req === 1) el.find('.phone').addClass('required');
else el.find('.' + block + ':last').find('.phone').removeClass('required');
});
$(document).on('click', '.closer', function () {
var $el = $('#swindow');
$el.css('left', '110vw');
$el.find('.header').html('Header');
$el.find('.body').html('Body');
ShowModal.fire({
etype: 'swindow',
action: 'closed'
});
});
$(document).on('click', '.clearinputs', function () {
$(this).parents('.cleared').find('input').val('');
//выполняем функцию
var fnc = $(this).data('func');
if (fnc)
eval(fnc)();
});
/**
* Управление iframe
*/
$(document).off("click", '#ctitle #close');
$(document).on("click", '#ctitle #close', function () {
if (isFrame)
parent.$(parent.document).trigger('iframeClose');
else
window.close();
});
$(document).off("click", '.smframe--close');
$(document).on("click", '.smframe--close', function (e) {
parent.$(parent.document).trigger('iframeClose');
e.preventDefault();
e.stopPropagation();
});
$(document).on('click', '.smframe--url', function (e) {
var url = e.currentTarget.dataset.url;
window.open(url);
parent.$(parent.document).trigger('iframeClose');
});
$(document).off("iframeClose");
$(document).on("iframeClose", function (e) {
$('.smframe--container').css({"left": "110vw"});
$('iframe#smframe').attr('src', '');
$('.smframe--url').data('url', '');
e.preventDefault();
e.stopPropagation();
return false;
});
/**
* Мобильная версия меню
*/
$(document).on('click', '.menuToggler', function () {
$('.menu--mobile').toggleClass('hidden');
$(this).find('i').toggleClass('icon-menu icon-cancel');
});
$(document).on('click', '.navlink', function () {
$('.menu--mobile').addClass('hidden');
$('.menuToggler').find('i').toggleClass('icon-menu icon-cancel');
return true
});
$(document).on('click', '.showpass', function (e) {
var input = $(this).siblings('input[data-type="password"]');
var prop = input.prop('type');
//console.log(prop);
if (prop === 'password') input.prop('type', 'text');
else input.prop('type', 'password');
$('.showpass').find('i').toggleClass('icon-eye icon-eye-off');
});
$(document).on('mouseleave', '.showpass', function (e) {
var input = $(this).siblings('input[data-type="password"]');
var prop = input.prop('type');
if (prop === 'text') {
input.prop('type', 'password');
$('.showpass').find('i').toggleClass('icon-eye-off icon-eye');
}
});
$(document).on('click', '.popblock:not(.disabled)', function () {
$('.popblock').not(this).removeClass('open');
$(this).addClass('open');
$(this).find('#mapii').toggleClass('icon-angle-down icon-angle-up');
});
$(document).on('mouseup', function (e) { // событие клика по веб-документу
//console.log(e);
// тут указываем элемент
var $elm = $(e.target).closest(".popblock-menu");
var $trgt = $('a[data-tip="filter"]');
//console.log($elm.length);
// и не по его дочерним элементам
if ($elm.length === 0/* && e.target.attributes[0].type !== "text"*/) {
if (e.target.type === "text")
return false;
//скрываем все остальные меню
$(".popblock-menu:not(.not-hide)").each(function () {
$(this).closest('.popblock').removeClass('open');
$(this).find('#mapii').addClass('icon-angle-down').removeClass('icon-angle-up');
});
}
});
/**
* Показ fullscreen-модального окна
* Применяется для экспресс-отчетов, списка дублей, анкет по сделкам
* @param url
* @param header
*/
function getSwindow(url, header) {
var $el = $('#swindow');
var str = $('#swForm').serialize();
$('.period').removeClass('active');
$('.period[data-period="month"]').addClass('active');
$el.find('.footer').removeClass('hidden');
$el.find('.header').html(header);
$el.find('#swUrl').val(url);
$el.find('.body').empty().append('
Загрузка данных...
');
$.get(url, 'period=month', function (data) {
$el.find('.body').html(data);
/**
* В Хроме сочетание ellipsis и работают не корректно
*/
if(isChrome){
$el.find('.ellipsis').find('a').each(function(){
var txt = $(this).html().replace(' ','');
$(this).html(txt);
});
}
});
$el.css('left', '0');
ShowModal.fire({
etype: 'swindow',
action: 'opened'
});
}
$(document).on('click', '#swindow a.period', function () {
var urli = $('#swUrl').val();
var period = $(this).data('period');
var $el = $('#swindow');
var str = $('#swForm').serialize() + '&period=' + period;
$('#swPeriod').val(period);
$el.find('.body').empty().append(' Загрузка данных...
');
$('.period').removeClass('active');
$(this).addClass('active');
$.ajax({
type: "GET",
url: urli,
data: str,
success: function (viewData) {
$el.find('.body').html(viewData);
/**
* В Хроме сочетание ellipsis и работают не корректно
*/
if(isChrome){
$el.find('.ellipsis').find('a').each(function(){
var txt = $(this).html().replace(' ',' ');
$(this).html(txt);
});
}
}
});
});
$(document).on('change', 'select[data-action="period"]', function (e) {
var $period = $('option:selected', this).data('period');
var $goal = $(this).data('goal');
var $elm = $('#' + $goal);
var $func = $(this).data('js');
if ($period !== undefined) {
$elm.find('.dstart').val(period[$period][0]);
$elm.find('.dend').val(period[$period][1]);
}
else {
$elm.find('.dstart').val('');
$elm.find('.dend').val('');
}
if ($func)
eval($func)();
e.preventDefault();
e.stopPropagation();
return false;
});
// удаление неразрывных пробелов в хроме
function clearNBSP(){
//console.log(isChrome);
if(isChrome){
$('#contentdiv').find('.ellipsis').find('a').each(function(){
var txt = $(this).html().replace(' ','');
$(this).html(txt);
//console.log(txt);
});
}
}
function emptySelect() {
$('.yselectBox').find('input[type=checkbox]:checked').prop('checked', false);
var $f = $('.ydropDown').find('.ydropCount');
$f.html('0 ' + $language.all.Selected);
window.location.hash = '';
try {
configpage();
}
catch (e) {
}
$('select:first').prop('selected', true);
}
function popmenu() {
if ($(this, '.popmenu').css('display') === 'none') {
$(this, '.popmenu').css('display', 'block');
}
else {
$(this, '.popmenu').css('display', 'none');
}
return false;
}
/**
* Установка выбранного значения
*/
function yDropSelectSetText() {
$('.ydropDown').each(function () {
var count = $(this).find('input[type="radio"]:checked').size();
if (count > 0) {
$(this).find('input[type="radio"]:checked').trigger('click');
}
else {
$(this).find('input[type="radio"]:first').trigger('click');
$(this).find('.ydropString.yRadio:first').trigger('click');
}
});
}
/**
* Выбор/Снятие выбора всех чекбоксов в списках
*/
function checkb() {
if ($('#che').attr('checked')) {
$('.mc').attr('checked', true);
}
else {
$('.mc').attr('checked', false);
}
}
/**
* Обновляет содержимое элемента #element с загрузкой по url
* Может применяться для содержимого окна #dialog
* @param element
* @param url
* @returns {boolean}
*/
function refresh(element, url) {
var $dialog = $('#dialog');
var $message = $('#message');
$message.empty().css('display', 'block').append(' Загрузка данных...
');
$.get(url, function (data) {
$dialog.center();
$message.empty().css('display', 'none');
$('#' + element).html(data);
}).success(function () {
$dialog.find("a.button:contains('Отмена')").addClass('bcancel').prepend('');
$dialog.find("a.button:contains('Закрыть')").addClass('bcancel').prepend('');
$dialog.find("a.button:contains('Сохранить')").prepend('');
$dialog.find("a.button:contains('Добавить')").prepend('');
});
return false;
}
/**
* Обновляет содержимое элемента #element с загрузкой по url
* Применимость: списки, в которых есть чекбокс, выделяющий все чекбоксы
* @param element
* @param url
* @returns {boolean}
*/
function reLoad(element, url) {
$.get(url, function (data) {
$('#' + element).empty().html(data);
})
.success(function () {
})
.complete(function () {
checkB();
$('#ch').attr('checked', false);
$('#rez').empty();
});
$(".popmenu").hide();
$(".popmenu-top").hide();
if (!isMobile) $(".nano").nanoScroller();
return false;
}
/**
* Открытие url в модальном окне. Используется для вызова форм
* @param url
* @returns {boolean}
*/
function doLoad(url) {
var $dialog = $('#dialog');
var $resultdiv = $('#resultdiv');
var $container = $('#dialog_container');
var $preloader = $('.dialog-preloader');
$container.css('height', $(window).height());
$dialog.css('width', '500px').css('height', 'unset').css('display', 'none');
$container.css('display', 'block');
$preloader.center().css('display', 'block');
$resultdiv.css('height','initial');
if(url !== undefined) {
$.ajax({
type: "GET",
url: url,
success: function (data) {
$resultdiv.empty().html(data);
doLoadAfter();
ShowModal.fire({
etype: 'dialog',
action: action
});
},
statusCode: {
404: function () {
DClose();
Swal.fire({
title: "Ошибка 404: Страница не найдена!",
type: "warning"
});
},
500: function () {
DClose();
Swal.fire({
title: "Ошибка 500: Ошибка сервера!",
type: "error"
});
}
}
});
}
$(".popmenu").hide();
$(".popmenu-top").hide();
$('#editfield').remove();
return false;
}
/**
* Постобработка, после загрузки форм
* Позволяет открыть любую страницу в модальном окне, в т.ч. с обработкой
* При этом содержимое окна загружается отдельно
* в отличие от функции doLoad
*
* @example
* ```js
*
* let id = $(this).data('id');
* let type = $(this).data('type');
* let url = "modules/corpuniver/view.corpuniver.php?action=slide&preview=yes&type=" + type + "&id=" + id;
*
* doLoad();
*
* $.get(url, function (data) {
* $('#resultdiv').empty().html(data);
* })
* .complete(function () {
* $('#dialog').center();
* doLoadAfter();
* });
*
* ```
*/
function doLoadAfter(){
var $dialog = $('#dialog');
var $resultdiv = $('#resultdiv');
var $container = $('#dialog_container');
var $preloader = $('.dialog-preloader');
$dialog.find("a.button:contains('Отмена')").addClass('bcancel').prepend('');
$dialog.find("a.button:contains('Закрыть')").addClass('bcancel').prepend('');
$dialog.find("a.button:contains('Сохранить')").prepend('');
$dialog.find("a.button:contains('Добавить')").prepend('');
$preloader.css('display', 'none');
$resultdiv.find('select').not('.multiselect').each(function () {
$(this).wrap("");
});
$('#contentdiv').find('select').not('.multiselect').each(function () {
if ($(this).closest('span').hasClass('select') === false) $(this).wrap("");
});
if (!isChrome) {
$('input[type="date"]').each(function () {
this.setAttribute('readonly', 'readonly');
});
$('input[type="time"]').each(function () {
this.setAttribute('readonly', 'readonly');
});
$('.inputdatetime').each(function () {
this.setAttribute('readonly', 'readonly');
});
$('.inputdate').each(function () {
//this.setAttribute('readonly', 'readonly');
});
}
if (isMobile && isChrome) {
//переформатируем дату для хром-подобных браузеров
//в мобильной версии
$('.inputdatetime').each(function () {
var val = $(this).val().replace(" ", "T");
$(this).val(val);
/*
console.log(val);
this.setAttribute('readonly', 'readonly');
*/
if(val === '')
$(this).val( moment().format('YYYY-MM-DDTHH:mm') );
});
}
//console.log(isMobile);
if (isMobile || $(window).width() < 500) {
$dialog.find('form').find('#formtabs').append('
');
$dialog.css({
'position': 'unset',
'margin': '0 auto',
'margin-bottom': '50px',
'width': '100vw',
'height': '100vh'
});
$container.css('overflow-y', 'auto');
//if(!isChrome) {
$('input.datum').each(function () {
this.setAttribute('type', 'date');
});
$('input.inputdate').each(function () {
this.setAttribute('type', 'date');
});
$('input.inputdatetime').each(function () {
this.setAttribute('type', 'datetime-local');
});
//}
$dialog.on('focus', 'input', function () {
$('#formtabs').scrollTo($(this), 500);
});
$dialog.on('focus', 'textarea', function () {
$('#formtabs').scrollTo($(this), 500);
});
}
if (!isMobile) {
$('input[type="date"]').each(function () {
this.setAttribute('type', 'text');
});
$('input[type="time"]').each(function () {
this.setAttribute('type', 'text');
});
$('input[type="datetime"]').each(function () {
this.setAttribute('type', 'text');
});
}
if (typeof doLoadCallback === 'function') doLoadCallback();
$dialog.css('display', 'block').center();
if ($('#isCard').val() === 'yes') {
$('body').css({'overflow-y': 'hidden'});
$('html').css({'overflow-y': 'hidden'});
}
/**
* Dadata. Автозаполнение адресов
*/
$('input[data-type="address"]').each(function () {
$(this).suggestions({
token: $dadata,
type: "ADDRESS",
count: 5,
formatResult: formatResult,
formatSelected: formatSelected,
onSelect: function (suggestion) {
//console.log(suggestion);
},
addon: "clear",
geoLocation: true
});
});
/*
$('input[data-type="name"]').each(function() {
$(this).suggestions({
token: $dadata,
type: "NAME",
count: 5,
onSelect: function (suggestion) {
console.log(suggestion);
}
});
});
*/
/**
* Реквизиты
*/
$('input[data-type="inn"]').each(function () {
$(this).suggestions({
token: $dadata,
type: "PARTY",
count: 5,
onSelect: function (suggestion) {
var dir, sdir, dirName;
$('#recv\\[castInn\\]').val(suggestion.data.inn);
$('#recv\\[castUrName\\]').val(suggestion.data.name.full_with_opf);
$('#recv\\[castUrNameShort\\]').val(suggestion.data.name.short_with_opf);
$('#recv\\[castOkpo\\]').val(suggestion.data.okpo);
$('#recv\\[castOgrn\\]').val(suggestion.data.ogrn);
$('#recv\\[castUrAddr\\]').val(suggestion.data.address.data.postal_code + ', ' + suggestion.data.address.value);
/*
$('#recv\\[castDirName\\]').val(suggestion.data.management.name);
$('#recv\\[castDirStatus\\]').val(suggestion.data.management.post);
$('#recv\\[castDirStatusSig\\]').val(suggestion.data.management.post);
*/
//если это НЕ ИП
if (suggestion.data.type !== 'INDIVIDUAL') {
dir = suggestion.data.management.name;
sdir = dir.split(' ');
dirName = sdir[0] + ' ' + sdir[1].charAt(0) + '. ' + sdir[2].charAt(0) + '.';
$('#recv\\[castKpp\\]').val(suggestion.data.kpp);
$('#recv\\[castDirName\\]').val(ucfirst(suggestion.data.management.post) + ' ' + suggestion.data.management.name);
$('#recv\\[castDirStatus\\]').val(ucfirst(suggestion.data.management.post));
$('#recv\\[castDirStatusSig\\]').val(ucfirst(suggestion.data.management.post));
$('#recv\\[castDirSignature\\]').val(dirName);
}
else {
dir = suggestion.data.name.full;
sdir = dir.split(' ');
dirName = ucfirst(sdir[0]) + ' ' + sdir[1].charAt(0) + '. ' + sdir[2].charAt(0) + '.';
$('#recv\\[castKpp\\]').val('0');
$('#recv\\[castDirName\\]').val(suggestion.data.name.full_with_opf);
$('#recv\\[castDirStatus\\]').val('Индивидуального предпринимателя');
$('#recv\\[castDirStatusSig\\]').val(ucfirst(suggestion.data.opf.full));
$('#recv\\[castDirSignature\\]').val(dirName);
$('#recv\\[castDirOsnovanie\\]').val('Свидетельства о регистрации индивидуального предпринимателя № .. от ..');
}
}
});
});
}
/**
* Функция преобразует строку (особенно содержащую пробелы) в строку для http-запросов
* В противном случае пробел будет разрушать запрос
* @param data
* @returns {string}
*/
function urlEncodeData(data) {
var query = [];
if (data instanceof Object) {
for (var k in data) {
query.push(encodeURIComponent(k) + "=" +
encodeURIComponent(data[k]));
}
return query.join('&');
}
else
return encodeURIComponent(data);
//return data;
}
function urlencode(text) {
var trans = [];
for (var i = 0x410; i <= 0x44F; i++) trans[i] = i - 0x350;
trans[0x401] = 0xA8;
trans[0x451] = 0xB8;
var ret = [];
for (var i = 0; i < text.length; i++) {
var n = text.charCodeAt(i);
if (typeof trans[n] != 'undefined') n = trans[n];
if (n <= 0xFF) ret.push(n);
}
return escape(String.fromCharCode.apply(null, ret));
}
function blockError() {
return true;
}
/**
* Центрирование элементов в окне
* @returns {jQuery}
*/
$.fn.center = function () {
var w = $(window);
//if ($(window).width() > 760) {
this.css("position", "absolute");
if (!isMobile || $(window).width() > 500) {
this.css("top", (w.height() - this.height()) / 2 + "px");
this.css("left", (w.width() - this.width()) / 2 + w.scrollLeft() + "px");
}
else {
this.css("top", "0px");
this.css("left", "0px");
}
return this;
//}
};
/**
* Функция позволяет менять css у элементов, в т.ч. :before, :after
* @param selector
* @param styles
* @param sheet
* @returns {Window}
*/
window.addRule = function (selector, styles, sheet) {
styles = (function (styles) {
if (typeof styles === "string") return styles;
var clone = "";
for (var p in styles) {
if (styles.hasOwnProperty(p)) {
var val = styles[p];
p = p.replace(/([A-Z])/g, "-$1").toLowerCase(); // convert to dash-case
clone += p + ":" + (p === "content" ? '"' + val + '"' : val) + "; ";
}
}
return clone;
}(styles));
sheet = sheet || document.styleSheets[document.styleSheets.length - 1];
if (sheet.insertRule) sheet.insertRule(selector + " {" + styles + "}", sheet.cssRules.length);
else if (sheet.addRule) sheet.addRule(selector, styles);
return this;
};
/**
* Адаптер функции addRule для jQuery
* $('.popmenu:before').addRule("top: 100px");
*/
if ($) $.fn.addRule = function (styles, sheet) {
addRule(this.selector, styles, sheet);
return this;
};
/**
* Своё событие при изменении позици элемента
* @param trigger
* @param millis
* @returns {*|jQuery|HTMLElement}
*/
$.fn.onPositionChanged = function (trigger, millis) {
if (millis == null) millis = 100;
var o = $(this[0]); // our jquery object
if (o.length < 1) return o;
var lastPos = null;
var lastOff = null;
setInterval(function () {
if (o == null || o.length < 1) return o; // abort if element is non existend eny more
if (lastPos == null) lastPos = o.position();
if (lastOff == null) lastOff = o.offset();
var newPos = o.position();
var newOff = o.offset();
if (lastPos.top != newPos.top || lastPos.left != newPos.left) {
$(this).trigger('onPositionChanged', {lastPos: lastPos, newPos: newPos});
if (typeof (trigger) == "function") trigger(lastPos, newPos);
lastPos = o.position();
}
if (lastOff.top != newOff.top || lastOff.left != newOff.left) {
$(this).trigger('onOffsetChanged', {lastOff: lastOff, newOff: newOff});
if (typeof (trigger) == "function") trigger(lastOff, newOff);
lastOff = o.offset();
}
}, millis);
return o;
};
/**
* Своё событие при изменении позици элемента
* @param trigger
* @param millis
* @returns {*|jQuery|HTMLElement}
*/
$.fn.onVisibleChanged = function (trigger, millis) {
if (millis == null) millis = 100;
var o = $(this[0]); // our jquery object
if (o.length < 1) return o;
var oldStatus = o.css('display');
setInterval(function () {
if (o == null || o.length < 1) return o; // abort if element is non existend eny more
if (oldStatus == null) oldStatus = o.css('display');
var newStatus = o.css('display');
if (oldStatus != newStatus) {
$(this).trigger('onVisibleChanged', {status: newStatus});
if (typeof (trigger) == "function") trigger(newStatus);
oldStatus = o.css('display');
}
}, millis);
return o;
};
/**
* Управление форматом инпутов с телефонами
* @param format
* @returns {$}
*/
$.fn.phoneFormater = function (format) {
var $mask = format;
var $length = this.val().replace(/\D+/g, "").length;
var element = this.parent('.phoneBlock');
var block = element.find('.adder').data('block');
var main = element.find('.adder').data('main');
var el = $('#' + main);
if ($length > 11) $mask = '99 999 9999-99999';
this.unsetMask();
this.setMask({
mask: $mask,
autoTab: true,
maxLength: 14,
onValid: function () {
if ($length > 3 && !$(this).hasClass('masked')) {
el.find('.' + block + ':last').clone(true).appendTo('#' + main);
el.find('.' + block).not(':last').find('.adder').remove();
el.find('.' + block + ':last').find('.phone').removeClass('required').val('');
if (el.find('.' + block + ':first').find('.phone').hasClass('required')) {
el.find('.' + block).not(':last').find('.phone').addClass('required');
}
el.find('.' + block + ':last').find('.remover').removeClass('hidden');
el.find('.' + block + ':last').find('.phone').css({"background": ""});
$(this).addClass('masked');
}
//return false;
}
});
return this;
};
/**
* Автоматическое увеичение размера текстового поля
* @param maxHeight - максимальая высота поля
* @param rows - количество строк при инициализации
* @returns {$}
*/
$.fn.autoHeight = function (maxHeight, rows) {
if (rows === 'undefined') rows = 1;
this.trigger('input');
this.each(function () {
$(this).attr('rows', rows);
resize($(this));
$('#dialog').center();
});
this.off('input');
this.on('input', function () {
resize($(this));
$('#dialog').center();
});
function resize($text) {
$text.css({'min-height': '100px', 'height': $text[0].scrollHeight + 'px', 'overflow-y': 'hidden'});
//if($text[0].scrollHeight > maxHeight) $text.css({'height': (maxHeight) + 'px', 'overflow-y':'auto'});
$('#dialog').center();
}
return this;
};
/**
* Перехват события изменения поля типа input
* example: Use it like: $('input').on('inputchange', function() { console.log(this.value) });
* https://stackoverflow.com/questions/1443292/how-do-i-implement-onchange-of-input-type-text-with-jquery
* @type {{add: $.event.special.inputchange.add, setup: $.event.special.inputchange.setup, teardown: $.event.special.inputchange.teardown}}
*/
$.event.special.inputchange = {
setup: function() {
var self = this, val;
$.data(this, 'timer', window.setInterval(function() {
val = self.value;
if ( $.data( self, 'cache') != val ) {
$.data( self, 'cache', val );
$( self ).trigger( 'inputchange' );
}
}, 20));
},
teardown: function() {
window.clearInterval( $.data(this, 'timer') );
},
add: function() {
$.data(this, 'cache', this.value);
}
};
/**
* Сериализация элементов формы без формы
*/
(function($){
$.fn.serializeAny = function() {
var ret = [];
$.each( $(this).find(':input'), function() {
ret.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( $(this).val() ) );
});
return ret.join("&").replace(/%20/g, "+");
}
})(jQuery);
$('#dialog').onVisibleChanged(function () {
if ($('#dialog').css('display') === 'none') $('body').css('overflow-y', 'auto');
});
/**
* Закрытие модального окна
* @constructor
*/
function DClose() {
if (editor && ehtml !== '') {
$('#dialog #content').val(ehtml);
editor.destroy();
editor = null;
$('.nano').css('height', '100%');
}
$('#subwindow').removeClass('open');
$('#resultdiv').empty();
$('#dialog_container').css('display', 'none');
$('.dialog-preloader').css('display', 'none');
$('#dialog').css({
'display': 'none',
'width': '500px',
'height': 'unset',
'position': 'absolute',
'margin': 'unset'
}).center();
if ($('#isCard').val() === 'yes') {
$('body').css('overflow-y', 'auto');
$('html').css('overflow-y', 'auto');
}
ShowModal.fire({
etype: 'dialog',
action: 'closed'
});
}
/**
* Форматирование суммы
* @param n
* @param d
* @param s
* @returns {string | *}
*/
function setNumFormat(n, d, s) {
if (arguments.length === 2) {
s = "`";
}
if (arguments.length === 1) {
s = "`";
d = ",";
}
n = n.toString();
a = n.split(d);
x = a[0];
y = a[1];
z = "";
if (typeof(x) !== "undefined") {
for (i = x.length - 1; i >= 0; i--)
z += x.charAt(i);
z = z.replace(/(\d{3})/g, "$1" + s);
if (z.slice(-s.length) === s)
z = z.slice(0, -s.length);
x = "";
for (i = z.length - 1; i >= 0; i--)
x += z.charAt(i);
if (typeof(y) !== "undefined" && y.length > 0)
x += d + y;
}
return x;
}
//
function getCookie(name) {
var cookie = " " + document.cookie;
var search = " " + name + "=";
var setStr = null;
var offset = 0;
var end = 0;
if (cookie.length > 0) {
offset = cookie.indexOf(search);
if (offset != -1) {
offset += search.length;
end = cookie.indexOf(";", offset)
if (end == -1) {
end = cookie.length;
}
setStr = unescape(cookie.substring(offset, end));
}
}
return (setStr);
}
function setCookie(name, value, options) {// https://learn.javascript.ru/cookie
options = options || {};
var expires = options.expires;
if (typeof expires == "number" && expires) {
var d = new Date();
d.setTime(d.getTime() + expires * 1000);
expires = options.expires = d;
}
if (expires && expires.toUTCString) {
options.expires = expires.toUTCString();
}
value = encodeURIComponent(value);
var updatedCookie = name + "=" + value;
for (var propName in options) {
updatedCookie += "; " + propName;
var propValue = options[propName];
if (propValue !== true) {
updatedCookie += "=" + propValue;
}
}
document.cookie = updatedCookie;
}
function deleteCookie(name) {
setCookie(name, "", {
expires: -1
})
}
function getScreenSize() {
var h = $(window).height();
var w = $(window).width();
document.cookie = 'width=' + w + '; path=/; samesite=strict';
document.cookie = 'height=' + h + '; path=/; samesite=strict';
}
function checkuserpass(pwd) {
var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
var enoughRegex = new RegExp("(?=.{6,}).*", "g");
var userpass = $('#' + pwd).val();
var iduser = $('#iduser').val();
var cot = $('.green').length;
var cc = 1;
if (iduser > 0 && userpass === '') {
$('#passstrength').html('').addClass('hidden');
$('#' + pwd).removeClass('red').addClass('green');
$('#fakebutton').addClass('hidden');
$('#submitbutton').removeClass('hidden');
}
else {
if (false === enoughRegex.test(userpass)) {
$('#passstrength').removeClass('hidden').html(' Должно быть больше 6 символов');
$('#' + pwd).removeClass('green').addClass('red');
$('#submitbutton').addClass('hidden');
$('#fakebutton').removeClass('hidden');
}
else if (strongRegex.test(userpass)) {
$('#passstrength').removeClass().addClass('green').html(' Сложный. Великолепно!');
$('#' + pwd).removeClass('red').addClass('green');
}
else if (mediumRegex.test(userpass)) {
$('#passstrength').removeClass().addClass('blue').html(' Средний. Еще немного!');
$('#' + pwd).removeClass('red').addClass('green');
}
else {
$('#passstrength').removeClass().addClass('red').html(' Проверь раскладку');
$('#' + pwd).removeClass('green').addClass('red');
$('#submitbutton').addClass('hidden');
$('#fakebutton').removeClass('hidden');
}
}
if ($('#email').is('input') || $('#mail_url').is('input')) cc = 0;
if (cot > cc) {
$('#submitbutton').removeClass('hidden');
$('#fakebutton').addClass('hidden');
}
return true;
}
function addTagInEditor(txtar, myitem) {
if (!editor) {
var textt = $('#' + txtar).val();
$('#' + txtar).val(textt + myitem);
}
else {
var oEditor = CKEDITOR.instances.suffix;
oEditor.insertHtml(myitem);
}
return true;
}
function insTextAtCursor(_obj_name, _text) {
var area = document.getElementsByName(_obj_name).item(0);
if ((area.selectionStart) || (area.selectionStart == '0')) {
var p_start = area.selectionStart;
var p_end = area.selectionEnd;
area.value = area.value.substring(0, p_start) + _text + area.value.substring(p_end, area.value.length);
}
if (document.selection) {
area.focus();
sel = document.selection.createRange();
sel.text = _text;
}
}
function strtr(str, from, to) {
// discuss at: http://phpjs.org/functions/strtr/
// original by: Brett Zamir (http://brett-zamir.me)
// input by: uestla
// input by: Alan C
// input by: Taras Bogach
// input by: jpfle
// bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// bugfixed by: Brett Zamir (http://brett-zamir.me)
// bugfixed by: Brett Zamir (http://brett-zamir.me)
// depends on: krsort
// depends on: ini_set
// example 1: $trans = {'hello' : 'hi', 'hi' : 'hello'};
// example 1: strtr('hi all, I said hello', $trans)
// returns 1: 'hello all, I said hi'
// example 2: strtr('äaabaåccasdeöoo', 'äåö','aao');
// returns 2: 'aaabaaccasdeooo'
// example 3: strtr('ääääääää', 'ä', 'a');
// returns 3: 'aaaaaaaa'
// example 4: strtr('http', 'pthxyz','xyzpth');
// returns 4: 'zyyx'
// example 5: strtr('zyyx', 'pthxyz','xyzpth');
// returns 5: 'http'
// example 6: strtr('aa', {'a':1,'aa':2});
// returns 6: '2'
var fr = '',
i = 0,
j = 0,
lenStr = 0,
lenFrom = 0,
tmpStrictForIn = false,
fromTypeStr = '',
toTypeStr = '',
istr = '';
var tmpFrom = [];
var tmpTo = [];
var ret = '';
var match = false;
// Received replace_pairs?
// Convert to normal from->to chars
if (typeof from === 'object') {
tmpStrictForIn = this.ini_set('phpjs.strictForIn', false); // Not thread-safe; temporarily set to true
from = this.krsort(from);
this.ini_set('phpjs.strictForIn', tmpStrictForIn);
for (fr in from) {
if (from.hasOwnProperty(fr)) {
tmpFrom.push(fr);
tmpTo.push(from[fr]);
}
}
from = tmpFrom;
to = tmpTo;
}
// Walk through subject and replace chars when needed
lenStr = str.length;
lenFrom = from.length;
fromTypeStr = typeof from === 'string';
toTypeStr = typeof to === 'string';
for (i = 0; i < lenStr; i++) {
match = false;
if (fromTypeStr) {
istr = str.charAt(i);
for (j = 0; j < lenFrom; j++) {
if (istr == from.charAt(j)) {
match = true;
break;
}
}
}
else {
for (j = 0; j < lenFrom; j++) {
if (str.substr(i, from[j].length) == from[j]) {
match = true;
// Fast forward
i = (i + from[j].length) - 1;
break;
}
}
}
if (match) {
ret += toTypeStr ? to.charAt(j) : to[j];
} else {
ret += str.charAt(i);
}
}
return ret;
}
function striptags(str) {
// Strip HTML and PHP tags from a string
//
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
return str.replace(/<\/?[^>]+>/gi, '');
}
function in_array(needle, haystack, strict) {
// Checks if a value exists in an array
//
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
var found = false, key, strict = !!strict;
for (key in haystack) {
if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
found = true;
break;
}
}
return found;
}
function ucfirst(str) {
var first = str.charAt(0).toUpperCase();
return first + str.substr(1).toLowerCase();
}
/*
Удаление элемента из массива.
String value: значение, которое необходимо найти и удалить.
return: массив без удаленного элемента; false в противном случае.
*/
/*Ссылки на просмотр или переход в карточку*/
function openClient(id, hash) {
var str = (hash) ? '#' + hash : '';
window.open('/card.client?clid=' + id + str);
return false;
}
function openPerson(id) {
window.open('/card.person?pid=' + id);
return false;
}
function openDogovor(id, hash) {
var str = '';
if (!hash)
str = '';
else if (hash !== "undefined") str = '#' + hash;
window.open('/card.deal?did=' + id + str);
return false;
}
function yNotifyMe(data) {
data = data.split(",");
var title = data[0];
var content = data[1];
var img = data[2];
var id = data[3];
var url = data[4];
var notification;
if(Notification.permission === 'granted') {
if (("Notification" in window)) {
if (Notification.permission === "granted") {
notification = new Notification(title, {
lang: 'ru-RU',
body: content,
icon: '/assets/images/' + img,
tag: id
});
}
// В противном случае, мы должны спросить у пользователя разрешение
else if (Notification.permission === 'default') {
Notification.requestPermission(function (permission) {
// Не зависимо от ответа, сохраняем его в настройках
if (!('permission' in Notification)) {
Notification.permission = permission;
}
// Если разрешение получено, то создадим уведомление
if (permission === "granted") {
var notification = new Notification(title, {
lang: 'ru-RU',
body: content,
icon: '/assets/images/' + img,
tag: id
});
}
});
}
else return true;
notification.onshow = function () {
var wpmupsnd = new Audio("/assets/images/mp3/bigbox.mp3");
wpmupsnd.volume = 0.2;
wpmupsnd.play();
};
notification.onclick = function () {
if ($('#mid').is('input')) {
razdel('inbox');
}
else {
//ymailw = window.open('ymail.php');
//ymailw.focus();
$mailer.preview(id);
}
};
}
else
return true;
}
else{
Swal.fire({
icon: 'info',
imageUrl: '/assets/images/' + img,
position: 'bottom-end',
background: "var(--blue)",
title: '' + title + '
',
html: '' + content + '
',
showConfirmButton: false,
timer: 1500
});
}
}
function yNotifyCheck() {
if (("Notification" in window)) {
if (Notification.permission === 'default') {
Notification.requestPermission(function (permission) {
// Не зависимо от ответа, сохраняем его в настройках
if (!('permission' in Notification)) {
Notification.permission = permission;
}
});
}
else return true;
}
else return true;
}
/**
* Проверка обязательных полей перед отправкой
* включая чекбосы и радио-кнопки
* .required - input, select, textarea
* .multireq - блок, который оборачивает multiselect
* .req - блок, который оборачивает группу radio, checkbox
* эти блоки будут подсвечиваться как обязательные + в них будут искаться элементы
* которые должны быть заполнены
* РАБОТАЕТ
*/
function checkRequired(forma) {
var $req1, $req2, $req3;
var $block = $('#dialog');
//если диалоговое окно открыто
//то ищем id формы, т.к. полюбому мы проверяем заполненные поля в ней
if ($block.is(':visible'))
forma = $block.find('form').attr('id');
if (forma && forma !== 'undefined') {
var $form = $('#' + forma);
$req1 = $form.find(".required");
$req2 = $form.find(".req").not('.ydropDown.like-input');//.not('.like-input');
$req3 = $form.find(".multireq");
}
else {
$req1 = $(".required");
$req2 = $(".req").not('.ydropDown.like-input');//.not('.like-input');
$req3 = $(".multireq");
}
var em = 0;
/*
Проходим обычные поля: input, select, textarea
*/
$req1.removeClass("empty").css({"color": "inherit", "background": "#FFF"});
$req1.each(function () {
var $val = $(this).val();
if ($val === '') {
$(this).addClass("empty").css({"color": "#222", "background": "#FFE3D7"});
em++;
}
});
/*
Проходим поля выбора: radio, checkbox
*/
$req2.removeClass("warning");
$req2.each(function () {
var value = $(this).find('input:checked').val();
//кол-во выбранных элементов
//var countSel = $('#' + $id + ':checked').length;
if (value === 'undefined' || value === undefined) {
$(this).addClass('warning');
em++;
}
});
/*
Проходим все поля с опцией multiselect
*/
$req3.removeClass("warning");
$req3.each(function () {
var $select = $(this).find('select');
//кол-во выбранных элементов
var countSel = $select.val().length;
if (countSel === 0) {
$(this).addClass('warning');
em++;
}
else $(this).removeClass('warning');
});
if (em > 0) {
Swal.fire({
title: "Ошибка",
text: "Не заполнено " + em + " обязательных полей\n\rОни выделены цветом",
type: "error"
});
$('#message').fadeTo(1, 0).css('display', 'none');
return false;
}
else return true;
}
function openPlugin(url) {
if (!openFrame)
window.open(url);
else {
$('#smframe').attr('src', '/' + url + '?face=frame');
$('.smframe--container').css({"left": "0"});
$('.smframe--url').removeClass('hidden').attr('data-url', '/' + url);
}
return false;
}
// Получение иконки по расширению файла
function getIconFile(name) {
var icon = '';
name = name.toLowerCase().substr(name.lastIndexOf('.') + 1);
switch (name) {
case 'txt':
case 'html':
case 'htm':
case 'shtml':
icon = '';
break;
case 'doc':
case 'docx':
case 'rtf':
icon = '';
break;
case 'pdf':
icon = '';
break;
case 'xls':
case 'xlsx':
icon = '';
break;
case 'ppt':
case 'pptx':
icon = '';
break;
case 'jpeg':
case 'jpe':
case 'jpg':
case 'gif':
case 'png':
case 'bmp':
icon = '';
break;
case 'zip':
case 'tar':
case 'rar':
case 'z':
case 'exe':
case 'bin':
case 'dat':
icon = '';
break;
case 'wav':
case 'mp1':
case 'mp2':
case 'mp3':
case 'mid':
icon = '';
break;
case 'mpeg':
case 'mpg':
case 'mov':
case 'avi':
case 'rm':
case 'mp4':
icon = '';
break;
default:
icon = '';
}
return icon;
}