frm[100] = {
    init: function () {
        debug.cnsl('init');
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.ma = data.ma;
            frmo.emails = data.emails;
            frmo.process.emails();
            frmo.homeAs = true;
            // analytics.start();
        });
    },
    process: {
        emails: function () {
            if (!isDefined(frmo.newRow)) frmo.newRow = $('#mailTable tr').remove().clone();
            var mailTable = e('mailTable');
            for (var i in frmo.emails) {
                var em = frmo.emails[i];
                var tr = e(null, mailTable, 'tr');
                e(null, tr, 'td', 'table-inbox-message text-bold').innerHTML = '
' + em['subject'] + ' сообщение от ' + em['name'] + '
' +
                    '' + em['message'] + '';
                e(null, tr, 'td', 'table-inbox-time').innerHTML = parseDate.shortDate(em['date']);
            }
        }
    }
};
        frm[105] = {
    searchMinLength: 3,
    init:function(){
        frmo.searchInit();
        frmo.buttons();
        frmo.findLine = $('#listBody .findLine').html();
        $('#listBody').empty();
        frmo.search();
    },
    searchInit: function () {
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.extParams = data['searchParams']['ext'];
            frmo.searchParams.getSelect(data['searchParams'], frmo.getHrefSearch);
        });
    },
    search: function (i) {
        var sText = $('input[name="sw"]').val();
        frmo.searchQ = new Object();
        frmo.searchQ = ff.toObj('searchRequest');
        debug.cnsl(frmo.searchQ);
        if (sText.length == 0 || sText.length >= frmo.searchMinLength) {
            j.post(['init', 'start'], function (data) {
                $('.result').show();
                debug.cnsl(data);
                frmo.dataProcess(data);
                // window.href = frmo.getCurSituationsLink();
                // location.href = frmo.getCurSituationsLink();
                // location.hash = frmo.getCurSituationsLink();
            }, frmo.searchQ);
        }
        else {
            message('Minimum ' + frmo.searchMinLength + ' chart!', 3);
            $('.result').hide();
        }
    },
    searchParams:{
        getSelect: function (data, callback) {
            for (var own in data.owners){
                /*if (own == sett.user.id)$('select[name="createUser"]').append('');
                else */
                    $('select[name="createUser"]').append('');
            }
            for (var upd in data.updaters){
                $('select[name="updateUser"]').append('');
            }
            for (var ex in data.ext){
                $('select[name="ext"]').append('');
            }
	        for (var ch in data.channels){
		        $('select[name="chid"]').append('');
	        }
	        for (var ct in data.categories){
		        $('select[name="ctid"]').append('');
	        }
	        for (var statCS in data.statusesOnCS){
		        $('select[name="csStatus"]').append('');
	        }
	        for (var cs in data.cServers){
		        $('select[name="csId"]').append('');
	        }
	        callback();
        }
    },
    dataProcess: function (data) {
        $('#listBody').empty();
        var tbl = e('listBody');
        if(data.allFinds>0) $('.allFinds').text('Showing ' + data.showed + ' of ' + data.allFinds + ' found');
        else {
            $('.allFinds').html('Nothing found');
            $('.searList').fadeIn(500);
            e(null, e(null, tbl, 'tr', 'findLine'), 'td')
                .a('colspan', '8')
                .a('style', 'text-align: center;')
                .t('Nothing found, please try another search parameters or update search params and try again');
        }
        var line = frmo.findLine;
        var el = data['searchRezult'];
        if (isDefined(data['searchRezult'])) {
            $('.searList').fadeIn(500);
            for (var key in data.searchRezult) {
                var keys = data.searchRezult[key]['id'];
                var tr = e(keys, tbl, 'tr', 'findLine status' + el[key]['status'] );
                $(tr).html(line);
                e(keys, tbl, 'tr');
                for (var t in el[key]) {
                    var td = el[key];
                    if ($('td.' + t)) {
                        var cont = td[t];
                        if (t == 'imgId') {
                            var hr = nav.link(213,[keys]);
                            cont = '
 ';
                           // cont = '';
                        }
                        else if (t == 'productName') {
                            // var hr = '/media/detail/' + keys;
                            var hr = nav.link(213,[keys]);
                            // cont = '' + cont + '';
                            cont = '' + cont + '';
                        }
                        else if (t == 'active') {
                            cont =
                                cont=='0' ? 'неактивен'
                                   : 'включен';
                        }
                        else if (t == 'createDate') cont = parseDate.shortDate(cont) + '
 ' + td.createUser;
                        $('#' + keys + ' td.' + t).html(cont);
                    }
                }
                e(null, tr, 'span', 'secretDelete').t('X').a('title', 'Delete this MID');
            }
            $('.secretDelete').off().on('click', function (ev) {
                var mid = $(ev.target).parents('tr.findLine')[0].id;
                if (confirm('Delete this video?')){
                    j.post(['delete'], function (data) {
                        if(data.status) {
                            message('Video deleted successfully', 1);
                            $('#'+mid).hide();
                        }
                        else message('System error!', 0);
                    }, {id: mid});
                }
            });
            $('.midImg').off().on('mousedown', function (ev) {
                debug.cnsl('mousedown');
                debug.cnsl(ev.which);
                if(ev.which==1){
                    ev.preventDefault();
                    ev.stopImmediatePropagation();
                    ev.target.src = ev.target.dataset.src;
                    ev.target.play();
                    ev.target.controls=true;
                    // $(ev.target).css('width', '120px');
                    $(ev.target).css('height', 'auto');
                    $(ev.target).css('min-height', '80px');
                }
            });
        }
    },
    tmstmpDate: function(tmst){
        var date = new Date(tmst);
        var m = date.getMonth() + 1;
        date = (date.getFullYear()+"-"+m+"-"+date.getDate());
        //debug.cnsl(date);
        date = parseDate.shortDate(date);
        return date;
    },
    buttons:function () {
        $('#searchMediaBtn').off().on('click', function () {
            frmo.search();
        });
        $('input[type="range"]').on( 'input', function(e){ frmo.range(e.target)});
        if(!isDefined(perValue)) var perValue = '';
        $('input[name="sw"]').off()
            .on('keypress', function (e) {
                if (e.which == 13) {
                    e.preventDefault();
                    e.stopImmediatePropagation();
                }})
            .on('keyup', function (e) {
                if (e.which == 13) {
                    e.preventDefault();
                    e.stopImmediatePropagation();
                    frmo.search();
                }
                var sText = $('input[name="sw"]').val();
                if(perValue == '') perValue = sText;
                else if(perValue != sText){
                    $('.result').fadeOut(500);
                    $('.searList').fadeOut(500);
                    perValue = sText;
                }
            });
        $('#shareSearch').off().on('click', function (e) {
            e.preventDefault();
            e.stopImmediatePropagation();
            var ll = frmo.getCurSituationsLink();
            copyToClipboard(ll);
        });
    },
    getCurSituationsLink:function () {
        var link = cpBaseUrl+'store/products/search?';
        var i = 0;
        for (var field in frmo.searchQ){
            if(field != 'formId' && frmo.searchQ[field] != ""){
                link += i==0 ? field+'='+encodeURIComponent(frmo.searchQ[field]) : '&'+field+'='+ encodeURIComponent(frmo.searchQ[field]);
                i++;
            }
        }
        return link;
    },
    getHrefSearch: function () {
        var shData = new Array();
        shData = document.location.href;
        shData = decodeURI(shData);
        shData = shData.split('?');
        debug.cnsl(shData);
        if(isDefined(shData[1])){
            shData = shData[1].split('&');
            for(var i in shData){
                var line = new Array();
                line = shData[i].split('=');
                var sel = '[name="' + line[0] + '"]';
                if(line[0] == 'ext' && line[1] !='all') frmo.searchParams.getRange(frmo.extParams[line[1]]);
                if((line[1] == 0 || line[1] == 1) && $(sel)[0].tagName=='INPUT') {
                    if (line[1] == 1) $(sel)[0].checked = 'checked';
                    else $(sel)[0].checked = '';
                }
                else $(sel).val(line[1]);
                if (isDefined($('input[type="range"][name="' + line[0] + '"]')[0])){
                    frmo.range(sel);
	                //debug.cnsl(line[0]);
                }
            }
            frmo.search();
        }
    },
    getMediaIcon: function(ext) {
		var icon = '';
		if(ext == null) icon = "icon-folder3";
		else if (ext == 'mp3') icon = "icon-music";
		else if (ext == 'mp4') icon = "icon-screen3";
		else if (ext == 'pdf') icon = "icon-file-pdf";
		else icon = "icon-file-empty";
		return icon;
	}
};
        frm[109] = {
    init:function(){
        if(!isDefined(frmo.newRow))frmo.newRow = $('.iprow').remove().clone();
        j.post(['init'], function (data) {
            if(!isDefined(frmo.dataIps))frmo.dataIps = data.ips;
            frmo.run.ipsList(data.ips);
        }, {});
    },
    run:{
        ipsList: function (ips) {
            $('#ipsTbody').empty();
            var ipRow;
            debug.cnsl(ips);
            if(isDefined(ips))$.each(ips, function (i, ip) {
                // debug.cnsl(module);
                ipRow = frmo.newRow.clone();
                ipRow[0].id = parseInt(ip.id);
                $.each(ip,function (fieldName,val) {
                    var td = $(ipRow).find('.'+fieldName);
                    if(fieldName=='expirationDate' || fieldName=='createDate') {
                        if(val == '0000-00-00')val = 'no expiration';
                        else val = parseDate.shortDate(val);
                    }
                    td.text(val);
                });
                ipRow.find('td.editable').on('click',function (e) {
                    $(this).off();
                    frmo.edit.td(e.target);
                });
                ipRow.appendTo('#ipsTbody').show();
            });
        },
        addLine:function () {
            if($('#new').is('tr')) {message('Click "Add" for previous line', 3); return;}
            var row = frmo.newRow.clone().show();
            debug.cnsl('addLine');
            $(row).find('td.ip').append('');
            $(row).find('td.date').append('');
            $(row).find('td.note').append('');
            $(row).find('button:not(.add), .status *').remove();
            $(row).find('button.add').show();
            $(row)[0].id = 'new';
            $(row).css('background-color','#8fbc8f');
            $('#ipsTbody').append(row);
            $("html, body").animate({ scrollTop: $(document).height() }, 1000);
        }
    },
    update:{
        td:function (e) {
            var id = $(e).parents('tr')[0].id;
            if($('#'+id+' input[name="ip"]').is()) {
                var ipVal = $('#' + id + ' input[name="ip"]').val().trim();
                debug.cnsl(ipVal);
                debug.cnsl(regex.ip.test(ipVal));
                if (!regex.ip.test(ipVal)) {
                    message('Invalid IP', 0);
                    return;
                }
            }
            var formData = ff.toObj(id);
            if (!isDefined(formData['id'])) formData['id'] = id;
            debug.cnsl(formData);
            j.post(['update','all'], function (data) {
                if(data.status){
                    message('Saved',1);
                    form.init();
                }
            }, formData);
        }
    },
    insert:function (e) {
        var formData = ff.toObj('new');
        if(!regex.ip.test(formData.ip)) {  message('Invalid IP', 0);    return; }
        if(formData.expirationDate=='')formData.expirationDate = '0000-00-00';
        if(formData.note==''){  message('Note field is required', 0);    return; }
        debug.cnsl(formData);
        j.post(['insert', 'new'], function (data) {
            if (data.status) {
                message('Saved', 1);
                frmo.init();
            }
            else {
                message('Not saved', 0);
                $('#new').css('background-color', '#deb887');
            }
        }, formData);
    },
    edit: {
        td: function (e) {
            var text = $(e).text().trim();
            var id = $(e).parents('tr')[0].id;
            var fieldName = $(e)[0].className;
            if (fieldName=='') fieldName = $(e).parents('td')[0].className;
            fieldName = fieldName.replace('editable','').replace('date','').replace('textarea','').trim();
            debug.cnsl(fieldName);
            $(e).empty();
            if( $(e).hasClass('ip') )  $(e).append('');
            else if( $(e).hasClass('textarea') )  $(e).append('');
            // else if( $(e).hasClass('selector') )  $(e).append($(frmo.modulListSelect).val(text.match(/\d+$/)[0]));
            else if( $(e).hasClass('date') )  $(e).append( '' );
            // else if($(e).not('.ip, .selector')) $(e).not('.textarea').append('');
            $(e).parents('tr').find('button.save').removeAttr('disabled');
        }
    },
    del:function (e) {
        if(confirm('Delete?')) j.post(['delete'], function (data) {
            if (data.status) {
                message('Deleted.');
                $(e).parents('tr').remove();
            }
        }, {id: $(e).parents('tr')[0].id });
    }
};
        frm[111] = {
    folder:'',
    mailCount : 0,
    page: 0,
    finish: 0,
    init:function(params){
        // debug.cnsl(params);
            frmo.folder = params.shift();
            frmo.page = params.shift();
            switch (frmo.folder) {
                case 'spamList': {
                    frmo.get.spamList();
                    break;
                }
                case 'starredList': {
                    frmo.get.starredList();
                    break;
                }
                case 'trashList': {
                    frmo.get.trashList();
                    break;
                }
                case 'list' :{
                    frmo.get.list();
                    break;
                }
                default: {
                    nav.goTo(111,['list',0]);
                    break;
                }
            }
    },
    get: {
        spamList:function () {
            j.post(['spamList'], function (data) {
                frmo.run.mailList(data);
                    title.insert('spamList', 'Spam mails');
                     $('#spamA').parent('li').addClass('active');
            }, {page:frmo.page});
        },
        starredList:function () {
            j.post(['starredList'], function (data) {
                frmo.run.mailList(data);
                    title.insert('starredList', 'Starred mails');
                     $('#starredA').parent('li').addClass('active');
            }, {page:frmo.page});
        },
        trashList:function () {
            j.post(['trashList'], function (data) {
                frmo.run.mailList(data);
                    title.insert('trashList', 'Trash mails');
                    $('#trashA').parent('li').addClass('active');
            }, {page:frmo.page});
        },
        list: function () {
            j.post(['init'], function (data) {
                frmo.run.mailList(data);
                $('#inboxA').parent('li').addClass('active');
            }, {page:frmo.page});
        }
    },
    run: {
        mailList: function (data) {
            // debug.cnsl(data);
            frmo.run.panel(data);
            var mailTable = $('#mailTable');
            var mailRow = mailTable.find('tr').remove().clone();
             if(isDefined(data.mails))
                 $.each(data.mails, function (i, mail) {
                mailRow.find('.table-inbox-time').text(parseDate.shortDate(mail.date));
                mailRow.find('.table-inbox-subject').text(mail.subject);
                mailRow.find('.table-inbox-preview').text(mail.message);
                mailRow.find('.table-inbox-name div').text(mail.name);
                if(mail.location != null)mailRow.find('.table-inbox-name .location').text(mail.location);
                else mailRow.find('.table-inbox-name .location').text('location NULL in DB');
                mailRow.find('.table-inbox-name .ip').text(mail.ip);
                if(mail.unread == '1') mailRow.addClass('unread'); else mailRow.removeClass('unread');
                if(mail.starred == '1') mailRow.addClass('starred'); else mailRow.removeClass('starred');
                if(mail.spam == '1') mailRow.addClass('spam'); else mailRow.removeClass('spam');
                if(mail.trash == '1') mailRow.addClass('trash'); else mailRow.removeClass('trash');
                mailRow[0].id = mail.id;
                mailRow.appendTo(mailTable).show();
                mailRow = mailRow.clone();
            });
            $('.table-inbox-preview').on('click',function (e) {
                $(this).toggleClass('table-inbox-textMessage');
                $('.table-inbox-message .unread').toggle();
                if($(this).parents('tr').hasClass('unread')) frmo.update(e.target, 'unread');
            });
            $('.table-inbox-message .unreadIcon').on('click', function (e) {
                frmo.update($(e.target).prev()[0], 'unread');
                $(e.target).prev().toggleClass('table-inbox-textMessage');
            });
        },
        panel:function (data) {
            var unread = data.unread;
            var today = data.today;
            var spam = data.spam;
            frmo.mailCount = data.mailCount;
            if(parseInt(today)>0){ $('#today').text(today);$('#todayinfo').show(); }
            $('#unread').text(unread);
            if(parseInt(spam)){
                if(parseInt(spam)>100) spam = '99+';
                $('#spam').text(spam);
            }
            $('#inboxA')[0].href=nav.link(111,['list',0]);
            $('#starredA')[0].href=nav.link(111,['starredList',0]);
            $('#spamA')[0].href=nav.link(111,['spamList',0]);
            $('#trashA')[0].href=nav.link(111,['trashList',0]);
            if(typeof frmo.mailCount != 'undefined') {
                $('#inboxAll').text(frmo.mailCount);
                if(parseInt(frmo.mailCount-frmo.page*50)>50) frmo.finish = parseInt(frmo.page)*50+50;
                else frmo.finish = parseInt(frmo.mailCount);
                $('#currentMailPagePossition').text( (parseInt(frmo.page)*50+1) + '-' + (frmo.finish) );
            }
            frmo.pagerService();
        }
    },
    pager: {
        next:function () {
            nav.goTo(111,[frmo.folder,parseInt(frmo.page)+1]);
        },
        prev:function () {
            nav.goTo(111,[frmo.folder,parseInt(frmo.page)-1]);
        }
    },
    update:
        function (e, type) {
            debug.cnsl(e);
            var id = $(e).parents('tr')[0].id;
            var val = $(e).parents('tr').hasClass(type) ? 0 : 1;
            debug.cnsl(id);
            j.post(['update',type], function (data) {
                debug.cnsl(data);
                    if(data.status){
                        message('Saved',1);
                        if(type=='spam' || type =='trash') $(e).parents('tr').remove();
                        else $(e).parents('tr').toggleClass(type);
                        frmo.run.panel(data);
                    }
                }, {id:id,val:val});
    },
	pagerService: function() {
	if(frmo.page>0) $('#pagerPrev').removeProp('disabled'); else $('#pagerPrev').prop( 'disabled', 'disabled' );
	if((parseInt(frmo.page)+1) >= Math.ceil(parseInt(frmo.mailCount)/50)) $('#pagerNext').prop( 'disabled', 'disabled' ); else $('#pagerPrev').removeProp('disabled');
}
};
        frm[115] = {
    newRow:'',
    init:function(){
        j.post(['init'], function (data) {
            frmo.run.anncList(data.annc);
        }, {});
    },
    run:{
        anncList: function (annc) {
            frmo.newRow = $('.ann').remove().clone();
            var annRow;
            $.each(annc, function (i, ann) {
                // debug.cnsl(ann);
                annRow = frmo.newRow.clone();
                // annRow[0].id = 'ann'+parseInt(ann.id);
                annRow[0].id = parseInt(ann.id);
                if(ann.active==parseInt(1)) annRow.find('.status input').attr('checked','checked');
                else annRow.find('.status input').removeAttr('checked');
                annRow.find('.text').empty().html(ann.announce).on('click',function (e) {
                    $(this).off();
                    frmo.edit.text(e.target);
                });
                annRow.find('.createUser').text(ann.createUser);
                annRow.find('.createDate').text(parseDate.shortDate(ann.createDate));
                annRow.appendTo('#anncTbody').show();
            });
        },
        addLine:function () {
            if($('#new').is('tr')) {message('Click "Add" for previous line', 3); return;}
            var row = frmo.newRow.clone().show();
            $(row).find('td.text').append('');
            $(row).find('button:not(.add), .status *').remove();
            $(row).find('button.add').show();
            $(row)[0].id = 'new';
            $('#anncTbody').append(row);
        }
    },
    update:{
        active:function (e) {
            j.post(['update','active'], function (data) {
                if(data.status) message('Saved!',1);
                form.init();
            }, { id:$(e).parents('tr')[0].id, active:$(e)[0].checked });
        },
        text:function (e) {
            var text = $(e).parents('tr').find('.text textarea').val();
            j.post(['update','text'], function (data) {
                if(data.status){
                    message('Saved!',1);
                    $(e).attr('disabled','disabled');
                    $(e).parents('tr').find('td.text').empty().text(text)
                        .on('click',function (e) {
                            $(this).off();
                            frmo.edit.text(e.target);
                        });
                }
            }, { id:$(e).parents('tr')[0].id, text: text});
        }
    },
    insert:function (e) {
        j.post(['insert', 'new'], function (data) {
            if (data.status) {
                message('Сохранено!', 1);
                form.init();
            }
        }, {text: $(e).parents('tr').find('.text textarea').val()});
    },
	edit: {
		text: function (e) {
			var text = '';
			if($(e).hasClass('text')) text = $(e).html();
			else text = $(e).parents('.text').html();
			$(e).empty().append('').show();
			$(e).parents('tr').find('button.save').removeAttr('disabled');
		}
	},
    del:function (e) {
        if(confirm('Delete?')) j.post(['delete'], function (data) {
            if (data.status) {
                message('Deleted.');
                $(e).parents('tr').remove();
            }
        }, {id: $(e).parents('tr')[0].id });
    }
};
        frm[117] = {
    tempAdminData: new Array(),
    userId: false,
    init: function (fpath) {
        // form menu init
        j.post(['init'], function (data) {
            var a, ul = e('userList'), list = data.list;
            empty(ul);
            for (var i in list) {
                a = e(null, e(list[i].id, ul, 'li'), 'a');
                a.href = nav.link(117, [list[i].id]);
                a.innerHTML = list[i].lastName + ' ' + list[i].firstName;
            }
            enhancements.collapse.form.menu();
            frmo.tempAdminData = sett.user;
        }, {});
        // if edit user
        if (fpath.length > 0 && regex.userId.test(fpath[0])) {
            // try go get user info
            j.post(['info'], function (data) {
                frmo.tempAdminData = data.user;
                frmo.homeForm();
                debug.cnsl(data);
                if (data.result == 1) {
                    // assign user id to frmo
                    frmo.userId = data.userId;
                    // fill in form
                    frmo.process.userData(data.user);
                    // display loginlog
                    frmo.process.logData(data.loginLog);
                    // display permissions
                    frmo.process.permissions.init(data.permissions);
                    frmo.process.permLog(data.permLog);
                    // update menu
                    $("#" + data.userId).addClass('active');
                    // display needed elements for edit user
                    $(".hideaway").removeClass('hidden');
                    // display login log
                } else {
                    this.userId = false;
                    $("#newUserli").addClass('active');
                    // hide unneeded elements for new user
                    $(".hideaway").addClass('hidden');
                }
            }, {userId: fpath[0]});
        } else {
            frmo.homeForm();
            this.userId = false;
            $("#newUserli").addClass('active');
            // hide unneeded elements for new user
            $(".hideaway").addClass('hidden');
        }
        // assign link to new user button
        e('newUserA').href = nav.link(117);
        // make sidebar collapsible
        enhancements.collapse.form.sidebarCategory();
        // Form validation
        // ff.validation(e('profileForm'), frmo.update.profile);
    },
    process: {
        userData: function (data) {
            debug.cnsl(data);
            title.insert(frmo.userId, data.firstName + ' ' + data.lastName);
            if (parseInt(sett.user.su) == 0) e('accSett').attr('hidden', 'true');
            else {
                if (data.su != 0) var su = e('su').setAttribute('checked', 'checked');
                if (data.active == 1) var active = e('active').setAttribute('checked', 'checked');
                if (data.dev == 1) var dev = e('dev').setAttribute('checked', 'checked');
            }
            e('customerID').value = data.customerID;
            e('user').value = data.user;
            e('firstName').value = data.firstName;
            e('lastName').value = data.lastName;
            e('email').value = data.email;
            e('phone').value = data.phone;
            e('viberChatId').value = data.viberChatId;
            e('viber').value = data.viber;
            e('createDate').value = parseDate.shortDate(data.createDate);
            e('createUser').value = data.createUser;
            var photoElement = e('photo');
            if (data.photo == 1) photoElement.src = '/img/users/' + frmo.userId + '.jpg';
            photoElement.onclick = function () {
                e("photoSelect").click();
                return false;
            };
        },
        logData: function (data) {
            var tr, td, tbody = e('loginLog');
            empty(tbody);
            for (var l in data) {
                tr = e(null, tbody, 'tr');
                e(null, tr, 'td').innerHTML = data[l].ip;
                e(null, tr, 'td').innerHTML = parseDate.shortDate(data[l].timeStamp);
                tr = e(null, tbody, 'tr');
                td = e(null, tr, 'td');
                td.setAttribute('colspan', 2);
                td.innerHTML = data[l].location;
            }
        },
        permissions: {
            init: function (data) {
                var rows = e('permissionRows'), r, mod;
                empty(rows);
                rows.innerHTML = '';
                for (var i in data) {
                    r = e(null, rows, 'div', 'row withBorder');
                    if (mod != data[i].modName) e(null, e(null, r, 'div', 'col-md-2'), 'span', 'text-semibold').innerHTML = data[i].modName;
                    else e(null, r, 'div', 'col-md-2');
                    e(null, r, 'div', 'col-md-4').innerHTML = "" + (data[i].id) + " - " + data[i].name;
                    this.chkBox(e(null, r, 'div', 'col-md-2'), data[i].allow, 'p' + data[i].id);
                    if (data[i].allow) {
                        this.chkBox(e(null, r, 'div', 'col-md-1'), data[i].edit, 'e' + data[i].id);
                        this.chkBox(e(null, r, 'div', 'col-md-1'), data[i].ins, 'i' + data[i].id);
                        this.chkBox(e(null, r, 'div', 'col-md-1'), data[i].del, 'd' + data[i].id);
                        //this.chkBox(e(null, r, 'div', 'col-md-1'), data[i].dev,'v'+data[i].id);
                    }
                    if (data[i].dsc) {
                        r = e(null, rows, 'div', 'row');
                        e(null, r, 'div', 'col-md-2');
                        e(null, r, 'div', 'col-md-10 text-muted text-size-small').innerHTML = data[i].dsc;
                    }
                    mod = data[i].modName;
                }
            },
            chkBox: function (el, value, formId) {
                var label, input, div;
                label = e(null, el, 'label', 'slsCheckbox slsCheckbox--checkbox--sm');
                input = e(null, label, 'input');
                input.type = 'checkbox';
                input.id = formId;
                input.setAttribute('onchange', "frmo.update.permission(this)");
                if (sett.user.su == 0) input.setAttribute('disabled', 'disabled');
                if (value == 1) input.checked = 'checked';
                e(null, label, 'div', 'slsCheckbox__indicator');
            }
        },
        permLog: function (data) {
            var tr, td, tbody = e('permLog');
            empty(tbody);
            for (var l in data) {
                tr = e(null, tbody, 'tr');
                e(null, tr, 'td').innerHTML = data[l].form;
                td = e(null, tr, 'td');
                if (data[l].step == "p") td.innerHTML = 'Permit';
                else if (data[l].step == "e") td.innerHTML = 'Edit';
                else if (data[l].step == "i") td.innerHTML = 'Insert';
                else if (data[l].step == "d") td.innerHTML = 'Delete';
                e(null, tr, 'td').innerHTML = (data[l].v == 1 ? "Allow" : "Deny");
                tr = e(null, tbody, 'tr');
                td = e(null, tr, 'td');
                td.setAttribute('colspan', 3);
                td.innerHTML = 'By ' + data[l].createUser + ' on ' + parseDate.shortDate(data[l].timeStamp);
            }
        }
    },
    update: {
        active: function (el) {
            j.post(['update', 'active'], function (data) {
                if (data.result == 1) message('Account Status has been updated.', 1);
                else message('There was an error updating Account Status.', 0);
            }, {value: el.checked, userId: frmo.userId});
        },
        su: function (el) {
            // alert('gdfg');
            j.post(['update', 'su'], function (data) {
                debug.cnsl(data);
                if (data.result == 1) message('Admin SuperUser has been updated.', 1);
                else message('There was an error updating Admin SuperUser.', 0);
            }, {su: ff.chkBoxVal(el), userId: frmo.userId});
        },
        dev: function (el) {
            j.post(['update', 'dev'], function (data) {
                if (data.result == 1) {
                    debug.cnsl(data);
                    message('Dev mode has been updated.', 1);
                } else message('There was an error updating Dev mode.', 0);
            }, {dev: ff.chkBoxVal(el), userId: frmo.userId});
        },
        profile: function () {
            var targetPath, obj = {
                user: e('user').value.trim(),
                pass: e('password').value.trim(),
                firstName: e('firstName').value.trim(),
                lastName: e('lastName').value.trim(),
                // email: e('email').value.trim(),
                phone: e('phone').value.trim(),
                viberChatId: e('viberChatId').value.trim(),
                viber: e('viber').value.trim(),
                homeForm: e('homeForm').value.trim()
            };
            debug.cnsl(obj);
            // alert('view console');
            if (frmo.userId) {
                targetPath = ['update', 'profile'];
                obj.userId = frmo.userId;
            } else targetPath = ['insert', 'profile'];
            debug.cnsl(targetPath);
            j.post(targetPath, function (data) {
                debug.cnsl(data);
                if (data.result == 1) {
                    if (data.userId != frmo.userId) message('New Profile has been created', 1);
                    else message('Profile #' + frmo.userId + ' has been updated', 1);
                    nav.goTo(117, [data.userId]);
                } else if (data.profileExists == 1) message("User name exists, profile has not been saved.", 3);
                else message("There was an error with Profile", 3);
            }, obj);
            return false;
        },
        photo: function () {
            var image = e('photoSelect').files[0];
            // check for jpg
            if (image.type != "image/jpeg") message("The file must be in jpeg format.", 0);
            // check for size
            else if (image.size > 2097152) message("The file must be less then 2MB.", 0);
            // upload
            else j.image(['update', 'updatePhoto'], image, function (data) {
                    // update
                    if (data.statusQR) message('User photo has been updated :)', 1);
                    else message('Error updating user photo :(', 0);
                    e('photo').src = '/img/users/' + sett.user.id + '.jpg?' + new Date().getTime();
                }, {userId: frmo.userId});
        }
        ,
        permission: function (el) {
            j.post(['update', 'permission'], function (data) {
                if (data.result == 1) {
                    frmo.process.permissions.init(data.permissions);
                    frmo.process.permLog(data.permLog);
                } else message('Error updating permission', 0);
            }, {id: el.id, value: el.checked, userId: frmo.userId});
        },
        defPerm: function () {
            if (confirm("хорошо обдумали?)")) {
                if (confirm("Точно? это зачистит без возможности восстановления!")) {
                    j.post(['update', 'setDEFpermissions'], function (data) {
                        if (data.result == 1) {
                            message('Account #' + frmo.userId + ' was updated ', 1);
                            frmo.init([frmo.userId]);
                        } else message('Account #' + frmo.userId + ' can\'t be updated.', 3);
                    }, {userId: frmo.userId, baseUserId: 1067});
                }
            }
        }
    },
    del: function () {
        j.post(['del'], function (data) {
            if (data.result == 1) {
                message('Account #' + data.userId + ' deleted :(', 1);
                nav.goTo(117);
            } else message('Account #' + data.userId + ' can\'t be deleted.', 3);
        }, {userId: frmo.userId});
    },
    homeForm: function () {
        var x = e('homeForm');
        empty(x);
        for (var f2 in sett.forms) {
            var option = document.createElement("option");
            option.text = sett.forms[f2];
            option.value = f2;
            if (frmo.tempAdminData.homeForm == f2) {
                option.selected = "true";
                debug.cnsl(sett.user, f2);
            }
            x.add(option);
        }
    }
};
        // uses script.js
// uses validate.min.js
frm[124] = {
    init: function () {
        j.post(['init'], function (data) {
            frmo.process.userData(data.userData);
            frmo.process.logData(data.loginLog);
            // set validation objects on
            ff.validation(e('passwordForm'), frmo.update.password);
            ff.validation(e('profileForm'), frmo.update.profile);
        }, {});
    },
    process: {
        userData: function (data) {
            e("nameFull").innerHTML = data.firstName + ' ' + data.lastName;
            var photoElement = e('photo');
            if (data.photo == 1)photoElement.src = '/img/users/' + sett.user.id + '.jpg';
            photoElement.onclick = function () {
                e("photoSelect").click();
                return false;
            };
            for (var f in data) e(f).value = data[f];
            e('createDate').value = parseDate.shortDate(data.createDate);
            var x = e('homeForm');
            empty(x);
            for (var f2 in sett.forms){
                var option = document.createElement("option");
                option.text = sett.forms[f2];
                option.value = f2;
                if(sett.user.homeForm==f2) {
                    option.selected = "true";
                    debug.cnsl(sett.user,f2);
                }
                x.add(option);
            }
	        var showYoutube = document.location.href;
	        showYoutube = decodeURI(showYoutube);
	        showYoutube = showYoutube.split('#');
	        if(isDefined(showYoutube[1]) && showYoutube[1] == 'viewCode'){
		        $('.ytUserCode').addClass('focus');
		        $('.ytUserCode.focus #copyYUC').off().on('click', function (e) {
                    $('.ytUserCode').removeClass('focus');
                     close();
		        });
	        }
        },
        logData: function (data) {
            var tr, td, tbody = e('loginLog');
            empty(tbody);
            for (var l in data) {
                tr = e(null, tbody, 'tr');
                e(null, tr, 'td').innerHTML = data[l].ip;
                e(null, tr, 'td').innerHTML = parseDate.shortDate(data[l].timeStamp);
                tr = e(null, tbody, 'tr');
                td = e(null, tr, 'td');
                td.setAttribute('colspan', 2);
                td.innerHTML = data[l].location;
            }
        }
    },
    update: {
        password: function () {
            j.post(['updatePassword'], function (data) {
                if (data.statusQR) {
                    message('Password Updated', 1);
                    e('passwordForm').reset();
                    frmo.init();
                }
                else message("There was an error updating your password", 3);
            }, {pass: e('password').value.trim()});
            return false;
        },
        profile: function () {
            sett.user.homeForm = e('homeForm').value;
            j.post(['updateProfile'], function (data) {
                if (data.statusQR) {
                    message('Your Profile has been updated', 1);
                    frmo.init();
                }
                else if(data.error.indexOf("email")) message("This email already used", 3);
                else message("There was an error updating your Profile", 3);
            }, ff.toObj('profileForm'));
            return false;
        },
        photo: function () {
            var image = e('photoSelect').files[0];
            // check for jpg
            if (image.type != "image/jpeg") message("The file must be in jpeg format.", 0);
            // check for size
            else if (image.size > 2097152) message("The file must be less then 2MB.", 0);
            // upload
            else j.image(['updatePhoto'], image, function (data) {
                    // update
                    if (data.statusQR) message('User photo has been updated :)', 1);
                    else message('Error updating user photo :(', 0);
                    e('photo').src = '/img/users/' + sett.user.id + '.jpg?' + new Date().getTime();
                }, {});
        }
    },
    test:function (formId) {
        var formdata = new Array();
        var formarray = $('#'+formId).serializeArray();
        debug.cnsl(formarray);
        $.each(formarray, function(i,item){
            formdata[item.name] = item.value;
        });
        return formdata;
    }
};
        frm[125] = {
    init:function(){
        j.post(['init'], function (data) {
            frmo.run.adminGrid(data.admins);
        }, {});
    },
    run:{
        adminGrid: function (admins) {
            // debug.cnsl(admins);
            var admindiv = $('.admindiv').remove().clone();
            $.each(admins, function (i, admin) {
                if(admin.su==0) admindiv.find('.isAdmin').hide();
                var photo = parseInt(admin.photo) == 1 ? '/img/users/' + admin.id + '.jpg' : '/img/placeholder.jpg';
                //admindiv.find('.photo a')[0].href = photo;
                admindiv.find('.photo img')[0].src = photo;
                admindiv[0].id = 'admin'+parseInt(admin.id);
                admindiv.find('.adminName').text(admin.firstName+' '+admin.lastName);
                admindiv.find('.adminEmail').html(''+admin.email+'');
                if (admin.viber!='' && admin.viber!= 'none') admindiv.find('.viber').html('Viber: '+admin.viber); else admindiv.find('.viber').text('None');
                // if (admin.viber!='' && admin.viber!= 'none') admindiv.find('.viber').html('Viber: Start chat('+admin.viber+')'); else admindiv.find('.viber').text('None');
                if (admin.viberChatId!='' && admin.viberChatId!= 'none') admindiv.find('.viberChatId').html('ViberChatId: Start chat('+admin.skype+')'); else admindiv.find('.skype').text('None');
                if (admin.phone!='' && admin.phone!= 'none') admindiv.find('.phone').html('Phone: '+admin.phone); else admindiv.find('.phone').text('None');
                admindiv.appendTo('#adminGrid');
                admindiv = admindiv.clone();
            })
        }
    }
};
        frm[128] = {
    modulesList:'',
    init:function(){
        if(!isDefined(frmo.newRow))frmo.newRow = $('.forma').remove().clone();
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.modulesList = data.modulesList;
            frmo.modulListSelect=frmo.runModulListSelect('modId');
            frmo.formIdList = frmo.formIdDatalist(data.forms, 'formIdList');
            frmo.run.formsList(data.forms);
        }, {});
    },
    run:{
        formsList: function (forms) {
            $('#formsTbody').empty();
            var formaRow;
            $.each(forms, function (i, forma) {
                formaRow = frmo.newRow.clone();
                formaRow[0].id = parseInt(forma.id);
                formaRow[0].className = parseInt(forma.modId.replace(/\D+/g,""));
                $.each(forma,function (fieldName,val) {
                    var td = $(formaRow).find('.'+fieldName);
                    if(fieldName=='icon') td.html('  '+val+'');
                    if(fieldName=='active'||fieldName=='menuActive') {
                        if(val==1)td.find('input[name="'+fieldName+'"]').attr('checked','checked');
                        else td.find('input[name="'+fieldName+'"]').removeAttr('checked','checked');
                    }
                    else td.text(val);
                });
                formaRow.find('td.editable').on('click',function (e) {
                    $(this).off();
                    frmo.edit.td(e.target);
                });
                formaRow.appendTo('#formsTbody').show();
            });
            //$('#modId').remove();
	        if(!isDefined($('select[name="modId"]')[0])){
	            $('#formsTable').prepend(''
                    + frmo.formIdList + frmo.modulListSelect + '
');
	        }
	        $('#formsTable .topLine .modId').off().on('change', function () {frmo.search();});
	        $('#formIdSelect').off().on('input', function () {frmo.search();});
        },
        addLine:function (e) {
	        var did = isDefined($(e).parents('tr')[0]) ? $(e).parents('tr')[0].id : false;
            if($('#new').is('tr')) {message('Click "Add" for previous line', 3); return;}
            var row = frmo.newRow.clone().show();
            $(row).find('td.editable').not('.textarea').not('.selector').each(function (i,v) {
                var fieldName = $(v)[0].className.replace('editable','').replace('num','').trim();
                var type = $(v).hasClass('num') ? 'number' : 'text';
                debug.cnsl(fieldName,type);
                $(v).append('');
            });
            $(row).find('td.editable.selector').append(frmo.runModulListSelect('modId'));
            $(row).find('td.editable.textarea').each(function (i,v) {
                var fieldName = $(v)[0].className.replace('editable','').replace('textarea','').trim();
                $(v).append('');
            });
            $(row).find('button:not(.add):not(.cancel), .status *').remove();
            $(row).find('button.add').show();
            $(row).find('button.cancel').show();
            $(row)[0].id = 'new';
            if(did){
                $(row).find('td.id')[0].innerText = 'Duplicate from '+did;
	            $(row)[0].dataset.did = did;
            }
	        $(row).css('background-color','#8fbc8f');
            $('#formsTbody').prepend(row);
            $("html, body").animate({ scrollTop: 0 }, 1000);
            //$("html, body").animate({ scrollTop: $(document).height() }, 1000);
        }
    },
    update:{
        td:function (e,a) {
            a = a || false;
            var id = $(e).parents('tr')[0].id;
            var formData = ff.toObj(id);
            if (!isDefined(formData['id'])) formData['id'] = id;
            debug.cnsl(formData+' debug');
            j.post(['update','all'], function (data) {
	            debug.cnsl(typeof data.status);
                if(data.status == true){
                    message('Saved!',1);
                    var line = $('#'+id).children('td');
                    for(var i=0; line.length > i; i++){
                        if(line[i].classList.contains('editable')){
                            var area = $(line[i]).children('input, select, textarea')[0];
                            if( isDefined(area)){
                                debug.cnsl(area.tagName);
                                if(area.tagName=="SELECT")line[i].innerHTML=frmo.modulesList[area.value]+' - '+area.value;
                                else line[i].innerHTML=area.value;
                            }
                        }
                    }
                    //if(!a)frmo.init();
                }
                else if (typeof data.status=="string" && data.status.indexOf('Duplicate')+1) {
	                message('You should use unique order key for each category!', 0);
                }
                else{
	                message('Has not been saved!(',0);
                }
                debug.cnsl(data);
            }, formData);
        }
    },
    insert:function (e) {
        var formData = ff.toObj('new');
        if (isDefined($(e).parents('#new')[0].dataset.did)) formData['did'] = $(e).parents('#new')[0].dataset.did;
        debug.cnsl(formData);
        j.post(['insert', 'new'], function (data) {
            debug.cnsl(data);
            if (data.status == true) {
                message('Сохранено!', 1);
                frmo.init();
            }
            else if (!data.status && data.error.indexOf('Duplicate')+1) {
                message('You should use unique order key for each category!', 0);
                $('#new').css('background-color','#deb887');
            }
            else {
                message('Not saved!', 2);
            }
        }, formData );
    },
    edit: {
        td: function (e) {
            var text = $(e).text().trim();
            var fieldName = $(e)[0].className;
            if (fieldName=='') fieldName = $(e).parents('td')[0].className;
            fieldName = fieldName.replace('editable','').replace('num','').replace('textarea','').replace('selector','').trim();
            debug.cnsl(fieldName);
            $(e).empty();
            if( $(e).hasClass('num') )  $(e).append('');
            else if( $(e).hasClass('textarea') )  $(e).append('');
            else if( $(e).hasClass('selector') )  $(e).append($(frmo.modulListSelect).val(text.match(/\d+$/)[0]));
            else if($(e).not('.textarea, .selector')) $(e).not('.textarea').append('');
            $(e).parents('tr').find('button.save').removeAttr('disabled');
        }
    },
    del:function (e) {
        if(confirm('Delete?')) j.post(['delete'], function (data) {
            debug.cnsl(data);
            if (data.status==true) {
                message('Deleted.');
                $(e).parents('tr').remove();
            }
            else if(data.status.indexOf('cpFormRelations')+1) message('Can\'t delete this form. Delete relations for this form first on \'Form Relations\', and then try it again', 3);
            else if(data.status.indexOf('analog')+1) message('Can\'t delete this form. Delete its analog from form list, and then try it again', 3);
        }, {id: $(e).parents('tr')[0].id });
    },
    runModulListSelect: function (name) {
        var select = '';
        select += '';
        return select;
    },
    formIdDatalist: function (data, name) {
        var area = '';
        area += '';
        return area;
    },
    search: function () {
        var modId = $('.modId').val();
        var fid = $('#formIdSelect').val();
        if(fid!='') fid='[id^="'+fid+'"]';
        else fid='';
        if(modId!='all') modId='.'+modId;
        else modId = '';
        if(modId!='' || fid!=''){
            $('#formsTable tbody tr').hide();
            if ($('#formsTable tbody tr'+fid+modId).length==0) $('.nothingMsg').show();
            else {
                $('#formsTable tbody tr'+fid+modId).show();
               $('.nothingMsg').hide();
            }
        }
        else{
            $('#formsTable tbody tr').show();
            $('.nothingMsg').hide();
        }
    }
};
        frm[129] = {
    // modulesList:'',
    init:function(){
        if(!isDefined(this.newRow))this.newRow = $('.module').clone();
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.modulesList = data.modulesList;
                frmo.modulListSelect = frmo.runModulListSelect('parentModule');
            frmo.run.modulesList(data.modules);
        }, {});
    },
    run:{
        modulesList: function (modules) {
            empty(e('modulesTbody'));
            var moduleRow;
            $.each(modules, function (i, module) {
//                debug.cnsl(module);
                moduleRow = frmo.newRow.clone();
                moduleRow[0].id = parseInt(module.id);
                $.each(module,function (fieldName,val) {
                    var td = $(moduleRow).find('.'+fieldName);
                    if(fieldName=='icon') td.html('  '+val+'');
                    else if(fieldName=='parentModule') {val = !parseInt(val) ? 'Root - '+val : frmo.modulesList[parseInt(val)]+' - '+val;  td.text(val);}
                    else td.text(val);
                });
                /*if(module.active==parseInt(1)) moduleRow.find('.status input').attr('checked','checked');
                else moduleRow.find('.status input').removeAttr('checked');*/
                // moduleRow.find('.text').empty().html(module.announce).on('click',function (e) {
                moduleRow.find('td.editable').on('click',function (e) {
                    $(this).off();
                    frmo.edit.td(e.target);
                });
                // annRow.find('.createUser').text(ann.createUser);
                // annRow.find('.createDate').text(parseDate.shortDate(ann.createDate));
                moduleRow.appendTo('#modulesTbody').show();
            });
        },
        addLine:function () {
            if($('#new').is('tr')) {message('Click "Add" for previous line', 3); return;}
            var row = frmo.newRow.clone().show();
/*
            var fieldName = $(e)[0].className.replace('editable','').replace('num','').trim();
            if (fieldName=='') fieldName = $(e).parents('td')[0].className.replace('editable','').replace('num','').trim();
            $(row).find('td.editable').not('.num').append('');
            $(row).find('td.editable.num').append('');*/
            $(row).find('td.editable').not('.id').not('.selector').each(function (i,v) {
                var fieldName = $(v)[0].className.replace('editable','').replace('num','').trim();
                var type = $(v).hasClass('num') ? 'number' : 'text';
                debug.cnsl(fieldName,type);
                $(v).append('');
            });
            $(row).find('td.editable.selector').append($(frmo.modulListSelect));
                // .append('');
            $(row).find('button:not(.add), .status *').remove();
            $(row).find('button.add').show();
            $(row)[0].id = 'new';
            $(row).css('background-color','#8fbc8f');
            $('#modulesTbody').append(row);
            $("html, body").animate({ scrollTop: $(document).height() }, 1000);
        }
    },
    update:{
/*        active:function (e) {
            j.post(['update','active'], function (data) {
                if(data.status) message('Saved!',1);
                form.init();
            }, { id:$(e).parents('tr')[0].id, active:$(e)[0].checked });
        },*/
        td:function (e) {
            var id = $(e).parents('tr')[0].id;
            var formData = ff.toObj(id);
            if (!isDefined(formData['id'])) formData['id'] = id;
            debug.cnsl(formData);
            if (formData['id'] == formData['parentModule']) message('Parent module ID can\'t be same as current id', 3);
            else j.post(['update','all'], function (data) {
                if(data.status){
                    message('Saved!',1);
                    frmo.init();
                }
            }, formData);
        }
    },
    insert:function (e) {
        // var id = $(e).parents('tr')[0].id;
            var formData = ff.toObj('new');
            // if (!isDefined(formData['id'])) formData['id'] = id;
            debug.cnsl(formData);
        j.post(['insert', 'new'], function (data) {
            if (data.status) {
                message('Сохранено!', 1);
                frmo.init();
            }
            else {
                message('Not saved!', 2);
                $('#new').css('background-color','#deb887');
            }
        }, formData );
    },
    edit: {
        td: function (e) {
            var text = $(e).text().trim();
            var fieldName = $(e)[0].className.replace('editable','').replace('num','').trim();
            if (fieldName=='') fieldName = $(e).parents('td')[0].className.replace('editable','').replace('num','').trim();
            debug.cnsl(fieldName);
            $(e).empty();
/*            if( $(e).hasClass('num') ) $(e).append('');
            else $(e).append('');*/
            if( $(e).hasClass('num') )  $(e).append('');
            else if( $(e).hasClass('textarea') )  $(e).append('');
            else if( $(e).hasClass('selector') )  $(e).append($(frmo.modulListSelect).val(text.match(/\d+$/)[0]));
            else if($(e).not('.textarea, .selector')) $(e).not('.textarea').append('');
            $(e).parents('tr').find('button.save').removeAttr('disabled');
        }
    },
    del:function (e) {
        if(confirm('Delete?')) j.post(['delete'], function (data) {
            if (data.status) {
                message('Deleted.');
                $(e).parents('tr').remove();
            }
            else message('Not deleted!',0);
        }, {id: $(e).parents('tr')[0].id });
    },
    runModulListSelect: function (name) {
        var select = '';
        select += '';
        return select;
    }
};
        // Для того чтобы выбрать картинку при переходе на эту форму, достаточно указать параметр через юрл
// например при переходе по ссылке https://cp.blagodat.com/images/gallery/slider/13
// при выборе картинки будет создана запись в localStorage: [sliderImgId13: id выбраной картинки]
// если в параметрах юрл число не указано:  https://cp.blagodat.com/images/gallery/slider/13
// то в localStorage будет: [sliderImgId: id выбраной картинки]
// В КОДЕ МЕНЯТЬ НИЧЕГО НЕ НУЖНО!!!!!
// если хотите добавить какие-то условия для проверки, создайте их через switch/case в коде функции selector.init();
// на форме, сохранение картинки реализовать можно следующим образом, вместо slider (sliderImgId) и frmo.slideId указав используемый параметр в юрл:
/*
window.addEventListener('storage', function (e) {
    if (e.key == ('sliderImgId' + frmo.slideId)) {
        var id = localStorage.getItem('sliderImgId' + frmo.slideId);
        if (id > 0) {
            frmo.update.img(id);
            localStorage.clear('sliderImgId' + frmo.slideId);
        }
        return false;
    }
});
*/
frm[133] = { // Gallery class
    limit: 24, // for start grid items
    searchMinLength: 2, // minimum for run search
    gallery: '',
    searchPhrase: '',
    searchCat: -1,
    selectorBtnPath: false, // window open for select image
    selector: {
        init: function (params) {
            frmo.selectorBtnPath = params[0];
            frmo.selectorBtnText = 'Select image for ' + params[0];
            frmo.selectorId = isDefined(params[1]) ? parseInt(params[1]) ? parseInt(params[1]): params[1]: '';
            switch (params[0]) {
                case 'mid': {
                    if (!regex.mid.test(params[1])) console.error('This mid is not valid');
                    break;
                }
            }
        },
        apply: function (ev) {
            var newImgId = $(ev).parents('.imageBlock')[0].id;
            localStorage.setItem(frmo.selectorBtnPath + 'ImgId' + frmo.selectorId, newImgId);
            window.close();
        }
    },
    init: function (params) {
        if (isDefined(params) && params.length > 0) {
            frmo.selector.init(params);
        }
        frmo.effectsMultiselect = this.imgEffectsMultiselect('effects');
        if (!isDefined(frmo.newBlock)) frmo.newBlock = $('.imageBlock').remove().clone();
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.imgCatsList = data.imgCatsList;
            // SEARCH
            $('.searchLine').append(frmo.imageCatsListSelect('catId', 'searchImageCatId')).off().on('change', function () {
                frmo.search()
            });
            $('#searchButton').off().on('click', function () {
                frmo.search();
            });
            $('#notUsedSearch').off().on('change', function (ev) {
                frmo.search();
            });
            $('#search').off()
                .on('keypress', function (e) {
                    if (e.which == 13) {
                        e.preventDefault();
                        e.stopImmediatePropagation();
                    }
                })
                .on('keyup', function (e) {
                    if (e.which == 13) {
                        frmo.search();
                    }
                });
            // end SEARCH
            frmo.dataProcess(data);
        }, {});
    },
    /*    if (frmo.selectorBtnPath) {
        $(".caption-overflow span").remove();
        imageBlock.find('.selectImageFor').removeAttr('style')
            .html('');
        imageBlock.find('.getId').hide();
    }*/
    run: {
        galleryGrid: function (empty) {
            empty = isDefined(empty) ? empty : true;
            if (empty) $('#galleryGrid').empty();
            var imageBlock, i = 1, image;
            // $.each(frmo.gallery, function (id, image) {
            while (image = frmo.gallery.shift()) {
                // debug.cnsl(image);
                imageBlock = frmo.newBlock.clone();
                imageBlock[0].id = parseInt(image.id);
                var name = (image.dsc != null) ? image.dsc.replace(' ', '+') : "null";
                imageBlock.find('.basic__img').load(function (e) {
                    // debug.cnsl('loaded');
                    $(e.target).fadeIn(1500);
                }).attr('src', frmo.imgUrl(image.id, name, 'p'));
                if (frmo.selectorBtnPath) {
                    // imageBlock.find(".caption-overflow span").remove();
                    imageBlock.find('.caption-overflow div')
                        .html('');
                    imageBlock.find('.getId').hide();
                }
                imageBlock.find('.image--large').attr('src', frmo.imgUrl(image.id, name, 'f'));
                imageBlock.find('.data-id').text(parseInt(image.id));
                if (frmPerms.del == 0) imageBlock.find('.del').hide();
                if (frmPerms.update == 0) imageBlock.find('.editable').removeClass('editable');
                // заполнение основного блока
                $.each(image, function (fieldName, val) {
                    var item = $(imageBlock).find('.' + fieldName);
                    if (fieldName == 'dsc' && frmo.searchPhrase != '') {
                        val = val.replace(new RegExp(frmo.searchPhrase, "ig"), '' + frmo.searchPhrase + '');
                        item.html(val);
                    } else
                        item.text(val);
                });
                // for Code block
                // debug.cnsl(image.width,image.height);
                imageBlock.find('.effects').append(frmo.effectsMultiselect);
                imageBlock.find('input[name="width"]').val(image.width);
                imageBlock.find('input[name="height"]').val(image.height);
                /*if (frmo.selectorBtnPath) {
                    imageBlock.find('.selectImageFor').removeAttr('style')
                        .html('');
                    imageBlock.find('.getId').hide();
                }*/
                // заполнение Info-блока
                var item = $($(imageBlock).find('.info tbody'));
                $.each(image, function (fieldName, val) {
                    // if (fieldName != 'dsc') {
                    if (fieldName == 'createDate' || fieldName == 'lastUsed') val = parseDate.shortDate(val);
                    if (fieldName == 'size') val = formatBytes(val, 1);
                    item.append('' +
                        '' +
                        '| ' + fieldName + ' | ' +
                        '' + val + ' | ' +
                        '
' +
                        '');
                });
                if (isDefined(frmo.imageNotUse[image.id])) imageBlock.addClass('notUse');
                imageBlock.appendTo('#galleryGrid').fadeIn(500);
                // Limiter for item count
                if (i >= frmo.limit) break;
                else i++;
            }
            var $cell = $('.image__cell');
            $cell.find('.image--basic').on('click', function (e) {
                e.preventDefault();
                e.stopImmediatePropagation();
                var $thisCell = $(e.target).closest('.image__cell');
                if ($thisCell.hasClass('is-collapsed')) {
                    $cell.not($thisCell).addClass('is-collapsed').removeClass('is-expanded');
                    $thisCell.addClass('is-expanded').removeClass('is-collapsed');
                } else {
                    $thisCell.addClass('is-collapsed').removeClass('is-expanded');
                }
            });
            $cell.find('.expand__close').on('click', function (e) {
                e.preventDefault();
                e.stopImmediatePropagation();
                var $thisCell = $(e.target).closest('.image__cell');
                $thisCell.addClass('is-collapsed').removeClass('is-expanded');
            });
            $('input[name="height"]').on('blur', function (e) {
                saveRatio($(e.target).parents('.imageBlock')[0].id, 'H');
            });
            $('input[name="width"]').on('blur', function (e) {
                saveRatio($(e.target).parents('.imageBlock')[0].id, 'W');
            });
            $('input[name="ratio"]').on('mouseup', function (e) {
                saveRatio($(e.target).parents('.imageBlock')[0].id, 'W');
            });
            frmo.edit.dsc();
            frmo.edit.imageCategory();
            $('.replaceImageId button').off().on('click', function (e) {
                e.preventDefault();
                e.stopImmediatePropagation();
                var parBlock = $(e.target).parents('.imageBlock');
                var sImId = parBlock[0].id;
                var rImId = parBlock.find('.replaceImageId input[type="number"]').val();
                var del = ff.chkBoxVal(parBlock.find('.replaceImageId input.del[type="checkbox"]')[0]);
                debug.cnsl(sImId, rImId, del);
                j.post(['update', 'replImg'], function (data) {
                    debug.cnsl(data);
                }, {sImId: sImId, rImId: rImId, del: del});
            });
        }
    },
    update: {
        td: function (e, a) {
            a = a || false;
            var id = $(e).parents('tr')[0].id;
            var formData = ff.toObj(id);
            if (!isDefined(formData['id'])) formData['id'] = id;
            debug.cnsl(formData);
            j.post(['update', 'all'], function (data) {
                if (data.status) {
                    message('Saved.', 1);
                    if (!a) form.init();
                }
                else message('No saved!(', 0);
            }, formData);
        },
        catsImg: function (e) {
            var imgId = $(e).parents('.imageBlock')[0].id;
            var status = ff.chkBoxVal(e);
            j.post(['update', 'catImg'], function (data) {
                debug.cnsl(data);
                if (data.status) message('Сохранено!', 1);
                else message('Error on save!', 0);
            }, {catId: $(e).val(), status: status, imageId: imgId});
        }
    },
    insert: function (e) {
        var formData = ff.toObj('new');
        debug.cnsl(formData);
        j.post(['insert', 'new'], function (data) {
            if (data.status) {
                message('Сохранено!', 1);
                frmo.init();
            }
            else {
                message('Not saved!', 2);
                $('#new').css('background-color', '#deb887');
            }
        }, formData);
    },
    edit: {
        td: function (e) {
            var text = $(e).text().trim();
            var fieldName = $(e)[0].className;
            if (fieldName == '') fieldName = $(e).parents('td')[0].className;
            fieldName = fieldName.replace('editable', '').replace('text', '').trim();
            debug.cnsl(fieldName);
            $(e).empty();
            if ($(e).hasClass('text')) $(e).append('');
            $(e).parents('tr').find('button.save').removeAttr('disabled');
        },
        dsc: function () {
            // debug.cnsl( 'set Edit dsc' );
            $('h6').off().on('click', function (e) {
                var DSC = $(e.target);
                $(e.target).off();
                if (frmPerms.edit == 1) {
                    var id = $(e.target).parents('.imageBlock')[0].id;
                    debug.cnsl(id);
                    var input = $('');
                    $('#' + id + ' h6').html(input);
                    $('.dsc input').on('keypress', function (e) {
                        if (e.which == 13) {
                            var dsc = $(e.target).val();
                            debug.cnsl(dsc);
                            j.post(['update'], function (data) {
                                debug.cnsl(data);
                                if (data.status) {
                                    message('Сохранено!', 1);
                                    DSC.text(dsc);
                                    frmo.edit.dsc();
                                }
                                else message('Not saved!', 2);
                            }, {dsc: dsc, id: id});
                        }
                    });
                }
                else message('No Update Permissions', 0);
            });
        },
        imageCategory: function () {
            $('.catsImg td.val span').off().on('click', function (e) {
                var imgId = $(e.target).parents('.imageBlock')[0].id;
                $(e.target).parent('td').html(frmo.imageCatsListMulticheckbox(imgId));
            });
        }
    },
    del: function (e) {
        if (confirm('Delete?')) j.post(['delete'], function (data) {
            if (data.status) {
                message('Deleted.');
                $(e).parents('.imageBlock').remove();
            }
            else {
                message('This image has a reference and can\'t be deleted.', 3);
                debug.cnsl('Not deleted');
                debug.cnsl(data);
            }
        }, {id: $(e).parents('.imageBlock')[0].id});
    },
    imgUrl: function (id, name, t) {
        if (t == 'p') var url = img.url(id, frmo.size.preview.width, frmo.size.preview.height, name);
        else if (t == 'f') var url = img.url(id, frmo.size.full.width, frmo.size.full.height, name);
        return url;
    },
    size: {
        preview: {
            width: 252,
            height: 200,
            unit: 'px'
        },
        full: {
            // width: 756,
            // height: 600,
            height: 420,
            widthpr: 90,
            heightpr: 85,
            unit: '%'
        },
        get pw() {
            return frmo.size.preview.width + frmo.size.preview.unit;
        },
        get ph() {
            return frmo.size.preview.height + frmo.size.preview.unit;
        },
        get fw() {
            return frmo.size.full.widthpr + frmo.size.full.unit;
        },
        get fh() {
            return frmo.size.full.heightpr + frmo.size.full.unit;
        }
    },
    getCode: function (e) {
        var id = $(e).parents('.imageBlock')[0].id;
        var width = $('#' + id + '  input[name="width"]').val();
        var height = $('#' + id + '  input[name="height"]').val();
        var filters = new Object();
        $.each($('#' + id + ' .filtersContainer input'), function (i, item) {
            filters[parseInt(item['name'])] = ff.chkBoxVal(item);
        });
        var code = img.encode(id, width, height, filters);
        copyToClipboard(code);
        debug.cnsl(href = imgServer + code + "/consoleLog.jpg");
        return code;
    },
    search: function () {
        var searchParam = {};
        frmo.searchCat = parseInt($('#searchImageCatId').val());
        frmo.searchPhrase = $('#search').val();
        var count = frmo.searchPhrase.length;
        if (count >= frmo.searchMinLength || count == 0) {
            if (frmo.searchPhrase == '') searchParam = {
                catId: frmo.searchCat,
                notUsed: $('#notUsedSearch')[0].checked
            };
            else searchParam = {
                dsc: frmo.searchPhrase,
                notUsed: $('#notUsedSearch')[0].checked,
                catId: frmo.searchCat
            };
            var searchPath = isNaN(frmo.searchPhrase) ? ['init', 'search'] : ['init', 'search', 'byId'];
            j.post(searchPath, function (data) {
                debug.cnsl(data);
                frmo.dataProcess(data);
            }, searchParam);
        }
        else {
            message('minimum ' + frmo.searchMinLength + ' characters!', 3);
        }
    },
    dataProcess: function (data) {
        if (data.images) {
            prepareGallery(data);
            // debug.cnsl(data);
            frmo.run.galleryGrid();
            $(window).off("scroll").on("scroll", function () {
                if ($(window).scrollTop() > $(document).height() - $(window).height() - 60 && $('#f133').is('div')) {
                    //Пользователь долистал до низа страницы
                    debug.cnsl('Пользователь долистал до низа страницы');
                    frmo.run.galleryGrid(false);
                }
            });
        }
        else {
            message('Not found', 3);
            $('#galleryGrid').empty().append('No images found ... 
 Try change request. ');
        }
    },
    imageCatsListSelect: function (name, id) {
        var select = '';
        id = 'id="' + id + '" ' || ' ';
        select += '';
        return select;
    },
    imageCatsListMulticheckbox: function (imgId) {
        var div = '';
        var checked = '';
        var activeCheckbox = frmo.catsImg[parseInt(imgId)];
        div += '';
        $.each(frmo.imgCatsList, function (id, name) {
            if (parseInt(id) != 100) {
                if (isDefined(activeCheckbox[parseInt(id)])) checked = ' checked = "checked" ';
                else checked = '';
                div += '';
            }
        });
        div += '
';
        return div;
    },
    imgEffectsMultiselect: function (name) {
        var select = '';
        select += '';
        return select;
    },
    getImgId: function (e) {
        debug.cnsl('getImageId!');
        var id = $(e).parents('.imageBlock')[0].id;
        copyToClipboard(id);
        debug.cnsl(id);
        return id;
    }
};
function copyToClipboard(data) {
    var $temp = $("");
    $("body").append($temp);
    $temp.val(data).select();
    document.execCommand("copy");
    message('Copied to clipboard!', 1);
    $temp.remove();
}
function saveRatio(id, changedElem) {
    var width = $('#' + id + '  input[name="width"]').val();
    var height = $('#' + id + '  input[name="height"]').val();
    if (!isDefined(width) || !isDefined(height)) message('Fields Width & Height are empty!', 0);
    if (width < 10 || height < 10) message('Fields Width & Height can`t be less then 10 ', 0);
    if (width > frmo.galleryCopy[id].width || height > frmo.galleryCopy[id].height) {
        width = frmo.galleryCopy[id].width;
        height = frmo.galleryCopy[id].height;
        $('#' + id + '  input[name="width"]').val(width);
        $('#' + id + '  input[name="height"]').val(height);
        message('Width & Height can`t be more then original image size - ' + width + '*' + height + '. 
' +
            'Values were reset to max values!', 0);
    }
    if ($('#' + id + ' input[name="ratio"]')[0].checked) {
        var h = $('#' + id + ' input[name="height"]');
        var w = $('#' + id + ' input[name="width"]');
        if (changedElem == 'H') {
            /*            Y = h.val();
                        X = Math.round((W * Y) / H);
                        w.val(X);*/
            w.val(ratio.h(id, h.val()));
        }
        if (changedElem == 'W') {
            /*Y = w.val();
            X = Math.round((H * Y) / W);
            h.val(X);*/
            h.val(ratio.w(id, w.val()));
        }
    }
}
var ratio = {
    construct: function (id) {
        this.H = frmo.galleryCopy[id].height;
        this.W = frmo.galleryCopy[id].width;
    },
    h: function (id, Y) {
        ratio.construct(id);
        return Math.round((this.W * Y) / this.H)
    },
    w: function (id, Y) {
        ratio.construct(id);
        return Math.round((this.H * Y) / this.W)
    }
};
function prepareGallery(data) {
    frmo.gallery = new Array();
    frmo.galleryCopy = new Object();
    var images = data.images;
    for (var i in images) {
        images[i].width = parseInt(images[i].width);
        images[i].height = parseInt(images[i].height);
        images[i].size = parseInt(images[i].size);
        images[i].id = parseInt(images[i].id);
        frmo.galleryCopy[images[i].id] = images[i];
    }
    frmo.gallery = images;
    frmo.imageNotUse = data.imageNotUse;
    frmo.catsImg = data.catsImg;
}
        frm[134] = {
    searchMinLength: 3,
    init: function () {
        frmo.search();
        frmo.buttons();
        frmo.findLine = $('#listBody .findLine').html();
        $('#listBody').empty();
    },
    search: function (i) {
        frmo.searchQ = ff.toObj('searchRequest');
        j.post(['init', 'start'], function (data) {
            $('.result').show();
            debug.cnsl(data);
            frmo.dataProcess(data);
        }, frmo.searchQ);
    },
    dataProcess: function (data) {
        $('#listBody').empty();
        var tbl = e('listBody');
        var qty = (data.searchRezultOverMids.length ? data.searchRezultOverMids.length : 0) + (data.searchRezultOverFile.length ? data.searchRezultOverFile.length : 0);
        if (data.searchRezultOverFile.length > 0 || data.searchRezultOverMids.length > 0) $('.allFinds').text(qty + ' results');
        else {
            $('.allFinds').html('Nothing found');
            $('.searList').fadeIn(500);
            e(null, e(null, tbl, 'tr', 'findLine'), 'td')
                .a('colspan', '8')
                .a('style', 'text-align: center;')
                .t('Nothing found, please try another search parameters or update search params and try again');
        }
        var line = frmo.findLine;
        var el = data['searchRezultOverMids'];
        if (isDefined(data['searchRezultOverMids'])) {
            $('.searList').fadeIn(500);
            for (var key in data.searchRezultOverMids) {
                var keys = data.searchRezultOverMids[key]['id'];
                var tr = e(keys, tbl, 'tr', 'findLine mid status' + el[key]['status']);
                $(tr).html(line);
                e(keys, tbl, 'tr');
                for (var t in el[key]) {
                    var td = el[key];
                    if ($('td.' + t)) {
                        var cont = td[t];
                        if (t == 'imgId') {
                            cont = '
';
                        }
                        else if (t == 'createDate') cont = parseDate.shortDate(cont) + '
 ' + td.createUser;
                        else if (t == 'size' && cont != null) cont = formatBytes(cont);
                        $('#' + keys + ' td.' + t).html(cont);
                    }
                }
                e(null, tr, 'span', 'secretDelete').t('X').a('title', 'Delete this MID');
            }
        }
        var el = data['searchRezultOverFile'];
        if (isDefined(data['searchRezultOverFile'])) {
            $('.searList').fadeIn(500);
            for (var key in data.searchRezultOverFile) {
                var keys = data.searchRezultOverFile[key]['id'];
                var tr = e(keys, tbl, 'tr', 'findLine file withoutDB');
                $(tr).html(line);
                e(keys, tbl, 'tr');
                for (var t in el[key]) {
                    var td = el[key];
                    if ($('td.' + t)) {
                        var cont = td[t];
                        if (t == 'imgId') {
                            var hr = nav.link(213, [keys]);
                            cont = '
 ';
                        }
                        else if (t == 'name') {
                            // var hr = '/media/detail/' + keys;
                            var hr = nav.link(213, [keys]);
                            cont = '' + cont + '';
                        }
                        else if (t == 'status') {
                            cont = cont
                                + '
 ' +
                                '
 ';
                        }
                        else if (t == 'createDate') cont = parseDate.jsTimeStamp(cont * 1000) + '
';
                        else if (t == 'playTime' && cont != null) cont = formatTime(cont);
                        else if (t == 'size' && cont != null) cont = formatBytes(cont);
                        $('#' + keys + ' td.' + t).html(cont);
                    }
                }
                // e(null, tr, 'span', 'secretDelete').t('X').a('title', 'Delete this MID');
            }
        }
        $('#source').off().on('change', function (ev) {
            debug.cnsl(ev.target);
            var sel = $('#source').val();
            var mid = sel.indexOf('m') + 1;
            var file = sel.indexOf('f') + 1;
            if (mid && file) $('.findLine').show();
            else if (mid) {
                $('.findLine').hide();
                $('.findLine.mid').show();
            }
            else if (file) {
                $('.findLine').hide();
                $('.findLine.file').show();
            }
        });
        $('.secretDelete').off().on('click', function (ev) {
            var mid = $(ev.target).parents('tr.findLine')[0].id;
            if (confirm('Delete this video?')) {
                j.post(['delete'], function (data) {
                    if (data.status) {
                        message('Video deleted successfully', 1);
                        $('#' + mid).hide();
                    }
                    else message('System error!', 0);
                }, {id: mid});
            }
        });
        $('.midImg').off().on('mousedown', function (ev) {
            // debug.cnsl('mousedown');
            // debug.cnsl(ev.which);
            if (ev.which == 1) {
                ev.preventDefault();
                ev.stopImmediatePropagation();
                ev.target.src = ev.target.dataset.src;
                ev.target.play();
                ev.target.controls = true;
                $(ev.target).css('width', '200px');
                $(ev.target).css('height', 'auto');
                $(ev.target).css('min-height', '80px');
                // $(ev.target).css('position', 'absolute');
            }
        });
    },
    fileSet: {
        createMid: function (ev) {
            // alert(ev.dataset.id+' нужно обсудить каким образом это будет работать');
            j.post(['insert', 'createMid'], function (data) {
                if (data.creaTED) {
                    message('Mid created successfully', 1);
                    window.open(nav.link(213, ev.dataset.id));
                    $(ev).parents('tr').remove();
                }
                else message('System error!', 0);
            }, {mid: ev.dataset.id, createDate: ev.dataset.cdt});
        },
        delete: function (ev) {
            j.post(['delete', 'file'], function (data) {
                if (data.status == "Deleted!") {
                    message('File deleted successfully', 1);
                    $(ev).parents('tr').remove();
                }
                else if (!data.error) message('System error!', 0);
            }, {mid: ev.dataset.id});
        }
    },
    range: function (e) {
        if (isDefined(e))
            var rangeGroup = $(e).attr('name'),
                minBtn = $(e).parent().children('.min'),
                maxBtn = $(e).parent().children('.max'),
                range_min = $(e).parent().children('.range_min'),
                range_max = $(e).parent().children('.range_max'),
                minVal = parseInt($(minBtn).val()),
                maxVal = parseInt($(maxBtn).val()),
                rBox = $(e).parents('.rangeBox'),
                value,
                origin = $(e)[0].className;
        if (origin === 'min' && minVal > maxVal - 5) $(minBtn).val(maxVal - 5);
        if (origin === 'max' && maxVal - 5 < minVal) $(maxBtn).val(5 + minVal);
        var minVal = parseInt($(minBtn).val());
        var maxVal = parseInt($(maxBtn).val());
        var cls = rBox[0].className.split(' ');
        if (cls.indexOf('pTime') > -1) {
            minVal = formatTime(minVal);
            maxVal = formatTime(maxVal);
            $(range_min).text(minVal);
            $(range_max).text(maxVal);
        }
        else if (cls.indexOf('date') > -1) {
            $(range_min).text(frmo.tmstmpDate(minVal));
            $(range_max).text(frmo.tmstmpDate(maxVal));
        }
        else if (cls.indexOf('size') > -1) {
            minVal = formatBytes(minVal);
            maxVal = formatBytes(maxVal);
            $(range_min).text(minVal);
            $(range_max).text(maxVal);
        }
    }
    ,
    tmstmpDate: function (tmst) {
        var date = new Date(tmst);
        var m = date.getMonth() + 1;
        date = (date.getFullYear() + "-" + m + "-" + date.getDate());
        //debug.cnsl(date);
        date = parseDate.shortDate(date);
        return date;
    }
    ,
    buttons: function () {
        $('#searchMediaBtn').off().on('click', function () {
            frmo.search();
        });
        $('input[type="range"]').on('input', function (e) {
            frmo.range(e.target)
        });
        if (!isDefined(perValue)) var perValue = '';
        $('input[name="sw"]').off()
            .on('keypress', function (e) {
                if (e.which == 13) {
                    e.preventDefault();
                    e.stopImmediatePropagation();
                }
            })
            .on('keyup', function (e) {
                if (e.which == 13) {
                    e.preventDefault();
                    e.stopImmediatePropagation();
                    frmo.search();
                }
                var sText = $('input[name="sw"]').val();
                if (perValue == '') perValue = sText;
                else if (perValue != sText) {
                    $('.result').fadeOut(500);
                    $('.searList').fadeOut(500);
                    perValue = sText;
                }
            });
        $('#shareSearch').off().on('click', function (e) {
            e.preventDefault();
            e.stopImmediatePropagation();
            var link = cpBaseUrl +'media/search?';
            var i = 0;
            for (var field in frmo.searchQ) {
                if (field != 'formId' && frmo.searchQ[field] != "") {
                    link += i == 0 ? field + '=' + frmo.searchQ[field] : '\&' + field + '=' + frmo.searchQ[field];
                    i++;
                }
            }
            copyToClipboard(link);
        });
    }
    ,
    getHrefSearch: function () {
        var shData = new Array();
        shData = document.location.href;
        shData = decodeURI(shData);
        shData = shData.split('?');
        debug.cnsl(shData);
        if (isDefined(shData[1])) {
            shData = shData[1].split('&');
            for (var i in shData) {
                var line = new Array();
                line = shData[i].split('=');
                var sel = '[name="' + line[0] + '"]';
                if (line[0] == 'ext' && line[1] != 'all') frmo.searchParams.getRange(frmo.extParams[line[1]]);
                if ((line[1] == 0 || line[1] == 1) && $(sel)[0].tagName == 'INPUT') {
                    if (line[1] == 1) $(sel)[0].checked = 'checked';
                    else $(sel)[0].checked = '';
                }
                else $(sel).val(line[1]);
                if (isDefined($('input[type="range"][name="' + line[0] + '"]')[0])) {
                    frmo.range(sel);
                    //debug.cnsl(line[0]);
                }
            }
            frmo.search();
        }
    }
    ,
    getMediaIcon: function (ext) {
        var icon = '';
        if (ext == null) icon = "icon-folder3";
        else if (ext == 'mp3') icon = "icon-music";
        else if (ext == 'mp4') icon = "icon-screen3";
        else if (ext == 'pdf') icon = "icon-file-pdf";
        else icon = "icon-file-empty";
        return icon;
    }
};
        frm[135] = { //class Upload Image
    params: {
        minWidth: 300,
        minHeight: 300
    },
    canvas: '',
    imgParams: {
        sourceWidth: "",
        sourceHeight: "",
        contain: true,
        meta: true,
        orientation: 1,
        crop: true,
        canvas: true,
        crossOrigin: true,
        noRevoke: true
    },
    selectorBtnPath: false, // window open for select image
    selector: {
        init: function (params) {
            frmo.selectorBtnPath = params[0];
            frmo.selectorBtnText = 'Select image for ' + params[0];
            frmo.selectorId = isDefined(params[1]) ? parseInt(params[1]) ? parseInt(params[1]): params[1]: '';
            switch (params[0]) {
                case 'mid': {
                    if (!regex.mid.test(params[1])) console.error('This mid is not valid');
                    break;
                }
            }
        },
        apply: function (imgId) {
            localStorage.setItem(frmo.selectorBtnPath + 'ImgId' + frmo.selectorId, imgId);
            window.close();
        }
    },
    init: function (fpath) {
        if (isDefined(fpath) && fpath.length > 0) {
            frmo.selector.init(fpath);
        }
        var form = $('form.dropzone');
        frmo.i = 0;
        if (!isDefined(window.FileReader))
            form.find('.dz-message span').html('Not supported browser!(').addClass('error');
        else {
            frmo.dropzone = form;
            frmo.fDSC = $('#fDSC');
            j.post(['init'], function (data) {
                frmo.imgCatsList = data.imgCatsList;
                frmo.fDSC.prepend(frmo.imageCatsListSelect('catId')).val(100);
            });
            form[0].addEventListener('dragover', function (e) {
                e.preventDefault();
                e.stopImmediatePropagation();
                debug.cnsl('dragover');
                frmo.dropzone.addClass('dz-drag-hover');
            }, false);// for design
            form[0].addEventListener('dragleave', function () {
                debug.cnsl('dragleave');
                frmo.dropzone.removeClass('dz-drag-hover');
            });// for design
            form[0].addEventListener('drop', function (event) {
                event.stopPropagation();
                event.preventDefault();
                frmo.images = event.dataTransfer.files;
                frmo.prepareImg();
            }, false);// chromes
            form.on('click', function () {
                $('').on('change', function () {
                    frmo.images = this.files;
                    frmo.prepareImg();
                }).click();
            });
        }
    },
    import: function () {
        var link = document.getElementsByName('importUrl')[0].value;
        j.post(['insert', 'import'], function (data) {
            if (isDefined(data.filename)) {
                frmo.image = cpBaseUrl+"imageUploads/" + data.filename;
                frmo.fDSC.find('*[name="dsc"]').val(data.filename.replace('.jpg', ''));
                $('.dwnldZone').fadeOut(100);
                frmo.loadImg(function () {
                    message('Img can be deleted from server', 1);
                    j.post(['delete', 'importImg'], function (data) {
                        debug.cnsl(data);
                    }, {filename: data.filename});
                });
            }
            else message('Error while uploading', 0);
        }, {link: link});
    },
    prepareImg: function () {
        debug.cnsl(frmo.images);
        if (!isDefined(frmo.images[frmo.i])) form.init();
        var image = frmo.images[frmo.i];
        var good = true;
        frmo.image = image;
        debug.cnsl(image);
        // check for jpg
        if (image.type != "image/jpeg") {
            message("The file -" + image.name + "- must be in jpeg format.", 0);
            good = false;
        }
        // check for size
        else if (image.size > 11097152) {
            message("The file -" + image.name + "- must be less then 10MB.", 0);
            good = false;
        }
        // show img in web page
        else {
            frmo.dropzone.fadeOut(100);
            frmo.DSC();
        }
        frmo.last = parseInt(frmo.i + 1) == frmo.images.length ? true : false;
        if (!good) {
            frmo.dropzone.removeClass('dz-drag-hover');
            if (frmo.last) {
                frmo.dropzone.fadeIn(1000);
                // frmo.fDSC.fadeOut(100);
            }
            else {
                frmo.i++;
                frmo.prepareImg();
            }
        }
    },
    imageToServer: function () {
        // upload
        var image = frmo.canvas.toDataURL('image/jpeg');
        var params = ff.toObj('fDSC');
        if (frmo.canvas.width >= frmo.params.minWidth && frmo.canvas.height >= frmo.params.minHeight) {
            params['width'] = frmo.canvas.width;
            params['height'] = frmo.canvas.height;
            params['size'] = frmo.image.size;
            j.image(['insert', 'image'], image, function (data) {
                debug.cnsl(data);
                if (data.result == 1) {
                    if (frmo.selectorBtnPath) {
                        frmo.selector.apply(data.imgId)
                    }
                    // update
                    else {
                        message('Image has been uploaded', 1);
                        frmo.dropzone.removeClass('dz-drag-hover');
                        if (frmo.last) {
                            frmo.dropzone.fadeIn(1000);
                            frmo.fDSC.fadeOut(100);
                        }
                        else {
                            frmo.i++;
                            frmo.prepareImg();
                        }
                    }
                }
                else message('Error uploading image.', 0);
            }, params);
        }
        else message('Image must be ' + frmo.params.minWidth + '*' + frmo.params.minHeight + 'px or more. Your image is ' + frmo.canvas.width + '*' + frmo.canvas.height + ' You can upload another image here', 0);
    },
    DSC: function () {
        frmo.fDSC.find('*[name="dsc"]').val(frmo.image.name.replace('.jpg', ''));
        frmo.fDSC.find('*[name="catId"]').val(100);
        frmo.loadImg(function () {
            debug.cnsl('loadImg sucsess!');
            if (frmo.canvas.width < frmo.params.minWidth || frmo.canvas.height < frmo.params.minHeight)
                message('Image must be ' + frmo.params.minWidth + '*' + frmo.params.minHeight + 'px or more. Your image is ' + frmo.canvas.width + '*' + frmo.canvas.height + ' You can upload another image here', 0);
        });
    },
    loadImg: function (callback) {
        var image = frmo.image;
        // frmo.fDSC.fadeOut();
        frmo.fDSC.find('.preview').remove();
        loadImage(
            image,
            function (img) {
                if (img.type === "error") {
                    debug.cnsl("Error loading image " + image);
                } else {
                    debug.cnsl(img);
                    frmo.fDSC.prepend($(img).addClass('preview').attr('title', image.name)).find('.preview')[0].id = 'preview';
                    frmo.fDSC.fadeIn(500);
                    frmo.canvas = img;
                    if (isDefined(callback)) callback();
                }
            },
            frmo.imgParams
        );
    },
    applyToImg: function (e) {
        debug.cnsl($(e));
        debug.cnsl($(e).attr('name'));
        debug.cnsl($(e).val());
        var name = $(e).attr('name');
        var val = name == 'orientation' ? parseInt($(e).val()) : $(e).val();
        frmo.imgParams[name] = val;
        frmo.loadImg();
    },
    imageCatsListSelect: function (name, id) {
        var select = '';
        id = 'id="' + id + '" ' || ' ';
        select += '';
        return select;
    }
};
        frm[136] = {
    init: function () {
        if (!isDefined(frmo.newRow)) frmo.newRow = $('.filter').remove().clone();
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.run.catList(data.cats);
            if(!!parseInt(path.slice(-1)[0])) frmo.run.addLine(parseInt(path.slice(-1)[0]));
        }, {});
    },
    run: {
        catList: function (filters) {
            $('#filtersTbody').empty();
            var filterRow;
            $.each(filters, function (i, filter) {
                filterRow = frmo.newRow.clone();
                filterRow[0].id = parseInt(filter.id);
                $.each(filter, function (fieldName, val) {
                    var td = $(filterRow).find('.' + fieldName);
                    if (fieldName == 'createDate') val = parseDate.shortDate(val);
                    td.text(val);
                });
                filterRow.find('td.editable').on('click', function (e) {
                    $(this).off();
                    frmo.edit.td(e.target);
                });
                filterRow.appendTo('#filtersTbody').show();
            });
        },
        addLine: function (imgId) {
            if ($('#new').is('tr')) {
                message('Press "Add" for previos line', 3);
                return;
            }
            var row = frmo.newRow.clone().show();
            $(row).find('td.editable.textarea').each(function (i, v) {
                var fieldName = $(v)[0].className.replace('editable', '').replace('textarea', '').trim();
                $(v).append('');
            });
            var imgId = imgId || '';
            $(row).find('td.imgId').append('');
            $(row).find('button:not(.add), .status *').remove();
            $(row).find('button.add').show();
            $(row)[0].id = 'new';
            $(row).css('background-color', '#8fbc8f');
            $('#filtersTbody').append(row);
            $("html, body").animate({scrollTop: $(document).height()}, 1000);
        }
    },
    update: {
        td: function (e) {
            var id = $(e).parents('tr')[0].id;
            var formData = ff.toObj(id);
            if (!isDefined(formData['id'])) formData['id'] = id;
            debug.cnsl(formData);
            j.post(['update', 'all'], function (data) {
                if (data.status) {
                    debug.cnsl(data);
                    message('Сохранено!', 1);
                    frmo.run.catList(data.cats);
                }
                else message('Not saved!(', 0);
            }, formData);
        }
    },
    insert: function (e) {
        var formData = ff.toObj('new');
        if(formData.comment==''){  message('Comment field is required', 0);    return; }
        debug.cnsl(formData);
        j.post(['insert', 'new'], function (data) {
            if (data.status) {
                message('Сохранено!', 1);
                nav.goTo(form.id);
            }
            else {
                message('ImgId not found!', 0);
                $('#new').css('background-color', '#deb887');
            }
        }, formData);
    },
    edit: {
        td: function (e) {
            var text = $(e).text().trim();
            var fieldName = $(e)[0].className;
            if (fieldName == '') fieldName = $(e).parents('td')[0].className;
            fieldName = fieldName.replace('editable', '').replace('textarea', '').replace('text', '').trim();
            debug.cnsl(fieldName);
            $(e).empty();
            if ($(e).hasClass('text')) $(e).append('');
            if ($(e).hasClass('textarea')) $(e).append('');
            $(e).parents('tr').find('button.save').removeAttr('disabled');
        }
    },
    del: function (e) {
        if (confirm('Delete?')) j.post(['delete'], function (data) {
            if (data.status) {
                message('Deleted.');
                $(e).parents('tr').remove();
            }
        }, {id: $(e).parents('tr')[0].id});
    }
};
        frm[148] = {
    init: function () {
        if (!isDefined(frmo.newRow)) frmo.newRow = $('.slide').remove().clone();
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.run.slidesList(data.slides);
        }, {});
        frmo.run.actions();
    },
    run: {
        slidesList: function (slides) {
            debug.cnsl(slides);
            $('#slidesTbody').empty();
            var slideRow;
            var showArr = ['active', 'sort', 'title', 'imgId', 'subTitle', 'btnCaption', 'btnUrl', 'slideClass', 'createDate'];
            for (var i in slides) {
                var slide = slides[i];
                slideRow = frmo.newRow.clone();
                slideRow[0].id = 'slide'+slide.id;
                slideRow[0].dataset.id = slide.id;
                for (var j in showArr) {
                    var fieldName = showArr[j];
                    var td = slideRow.find('.' + fieldName);
                    var val = slide[fieldName];
                    if (fieldName == 'createDate') val = 'Date: '+parseDate.shortDate(val)+'
User: '+slide['createUser'] ;
                    else if (fieldName == 'imgId') {
                        val = "" +
                            "
";
                    }
                    if (fieldName == 'active') {
                        if (val == 1) td.find('input[name="active"]').attr('checked', 'checked');
                        else td.find('input[name="active"]').removeAttr('checked', 'checked');
                    }
                    else td.html(val);
                }
                slideRow.appendTo('#slidesTbody').show();
                slideRow.find('td.editable').on('click',function (ev) {
                    $(this).off();
                    frmo.edit.td(ev.target);
                });
            }
        },
        addLine: function () {
            $('#createSliderModal form')[0].reset();
            $('#createSliderModal').modal('show');
            return false;
        },
        actions: function () {
            window.addEventListener('storage', function (e) {
                if (e.key == ('sliderImgId' + frmo.slideId)) {
                    var id = localStorage.getItem('sliderImgId' + frmo.slideId);
                    if (id > 0) {
                        frmo.update.img(id);
                        localStorage.clear('sliderImgId' + frmo.slideId);
                    }
                    return false;
                }
            });
        }
    },
    update: {
        active: function (ev) {
            j.post(['update'], function (data) {
                if (data.status) message('Сохранено!', 1);
            }, {id: $(ev).parents('tr')[0].dataset.id, active: ff.chkBoxVal(ev)});
        },
        td: function (ev) {
            var id = $(ev).parents('tr')[0].id;
            var newData = ff.toObj(id);
            newData.id = $(ev).parents('tr')[0].dataset.id;
            j.post(['update'], function (data) {
                if (data.status==true) {
                    message('Сохранено!', 1);
                    form.init();
                }
                else message('Something went wrong', 2);
            }, newData);
        },
        img: function (newImgID) {
            j.post(['update', 'img'], function (data) {
                debug.cnsl(data);
                if (data.statusQR) {
                    message('Сохранено!', 1);
                    frmo.init();
                }
                else message('System error!', 0);
            }, {id: frmo.slideId, imgId: newImgID});
        }
    },
    insert: function () {
        var formData = ff.toObj('new');
        debug.cnsl(formData);
        j.post(['insert', 'new'], function (data) {
            if (data.status) {
                message('Сохранено!', 1);
                $('#createSliderModal').modal('hide');
                frmo.init();
            }
            else {
                message('Not saved!', 2);
                $('#new').css('background-color', '#deb887');
            }
        }, formData);
    },
    edit: {
        td: function (ev) {
            var text = $(ev).text().trim();
            document.querySelector('#'+$(ev).parents('tr')[0].id+ ' .save').style.display = 'block';
            document.querySelector('#'+$(ev).parents('tr')[0].id+ ' .editHidd').style.display = 'none';
            var fieldName = $(ev)[0].className;
            if (fieldName=='') fieldName = $(ev).parents('td')[0].className;
            fieldName = fieldName.replace('editable','').replace('num','').replace('textarea','').replace('selector','').replace('text','').trim();
            debug.cnsl(fieldName);
            $(ev).empty();
            if( $(ev).hasClass('num') )  $(ev).append('');
            else if( $(ev).hasClass('textarea') )  $(ev).append('');
            // else if( $(e).hasClass('selector') )  $(e).append($(frmo.modulListSelect).val(text.match(/d+$/)[0]));
            else if($(ev).not('.textarea, .selector')) $(ev).not('.textarea').append('');
            $(ev).parents('tr').find('button.save').removeAttr('disabled');
        }
    },
    del: function (e) {
        console.log(e);
        if (confirm('Delete?')) j.post(['delete'], function (data) {
            if (data.status) {
                message('Deleted.');
                $(e).parents('tr').remove();
            }
        }, {id: $(e).parents('tr')[0].dataset.id});
    }
};
        frm[150] = {
    init: function () {
        if (!isDefined(frmo.newRow)) frmo.newRow = $('.filter').remove().clone();
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.run.catList(data.cats);
        }, {});
    },
    run: {
        catList: function (filters) {
            $('#filtersTbody').empty();
            var filterRow;
            $.each(filters, function (i, filter) {
                filterRow = frmo.newRow.clone();
                filterRow[0].id = parseInt(filter.id);
                $.each(filter, function (fieldName, val) {
                    var td = $(filterRow).find('.' + fieldName);
                    if (fieldName == 'createDate') val = parseDate.shortDate(val);
                    td.text(val);
                });
                filterRow.find('td.editable').on('click', function (e) {
                    $(this).off();
                    frmo.edit.td(e.target);
                });
                filterRow.appendTo('#filtersTbody').show();
            });
        },
        addLine: function () {
            if ($('#new').is('tr')) {
                message('Click "Add" for previous line', 3);
                return;
            }
            var row = frmo.newRow.clone().show();
            $(row).find('td.editable.text').each(function (i, v) {
                var fieldName = $(v)[0].className.replace('editable', '').replace('text', '').trim();
                $(v).append('');
            });
            $(row).find('button:not(.add), .status *').remove();
            $(row).find('button.add').show();
            $(row)[0].id = 'new';
            $(row).css('background-color', '#8fbc8f');
            $('#filtersTbody').append(row);
            $("html, body").animate({scrollTop: $(document).height()}, 1000);
        }
    },
    update: {
        td: function (e) {
            var id = $(e).parents('tr')[0].id;
            var formData = ff.toObj(id);
            if (!isDefined(formData['id'])) formData['id'] = id;
            debug.cnsl(formData);
            j.post(['update', 'all'], function (data) {
                if (data.status) {
                    debug.cnsl(data);
                    message('Сохранено!', 1);
                    frmo.run.catList(data.cats);
                }
                else message('Has not been saved!(', 0);
            }, formData);
        }
    },
    insert: function (e) {
        var formData = ff.toObj('new');
        debug.cnsl(formData);
        j.post(['insert', 'new'], function (data) {
            if (data.status) {
                message('Сохранено!', 1);
                frmo.init();
            }
            else {
                message('Not saved!', 2);
                $('#new').css('background-color', '#deb887');
            }
        }, formData);
    },
    edit: {
        td: function (e) {
            var text = $(e).text().trim();
            var fieldName = $(e)[0].className;
            if (fieldName == '') fieldName = $(e).parents('td')[0].className;
            fieldName = fieldName.replace('editable', '').replace('text', '').trim();
            debug.cnsl(fieldName);
            $(e).empty();
            if ($(e).hasClass('text')) $(e).append('');
            $(e).parents('tr').find('button.save').removeAttr('disabled');
        }
    },
    del: function (e) {
        if (confirm('Delete?')) j.post(['delete'], function (data) {
            if (data.status) {
                message('Deleted.');
                $(e).parents('tr').remove();
            }
        }, {id: $(e).parents('tr')[0].id});
    }
};
        frm[164] = {
	init: function (path) {
		frmo.id=parseInt(path) || 4000;
		// frmo.events.infoSaveButton();
		var params = new Object();
		if (isDefined(path[0])) params.mid = parseInt(path[0]);
		j.post(['init'], function (data) {
			debug.cnsl(data);
			frmo.details=data.details;
			frmo.catsList=data.imgCatsList;
			frmo.activeCats=data.imgCatsUse;
			frmo.imgUse=data.imageUse;
			frmo.run.articleCatsListBox();
		}, {imgId:path[0]||4000});
	},
	run: {
		infoPanel: function () {
			var parentMid, info = frmo.details;
			if(isDefined(frmo.imgUse) && frmo.imgUse.length!=0){
				$.each(frmo.imgUse, function (mid, val) {
					var block = e('using');
					var el = e(null, block, 'button', 'goMid btn');
                    el.innerHTML=''+ val['useId'];
                    el.title=val['title'];
					el.dataset.ext = val['ext'];
					el.type='button';
				});
				$('#using').show();
			}
			else $('#using').html('This image isn\'t using').show();
			$('#fileInfo').show(500).find('#form').hide()[0].id = 'settingsForm';
			var formInfo = $('#settingsForm');
			$.each(info, function (name, val) {
				if (name == 'size' && val != null) val = formatBytes(val, 1);
				if ((name == 'createDate') && val != null) val = parseDate.shortDate(val);
				formInfo.find('*[name="' + name + '"]').val(val);
			});
			for (var i in frmo.activeCats) {
				if (i!='')$('#catId').find('#'+i).attr('checked','checked');
			}
			$('#thisImg')[0].src = img.url(frmo.id,0,0);
			formInfo.fadeIn(500);
			frmo.events();
		},
		articleCatsListBox: function () {
			var box = '';
			box+='';
			$('#catId').html(box);
			frmo.run.infoPanel();
		}
	},
	events: function () {
		$('.goMid').off().on('click', function (e) {
			var mid = e.target.innerText;
			switch (e.target.dataset.ext){
				case 'mp3': {
					window.open(nav.link(106, mid));
					break;
				}
				case 'holiday': {
					window.open(nav.link(114, 'edit/'+mid));
					break;
				}
				case 'slide': {
					window.open(nav.link(148, mid));
					break;
				}
				case 'manualLock': {
					window.open(nav.link(136));
					break;
				}
				default:
					break;
			}
		});
		$('.save').off().on('click', function (e) {
			var data = ff.toObj('settingsForm');
			data['id'] = String(frmo.id);
			data['formId'] = "133";
			debug.cnsl(data);
			j.post(['update', 'all'], function (data) {
				if (data.status) {
					message('Saved', 1);
				}
				else message('Not saved!(', 0);
			}, data);
		});
		$('#catId input[type="checkbox"]').on('click',function (e) {
			debug.cnsl(ff.chkBoxVal(e.target));
			var params = {
				imgId: String(frmo.id),
				catId: $(e.target)[0].id,
				formId: "133",
				status: ff.chkBoxVal(e.target)
			};
			debug.cnsl(params);
			j.post(['update', 'catImg'], function (data) {
				debug.cnsl(data);
				if (data.status) {
					message('Image category updated', 1);
				}
				else {
					message('Error updating image category', 0);
				}
			}, params);
		});
		$('input[name="rImId"]').off().on('keyup', function (t) {
			var replBut = $('.replaceImageId i');
			replBut.show();
			var rmid = $('input[name="rImId"]');
			if(rmid.val() > 3999 &®ex.imgId.test(rmid.val())){
				replBut.addClass('textShadow');
				replBut.off().on('click', function () {
					if(frmo.id!=rmid.val())
					j.post(['update','replImg'], function (data) {
						debug.cnsl(data);
						if (data.statusMedia){
							message('Image replaced successfully', 1);
							e('using').innerHTML = 'This image isn\'t using';
							if (data.statusDel){
								message('Image ' + frmo.id +' deleted successfully', 1);
                                nav.goTo(133);
                            }
						}
						else message('System error');
					}, {oldId:frmo.id, newId:rmid.val(), del:(confirm('Are you sure you want to delete image after replace?') ? 1 : 0)});
					else message('Can\'t use same image id', 3);
				});
			}
			else{ replBut.removeClass('textShadow');
				replBut.off();
			}
		});
        $('.delImg').off().on('click', function (e){
            if (confirm('Delete?')) j.post(['delete'], function (data) {
                if (data.status) {
                    message('Deleted.');
                    nav.goTo(133);
                }
                else {
                    message('This image has a reference and can\'t be deleted.', 3);
                    debug.cnsl('Not deleted');
                    debug.cnsl(data);
                }
            }, {id: frmo.id,formId:133});
        });
	},
    clearCache:function () {
        j.post(['update','cache'], function (data) {
            debug.cnsl(data);
            message("Success!", 1);
        }, {imgId:frmo.id});
    }
};
        frm[168] = {
	vformId: false,
    init:function(){
        j.post(['init'], function (data) {
        	debug.cnsl(data);
	        frmo.forms = data.forms;
	        frmo.CPV = data.CPV;
	        //frmo.sjv = data.scriptJSV;
            for(var key in sett.forms){
                $('.formIds').append('');
            }
	        frmo.formsText = "\r\n\r\n**** Active forms versions ****  \r\n";
	        for(var key in frmo.forms){
		        frmo.formsText = frmo.formsText + key + ': ' + frmo.forms[key] + '; ';
	        }
	        /*$('.jsSubmit .oldVers').text('(cur ver. '+frmo.sjv+')');*/
        }, {});
	    $('.formIds').off().on('change', function () {
            frmo.vFormId = $('.formIds').val();
		    $('.formSubmit .selectedId [name="comment"]').prop('disabled', true);
            $('.formSubmit .selectedId [name="comment"]').removeAttr('disabled').addClass();
            if(frmo.vFormId!='all')$('.formSubmit input[name="version"]').val(frmo.forms[frmo.vFormId]);
            else $('.formSubmit input[name="version"]').val('');
	    });
//For submit file
	    /*$('.jsSubmit button').off().on('click', function (e) {
            e.preventDefault();
		    e.stopImmediatePropagation();
		    var data = ff.toObj('submitJsVersion');
		    data['baseVersion'] = frmo.sjv;
		    j.post(['insert', 'script'], function (data) {
			    debug.cnsl(data);
				if(data.status) message('New version for js file submited', 1);
				else message(data.error, 0)
		    }, data);
	    });*/
	    $('.formSubmit button.save').off().on('click', function (e) {
            e.preventDefault();
		    e.stopImmediatePropagation();
            frmo.comment='';
		    var data = ff.toObj('submitFormVersion');
		    data['vFormId'] = frmo.vFormId;
		    if(data['vFormId'] != 'all')frmo.comment = data['comment'] + frmo.formsText + "\r\n Control Panel Version: "+frmo.CPV;
		    else frmo.comment = data['comment'] + "\r\n\r\n Group backup for CP Forms" + frmo.formsText + "\r\n Control Panel Version: "+frmo.CPV;
		    data['comment'] = frmo.comment;
		    debug.cnsl(data);
		    if(isDefined(frmo.vFormId))j.post(['insert', 'form'], function (data) {
			    debug.cnsl(data);
				if(data.status){
					message('New version for '+frmo.vFormId+' form submitted', 1);
					nav.goTo(169, frmo.vFormId);
				}
				// else message(data.error, 0)
		    }, data);
		    else  message('You should select form before submitting it, or select all forms', 3);
	    });
    }
};
        frm[169] = {
    init:function(param){
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.listFV = data.listFV;
            frmo.curForm = parseInt(param[0]);
            //frmo.listSV = data.listSV;
            for(var key in sett.forms){
                $('.formIds').append('');
            }
            for(var key in frmo.listFV){
                var order = new Array ('vFormId', 'version', 'baseVersion', 'comment', 'createUser', 'createDate');
                var table = e('formsTbody');
                var act = frmo.listFV[key]['active']==1?'current ' : '';
	            var line = e(null, table, 'tr', act + frmo.listFV[key]['vFormId']);
	            //debug.cnsl(frmo.listFV[key]);
                for(var k in order){
                    var i = order[k];
                    var text = frmo.listFV[key][i];
	                if (i == 'createDate') text = parseDate.shortDate(text);
	                e(null, line, 'td', i).innerHTML = text;
                }
                e(null, line, 'td', 'actions').innerHTML=' ';
            }
	        if(isDefined(sett.forms[frmo.curForm])){
	        	$('.formIds').val(frmo.curForm);
		        $('.vFormsList tbody tr').hide();
		        if ($('.vFormsList tr.'+frmo.curForm).length==0) $('.nothingMsg').show();
		        else $('.vFormsList tbody tr.'+frmo.curForm).show();
	        }
	        $('.formIds').off().on('change', function () {
	        	$('.nothingMsg').hide();
		        $('.vFormsList').removeClass('panel-collapsed');
		        $('.vFormsList .panel-body').show();
		        $('.vFormsList [data-action="collapse"]').removeClass('rotate-180');
		        var vFid = $('.formIds').val();
		        if(vFid!='all'){
			        $('.vFormsList tbody tr').hide();
			        if ($('.vFormsList tr.'+vFid).length==0) $('.nothingMsg').show();
			        else $('.vFormsList tbody tr.'+vFid).show();
		        }
		        else $('.vFormsList tbody tr').show();
	        });
        }, {});
    }
};
        frm[170] = {
    init:function(params){
        j.post(['init', params[0], params[1]], function (data) {
            // debug.cnsl(data);
	        if(/*data.scriptData == null && */data.formData == null) nav.goTo(169);
            frmo.formInfo = data.formData;
            //frmo.fileInfo = data.scriptData;
            if(params[0]=='fv'){
                $('.formVersion').show();
	            for (var i in frmo.formInfo){
	            	//debug.cnsl(i);
		            $('.formVersion [name='+i+']').val(frmo.formInfo[i]);
		            if(i=='vFormId') $('.formVersion [name="form"]').val(nav.ref.idToTitle[frmo.formInfo['vFormId']].join(' / '));
	                else if(i=='baseVersionId'){
                        var base = frmo.formInfo['versions'][frmo.formInfo['baseVersionId']];
	                	if (isDefined(base)) base = base['version'];
	                	else base = 'no';
	                	$('.formVersion [name="baseVersion"]').val(base);
	                }
	                else if(i=='version'){
	                    for (var k in frmo.formInfo['versions']){
                            var base = 'no';
		                    if (isDefined(frmo.formInfo['versions'][frmo.formInfo['versions'][k]['baseVersionId']]))
                                base = frmo.formInfo['versions'][frmo.formInfo['versions'][k]['baseVersionId']]['version'];
		                    //debug.cnsl(frmo.formInfo);
		                    debug.cnsl(k);
		                    $('.formVersion select[name="version"]').append('');
	                    }
                        $('.formVersion [name="version"]').val(frmo.formInfo['id']);
                    }
	            }
            }
	        /*else if(params[0]=='sv'){
	         $('.fileVersion').show();
	         for (var i in frmo.fileInfo){
	         $('.fileVersion [name='+i+']').val(frmo.fileInfo[i]);
	         if(i=='version'){
	         for (var k in frmo.fileInfo['versions'])
	         $('.fileVersion select[name="version"]').append('');
	         $('.fileVersion [name="version"]').val(frmo.fileInfo['id']);
	         }
	         }
	         }*/
        }, {});
        frmo.events();
    },
	del:{
		fv:function () {
			if(confirm('Delete this version of the form?'))
			j.post(['delete', 'fv', frmo.formInfo['id']], function (data) {
				debug.cnsl(data);
				if(data.status){
					message('Form version deleted successfully', 1);
					nav.goTo(169, frmo.formInfo['vFormId']);
				}
				else message("Error deleting form version.", 0);
			}, {});
		}
		/*sv:function () {
			if(confirm('Are you sure you want to delete this file version?'))
			j.post(['delete', 'sv', frmo.fileInfo['id']], function (data) {
				debug.cnsl(data);
				if(data.status){
					message('File version deleted successful', 1);
					nav.goTo(169);
				}
				else message('Error file version didn\'t delete', 0);
			}, {});
		}*/
	},
	restore:{
		fv:function (e) {
			if(confirm('Restore this version of the form?'))
			j.post(['update', 'restore', 'fv', frmo.formInfo['id']], function (data) {
				debug.cnsl(data);
				message(data.result, 1);
			}, {});
		},
		/*sv:function (e) {
			if(confirm('Are you sure want to restore this file version?'))
			j.post(['update', 'restore', 'sv', frmo.fileInfo['id']], function (data) {
				debug.cnsl(data);
				if(data.status) message('File version restored successful', 1);
				else message('Error file version didn\'t restore', 0);
			}, {});
		}*/
	},
	save:{
		fv:function (e) {
			var com = $('.formVersion textarea[name="comment"]').val();
			debug.cnsl(com);
			j.post(['update', 'save', 'fv', frmo.formInfo['id']], function (data) {
				debug.cnsl(data);
				if(data.status)message('Form version saved successful.', 1);
				else message('Error saving form version.', 0);
			}, {comment:com});
		},
		/*sv:function (e) {
			var com = $('.fileVersion textarea[name="comment"]').val();
			debug.cnsl(com);
			j.post(['update', 'save', 'sv', frmo.fileInfo['id']], function (data) {
				debug.cnsl(data);
				if(data.status) message('File version saved successful', 1);
				else message('Error file version didn\'t save', 0);
			}, {comment: com});
		}*/
	},
	events: function () {
		$('.goForm').off().on('click', function () {
			nav.goTo(frmo.formInfo['vFormId']);
		});
		$('.goFormList').off().on('click', function () {
			nav.goTo(169, frmo.formInfo['vFormId']);
		});
		$('select[name="version"]').off().on('change', function () {
			var id = /*params[0]=='sv' ? $('.fileVersion select[name="version"]').val() :*/ $('.formVersion select[name="version"]').val();
            id = frmo.formInfo['versions'][id]['id'];
			//debug.cnsl(id);
			nav.goTo(170, 'fv/'+id);
		});
	}
};
        frm[171] = {
    init:function(path){
        j.post(['init'], function (data) {
        	frmo.relList = data.list;
        	$('#relTbody').empty();
        	for (var a in data.list) {
        	    var line = e(a, e('relTbody'), 'tr');
        	    var order = new Array('parentFormId', 'childFormId', 'comment', 'createUser');
        	    for (var c in order) {
        	    	var b = order[c];
		            var cont = data.list[a][b];
		            if(b=='parentFormId' || b=='childFormId')cont = cont+': '+sett.forms[cont];
		            else if(b=='createUser')cont = cont + '
' + parseDate.shortDate(data.list[a]['createDate']);
		            e(null, line, 'td').t(cont);
        	    }
		        e(null, line, 'td').t('')
        	}
            debug.cnsl(data);
        	if(path=='create'){
        		frmo.createRel();
	        }
        }, {});
    },
    createRel:function () {
        $("html, body").animate({scrollTop: 0}, 1000);
    	if (!document.getElementById('new')){
		    var line = e('new', e('relTbody'), 'tr', null, {prepend: true});
		    e(null, line, 'td').t(local.getSelect(sett.forms, 'parentFormId', '-- Select parrent form id --'));
		    e(null, line, 'td').t(local.getSelect(sett.forms, 'childFormId', '-- Select child form id --'));
		    e(null, e(null, line, 'td'), 'textarea').a('name', 'comment').a('cols', '40').a('rows', '4');
		    e(null, line, 'td');
		    e(null, line, 'td', 'actions').t('');
	    }
	    else message('Create previous relation before creating new', 3);
    },
	del:function (t) {
    	var relId = $(t).parents('tr')[0].id;
    	debug.cnsl(relId);
		if (confirm('Delete this relation?'))
			j.post(['delete'], function (data) {
				if (data.status){
					message('Relation deleted successfully', 1);
					$('#'+relId).hide();
				}
				else message('System error', 0);
			}, {id: relId});
	},
	ins:function (t) {
    	var newRel = ff.toObj('new');
		j.post(['insert'], function (data) {
			if (data.status){
				message('Relation created successfully', 1);
				frmo.init();
			}
			else if(data.error.indexOf('Duplicate')+1) message('The relations between these forms has already been created',3);
			else message('System Error', 0);
		}, newRel);
	}
};
        frm[186] = {
	listItem: '',
	defList: new Array(),
	init:function(){
        j.post(['init'], function (data) {
            frmo.list(data);
        }, {});
		frmo.events();
	},
	list:function (data) {
        empty(e('cronTbody'));
        for(var k in data.cron){frmo.defList[data.cron[k]['id']] = data.cron[k];}
        //debug.cnsl(data);
        frmo.run.taskDef(data.cron);
        local.getSelect(data.cronTaskTypes, 'type', ' -- select an option -- ', 'true', 'Type', 'types');
    },
	events:function () {
		$('#executableEditName').off().on('click', function () {
			var exInp = $('[name="executable"]')[0];
			if(exInp.disabled)exInp.disabled=false;
			else exInp.disabled = true;
		});
        $('#searchBtn').off().on('click', function (ev) {frmo.search();});
        $('#searchInput').off().on('keydown', function (ev) {
            if (ev.keyCode == 13){
                ev.preventDefault();
                ev.stopImmediatePropagation();
                frmo.search();
            }
        });
        $('#activeSearch').off().on('change', function (ev) {frmo.search();});
        $('#working').off().on('change', function (ev) {frmo.search();});
        $('#notActiveSearch').off().on('change', function (ev) {frmo.search();});
	},
	insert:function () {
		j.post(['insert'], function (data) {
			debug.cnsl(data);
			if(data.status){
				message('Saved!',1);
				form.init();
			}
		}, ff.toObj('cron') );
	},
	del:function (e) {
		if(confirm('Delete?')) j.post(['delete'], function (data) {
			if (data.statusQR) {
				message('Deleted.', 1);
				$(e).parents('tr').remove();
			}
			else {
                message('Error. Task definition was not deleted. Please delete all active tasks for it, and then try again', 3);
			}
		}, {id: $(e).parents('tr')[0].id });
	},
	update: {
		active: function (e) {
			debug.cnsl(e);
			j.post(['update', 'active'], function (data) {
				debug.cnsl(data);
				if (data.status) {
					message('Сохранено!', 1);
                    form.init();
                }
			}, {id: $(e).parents('tr')[0].id, active: $(e)[0].checked});
		},
		all:function () {
			j.post(['update', 'all'], function (data) {
				debug.cnsl(data);
				if (data.status) {
					message('Сохранено!', 1);
					form.init();
				}
			}, ff.toObj('cron'));
		},
		restart:function (ev) {
            var id = $(ev).parents('tr')[0].id;
            if(confirm('Restart this taskDef?'))
            	j.post(['update', 'working'], function (data) {
                debug.cnsl(data);
                if(data.status) {
                    message('Restarted successfully', 1);
                    $('#'+id).removeClass('working');
                }
                else message('System error', 0);
            }, {id: id, working: 0});
        }
	},
	run:{
		taskDef:function (data) {
			var cron = data;
			var order = new Array('id','active', 'name', 'dsc', 'executable', 'type', 'cronInterval', 'cronLastRun', 'createDate');
			for(var i in cron) {
				var line = cron[i];
				var work = line['working']!=0?'working':'';
				var tr = e(line['id'], e('cronTbody'), 'tr', work).a('data-typeId',line['typeId']);
				for(var k in order) {
					var o = order[k];
					if(o=='active'){
						e(null, tr, 'td', order[k]).innerHTML='';
						if(line[o]=='1') $(tr).find('.active input').attr('checked','checked');
						else $(tr).find('.active input').removeAttr('checked');
					}
					else if(o=='createDate')e(null, tr, 'td', o).innerHTML='Date: '+parseDate.shortDate(line[o])+'
User: '+line['createUser'];
					else e(null, tr, 'td', o).innerHTML=line[o];
				}
					$(tr).append(''+
						' '+
                        ''+
						'' +
					' | ');
                e(null, tr, 'span', 'secretRestart').t('').a('title', 'Activate this task again');
			}
            /*$('.secretRestart').off().on('click', function (ev) {
                var id = $(ev.target).parents('tr')[0].id;
                if(confirm('Restart this taskDef?'))j.post(['update', 'working'], function (data) {
                    debug.cnsl(data);
                    if(data.status) {
                        message('Restarted successfully', 1);
                        $('#'+id).removeClass('working');
                    }
                    else message('System error', 0);
                }, {id: id, working: 0});
            });*/
		}
	},
	f:{
		add:function () {
			$('#formBlock button').hide();
			$('#cron')[0].reset();
			$('#formBlock,#insert').fadeIn(250);
			$('[name="executable"]')[0].disabled=false;
			$('#executableEditName')[0].checked = true;
		},
		edit:function (ev) {
			$('#formBlock button').hide();
			$('#formBlock,#save').fadeIn(250);
            if(frmo.validator)frmo.validator.destroy();
			frmo.events();
			var id = $(ev).parents('tr')[0].id;
			var typeId = $(ev).parents('tr').attr('data-typeId');
			var formData = frmo.defList[id];
			$('[name="executable"]')[0].disabled=true;
			$.each(formData,function (fieldName,val) {
				var itemForm = $('#formBlock').find('*[name='+fieldName+']');
				if(fieldName=='createDate')val = parseDate.shortDate(val);
				if(val=='0000-00-00')val = null;
				if(itemForm.is('select')){
					itemForm[0].value = typeId;
				}
				else if(itemForm.is('*[type="checkbox"]'))
					switch(parseInt(val)){
						case 0:{
							itemForm.removeAttr('checked');
							break;
						}
						case 1:{
							itemForm.prop('checked','checked');
							break;
						}
					}
				else itemForm.val(val);
				debug.cnsl(fieldName,val);
			});
		},
		close:function () {
			$('#formBlock,#formBlock button').fadeOut();
            $('#cron')[0].reset();
            if(frmo.validator)frmo.validator.destroy();
		}
	},
    search:function () {
        frmo.searchParams = {
            sw: $('#searchInput').val(),
            a: $('#activeSearch')[0].checked,
            na: $('#notActiveSearch')[0].checked,
			working:  $('#working')[0].checked,
            page: frmo.page,
            pagerCount: frmo.pagerCount
        };
        j.post(['init', 'search'], function (data) {
            if (data.result){
                //frmo.list = data.list;
                frmo.list(data);
                if(frmo.listCount==0)message('Not found', 3);
            }
            else {message('Not found', 3)}
            debug.cnsl(data);
        }, frmo.searchParams);
    }
};
        frm[187] = {
    pagerCount: 50,
    dataSeted: false,
    searchParams: false,
    tdSelector: false,
    init: function (params) {
        frmo.page = (params.shift() || 0);
        if (frmo.searchParams) {
            e('tdSelector').t(frmo.tdSelector);
            $('#tdSelector').val(frmo.searchParams.taskDef);
            $('#statusSelect').val(frmo.searchParams.status);
            $('#searchInput').val(frmo.searchParams.sw);
            frmo.search();
        }
        else {
            frmo.search();
        }
        /*j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.listCount = data.Count;
            frmo.list = data.list;
            frmo.run(data.cronHistory);
            if (!frmo.tdSelector){ for (var t in data.tds){
            e(null,e('tdSelector'),'option')
                    .t(data.tds[t])
                    .a('value',t);
            }
            frmo.tdSelector = document.getElementById('tdSelector').innerHTML;}
            else e('tdSelector').t(frmo.tdSelector);
        }, {page: frmo.page, pagerCount: frmo.pagerCount});
    }*/
        e('searchPanel').onclick = function () {
            if (frmo.dataSeted) e('searchPanel').reset();
            frmo.dataSeted = false;
        };
        $('#searchBtn').off().on('click', function (ev) {
            frmo.page = 0;
            frmo.search();
        });
        $('#searchInput').off().on('keydown', function (ev) {
            if (ev.keyCode == 13) {
                ev.preventDefault();
                ev.stopImmediatePropagation();
                frmo.page = 0;
                frmo.search();
            }
        });
        $('#statusSelect').off().on('change', function (ev) {
            frmo.page = 0;
            frmo.search();
        });
        $('#tdSelector').off().on('change', function (ev) {
            frmo.page = 0;
            frmo.search();
        });
    },
    pager: {
        next: function () {
            nav.goTo(parseInt(form.id), [parseInt(frmo.page) + 1]);
        },
        prev: function () {
            nav.goTo(parseInt(form.id), [parseInt(frmo.page) - 1]);
        }
    },
    run: function (data) {
        empty(e('cronATbody'));
        var actList = data;
        var order = new Array('status', 'name', 'type', 'params', 'startDate', 'completeDate', 'msg'/*,  'createUser'*/, 'createDate');
        for (var i in actList) {
            var stat = actList[i]['status'];
            var tbl = e('cronATbody');
            var tr = e(actList[i]['id'], tbl, 'tr', stat == 0 ? 'uncomplete' : stat == 1 ? 'inProgress' : stat == 2 ? 'completed' : 'error');
            for (var c in order) {
                a = order[c];
                if (a == 'createDate' /*|| a=='startDate'||a=='completeDate'*/) {
                    actList[i][a] = parseDate.shortDate(actList[i][a])
                }
                else if (a == 'msg' && actList[i]['status'] == 3) actList[i][a] = actList[i]['errorMsg'];
                else if (a == 'type') actList[i][a] = actList[i][a] == 1 ? 'recurring' : 'once';
                else if (a == 'status') {
                    actList[i][a] = actList[i][a] == 0 ? 'uncomplete' : actList[i][a] == 1 ? 'inProgress' : actList[i][a] == 2 ? 'completed' : '';
                    actList[i][a] = '';
                }
                else if (a == 'msg') actList[i][a] = actList[i][a] + actList[i]['errorMsg'];
                e(null, tr, 'td').t(actList[i][a]);
            }
            $(tr).append('' +
                '' +
                ' | ');
            e(null, tr, 'span', 'secretDelete').t('X').a('title', 'Delete record finally');
        }
        pagerService();
        $('.statusTable')[0].style.marginRight = document.getElementById('pager').offsetWidth + 'px';
        $('.secretDelete').off().on('click', function (ev) {
            var id = $(ev.target).parents('tr')[0].id;
            if (confirm('Delete this cron history record?')) {
                j.post(['delete'], function (data) {
                    debug.cnsl(data);
                    if (data.statusQR) {
                        message('Record deleted successfully', 1);
                        $('#' + id).hide();
                    }
                    else message('System error', 0);
                }, {id: id});
            }
        });
    },
    search: function () {
        frmo.searchParams = {
            taskDef: $('#tdSelector').val(),
            status: $('#statusSelect').val(),
            sw: $('#searchInput').val(),
            page: frmo.page,
            pagerCount: frmo.pagerCount
        };
        j.post(['init', 'search'], function (data) {
            if (isDefined(data.page)) {
                frmo.page = data.page;
                history.pushState(null, null, nav.link(187));
            }
            frmo.pushTaskDefId(data.tds);
            if (isDefined(data.Count)) {
                frmo.listCount = data.Count;
                frmo.list = data.list;
                frmo.run(data.cronHistory);
                if (frmo.listCount == 0) message('Not found', 3);
            }
            else {
                message('Not found', 3)
            }
            debug.cnsl(data);
        }, frmo.searchParams);
    }
    , pushTaskDefId: function (tds) {
        debug.cnsl("tdSelector = " + tdSelector);
        if (!frmo.tdSelector) {
            for (var t in tds) {
                e(null, e('tdSelector'), 'option')
                    .t(tds[t])
                    .a('value', t);
            }
            frmo.tdSelector = document.getElementById('tdSelector').innerHTML;
        }
        //else e('tdSelector').t(frmo.tdSelector);
    }
    , reactivate: function (ev) {
        var id = $(ev).parents('tr')[0].id;
        if (confirm('Activate this task again?')) j.post(['update'], function (data) {
            debug.cnsl(data);
            if (data.statusQR) {
                message('Task activated successfully', 1);
                //$('#' + id).hide();
            }
            else message('System error', 0);
        }, {id: id});
    }
};
        frm[188] = {
    pagerCount: 50,
    dataSeted:false,
    searchParams:false,
    tdSelector:false,
    userSelector:false,
	init:function(params){
        frmo.page = (params.shift() || 0);
        if(frmo.searchParams){
            e('tdSelector').t(frmo.tdSelector);
            $('#tdSelector').val(frmo.searchParams.taskDef);
            $('#statusSelect').val(frmo.searchParams.status);
            $('#searchInput').val(frmo.searchParams.sw);
            frmo.search();
        }
        else {
            frmo.search();
			/*j.post(['init'], function (data) {
				debug.cnsl(data);
                frmo.listCount = data.Count;
				frmo.tasks = data.cronTaskNames;
                frmo.run(data.activeCron);
            }, {page: frmo.page, pagerCount: frmo.pagerCount});*/
        }
        e('searchPanel').onclick = function(){
            if (frmo.dataSeted) e('searchPanel').reset();
            frmo.dataSeted = false;
        };
        $('#searchBtn').off().on('click', function (ev) {frmo.page = 0; frmo.search();});
        $('#searchInput').off().on('keydown', function (ev) {
            if (ev.keyCode == 13){
                ev.preventDefault();
                ev.stopImmediatePropagation();
                frmo.page = 0;
                frmo.search();
            }
        });
        $('#tdSelector').off().on('change', function (ev) {frmo.page = 0; frmo.search();});
        $('#userSelector').off().on('change', function (ev) {frmo.page = 0; frmo.search();});
        $('#primarySearch').off().on('change', function (ev) {frmo.page = 0; frmo.search();});
	},
    pager: {
        next:function () {
            nav.goTo(parseInt(form.id),[parseInt(frmo.page)+1]);
        },
        prev:function () {
            nav.goTo(parseInt(form.id),[parseInt(frmo.page)-1]);
        }
    },
	run :function (actList) {
        empty(e('cronATbody'));
        var order = new Array('name', 'type', 'intervalMinutes', 'params', 'startDate', 'createUser', 'createDate');
        for(var i in actList){
            var tbl = e('cronATbody');
            var isPrimary = actList[i]['p']!=0? 'isPrimary' : '';
            var tr = e(actList[i]['id'], tbl, 'tr', isPrimary);
            for (var c in order){
                var a=order[c];
                var el = actList[i][a];
                if(a=='intervalMinutes')el = isDefined(el)?el:'-';
                //if(a=='startDate')el = isDefined(el)? '-' : parseDate.shortDate(el);
                else if(a=='type')el= el == 1 ? 'recurring' : 'once';
                else if(/*a=='startDate'||*/a=='createDate')el=parseDate.shortDate(el);
                e(null, tr, 'td', a).t(el);
                //debug.cnsl(a,el);
            }
            var act = e(null, tr, 'td');
            e(null, act,'button', 'btn delete btn-xs btn-danger')
                .t(' Cancel');
            e(null, act,'button', 'btn primarySet btn-xs btn-success '+isPrimary)
                .t(' Primary');
        }
        $('button.delete').off().on('click', function (ev) {
            if (confirm('Delete this task?')){
                j.post(['delete'], function (data) {
                    debug.cnsl(data);
                    $(ev.target).parents('tr').hide();
                }, {id: $(ev.target).parents('tr')[0].id});
            }
        });
        $('button.primarySet').off().on('click', function (ev) {
            j.post(['update', 'setPrimary'], function (data) {
                $(ev.target).parents('tr').toggleClass('isPrimary');
                debug.cnsl(data);
            }, {id: $(ev.target).parents('tr')[0].id});
        });
        pagerService();
    },
	add:function () {
		if (!isDefined($('#new')[0])){
			var line = e('new', e('cronATbody'), 'tr', null, {prepend:true});
			//e(null, line, 'td').t(local.getSelect(frmo.tasks, 'taskDefId', '-- select task name --', true));
			e(null, line, 'td').t(local.getSelect(frmo.tasks, 'taskDefId', 14, true));
			//e('type', line, 'td').t(local.getSelect({0:'runs once', 1:'recurring'}, 'type', '-- select type --', true));
			e('type', line, 'td').t(local.getSelect({0:'runs once', 1:'recurring'}, 'type', 0, true));
			e(null, line, 'td').t('');
			e(null, line, 'td').t('');
			e(null, line, 'td').t(' ');
			e(null, line, 'td').t('');
			$('#type select').off().on('click', function (ev) {
				if($('#type select').val()==1)$('input[name="intervalMinutes"]')[0].disabled = false;
				else $('input[name="intervalMinutes"]')[0].disabled = true;
			});
			$(e(null, line, 'td').t(''))
				.off().on('click', function () {
					var newData = ff.toObj('new');
					newData['startDate'] = newData['startDate'].replace('T', ' ');
					debug.cnsl(newData);
					j.post(['insert'], function (data) {
						form.init();
					}, newData);
			});
		}
		else message('Add previous task', 3)
	},
    search:function () {
        frmo.searchParams = {
            taskDef: $('#tdSelector').val(),
            user: $('#userSelector').val(),
            sw: $('#searchInput').val(),
            p: $('#primarySearch')[0].checked,
            page: frmo.page,
            pagerCount: frmo.pagerCount
        };
        j.post(['init', 'search'], function (data) {
            frmo.tasks = data.cronTaskNames;
            if (isDefined(data.Count)){
                if (isDefined(data.page)) {
                    frmo.page = data.page;
                    history.pushState(null, null, nav.link(188));
                }
                frmo.listCount = data.Count;
                frmo.list = data.list;
                frmo.run(data.activeCron);
                if (!frmo.tdSelector){ for (var t in data.cronTaskNames){
                    e(null,e('tdSelector'),'option')
                        .t(data.cronTaskNames[t])
                        .a('value',t);
                }
                    frmo.tdSelector = document.getElementById('tdSelector').innerHTML;}
                //else e('tdSelector').t(frmo.tdSelector);
                if (!frmo.userSelector){ for (var t in data.createUsers){
                    e(null,e('userSelector'),'option')
                        .t(data.createUsers[t])
                        .a('value',t);
                }
                    frmo.userSelector = document.getElementById('userSelector').innerHTML;}
                //else e('userSelector').t(frmo.userSelector);
                if(frmo.listCount==0)message('Not found', 3);
            }
            else {message('System Error', 3);}
            debug.cnsl(data);
        }, frmo.searchParams);
    }
};
        frm[189] = {
	init:function(){
		if(!isDefined(frmo.actions))frmo.actions = $('.actions').clone();
		if(!isDefined(frmo.newRow))frmo.newRow = $('#new').remove().clone();
		j.post(['init'], function (data) {
			debug.cnsl(data);
			frmo.run.vList(data.versions);
		}, {});
	},
	run:{
		vList: function (versions) {
			var order = new Array('vid', 'comment', 'createUser', 'createDate');
			e('versionsTbody').innerHTML='';
		    for (var a in versions) {
		    	var act = frmo.actions.clone();
			    var line = e(versions[a]['id'], e('versionsTbody'), 'tr');
                for (var b in order) {
                	var c = order[b];
                    var cont = versions[a][c];
	                //debug.cnsl(cont);
                    if(c == 'createDate')cont = parseDate.shortDate(cont);
                    if(c=='comment') e(null, line, 'td', c+' edit').t(cont).a('onclick', 'frmo.edit.td(this)').a('data-name', 'comment');
                    else e(null, line, 'td', c).t(cont);
                }
			    $(line).append(act);
            }
		},
		addLine:function () {
			if($('#new').is('tr')) {message('Click "Add" for previous line', 3); return;}
			else var newLin = e('versionsTbody').h(frmo.newRow.clone().show()[0]);
		}
	},
	update:{
		td:function (e,a) {
			a = a || false;
			var id = $(e).parents('tr')[0].id;
			$(e).parents('tr').children('td.comment')[0].id='comment';
			var formData = ff.toObj(id);
			if (!isDefined(formData['id'])) formData['id'] = id;
			debug.cnsl(formData);
			j.post(['update','all'], function (data) {
				if(data.status){
					message('Saved!',1);
					if(!a)form.init();
				}
				else message('Not saved!(',0);
			}, formData);
			$(e).parents('tr').children('td.comment').attr('contenteditable', 'false');
			$(e).attr('disabled', 'disable');
		}
	},
	insert:function (e) {
		var formData = ff.toObj('new');
		debug.cnsl(formData);
		j.post(['insert', 'new'], function (data) {
			if (data.status) {
				message('Сохранено!', 1);
				frmo.init();
			}
			else {
				message('Not saved!', 2);
				$('#new').css('background-color','#deb887');
			}
		}, formData);
		$('#new').remove();
	},
	edit: {
		td: function (e) {
			if($(e).hasClass('edit')){
				$(e).attr('contenteditable', 'true');
				$(e).parents('tr').find('button.save').removeAttr('disabled');
			}
		}
	},
	del:function (e) {
		if(confirm('Delete?')) j.post(['delete'], function (data) {
			if (data.status) {
				message('Deleted.');
				$(e).parents('tr').remove();
			}
		}, {id: $(e).parents('tr')[0].id });
	}
};
        frm[190] = {
    init:function(){
         j.post(['init'], function (data) {
            if(data.sett){
                for(var k in data.sett){
                    var main = e('settList');
                    var property = data.sett[k];
                    if (property['type'] == 'hr') {
                        e(null, main, 'h4', 'col-xs-12 col-md-12').t(property['name']);
                        var block = e(null, main, 'hr', 'col-xs-12 col-md-12 separator');
                    } else if (property['type'] == 'textarea') {
                        var block = e('prop' + property['id'], main, 'div', 'col-xs-6 col-md-3');
                        e(null, e(null, block, 'label').t(property['name']), 'p').t(property['dsc']);
                        e(property['id'], block, 'textarea', 'form-control').a('name', property['name']).t(property['value']);
                        if (property['disabled'] == 1) e(property['id']).disabled = true;
                    } else {
                        var block = e('prop' + k, main, 'div', 'col-xs-6 col-md-3');
                        e(null, e(null, block, 'label').t(property['name']), 'p').t(property['dsc']);
                        e(property['name'], block, 'input', 'form-control').a('name', property['name']).a('type', property['type'] || 'text').a('value', property['value']);
                        if (property['name'] == 'cronCurrentStatus' && property['value'] != '0'){
                            e('secretRestart', block, 'span').a('title','Reset cron').t('');
                        }
                        if (property['type'] == 'checkbox' && property['value'] != '0') $(e(property['name']))[0].checked = true;
                        if (property['disabled'] == 1) $(e(property['name']))[0].disabled = true;
                    }
                }
            }
         }, {});
        $('.save').off().on('click', function (ev) {
            ev.preventDefault();
            ev.stopImmediatePropagation();
            var sett = ff.toObj('cPSettings');
            debug.cnsl(sett);
            j.post(['update'], function (data) {
                if(data.statusQR){
                    message('Settings saved successfully', 1);
                }
                else {
                    message("Error!")
                }
            }, sett);
            if(document.getElementById('new')) {
                var newSett = ff.toObj('new');
                j.post(['insert'], function (data) {
                    if (data.status) {
                        form.init();
                    }
                }, newSett);
            }
            else{
                $('#settList').empty();
                frmo.init();
            }
        });
        $('#secretRestart').off().on('click', function (ev) {
            if(confirm('Restart cron?'))
                if (confirm('Are you sure?'))
                j.post(['update', 'resetCron'], function (data) {
                debug.cnsl(data);
                if(data.statusQR) {
                    message('Cron has been reset successfully', 1);
                    form.init();
                    // $('#'+id).hide();
                }
                else message('System error', 0);
            }, {});
        });
    },
    addProp:function () {
        var main = e('main');
        var block = e(null, e('new', main, 'div', 'form-group'), 'div', 'row');
        e('disabled', e(null, block, 'div', ' col-md-1'), 'input', 'form-control').a('name', 'disabled').a('type', 'checkbox').a('title', 'disable edit');
        e('name', e(null, block, 'div', ' col-md-2'), 'input', 'form-control').a('name', 'name').a('placeholder', 'name');
        e('dsc', e(null, block, 'div', ' col-md-3'), 'input', 'form-control').a('name', 'dsc').a('placeholder', 'Description');
        e('type', e(null, block, 'div', ' col-md-3'), 'input', 'form-control').a('name', 'type').a('placeholder', 'type');
        e('value', e(null, block, 'div', ' col-md-3'), 'input', 'form-control').a('name', 'value').a('placeholder', 'value');
        $("html, body").animate({scrollTop: $(document).height()}, 1000);
    }
};
        frm[206] = {
	init:function(){
		j.post(['init'], function (data) {
			debug.cnsl(data);
			frmo.libsList = data.libsList
			$('#libRefTbody').empty();
			for (var a in data.list) {
				var line = e(a, e('libRefTbody'), 'tr');
				var order = new Array('vFormId', 'libName', 'createDate', 'createUser');
				for (var c in order) {
					var b = order[c];
					var cont = data.list[a][b];
					if(b=='vFormId')cont = cont+': '+data.list[a]['formName'];
					else if(b=='createDate')cont = parseDate.shortDate(data.list[a][b]);
					e(null, line, 'td').t(cont);
				}
				e(null, line, 'td').t('')
			}
		}, {});
	},
	createRel:function () {
		if(!isDefined($('#new')[0])) {
			var line = e('new', e('libRefTbody'), 'tr');
			e(null, line, 'td').t(local.getSelect(sett.forms, 'vFormId', '-- Select form id --'));
			e(null, line, 'td').t(local.getSelect(frmo.libsList, 'libId', '-- Select library id --'));
			e(null, line, 'td');
			e(null, line, 'td');
			e(null, line, 'td', 'actions').t('');
		}
		else message('Please create previous relation', 3);
	},
	del:function (t) {
		var relId = $(t).parents('tr')[0].id;
		debug.cnsl(relId);
		if (confirm('Delete this relation?'))
			j.post(['delete'], function (data) {
				if (data.status){
					message('Relation deleted successfully', 1);
					$('#'+relId).hide();
				}
				else message('System error', 0);
				debug.cnsl(data);
			}, {id: relId});
	},
	ins:function (t) {
		var newRel = ff.toObj('new');
		debug.cnsl(newRel);
		j.post(['insert'], function (data) {
			if (data.status){
				message('Relation created successfully', 1);
				frmo.init();
			}
			else message(data.error, 0);
				debug.cnsl(data);
		}, newRel);
	}
};
        frm[210] = {
    init: function () {
        if (!isDefined(frmo.newRow)) frmo.newRow = $('.chanel').remove().clone();
        j.post(['init'], function (data) {
            debug.cnsl(data);
            for (var id in data.usersList) {
                e(null, e('usersList', e('channelsTable'), 'datalist'), 'option').t(data.usersList[id]).value = id;
            }
            frmo.run.channelsList(data.channels);
        }, {});
    },
    run: {
        channelsList: function (channels) {
            $('#channelsTbody').empty();
            var chanelRow;
            $.each(channels, function (i, channel) {
                chanelRow = frmo.newRow.clone();
                chanelRow[0].id = parseInt(channel.id);
                for (var fieldName in channel) {
                    var val = channel[fieldName];
                    var td = $(chanelRow).find('.' + fieldName);
                    if (fieldName == 'createUser') val = val + ' 
 ' + parseDate.shortDate(channel['createDate']);
                    else if (fieldName == 'updateUser') val = val + ' 
 ' + parseDate.shortDate(channel['updateDate']);
                    else if (fieldName == 'imgId') {
                        val = "" +
                            "
";
                    }
                    if (fieldName == 'active') {
                        if (val == 1) td.find('input[name="active"]').attr('checked', 'checked');
                        else td.find('input[name="active"]').removeAttr('checked', 'checked');
                    }
                    else if (fieldName == 'isDefault') {
                        if (val == 1) td.find('input[name="isDefault"]').attr('checked', 'checked');
                        else td.find('input[name="isDefault"]').removeAttr('checked', 'checked');
                    }
                    else
                        td.html(val);
                }
                chanelRow.find('td.editable').on('click', function (e) {
                    $(this).off();
                    frmo.edit.td(e.target);
                });
                chanelRow.appendTo('#channelsTbody').show();
            });
            window.addEventListener('storage', function (e) {
                if (e.key == ('channelIdImgId' + frmo.channelId)) {
                    var id = localStorage.getItem('channelIdImgId' + frmo.channelId);
                    if (id > 0) {
                        frmo.update.img(id);
                        localStorage.clear('channelIdImgId' + frmo.channelId);
                    }
                    return false;
                }
            });
        },
        addLine: function () {
            if ($('#new').is('tr')) {
                message('Click "Add" for previous line', 3);
                return;
            }
            var row = frmo.newRow.clone().show();
            $(row).find('td.editable.text').each(function (i, v) {
                var fieldName = $(v)[0].className.replace('editable', '').replace('text', '').trim();
                // if (fieldName!='name')
                $(v).append('');
                /*else $(v).append('' +
                    '');*/
            });
            $(row).find('td.editable.textarea').each(function (i, v) {
                var fieldName = $(v)[0].className.replace('editable', '').replace('textarea', '').trim();
                $(v).append('');
            });
            $(row).find('button:not(.add), .status *').remove();
            $(row).find('button.add').show();
            $(row)[0].id = 'new';
            $(row).css('background-color', '#8fbc8f');
            $('#channelsTbody').append(row);
            $(row).find('td.owner input').attr('list', 'usersList');
            e(null, $(row).find('td.owner')[0], 'span');
            $("html, body").animate({scrollTop: $(document).height()}, 1000);
        }
    },
    update: {
        /*        active:function (e) {
                    j.post(['update','active'], function (data) {
                        if(data.status) message('Saved!',1);
                        form.init();
                    }, { id:$(e).parents('tr')[0].id, active:$(e)[0].checked });
                },*/
        td: function (e, a) {
            a = a || false;
            var id = $(e).parents('tr')[0].id;
            var formData = ff.toObj(id);
            if (!isDefined(formData['id'])) formData['id'] = id;
            debug.cnsl(formData);
            j.post(['update', 'all'], function (data) {
                if (isDefined(data.matched)) {
                    if (data.changed == 1 && data.errno == 0)
                        message('Channel\'s new url saved!', 1);
                    else if (data.errno == 1062)
                        message('This channel url has been already used', 3);
                    else if (data.errno != 0)
                        message('System error', 3);
                    else if (data.changed == 0)
                        message('Channel url can\'t be changed because it\'s not empty!', 0);
                }
                if (data.status) {
                    message('Channel info saved!', 1);
                    if (!a) form.init();
                }
                else if (data.error.indexOf('Duplicate entry') + 1 && data.error.indexOf('name') + 1) {
                    message('Channel name already exist', 3);
                }
                else if (data.error.indexOf('Duplicate entry') + 1 && data.error.indexOf('default') + 1) {
                    message('User can have only one default channel', 3);
                }
                else if (data.error.indexOf('Duplicate entry') + 1 && data.error.indexOf('cName') + 1) {
                    message('Channel url already exist', 3);
                }
                else message('Not saved!(', 0);
            }, formData);
        },
        img: function (newImgID) {
            j.post(['update', 'img'], function (data) {
                debug.cnsl(data);
                if (data.statusQR) {
                    message('Сохранено!', 1);
                    frmo.init();
                }
                else message('System error!', 0);
            }, {id: frmo.channelId, imgId: newImgID});
        }
    },
    insert: function (e) {
        // var id = $(e).parents('tr')[0].id;
        var formData = ff.toObj('new');
        // if (!isDefined(formData['id'])) formData['id'] = id;
        debug.cnsl(formData);
        if (formData.cName == '' || formData.name == '') message("Name and cName can't be empty", 0);
        else j.post(['insert'], function (data) {
            debug.cnsl(data);
            if (data.status) {
                message('Сохранено!', 1);
                frmo.init();
            }
            else if (data.error.indexOf('Duplicate entry') + 1 && data.error.indexOf('name') + 1) {
                message('Channel name already exist', 3);
            }
            else if (data.error.indexOf('Duplicate entry') + 1 && data.error.indexOf('default') + 1) {
                message('User can have only one default channel', 3);
            }
            else {
                message('Not saved!', 2);
                $('#new').css('background-color', '#deb887');
            }
        }, formData);
    },
    edit: {
        td: function (ev) {
            var text = $(ev).text().trim();
            var fieldName = $(ev)[0].className;
            if (fieldName == '') fieldName = $(ev).parents('td')[0].className;
            fieldName = fieldName.replace('editable', '').replace('textarea', '').trim();
            fieldName = fieldName.replace('editable', '').replace('text', '').trim();
            $(ev).empty();
            // if( $(e).hasClass('num') )  $(e).append('');
            // else if( $(e).hasClass('selector') )  $(e).append($(frmo.modulListSelect).val(text.match(/d+$/)[0]));
            if (fieldName == 'owner') $(ev).append('');
            else if ($(ev).hasClass('text')) $(ev).append('');
            else if ($(ev).hasClass('textarea')) $(ev).append('');
            $(ev).parents('tr').find('button.save').removeAttr('disabled');
        }
    },
    del: function (e) {
        if (confirm('Delete?')) j.post(['delete'], function (data) {
            if (data.status) {
                message('Deleted.');
                $(e).parents('tr').remove();
            }
            else message('Channel can\'t be deleted. For delete channel it should be empty');
        }, {id: $(e).parents('tr')[0].id});
    },
    getUsersList: function () {
        $('[name="chid"]').off().on('keyup', function (ev) {
            var inp = $(ev.target).val().trim();
            if (inp.length > 2) {
                j.post(['init', 'channelsList'], function (data) {
                    debug.cnsl(data);
                    var ckR = data.channelsList;
                    empty(e('hintList'));
                }, {word: inp});
            }
        });
    }
};
        frm[213] = {
    starsCount: 10,
    init: function (path) {
        var productId = path[0];
        frmo.productId = productId ? productId : 'new';
        if (productId) {
            j.post(['init'], function (data) {
                frmo.details = data.details;
                frmo.categories = data.categories;
                frmo.run.imagePanel();
                frmo.run.infoPanel();
            }, {productId: productId});
        } else {
            frmo.run.imagePanel();
            $('.editProduct').hide();
            debug.cnsl("new Product");
            $('#new-label').show();
            $('.issetProd').hide();
            $('.save').text("Сохранить новый товар");
            frmo.run.imagePanel();
            j.post(['init'], function (data) {
                debug.cnsl(data);
                var catList = '';
                for (var key in data.categories) {
                    catList += '';
                }
                document.getElementById('ctid').innerHTML = catList;
            });
        }
        $("#form :is(input,textarea)").on("change", function () {
            $("#navbar").on("click",function(){alert("Все несохранённое будет потеряно, сначала нужно сохранить!"); return false;});
            debug.cnsl("set PREVENT menu actions!");
        });
    },
    run: {
        infoPanel: function () {
            var catList = '';
            for (var key in frmo.categories) {
                catList += '';
            }
            document.getElementById('ctid').innerHTML = catList;
            var details = frmo.details;
            var formDetails = $('#detailsForm');
            formDetails[0].name = 'detailsForm';
            $.each(details, function (name, val) {
                if (val == '0000-00-00 00:00:00') val = null;
                if ((name == 'createDate' || name == 'updateDate') && val != null) val = parseDate.shortDate(val);
                if (name == 'playTime') val = formatTime(val);
                if (name == 'active' || name == 'available') {
                    formDetails.find("#" + name)[0].checked = val == 1;
                }
                formDetails.find('*[name="' + name + '"]').val(val);
            });
        },
        imagePanel: function () {
            frmo.loadImg(frmo.productId != 'new' ? frmo.details.imgId : '');
            window.addEventListener('storage', function (e) {
                if (e.key == ('midImgId' + frmo.productId)) {
                    var id = localStorage.getItem('midImgId' + frmo.productId);
                    if (id > 0) {
                        frmo.updateImage(id);
                        localStorage.clear('midImgId' + frmo.productId);
                    }
                    return false;
                }
            });
        },
        keywordPanel: function () {
            var ckR = frmo.curKeyWordsRef;
            for (var id in ckR) {
                e('kw' + id, e('existingKeywords'), 'span', 'oneKeyword').t(ckR[id] + ' ').a('data-id', id);
            }
            var pkW = frmo.popularKeyWords;
            for (var id in pkW) {
                e(null, e('popularKeywords'), 'a', 'addPopKwrd').t(pkW[id] + ' ').a('data-id', id).a('title', 'Click for add');
            }
        }
    },
    updateImage: function (imgId) {
        debug.cnsl('updateImage');
        var dataForUpdate = {
            mid: frmo.productId,
            imgId: imgId
        };
        debug.cnsl(dataForUpdate);
        if (frmo.productId != 'new') j.post(['update', 'applytomid'], function (data) {
            debug.cnsl(data);
            if (data.status) {
                message('Applied image to Mid successfully!', 1);
                frmo.loadImg(imgId);
                //if (isDefined(data.info) && data.info) message('Old screenshot has been deleted', 2);
            } else {
                message('Error applying image to Mid...', 0);
            }
        }, dataForUpdate);
        else {
            frmo.loadImg(imgId);
            document.getElementById('imgId').value = parseInt(imgId);
        }
    },
    loadImg: function (imgId) {
        debug.cnsl('loadImg');
        $('#mainImage')[0].src = img.url(parseInt(imgId), frmo.mediaImgWidth, frmo.mediaImgHeight);
    },
    clearImg: function () {
        if (confirm('Reset image?')) {
            localStorage.setItem('midImgId' + frmo.details.id, 4000);
            frmo.updateImage(4000);
        }
    },
    saveDetails: function (e) {
        var formData = ff.toObj("detailsForm");
        formData['id'] = frmo.productId;
        debug.cnsl(formData);
        if (frmo.productId != 'new') {
            j.post(['update', 'info'], function (data) {
                debug.cnsl(data);
                if (data.status) {
                    $("#navbar").off("click");
                    message('Сохранено!', 1);
                    form.init([frmo.productId]);
                } else message('Not saved', 2);
            }, formData);
        } else j.post(['insert'], function (data) {
            debug.cnsl(data);
            if (data.status) {
                $("#navbar").off("click");
                message('Сохранено!', 1);
                nav.goTo(213, [data.id]);
            } else message('Not saved', 2);
        }, formData);
    }
    , delProduct: function () {
        if (confirm('Delete this MID?'))
            j.post(['delete', 'mid'], function (data) {
                if (data.status) {
                    message('Товар успешно удалён!', 1);
                    nav.goTo(105);
                }
            }, {id: frmo.productId});
    },
    update: {
        active: function (e) {
            if (frmo.productId != 'new') {
                var val = e.checked ? 1 : 0;
                j.post(['update', 'active'], function (data) {
                    if (data.status) {
                        message('Сохранено!', 1);
                    } else message('Has not been saved!(', 0);
                }, {active: val, id: frmo.productId});
            }
        },
        available: function (e) {
            if (frmo.productId != 'new') {
                var val = e.checked ? 1 : 0;
                j.post(['update', 'available'], function (data) {
                    if (data.status) {
                        message('Сохранено!', 1);
                    } else message('Has not been saved!(', 0);
                }, {available: val, id: frmo.productId});
            }
        }
    }
};
        frm[243] = {
    init: function () {
        if (!isDefined(frmo.newRow)) frmo.newRow = $('.word').remove().clone();
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.run.list(data.libs);
        }, {});
    },
    run: {
        list: function (words) {
            $('#wordsTbody').empty();
            var wordRow;
            $.each(words, function (i, word) {
                wordRow = frmo.newRow.clone();
                wordRow[0].id = parseInt(word.id);
                $.each(word, function (fieldName, val) {
                    var td = $(wordRow).find('.' + fieldName);
                    if (fieldName == 'createDate') val = parseDate.shortDate(val);
                    /*if(fieldName=='active') {
                        if(val==1)td.find('input[name="active"]').attr('checked','checked');
                        else td.find('input[name="active"]').removeAttr('checked','checked');
                    }
                    else*/
                    td.text(val);
                });
                wordRow.find('td.editable').on('click', function (e) {
                    $(this).off();
                    frmo.edit.td(e.target);
                });
                wordRow.appendTo('#wordsTbody').show();
            });
            $('.merge :not(input)').on('click',function (e) {
                frmo.merge(e.target);
            });
        },
        addLine: function () {
            if ($('#new').is('tr')) {
                message('Click "Add" for previous line', 3);
                return;
            }
            var row = frmo.newRow.clone().show();
            $(row).find('td.editable.text').each(function (i, v) {
                var fieldName = $(v)[0].className.replace('editable', '').replace('text', '').trim();
                $(v).append('');
            });
            /*$(row).find('td.editable.textarea').each(function (i,v) {
                var fieldName = $(v)[0].className.replace('editable','').replace('textarea','').trim();
                $(v).append('');
            });*/
            $(row).find('button:not(.add), .status *').remove();
            $(row).find('button.add').show();
            $(row)[0].id = 'new';
            $(row).css('background-color', '#8fbc8f');
            $('#wordsTbody').append(row);
            $("html, body").animate({scrollTop: $(document).height()}, 1000);
        }
    },
    update: {
        /*        active:function (e) {
                    j.post(['update','active'], function (data) {
                        if(data.status) message('Saved!',1);
                        form.init();
                    }, { id:$(e).parents('tr')[0].id, active:$(e)[0].checked });
                },*/
        td: function (e, a) {
            a = a || false;
            var id = $(e).parents('tr')[0].id;
            var formData = ff.toObj(id);
            if (!isDefined(formData['id'])) formData['id'] = id;
            debug.cnsl(formData);
            j.post(['update', 'all'], function (data) {
                if (data.status) {
                    message('Сохранено!', 1);
                    if (!a) form.init();
                }
                else message('Not saved!(', 0);
            }, formData);
        }
    },
    insert: function (e) {
        // var id = $(e).parents('tr')[0].id;
        var formData = ff.toObj('new');
        // if (!isDefined(formData['id'])) formData['id'] = id;
        debug.cnsl(formData);
        j.post(['insert', 'new'], function (data) {
            if (data.status) {
                message('Сохранено!', 1);
                frmo.init();
            }
            else {
                message('Not saved!', 2);
                $('#new').css('background-color', '#deb887');
            }
        }, formData);
    },
    edit: {
        td: function (e) {
            var text = $(e).text().trim();
            var fieldName = $(e)[0].className;
            if (fieldName == '') fieldName = $(e).parents('td')[0].className;
            fieldName = fieldName.replace('editable', '').replace('text', '').trim();
            debug.cnsl(fieldName);
            $(e).empty();
            // if( $(e).hasClass('num') )  $(e).append('');
            // else if( $(e).hasClass('textarea') )  $(e).append('');
            // else if( $(e).hasClass('selector') )  $(e).append($(frmo.modulListSelect).val(text.match(/\d+$/)[0]));
            if ($(e).hasClass('text')) $(e).append('');
            $(e).parents('tr').find('button.save').removeAttr('disabled');
        }
    },
    del: function (e) {
        if (confirm('Delete?')) j.post(['delete'], function (data) {
            if (data.status) {
                message('Deleted.');
                $(e).parents('tr').remove();
            }
        }, {id: $(e).parents('tr')[0].id});
    },
    merge: function (e) {
        var from = $(e).parents('.word')[0].id;
        var to = $(e).parents('button').find('input').val();
        debug.cnsl(from, to);
        debug.cnsl(e);
        if (confirm('Merge?')) j.post(['update','merge'], function (data) {
            debug.cnsl(data);
            if (data.status2) {
                message('Merge success!',2);
                $(e).parents('.word').remove();
            }
            else message('Error',0);
        }, {from: from, to: to});
    }
};
        frm[299] = {
    init:function(){
 j.post(['init'], function (data) {
  debug.cnsl(data);
 }, {});
    }
};
        frm[310] = {
    devAlertOff: false,
    init: function (params) {
        j.post(['init'], function (data) {
            frmo.formList = data.forms;
            for (var f in data.forms) {
                $('#exportFId').append('');
            }
            var mods = document.querySelectorAll('select[name="modId"]')[0];
            for (var m in data.mods) {
                mods.options[mods.options.length] = new Option(m + ' - ' + data.mods[m].name, m);
            }
        }, {});
        var form = $('form.dropzone');
        if (!isDefined(window.FileReader))
            form.find('.dz-message span').html('Not supported browser!(').addClass('error');
        else {
            frmo.dropzone = form;
            form[0].addEventListener('dragover', function (e) {
                e.preventDefault();
                e.stopImmediatePropagation();
                debug.cnsl('dragover');
                frmo.dropzone.addClass('dz-drag-hover');
            }, false);// for design
            form[0].addEventListener('dragleave', function () {
                debug.cnsl('dragleave');
                frmo.dropzone.removeClass('dz-drag-hover');
            });// for design
            form[0].addEventListener('drop', function (event) {
                event.stopPropagation();
                event.preventDefault();
                event.dataTransfer.files[0].text().then(function(ev){frmo.formInfo = JSON.parse(ev); frmo.fileParse();});
            }, false);// chromes
            form.on('click', function () {
                $('').on('change', function () {
                    this.files[0].text().then(function(ev){frmo.formInfo = JSON.parse(ev); frmo.fileParse();});
                }).click();
            });
        }
    },
    fileParse: function () {
        $('.startBlock').hide();
        $('#formVersion').show();
        for (var i in frmo.formInfo) {
            debug.cnsl(i);
            $('#formVersion [name=' + i + ']').val(frmo.formInfo[i]);
        }
    },
    export: function (ev) {
        var efid = document.getElementById('exportFId').value;
        j.post(['export'], function (data) {
            frmo.download($("#exportFId option:selected").text()+'.sls',data['POST']);
        }, {efid: efid});
    },
    install: function () {
        if (confirm('Are you sure want to install this form as '+frmo.formInfo.fid+'?')){
            frmo.idChangeFiles(function () {
                var importData = ff.toObj('formVersion');
                importData['id'] = frmo.formInfo.fid;
                j.post(['insert', frmo.formInfo.fid], function (data) {
                    debug.cnsl(data);
                    message(data.result, 1);
                }, importData);
            });
        }
    },
    download: function (filename, text) {
        var element = document.createElement('a');
        element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
        element.setAttribute('download', filename);
        element.style.display = 'none';
        document.body.appendChild(element);
        element.click();
        document.body.removeChild(element);
    },
    idChangeFiles: function (callback) {
        var oldId = frmo.formInfo.fid;
        var newId = document.querySelector("[name='fid']").value;
        if(isDefined(frmo.formList[newId])){
            message('This form id is already exist in CPanel.', 3);
        }
        else {
            frmo.formInfo.fid = newId;
            document.querySelector("[name='css']").value = document.querySelector("[name='css']").value.replace(new RegExp('#f'+oldId, 'g'), '#f'+newId);
            document.querySelector("[name='js']").value = document.querySelector("[name='js']").value.replace('frm['+oldId+']', 'frm['+newId+']');
            document.querySelector("[name='sp']").value = document.querySelector("[name='sp']").value.replace(' s'+oldId, ' s'+newId);
            frmo.formInfo.fid = newId;
            if (isDefined(callback)) callback();
        }
    },
    devAlert:function(){
        if(!frmo.devAlertOff){
            alert('Change nothing if you\'re not sure. It\'s only for developers');
            frmo.devAlertOff = true;
        }
    }
};
        frm[315] = {
    init:function(){
        j.post(['init'], function (data) {
            if(data.sett){
                for(var k in data.sett){
                    var main = e('settList');
                    var property = data.sett[k];
                    if (property['type'] == 'hr') {
                        e(null, main, 'h4', 'col-xs-12 col-md-12').t(property['name']);
                        var block = e(null, main, 'hr', 'col-xs-12 col-md-12 separator');
                    } else if (property['type'] == 'textarea') {
                        var block = e('prop' + property['id'], main, 'div', 'col-xs-6 col-md-3');
                        e(null, e(null, block, 'label').t(property['name']), 'p').t(property['dsc']);
                        e(property['id'], block, 'textarea', 'form-control').a('name', property['name']).t(property['value']);
                        if (property['disabled'] == 1) e(property['id']).disabled = true;
                    } else {
                        var block = e('prop' + k, main, 'div', 'col-xs-6 col-md-3');
                        e(null, e(null, block, 'label').t(property['name']), 'p').t(property['dsc']);
                        e(property['name'], block, 'input', 'form-control').a('name', property['name']).a('type', property['type'] || 'text').a('value', property['value']);
                        if (property['name'] == 'cronCurrentStatus' && property['value'] != '0'){
                            e('secretRestart', block, 'span').a('title','Reset cron').t('');
                        }
                        if (property['type'] == 'checkbox' && property['value'] != '0') $(e(property['name']))[0].checked = true;
                        if (property['disabled'] == 1) $(e(property['name']))[0].disabled = true;
                    }
                }
            }
        }, {});
        $('.save').off().on('click', function (ev) {
            ev.preventDefault();
            ev.stopImmediatePropagation();
            var sett = ff.toObj('clientSettings');
            debug.cnsl(sett);
            j.post(['update'], function (data) {
                if(data.statusQR){
                    message('Settings saved successfully', 1);
                }
                else {
                    message("Error!")
                }
            }, sett);
            if(document.getElementById('new')) {
                var newSett = ff.toObj('new');
                j.post(['insert'], function (data) {
                    if (data.status) {
                        form.init();
                    }
                }, newSett);
            }
            else{
                $('#settList').empty();
                frmo.init();
            }
        });
        $('#secretRestart').off().on('click', function (ev) {
            if(confirm('Restart cron?'))
                if (confirm('Are you sure?'))
                    j.post(['update', 'resetCron'], function (data) {
                        debug.cnsl(data);
                        if(data.statusQR) {
                            message('Cron has been reset successfully', 1);
                            form.init();
                            // $('#'+id).hide();
                        }
                        else message('System error', 0);
                    }, {});
        });
    },
    addProp:function () {
        var main = e('main');
        var block = e(null, e('new', main, 'div', 'form-group'), 'div', 'row');
        e('disabled', e(null, block, 'div', ' col-md-1'), 'input', 'form-control').a('name', 'disabled').a('type', 'checkbox').a('title', 'disable edit');
        e('name', e(null, block, 'div', ' col-md-2'), 'input', 'form-control').a('name', 'name').a('placeholder', 'name');
        e('dsc', e(null, block, 'div', ' col-md-3'), 'input', 'form-control').a('name', 'dsc').a('placeholder', 'Description');
        e('type', e(null, block, 'div', ' col-md-3'), 'input', 'form-control').a('name', 'type').a('placeholder', 'type');
        e('value', e(null, block, 'div', ' col-md-3'), 'input', 'form-control').a('name', 'value').a('placeholder', 'value');
    }
};
        frm[320] = {
    init: function () {
        if (!isDefined(frmo.newRow)) frmo.newRow = $('.filter').remove().clone();
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.run.statusesList(data.statuses);
        }, {});
    },
    run: {
        statusesList: function (filters) {
            $('#filtersTbody').empty();
            var filterRow;
            $.each(filters, function (i, filter) {
                filterRow = frmo.newRow.clone();
                filterRow[0].id = parseInt(filter.id);
                $.each(filter, function (fieldName, val) {
                    var td = $(filterRow).find('.' + fieldName);
                    if (fieldName == 'stockChange') val = '';
                    if (fieldName == 'createDate') val = parseDate.shortDate(val);
                    td.html(val);
                });
                filterRow.find('td.editable').on('click', function (e) {
                    $(this).off();
                    frmo.edit.td(e.target);
                });
                filterRow.appendTo('#filtersTbody').show();
            });
        },
        addLine: function () {
            if ($('#new').is('tr')) {
                message('Click "Add" for previous line', 3);
                return;
            }
            var row = frmo.newRow.clone().show();
            $(row).find('td.editable.text').each(function (i, v) {
                var fieldName = $(v)[0].className.replace('editable', '').replace('text', '').trim();
                $(v).append('');
            });
            $(row).find('button:not(.add), .status *').remove();
            $(row).find('button.add').show();
            $(row)[0].id = 'new';
            $(row).css('background-color', '#8fbc8f');
            $('#filtersTbody').append(row);
            $("html, body").animate({scrollTop: $(document).height()}, 1000);
        }
    },
    update: {
        td: function (e) {
            var id = $(e).parents('tr')[0].id;
            var formData = ff.toObj(id);
            if (!isDefined(formData['id'])) formData['id'] = id;
            debug.cnsl(formData);
            j.post(['update', 'all'], function (data) {
                if (data.status) {
                    debug.cnsl(data);
                    message('Сохранено!', 1);
                    frmo.run.statusesList(data.statuses);
                }
                else message('Has not been saved!(', 0);
            }, formData);
        }
    },
    insert: function (e) {
        var formData = ff.toObj('new');
        debug.cnsl(formData);
        j.post(['insert', 'new'], function (data) {
            if (data.status) {
                message('Сохранено!', 1);
                frmo.init();
            }
            else {
                message('Not saved!', 2);
                $('#new').css('background-color', '#deb887');
            }
        }, formData);
    },
    edit: {
        td: function (e) {
            var text = $(e).text().trim();
            var fieldName = $(e)[0].className;
            if (fieldName == '') fieldName = $(e).parents('td')[0].className;
            fieldName = fieldName.replace('editable', '').replace('text', '').trim();
            debug.cnsl(fieldName);
            $(e).empty();
            if ($(e).hasClass('text')) $(e).append('');
            $(e).parents('tr').find('button.save').removeAttr('disabled');
        }
    },
    del: function (e) {
        if (confirm('Delete?')) j.post(['delete'], function (data) {
            if (data.status) {
                message('Deleted.');
                $(e).parents('tr').remove();
            }
        }, {id: $(e).parents('tr')[0].id});
    }
};
        frm[321] = {
    init: function () {
        j.post(['init'], function (data) {
            debug.cnsl(data);
            var dataToShow = data.searchRezult;
            var line,ctid;
            
            for (var key in dataToShow) {
                var fields = new Array('productName', 'countOfStock','note');
                var table = e('listBody');
                line = e(null, table, 'tr');
                if (ctid != dataToShow[key]['ctid']) {
                    line.style = "border-top: 2px #000 solid;";
                }
                ctid = dataToShow[key]['ctid'];
                for (var k in fields) {
                    var i = fields[k];
                    var text = dataToShow[key][i];
                    var bgC = "inherit";
                    if (i == 'countOfStock' && parseInt(text)<0 ) text = ""+text+"";
                    if (i == 'createDate') text = parseDate.shortDate(text);
                    if (i == 'status') {
                        bgC = frmo.statuses[dataToShow[key]["statusId"]]["bgColor"];
                        if (dataToShow[key]['workerName'] != null) text = text + " - " + dataToShow[key]['workerName'] + "";
                    }
                    e(null, line, 'td', i).css("background-color:" + bgC).innerHTML = text;
                }
/*                if (document.querySelector("select.form-control.workersIds").value != "all" && dataToShow[key]['statusId'] == 4) {
                    e(null, line, 'td', 'actions').innerHTML =
                        // ' ' +
                        ''+
                        '';
                } else if (document.querySelector("select.form-control.workersIds").value != "all" && dataToShow[key]['statusId'] == 5) {
                    e(null, line, 'td', 'actions').innerHTML =
                        '';
                }*/
            }
        }, {});
    }
};
        frm[325] = {
    orderId: 'new',
    searchMinLength: 3,
    onclcStatus: false,
    init: function (path) {
        let orderId = path[0] || "";
        let customerId = path[1] || "";
        /********************************************************************** START **************/
        // noinspection CssInvalidPseudoSelector
        if (orderId === '' || orderId === 'new') {
            orderId = '';
            $('.editOrder').hide();
            $("#statusId")[0].disabled = true;
            document.getElementById('shippingAddressId').setAttribute('disabled', "true");
            document.getElementById('shippingMethodId').setAttribute('disabled', "true");
            $("#customerId")[0].style = "box-shadow: 1px 1px 8px 0px green;";
            $("#orderForm *:is(input:not(#customerId),select:not(#shippingMethodId,#shippingAddressId),textarea) ").hide();
        } else {
            frmo.orderId = orderId;
            document.getElementById('orderInfo').classList.add('panel-collapsed');
            $('.newOrder').hide();
        }
        /******************************************************* END *******************/
        j.post(['init'], function (data) {
            debug.cnsl('initdata');
            debug.cnsl(data);
            frmo.data = data;
            frmo.prodContentIds = data.prodContentIds || [];
            frmo.balance = data.customerInfo;
            if (isDefined(data.customerInfo)) {
                if (frmo.balance.perelimit === "da") {
                    $(".heading-elements button").remove();
                    // $("div.limit").html('Этот оптовый не может cделать этот заказ из-за перелимита: ' + frmo.balance.znachenie + '');
                    message('Этот оптовый не может cделать этот заказ из-за перелимита: ' + frmo.balance.znachenie + ' грн.',"e","ВНИМАНИЕ!",false);
                    document.getElementById('orderInfo').classList.remove('panel-collapsed');
                    console.error("PERELIMIT");
                    // return;
                } else {
                    // $("div.limit").html('Разрешённая сумма дозаказа: ' + (parseInt(frmo.balance.znachenie)-parseInt(data.orderDetails.totalPrice)) + '');
                    $("div.limit").html('Разрешённая сумма заказа: ' + parseInt(frmo.balance.znachenie) + '');
                }
            }
            //вывод категорий
            var catBlock = e('catsList'), cur;
            empty(catBlock);
            var formSel = document.getElementById('ctIds');
            formSel.innerHTML = "";
            for (var ct in data.categories) {
                cur = data.categories[ct];
                var ctBox = e('ct' + ct, catBlock, 'div', 'col-md-1 singleCt');
                e(null, ctBox, 'input', 'hidden').a('type', 'checkbox').a('name', 'ct' + ct);
                e(null, ctBox, 'input', 'hidden').a('type', 'text').a('value', ct);
                e(null, ctBox, 'img', 'ctImg').s(img.url(cur.imgId, 150, 150));
                e(null, ctBox, 'span', 'ctName').t(cur.name);
                formSel[formSel.options.length] = new Option(ct, ct);
            }
            //статусы
            var statuses = document.getElementById('statusId');
            for (var ct in data.orderStatuses) {
                statuses[statuses.options.length] = new Option(data.orderStatuses[ct].name, data.orderStatuses[ct].id);
            }
            //Адреса доставка
            if (isDefined(data.orderDetails)) {
                var shippingAddress = document.getElementById('shippingAddressId');
                let orderSA = data.orderDetails.shippingAddressId || "";
                if (isDefined(data.shippingAddress) && data.shippingAddress.length > 0) {
                    for (var ct in data.shippingAddress) {
                        let sel, l = data.shippingAddress[ct];
                        if (orderSA != "") sel = orderSA;
                        else if (l.defaultAddress == 1) sel = l.defaultAddress;
                        shippingAddress[shippingAddress.options.length] = new Option(l.address, l.id, false, (l.id == sel));
                        // shippingAddress[1] = new Option(l.address, l.id, false,(l.id == sel));
                    }
                    // shippingAddress[shippingAddress.options.length] = new Option("+ ДОБАВИТЬ", null, true)
                    // .onclick =
                    // function (){ nav.goTo(355,[frmo.customerId]);} ;
                } else {
                    $('#shippingAddressId')[0].outerHTML =
                        "";
                }
            }
            //Методы доставка
            var shippings = document.getElementById('shippingMethodId');
            for (var ct in data.shippingMethods) {
                shippings[shippings.options.length] = new Option(data.shippingMethods[ct].name, data.shippingMethods[ct].id);
            }
            //клиенты
            var optList = '';
            // frmo.customers = panelData.customersList;
            for (var ct in panelData.customersList) {
                optList += '';
            }
            document.getElementById('customersList').innerHTML = optList;
            if (data.orderDetails) {
                //order details
                var formInfo = $('#orderForm');
                for (var d in data.orderDetails) {
                    var val = data.orderDetails[d];
                    if ((d == 'createDate' || d == 'updateDate') && val != null) val = parseDate.shortDate(val);
                    formInfo.find('*[name="' + d + '"]').val(val);
                }
                frmo.customerId = data.orderDetails.customerId;
                $('.cName')[0].innerHTML = "    " + frmo.customerId + "-" + panelData.customersList[frmo.customerId].name + "    "/*+" <== to Viber "*/;
                $('a.viberLink')[0].href = "viber://chat?number=+" + panelData.customersList[frmo.customerId].tel;
                $('a.viberLink').show();
                frmo.totalPrice = data.orderDetails.totalPrice;
                frmo.checkLimit();
                //order content
                if (data.orderContent) {
                    $('.orderEmpty').hide();
                    $('#orderTable').show();
                    frmo.updateTotalPrice(data.orderDetails.totalPrice);
                    frmo.displayResult(data.orderContent, 'cartBody');
                }
            } else if (customerId != "") {
                frmo.customerId = customerId;
                $("#customerId").val(frmo.customerId);
                frmo.prepareFormData({value: frmo.customerId});
            }
            frmo.buttons();
            if (data.wishlistContent) {
                $('#wishlist,.viewWishlist').show();
                // message("Список желаний не пустой, обратите внимание!");
                $(".wishlistEmpty").hide();
                $("#wishlistTable").show();
                $("#compile").addClass('btn-warning');
                for (let s in data.wishlistContent) {
                    let cols = ["productName", "realnoOfStore", "waitCount", "dostupnoForThisCustomer", "v_korziny"];
                    let ld = data.wishlistContent[s];
                    let line = e(ld.id, e('wishlistBody'), 'tr');
                    for (let i in cols) {
                        let col = cols[i];
                        let td = e(null, line, 'td', col);
                        td.innerHTML = ld[col];
                    }
                    let td = e(null, line, 'td', 'actions');
                    td.innerHTML = "";
                }
            }
            /*            $(".editOrder").on("click", function (ev) {
                            console.log(ev);
                            let w = $(ev.target).parents("tr")[0].id;
                            let oldVal = ev.target.value;
                            frmo.oldValues[w][ev.target.className] = oldVal;
                        });*/
        }, {orderId: orderId});
        frmo.findLine = $('#listBody .findLine').html();
        $('#listBody').empty();
        frmo.contentLine = $('#cartBody .cartLine').html();
        $('#cartBody').empty();
        // frmo.wishlistLine = $('#wishlist #wishlistBody').html();
        $('#wishlistBody').empty();
    },
    wishlist: {
        /*updateProducts: function (recordId, count) {
            j.post(['update', 'cart'], function (data) {
                if (isDefined(data.prodContentIds)) frmo.prodContentIds = data.prodContentIds;
                if (!data.status) message('Что-то пошло не так, попробуйте позже', 0);
                else frmo.updateTotalPrice(data.totalPrice);
                frmo.totalPrice = data.totalPrice;
                frmo.checkLimit();
                if (data.orderContent) frmo.displayResult(data.orderContent, 'cartBody');
            }, {orderId: frmo.orderId, recordId: recordId, count: -count});
        },*/
        addProduct: function (ev) {
            var line = ev.parentNode.parentNode;
            line.disable = true;
            var prId = line.id;
            var prCount = line.children.namedItem('qty').children[0].value;
            j.post(['insert', 'toWishlist'], function (data) {
                if (data.status) {
                    message("Внесено в список ожидания");
                    // $('.orderEmpty').hide();
                    // $('#orderTable').show();
                    // frmo.displayResult(data.orderContent, 'cartBody');
                    form.init([frmo.orderId]);
                } else message("Ошибка при добавления в лист ожидания", 3);
            }, {customerId: frmo.customerId, productId: prId, waitCount: prCount});
        },
        compile: function () {
            j.post(['update', 'wishlistToCart'], function (data) {
                if (data.status) {
                    message("Всё прошло хорошо!", "s", "Успех!");
                    form.init([frmo.orderId]);
                } else message("Результат нужно проверить дополнительно", 3);
            }, {customerId: frmo.customerId, orderId: frmo.orderId});
        },
        delProduct: function (id) {
            debug.cnsl(id);
            j.post(['delete', 'fromWishlist'], function (data) {
                if (data.status) {
                    message("Удалено успешно!", "s");
                    form.init([frmo.orderId]);
                } else message("Почему-то не получилось удалить из списка ожидания", "w", "Внимание!");
            }, {wishlistId: id});
        }
    },
    goToPanel: function (id) {
        var panel = $("#" + id);
        $("html, body").animate({scrollTop: (panel.offset().top - parseInt($('.navbar-fixed-top').css('height')))}, 1000);
        panel.removeClass('panel-colapsed');
        panel.find('.panel-body').show();
        panel.find('.rotate-180').removeClass('rotate-180');
        panel.addClass('anker');
    },
    order: {
        create: function () {
            var crData = ff.toObj('orderForm');
            if (crData.customerId == '') message('Выберите id клиента', 3);
            else {
                j.post(['insert', 'order'], function (data) {
                    if (data.orderId) {
                        if (!isDefined(data.message)) message('Заказ создан успешно!', 1);
                        nav.goTo(325, data.orderId);
                    } else message('При создании заказа возникла ошибка. Свяжитесь с администратором.', 0);
                }, crData);
            }
        },
        updateInfo: function () {
            var orData = ff.toObj('orderForm');
            if (orData.customerId == '') message('Выберите id клиента', 3);
            else {
                orData.orderId = frmo.orderId;
                j.post(['update', 'order'], function (data) {
                    if (data.status) {
                        message('Заказ успешно обновлен!', 1);
                        nav.goTo(325, frmo.orderId);
                    } else message('При обновлении заказа возникла ошибка. Свяжитесь с администратором.', 0);
                }, orData);
            }
        },
        aprooved: function () {
            j.post(['update', 'aproovedOrder'], function (data) {
                if (data.status) {
                    message('Заказ №' + frmo.orderId + '  успешно подтверждён!', 1);
                    nav.goTo(328);
                } else message('При обновлении заказа возникла ошибка. Свяжитесь с администратором.', 0);
            }, {statusId: 2, orderId: frmo.orderId});
        },
        temp: function () {
            j.post(['update', 'tempOrder'], function (data) {
                if (data.status) {
                    message('Заказ №' + frmo.orderId + '  успешно сохранён как черновик!', 1);
                    nav.goTo(328);
                } else message('При обновлении заказа возникла ошибка. Свяжитесь с администратором.', 0);
            }, {statusId: 1, orderId: frmo.orderId});
        },
        toPack: function () {
            if (frmo.data.orderContent.length == 0) {
                alert("Заказ ПУСТОЙ!", 3);
                return false;
            } else if (confirm("Этот заказ уже полностью готовый к упаковке?")) {
                j.post(['update', 'toPack'], function (data) {
                    if (data.status) {
                        message('Заказ №' + frmo.orderId + '  передан на упаковку!', 1);
                        if (data.statusProcedure) {
                            message("Списание с баланса за заказ произошло успешно!", 1);
                            nav.goTo(328);
                            panelDataUpdate();
                        } else message("Ошибка, средства не списаны! Сообщите админу!", 3);
                    } else message('При передаче заказа возникла ошибка. Свяжитесь с администратором.', 0);
                }, {statusId: 4, orderId: frmo.orderId, customerId: frmo.customerId, totalPrice: frmo.totalPrice});
            }
        },
        del: function () {
            if (confirm('Вы действительно хотите удалить заказ?'))
                if (confirm('ВСЕ данные из этого заказа, и накладная в том числе будет удалена без возможности восстановления! Точно желаете продолжить?'))
                    j.post(['delete', 'order'], function (data) {
                        if (data.affected_rows == 1) {
                            message('Заказ успешно удалён!', 1);
                            message('Внимание! если в заказе были товары, то они были возвращенны на склад обратно', 1);
                            nav.goTo(328);
                        } else message('При удалении заказа возникла ошибка. Свяжитесь с администратором.', 0);
                    }, {orderId: frmo.orderId});
        },
        updateProducts: function (recordId, count) {
            j.post(['update', 'cart'], function (data) {
                if (isDefined(data.prodContentIds)) frmo.prodContentIds = data.prodContentIds;
                if (!data.status) message('Что-то пошло не так, попробуйте позже', 0);
                else frmo.updateTotalPrice(data.totalPrice);
                frmo.totalPrice = data.totalPrice;
                frmo.checkLimit();
                if (data.orderContent) frmo.displayResult(data.orderContent, 'cartBody');
            }, {orderId: frmo.orderId, recordId: recordId, count: count, customerId: frmo.customerId});
        },
        addProduct: function (ev) {
            var line = ev.parentNode.parentNode;
            line.disable = true;
            var prId = line.id;
            var prCount = line.children.namedItem('qty').children[0].value;
            j.post(['insert', 'cart'], function (data) {
                if (isDefined(data.prodContentIds)) frmo.prodContentIds = data.prodContentIds;
                if (data.status) {
                    $('.orderEmpty').hide();
                    $('#orderTable').show();
                    frmo.displayResult(data.orderContent, 'cartBody');
                    frmo.updateTotalPrice(data.totalPrice);
                    frmo.totalPrice = data.totalPrice;
                    frmo.checkLimit();
                    if (isDefined(data.countOfStock)) {
                        debug.cnsl(data);
                        frmo.checkAsInCart(prId);
                    }
                } else message("Ошибка при добавлении в корзину", 3);
            }, {orderId: frmo.orderId, customerId: frmo.customerId, productId: prId, count: prCount});
        },
        delProduct: function (ev) {
            var prId = ev.parentNode.parentNode.id;
            j.post(['delete', 'cart'], function (data) {
                if (isDefined(data.prodContentIds)) frmo.prodContentIds = data.prodContentIds;
                if (data.status) {
                    frmo.displayResult(data.orderContent, 'cartBody');
                    frmo.updateTotalPrice(data.totalPrice);
                    frmo.search();
                }
                frmo.totalPrice = data.totalPrice;
                frmo.checkLimit();
            }, {orderId: frmo.orderId, recordId: prId});
        }
    },
    updateTotalPrice: function (price) {
        document.getElementById('orderTotalPrice').innerHTML = price || 0;
    },
    search: function (i) {
        var sText = $('input[name="sw"]').val();
        frmo.searchQ = {};
        frmo.searchQ = ff.toObj('searchRequest');
        debug.cnsl(frmo.searchQ);
        if (sText.length == 0 || sText.length >= frmo.searchMinLength) {
            j.post(['init', 'start'], function (data) {
                $('.result').show();
                frmo.displayResult(data.searchRezult, 'listBody');
            }, frmo.searchQ);
        } else {
            message('Minimum ' + frmo.searchMinLength + ' chart!', 3);
            $('.result').hide();
        }
    },
    displayResult: function (data, tableId) {
        debug.cnsl(data);
        $('#' + tableId).empty();
        var tbl = e(tableId);
        if (!data) {
            $('.searList').fadeIn(500);
            e(null, e(null, tbl, 'tr', 'findLine'), 'td')
                .a('colspan', '8')
                .a('style', 'text-align: center;')
                .t('Нет товаров для отображения');
        }
        var line = tableId == 'listBody' ? frmo.findLine : frmo.contentLine;
        if (isDefined(data)) {
            // $('.searList').fadeIn(500);
            for (var key in data) {
                var keys = data[key]['id'];
                // var tr = e(keys, tbl, 'tr', ''+(tableId == 'listBody' ? 'col-md-3 findLine' : 'cartLine'));
                var tr = e(keys, tbl, 'tr', '' + (tableId == 'listBody' ? 'findLine' : 'cartLine'));
                $(tr).html(line);
                e(keys, tbl, 'tr');
                for (var t in data[key]) {
                    var td = data[key];
                    if ($('td.' + t)) {
                        var cont = td[t];
                        if (t == 'imgId') {
                            var hr = nav.link(213, [keys]);
                            cont = '
 ';
                            // cont = '
 ';
                        } else if (t == 'productName') {
                            // var hr = '/media/detail/' + keys;
                            var hr = nav.link(213, [keys]);
                            cont = '' + cont + '';
                        } else if (t == 'countOfStock') {
                            $('#' + keys + ' td.countOfOrder input').attr('max', cont)
                                .attr('placeholder', "max " + cont);
                            if (cont > 0) $('#' + keys + ' button.addToCart').removeAttr('disabled');
                            // if (cont != null) $('#' + keys + ' button.addToCart').removeAttr('disabled');
                            else $('#' + keys + ' button.addToWishlist').show();
                            cont = '' + cont + '';
                        } else if (t == 'active') {
                            cont =
                                cont == '0' ? 'неактивен'
                                    : 'включен';
                        } else if (t == 'createDate') cont = parseDate.shortDate(cont) + '
 ' + td.createUser;
                        else if (t == 'count')
                            cont = '';
                        $('#' + keys + ' td.' + t).html(cont);
                    }
                }
                // проверка на существование товара в корзине
                if (isDefined(frmo.prodContentIds) && frmo.prodContentIds.indexOf(keys) != -1 && tableId == "listBody") {
                    frmo.checkAsInCart(keys);
                } else if (!isDefined(frmo.prodContentIds) && frmo.prodContentIds.indexOf(keys) != -1 && tableId == "listBody") {
                    frmo.prodContentIds = [];
                    frmo.checkAsInCart(keys);
                }
            }
            $('input.qty').off().on('change', function (ev) {
            }).on('change', function (ev) {
                var line = ev.target.parentNode.parentNode;
                var p = $(line).children('.price').text();
                $(line).children('.total').text(ev.target.value * p);
                if (line.classList.contains('cartLine')) {
                    frmo.order.updateProducts(line.id, ev.target.value);
                }
            });
        }
    },
    tmstmpDate: function (tmst) {
        var date = new Date(tmst);
        var m = date.getMonth() + 1;
        date = (date.getFullYear() + "-" + m + "-" + date.getDate());
        //debug.cnsl(date);
        date = parseDate.shortDate(date);
        return date;
    },
    buttons: function () {
        // $(".singleCt").off().on('click', function (ev) {
        // if(window.getEventListeners($("#catsList div")[0]).hasOwnProperty("click")) {
        //     debug.cnsl($("#catsList div")[0].getEventListeners());
        // } else {
        if (!frmo.onclcStatus) {
            $("#catsList div").on('click', frmo.clc.catsList);
        }
        // }
        if (!isDefined(perValue)) var perValue = '';
        $('input[name="sw"]').off()
            .on('keypress', function (e) {
                if (e.which == 13) {
                    e.preventDefault();
                    e.stopImmediatePropagation();
                }
            })
            .on('keyup', function (e) {
                if (e.which == 13) {
                    e.preventDefault();
                    e.stopImmediatePropagation();
                    frmo.search();
                }
                var sText = $('input[name="sw"]').val();
                if (perValue == '') perValue = sText;
                else if (perValue != sText) {
                    $('.result').fadeOut(500);
                    $('.searList').fadeOut(500);
                    perValue = sText;
                }
            });
        $('.scrollBtn').off().on('click', function (e) {
            var panel = $(e.target.value.toString());
            $("html, body").animate({scrollTop: (panel.offset().top - parseInt($('.navbar-fixed-top').css('height')))}, 1000);
            panel.removeClass('panel-colapsed');
            panel.find('.panel-body').show();
            panel.find('.rotate-180').removeClass('rotate-180');
        });
    },
    clc: {
        catsList: function (ev) {
            /**********************Выключение предыдущей выбранной категории**************************************/
            var selected = document.querySelector('#catsList input[type="checkbox"]:checked');
            if (selected) {
                selected.checked = false;
                selected.parentNode.classList.remove('selected');
            }
            /*****************************************************************************************************/
            ev.currentTarget.children.namedItem(ev.currentTarget.id).checked = !ev.currentTarget.children.namedItem(ev.currentTarget.id).checked;
            ev.currentTarget.classList.toggle('selected');
            var inpVals = document.querySelectorAll('#catsList input[type="checkbox"]:checked + input'), vals = [];
            for (var k = 0; k < inpVals.length; k++) {
                vals[vals.length] = inpVals[k].value
            }
            $('form select#ctIds').val(vals);
            frmo.search();
        }
    },
    checkAsInCart: function (prId) {
        $("#" + prId + " button ")[0].outerHTML = "Уже в корзине!";
        // $("#"+prId+" .countOfStock")[0].innerHTML = data.countOfStock;
        $("#" + prId + " .countOfStock")[0].innerHTML = "";
        $("#" + prId + " td.countOfOrder")[0].innerHTML = "";
        $("#" + prId + " td.total")[0].innerHTML = "";
    },
    prepareFormData: function (el) {
        if (el.value == "") form.init([]);
        clearTimeout(frmo.ttt);
        frmo.ttt = setTimeout(function () {
                if (isDefined(panelData.customersList[el.value]) && isDefined(panelData.customersList[el.value].defaultShippingMethodId)) {
                    // document.getElementById('shippingMethodId').removeAttribute('disabled');
                    // document.getElementById('shippingMethodId').value = frmo.customers[el.value].defaultShippingMethodId;
                    frmo.customerId = el.value;
                    frmo.customerData = panelData.customersList[el.value];
                    // debug.cnsl(frmo.customerData.addr);
                    if (typeof frmo.customerData.addr == "string") frmo.customerData.addr = JSON.parse(frmo.customerData.addr.replace(/[\r\n\t ]+/g, ' '));
                    let customer = frmo.customerData;
                    // frmo.addr = JSON.parse(frmo.customerData.addr);
                    // if (isDefined(panelData.customersList[el.value].shippingAddressId)) {
                    if (customer.addr != null) {
                        let shippingAddress = document.getElementById('shippingAddressId');
                        shippingAddress.innerHTML = '';
                        for (var ct in customer.addr) {
                            let l = customer.addr[ct];
                            // if (orderSA != "") sel = orderSA;
                            // else if (l.defaultAddress == 1) sel = l.defaultAddress;
                            // shippingAddress[shippingAddress.options.length] = new Option(l.address, l.id, false, (l.id == sel));
                            let Op = new Option(l.address, l.id, false, (l.default));
                            if (l.default) Op.style = "font-weight:bold;";
                            shippingAddress[shippingAddress.options.length] = Op;
                        }
                        document.getElementById('shippingAddressId').removeAttribute('disabled');
                        document.getElementById('shippingMethodId').removeAttribute('disabled');
                        document.getElementById('shippingMethodId').value = customer.addr[customer.defaultShippingAddressId].sMId;
                        // $(".create.newOrder").focus();
                        // debug.cnsl("dddddd");
                    } else {
                        /*debug.cnsl("nonononon");
                        $('#shippingAddressId')[0].outerHTML =
                            "";
                        document.getElementById('shippingMethodId').setAttribute('disabled',true);*/
                        // message("Для этого клиента нужно создать адрес!",3);
                        if (confirm("Для этого клиента нужно создать адрес!")) {
                            nav.goTo(355, [customer.id]);
                        }
                    }
                }
            }, 1200
        )
        ;
    }
    ,
    checkLimit: function () {
        if (parseInt(frmo.totalPrice) > parseInt(frmo.balance.znachenie)) {
            message("Сумма товаров в корзине превышает допустимое значение для этого клиента!", 3);
        }
    }
    ,
    eventOnchangeSAid: function (val) {
        if (val == "add") {
            nav.goTo(355, [frmo.customerId]);
        } else {
            $("#shippingMethodId").val(frmo.customerData.addr[val].sMId);
        }
    }
};
        frm[328] = {
    init: function () {
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.orders = data.orders;
            frmo.statuses = data.statuses;
            frmo.orderStatusId = "";
            frmo.customerId = "";
            for (var key in data.customers) {
                $('#customerIds').append('');
            }
            for (var key in data.statuses) {
                //  == "Удалён" ? "Посмотреть корзину":data.statuses[key]['name']
                var name = data.statuses[key]['name'];
                $('.orderStatusId').append('');
            }
            frmo.viewOrderList();
            if (data.TEMPorders.length > 0){
                let msg="";
                let ids = [];
                let to = data.TEMPorders;
                for (let n in to){
                    msg = msg + " " + to[n].name + ",";
                    ids.push(to[n].id);
                }                
                if(confirm("Увага, спрацювала система зачистки чорновиків! \n ************************************ \n "+ msg 
                    + "\n******************************* \n Це прострочені чорновики, їх зачистити?")){
                    
                    frmo.deleteTEMPorders(ids);
                }
                else alert ("Чорновики не зачищено, зробіть порядок, і оновіть сторінку для оновлення запиту щодо чорновиків. Дякую.")
            }
            /*            if (isDefined(sett.forms[frmo.curForm])) {
                            $('.formIds').val(frmo.curForm);
                            $('.vFormsList tbody tr').hide();
                            if ($('.vFormsList tr.' + frmo.curForm).length == 0) $('.nothingMsg').show();
                            else $('.vFormsList tbody tr.' + frmo.curForm).show();
                        }*/
            // $('.customerIds').off().on('change', function () {
            //     $('.nothingMsg').hide();
            //     $('.vFormsList').removeClass('panel-collapsed');
            //     $('.vFormsList .panel-body').show();
            //     $('.vFormsList [data-action="collapse"]').removeClass('rotate-180');
            //     var vFid = $('.formIds').val();
            //     if (vFid != 'all') {
            //         $('.vFormsList tbody tr').hide();
            //         if ($('.vFormsList tr.' + vFid).length == 0) $('.nothingMsg').show();
            //         else $('.vFormsList tbody tr.' + vFid).show();
            //     } else $('.vFormsList tbody tr').show();
            // });
        }, {orderStatusId: "forWork"});
    }
    , loadOrder: function (ev) {
        $('#formsTbody,.nothingMsg').empty();
        let fieldsData = {};
        let value = "";
        let orderStatusId = "forWork";
        if (ev.value != "all") {
            value = ev.value;
        }
        if (ev.name == "orderStatusId") {
            orderStatusId = value;
        }
        if (ev.name == "customerId") {
            frmo.customerId = value;
            orderStatusId = (value != "") ? "" : "forWork";
        }
        fieldsData.orderStatusId = orderStatusId;
        fieldsData.customerId = frmo.customerId;
        j.post(['init', 'loadOrders'], function (data) {
            frmo.orders = data.orders;
            frmo.viewOrderList();
        }, fieldsData);
    }
    , viewOrderList: function () {
        for (var key in frmo.orders) {
            var fields = ['id', 'status', 'totalPrice', 'customer'];
            var table = e('formsTbody');
            var line = e(frmo.orders[key]['id'], table, 'tr', "line " + frmo.orders[key]['id']);
            if (frmo.orders[key]['statusId'] == 11) {
                // line.css("background-color:#bae2c7;")
                line.css("background-color:#e2baba;")
            }
            if (frmo.orders[key]['statusId'] == 12) {
                line.css("background-color:rgb(153 205 246);")
            }
            let bgC = "";
            for (var k in fields) {
                var i = fields[k];
                var text = frmo.orders[key][i];
                debug.cnsl(frmo.orders[key]);
                if (i == 'createDate') text = parseDate.shortDate(text);
                if (i == 'status') {
                    bgC = frmo.statuses[frmo.orders[key]["statusId"]]["bgColor"];
                    // if (frmo.orders[key]['workerName'] != null) text = "" + text + " - " + frmo.orders[key]['workerName'] + "";
                    if (frmo.orders[key]['ttn'] != null) text = "" + text + " - " + frmo.orders[key]['ttn']  + "";
                    else if (frmo.orders[key]['workerName'] != null) text = "" + text + " - " + frmo.orders[key]['workerName'] + "";
                   }
                if (i == 'id') {
                    text = '' + text + '';
                    text = text + " от " + frmo.orders[key]['cd'];
                }
                e(null, line, 'td', i).css("background-color:" + bgC).innerHTML = text;
            }
            e(null, line, 'td', 'actions').innerHTML = frmo.getActionOrderButtons(frmo.orders[key]);
        }
        $('.line :is(i,button):not(.removeOrder)').on("click", function (ev) {
            debug.cnsl(ev.target);
            let id = $(ev.target).parents('tr')[0].id;
            let bgC = "";
            j.post(['get', 'orderUpdatedInfo'], function (data) {
                let trInfo = data.orderUpdatedInfo;
                if (trInfo.id) {
                    let trs = $("#" + id)[0].cells;
                    for (let i in trs) {
                        let tr = trs[i];
                        let cn = tr.className;
                        if (isDefined(trInfo[cn])) {
                            let text = trInfo[cn];
                            if (cn == 'status') {
                                bgC = frmo.statuses[trInfo["statusId"]]["bgColor"];
                                if (trInfo['workerName'] != null) text = "" + text + " - " + trInfo['workerName'] + "";
                            }
                            if (cn == 'id') {
                                text = '' + text + '';
                                text = text + " от " + frmo.orders[key]['cd'];
                            }
                            $(tr)[0].css("background-color:" + bgC).innerHTML = text;
                        } else if (cn == "actions") {
                            $(tr)[0].innerHTML = frmo.getActionOrderButtons(trInfo);
                        }
                    }
                }
            }, {id: id});
        });
    }
    , getActionOrderButtons: function (order) {
        let inH = '';
        switch (parseInt(order["statusId"])) {
            case 1: {
                inH = '' +
                    ' ';
                break;
            }
            case 2: {
                inH = '' +
                    ' ';
                break;
            }
            case 4: { // передан на упаковку
                inH = '' +
                    '';
                break;
            }
            case 5: { // упаковка в процессе
                inH = '' +
                    '';
                break;
            }
            case 6: { // упакован
                if (order['shippingMethodId']==1) {// => на загрузку
                    inH = '' +
                        '';
                } else if (order['shippingMethodId']==6) {// => на самовывоз
                    inH = '' +
                        '';
                }else {// => на усмотрение
                    inH = 'подготовить к отправке вручную' +
                        '  ';
                }
                break;
            }
            case 8: { // готов к отправке
                inH = '' +
                    '';
                break;
            }
            case 10: { // готов к самовывозу
                inH = '' +
                    '';
                break;
            }
        }
        if (parseInt(order["totalPrice"]) > 0)
            inH += '' +
                '';
        else inH += '';
        return inH;
    }
    , setToFinish: function (orderId) {
        if (confirm("Вы точно желаете сделать заказ " + orderId + " завершённым?")) {
            j.post(['update', 'setToFinish'], function (data) {
                if (data.status) {
                    message("Успешно перемещён в \"Завершённые\"!", 1);
                    $(".line." + orderId)[0].remove();
                    // frmo.init();
                }
            }, {orderId: orderId});
        }
    }
    , deleteOrder: function (orderId) {
        if (confirm('Вы действительно хотите удалить заказ ' + orderId + '?'))
            if (confirm('ВСЕ данные из этого заказа(' + orderId + '), и накладная в том числе будет удалена без возможности восстановления! Точно желаете продолжить?'))
                j.post(['delete', 'order'], function (data) {
                    if (data.affected_rows == 1) {
                        message('Заказ успешно удалён!', 1);
                        message('Внимание! если в заказе были товары, то они были возвращенны на склад обратно', 1);
                        $("#" + orderId + ".line").remove();
                    } else message('При удалении заказа возникла ошибка. Свяжитесь с администратором.', 0);
                }, {orderId: orderId});
    }
    , deleteTEMPorders: function (orderIds) {
        if (confirm(' \n *************************** \n ' + orderIds + ' \n *************************************** \n Додатковий захист! ви точно бажаєте безповоротно зачистити чорновики??'))
                j.post(['delete', 'TEMPorders'], function (data) {
                    if (data.affected_rows > 0) {
                        message('Чорновики зачищено успішно! \n Очищено '+ data.affected_rows+' чорновиків', 1);
                    } else message('При зачищенні сталася невідома помилка', 0);
                }, {orderIds: orderIds});
    }
    , withdraw: function (orderId) {
        if (confirm("Вы точно желаете отозвать заказ " + orderId + "?")) {
            alert("Для продолжения, разорвите накладную, по которой идёт упаковка, и нажмите 'OK'")
            if (confirm("Вы уже уничтожили распечатанную накладную?")) {
                // message("Эта функция ещё в разработке");
                // return false;
                j.post(['update', 'withdraw'], function (data) {
                    if (data.status && parseInt(data.checkValue) === 1111) {
                        message("Заказ успешно отозван!");
                    }
                }, {orderId: orderId});
            }
        }
    }
    , gotovNaOtdachy: function (orderId) {
            if (confirm("Это включит готовность к Выдаче! Всё верно?")) {
                j.post(['update', 'naOtdachy'], function (data) {
                    if (data.status) {
                        message("Заказ успешно помечен!");
                    }
                }, {orderId: orderId});
            }
    }
    , gotovNaOtpravky: function (orderId) {
            if (confirm("Это включит готовность к Загрузке! Всё верно?")) {
                j.post(['update', 'naOtpravky'], function (data) {
                    if (data.status) {
                        message("Заказ успешно помечен!");
                    }
                }, {orderId: orderId});
            }
    }
    ,
    oninputCustomerId: function (t) {
        clearTimeout(frmo.ttt);
        frmo.ttt = setTimeout(function () {
            if (isDefined(panelData.customersList[t.value]) || t.value == "") {
                frmo.customerId = t.value;
                frmo.loadOrder(t);
            }
        }, 600);
    }
};
        frm[331] = {
    init: function (path) {
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.customers = data.customers;
            //клиенты
            var optList = '';
            for (var ct in data.customers) {
                optList += '';
            }
            document.getElementById('customersList').innerHTML = optList;
            //transTypes
            var transTypesList = '';
            for (var tt in data.transTypes) {
                transTypesList += '';
            }
            document.getElementById('transTypeId').innerHTML = transTypesList;
            //transTypes
            var paymentMethodsList = '';
            for (var pm in data.paymentMethods) {
                paymentMethodsList += '';
            }
            document.getElementById('paymentMethodId').innerHTML = paymentMethodsList;
            /************************* немного автоматизации */
            if (isDefined(panelData.customersList[path])) {
                frmo.customerId = path;
                $("#customerId").val(frmo.customerId);
                frmo.prepareFormData({value: frmo.customerId});
            }
            $("#customerId")[0].style = "box-shadow: 1px 1px 8px 0px green;";
        });
    },
    getOrdersList: function () {
        if (isDefined(frmo.customerId)) { // если клиент выбран
            var transTypeId = document.getElementById("transTypeId").value;
            if (transTypeId == 3) { // если метод оплаты -- за заказ
                j.post(['getOrderList'], function (data) {
                    debug.cnsl(data);
                    if (isDefined(data.orderList)) {
                        frmo.orderList = data.orderList;
                        //orderList
                        var orderList = '';
                        for (var oi in data.orderList) {
                            orderList += '';
                        }
                        document.getElementById('orderId').innerHTML = orderList;
                        document.getElementById('orderId').removeAttribute('disabled');
                        frmo.ammountPrepare(document.getElementById('orderId'));
                        document.getElementById('amount').readOnly = true;
                    } else {
                        message("Все отправленные заказы уже оплачены!", 1);
                        document.getElementById("transTypeId").value = 2;
                        document.getElementById('orderId').disabled = true;
                        document.getElementById('orderId').innerHTML = "";
                        document.getElementById('amount').removeAttribute('readonly');
                    }
                }, {customerId: frmo.customerId});
            } else {
                document.getElementById('orderId').disabled = true;
                document.getElementById('orderId').innerHTML = "";
                document.getElementById('amount').removeAttribute('readonly');
            }
        } else message("Сначала выберите клиента, и тип транзакции для оплаты заказа");
    },
    prepareFormData: function (el) {
        if (el.value != "") {
            frmo.customerId = el.value;
            document.getElementById('transTypeId').removeAttribute('disabled');
            document.getElementById('paymentMethodId').removeAttribute('disabled');
            document.getElementById('amount').removeAttribute('readonly');
            document.getElementById('orderId').innerHTML = "";
            document.getElementById('orderId').disabled = true;
            document.getElementById('transTypeId').value = frmo.customers[frmo.customerId]['defaultTransTypeId'];
            frmo.getOrdersList();
            document.getElementById('paymentMethodId').value = frmo.customers[frmo.customerId]['defaultPaymentMethodId'];
        }
    },
    ammountPrepare: function (el) {
        debug.cnsl("ammount");
        frmo.ammount = frmo.orderList[el.value]['totalPrice'];
        document.getElementById('amount').value = frmo.ammount;
    },
    pushTransaction: function () {
        var formData = ff.toObj('transactionForm');
        j.post(['insert'], function (data) {
            debug.cnsl(data);
            if (data.status) {
                message("Регистрация успешна!");
                form.init();
                // frmo.getOrdersList();
                // e('transactionForm').reset();
            } else {
                message("Ошибка при записи...", 3)
            }
        }, formData);
    }
    ,
    loadFinanceInfo: function (el) {
        var vvv = el.value;
        if (isDefined(panelData.customersList[vvv])) {
            frmo.customerId = vvv;
            $('#orderInfo .panel-title')[0].innerHTML = "Детали платежа " + panelData.customersList[vvv].name + "";
            frmo.prepareFormData(el);
        } else if (vvv == "") {
            nav.goTo(331);
        }
    }
    ,
    oninputCustomerId: function (t) {
        let tv = t.value;
        $("#transactionForm")[0].reset();
        $("#orderId").empty();
        t.value = tv;
        if(t.value===""){
            clearTimeout(frmo.ttt);
            frmo.customerId = "";
        }
        else {
            clearTimeout(frmo.ttt);
            frmo.ttt = setTimeout(function () {
                if (isDefined(panelData.customersList[t.value]) || t.value == "") {
                    frmo.customerId = t.value;
                    frmo.loadFinanceInfo(t);
                }
            }, 600);
        }
    }
};
        frm[332] = {
    init: function () {
        if (!isDefined(frmo.newRow)) frmo.newRow = $('.line').remove().clone();
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.run.customersList(data.customers);
            //способы доставки
            var optList = '';
            for (var id in data.shippingMethods) {
                optList += '';
            }
            document.getElementById('shippingMethodsList').innerHTML = optList;
        }, {});
        /* поиск по таблице методом бутстрапа*/
        // $(document).ready(function () {
        //     $("#searchOnPage").on("keyup", frmo.sop);
        // });
        /* конец поиска по таблице */
    },
    sop:function (el) { /* поиск по таблице методом бутстрапа*/
        var value =  $(el).val().toLowerCase();
        $("#filtersTable :not(thead) tr").filter(function () {
            $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1);
        });
    },
    run: {
        customersList: function (data) {
            $('#tbody').empty();
            var row;
            for (var id in data) {
                row = frmo.newRow.clone();
                row[0].id = parseInt(id);
                for (var key in data[id]) {
                    var val = data[id][key];
                    var td = $(row).find('.' + key);
                    if (key == 'active') val = '';
                    // if (key == 'name') val = ''+val+'' +
                        // '' +
                        // '';
                    if (key == 'accessCode') break;
                    if (key == 'authCustomer' && val == 0) break;
                    else if (key == 'authCustomer') {
                        td.html('' +
                            '' +
                            '' +
                            '' +
                            '');
                        row[0].style = "border-bottom: 2px #00bf0f solid;";
                        break;
                    }
                    // if (key == 'allowHistory' && val == 0) $(row).find('.addAsHistory').remove();
                    // else
                    $(row).find('.viewHistory')[0].dataset.customerId = parseInt(id);
                    $(row).find('.addAddress')[0].dataset.customerId = parseInt(id);
                    $(row).find('.addOrder')[0].dataset.customerId = parseInt(id);
                    $(row).find('.authCreate')[0].dataset.customerId = parseInt(id);
                    // td.html((val!=null ? val : "")+td.html());
                    td.html(td.html() + (val != null ? val : ""));
                }
                row.find('td.editable').on('click', function (e) {
                    $(this).off();
                    frmo.edit.td(e.target);
                });
                row.appendTo('#tbody').show();
            }
        },
        addLine: function () {
            if ($('#new').is('tr')) {
                message('Click "Add" for previous line', 3);
                return;
            }
            var row = frmo.newRow.clone().show();
            $(row).find('td.editable.text').each(function (i, v) {
                var fieldName = $(v)[0].className.replace('editable', '').replace('text', '').trim();
                $(v).append('');
            });
            /*$(row).find('td.balance').each(function (i, v) {
                var fieldName = $(v)[0].className.replace('editable', '').replace('text', '').trim();
                $(v).append('');
            });*/
            $(row).find('td.id').each(function (i, v) {
                var fieldName = $(v)[0].className.replace('editable', '').replace('text', '').trim();
                $(v).append('');
            });
            $(row).find('td.defaultShippingMethodId').each(function (i, v) {
                var fieldName = $(v)[0].className.replace('editable', '').replace('text', '').trim();
                $(v).append('');
            });
            $(row).find('td.editable.textarea').each(function (i, v) {
                var fieldName = $(v)[0].className.replace('editable', '').replace('textarea', '').trim();
                $(v).append('');
            });
            $(row).find('button:not(.add), .status *').remove();
            $(row).find('button.add').show();
            $(row)[0].id = 'new';
            $(row).css('background-color', '#8fbc8f');
            $('#tbody').prepend(row);
            // $("html, body").animate({scrollTop: $(document).height()}, 1000);
        }
    },
    update: {
        td: function (e) {
            var id = $(e).parents('tr')[0].id;
            var formData = ff.toObj(id);
            if (!isDefined(formData['id'])) formData['id'] = id;
            debug.cnsl(formData);
            j.post(['update', 'all'], function (data) {
                if (data.status) {
                    debug.cnsl(data);
                    message('Сохранено!', 1);
                    frmo.run.customersList(data.customers);
                } else message('Has not been saved!(', 0);
            }, formData);
        }
    },
    insert: function () {
        var formData = ff.toObj('new');
        j.post(['insert', 'new'], function (data) {
            if (data.status) {
                message('Сохранено!', 1);
                panelDataUpdate();
                frmo.init();
            } else {
                message('Not saved!', 2);
                $('#new').css('background-color', '#deb887');
            }
        }, formData);
    },
    edit: {
        td: function (e) {
            var text = $(e).text().trim();
            var fieldName = $(e)[0].className;
            if (fieldName == '') fieldName = $(e).parents('td')[0].className;
            fieldName = fieldName.replace('editable', '').replace('textarea', '').replace('text', '').replace('datalist', '').trim();
            debug.cnsl(fieldName);
            $(e).empty();
            if ($(e).hasClass('text')) $(e).append('');
            if ($(e).hasClass('textarea')) $(e).append('');
            if ($(e).hasClass('defaultShippingMethodId')) {
                $(e).append('');
                $('input[name="' + fieldName + '"]').focus();
                $('input[name="' + fieldName + '"]').click();
            }
            $(e).parents('tr').find('button.save').removeAttr('disabled');
        }
    },
    del: function (e) {
        if (confirm('Delete?')) j.post(['delete'], function (data) {
            if (data.status) {
                message('Deleted.');
                $(e).parents('tr').remove();
            }
        }, {id: $(e).parents('tr')[0].id});
    }
    , createCustomerAccount: function (custId) {
        // message("Функция в разработке","w");
        if (confirm("Вы подтверждаете создание доступа " +
            "в магазин пользователю " + panelData.customersList[custId].name + "?")) {
            j.post(['createAccount'],async function (data) {
                if (data.status && data.loginData) {
                    await message(data.loginData, "s", "Данные клиента!", false);
                    // $('.ui-pnotify')[0].style = "top:" + cursorY + "px; left:" + cursorX + "px; width: 20%;";
                    await frmo.run.customersList(data.customers);
                    await frmo.sop("#searchOnPage");
                } else message("Неуспешно, сообщите админу", "w");
            }, panelData.customersList[custId]);
        }
    }
    , getAuthData: function (custId) {
        // message("Функция в разработке","w");
        j.post(['getAuthData'], function (data) {
            if (data.loginData) {
                message(data.loginData, "s", "Данные клиента " + panelData.customersList[custId].name + "!");
                // $('.ui-pnotify')[0].style = "top:" + cursorY + "px;left:" + cursorX + "px;     width: 20%;";
            } else message("Неуспешно, сообщите админу", "w");
        }, {id: custId});
    }
    , getAuthLink: function (custId) {
        // message("Функция в разработке", "w");
        if (prompt("Это действие удалит старую ссылку, и сделает новую. Продолжить?")) {
            j.post(['getAuthLink'], function (data) {
                if (data.loginLink) {
                    let txt = "Внимание! это секретно! никому не передавайте эту ссылку! " + cpBaseUrl + "?ll=" + data.loginLink + "";
                    message(txt, "w", "Ссылка для входа клиента (" + panelData.customersList[custId].name + ") БЕЗ пароля !");
                    $('.ui-pnotify')[0].style = "top:" + cursorY + "px;left:" + cursorX + "px;     width: 20%;";
                } else message("Неуспешно, сообщите админу", "w");
            }, {id: custId});
        }
    }
};
jQuery(function ($) {
    cursorX = -1;
    cursorY = -1;
    $(window).mousemove(function (event) {
        cursorX = event.clientX;
        cursorY = event.clientY;
        // debug.cnsl(cursorX,cursorY);
        // message("test","w");
        // $('.ui-pnotify')[0].style = "top:"+event.clientY+"px;left:"+event.clientX+"px;     width: max-content;";
        // ELSEWHERE, your code that needs to know the mouse position without an event
        // if (event.clientX < 10 || event.clientY < 10) {
        //     $(window).off("mousemove");
        // }
    });
});
        frm[334] = {
    displayOrdering: ['priceRoznica', 'productName', 'count', 'price','total'],
    init: function (path) {
        j.post(['init'], function (data) {
            debug.cnsl(data);
            for (var d in data.customer) {
                var par = document.querySelector('#printBody .order-' + d);
                if (par != null) par.innerHTML = data.customer[d];
            }
            for (var d in data.orderDetails) {
                var par = document.querySelector('#printBody .order-' + d);
                tdCont = data.orderDetails[d];
                if (d == 'totalPrice') tdCont = ""+tdCont+' грн.';
                // debug.cnsl(tdCont);
                if (par != null && tdCont != null) par.innerHTML = tdCont;
            }
            if(isDefined(data.orderDetails) && data.orderDetails.workerName!=null && data.orderDetails.statusId>=5)
                document.getElementById('printBtn').classList.remove('hidden');
            var list = e("orderContent");
            for (var line in data.orderContent) {
                var tr = e(null, list, "tr");
                for (var i in frmo.displayOrdering) {
                    var key = frmo.displayOrdering[i];
                    var tdCont = data.orderContent[line][key];
                    // if (['price', 'total'].includes(key)) tdCont += ' грн.';
                    // if (['productName'].includes(key)) tdCont += ' грн.'; ? если сюда придём, сообщить зачем было написана строчка
                    e(null, tr, "td", key).innerHTML = tdCont;
                }
            }
            document.title = "Заказ №" + data.orderDetails.id;
            document.getElementById("dolg").innerText = panelData.customersList[data.customer.id].balance+" грн.";
            // document.getElementById("custName").innerText = panelData.customersList[data.customer.id].name;
            if (!isDefined(path[1]) || path[1] != 'view') {
                window.onafterprint = function () {
                    history.back();
                    window.onafterprint = null;
                }
                window.print();
            }
            if(isDefined(data.wishlistContent) && data.wishlistContent.length>0 && data.orderDetails.statusId<10){
                // debug.cnsl(data.wishlistContent)
                frmo.displayWishlist(data.wishlistContent);
                $(".wishList").show();
            }
        }, {orderId: path[0]});
        var p = document.getElementById('orderInfo');
        p.removeEventListener('click', init, false);
        p.className = p.className + ' resizable';
        var resizer = document.createElement('div');
        resizer.className = 'resizer';
        p.appendChild(resizer);
        resizer.addEventListener('mousedown', initDrag, false);
        function initDrag(e) {
            startX = e.clientX;
            startY = e.clientY;
            startWidth = parseInt(document.defaultView.getComputedStyle(p).width, 10);
            startHeight = parseInt(document.defaultView.getComputedStyle(p).height, 10);
            document.documentElement.addEventListener('mousemove', doDrag, false);
            document.documentElement.addEventListener('mouseup', stopDrag, false);
        }
        function doDrag(e) {
            p.style.width = (startWidth + e.clientX - startX) + 'px';
            p.style.height = (startHeight + e.clientY - startY) + 'px';
        }
        function stopDrag(e) {
            document.documentElement.removeEventListener('mousemove', doDrag, false);
            document.documentElement.removeEventListener('mouseup', stopDrag, false);
        }
    },
    displayWishlist:function (wishlist) {
        var listForDisplay = ["productName","count"];
        var list = e("wishlistContent");
        for (var line in wishlist) {
            var tr = e(null, list, "tr");
            for (var i in listForDisplay) {
                var key = listForDisplay[i];
                var tdCont = wishlist[line][key];
                e(null, tr, "td", key).innerHTML = tdCont;
            }
        }
    }
};
        frm[335] = {
    orderList: ['id', 'transType', 'amount', 'customer', 'note', 'dateOfOperation'],
    init: function (path) {
        if (isDefined(panelData.customersList[path])) {
            frmo.customerId = path;
            $("#customerId").val(frmo.customerId);
            frmo.filterTrans();
        }
        j.post(['init'], function (data) {
            debug.cnsl(data);
            //клиенты
            var optList = '';
            for (var ct in data.customers) {
                optList += '';
            }
            document.getElementById('customersList').innerHTML = optList;
            //транзакции
            var translist = '';
            for (var ct in data.transType) {
                translist += '';
            }
            document.getElementById('transType').innerHTML += translist;
            if (!isDefined(panelData.customersList[path])) frmo.display(data.history);
            $("#customerId")[0].style = "box-shadow: 1px 1px 8px 0px green;";
            $("#customerId")[0].focus();
        }, {});
    },
    display: function (data) {
        var body = e('transBody');
        body.innerHTML = '';
        var totalCost = 0;
        for (var t in data) {
            var line = e(t, body, 'tr');
            totalCost += parseFloat(data[t]['amount']);
            for (var i in frmo.orderList) {
                var f = frmo.orderList[i];
                var cont = data[t][f];
                if (f == 'transType') {
                    var znak = "";
                    switch (data[t]['transTypeId']) {
                        case '0': {
                            znak = 'icon-droplet';
                            break;
                        }
                        case '1': {
                            znak = 'icon-arrow-left7 text-danger';
                            break;
                        }
                        default: {
                            znak = 'icon-arrow-right7 text-success';
                            break;
                        }
                    }
                    cont = ' ' + cont +
                        (data[t]['transTypeId'] == 1 || data[t]['transTypeId'] == 3 ? ' #' + data[t]['orderId'] : '') + '
' + (data[t]['paymentMethod'] ? '(' + data[t]['paymentMethod'] + ')' : '') + '';
                } else if (f == 'amount') cont = '' + cont + ''
                e(null, line, 'td', f).innerHTML = cont;
            }
            // if (data[t]['transTypeId'] != 1 || (data[t]['transTypeId'] == 1 && data[t]['orderId'] == null))
            if (data[t]['orderId'] == null)
                e(null, line, 'td').t('');
            else e(null, line, 'td');
        }
        if (document.getElementById('customerId').value != '') {
            document.getElementById('totalAmount').innerHTML = " *************  Общий баланс клиента: " + totalCost + "";
            document.getElementById('totalAmount').classList.remove('hidden');
        } else document.getElementById('totalAmount').classList.add('hidden');
    },
    filterTrans: function () {
        var fd = ff.toObj('searchRequest');
        j.post(['filter'], function (data) {
            frmo.display(data.history);
        }, fd)
    },
    delTrans: function (ev) {
        if (confirm('Вы действительно хотите удалить транзакцию?')) {
            j.post(['delete'], function (data) {
                if (data.status) {
                    message('Транзакция успешно удалена', 1);
                    frmo.init();
                } else message('Ошибка: транзакция не может быть удалена', 0);
            }, {transId: ev});
        }
    }
    , oninputCustomerId: function (t) {
        clearTimeout(frmo.ttt);
        frmo.ttt = setTimeout(function () {
            if (isDefined(panelData.customersList[t.value]) || t.value == "") {
                frmo.customerId = t.value;
                $('#orderInfo .panel-title').prepend(panelData.customersList[t.value].name);
                frmo.filterTrans();
            }
        }, 300);
    }
};
        frm[338] = {
    init: function () {
        if (!isDefined(frmo.newRow)) frmo.newRow = $('.line').remove().clone();
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.run.workersList(data.workers);
        }, {});
    },
    run: {
        workersList: function (data) {
            $('#tbody').empty();
            var row;
            for (var id in data) {
                row = frmo.newRow.clone();
                row[0].id = parseInt(id);
                for (var key in data[id]) {
                    var val = data[id][key];
                    var td = $(row).find('.' + key);
                    if (key == 'active') val = '';
                    td.html(val);
                }
                row.find('td.editable').on('click', function (e) {
                    $(this).off();
                    frmo.edit.td(e.target);
                });
                row.appendTo('#tbody').show();
            }
        },
        addLine: function () {
            if ($('#new').is('tr')) {
                message('Click "Add" for previous line', 3);
                return;
            }
            var row = frmo.newRow.clone().show();
            $(row).find('td.editable.text').each(function (i, v) {
                var fieldName = $(v)[0].className.replace('editable', '').replace('text', '').trim();
                $(v).append('');
            });
            $(row).find('td.editable.textarea').each(function (i, v) {
                var fieldName = $(v)[0].className.replace('editable', '').replace('textarea', '').trim();
                $(v).append('');
            });
            $(row).find('button:not(.add), .status *').remove();
            $(row).find('button.add').show();
            $(row)[0].id = 'new';
            $(row).css('background-color', '#8fbc8f');
            $('#tbody').append(row);
            $("html, body").animate({scrollTop: $(document).height()}, 1000);
        }
    },
    update: {
        td: function (e) {
            var id = $(e).parents('tr')[0].id;
            var formData = ff.toObj(id);
            if (!isDefined(formData['id'])) formData['id'] = id;
            debug.cnsl(formData);
            j.post(['update', 'all'], function (data) {
                if (data.status) {
                    debug.cnsl(data);
                    message('Сохранено!', 1);
                    frmo.run.workersList(data.workers);
                } else message('Has not been saved!(', 0);
            }, formData);
        }
    },
    insert: function (e) {
        var formData = ff.toObj('new');
        debug.cnsl(formData);
        j.post(['insert', 'new'], function (data) {
            if (data.status) {
                message('Сохранено!', 1);
                frmo.init();
            } else {
                message('Not saved!', 2);
                $('#new').css('background-color', '#deb887');
            }
        }, formData);
    },
    edit: {
        td: function (e) {
            var text = $(e).text().trim();
            var fieldName = $(e)[0].className;
            if (fieldName == '') fieldName = $(e).parents('td')[0].className;
            fieldName = fieldName.replace('editable', '').replace('text', '').replace('textarea', '').replace('datalist', '').trim();
            debug.cnsl(fieldName);
            $(e).empty();
            if ($(e).hasClass('text')) $(e).append('');
            if ($(e).hasClass('textarea')) $(e).append('');
            $(e).parents('tr').find('button.save').removeAttr('disabled');
        }
    },
    del: function (e) {
        if (confirm('Delete?')) j.post(['delete'], function (data) {
            if (data.status) {
                message('Deleted.');
                $(e).parents('tr').remove();
            }
        }, {id: $(e).parents('tr')[0].id});
    }
};
        frm[341] = {
    newRow: '',
    init: function () {
        j.post(['init'], function (data) {
            frmo.run.infoList(data.info);
        }, {});
    },
    run: {
        infoList: function (info) {
            frmo.newRow = $('.ann').remove().clone();
            var annRow;
            $.each(info, function (i, ann) {
                // debug.cnsl(ann);
                annRow = frmo.newRow.clone();
                // annRow[0].id = 'ann'+parseInt(ann.id);
                annRow[0].id = parseInt(ann.id);
                if (ann.active == parseInt(1)) annRow.find('.status input').attr('checked', 'checked');
                else annRow.find('.status input').removeAttr('checked');
                // annRow.find('.text').empty().html(""+ann.text+"
").on('click', function (e) {
                annRow.find('.text').empty().html(ann.text).on('click', function (e) {
                    $(this).off();
                    frmo.edit.text(e.target);
                });
                annRow.appendTo('#anncTbody').show();
            });
        },
        addLine: function () {
            if ($('#new').is('tr')) {
                message('Click "Add" for previous line', 3);
                return;
            }
            var row = frmo.newRow.clone().show();
            $(row).find('td.text').append('');
            $(row).find('button:not(.add), .status *').remove();
            $(row).find('button.add').show();
            $(row)[0].id = 'new';
            $('#anncTbody').append(row);
        }
    },
    update: {
        active: function (e) {
            j.post(['update', 'active'], function (data) {
                if (data.status) message('Сохранено!', 1);
                form.init();
            }, {id: $(e).parents('tr')[0].id, active: $(e)[0].checked});
        },
        text: function (e) {
            var text = $(e).parents('tr').find('.text textarea').val();
            j.post(['update', 'text'], function (data) {
                if (data.status) {
                    message('Сохранено!', 1);
                    $(e).attr('disabled', 'disabled');
                    $(e).parents('tr').find('td.text').empty().text(text)
                        .on('click', function (e) {
                            $(this).off();
                            frmo.edit.text(e.target);
                        });
                }
            }, {id: $(e).parents('tr')[0].id, text: text});
        }
    },
    insert: function (e) {
        j.post(['insert', 'new'], function (data) {
            if (data.status) {
                message('Сохранено!', 1);
                form.init();
            }
        }, {text: $(e).parents('tr').find('.text textarea').val()});
    },
    edit: {
        text: function (e) {
            var text = '';
            if ($(e).hasClass('text')) text = $(e).html();
            else text = $(e).parents('.text').html();
            $(e).empty().append('').show();
            $(e).parents('tr').find('button.save').removeAttr('disabled');
        }
    },
    del: function (e) {
        if (confirm('Delete?')) j.post(['delete'], function (data) {
            if (data.status) {
                message('Deleted.');
                $(e).parents('tr').remove();
            }
        }, {id: $(e).parents('tr')[0].id});
    }
};
        frm[342] = {
    init: function (param) {
        panelDataUpdate();
        frmo.seatsAmount = [];
        frmo.customerId = frmo.customerId || "";
        frmo.workerId = parseInt(param[0]) || "";
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.orders = data.orders;
            frmo.workers = data.workers;
            frmo.statuses = data.orderStatuses;
            for (var key in data.customers) {
                $('#customerIds').append('');
            }
            for (var key in data.workers) {
                var name = data.workers[key]['name'];
                // $('.widb').append('');
                // $('.widb').append("");
                $('.widb').append("");
            }
            // frmo.workerId = undefined;
            /*
                        for (var key in data.workers) {
                            var name = data.workers[key]['name'];
                            $('.workersIds').append('');
                        }
            */
            frmo.viewOrderList();
            if (isDefined(sett.forms[frmo.curForm])) {
                $('.formIds').val(frmo.curForm);
                $('.vFormsList tbody tr').hide();
                if ($('.vFormsList tr.' + frmo.curForm).length == 0) $('.nothingMsg').show();
                else $('.vFormsList tbody tr.' + frmo.curForm).show();
            }
            $('.customerId').off().on('change', function () {
                $('.nothingMsg').hide();
                $('.vFormsList').removeClass('panel-collapsed');
                $('.vFormsList .panel-body').show();
                $('.vFormsList [data-action="collapse"]').removeClass('rotate-180');
                var vFid = $('.formIds').val();
                if (vFid != 'all') {
                    $('.vFormsList tbody tr').hide();
                    if ($('.vFormsList tr.' + vFid).length == 0) $('.nothingMsg').show();
                    else $('.vFormsList tbody tr.' + vFid).show();
                } else $('.vFormsList tbody tr').show();
            });
        }, {
            customerId: frmo.customerId,
            workerId: frmo.workerId
        });
    }
    , loadOrder: function (ev) {
        debug.cnsl(ev);
        $('#formsTbody,.nothingMsg').empty();
        // if (ev.value != "all") {
        /*if (ev.name == "workerId") {
            frmo.workerId = ev.value;
            // $('.wid' + frmo.workerId)[0].style = "background-color:green;";
        }
        if (ev.name == "customerId") {
            frmo.customerId = ev.value;
        }*/
        // }
        // else {
        j.post(['init', 'loadOrders'], function (data) {
            frmo.orders = data.orders;
            frmo.viewOrderList();
        }, {customerId: frmo.customerId, workerId: frmo.workerId});
        // }
    }
    , viewOrderList: function () {
        for (var key in frmo.orders) {
            // var fields = new Array('id', 'customer', 'status', 'created', 'totalPrice', 'dsc', 'note');
            var fields = ['id', 'status', 'customer', 'note'];
            var table = e('formsTbody');
            var line = e(frmo.orders[key]['id'], table, 'tr', "line " + frmo.orders[key]['id']);
            for (var k in fields) {
                var i = fields[k];
                var text = frmo.orders[key][i];
                var bgC = "inherit";
                // if (i == 'seatsAmount') text = "";
                if (i == 'createDate') text = parseDate.shortDate(text);
                if (i == 'status') {
                    bgC = frmo.statuses[frmo.orders[key]["statusId"]]["bgColor"];
                    if (frmo.orders[key]['workerName'] != null) text = text + " - " + frmo.orders[key]['workerName'] + "";
                }
                e(null, line, 'td', i).css("background-color:" + bgC).innerHTML = text;
            }
            var actions = e(null, line, 'td', 'actions');
            actions.innerHTML = '';
            /*
                        if (document.querySelector("select.form-control.workersIds").value != "all" && frmo.orders[key]['statusId'] == 4) {
                            actions.innerHTML =
                                // ' ' +
                                '' +
                                '';
                        } else if (document.querySelector("select.form-control.workersIds").value != "all" && frmo.orders[key]['statusId'] == 5) {
                            actions.innerHTML =
                                '';
                        }
            */
            if (isDefined(frmo.workerId) && frmo.workerId != "") {
                // $('.wid*').removeAttribute('style');
                // $('.wid' + frmo.workerId)[0].style = "background-color:green;";
                $('b.wname')[0].innerText = frmo.workers[frmo.workerId].name;
                if (frmo.orders[key]['statusId'] == 4) {
                    actions.innerHTML +=
                        '';
                } else if (frmo.orders[key]['statusId'] == 5) {
                    actions.innerHTML +=
                        '
' +
                        // "Количество упакованных коробок:";
                        "";
                }
            } else $('b.wname')[0].innerText = "";
        }
    }
    , printAndPack: function (orderId) {
        j.post(['update', 'printAndPack'], function (data) {
            if (data.status) {
                nav.goTo(334, orderId);
            }
        }, {orderId: orderId, workerId: frmo.workerId});
    }
    , packIsDone: function (orderId) {
        j.post(['update', 'packIsDone'], function (data) {
            if (data.status) {
                message("Успешно!", 1);
                $("#" + orderId).remove();
            }
        }, {orderId: orderId, workerId: frmo.workerId, seatsAmount: frmo.seatsAmount[orderId]});
    }
    , setSeatsAmount: function (oId, el) {
        frmo.seatsAmount[oId] = el.value;
    }
    , oninputCustomerId: function (t) {
        clearTimeout(frmo.ttt);
        frmo.ttt = setTimeout(function () {
            if (isDefined(panelData.customersList[t.value]) || t.value == "") {
                frmo.customerId = t.value;
                $('b.wname')[0].innerText = "";
                frmo.loadOrder(t);
            }
        }, 600);
    }
};
        frm[344] = {
    init: function () {
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.products = data.products;
            //products
            var optList = '';
            for (var prodId in data.products) {
                optList += '';
            }
            document.getElementById('productsList').innerHTML = optList;
            frmo.display(data.transactions);
        });
    },
    display: function (transactions) {
        var body = e('transBody');
        body.innerHTML = '';
        for (var tId in transactions) {
            var line = e(tId, body, 'tr');
            var rowData = transactions[tId];
            for (var fieldName in transactions[tId]) {
                var cont = rowData[fieldName];
                /*                if (fieldName == 'transTypeId') {
                                    var znak = "";
                                    switch (cont) {
                                        case '8': {
                                            znak = 'icon-database';
                                            break;
                                        }
                                        case '6': {
                                            znak = 'icon-forward text-success';
                                            break;
                                        }
                                        /!*default: {
                                            // icon-reply text-danger  icon-reply-all
                                            znak = 'icon-arrow-right7 text-success';
                                            break;
                                        }*!/
                                    }
                                    cont = ' ' + cont +
                                        (data[t]['transTypeId'] == 1 || data[t]['transTypeId'] == 3 ? ' #' + data[t]['orderId'] : '') + '
' + (data[t]['paymentMethod'] ? '(' + data[t]['paymentMethod'] + ')' : '') + '';
                                } else */
                if (fieldName == 'count') cont = '' + cont + ''
                e(null, line, 'td', fieldName).innerHTML = cont;
            }
            e(null, line, 'td').t('');
        }
    },
    pushTransaction: function () {
        if(frmo.validatorProdukta()) {
            var formData = ff.toObj('transactionForm');
            j.post(['insert'], function (data) {
                debug.cnsl(data);
                if (data.status) {
                    message("Товар успешно внесён на склад!");
                    frmo.init();
                    e("count").setAttribute("disabled", true);
                    e('transactionForm').reset();
                    e("productId").focus();
                } else {
                    message("Ошибка при записи...", 3)
                }
            }, formData);
        }
    }
    , pressReview(el) {
        if (el.onkeyup.arguments[0].key == "Enter") {
            frmo.pushTransaction();
        }
    }
    , validatorProdukta() {
        if (isNaN(parseInt(e('productId').value))) {
            message("В поле Продукт должен быть номер продукта! 
" +
                "Для этого введите номер(штрихкод), или выберите с выпадающего списка.", 3);
            return false;
        } else {
            e("count").removeAttribute("disabled");
            e("count").focus();
            return true;
        }
    }
    ,
    delTrans: function (ev){
        if(confirm('Вы действительно хотите удалить транзакцию?')){
            j.post(['delete'], function (data) {
                if(data.status) {
                    message('Транзакция успешно удалена',1);
                    frmo.init();
                }
                else message('Ошибка: транзакция не может быть удалена',0);
            }, {prodTransId: ev});
        }
    }
};
        frm[347] = { // API -- 391f396644edf05d72edf3b73dab2959
    init: function () {
        $("input:not(#formid),select").addClass("form-control");
        j.post(['init'], function () {
            np.r('getPayerType', function (resp) {
                frmo.dataToSelect('PayerType', resp.data, "Sender");
            });
            np.r('getPaymentMethod', function (resp) {
                frmo.dataToSelect('PaymentMethod', resp.data, "Cash");
            });
            np.r('getCargoType', function (resp) {
                frmo.dataToSelect('CargoType', resp.data, "Parcel");
            });
            np.r('getServiceType', function (resp) {
                frmo.dataToSelect('ServiceType', resp.data, "WarehouseWarehouse");
            });
            // document.getElementById('DateTime').valueAsDate = parseDate.npDate(false,"/");
            document.getElementById('DateTime').value = parseDate.dateInputField();
        });
    },
    dataToSelect: function (selectElementId, data, selectAsDef) {
        $('#' + selectElementId).empty();
        if (!isDefined(selectAsDef)) $('#' + selectElementId).append('');
        for (var key in data) {
            var Ref = data[key]['Ref'];
            var name = data[key]['Description'];
            var ruName = isDefined(data[key]['DescriptionRu']) ? " (рос. " + data[key]['DescriptionRu'] + ")" : "";
            $('#' + selectElementId).append('');
        }
    },
    cityToSelect: function (selectElementId, data) {
        $('#' + selectElementId).empty();
        for (var key in data) {
            var AreaDescription = data[key]['AreaDescription'];
            var Ref = data[key]['Ref'];
            // var name = data[key]['SettlementTypeDescription']+" "+data[key]['Description'].split(" ")[0];
            var name = data[key]['Description'];
            var extName = data[key]['SettlementTypeDescription'] + " " + name;
            var ruName = isDefined(data[key]['DescriptionRu']) ? " (рос. " + data[key]['DescriptionRu'] + ")" : "";
            // $('#' + selectElementId).append('');
            $('#' + selectElementId).append('');
        }
    },
    autoCityComplete: function (el,Ref = false) {
        let cityName = el.value.trim();
        let idField = el.id;
        let elemIdForPushRes = el.list.id;
        console.log(cityName);
        if (cityName.length >= 3) {
            npParams.getCities.methodProperties.FindByString = cityName;
            np.r('getCities', function (resp) {
                if (resp.success) {
                    let rd = resp.data;
                    if (cityName !== rd[0].Description) {
                        frmo.cityToSelect(elemIdForPushRes, resp.data);
                    }
                    if (rd.length === 1) {
                        if (cityName !== rd[0].Description) {// вывод в лист результатов
                            frmo.cityToSelect(elemIdForPushRes, resp.data);
                        } else {
                            if(Ref){// только для отправителя
                                console.log("SET REF!");
                                $("#" + elemIdForPushRes)[0].innerHTML = "";
                                $("[name='" + idField + "']")[0].value = rd[0].Ref;
                            }
                        }
                    } else if (rd.length > 1 && elemIdForPushRes) { // вывод в лист результатов
                        frmo.cityToSelect(elemIdForPushRes, resp.data);
                    }
                } else debug.cnsl(resp);
            });
        }
    },
    whToSelect: function (selectElementId, data) {
        console.log(data);
        $('#' + selectElementId).empty();
        for (let key in data) {
            let Number = data[key]['Number'];
            let name = data[key]['Description'];
            $('#' + selectElementId).append('');
        }
    },
    autoWhComplete: function (el,Ref = false) {
        console.log('autoWhComplete');
        let cityName = $("#" + el.dataset.cityName).val().trim();
        let idField = el.id;
        let elemIdForPushRes = el.list.id;
        console.log(cityName);
        npParams.getWarehouses.methodProperties.CityName = cityName;
        // npParams.getWarehouses.methodProperties.TypeOfWarehouse = $("[name='TypeOfWarehouseRef']").val();
        npParams.getWarehouses.methodProperties.Number = 1;
        np.r('getWarehouses', function (resp) {
            if (resp.success) {
                let rd = resp.data;
                // $("[name='" + idField + "']")[0].value = "";
                if(Ref){// только для отправителя
                    console.log("SET REF!");
                    $("#" + elemIdForPushRes)[0].innerHTML = "";
                    $("[name='" + idField + "']")[0].value = rd[0].Ref;
                } else if (elemIdForPushRes) {
                    frmo.whToSelect(elemIdForPushRes, resp.data);
                }
            } else debug.cnsl(resp);
        });
    },
    createTTN: function (flag = true) {
        let formData = ff.toObj("npSID");
        console.log('createTTN');
        console.log(formData);
        let fa = {};
        new FormData(document.forms.npSID).forEach(function (val, key) {
            if (!isDefined(fa[key])) fa[key] = val;
            else fa[key] += "," + val;
        });
        fa.DateTime = parseDate.npDate(fa.DateTime);
        npParams.saveInternetDocument.methodProperties = fa;
        console.log(npParams.saveInternetDocument);
        np.r('saveInternetDocument', function (resp) {
            if (resp.success) {
                message("TTN CREATED!!!", "s", "URRA!");
                console.log(resp);
            } else {
                message("TTN create error","e","View console as DEV");
                debug.cnsl(resp);
            }
        });
    }
};
        frm[348] = {
    init:function(){
 j.post(['init'], function (data) {
  debug.cnsl(data);
 }, {});
    }
};
        frm[351] = {
    init: function (path) {
        if (path != "") frmo.customerId = path;
        else {
            history.back();
            alert("Клиент не выбран!");
            return false;
        }
        j.post(['init'], function (data) {
            document.getElementById('clientName').innerHTML = data.customerInfo.name;
            frmo.display(data.history);
        }, {customerId: path});
    },
    pushTransaction: function () {
        if (document.getElementById('dateOfOperation').value == "") {
            message("Внесите дату накладной!", 3);
            return false;
        }
        var formData = ff.toObj('historyForm');
        formData['customerId'] = frmo.customerId;
        j.post(['insert'], function (data) {
            debug.cnsl(data);
            if (data.status) {
                message("Регистрация успешна!");
                document.getElementById('historyForm').reset();
                frmo.display(data.history);
            } else {
                message("Ошибка при записи...", 3)
            }
        }, formData);
    },
    display: function (data) {
        var body = e('transBody');
        body.innerHTML = '';
        for (var t in data) {
            var line = e(t, body, 'tr');
            var dataForLine = data[t];
            var fieldForShow = ['id', 'transType', 'amount', 'customer', 'note', 'dateOfOperation'];
            for (var fi in fieldForShow) {
                var fieldName = fieldForShow[fi];
                var cont = dataForLine[fieldName];
                if (fieldName == 'transType') {
                    var znak = "";
                    switch (dataForLine['transTypeId']) {
                        case '0': {
                            znak = 'icon-droplet';
                            break;
                        }
                        case '1': {
                            znak = 'icon-arrow-left7 text-danger';
                            break;
                        }
                        default: {
                            znak = 'icon-arrow-right7 text-success';
                            break;
                        }
                    }
                    cont = ' ' + cont +
                        (dataForLine['transTypeId'] == 1 || dataForLine['transTypeId'] == 3 ? ' #' + dataForLine['orderId'] : '') + '
' +
                        '' + (dataForLine['paymentMethod'] ? '(' + dataForLine['paymentMethod'] + ')' : '') + '';
                } else if (fieldName == 'amount') cont = '' + cont + ''
                e(null, line, 'td', fieldName).innerHTML = cont;
            }
        }
    }, pressReview(el) {
        if (el.onkeyup.arguments[0].key == "Enter") {
            frmo.pushTransaction();
        }
    }
};
        frm[352] = {
    init: function (param) {
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.orders = data.orders;
            frmo.workers = data.workers;
            frmo.statuses = data.orderStatuses;
            frmo.curForm = parseInt(param[0]);
            //frmo.listSV = data.listSV;
            for (var key in data.customers) {
                $('.customerIds').append('');
            }
            for (var key in data.workers) {
                var name = data.workers[key]['name'];
                $('.workersIds').append('');
            }
            frmo.viewOrderList();
            if (isDefined(sett.forms[frmo.curForm])) {
                $('.formIds').val(frmo.curForm);
                $('.vFormsList tbody tr').hide();
                if ($('.vFormsList tr.' + frmo.curForm).length == 0) $('.nothingMsg').show();
                else $('.vFormsList tbody tr.' + frmo.curForm).show();
            }
            $('.customerIds').off().on('change', function () {
                $('.nothingMsg').hide();
                $('.vFormsList').removeClass('panel-collapsed');
                $('.vFormsList .panel-body').show();
                $('.vFormsList [data-action="collapse"]').removeClass('rotate-180');
                var vFid = $('.formIds').val();
                if (vFid != 'all') {
                    $('.vFormsList tbody tr').hide();
                    if ($('.vFormsList tr.' + vFid).length == 0) $('.nothingMsg').show();
                    else $('.vFormsList tbody tr.' + vFid).show();
                } else $('.vFormsList tbody tr').show();
            });
        }, {});
    }
    , viewOrderList: function () {
        for (var key in frmo.orders) {
            // var fields = new Array('id', 'customer', 'status', 'created', 'totalPrice', 'dsc', 'note');
            var fields = new Array('id', 'status', 'customer', 'smName', 'ttn');
            var table = e('formsTbody');
            var act = frmo.orders[key]['active'] == 1 ? 'current ' : '';
            var line = e(null, table, 'tr', act + frmo.orders[key]['vFormId']);
            //debug.cnsl(frmo.orders[key]);
            for (var k in fields) {
                var i = fields[k];
                var text = frmo.orders[key][i];
                var bgC = "inherit";
                if (i == 'ttn' && text != null) text = 'Отследить: ' + text + '';
                if (i == 'createDate') text = parseDate.shortDate(text);
                if (i == 'status') {
                    bgC = frmo.statuses[frmo.orders[key]["statusId"]]["bgColor"];
                    if (frmo.orders[key]['workerName'] != null && frmo.orders[key]['statusId'] < 7) text = text + " - " + frmo.orders[key]['workerName'] + "";
                }
                e(null, line, 'td', i).css("background-color:" + bgC).innerHTML = text;
            }
            if (frmo.orders[key]["shippingMethodId"] == 1 && frmo.orders[key]["ttn"] == null) {
                e(null, line, 'td', 'actions').innerHTML = "" +
                    "";
            }
            if (frmo.orders[key]["shippingMethodId"] == 1 && frmo.orders[key]["ttn"] != null) {
                e(null, line, 'td', 'actions').innerHTML = "" +
                "Печать стикера 100*100" +
                    ((frmo.orders[key]['statusId'] > 7) ? "(уже распечатан)" : "") +
                    "";
                e(null, line, 'td', 'actions').innerHTML = "" +
                "Пропустить печать" +
                    "";
            }
            else if (frmo.orders[key]["shippingMethodId"] != 1) {
                e(null, line, 'td', 'actions').innerHTML = "Эту отравку нужно создавать вручную!";
            }
        }
    }
    , printTtnStiker: function (oId) {
        j.post(["update", "printTtnStiker"], function (data) {
            debug.cnsl(data);
            form.init();
        }, {orderId: oId});
    }
    /*
    , loadOrder: function (ev) {
        $('#formsTbody,.nothingMsg').empty();
        if (ev.value != "all") {
            if (ev.name == "workerId") {
                j.post(['init', 'loadOrders'], function (data) {
                    frmo.orders = data.orders;
                    frmo.viewOrderList();
                }, {workerId: ev.value})
            }
            if (ev.name == "customerIds") {
                $("#goToCustomer")[0].dataset.customerId = ev.value;
                j.post(['init', 'loadOrders'], function (data) {
                    frmo.orders = data.orders;
                    frmo.viewOrderList();
                }, {customerId: ev.value})
            }
        } else {
            j.post(['init', 'loadOrders'], function (data) {
                frmo.orders = data.orders;
                frmo.viewOrderList();
            })
        }
    }   , printAndPack: function (orderId) {
        var workerId = document.querySelector("select.form-control.workersIds").value;
        j.post(['update', 'printAndPack'], function (data) {
            if (data.status) {
                nav.goTo(334, orderId);
            }
        }, {orderId: orderId, workerId: workerId});
    }
    , packIsDone: function (orderId) {
        var workerId = document.querySelector("select.form-control.workersIds").value;
        j.post(['update', 'packIsDone'], function (data) {
            if (data.status) {
                // nav.goTo(334, orderId);
                message("Успешно!",1);
            }
        }, {orderId: orderId, workerId: workerId});
    }*/
};
        frm[353] = {
    init: function () {
        j.post(['init'], function (data) {
            frmo.customers = data.customers;
            //клиенты
            var optList = '';
            for (var ct in data.customers) {
                optList += '';
            }
            document.getElementById('customersList').innerHTML = optList;
            //клиенты
            var statusList = '';
            for (var st in data.orderStatuses) {
                statusList += '';
            }
            document.getElementById('statusId').innerHTML = statusList;
        });
        document.getElementById('customerId').focus();
    },
    getOrdersList: function () {
        if (isDefined(frmo.customerId)) { // если клиент выбран
            j.post(['getOrderList'], function (data) {
                if (isDefined(data.orderList)) {
                    frmo.orderList = data.orderList;
                    //orderList
                    var orderList = '';
                    for (var oi in data.orderList) {
                        orderList += '';
                    }
                    document.getElementById('orderId').innerHTML = orderList;
                    document.getElementById('orderId').removeAttribute('disabled');
                    frmo.ammountPrepare(document.getElementById('orderId'));
                    document.getElementById('amount').readOnly = true;
                } else {
                    message("Заказов для возврата нет!", 3);
                    document.getElementById('orderId').disabled = true;
                    document.getElementById('orderId').innerHTML = "";
                    document.getElementById('amount').removeAttribute('readonly');
                }
            }, {customerId: frmo.customerId});
        } else message("Сначала выберите клиента");
    },
    prepareFormData: function (el) {
        if (el.value != "") {
            frmo.customerId = el.value;
            document.getElementById('amount').removeAttribute('readonly');
            document.getElementById('orderId').innerHTML = "";
            document.getElementById('orderId').disabled = true;
            frmo.getOrdersList();
        }
    },
    ammountPrepare: function (el) {
        debug.cnsl("ammount");
        frmo.ammount = frmo.orderList[el.value]['totalPrice'];
        document.getElementById('amount').value = frmo.ammount;
    },
    pushTransaction: function () {
        var formData = ff.toObj('transactionForm');
        j.post(['insert'], function (data) {
            debug.cnsl(data);
            if (data.status) {
                message("Регистрация успешна!");
                frmo.getOrdersList();
            } else {
                message("Ошибка при записи...", 3)
            }
        }, formData);
    }
};
        frm[355] = {
    init: function (customerId) {
        if (customerId != "") frmo.customerId = customerId;
        else {
            history.back();
            alert("Клиент не выбран!");
            return false;
        }
        $("[name='customerId']")[0].value = frmo.customerId;
        $("#custName").text(panelData.customersList[frmo.customerId].name);
        j.post(['init'], function (data) {
            // var methodsList = '';
            var methodsList = document.getElementById('shippingMethodId');
            for (var key in data.methods) {
                // methodsList += '';
                // methodsList[methodsList.length] = new Option(data.methods[key]['name'],key,false,(panelData.customersList[frmo.customerId].defaultShippingMethodId==key) );
                methodsList[methodsList.length] = new Option(data.methods[key]['name'], key, (key == "3"));
            }
            // document.getElementById('shippingMethodId').innerHTML = methodsList;
            frmo.display(data.addresses);
        }, {customerId: frmo.customerId});
    },
    display: function (addresses) {
        var body = e('addressesBody');
        body.innerHTML = '';
        for (var tId in addresses) {
            var line = e(tId, body, 'tr');
            var rowData = addresses[tId];
            for (var fieldName in addresses[tId]) {
                var cont = rowData[fieldName];
                if (fieldName == 'count') cont = '' + cont + ''
                e(null, line, 'td', fieldName).innerHTML = cont;
            }
            e(null, line, 'td').t('');
        }
    },
    pushTransaction: function () {
        let address = $("#address").val();
        address = address.replace(/[^А-Яа-яёЁЇїІіЄєҐґ0-9a-zA-Z.,№-]+/g, ' ').replace(/[\n\r\s\t]+/g, ' ');
        let fData = ff.toObj("addressForm");
        if (fData.address !== "" || (fData.RecipientCityName !== "" && fData.RecipientAddressName !== "")) {
            j.post(['insert'], function (data) {
                debug.cnsl(data);
                if (data.status) {
                    message("Адрес успешно внесён!");
                    panelDataUpdate(function () {
                        nav.goTo(325, ["new", frmo.customerId]);
                    });
                } else {
                    message("Ошибка при записи...", 3)
                }
            }, fData);
        } else message("Адрес не должен быть пустой!", 3);
        return false;
    }
    ,
    delTrans: function (ev) {
        if (confirm('Вы действительно хотите удалить адрес?')) {
            j.post(['delete'], function (data) {
                if (data.status) {
                    message('Адрес успешно удален', 1);
                    frmo.init(frmo.customerId);
                } else message('Ошибка: адрес не может быть удален', 0);
            }, {
                saId: ev,
                customerId: frmo.customerId
            });
        }
    }
    , changeSM: function (el) {
        console.log(el.value);
        if (el.value == 1) { // Если Новая почта на отделение
            $("#NP").show();
            $("#other").hide();
        } else {
            $("#other").show();
            $("#NP").hide();
        }
    }
    , cityToSelect: function (selectElementId, data) {
        $('#' + selectElementId).empty();
        for (var key in data) {
            var AreaDescription = data[key]['AreaDescription'];
            var Ref = data[key]['Ref'];
            // var name = data[key]['SettlementTypeDescription']+" "+data[key]['Description'].split(" ")[0];
            var name = data[key]['Description'];
            var extName = data[key]['SettlementTypeDescription'] + " " + name;
            var ruName = isDefined(data[key]['DescriptionRu']) ? " (рос. " + data[key]['DescriptionRu'] + ")" : "";
            // $('#' + selectElementId).append('');
            $('#' + selectElementId).append('');
        }
    },
    autoCityComplete: function (el) {
        let cityName = el.value.trim();
        let idField = el.id;
        let elemIdForPushRes = el.list.id;
        console.log(cityName);
        if (cityName.length >= 3) {
            npParams.getCities.methodProperties.FindByString = cityName;
            np.r('getCities', function (resp) {
                if (resp.success) {
                    let rd = resp.data;
                    if (cityName !== rd[0].Description) {
                        frmo.cityToSelect(elemIdForPushRes, resp.data);
                    }
                    if (rd.length > 1 && elemIdForPushRes) { // вывод в лист результатов
                        frmo.cityToSelect(elemIdForPushRes, resp.data);
                    }
                } else debug.cnsl(resp);
            });
        }
    },
    whToSelect: function (selectElementId, data) {
        console.log(data);
        $('#' + selectElementId).empty();
        for (let key in data) {
            let Number = data[key]['Number'];
            let name = data[key]['Description'];
            $('#' + selectElementId).append('');
        }
    },
    autoWhComplete: function (el, Ref = false) {
        console.log('autoWhComplete');
        let cityName = $("#" + el.dataset.cityName).val().trim();
        let elemIdForPushRes = el.list.id;
        console.log(cityName);
        npParams.getWarehouses.methodProperties.CityName = cityName;
        np.r('getWarehouses', function (resp) {
            if (resp.success) {
                let rd = resp.data;
                if (elemIdForPushRes) {
                    frmo.whToSelect(elemIdForPushRes, rd);
                }
            } else debug.cnsl(resp);
        });
    }
};
        frm[356] = {
    orderId: 'new',
    searchMinLength: 3,
    init: function (path) {
        var orderId = path[0] || "";
        var customerId = path[1] || "";
        /********************************************************************** START **************/
        if (orderId == '' || orderId == 'new') {
            $('.editOrder').hide();
            $("#statusId")[0].disabled = true;
            $("#shippingMethodId")[0].disabled = true;
            $("#customerId")[0].style = "box-shadow: 1px 1px 8px 0px green;";
            if (customerId != "") $("#customerId")[0].value = customerId;
            $("#orderForm *:is(input:not(#customerId),select:not(#shippingMethodId),textarea) ").hide();
        } else {
            frmo.orderId = orderId;
            document.getElementById('orderInfo').classList.add('panel-collapsed');
            $('.newOrder').hide();
        }
        /******************************************************* END *******************/
        j.post(['init'], function (data) {
            debug.cnsl('initdata');
            debug.cnsl(data);
            frmo.prodContentIds = data.prodContentIds || [];
            frmo.balance = data.customerInfo;
            if (isDefined(data.customerInfo)) {
                if (frmo.balance.perelimit == "da") {
                    $(".heading-elements button").remove();
                    $("div.limit").html('Этот оптовый не может cделать этот заказ из-за перелимита: ' + frmo.balance.znachenie + '');
                    document.getElementById('orderInfo').classList.remove('panel-collapsed');
                    return;
                } else {
                    // $("div.limit").html('Разрешённая сумма дозаказа: ' + (parseInt(frmo.balance.znachenie)-parseInt(data.orderDetails.totalPrice)) + '');
                    $("div.limit").html('Разрешённая сумма заказа: ' + parseInt(frmo.balance.znachenie) + '');
                }
            }
            //вывод категорий
            var catBlock = e('catsList'), cur;
            var formSel = document.getElementById('ctIds');
            for (var ct in data.categories) {
                cur = data.categories[ct];
                var ctBox = e('ct' + ct, catBlock, 'div', 'col-md-1 singleCt');
                e(null, ctBox, 'input', 'hidden').a('type', 'checkbox').a('name', 'ct' + ct);
                e(null, ctBox, 'input', 'hidden').a('type', 'text').a('value', ct);
                e(null, ctBox, 'img', 'ctImg').s(img.url(cur.imgId, 150, 150));
                e(null, ctBox, 'span', 'ctName').t(cur.name);
                formSel[formSel.options.length] = new Option(ct, ct);
            }
            //статусы
            var statuses = document.getElementById('statusId');
            for (var ct in data.orderStatuses) {
                statuses[statuses.options.length] = new Option(data.orderStatuses[ct].name, data.orderStatuses[ct].id);
            }
            //Доставка
            var shippings = document.getElementById('shippingMethodId');
            for (var ct in data.shippingMethods) {
                shippings[shippings.options.length] = new Option(data.shippingMethods[ct].name, data.shippingMethods[ct].id);
            }
            //клиенты
            var optList = '';
            frmo.customers = data.customers;
            for (var ct in data.customers) {
                optList += '';
            }
            document.getElementById('customersList').innerHTML = optList;
            if (data.orderDetails) {
                //order details
                var formInfo = $('#orderForm');
                for (var d in data.orderDetails) {
                    var val = data.orderDetails[d];
                    if ((d == 'createDate' || d == 'updateDate') && val != null) val = parseDate.shortDate(val);
                    formInfo.find('*[name="' + d + '"]').val(val);
                }
                frmo.customerId = data.orderDetails.customerId;
                frmo.totalPrice = data.orderDetails.totalPrice;
                frmo.checkLimit();
                //order content
                if (data.orderContent) {
                    $('.orderEmpty').hide();
                    $('#orderTable').show();
                    frmo.updateTotalPrice(data.orderDetails.totalPrice);
                    frmo.displayResult(data.orderContent, 'cartBody');
                }
            }
            frmo.buttons();
        }, {orderId: orderId,});
        frmo.findLine = $('#listBody .findLine').html();
        $('#listBody').empty();
        frmo.contentLine = $('#cartBody .cartLine').html();
        $('#cartBody').empty();
    },
    wishlist: {
        /*updateProducts: function (recordId, count) {
            j.post(['update', 'cart'], function (data) {
                if (isDefined(data.prodContentIds)) frmo.prodContentIds = data.prodContentIds;
                if (!data.status) message('Что-то пошло не так, попробуйте позже', 0);
                else frmo.updateTotalPrice(data.totalPrice);
                frmo.totalPrice = data.totalPrice;
                frmo.checkLimit();
                if (data.orderContent) frmo.displayResult(data.orderContent, 'cartBody');
            }, {orderId: frmo.orderId, recordId: recordId, count: -count});
        },*/
        addProduct: function (ev) {
            var line = ev.parentNode.parentNode;
            line.disable = true;
            var prId = line.id;
            var prCount = line.children.namedItem('qty').children[0].value;
            j.post(['insert', 'toWishlist'], function (data) {
                if (data.status) {
                    message("Внесено в список ожидания");
                    $('.orderEmpty').hide();
                    $('#orderTable').show();
                    frmo.displayResult(data.orderContent, 'cartBody');
                } else message("Ошибка при добавления в лист ожидания", 3);
            }, {customerId: frmo.customerId, productId: prId, waitCount: prCount});
        }/*,
        delProduct: function (ev) {
            var prId = ev.parentNode.parentNode.id;
            j.post(['delete', 'cart'], function (data) {
                if (isDefined(data.prodContentIds)) frmo.prodContentIds = data.prodContentIds;
                if (data.status) {
                    frmo.displayResult(data.orderContent, 'cartBody');
                    frmo.updateTotalPrice(data.totalPrice);
                    frmo.search();
                }
                frmo.totalPrice = data.totalPrice;
                frmo.checkLimit();
            }, {orderId: frmo.orderId, recordId: prId});
        }*/
    },
    order: {
        create: function () {
            var crData = ff.toObj('orderForm');
            if (crData.customerId == '') message('Выберите id клиента', 3);
            else {
                j.post(['insert', 'order'], function (data) {
                    if (data.orderId) {
                        message('Заказ создан успешно!', 1);
                        nav.goTo(325, data.orderId);
                    } else message('При создании заказа возникла ошибка. Свяжитесь с администратором.', 0);
                }, crData);
            }
        },
        updateInfo: function () {
            var orData = ff.toObj('orderForm');
            if (orData.customerId == '') message('Выберите id клиента', 3);
            else {
                orData.orderId = frmo.orderId;
                j.post(['update', 'order'], function (data) {
                    if (data.status) {
                        message('Заказ успешно обновлен!', 1);
                        nav.goTo(325, frmo.orderId);
                    } else message('При обновлении заказа возникла ошибка. Свяжитесь с администратором.', 0);
                }, orData);
            }
        },
        aprooved: function () {
            j.post(['update', 'aproovedOrder'], function (data) {
                if (data.status) {
                    message('Заказ №' + frmo.orderId + '  успешно подтверждён!', 1);
                    nav.goTo(328);
                } else message('При обновлении заказа возникла ошибка. Свяжитесь с администратором.', 0);
            }, {statusId: 2, orderId: frmo.orderId});
        },
        temp: function () {
            j.post(['update', 'tempOrder'], function (data) {
                if (data.status) {
                    message('Заказ №' + frmo.orderId + '  успешно сохранён как черновик!', 1);
                    nav.goTo(328);
                } else message('При обновлении заказа возникла ошибка. Свяжитесь с администратором.', 0);
            }, {statusId: 1, orderId: frmo.orderId});
        },
        toPack: function () {
            j.post(['update', 'toPack'], function (data) {
                if (data.status) {
                    message('Заказ №' + frmo.orderId + '  передан на упаковку!', 1);
                    if (data.statusProcedure) {
                        message("Списание с баланса за заказ произошло успешно!", 1);
                        nav.goTo(328);
                        panelDataUpdate();
                    } else message("Ошибка, средства не списаны! Сообщите админу!", 3);
                } else message('При передаче заказа возникла ошибка. Свяжитесь с администратором.', 0);
            }, {statusId: 4, orderId: frmo.orderId, customerId: frmo.customerId, totalPrice: frmo.totalPrice});
        },
        del: function () {
            if (confirm('Вы действительно хотите удалить заказ?'))
                j.post(['delete', 'order'], function (data) {
                    if (data.affected_rows == 1) {
                        message('Заказ успешно удалён!', 1);
                        nav.goTo(328);
                    } else message('При удалении заказа возникла ошибка. Свяжитесь с администратором.', 0);
                }, {orderId: frmo.orderId});
        },
        updateProducts: function (recordId, count) {
            j.post(['update', 'cart'], function (data) {
                if (isDefined(data.prodContentIds)) frmo.prodContentIds = data.prodContentIds;
                if (!data.status) message('Что-то пошло не так, попробуйте позже', 0);
                else frmo.updateTotalPrice(data.totalPrice);
                frmo.totalPrice = data.totalPrice;
                frmo.checkLimit();
                if (data.orderContent) frmo.displayResult(data.orderContent, 'cartBody');
            }, {orderId: frmo.orderId, recordId: recordId, count: count});
        },
        addProduct: function (ev) {
            var line = ev.parentNode.parentNode;
            line.disable = true;
            var prId = line.id;
            var prCount = line.children.namedItem('qty').children[0].value;
            j.post(['insert', 'cart'], function (data) {
                if (isDefined(data.prodContentIds)) frmo.prodContentIds = data.prodContentIds;
                if (data.status) {
                    $('.orderEmpty').hide();
                    $('#orderTable').show();
                    frmo.displayResult(data.orderContent, 'cartBody');
                    frmo.updateTotalPrice(data.totalPrice);
                    frmo.totalPrice = data.totalPrice;
                    frmo.checkLimit();
                    if (isDefined(data.countOfStock)) {
                        debug.cnsl(data);
                        frmo.checkAsInCart(prId);
                    }
                } else message("Ошибка при добавлении в корзину", 3);
            }, {orderId: frmo.orderId, customerId: frmo.customerId, productId: prId, count: prCount});
        },
        delProduct: function (ev) {
            var prId = ev.parentNode.parentNode.id;
            j.post(['delete', 'cart'], function (data) {
                if (isDefined(data.prodContentIds)) frmo.prodContentIds = data.prodContentIds;
                if (data.status) {
                    frmo.displayResult(data.orderContent, 'cartBody');
                    frmo.updateTotalPrice(data.totalPrice);
                    frmo.search();
                }
                frmo.totalPrice = data.totalPrice;
                frmo.checkLimit();
            }, {orderId: frmo.orderId, recordId: prId});
        }
    },
    updateTotalPrice: function (price) {
        document.getElementById('orderTotalPrice').innerHTML = price || 0;
    },
    search: function (i) {
        var sText = $('input[name="sw"]').val();
        frmo.searchQ = new Object();
        frmo.searchQ = ff.toObj('searchRequest');
        debug.cnsl(frmo.searchQ);
        if (sText.length == 0 || sText.length >= frmo.searchMinLength) {
            j.post(['init', 'start'], function (data) {
                $('.result').show();
                frmo.displayResult(data.searchRezult, 'listBody');
            }, frmo.searchQ);
        } else {
            message('Minimum ' + frmo.searchMinLength + ' chart!', 3);
            $('.result').hide();
        }
    },
    displayResult: function (data, tableId) {
        $('#' + tableId).empty();
        var tbl = e(tableId);
        if (!data) {
            $('.searList').fadeIn(500);
            e(null, e(null, tbl, 'tr', 'findLine'), 'td')
                .a('colspan', '8')
                .a('style', 'text-align: center;')
                .t('Нет товаров для отображения');
        }
        var line = tableId == 'listBody' ? frmo.findLine : frmo.contentLine;
        if (isDefined(data)) {
            $('.searList').fadeIn(500);
            for (var key in data) {
                var keys = data[key]['id'];
                var tr = e(keys, tbl, 'tr', ''+(tableId == 'listBody' ? 'col-md-3 findLine' : 'cartLine'));
                $(tr).html(line);
                e(keys, tbl, 'tr');
                for (var t in data[key]) {
                    var td = data[key];
                    if ($('td.' + t)) {
                        var cont = td[t];
                        if (t == 'imgId') {
                            var hr = nav.link(213, [keys]);
                            cont = '
 ';
                        } else if (t == 'productName') {
                            // var hr = '/media/detail/' + keys;
                            var hr = nav.link(213, [keys]);
                            cont = '' + cont + '';
                        } else if (t == 'countOfStock') {
                            $('#' + keys + ' td.countOfOrder input').attr('max', cont)
                                .attr('placeholder', "max " + cont);
                            if (cont > 0) $('#' + keys + ' button.addToCart').removeAttr('disabled');
                            // if (cont != null) $('#' + keys + ' button.addToCart').removeAttr('disabled');
                            else $('#' + keys + ' button.addToWishlist').show();
                            cont = '' + cont + '';
                        } else if (t == 'active') {
                            cont =
                                cont == '0' ? 'неактивен'
                                    : 'включен';
                        } else if (t == 'createDate') cont = parseDate.shortDate(cont) + '
 ' + td.createUser;
                        else if (t == 'count')
                            cont = '';
                        $('#' + keys + ' td.' + t).html(cont);
                    }
                }
                // проверка на существование товара в корзине
                if (isDefined(frmo.prodContentIds) && frmo.prodContentIds.indexOf(keys) != -1 && tableId == "listBody") {
                    frmo.checkAsInCart(keys);
                } else if (!isDefined(frmo.prodContentIds) && frmo.prodContentIds.indexOf(keys) != -1 && tableId == "listBody") {
                    frmo.prodContentIds = [];
                    frmo.checkAsInCart(keys);
                }
            }
            $('input.qty').off().on('change', function (ev) {
            }).on('change', function (ev) {
                var line = ev.target.parentNode.parentNode;
                var p = $(line).children('.price').text();
                $(line).children('.total').text(ev.target.value * p);
                if (line.classList.contains('cartLine')) {
                    frmo.order.updateProducts(line.id, ev.target.value);
                }
            });
        }
    },
    tmstmpDate: function (tmst) {
        var date = new Date(tmst);
        var m = date.getMonth() + 1;
        date = (date.getFullYear() + "-" + m + "-" + date.getDate());
        //debug.cnsl(date);
        date = parseDate.shortDate(date);
        return date;
    },
    buttons: function () {
        $(".singleCt").off().on('click', function (ev) {
            /**********************Выключение предыдущей выбранной категории**************************************/
            var selected = document.querySelector('#catsList input[type="checkbox"]:checked');
            if(selected) {
                selected.checked = false;
                selected.parentNode.classList.remove('selected');
            }
            /*****************************************************************************************************/
            ev.currentTarget.children.namedItem(ev.currentTarget.id).checked = !ev.currentTarget.children.namedItem(ev.currentTarget.id).checked;
            ev.currentTarget.classList.toggle('selected');
            var inpVals = document.querySelectorAll('#catsList input[type="checkbox"]:checked + input'), vals = [];
            for (var k = 0; k < inpVals.length; k++) {
                vals[vals.length] = inpVals[k].value
            }
            $('form select#ctIds').val(vals);
            frmo.search();
        });
        if (!isDefined(perValue)) var perValue = '';
        $('input[name="sw"]').off()
            .on('keypress', function (e) {
                if (e.which == 13) {
                    e.preventDefault();
                    e.stopImmediatePropagation();
                }
            })
            .on('keyup', function (e) {
                if (e.which == 13) {
                    e.preventDefault();
                    e.stopImmediatePropagation();
                    frmo.search();
                }
                var sText = $('input[name="sw"]').val();
                if (perValue == '') perValue = sText;
                else if (perValue != sText) {
                    $('.result').fadeOut(500);
                    $('.searList').fadeOut(500);
                    perValue = sText;
                }
            });
        $('.scrollBtn').off().on('click', function (e) {
            var panel = $(e.target.value.toString());
            $("html, body").animate({scrollTop: (panel.offset().top - parseInt($('.navbar-fixed-top').css('height')))}, 1000);
            panel.removeClass('panel-colapsed');
            panel.find('.panel-body').show();
            panel.find('.rotate-180').removeClass('rotate-180');
        });
    },
    checkAsInCart: function (prId) {
        $("#" + prId + " button ")[0].outerHTML = "Уже в корзине!";
        // $("#"+prId+" .countOfStock")[0].innerHTML = data.countOfStock;
        $("#" + prId + " .countOfStock")[0].innerHTML = "";
        $("#" + prId + " td.countOfOrder")[0].innerHTML = "";
        $("#" + prId + " td.total")[0].innerHTML = "";
    },
    prepareFormData: function (el) {
        if (isDefined(frmo.customers[el.value].defaultShippingMethodId)) {
            document.getElementById('shippingMethodId').removeAttribute('disabled');
            document.getElementById('shippingMethodId').value = frmo.customers[el.value].defaultShippingMethodId;
        }
    }
    , checkLimit: function () {
        if (parseInt(frmo.totalPrice) > parseInt(frmo.balance.znachenie)) {
            message("Сумма товаров в корзине превышает допустимое значение для этого клиента!", 3);
        }
    }
};
        frm[357] = {
    init: function () {
        j.post(['init'], function (data) {
            debug.cnsl(data);
            var dataToShow = data.searchRezult;
            var line, ctid;
            for (var key in dataToShow) {
                var fields = new Array('productName', 'price', 'priceRoznica');
                var table = e('listBody');
                line = e(null, table, 'tr');
                if (ctid != dataToShow[key]['ctid']) {
                    line.style = "border-top: 2px #000 solid;";
                }
                ctid = dataToShow[key]['ctid'];
                for (var k in fields) {
                    var i = fields[k];
                    var text = dataToShow[key][i];
                    var bgC = "inherit";
                    if (i == 'price' || i == 'priceRoznica')
                        text = "" + parseInt(text) + "";
                    // if (i == 'countOfStock' && parseInt(text) < 0) text = "" + text + "";
                    // if (i == 'createDate') text = parseDate.shortDate(text);
                    /*if (i == 'status') {
                        bgC = frmo.statuses[dataToShow[key]["statusId"]]["bgColor"];
                        if (dataToShow[key]['workerName'] != null) text = text + " - " + dataToShow[key]['workerName'] + "";
                    }*/
                    e(null, line, 'td', i).css("background-color:" + bgC).innerHTML = text;
                }
            }
        }, {});
    }
};
        frm[358] = {
    init:function(){
 j.post(['init'], function (data) {
  debug.cnsl(data);
 }, {});
    }
};
        frm[359] = {
    orderId: 'new',
    searchMinLength: 3,
    init: function (path) {
        orderId = path[0] || "";
        customerId = sett.user.customerID;
        j.post(['check'], function (data) {
            // console.log(data);
            if(isDefined(data.customerHistory)){
                $('.page-container')[0].style = "font-size: 15px;";
                $('.page-container')[0].innerHTML =
                    "Шановний клієнте, у вас є неоплочені замовлення, граничний термін(6 місяців) оплати для яких уже вичерпано. 
" +
                    "Для продовження роботи в системі, вам необхідно оплатити всі ці замовлення. (список заборгованих подається нижче) 
";
                e('historyList',e('f359'),'table');
                e(null,e('historyList'),'tr').t(`Дата | Сума | `);
                while (item = data.customerHistory.shift())
                {
                    e(null, e('historyList'), 'tr').t("" + item.createDate + " | " + item.totalPrice + " | ");
                }
                e(null,e('f359'),'b').t("
 Надіємося на розуміння!");
            }
            else {
                frmo.initGood();
            }
        },{custId:customerId});
    },
    initGood: function () {
        $(".orderId").text(orderId);
        /********************************************************************** START **************/
        // noinspection CssInvalidPseudoSelector
        if (orderId === '' || orderId === 'new') {
            orderId = '';
            $('.editOrder').hide();
            // $("#statusId")[0].disabled = true;
            // document.getElementById('shippingAddressId').setAttribute('disabled', "true");
            document.getElementById('shippingMethodId').setAttribute('disabled', "true");
            // this.prepareFormData();
            // $("#customerId")[0].style = "box-shadow: 1px 1px 8px 0px green;";
            // $("#orderForm *:is(input:not(#customerId),select:not(#shippingMethodId,#shippingAddressId),textarea) ").hide();
        } else {
            frmo.orderId = orderId;
            $('.create_update').show();
            $('.newOrder').hide();
        }
        /******************************************************* END *******************/
        j.post(['init'], function (data) {
            frmo.data = data;
            frmo.prodContentIds = data.prodContentIds || [];
            frmo.balance = data.customerInfo;
            if (isDefined(data.customerInfo)) {
                if(isDefined(frmo.balance.perelimit) && frmo.balance.perelimit === "da") {
                    $('.page-container')[0].style = "font-size: 25px;";
                    $('.page-container')[0].innerHTML =
                        "Шановний клієнте, у вас ПЕРЕЛІМІТ " + frmo.balance.znachenie + "грн.  
" +
                        "Для продовження роботи в системі, вам необхідно бути в межах ліміту
";
                    return;
                }
/*                if (frmo.balance.perelimit === "da") {
                    $(".heading-elements button").remove();
                    $("div.limit").html('Вы не можете cделать этот заказ из-за перелимита: ' + frmo.balance.znachenie + '');
                    document.getElementById('orderInfo').classList.remove('panel-collapsed');
                    return;
                } */
                else {
                    $("div.limit").html('Дозволена сума замовлення до: ' + parseInt(frmo.balance.znachenie) + 'грн.');
                }
            }
            //Адреса доставка
            if (isDefined(data.orderDetails)) {
                $(".created").text(data.orderDetails.created);
                $(".updated").text(data.orderDetails.updated);
                // var shippingAddress = document.getElementById('shippingAddressId');
                orderSA = data.orderDetails.shippingAddressId || "";
                orderSM = data.orderDetails.shippingMethodId || "";
                /*if (isDefined(data.shippingAddress) && data.shippingAddress.length > 0) {
                    for (var ct in data.shippingAddress) {
                        let sel, l = data.shippingAddress[ct];
                        if (orderSA != "") sel = orderSA;
                        else if (l.default == 1) sel = l.id;
                        shippingAddress[shippingAddress.options.length] = new Option(l.address, l.id, false, (l.id == sel));
                        // shippingAddress[1] = new Option(l.address, l.id, false,(l.id == sel));
                    }
                    // shippingAddress[shippingAddress.options.length] = new Option("+ ДОБАВИТЬ", null, true)
                    // .onclick =
                    // function (){ nav.goTo(355,[frmo.customerId]);} ;
                } else*/
                if (!isDefined(data.shippingAddress)) {
                    $('#shippingAddressId')[0].outerHTML =
                        "";
                }
            }
            //Методы доставка
            var shippings = document.getElementById('shippingMethodId');
            for (var ct in data.shippingMethods) {
                let sel, l = data.shippingMethods[ct];
                if (typeof orderSM != "undefined" && orderSM != "") sel = orderSM;
                else if (l.defaultAddress == 1) sel = panelData.customersList[customerId].defaultShippingMethodId;
                shippings[shippings.options.length] = new Option(l.name, l.id, false, (l.id == sel));
            }
            if (customerId != "") {
                // frmo.customerId = customerId;
                // $("#customerId").val(frmo.customerId);
                frmo.prepareFormData({value: customerId});
            }
            // frmo.buttons();
            /*            if (data.wishlistContent) {
                            message("Список желаний не пустой, обратите внимание!");
                            $(".wishlistEmpty").hide();
                            $("#wishlistTable").show();
                            $("#compile").addClass('btn-warning');
                            for (let s in data.wishlistContent) {
                                let cols = ["productName", "realnoOfStore", "waitCount", "dostupnoForThisCustomer", "v_korziny"];
                                let ld = data.wishlistContent[s];
                                let line = e(ld.id, e('wishlistBody'), 'tr');
                                for (let i in cols) {
                                    let col = cols[i];
                                    let td = e(null, line, 'td', col);
                                    td.innerHTML = ld[col];
                                }
                            }
                        }*/
            /*            $(".editOrder").on("click", function (ev) {
                            console.log(ev);
                            let w = $(ev.target).parents("tr")[0].id;
                            let oldVal = ev.target.value;
                            frmo.oldValues[w][ev.target.className] = oldVal;
                        });*/
        }, {orderId: orderId, customerId: sett.user.customerID});
        frmo.findLine = $('#listBody .findLine').html();
        $('#listBody').empty();
        frmo.contentLine = $('#cartBody .cartLine').html();
        $('#cartBody').empty();
    },
    order: {
        create: function () {
            var crData = ff.toObj('orderForm');
            crData.customerId = sett.user.customerID;
            j.post(['insert', 'order'], function (data) {
                if (data.orderId) {
                    message('Теперь нужно выбрать товары!', 1, "Отлично!");
                    nav.goTo(362, data.orderId);
                } else if (data.status == 'callToLily') nav.goTo(360);
                else message('При создании заказа возникла ошибка. Свяжитесь с администратором.', 0);
            }, crData);
        },
        updateInfo: function () {
            var orData = ff.toObj('orderForm');
            orData.customerId = sett.user.customerID;
            orData.orderId = frmo.orderId;
            j.post(['update', 'order'], function (data) {
                if (data.status) {
                    message('Заказ успешно обновлен!', 1);
                    nav.goTo(361, frmo.orderId);
                } else message('При обновлении заказа возникла ошибка. Свяжитесь с администратором.', 0);
            }, orData);
        },
        aprooved: function () {
            j.post(['update', 'aproovedOrder'], function (data) {
                if (data.status) {
                    message('Заказ №' + frmo.orderId + '  успешно подтверждён!', "s", "Финиш!");
                    nav.goTo(360);
                } else message('При обновлении заказа возникла ошибка. Свяжитесь с администратором.', 0);
            }, {statusId: 2, orderId: frmo.orderId});
        },
        temp: function () {
            j.post(['update', 'tempOrder'], function (data) {
                if (data.status) {
                    message('Заказ №' + frmo.orderId + '  успешно сохранён как черновик!', 1);
                    nav.goTo(328);
                } else message('При обновлении заказа возникла ошибка. Свяжитесь с администратором.', 0);
            }, {statusId: 1, orderId: frmo.orderId});
        },
        toPack: function () {
            if (frmo.data.orderContent.length == 0) {
                alert("Заказ ПУСТОЙ!", 3);
                return false;
            } else if (confirm("Этот заказ уже полностью готовый к упаковке?")) {
                j.post(['update', 'toPack'], function (data) {
                    if (data.status) {
                        message('Заказ №' + frmo.orderId + '  передан на упаковку!', 1);
                        if (data.statusProcedure) {
                            message("Списание с баланса за заказ произошло успешно!", 1);
                            nav.goTo(328);
                            panelDataUpdate();
                        } else message("Ошибка, средства не списаны! Сообщите админу!", 3);
                    } else message('При передаче заказа возникла ошибка. Свяжитесь с администратором.', 0);
                }, {statusId: 4, orderId: frmo.orderId, customerId: frmo.customerId, totalPrice: frmo.totalPrice});
            }
        },
        del: function () {
            if (confirm('Вы действительно хотите удалить заказ?'))
                if (confirm('ВСЕ данные из этого заказа, и накладная в том числе будет удалена без возможности восстановления! Точно желаете продолжить?'))
                    j.post(['delete', 'order'], function (data) {
                        if (data.affected_rows == 1) {
                            message('Заказ успешно удалён!', 1);
                            message('Внимание! если в заказе были товары, то они были возвращенны на склад обратно', 1);
                            nav.goTo(328);
                        } else message('При удалении заказа возникла ошибка. Свяжитесь с администратором.', 0);
                    }, {orderId: frmo.orderId});
        }
        /* ,
         updateProducts: function (recordId, count) {
             j.post(['update', 'cart'], function (data) {
                 if (isDefined(data.prodContentIds)) frmo.prodContentIds = data.prodContentIds;
                 if (!data.status) message('Что-то пошло не так, попробуйте позже', 0);
                 else frmo.updateTotalPrice(data.totalPrice);
                 frmo.totalPrice = data.totalPrice;
                 frmo.checkLimit();
                 if (data.orderContent) frmo.displayResult(data.orderContent, 'cartBody');
             }, {orderId: frmo.orderId, recordId: recordId, count: count,customerId: frmo.customerId});
         },
         addProduct: function (ev) {
             var line = ev.parentNode.parentNode;
             line.disable = true;
             var prId = line.id;
             var prCount = line.children.namedItem('qty').children[0].value;
             j.post(['insert', 'cart'], function (data) {
                 if (isDefined(data.prodContentIds)) frmo.prodContentIds = data.prodContentIds;
                 if (data.status) {
                     $('.orderEmpty').hide();
                     $('#orderTable').show();
                     frmo.displayResult(data.orderContent, 'cartBody');
                     frmo.updateTotalPrice(data.totalPrice);
                     frmo.totalPrice = data.totalPrice;
                     frmo.checkLimit();
                     if (isDefined(data.countOfStock)) {
                         debug.cnsl(data);
                         frmo.checkAsInCart(prId);
                     }
                 } else message("Ошибка при добавлении в корзину", 3);
             }, {orderId: frmo.orderId, customerId: frmo.customerId, productId: prId, count: prCount});
         },
         delProduct: function (ev) {
             var prId = ev.parentNode.parentNode.id;
             j.post(['delete', 'cart'], function (data) {
                 if (isDefined(data.prodContentIds)) frmo.prodContentIds = data.prodContentIds;
                 if (data.status) {
                     frmo.displayResult(data.orderContent, 'cartBody');
                     frmo.updateTotalPrice(data.totalPrice);
                     frmo.search();
                 }
                 frmo.totalPrice = data.totalPrice;
                 frmo.checkLimit();
             }, {orderId: frmo.orderId, recordId: prId});
         }*/
    },
    /* updateTotalPrice: function (price) {
         document.getElementById('orderTotalPrice').innerHTML = price || 0;
     },*/
    /*search: function (i) {
        var sText = $('input[name="sw"]').val();
        frmo.searchQ = {};
        frmo.searchQ = ff.toObj('searchRequest');
        debug.cnsl(frmo.searchQ);
        if (sText.length == 0 || sText.length >= frmo.searchMinLength) {
            j.post(['init', 'start'], function (data) {
                $('.result').show();
                frmo.displayResult(data.searchRezult, 'listBody');
            }, frmo.searchQ);
        } else {
            message('Minimum ' + frmo.searchMinLength + ' chart!', 3);
            $('.result').hide();
        }
    },
    displayResult: function (data, tableId) {
        $('#' + tableId).empty();
        var tbl = e(tableId);
        if (!data) {
            $('.searList').fadeIn(500);
            e(null, e(null, tbl, 'tr', 'findLine'), 'td')
                .a('colspan', '8')
                .a('style', 'text-align: center;')
                .t('Нет товаров для отображения');
        }
        var line = tableId == 'listBody' ? frmo.findLine : frmo.contentLine;
        if (isDefined(data)) {
            $('.searList').fadeIn(500);
            for (var key in data) {
                var keys = data[key]['id'];
                // var tr = e(keys, tbl, 'tr', ''+(tableId == 'listBody' ? 'col-md-3 findLine' : 'cartLine'));
                var tr = e(keys, tbl, 'tr', '' + (tableId == 'listBody' ? 'findLine' : 'cartLine'));
                $(tr).html(line);
                e(keys, tbl, 'tr');
                for (var t in data[key]) {
                    var td = data[key];
                    if ($('td.' + t)) {
                        var cont = td[t];
                        if (t == 'imgId') {
                            var hr = nav.link(213, [keys]);
                            cont = '
 ';
                            // cont = '
 ';
                        } else if (t == 'productName') {
                            // var hr = '/media/detail/' + keys;
                            var hr = nav.link(213, [keys]);
                            cont = '' + cont + '';
                        } else if (t == 'countOfStock') {
                            $('#' + keys + ' td.countOfOrder input').attr('max', cont)
                                .attr('placeholder', "max " + cont);
                            if (cont > 0) $('#' + keys + ' button.addToCart').removeAttr('disabled');
                            // if (cont != null) $('#' + keys + ' button.addToCart').removeAttr('disabled');
                            else $('#' + keys + ' button.addToWishlist').show();
                            cont = '' + cont + '';
                        } else if (t == 'active') {
                            cont =
                                cont == '0' ? 'неактивен'
                                    : 'включен';
                        } else if (t == 'createDate') cont = parseDate.shortDate(cont) + '
 ' + td.createUser;
                        else if (t == 'count')
                            cont = '';
                        $('#' + keys + ' td.' + t).html(cont);
                    }
                }
                // проверка на существование товара в корзине
                if (isDefined(frmo.prodContentIds) && frmo.prodContentIds.indexOf(keys) != -1 && tableId == "listBody") {
                    frmo.checkAsInCart(keys);
                } else if (!isDefined(frmo.prodContentIds) && frmo.prodContentIds.indexOf(keys) != -1 && tableId == "listBody") {
                    frmo.prodContentIds = [];
                    frmo.checkAsInCart(keys);
                }
            }
            $('input.qty').off().on('change', function (ev) {
            }).on('change', function (ev) {
                var line = ev.target.parentNode.parentNode;
                var p = $(line).children('.price').text();
                $(line).children('.total').text(ev.target.value * p);
                if (line.classList.contains('cartLine')) {
                    frmo.order.updateProducts(line.id, ev.target.value);
                }
            });
        }
    },*/
    /*tmstmpDate: function (tmst) {
        var date = new Date(tmst);
        var m = date.getMonth() + 1;
        date = (date.getFullYear() + "-" + m + "-" + date.getDate());
        //debug.cnsl(date);
        date = parseDate.shortDate(date);
        return date;
    },*/
    /*buttons: function () {
        $(".singleCt").off().on('click', function (ev) {
            /!**********************Выключение предыдущей выбранной категории**************************************!/
            var selected = document.querySelector('#catsList input[type="checkbox"]:checked');
            if (selected) {
                selected.checked = false;
                selected.parentNode.classList.remove('selected');
            }
            /!*****************************************************************************************************!/
            ev.currentTarget.children.namedItem(ev.currentTarget.id).checked = !ev.currentTarget.children.namedItem(ev.currentTarget.id).checked;
            ev.currentTarget.classList.toggle('selected');
            var inpVals = document.querySelectorAll('#catsList input[type="checkbox"]:checked + input'), vals = [];
            for (var k = 0; k < inpVals.length; k++) {
                vals[vals.length] = inpVals[k].value
            }
            $('form select#ctIds').val(vals);
            frmo.search();
        });
        if (!isDefined(perValue)) var perValue = '';
        $('input[name="sw"]').off()
            .on('keypress', function (e) {
                if (e.which == 13) {
                    e.preventDefault();
                    e.stopImmediatePropagation();
                }
            })
            .on('keyup', function (e) {
                if (e.which == 13) {
                    e.preventDefault();
                    e.stopImmediatePropagation();
                    frmo.search();
                }
                var sText = $('input[name="sw"]').val();
                if (perValue == '') perValue = sText;
                else if (perValue != sText) {
                    $('.result').fadeOut(500);
                    $('.searList').fadeOut(500);
                    perValue = sText;
                }
            });
        $('.scrollBtn').off().on('click', function (e) {
            var panel = $(e.target.value.toString());
            $("html, body").animate({scrollTop: (panel.offset().top - parseInt($('.navbar-fixed-top').css('height')))}, 1000);
            panel.removeClass('panel-colapsed');
            panel.find('.panel-body').show();
            panel.find('.rotate-180').removeClass('rotate-180');
        });
    },*/
    /*checkAsInCart: function (prId) {
        $("#" + prId + " button ")[0].outerHTML = "Уже в корзине!";
        // $("#"+prId+" .countOfStock")[0].innerHTML = data.countOfStock;
        $("#" + prId + " .countOfStock")[0].innerHTML = "";
        $("#" + prId + " td.countOfOrder")[0].innerHTML = "";
        $("#" + prId + " td.total")[0].innerHTML = "";
    },*/
    prepareFormData: function () {
        // if (el.value == "") form.init([]);
        // clearTimeout(frmo.ttt);
        // frmo.ttt = setTimeout(function () {
        if (isDefined(panelData.customersList[sett.user.customerID]) && isDefined(panelData.customersList[sett.user.customerID].defaultShippingMethodId)) {
            // document.getElementById('shippingMethodId').removeAttribute('disabled');
            // document.getElementById('shippingMethodId').value = frmo.customers[el.value].defaultShippingMethodId;
            frmo.customerId = sett.user.customerID;
            frmo.customerData = panelData.customersList[sett.user.customerID];
            // debug.cnsl(frmo.customerData.addr);
            if (typeof frmo.customerData.addr == "string") frmo.customerData.addr = JSON.parse(frmo.customerData.addr);
            let customer = frmo.customerData;
            // frmo.addr = JSON.parse(frmo.customerData.addr);
            // if (isDefined(panelData.customersList[el.value].shippingAddressId)) {
            if (customer.addr != null) {
                let shippingAddress = document.getElementById('shippingAddressId');
                shippingAddress.innerHTML = '';
                for (var ct in customer.addr) {
                    let sel, l = customer.addr[ct];
                    if (typeof orderSA != "undefined" && orderSA != "") sel = orderSA;
                    else if (l.default == 1) sel = l.id;
                    // shippingAddress[shippingAddress.options.length] = new Option(l.address, l.id, false, (l.id == sel));
                    let Op = new Option(l.address, l.id, false, (l.id == sel));
                    if (l.default) Op.style = "font-weight:bold;";
                    shippingAddress[shippingAddress.options.length] = Op;
                }
                document.getElementById('shippingAddressId').removeAttribute('disabled');
                document.getElementById('shippingMethodId').removeAttribute('disabled');
                document.getElementById('shippingMethodId').value = customer.addr[customer.defaultShippingAddressId].sMId;
                // $(".create.newOrder").focus();
                // debug.cnsl("dddddd");
            } else if (customer.addr === null) {
                if (confirm("Вам нужно создать адрес!")) {
                    nav.goTo(363, [customer.id]);
                }
            }
        }
        // }, 1200       )        ;
    }
    , eventOnchangeSAid: function (val) {
        if (val == "add") {
            nav.goTo(363);
        } else {
            $("#shippingMethodId").val(frmo.customerData.addr[val].sMId);
        }
    }
}
;
        frm[360] = {
    init: function () {
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.orders = data.orders;
            frmo.statuses = data.statuses;
            frmo.orderStatusId = "";
            frmo.customerId = "";
            for (var key in data.statuses) {
                //  == "Удалён" ? "Посмотреть корзину":data.statuses[key]['name']
                var name = data.statuses[key]['name'];
                $('.orderStatusId').append('');
            }
            frmo.viewOrderList();
        }, {orderStatusId: "all"});
    }
    , loadOrder: function (ev) {
        $('#formsTbody,.nothingMsg').empty();
        let fieldsData = {};
        let value = "";
        let orderStatusId = "forWork";
        if (ev.value != "all") {
            value = ev.value;
        }
        if (ev.name == "orderStatusId") {
            orderStatusId = value;
        }
        if (ev.name == "customerId") {
            frmo.customerId = value;
            orderStatusId = (value != "") ? "" : "forWork";
        }
        fieldsData.orderStatusId = orderStatusId;
        fieldsData.customerId = frmo.customerId;
        j.post(['init', 'loadOrders'], function (data) {
            frmo.orders = data.orders;
            frmo.viewOrderList();
        }, fieldsData);
    }
    , viewOrderList: function () {
        for (var key in frmo.orders) {
            var fields = ['id', 'status', 'totalPrice', 'customer'];
            var table = e('formsTbody');
            var line = e(frmo.orders[key]['id'], table, 'tr', "line " + frmo.orders[key]['id']);
            if (frmo.orders[key]['statusId'] == 11) {
                line.css("background-color:#e2baba;")
            }
            if (frmo.orders[key]['statusId'] == 12) {
                line.css("background-color:rgb(153 205 246);")
            }
            let bgC = "";
            for (var k in fields) {
                var i = fields[k];
                var text = frmo.orders[key][i];
                if (i == 'createDate') text = parseDate.shortDate(text);
                if (i == 'status') {
                    bgC = frmo.statuses[frmo.orders[key]["statusId"]]["bgColor"];
                    // if (frmo.orders[key]['workerName'] != null) text = "" + text + " - " + frmo.orders[key]['workerName'] + "";
                    if (frmo.orders[key]['workerName'] != null) text = "" + text + " - " + frmo.orders[key]['workerName'] + "";
                }
                if (i == 'id') {
                    text = '' + text + ' от ' + frmo.orders[key]['cd'] ;
                    if(typeof frmo.orders[key]['ttn'] == "string")
                        text = text +'(Відстежити)';
                }
                e(null, line, 'td', i).css("background-color:" + bgC).innerHTML = text;
            }
            e(null, line, 'td', 'actions').innerHTML = frmo.getActionOrderButtons(frmo.orders[key]);
        }
        $('.line :is(i,button):not(.removeOrder)').on("click", function (ev) {
            debug.cnsl(ev.target);
            let id = $(ev.target).parents('tr')[0].id;
            let bgC = "";
            j.post(['get', 'orderUpdatedInfo'], function (data) {
                let trInfo = data.orderUpdatedInfo;
                if (trInfo.id) {
                    let trs = $("#" + id)[0].cells;
                    for (let i in trs) {
                        let tr = trs[i];
                        let cn = tr.className;
                        if (isDefined(trInfo[cn])) {
                            let text = trInfo[cn];
                            if (cn == 'status') {
                                bgC = frmo.statuses[trInfo["statusId"]]["bgColor"];
                                if (trInfo['workerName'] != null) text = "" + text + " - " + trInfo['workerName'] + "";
                            }
                            if (cn == 'id') {
                                // text = '' + text;
                                text = '' + text + ' от ' + trInfo['cd'];
                            }
                            $(tr)[0].css("background-color:" + bgC).innerHTML = text;
                        } else if (cn == "actions") {
                            $(tr)[0].innerHTML = frmo.getActionOrderButtons(trInfo);
                        }
                    }
                }
            }, {id: id});
        });
    }
    , getActionOrderButtons: function (order) {
        let inH = '';
        switch (parseInt(order["statusId"])) {
            case 1: {
                inH = '' +
                    ' ';
                break;
            }
            /*case 2: {
                inH = '' +
                    ' ';
                break;
            }*/
            /* case 4: { // передан на упаковку
                 inH = '' +
                     '';
                 break;
             }
             case 5: { // упаковка в процессе
                 inH = '' +
                     '';
                 break;
             }*/
            /*case 6: { // упакован
                inH = '' +
                    '';
                break;
            }*/
        }
        if (parseInt(order["totalPrice"]) > 0)
            inH += '' +
                '';
        else inH += '';
        return inH;
    }
    , setToFinish: function (orderId) {
        if (confirm("Вы точно желаете сделать заказ " + orderId + " завершённым?")) {
            j.post(['update', 'setToFinish'], function (data) {
                if (data.status) {
                    message("Успешно перемещён в \"Завершённые\"!", 1);
                    $(".line." + orderId)[0].remove();
                    // frmo.init();
                }
            }, {orderId: orderId});
        }
    }
    , deleteOrder: function (orderId) {
        if (confirm('Вы действительно хотите удалить заказ?'))
            if (confirm('ВСЕ данные из этого заказа, и накладная в том числе будет удалена без возможности восстановления! Точно желаете продолжить?'))
                j.post(['delete', 'order'], function (data) {
                    if (data.affected_rows == 1) {
                        message('Заказ успешно удалён!', 1);
                        message('Внимание! если в заказе были товары, то они были возвращенны на склад обратно', 1);
                        $("#" + orderId + ".line").remove();
                    } else message('При удалении заказа возникла ошибка. Свяжитесь с администратором.', 0);
                }, {orderId: orderId});
    }
    , withdraw: function (orderId) {
        if (confirm("Вы точно желаете отозвать заказ " + orderId + "?")) {
            alert("Для продолжения, разорвите накладную, по которой идёт упаковка, и нажмите 'OK'")
            if (confirm("Вы уже уничтожили распечатанную накладную?")) {
                // message("Эта функция ещё в разработке");
                // return false;
                j.post(['update', 'withdraw'], function (data) {
                    if (data.status && parseInt(data.checkValue) === 1111) {
                        message("Заказ успешно отозван!");
                    }
                }, {orderId: orderId});
            }
        }
    }
    ,
    oninputCustomerId: function (t) {
        clearTimeout(frmo.ttt);
        frmo.ttt = setTimeout(function () {
            if (isDefined(panelData.customersList[t.value]) || t.value == "") {
                frmo.customerId = t.value;
                frmo.loadOrder(t);
            }
        }, 600);
    }
    , goToNewOrder: function () {
        if (frmo.orders === "") {
            // на случай ПОЛНОГО отсутствия заказов в истории клиента
            nav.goTo(359);
        } else {
            // если заказы уже были в истории
            let os = frmo.orders.map(function (elem) {
                if (elem.statusId == 1) return parseInt(elem.id);
            });
            console.log(os);
            if (os.length > 0 && typeof os[0] != "undefined") {
                message("У вас есть незавершённый заказ в черновиках, поэтому перейдём к его редактированию",
                    "w", "Информация!");
                nav.goTo(361, [os[0]]);
            } else {
                nav.goTo(359);
            }
        }
    }
};
        frm[361] = {
    displayOrdering: ['priceRoznica', 'productName', 'count', 'price', 'total'],
    init: function (path) {
        j.post(['init'], function (data) {
            debug.cnsl(data);
            for (var d in data.customer) {
                var par = document.querySelector('#printBody .order-' + d);
                if (par != null) par.innerHTML = data.customer[d];
            }
            for (var d in data.orderDetails) {
                var par = document.querySelector('#printBody .order-' + d);
                tdCont = data.orderDetails[d];
                if (d == 'totalPrice') tdCont = "" + tdCont + ' грн.';
                // debug.cnsl(tdCont);
                if (par != null && tdCont != null) par.innerHTML = tdCont;
            }
            frmo.orderId = data.orderDetails.id
            if (isDefined(data.orderDetails) && data.orderDetails.workerName != null && data.orderDetails.statusId >= 5)
                document.getElementById('printBtn').classList.remove('hidden');
            var list = e("orderContent");
            for (var line in data.orderContent) {
                var tr = e(null, list, "tr");
                for (var i in frmo.displayOrdering) {
                    var key = frmo.displayOrdering[i];
                    var tdCont = data.orderContent[line][key];
                    // if (['price', 'total'].includes(key)) tdCont += ' грн.';
                    // if (['productName'].includes(key)) tdCont += ' грн.'; ? если сюда придём, сообщить зачем было написана строчка
                    e(null, tr, "td", key).innerHTML = tdCont;
                }
            }
            document.title = "Заказ №" + data.orderDetails.id;
            document.getElementById("dolg").innerText = panelData.customersList[data.customer.id].balance + " грн.";
            // document.getElementById("custName").innerText = panelData.customersList[data.customer.id].name;
            if (isDefined(data.wishlistContent) && data.wishlistContent.length > 0) {
                // debug.cnsl(data.wishlistContent)
                frmo.displayWishlist(data.wishlistContent);
                $("#wishList").show();
            }
        }, {orderId: path[0]});
        var p = document.getElementById('orderInfo');
        p.removeEventListener('click', init, false);
        p.className = p.className + ' resizable';
        var resizer = document.createElement('div');
        resizer.className = 'resizer';
        p.appendChild(resizer);
        resizer.addEventListener('mousedown', initDrag, false);
        function initDrag(e) {
            startX = e.clientX;
            startY = e.clientY;
            startWidth = parseInt(document.defaultView.getComputedStyle(p).width, 10);
            startHeight = parseInt(document.defaultView.getComputedStyle(p).height, 10);
            document.documentElement.addEventListener('mousemove', doDrag, false);
            document.documentElement.addEventListener('mouseup', stopDrag, false);
        }
        function doDrag(e) {
            p.style.width = (startWidth + e.clientX - startX) + 'px';
            p.style.height = (startHeight + e.clientY - startY) + 'px';
        }
        function stopDrag(e) {
            document.documentElement.removeEventListener('mousemove', doDrag, false);
            document.documentElement.removeEventListener('mouseup', stopDrag, false);
        }
    },
    displayWishlist: function (wishlist) {
        var listForDisplay = ["productName", "count"];
        var list = e("wishlistContent");
        for (var line in wishlist) {
            var tr = e(null, list, "tr");
            for (var i in listForDisplay) {
                var key = listForDisplay[i];
                var tdCont = wishlist[line][key];
                e(null, tr, "td", key).innerHTML = tdCont;
            }
        }
    }
    , approveOrder: function () {
        j.post(['update', 'approveOrder'], function (data) {
            if (data.status) {
                if (isDefined(data.errorMsg)) {
                    message(data.errorMsg, "e", "Внимание!");
                    return false;
                } else {
                    message('Заказ №' + frmo.orderId + '  успешно подтверждён!', "s", "Финиш!");
                    nav.goTo(360);
                }
            } else message('При обновлении заказа возникла ошибка. Свяжитесь с администратором.', 0);
        }, {orderId: frmo.orderId});
    }
    , temp: function () {
        j.post(['update', 'tempOrder'], function (data) {
            if (data.status) {
                message('Заказ №' + frmo.orderId + '  успешно сохранён как черновик!', 1);
                nav.goTo(360);
            } else message('При обновлении заказа возникла ошибка. Свяжитесь с администратором.', 0);
        }, {statusId: 1, orderId: frmo.orderId});
    }
};
        frm[362] = {
    displayOrdering: ['productName', 'count', 'price', 'total'],
    init: function (path) {
        frmo.orderId = path[0];
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.orderContent = data.orderContent;
            let list = e("orderContent");
            for (let line in data.orderContent) {
                let tr = e(data.orderContent[line]["id"], list, "tr");
                tr.dataset.lineId = line;
                let historyId = data.orderContent[line]['historyId'];
                for (let i in frmo.displayOrdering) {
                    let key = frmo.displayOrdering[i];
                    let tdCont = data.orderContent[line][key];
                    if (key === "count") {
                        // tdCont = '';
                        tdCont = isNaN(parseInt(tdCont)) ? 0 : tdCont;
                        if (isNaN(parseInt(historyId))) {
                            tr.css("color:#000!important;");
                        } else {
                            tr.classList += "addedInOrder";
                            tr.dataset.historyId = historyId;
                        }
                        if (data.orderContent[line].available == 1) {
                            tdCont = '-' +
                                '' + tdCont + '' +
                                '+';
                            if (data.orderContent[line].aCount == 0) {
                                tdCont += ' только предзаказ';
                            }
                        } else tdCont = "Не доступно";
                    }
                    e(null, tr, "td", key).innerHTML = tdCont;
                }
            }
            document.title = "Заказ №" + frmo.orderId;
            $(".order-totalPrice")[0].innerHTML = data.orderDetails.totalPrice;
            if (data.orderDetails.calcBlock == "da") {
                // $(".limitInfo")[0].innerHTML = "Перелимит! (" + data.orderDetails.totalPrice + ")";
                $(".limitInfo")[0].innerHTML = "Перелимит! (" + data.orderDetails.perelimValue + ")";
                $(".toOrderPage")[0].disabled = true;
            } else {
                $(".limitInfo")[0].innerHTML = "";
                $(".toOrderPage").removeAttr("disabled");
            }
            /*
            EVENTS!!!!
             */
            $("#orderInfo").on("focusout", function (ev) {
                // console.log("focusout");
                if (ev.target.innerText === "") ev.target.innerText = 0;
            });
            $("#orderInfo").on("keypress", function (ev) {
                if (ev.keyCode === 13) return false;
                if (isNaN(parseInt(ev.key))) return false;
            });
            /* $("#orderInfo").on("click", function (ev) {
                 console.log("click");
                 console.log(ev);
                 if (ev.target.className === "countValue" && parseInt(ev.target.innerText) === 0) ev.target.innerText = "";
                 let tr = $(ev.target).parents("tr");
                 let productId = tr[0].id;
                 let hi = tr[0].dataset.historyId;
             });*/
            $("#orderInfo").on("keyup click", function (ev) {
                // console.log("keyup");
                if (ev.target.innerText === "") ev.target.innerText = 0;
                if (["plus", "minus", "countValue", "cwi"].indexOf(ev.target.className) < 0) return;
                //
                //     checkLimit: function () {
                //         if (parseInt(frmo.totalPrice) > parseInt(frmo.balance.znachenie)) {
                //             message("Сумма товаров в корзине превышает допустимое значение для этого клиента!", 3);
                //         }
                //     }
                console.count("EVENT FIXER!!! --- " + ev.type);
                if (ev.type === "click") {
                    if (ev.target.className === "countValue" && parseInt(ev.target.innerText) === 0) ev.target.innerText = "";
                }
                // if (ev.type === "click" && ["plus", "minus"].indexOf(ev.target.className) >= 0) {
                console.log("clearTimeout!!!" + frmo.ttt);
                clearTimeout(frmo.ttt);
                // }
                let tr = $(ev.target).parents("tr");
                let productId = tr[0].id;
                let hi = tr[0].dataset.historyId;
                let li = tr[0].dataset.lineId;
                let countValue = parseInt($("tr#" + productId + " .countValue")[0].innerText);
                if (isNaN(parseInt(countValue))) {
                    countValue = 0;
                    if (ev.type === "focusout")
                        $("tr#" + productId + " .countValue")[0].innerText = countValue;
                }
                if (isNaN(parseInt(hi)) && countValue === 0 && !$(ev.target).hasClass("cwi")) {
                    if (ev.type !== "click") return;
                }
                // плюс/минус!!!! --- редактирование самого значения будет отдельно
                if ($(ev.target).hasClass("minus") || $(ev.target).hasClass("plus")) {
                    let eventType = $(ev.target)[0].className;
                    countValue = (eventType == "plus") ? countValue + 1 : countValue - 1;
                    if (countValue < 0) return;
                    if (countValue === 0) {
                        j.post(["delete"], function (data) {
                            console.log(data);
                            if (data.status) {
                                frmo.updateLine(productId, data.lineInfo, {
                                    calcBlock: data.calcBlock,
                                    totalPrice: data.totalPrice
                                });
                            }
                        }, {historyId: hi, orderId: frmo.orderId, productId: productId})
                    } else {
                        if (tr.hasClass('addedInOrder')) {
                            debug.cnsl("Редактируем текущее количество товара в заказе");
                            frmo.editCartItem(li, hi, productId, countValue, 0);
                        } else {
                            debug.cnsl("Добавляем новый товар в заказ");
                            frmo.addedCartItem(productId, countValue, 0);
                        }
                    }
                }
                // редактирование значения
                if ($(ev.target).hasClass("countValue")) {
                    if (ev.type === "keyup" || ev.type === "focusout") {
                        if (countValue === 0) {
                            j.post(["delete"], function (data) {
                                console.log(data);
                                if (data.status) {
                                    frmo.updateLine(productId, data.lineInfo, {
                                        calcBlock: data.calcBlock,
                                        totalPrice: data.totalPrice
                                    });
                                }
                            }, {historyId: hi, orderId: frmo.orderId, productId: productId})
                        } else {
                            if (tr.hasClass('addedInOrder')) {
                                debug.cnsl("Редактируем текущее количество товара в заказе");
                                frmo.editCartItem(li, hi, productId, countValue, 1);
                            } else {
                                debug.cnsl("Добавляем новый товар в заказ");
                                frmo.addedCartItem(productId, countValue, 1200);
                            }
                        }
                    }
                }
                // отмена брони
                if ($(ev.target).hasClass("cwi") && ev.type === "click") {
                    frmo.cancelWishItem(hi, productId);
                }
            });
        }, {orderId: path[0]});
    },
    updateLine: function (productId, data, oData) {
        if (typeof data !== "object") {
            debug.cnsl("data ???");
            console.log(data);
            return;
        }
        let l = $("tr#" + productId)[0];
        l.innerHTML = "";
        if (isDefined(oData)) {
            if (isDefined(oData.totalPrice)) {
                $(".order-totalPrice")[0].innerHTML = oData.totalPrice;
            }
            if (isDefined(oData.calcBlock)) {
                // $(".limitInfo")[0].innerHTML = "Перелимит! (" + oData.totalPrice + ")";
                $(".limitInfo")[0].innerHTML = "Перелимит! (" + oData.perelimValue + ")";
                $(".toOrderPage")[0].disabled = true;
            } else {
                $(".limitInfo")[0].innerHTML = "";
                $(".toOrderPage").removeAttr("disabled");
            }
        }
        for (let i in frmo.displayOrdering) {
            let key = frmo.displayOrdering[i];
            // let tdCont = data[0][key];
            let tdCont = data[key];
            if (key === "count") {
                tdCont = isNaN(parseInt(tdCont)) ? 0 : tdCont;
                if (isNaN(parseInt(data["total"])) && tdCont == 0) {
                    l.css("color:#000!important;");
                    $(l).removeClass("addedInOrder");
                } else {
                    if (!$(l).hasClass('addedInOrder')) l.classList += "addedInOrder";
                    l.dataset.historyId = data.historyId;
                }
                if (data.available == 1) {
                    tdCont = '-' +
                        '' + tdCont + '' +
                        '+';
                    if (data.aCount == 0) {
                        tdCont += ' только предзаказ';
                    }
                } else tdCont = "Не доступно";
            }
            e(null, l, "td", key).innerHTML = tdCont;
        }
    }
    , editCartItem: function (li, hi, productId, countValue, setTO) {
        if (setTO === 0) {
            frmo.editCartRequest(li, hi, productId, countValue);
            return false;
        }
        console.error("SET TIMEOUT FOR --- editCartItem");
        frmo.ttt = setTimeout(function () {
            frmo.editCartRequest(li, hi, productId, countValue);
        }, 1000);
        console.error("SETED " + frmo.ttt + " --- editCartItem");
    },
    editCartRequest: function (li, hi, productId, countValue) {
        $("tr#" + productId + " .countValue")[0].innerText = countValue;
        j.post(['update'], function (data) {
            if (data.status) {
                frmo.updateLine(productId, data.lineInfo, {calcBlock: data.calcBlock, totalPrice: data.totalPrice});
            } else message("Ошибка при редактировании заказа, обратитесь к администрации", "e");
        }, {
            historyId: hi,
            productId: productId,
            customerId: sett.user.customerID,
            count: countValue,
            orderId: frmo.orderId
        });
    }
    , addedCartItem: function (productId, countValue, valTO = 0) {
        console.error("SET TIMEOUT FOR --- addedCartItem");
        frmo.ttt = setTimeout(function () {
            let price = $("tr#" + productId + " .price")[0].innerText;
            j.post(['insert'], function (data) {
                if (data.status) {
                    frmo.updateLine(productId, data.lineInfo, {calcBlock: data.calcBlock, totalPrice: data.totalPrice});
                } else message("Ошибка при добавлении в заказ", 3);
            }, {
                productId: productId,
                customerId: sett.user.customerID,
                count: countValue,
                orderId: frmo.orderId,
                price: price
            });
        }, valTO);
        console.error("SETED " + frmo.ttt + " --- addedCartItem");
    }
    , cancelWishItem: function (hi, productId) {
        j.post(['cwi'], function (data) {
            if (data.status) {
                frmo.updateLine(productId, data.lineInfo);
            } else message("Ошибка при редактировании заказа, обратитесь к администрации", "e");
        }, {
            historyId: hi,
            productId: productId
            , orderId: frmo.orderId
        });
    }
};
        frm[363] = {
    init: function () {
        frmo.customerId = sett.user.customerID;
        j.post(['init'], function (data) {
            // var methodsList = '';
            var methodsList = document.getElementById('shippingMethodId');
            methodsList.innerHTML = "";
            for (var key in data.methods) {
                // methodsList += '';
                // methodsList[methodsList.length] = new Option(data.methods[key]['name'],key,false,(panelData.customersList[frmo.customerId].defaultShippingMethodId==key) );
                methodsList[methodsList.length] = new Option(data.methods[key]['name'], key, (key == "3"));
            }
            // document.getElementById('shippingMethodId').innerHTML = methodsList;
            frmo.display(data.addresses);
        }, {customerId: frmo.customerId});
    },
    display: function (addresses) {
        var body = e('addressesBody');
        body.innerHTML = '';
        for (var tId in addresses) {
            var line = e(tId, body, 'tr');
            var rowData = addresses[tId];
            for (var fieldName in addresses[tId]) {
                if (fieldName === "defaultAddress") break;
                var cont = rowData[fieldName];
                if (fieldName == 'count') cont = '' + cont + ''
                e(null, line, 'td', fieldName).innerHTML = cont;
            }
            e(null, line, 'td').t('' +
                (parseInt(rowData["defaultAddress"]) !== 1 ? '' : "")
            );
        }
    },
    pushTransaction: function () {
        let address = $("#address").val();
        address = address.replace(/[^А-Яа-яёЁЇїІіЄєҐґ0-9a-zA-Z.,№-]+/g, ' ').replace(/[\n\r\s\t]+/g, ' ');
        $("#address").val(address);
        if (address !== "") {
            j.post(['insert'], function (data) {
                debug.cnsl(data);
                if (data.status) {
                    message("Перейдите в историю заказов, и там сможете выбрать заказ для дальнейшего оформления!", "s", "Успешно!");
                    panelDataUpdate(function () {
                        frmo.init(frmo.customerId);
                    });
                    frmo.init(frmo.customerId);
                } else {
                    message("Ошибка при записи...", 3)
                }
            }, {
                address: address,
                customerId: frmo.customerId,
                shippingMethodId: $("#shippingMethodId").val()
            });
        } else message("Адрес не должен быть пустой!", 3);
        return false;
    }
    ,
    delTrans: function (ev) {
        if (confirm('Вы действительно хотите удалить транзакцию?')) {
            j.post(['delete'], function (data) {
                if (data.status) {
                    message('Адрес успешно удален', 1);
                    frmo.init(frmo.customerId);
                } else message('Ошибка: адрес не может быть удален', 0);
            }, {
                prodTransId: ev,
                customerId: frmo.customerId
            });
        }
    }
    ,
    setAsDefAddress: function (ev) {
        if (confirm('Вы действительно желаете сделать этот адрес основным?')) {
            j.post(['update'], function (data) {
                if (data.status) {
                    message('Успешно!', 1);
                    frmo.init();
                } else message('Неизвестная ошибка', 0);
            }, {
                prodTransId: ev
            });
        }
    }
};
        frm[364] = {
    init: function () {
        j.post(['init'], function (data) {
            debug.cnsl(data);
            var dataToShow = data.searchRezult;
            var line, ctid;
            for (var key in dataToShow) {
                var fields = new Array('productName', 'priceRoznica');
                var table = e('listBody');
                line = e(null, table, 'tr');
                if (ctid != dataToShow[key]['ctid']) {
                    line.style = "border-top: 2px #000 solid;";
                }
                ctid = dataToShow[key]['ctid'];
                for (var k in fields) {
                    var i = fields[k];
                    var text = dataToShow[key][i];
                    var bgC = "inherit";
                    if (i == 'price' || i == 'priceRoznica')
                        text = "" + parseInt(text) + "";
                    // if (i == 'countOfStock' && parseInt(text) < 0) text = "" + text + "";
                    // if (i == 'createDate') text = parseDate.shortDate(text);
                    /*if (i == 'status') {
                        bgC = frmo.statuses[dataToShow[key]["statusId"]]["bgColor"];
                        if (dataToShow[key]['workerName'] != null) text = text + " - " + dataToShow[key]['workerName'] + "";
                    }*/
                    e(null, line, 'td', i).css("background-color:" + bgC).innerHTML = text;
                }
            }
            // текущая дата
            //let date = new Date();
            //console.log(date.getUTCMonth());
           // console.log(date);
           // $(".hhh")[0].innerHTML += date.getDate() +"."+ date.getUTCMonth() +"."+ date.getFullYear();
            
            $(".hhh")[0].innerHTML +=data.date;
            $(".contactInfo")[0].innerHTML += "+"+panelData.customersList[sett.user.customerID].tel;
        }, {});
    }
};
        frm[366] = {
    init: function () {
        j.post(['init'], function (data) {
            debug.cnsl(data);
            var dataToShow = data.searchRezult;
            var line,ctid;
            
            for (var key in dataToShow) {
                var fields = new Array('productName', 'countOfStock','note');
                var table = e('listBody');
                line = e(null, table, 'tr');
                if (ctid != dataToShow[key]['ctid']) {
                    line.style = "border-top: 2px #000 solid;";
                }
                ctid = dataToShow[key]['ctid'];
                for (var k in fields) {
                    var i = fields[k];
                    var text = dataToShow[key][i];
                    var bgC = "inherit";
                    if (i == 'countOfStock' && parseInt(text)<0 ) text = ""+text+"";
                    if (i == 'createDate') text = parseDate.shortDate(text);
                    if (i == 'status') {
                        bgC = frmo.statuses[dataToShow[key]["statusId"]]["bgColor"];
                        if (dataToShow[key]['workerName'] != null) text = text + " - " + dataToShow[key]['workerName'] + "";
                    }
                    e(null, line, 'td', i).css("background-color:" + bgC).innerHTML = text;
                }
            }
        }, {});
    }
};
        frm[368] = {
    /*
    сделать так чтоб можно было сделать возврат полностью заказа, а также его части
     */
    displayOrdering: ['productName', 'count', 'price', 'total'],
    init: function (path) {
        if (isDefined(path[0])) {
            frmo.refId = path[0];
        }
        //клиенты
        var optList = '';
        for (var ct in panelData.customersList) {
            optList += '';
        }
        document.getElementById('customersList').innerHTML = optList;
        $("#oNum").on("click", function () {
            $("#oid").show();
            $("#orderContent").empty();
        });
        $("#hand").on("click", function () {
            $("#oid").hide();
        });
    },
    updateLine: function (productId, data, oData) {
        if (typeof data !== "object") {
            debug.cnsl("data ???");
            console.log(data);
            return;
        }
        let l = $("tr#" + productId)[0];
        l.innerHTML = "";
        if (isDefined(oData)) {
            if (isDefined(oData.totalPrice)) {
                $(".order-totalPrice")[0].innerHTML = oData.totalPrice;
                $("[name='totalPrice']").val(oData.totalPrice);
            }
            if (isDefined(oData.calcBlock)) {
                $(".limitInfo")[0].innerHTML = "Перелимит! (" + oData.totalPrice + ")";
                $(".toOrderPage")[0].disabled = true;
            } else {
                $(".limitInfo")[0].innerHTML = "";
                $(".toOrderPage").removeAttr("disabled");
            }
        }
        for (let i in frmo.displayOrdering) {
            let key = frmo.displayOrdering[i];
            // let tdCont = data[0][key];
            let tdCont = data[key];
            if (key === "count") {
                tdCont = isNaN(parseInt(tdCont)) ? 0 : tdCont;
                if (isNaN(parseInt(data["total"])) && tdCont == 0) {
                    l.css("color:#000!important;");
                    $(l).removeClass("addedInOrder");
                } else {
                    if (!$(l).hasClass('addedInOrder')) l.classList += "addedInOrder";
                    l.dataset.historyId = data.historyId;
                }
                if (data.available == 1) {
                    tdCont = '-' +
                        '' + tdCont + '' +
                        '+';
                    if (data.aCount == 0) {
                        tdCont += ' только предзаказ';
                    }
                } else tdCont = "Не доступно";
            }
            e(null, l, "td", key).innerHTML = tdCont;
        }
    }
    , editCartItem: function (li, hi, productId, countValue, setTO) {
    },
    editCartRequest: function (li, hi, productId, countValue) {
        $("tr#" + productId + " .countValue")[0].innerText = countValue;
        j.post(['update'], function (data) {
            if (data.status) {
                frmo.updateLine(productId, data.lineInfo, {calcBlock: data.calcBlock, totalPrice: data.totalPrice});
            } else message("Ошибка при редактировании заказа, обратитесь к администрации", "e");
        }, {
            historyId: hi,
            productId: productId,
            customerId: sett.user.customerID,
            count: countValue,
            orderId: frmo.orderId
        });
    }
    , addedCartItem: function (productId, countValue) {
        console.error("SET TIMEOUT FOR --- addedCartItem");
        frmo.ttt = setTimeout(function () {
            let price = $("tr#" + productId + " .price")[0].innerText;
            j.post(['insert'], function (data) {
                if (data.status) {
                    frmo.updateLine(productId, data.lineInfo, {calcBlock: data.calcBlock, totalPrice: data.totalPrice});
                } else message("Ошибка при добавлении в заказ", 3);
            }, {
                productId: productId,
                customerId: sett.user.customerID,
                count: countValue,
                orderId: frmo.orderId,
                price: price
            });
        }, 1600);
        console.error("SETED " + frmo.ttt + " --- addedCartItem");
    }
    , cancelWishItem: function (hi, productId) {
        j.post(['cwi'], function (data) {
            if (data.status) {
                frmo.updateLine(productId, data.lineInfo);
            } else message("Ошибка при редактировании заказа, обратитесь к администрации", "e");
        }, {
            historyId: hi,
            productId: productId
            , orderId: frmo.orderId
        });
    }
    , getOrderList: function (el) {
        debug.cnsl(el);
        j.post(["getOrders"], function (data) {
            // заказы
            var optList = '';
            for (var ct in data.orders) {
                optList += '';
                // optList += '';
            }
            document.getElementById('ordersList').innerHTML = optList;
        }, {customerId: el.value});
        $("#orderId")[0].removeAttribute("disabled")
    }
    , getOrderContent: function (el) {
        debug.cnsl(el);
        let orderId = "";
        if (isDefined(el)) {
            orderId = el.value;
        }
        $("#orderContent").empty();
        j.post(["getOrderContent"], function (data) {
            debug.cnsl(data);
            frmo.orderContent = data.orderContent;
            let list = e("orderContent");
            for (let line in data.orderContent) {
                let tr = e(data.orderContent[line]["id"], list, "tr");
                tr.dataset.lineId = line;
                let historyId = data.orderContent[line]['historyId'];
                for (let i in frmo.displayOrdering) {
                    let key = frmo.displayOrdering[i];
                    let tdCont = data.orderContent[line][key];
                    if (key === "count") {
                        // tdCont = '';
                        tdCont = isNaN(parseInt(tdCont)) ? 0 : tdCont;
                        if (isNaN(parseInt(historyId))) {
                            tr.css("color:#000!important;");
                        } else {
                            tr.classList += "addedInOrder";
                            tr.dataset.historyId = historyId;
                        }
                        // if (data.orderContent[line].available == 1) {
                        tdCont =
                            // '-' +
                            '' + tdCont + ''
                        // +'+';
                        // if (data.orderContent[line].aCount == 0) {
                        //     tdCont += ' только предзаказ';
                        // }
                        // } else tdCont = "Не доступно";
                    }
                    e(null, tr, "td", key).innerHTML = tdCont;
                }
            }
            frmo.editRefundList();
            frmo.calc();
        }, {orderId: orderId});
    }
    , editRefundList: function () {
        $("#orderInfo").on("click focusout", function (ev) {
            if (["countValue"].indexOf(ev.target.className) < 0) return;
            let tr = $(ev.target).parents("tr");
            let productId = tr[0].id;
            let countValue = parseInt($("tr#" + productId + " .countValue")[0].innerText);
            if (isNaN(parseInt(countValue))) {
                countValue = 0;
                if (ev.type === "focusout")
                    $("tr#" + productId + " .countValue")[0].innerText = countValue;
            }
            // редактирование значения
            if ($(ev.target).hasClass("countValue")) {
                if (ev.type === "click") {
                    if (countValue === 0) {
                        $("tr#" + productId + " .countValue")[0].innerText = "";
                    }
                }
                if (ev.type === "keyup" || ev.type === "focusout") {
                    if (countValue === 0) {
                        // очистить строчку
                        tr.removeClass("addedInOrder");
                        $(tr).children(".total").text("");
                    } else {
                        if (tr.hasClass('addedInOrder')) {
                            debug.cnsl("пересчитать");
                        } else {
                            debug.cnsl("Пометить строчку, и посчитать");
                            tr.addClass("addedInOrder");
                        }
                    }
                    frmo.calc(tr);
                }
            }
        });
    }
    , calc: function (tr) {
        if (isDefined(tr)) {
            let countValue = $(tr).children(".count")[0].innerText;
            let price = $(tr).children(".price")[0].innerText;
            if ((countValue * price) > 0) $(tr).children(".total").text(countValue * price);
            else $(tr).children(".total").text("");
        }
        let ta = $(".total").map(function (i, el) {
            if (el.innerText != "") return parseInt(el.innerText);
        });
        let vsego = Object.values(ta).reduce(function (a, b) {
            if (!isNaN(parseInt(b))) return (a + b); else return a;
        });
        $(".order-totalPrice").text(vsego);
        $("[name='totalPrice']").val(vsego);
    }
    , init2: function () {
        form.init();
    }
    , pushToDB: function () {
        frmo.scanPage().then((result) => {
            if (result) {
                message("Данные готовы, передаём на обработку, ожидайте", "s");
                j.post(["refund"], function (data) {
                    if (isDefined(data.rMess)){
                        message(data.rMess,"s");
                        frmo.init();
                    }
                    console.log(data);
                }, JSON.parse(frmo.rd));
            }
            else{
                message("Данные НЕ готовы", "e");
            }
        });
    }
    , scanPage: ()=> {
        return new Promise(async function (resolve, reject) {
            let pl = {};
            $("tr").map(function (i, el) {
                if ($(el).hasClass("addedInOrder")) {
                    let id = el.id;
                    let count = $(el).children(".count").text();
                    let price = $(el).children(".price").text();
                    pl[id] = {count: count, productId: id, price: price};
                }
            });
            if (Object.keys(pl).length === 0) {
                message("Нужно выбрать хотя-бы что-то.");
                resolve(false);
            }
            let fa = {};
            new FormData(document.forms.main).forEach(function (val, key) {
                if (!isDefined(fa[key])) fa[key] = val;
                else fa[key] += "," + val;
            });
            ["customerId", "sklad", "finance"].forEach(function (name) {
                if (!fa.hasOwnProperty(name) || fa[name] === "") {
                    // message("не все обязательные поля заполненны!", "w", "Внимание!");
                    $("[name='" + name + "']").parents("div")[0].style = "border: 1px solid #f00;"
                    resolve(false);
                } else {
                    $("[name='" + name + "']").parents("div")[0].style = "";
                }
            });
            console.log(pl)
            frmo.rd = JSON.stringify({fa: fa, pl: pl});
            resolve(true);
        });
    }
};
        frm[369] = {
    init: function () {
        j.post(['init'], function (data) {
            debug.cnsl(data);
            let dataToShow = data.searchRezult;
            let line, sku = "", stan, ls;
            let pn, cos, span;
            let table = e('listBody');
            let head = e(null, table, 'thead');
            let hLine = e(null, head, 'tr');
            let fields = { // Имена колонок
                'productName': 'Имя товара',
                'countOfStock': 'Реально на складе',
                'name': 'Оптовый',
                'waitCount': 'Ожидает'
            };
            for (let k in fields) { // Заголовок таблицы
                debug.cnsl(k);
                let text = fields[k];
                let bgC = "inherit"
                e(k, hLine, 'th',k).css("background-color:" + bgC).innerHTML = text;
            }
            let body = e(null, table, 'tbody');
            for (let key in dataToShow) { // Тело таблицы
                line = e(null, body, 'tr');
                ls = "";
                if (sku !== dataToShow[key]['sku']) {
                    // реакция на то что продукт ИЗМЕНИЛСЯ!!!
                    stan = parseInt(dataToShow[key]['waitCount']) + parseInt(dataToShow[key]['countOfStock']);
                    ls = "border-top: 1px #000 solid;";
                    $(pn).attr("rowspan", span);
                    $(cos).attr("rowspan", span);
                } else {
                    // реакция на то что продукт тот самый
                    stan = parseInt(dataToShow[key]['waitCount']) + stan;
                    span++;
                }
                debug.cnsl(stan);
                if (stan >= 0) {
                    ls = ls + " background-color: #43a04710;";
                } else {
                    ls = ls + " background-color: #ff112210;";
                }
                line.style = ls;
                for (let i in fields) {
                    // let i = fields[k];
                    let text = dataToShow[key][i];
                    let bgC = "inherit";
                    if (i === 'countOfStock' && parseInt(text) < 0) text = "" + text + "";
                    if (i === 'createDate') text = parseDate.shortDate(text);
                    if (i === 'status') {
                        bgC = frmo.statuses[dataToShow[key]["statusId"]]["bgColor"];
                        if (dataToShow[key]['workerName'] != null) text = text + " - " + dataToShow[key]['workerName'] + "";
                    }
                    if (sku !== dataToShow[key]['sku']) { // реакция на то что продукт ИЗМЕНИЛСЯ!!!
                        if (i === 'productName') {
                            let td = e(null, line, 'td', i);
                            pn = td;
                            td.css("background-color:" + bgC).innerHTML = text;
                        }
                        if (i === 'countOfStock') {
                            let td = e(null, line, 'td', i);
                            cos = td;
                            td.css("background-color:" + bgC).innerHTML = text;
                        }
                        span = 1;
                    }
                    if (i !== 'countOfStock' && i !== 'productName') {
                        let td = e(null, line, 'td', i);
                        td.css("background-color:" + bgC).innerHTML = text;
                    }
                }
                sku = dataToShow[key]['sku']; // Применение текущего продукта
            }
            $(pn).attr("rowspan", span);
            $(cos).attr("rowspan", span);
        }, {});
    }
};
        frm[370] = { // API -- 391f396644edf05d72edf3b73dab2959
    init: function (path) {
        // alert("Сделать по весу общему + на форме ожидается номер заказа, и потом по нему берётся кол-во мест, вес, инфо о клиенте")
        $("input:not(#formid),select").addClass("form-control");
        j.post(['init'], function () {
            np.r('getPayerType', function (resp) {
                frmo.dataToSelect('PayerType', resp.data, "Sender");
            });
            np.r('getPaymentMethod', function (resp) {
                frmo.dataToSelect('PaymentMethod', resp.data, "Cash");
            });
            np.r('getCargoType', function (resp) {
                frmo.dataToSelect('CargoType', resp.data, "Parcel");
            });
            np.r('getServiceType', function (resp) {
                frmo.dataToSelect('ServiceType', resp.data, "WarehouseWarehouse");
            });
            // document.getElementById('DateTime').valueAsDate = parseDate.npDate(false,"/");
            document.getElementById('DateTime').value = parseDate.dateInputField();
            /*******************************************************************************/
            console.log(path);
            if (path.length > 0) {
                frmo.orderId = path[0];
                j.post(["get", "ttnInfo"], function (data) {
                    console.log(data);
                    // return false;
                    let customerData = data.customerInfo;
                    let orderData = data.orderInfo;
                    console.log("xdx"+orderData.ttn);
                    console.log(orderData.ttn);
                    if (orderData.ttn != null) {
                        message("Для этого заказа ТТН уже была создана!", "w","Внимание!");
                        nav.goTo(352);
                    }
                    $("#RecipientName")[0].value = customerData.name;
                    $("#RecipientsPhone")[0].value = customerData.tel;
                    $("#RecipientCityName")[0].value = orderData.cityName;
                    $("#RecipientAddressName")[0].value = orderData.addressName;
                    $("#InfoRegClientBarcodes")[0].value = orderData.id;
                    $("#SeatsAmount")[0].value = orderData.seatsAmount;
                    $("#Weight")[0].value = orderData.totalWeight;
                }, {orderId: frmo.orderId});
            }
        });
    },
    dataToSelect: function (selectElementId, data, selectAsDef) {
        $('#' + selectElementId).empty();
        if (!isDefined(selectAsDef)) $('#' + selectElementId).append('');
        for (var key in data) {
            var Ref = data[key]['Ref'];
            var name = data[key]['Description'];
            var ruName = isDefined(data[key]['DescriptionRu']) ? " (рос. " + data[key]['DescriptionRu'] + ")" : "";
            $('#' + selectElementId).append('');
        }
    },
    cityToSelect: function (selectElementId, data) {
        $('#' + selectElementId).empty();
        for (var key in data) {
            var AreaDescription = data[key]['AreaDescription'];
            var Ref = data[key]['Ref'];
            // var name = data[key]['SettlementTypeDescription']+" "+data[key]['Description'].split(" ")[0];
            var name = data[key]['Description'];
            var extName = data[key]['SettlementTypeDescription'] + " " + name;
            var ruName = isDefined(data[key]['DescriptionRu']) ? " (рос. " + data[key]['DescriptionRu'] + ")" : "";
            // $('#' + selectElementId).append('');
            $('#' + selectElementId).append('');
        }
    },
    autoCityComplete: function (el) {
        let cityName = el.value.trim();
        let idField = el.id;
        let elemIdForPushRes = el.list.id;
        console.log(cityName);
        if (cityName.length >= 3) {
            npParams.getCities.methodProperties.FindByString = cityName;
            np.r('getCities', function (resp) {
                if (resp.success) {
                    let rd = resp.data;
                    if (cityName !== rd[0].Description) {
                        frmo.cityToSelect(elemIdForPushRes, resp.data);
                    }
                    if (rd.length === 1) {
                        if (cityName !== rd[0].Description) {// вывод в лист результатов
                            frmo.cityToSelect(elemIdForPushRes, resp.data);
                        }
                    } else if (rd.length > 1 && elemIdForPushRes) { // вывод в лист результатов
                        frmo.cityToSelect(elemIdForPushRes, resp.data);
                    }
                } else debug.cnsl(resp);
            });
        }
    },
    whToSelect: function (selectElementId, data) {
        console.log(data);
        $('#' + selectElementId).empty();
        for (let key in data) {
            let Number = data[key]['Number'];
            let name = data[key]['Description'];
            $('#' + selectElementId).append('');
        }
    },
    autoWhComplete: function (el, Ref = false) {
        console.log('autoWhComplete');
        let cityName = $("#" + el.dataset.cityName).val().trim();
        let idField = el.id;
        let elemIdForPushRes = el.list.id;
        console.log(cityName);
        npParams.getWarehouses.methodProperties.CityName = cityName;
        np.r('getWarehouses', function (resp) {
            if (resp.success) {
                let rd = resp.data;
                // $("[name='" + idField + "']")[0].value = "";
                if (Ref) {// только для отправителя
                    console.log("SET REF!");
                    $("#" + elemIdForPushRes)[0].innerHTML = "";
                    $("[name='" + idField + "']")[0].value = rd[0].Ref;
                } else if (elemIdForPushRes) {
                    frmo.whToSelect(elemIdForPushRes, resp.data);
                }
            } else debug.cnsl(resp);
        });
    },
    createTTN: function (flag = true) {
        let formData = ff.toObj("npSID");
        console.log('createTTN');
        console.log(formData);
        let fa = {};
        new FormData(document.forms.npSID).forEach(function (val, key) {
            if (!isDefined(fa[key])) fa[key] = val;
            else fa[key] += "," + val;
        });
        fa.DateTime = parseDate.npDate(fa.DateTime);
        npParams.saveInternetDocument.methodProperties = fa;
        console.log(npParams.saveInternetDocument);
        np.r('saveInternetDocument', function (resp) {
            if (resp.success) {
                message("ТТН создана успешно!", "s", "Успех!");
                debug.cnsl(resp);
                j.post(["setTTN"],function (data){
                    if (data.status){
                        nav.goTo(352);
                    }
                    else {
                        message("Error");
                    }
                },{ttn: resp.data[0].IntDocNumber, oderId: frmo.orderId})
            } else {
                message("Передать информацию разработчику!", "e", "Ошибка при создании!");
                debug.cnsl(resp);
            }
        });
    }
};
        frm[372] = {
    orderList: ['data', 'totalPrice'],
    init: function (path) {
/*        if (isDefined(panelData.customersList[path])) {
            frmo.customerId = path;
            $("#customerId").val(frmo.customerId);
            frmo.filterTrans();
        }
        j.post(['init'], function (data) {
            debug.cnsl(data);
            //клиенты
           var optList = '';
            for (var ct in data.customers) {
                optList += '';
            }
            document.getElementById('customersList').innerHTML = optList;
            //транзакции
            var translist = '';
            for (var ct in data.transType) {
                translist += '';
            }
            document.getElementById('transType').innerHTML += translist;
            if (!isDefined(panelData.customersList[path])) frmo.display(data.history);
            $("#customerId")[0].style = "box-shadow: 1px 1px 8px 0px green;";
            $("#customerId")[0].focus();
        }, {});*/
    },
    display: function (data) {
        var body = e('transBody');
        body.innerHTML = '';
        var totalCost = 0;
        for (var t in data) {
            var line = e(t, body, 'tr');
            totalCost += parseFloat(data[t]['totalPrice']);
            for (var i in frmo.orderList) {
                var f = frmo.orderList[i];
                var cont = data[t][f];
/*                if (f == 'transType') {
                    var znak = "";
                    switch (data[t]['transTypeId']) {
                        case '0': {
                            znak = 'icon-droplet';
                            break;
                        }
                        case '1': {
                            znak = 'icon-arrow-left7 text-danger';
                            break;
                        }
                        default: {
                            znak = 'icon-arrow-right7 text-success';
                            break;
                        }
                    }
                    cont = ' ' + cont +
                        (data[t]['transTypeId'] == 1 || data[t]['transTypeId'] == 3 ? ' #' + data[t]['orderId'] : '') + '
' + (data[t]['paymentMethod'] ? '(' + data[t]['paymentMethod'] + ')' : '') + '';
                } else*/
                    if (f == 'amount') cont = '' + cont + ''
                e(null, line, 'td', f).innerHTML = cont;
            }
            // if (data[t]['transTypeId'] != 1 || (data[t]['transTypeId'] == 1 && data[t]['orderId'] == null))
            // if (data[t]['orderId'] == null)
            //     e(null, line, 'td').t('');
            // else e(null, line, 'td');
        }
        /*if (document.getElementById('customerId').value != '') {
            document.getElementById('totalAmount').innerHTML = " *************  Общий баланс клиента: " + totalCost + "";
            document.getElementById('totalAmount').classList.remove('hidden');
        } else document.getElementById('totalAmount').classList.add('hidden');*/
        document.getElementById('totalAmount').innerHTML = totalCost;
    },
    filterTrans: function () {
        var fd = ff.toObj('searchRequest');
        j.post(['filter'], function (data) {
            frmo.display(data.history);
        }, fd)
    },
    delTrans: function (ev) {
        if (confirm('Вы действительно хотите удалить транзакцию?')) {
            j.post(['delete'], function (data) {
                if (data.status) {
                    message('Транзакция успешно удалена', 1);
                    frmo.init();
                } else message('Ошибка: транзакция не может быть удалена', 0);
            }, {transId: ev});
        }
    }
    , oninputCustomerId: function (t) {
        clearTimeout(frmo.ttt);
        frmo.ttt = setTimeout(function () {
            if (isDefined(panelData.customersList[t.value]) || t.value == "") {
                frmo.customerId = t.value;
                $('#orderInfo .panel-title').prepend(panelData.customersList[t.value].name);
                frmo.filterTrans();
            }
        }, 300);
    }
};
        frm[373] = {
    orderList: ['oId', 'zero'],
    init: function (path) {
        if (isDefined(panelData.customersList[path])) {
            frmo.customerId = path;
            $("#customerId").val(frmo.customerId);
            frmo.filterTrans();
        }
        j.post(['init'], function (data) {
            debug.cnsl(data);
            //клиенты
            var optList = '';
            for (var ct in data.customers) {
                optList += '';
            }
            document.getElementById('customersList').innerHTML = optList;
            //транзакции
            /*var translist = '';
            for (var ct in data.transType) {
                translist += '';
            }
            document.getElementById('transType').innerHTML += translist;*/
            frmo.totalCost = data.total;
            if (!isDefined(panelData.customersList[path])) frmo.display(data.history);
            $("#customerId")[0].style = "box-shadow: 1px 1px 8px 0px green;";
            $("#customerId")[0].focus();
        }, {});
    },
    display: function (data) {
        var body = e('transBody');
        body.innerHTML = '';
        for (var t in data) {
            var line = e(t, body, 'tr');
            //totalCost += parseFloat(data[t]['amount']);
            for (var i in frmo.orderList) {
                var f = frmo.orderList[i];
                var cont = data[t][f];
                if (f == 'transType') {
                    var znak = "";
                    switch (data[t]['transTypeId']) {
                        case '0': {
                            znak = 'icon-droplet';
                            break;
                        }
                        case '1': {
                            znak = 'icon-arrow-left7 text-danger';
                            break;
                        }
                        default: {
                            znak = 'icon-arrow-right7 text-success';
                            break;
                        }
                    }
                    cont = ' ' + cont +
                        (data[t]['transTypeId'] == 1 || data[t]['transTypeId'] == 3 ? ' #' + data[t]['orderId'] : '') + '
' + (data[t]['paymentMethod'] ? '(' + data[t]['paymentMethod'] + ')' : '') + '';
                } else if (f == 'amount') cont = '' + cont + ''
                e(null, line, 'td', f).innerHTML = cont;
            }
            // if (data[t]['transTypeId'] != 1 || (data[t]['transTypeId'] == 1 && data[t]['orderId'] == null))
            /*if (data[t]['orderId'] == null)
                e(null, line, 'td').t('');
            else e(null, line, 'td');*/
        }
        if (document.getElementById('customerId').value != '') {
            document.getElementById('totalAmount').innerHTML = " *************  Общий баланс клиента: " + frmo.totalCost + "";
            document.getElementById('totalAmount').classList.remove('hidden');
        } else document.getElementById('totalAmount').classList.add('hidden');
    },
    filterTrans: function () {
        var fd = ff.toObj('searchRequest');
        j.post(['filter'], function (data) {
            frmo.totalCost = data.total;
            frmo.display(data.history);
        }, fd)
    },
    delTrans: function (ev) {
        if (confirm('Вы действительно хотите удалить транзакцию?')) {
            j.post(['delete'], function (data) {
                if (data.status) {
                    message('Транзакция успешно удалена', 1);
                    frmo.init();
                } else message('Ошибка: транзакция не может быть удалена', 0);
            }, {transId: ev});
        }
    }
    , oninputCustomerId: function (t) {
        clearTimeout(frmo.ttt);
        frmo.ttt = setTimeout(function () {
            if (isDefined(panelData.customersList[t.value]) || t.value == "") {
                frmo.customerId = t.value;
                $('#orderInfo .panel-title').prepend(panelData.customersList[t.value].name);
                frmo.filterTrans();
            }
        }, 300);
    }
};
        frm[374] = {
    orderList: ['oId', 'zero'],
    init: function (path) {
        if (isDefined(panelData.customersList[path])) {
            frmo.customerId = path;
            $("#customerId").val(frmo.customerId);
            frmo.filterTrans();
        }
        j.post(['init'], function (data) {
            debug.cnsl(data);
            //клиенты
            var optList = '';
            for (var ct in data.customers) {
                optList += '';
            }
            document.getElementById('customersList').innerHTML = optList;
            //транзакции
            /*var translist = '';
            for (var ct in data.transType) {
                translist += '';
            }
            document.getElementById('transType').innerHTML += translist;*/
            frmo.totalCost = data.total;
            if (!isDefined(panelData.customersList[path])) frmo.display(data.history);
            $("#customerId")[0].style = "box-shadow: 1px 1px 8px 0px green;";
            $("#customerId")[0].focus();
        }, {});
    },
    display: function (data) {
        var body = e('transBody');
        body.innerHTML = '';
        for (var t in data) {
            var line = e(t, body, 'tr');
            //totalCost += parseFloat(data[t]['amount']);
            for (var i in frmo.orderList) {
                var f = frmo.orderList[i];
                var cont = data[t][f];
                if (f == 'transType') {
                    var znak = "";
                    switch (data[t]['transTypeId']) {
                        case '0': {
                            znak = 'icon-droplet';
                            break;
                        }
                        case '1': {
                            znak = 'icon-arrow-left7 text-danger';
                            break;
                        }
                        default: {
                            znak = 'icon-arrow-right7 text-success';
                            break;
                        }
                    }
                    cont = ' ' + cont +
                        (data[t]['transTypeId'] == 1 || data[t]['transTypeId'] == 3 ? ' #' + data[t]['orderId'] : '') + '
' + (data[t]['paymentMethod'] ? '(' + data[t]['paymentMethod'] + ')' : '') + '';
                } else if (f == 'amount') cont = '' + cont + ''
                e(null, line, 'td', f).innerHTML = cont;
            }
            // if (data[t]['transTypeId'] != 1 || (data[t]['transTypeId'] == 1 && data[t]['orderId'] == null))
            /*if (data[t]['orderId'] == null)
                e(null, line, 'td').t('');
            else e(null, line, 'td');*/
        }
        if (document.getElementById('customerId').value != '') {
            document.getElementById('totalAmount').innerHTML = " *************  Общий баланс клиента: " + frmo.totalCost + "";
            document.getElementById('totalAmount').classList.remove('hidden');
        } else document.getElementById('totalAmount').classList.add('hidden');
    },
    filterTrans: function () {
        var fd = ff.toObj('searchRequest');
        j.post(['filter'], function (data) {
            frmo.totalCost = data.total;
            frmo.display(data.history);
        }, fd)
    },
    delTrans: function (ev) {
        if (confirm('Вы действительно хотите удалить транзакцию?')) {
            j.post(['delete'], function (data) {
                if (data.status) {
                    message('Транзакция успешно удалена', 1);
                    frmo.init();
                } else message('Ошибка: транзакция не может быть удалена', 0);
            }, {transId: ev});
        }
    }
    , oninputCustomerId: function (t) {
        clearTimeout(frmo.ttt);
        frmo.ttt = setTimeout(function () {
            if (isDefined(panelData.customersList[t.value]) || t.value == "") {
                frmo.customerId = t.value;
                $('#orderInfo .panel-title').prepend(panelData.customersList[t.value].name);
                frmo.filterTrans();
            }
        }, 300);
    }
};
        frm[375] = {
    init: function () {
        j.post(['init'], function (data) {
            debug.cnsl(data);
            frmo.orders = data.orders;
            frmo.statuses = data.statuses;
            frmo.orderStatusId = "";
            frmo.customerId = "";
            for (var key in data.customers) {
                $('#customerIds').append('');
            }
            for (var key in data.statuses) {
                //  == "Удалён" ? "Посмотреть корзину":data.statuses[key]['name']
                var name = data.statuses[key]['name'];
                $('.orderStatusId').append('');
            }
            frmo.viewOrderList();
            /*            if (isDefined(sett.forms[frmo.curForm])) {
                            $('.formIds').val(frmo.curForm);
                            $('.vFormsList tbody tr').hide();
                            if ($('.vFormsList tr.' + frmo.curForm).length == 0) $('.nothingMsg').show();
                            else $('.vFormsList tbody tr.' + frmo.curForm).show();
                        }*/
            // $('.customerIds').off().on('change', function () {
            //     $('.nothingMsg').hide();
            //     $('.vFormsList').removeClass('panel-collapsed');
            //     $('.vFormsList .panel-body').show();
            //     $('.vFormsList [data-action="collapse"]').removeClass('rotate-180');
            //     var vFid = $('.formIds').val();
            //     if (vFid != 'all') {
            //         $('.vFormsList tbody tr').hide();
            //         if ($('.vFormsList tr.' + vFid).length == 0) $('.nothingMsg').show();
            //         else $('.vFormsList tbody tr.' + vFid).show();
            //     } else $('.vFormsList tbody tr').show();
            // });
        }, {orderStatusId: "forWork"});
    }
    , loadOrder: function () {
        $('#formsTbody,.nothingMsg').empty();
        let fieldsData = ff.toObj('heading-elements');
        debug.cnsl(fieldsData);
        let value = "";
        // let orderStatusId = "forWork";
      /*  if (ev.value != "all") {
            value = ev.value;
        }
        if (ev.name == "orderStatusId") {
            orderStatusId = value;
        }
*/
        if (fieldsData.customerId!="" || (fieldsData.dateFrom!="" && fieldsData.dateTo!="") ) {
            frmo.customerId = value;
            if (fieldsData.orderStatusId === "forWork") fieldsData.orderStatusId = "";
        }
        // fieldsData.orderStatusId = orderStatusId;
        fieldsData.customerId = frmo.customerId;
        j.post(['init', 'loadOrders'], function (data) {
            debug.cnsl(data);
            frmo.orders = data.orders;
            frmo.viewOrderList();
        }, fieldsData);
    }
    , viewOrderList: function () {
        for (var key in frmo.orders) {
            var fields = ['id', 'status', 'totalPrice', 'customer'];
            var table = e('formsTbody');
            var line = e(frmo.orders[key]['id'], table, 'tr', "line " + frmo.orders[key]['id']);
            if (frmo.orders[key]['statusId'] == 11) {
                // line.css("background-color:#bae2c7;")
                line.css("background-color:#e2baba;")
            }
            if (frmo.orders[key]['statusId'] == 12) {
                line.css("background-color:rgb(153 205 246);")
            }
            let bgC = "";
            for (let k in fields) {
                let i = fields[k];
                let text = frmo.orders[key][i];
                // debug.cnsl(frmo.orders[key]);
                if (i == 'createDate') text = parseDate.shortDate(text);
                if (i == 'status') {
                    bgC = frmo.statuses[frmo.orders[key]["statusId"]]["bgColor"];
                    // if (frmo.orders[key]['workerName'] != null) text = "" + text + " - " + frmo.orders[key]['workerName'] + "";
                    if (frmo.orders[key]['ttn'] != null) text = "" + text + " - " + frmo.orders[key]['ttn'] + "";
                    else if (frmo.orders[key]['workerName'] != null) text = "" + text + " - " + frmo.orders[key]['workerName'] + "";
                }
                if (i == 'id') {
                    text = '' + text + '';
                    text = text + " от " + frmo.orders[key]['cd'];
                }
                e(null, line, 'td', i).css("background-color:" + bgC).innerHTML = text;
            }
            e(null, line, 'td', 'actions').innerHTML = frmo.getActionOrderButtons(frmo.orders[key]);
        }
        $('.line :is(i,button):not(.removeOrder)').on("click", function (ev) {
            debug.cnsl(ev.target);
            let id = $(ev.target).parents('tr')[0].id;
            let bgC = "";
            j.post(['get', 'orderUpdatedInfo'], function (data) {
                let trInfo = data.orderUpdatedInfo;
                if (trInfo.id) {
                    let trs = $("#" + id)[0].cells;
                    for (let i in trs) {
                        let tr = trs[i];
                        let cn = tr.className;
                        if (isDefined(trInfo[cn])) {
                            let text = trInfo[cn];
                            if (cn == 'status') {
                                bgC = frmo.statuses[trInfo["statusId"]]["bgColor"];
                                if (trInfo['workerName'] != null) text = "" + text + " - " + trInfo['workerName'] + "";
                            }
                            if (cn == 'id') {
                                text = '' + text + '';
                                text = text + " от " + frmo.orders[key]['cd'];
                            }
                            $(tr)[0].css("background-color:" + bgC).innerHTML = text;
                        } else if (cn == "actions") {
                            $(tr)[0].innerHTML = frmo.getActionOrderButtons(trInfo);
                        }
                    }
                }
            }, {id: id});
        });
    }
    , getActionOrderButtons: function (order) {
        let inH = '';
        switch (parseInt(order["statusId"])) {
            case 1: {
                inH = '' +
                    ' ';
                break;
            }
            case 2: {
                inH = '' +
                    ' ';
                break;
            }
            case 4: { // передан на упаковку
                inH = '' +
                    '';
                break;
            }
            case 5: { // упаковка в процессе
                inH = '' +
                    '';
                break;
            }
            case 6: { // упакован
                if (order['shippingMethodId'] == 1) {// => на загрузку
                    inH = '' +
                        '';
                } else if (order['shippingMethodId'] == 6) {// => на самовывоз
                    inH = '' +
                        '';
                } else {// => на усмотрение
                    inH = 'подготовить к отправке вручную' +
                        '  ';
                }
                break;
            }
            case 8: { // готов к отправке
                inH = '' +
                    '';
                break;
            }
            case 10: { // готов к самовывозу
                inH = '' +
                    '';
                break;
            }
        }
        if (parseInt(order["totalPrice"]) > 0)
            inH += '' +
                '';
        else inH += '';
        return inH;
    }
    , setToFinish: function (orderId) {
        if (confirm("Вы точно желаете сделать заказ " + orderId + " завершённым?")) {
            j.post(['update', 'setToFinish'], function (data) {
                if (data.status) {
                    message("Успешно перемещён в \"Завершённые\"!", 1);
                    $(".line." + orderId)[0].remove();
                    // frmo.init();
                }
            }, {orderId: orderId});
        }
    }
    , deleteOrder: function (orderId) {
        if (confirm('Вы действительно хотите удалить заказ ' + orderId + '?'))
            if (confirm('ВСЕ данные из этого заказа(' + orderId + ', и накладная в том числе будет удалена без возможности восстановления! Точно желаете продолжить?'))
                j.post(['delete', 'order'], function (data) {
                    if (data.affected_rows == 1) {
                        message('Заказ успешно удалён!', 1);
                        message('Внимание! если в заказе были товары, то они были возвращенны на склад обратно', 1);
                        $("#" + orderId + ".line").remove();
                    } else message('При удалении заказа возникла ошибка. Свяжитесь с администратором.', 0);
                }, {orderId: orderId});
    }
    , withdraw: function (orderId) {
        if (confirm("Вы точно желаете отозвать заказ " + orderId + "?")) {
            alert("Для продолжения, разорвите накладную, по которой идёт упаковка, и нажмите 'OK'")
            if (confirm("Вы уже уничтожили распечатанную накладную?")) {
                // message("Эта функция ещё в разработке");
                // return false;
                j.post(['update', 'withdraw'], function (data) {
                    if (data.status && parseInt(data.checkValue) === 1111) {
                        message("Заказ успешно отозван!");
                    }
                }, {orderId: orderId});
            }
        }
    }
    , gotovNaOtdachy: function (orderId) {
        if (confirm("Это включит готовность к Выдаче! Всё верно?")) {
            j.post(['update', 'naOtdachy'], function (data) {
                if (data.status) {
                    message("Заказ успешно помечен!");
                }
            }, {orderId: orderId});
        }
    }
    , gotovNaOtpravky: function (orderId) {
        if (confirm("Это включит готовность к Загрузке! Всё верно?")) {
            j.post(['update', 'naOtpravky'], function (data) {
                if (data.status) {
                    message("Заказ успешно помечен!");
                }
            }, {orderId: orderId});
        }
    }
    , oninputCustomerId: function (t) {
        clearTimeout(frmo.ttt);
        frmo.ttt = setTimeout(function () {
            if (isDefined(panelData.customersList[t.value]) || t.value == "") {
                frmo.customerId = t.value;
                frmo.loadOrder(t);
            }
        }, 600);
    }
};