function changer() {
    this.list = new Object();

    this.add = function(object, type, do_function, start_value) {
        if (typeof(object) == "string") {
            object = document.getElementById(object);
        }

        if (!object) {
            return;
        }

        this.list[object.id] = new Object();
        this.list[object.id].object = object;
        this.list[object.id].type = type;
        this.list[object.id].do_function = do_function;
        this.list[object.id].start_value = start_value;
        this.list[object.id].value = '';
    };

    this.getValue = function(element) {
        var value = null;

        if (element.object) {
            if (element.type == "innerHTML") {
                value = element.object.innerHTML;
            }

            if (element.type == "value") {
                value = element.object.value;
            }

            if (element.type == "checked") {
                value = element.object.checked;
            }
        }

        return value;
    };

    this.interval = 1000;

    this.timer = null;

    this.startTimer = function() {
        var cc = this;

        this.timer = setInterval(
            function() {
                var list = cc.list;

                for (x in list) {
                    if (list[x].start_value) {
                        list[x].value = cc.getValue(list[x]);
                        list[x].start_value = false;
                    } else {
                        var value = cc.getValue(list[x]);

                        if (list[x].value !== value) {
                            if (list[x].do_function) {
                                list[x].do_function(list[x].object);
                            }
                        }

                        list[x].value = value;
                    }
                }
            },
            this.interval
            );
    };

    this.stopTimer = function() {
        clearInterval(this.timer);
        this.timer = null;
    };
}

/* Decree */
addEvent(
    window,
    'load',
    function() {
        var CHANGER = new changer();
        CHANGER.interval = 500;

        CHANGER.add(
            'account_acc_wn',
            'checked',
            function(obj) {
                if (true == obj.checked) {
                    document.getElementById('acc_wn').disabled = true;
                    document.getElementById('acc_wn_code').disabled = true

                    document.getElementById('btn_acc_wn_code').disabled = true
                    document.getElementById('btn_clr_acc_wn_code').disabled = true

                    return true;
                }

                document.getElementById('acc_wn').disabled = false;
                document.getElementById('acc_wn_code').disabled = false;

                document.getElementById('btn_acc_wn_code').disabled = false;
                document.getElementById('btn_clr_acc_wn_code').disabled = false;
            },
            false
        );

        CHANGER.add(
            'account_acc_ma',
            'checked',
            function(obj) {
                if (true == obj.checked) {
                    document.getElementById('acc_ma').disabled = true;
                    document.getElementById('acc_ma_code').disabled = true

                    document.getElementById('btn_acc_ma_code').disabled = true
                    document.getElementById('btn_clr_acc_ma_code').disabled = true

                    return true;
                }

                document.getElementById('acc_ma').disabled = false;
                document.getElementById('acc_ma_code').disabled = false;

                document.getElementById('btn_acc_ma_code').disabled = false;
                document.getElementById('btn_clr_acc_ma_code').disabled = false;
            },
            false
        );
        
        // set_focus();

        //initialize table
        N = new MyTable('decreeTable');
        N.divParent = document.getElementById('decreeTableDIV');
        
        var from_popup_return = false;

        function returnedData(popup_reply_data) {
            from_popup_return = true;

            var form_name = popup_reply_data.form_name;
            var name_to_value_array = popup_reply_data.name_to_value_array;

            for (var the_key in name_to_value_array) {
                if (the_key == 'toJSON') {
                    //
                }
                else {
                    var displayValue = name_to_value_array[the_key].replace(/&amp;/gi, '&').replace(/&lt;/gi, '<').replace(/&gt;/gi, '>').replace(/&#039;/gi, '\'').replace(/&quot;/gi, '"');

                    var e = document.getElementById(the_key);

                    if (e) {
                        e.value = displayValue;
                    }
                }
            }

           // if(N.selectedRow)
               // N.selectedRow.calculateTotal();
        }

        N.onRefreshRowIndex = function(row) {
            return true;
            
            var data = new Object();
            data['index'] = (row.index + 1).toString();

            row.cells.item(0).setData(data);
        };

        N.onCreateRow = function(row) {
            console.log(row);
            
            row.newPos = false;
            row.style.height = OPT['row_item_height'];

            row.ondblclick = function() {
                this.newPos = !this.newPos;

                for (var i = 0; i < this.myTable.colCount(); i++) {
                    this.cells.item(i).change(!this.newPos);
                }
            };

            row.onSelect = function() {
                for (var i = 0; i < this.myTable.colCount(); i++) {
                    this.cells.item(i).style.height = OPT['row_item_height_selected'];
                    this.cells.item(i).change(!this.newPos);
                }
            };

            row.onDeselect = function() {
                for (var i = 0; i < this.myTable.colCount(); i++) {
                    this.cells.item(i).style.height = OPT['row_item_height'];
                    this.cells.item(i).change(false);
                }
            };

            row.calculateTotal = function() {
                console.log('calculateTotal');
                return true;

                var data = new Object();

                this.cells.item(3).getData(data, true);
                this.cells.item(5).getData(data, true);
                this.cells.item(6).getData(data, true);

                if (data.quantity && data.price) {
                    data.price2 = data.price - data.price * data.discount / 100;
                    data.total = data.quantity * data.price2;
                }
                else {
                    data.total = 0;
                    data.price2 = 0;
                }

                this.cells.item(7).setData(data);
                this.cells.item(10).setData(data);

                calculateTotalItems();
            };
        };

        var itd = document.getElementById('decreeTableDIV');
        
        itd.onscroll = function() {
            console.log('onscroll');
            return true;

            if (!AjaxSearch1Items.AjaxSearchFrozen)
                if (N.selectedCell && N.selectedCell.LeftPosition && N.selectedCell.TopPosition) {
                    var top = N.selectedCell.TopPosition + N.selectedCell.offsetHeight;

                    if (((N.selectedCell.offsetTop + N.selectedCell.offsetHeight - this.scrollTop) > (this.offsetHeight + 5)) || ((N.selectedCell.offsetTop - this.scrollTop) < (-10)))
                        AjaxSearch1Items.div.style.display = 'none';
                    else
                        AjaxSearch1Items.div.style.display = '';

                    AjaxSearch1Items.div.style.top = top - this.scrollTop;
                }
        };

        N.onCreateCell = function(cell) {
            console.log(cell);
        
            var i = cell.index;

            cell.change = function(select) {
                //
            };

            cell.style.height = OPT['row_item_height'];

            // cell.onDeselect = function() {
                // var data = this.parentNode.getData();

                // if (!data.id || data.id == '') {
                    // var data2 = new Object();
                    // this.parentNode.setData(data2);
                // }
            // };

            // Position.
            if (i == 0) {
                cell.select = function() {
                    // this.selectNext();
                };

                cell.getData = function(data) {
                    data.index = cell.firstChild.value;
                };

                cell.setData = function(data) {
                    if (data.index) {
                        cell.firstChild.value = data.index;
                    }
                };

                var edit = document.createElement('input');
                edit.setAttribute('type', 'text');
                edit.setAttribute('readOnly', 'readonly');
                edit.setAttribute('tabIndex', 1);
                edit.className = 'inputs';

                cell.appendChild(edit);
            }

            // Name.
            if (i == 1) {
                cell.getData = function(data) {
                    data.vr_name = this.firstChild.value;
                };

                cell.setData = function(data) {
                    this.firstChild.value = data.vr_name;
                };

                var edit = document.createElement('input');
                edit.setAttribute('type', 'text');
                // edit.setAttribute('readOnly', 'readonly');
                edit.setAttribute('tabIndex', 1);
                edit.className = 'inputs';

                cell.appendChild(edit);
                
                var img = document.createElement('img');
                img.setAttribute('alt', MOD['LBL_IMG_SEARCH']);
                img.setAttribute('src', 'modules/EcmInvoiceOuts/images/search.gif');
                img.style.cursor = 'pointer';

                img.onclick = function() {
                    try {
                        // this.parentNode.select();
                    } catch(e) {
                        //
                    }

                    this.parentNode.ajax_search = false;

                    var ecmpopup = my_popup(
                            'EcmFkVatRegs',
                            {
                                id: 'id_p',
                                name: 'name_p',
                                position: 'position_p',
                            }
                        );

                    setTimeout(
                        function(){
                            ecmpopup.focus();
                        },
                        200
                    );
                }

                // Search image button.
                // cell.appendChild(img);
            }

            // Wn.
            if (i == 2) {
                cell.getData = function(data) {
                    data.acc_wn_code = this.firstChild.value;
                };

                cell.setData = function(data) {
                    this.firstChild.value = data.acc_wn_code;
                };

                var edit = document.createElement('input');
                edit.setAttribute('type', 'text');
                // edit.setAttribute('readOnly', 'readonly');
                edit.setAttribute('tabIndex', 1);
                edit.className = 'inputs';

                cell.appendChild(edit);
                
                var img = document.createElement('img');
                img.setAttribute('alt', MOD['LBL_IMG_SEARCH']);
                img.setAttribute('src', 'modules/EcmInvoiceOuts/images/search.gif');
                img.style.cursor = 'pointer';

                img.onclick = function() {
                    try {
                        // this.parentNode.select();
                    } catch(e) {
                        //
                    }

                    this.parentNode.ajax_search = false;

                    var ecmpopup = my_popup(
                            'EcmBankAccounts',
                            {
                                id: 'id_p',
                                name: 'name_p',
                                code: 'code_p',
                                kind: 'kind_p',
                                type: 'type_p',
                                bo: 'bo_p',
                                format: 'format_p',
                                date_created: 'date_created_p',
                                date_modified: 'date_modified_p',
                                deleted: 'deleted_p'
                            }
                        );

                    setTimeout(
                        function(){
                            ecmpopup.focus();
                        },
                        200
                    );
                }

                // Search image button.
                // cell.appendChild(img);
            }

            // Ma.
            if (i == 3) {
                cell.getData = function(data) {
                    data.acc_ma_code = this.firstChild.value;
                };

                cell.setData = function(data) {
                    this.firstChild.value = data.acc_ma_code;
                };

                var edit = document.createElement('input');
                edit.setAttribute('type', 'text');
                // edit.setAttribute('readOnly', 'readonly');
                edit.setAttribute('tabIndex', 1);
                edit.className = 'inputs';

                cell.appendChild(edit);

                var img = document.createElement('img');
                img.setAttribute('alt', MOD['LBL_IMG_SEARCH']);
                img.setAttribute('src', 'modules/EcmInvoiceOuts/images/search.gif');
                img.style.cursor = 'pointer';

                img.onclick = function() {
                    try {
                        // this.parentNode.select();
                    } catch(e) {
                        //
                    }

                    this.parentNode.ajax_search = false;

                    var ecmpopup = my_popup(
                            'EcmBankAccounts',
                            {
                                id: 'id_p',
                                name: 'name_p',
                                code: 'code_p',
                                kind: 'kind_p',
                                type: 'type_p',
                                bo: 'bo_p',
                                format: 'format_p',
                                date_created: 'date_created_p',
                                date_modified: 'date_modified_p',
                                deleted: 'deleted_p'
                            }
                        );

                    setTimeout(
                        function(){
                            ecmpopup.focus();
                        },
                        200
                    );
                }

                // Search image button.
                // cell.appendChild(img);
            }

            // Options.
            if (i == 4) {
                var img;

                //insert
                img = document.createElement('img');
                img.setAttribute('alt', MOD['LBL_INSERT_NEW_ROW']);
                img.setAttribute('src', 'modules/EcmFkPackages/images/insertrow.gif');
                img.style.cursor = 'pointer';

                img.onclick = function() {
                    this.parentNode.myTable.addRow(this.parentNode.parentNode.index + 1);
                };

                //delete
                cell.appendChild(img);
                cell.appendChild(document.createTextNode(" "));
                
                img = document.createElement('img');
                img.setAttribute('alt', MOD['LBL_DELETE_ROW']);
                img.setAttribute('src', 'modules/EcmFkPackages/images/deleterow.gif');
                img.style.cursor = 'pointer';

                img.onclick = function() {
                    removeReservation(cell);
                    this.parentNode.parentNode.deleteRow();
                };

                cell.appendChild(img);
                cell.appendChild(document.createElement('br'));

                //move up
                img = document.createElement('img');
                img.setAttribute('alt', MOD['LBL_MOVE_ROW_UP']);
                img.setAttribute('src', 'modules/EcmFkPackages/images/moverowup.gif');
                img.style.cursor = 'pointer';

                img.onclick = function() {
                    this.parentNode.parentNode.moveUp();
                };

                cell.appendChild(img);
                cell.appendChild(document.createTextNode(" "));

                //move down
                img = document.createElement('img');
                img.setAttribute('alt', MOD['LBL_MOVE_ROW_DOWN']);
                img.setAttribute('src', 'modules/EcmFkPackages/images/moverowdown.gif');
                img.style.cursor = 'pointer';

                img.onclick = function() {
                    this.parentNode.parentNode.moveDown();
                };

                cell.appendChild(img);
            }
        };

        N.onSetCellData = function(row, cell, data) {
            if (cell.innerHTML == '') {
                cell.innerHTML = '&nbsp;';
            }
        };

        var pl = document.getElementById('decree_list').value;

        if (pl && pl != '') {
            try {
                pl = eval(pl);
                // console.log(pl);
                
                for (x in pl) {
                    var pl_row = pl[x];

                    // if (!pl[x].code || pl[x].code == '')
                    // {
                        //
                    // } else {
                        N.addRow().setData(pl_row);
                    // }
                }
            } catch (err) {
                pl = null;
            }
        }

        if (N.rowCount() == 0) {
            N.addRow();
        }

        calculateTotalItems = function() {
            return true;

            var vats = new Object();
            var subtotal = 0;
            var total = 0;

            for (var i = 0; i < N.rowCount(); i++) {
                var data = N.row(i).getData();

                if (OPT.to_is_vat_free == 0) {
                    if (data.vat_id && data.name != '') {
                        if (typeof(vats[data.vat_id]) != "object") {
                            vats[data.vat_id] = new Object();
                            vats[data.vat_id]['vat'] = 0;
                        }

                        vats[data.vat_id]['vat'] += data.total;
                    }
                }

                subtotal += data.total;
            }

            total = subtotal;

            var rt = document.getElementById('position_result_table');

            for (var i = 1; i < rt.rows.length - 1; i++) {
                if (!vats[rt.rows.item(i).id]) {
                    rt.deleteRow(i);
                    --i;
                } else {
                    vats[rt.rows.item(i).id]['node'] = rt.rows.item(i);
                }
            }

            for (var x in vats) {
                if (VAT[x]) {
                    vats[x]['vat'] = vats[x]['vat'] * (parseFloat(VAT[x].value) / 100);
                    total += vats[x]['vat'];

                    var txL = MOD['LBL_VAT'] + ' (' + VAT[x].name + ')';
                    var txF = NumberToUserFormatNumber(vats[x]['vat']);
                }

                if (vats[x]['node']) {
                    vats[x]['node'].id = x;
                    vats[x]['node'].cells.item(0).innerHTML = txL;
                    vats[x]['node'].cells.item(1).innerHTML = "<input type='text' readonly='readonly' style='border:0px;font-weight:900;width:100%;text-align:right;' value='" + txF + "'>";
                } else {
                    rt.insertRow(1);

                    rt.rows.item(1).id = x;
                    rt.rows.item(1).insertCell(0);
                    rt.rows.item(1).cells.item(0).className = 'positionsLabel';
                    rt.rows.item(1).cells.item(0).innerHTML = txL;
                    rt.rows.item(1).insertCell(1);
                    rt.rows.item(1).cells.item(1).className = 'positionsField';
                    rt.rows.item(1).cells.item(1).innerHTML = "<input type='text' readonly='readonly' style='border:0px;font-weight:900;width:100%;text-align:right;' value='" + txF + "'>";
                }
            }

            var total2 = total;

            total2 = ((OPT['type'] == "correct") ? '-' : '') + NumberToUserFormatNumber(total2).toString();
            total = ((OPT['type'] == "correct") ? '-' : '') + NumberToUserFormatNumber(total).toString();

            document.getElementById('articles_subtotal').value = NumberToUserFormatNumber(subtotal);

            if (document.getElementById('articles_total'))
                document.getElementById('articles_total').value = total2;
        };

        ItemListSave = function(json) {
            var data = '';

            for (var i = 0; i < N.rowCount(); i++) {
                data = data + '&decree_' + i.toString() + '=' + JSON.stringifyNoSecurity(N.row(i).getData());
            }

            return data;
        };

        ItemsList = function(json) {
            var data = '';

            for (var i = 0; i < N.rowCount(); i++) {
                data = data + '||||' + JSON.stringifyNoSecurity(N.row(i).getData());
            }

            return data;
        };

        if (typeof sqs_objects != 'undefined') {
            sqs_objects["code_p"] = {
                "method": "get_product_array",
                "modules": ["EcmProducts"],
                "field_list": ["index_dbf", "id", "name", "currency_id"],
                "populate_list": ["code_p", "id_p", "name_p", "currency_id_p"],
                "conditions": [{
                        "name": "index_dbf",
                        "op": "like_custom",
                        "end": "%",
                        "value": ""
                    }],
                "limit": "30",
                "order": "index_dbf",
                "no_match_text": "No Match"
            };

            sqs_objects["name_p"] = {
                "method": "get_product_array",
                "modules": ["EcmProducts"],
                "field_list": ["date_entered", "name", "id", "index_dbf", "currency_id"],
                "populate_list": ["name_p", "name_p", "id_p", "code_p", "currency_id_p"],
                "conditions": [{
                        "name": "name",
                        "op": "like_custom",
                        "end": "%",
                        "value": ""
                    }],
                "limit": "30",
                "order": "name",
                "no_match_text": "No Match"
            };
        }

        function generateNumber() {
            var url = 'to_pdf=1&generate=1&module=EcmFkPackages&action=generateNumber&type=normal&template_id=' + document.getElementById('template_id').value;//+'&record='+document.forms.EditView.record.value;

            //if(document.getElementById('template_id').value == '') { alert('There are no DocumentTemplates in data base!'); return;}
            doRequest(
                'index.php',
                url,
                function(result) {
                    var arr = eval(result)[0];

                    document.getElementById('number').value = arr.number;
                    document.getElementById('document_no').value = arr.document_no;
                },
                ''
                );
        };

        //calculateTotalItems();

        if (OPT['new_number']) {
            generateNumber();

            document.getElementById('ITEMS_menu').style.display = 'none';
            document.getElementById('SERVICES_menu').style.display = 'none';

            //save PW
            document.getElementById('stock_doc_inside_in').value = '1';
        }

        function setToAddrEmail(str) {
            if (str && str != '')
                str = eval(str);
            else
                str = '';

            if (typeof(str) == "object")
                str = str[0];
            else
                str = '';

            if (document.getElementById('parent_type').value == 'Accounts') {
                //= document.getElementById('to_addrs_field'); if(tmp) tmp.value = (str=='')?'':(((str.name)?str.name:'')+' <'+((str.email1)?str.email1:'')+'>; ');
                tmp = document.getElementById('parent_address_street');

                if (tmp) {
                    tmp.value = (str.billing_address_street) ? str.billing_address_street : '';
                }

                tmp = document.getElementById('parent_address_city');

                if (tmp) {
                    tmp.value = (str.billing_address_city) ? str.billing_address_city : '';
                }

                tmp = document.getElementById('parent_address_postalcode');

                if (tmp) {
                    tmp.value = (str.billing_address_postalcode) ? str.billing_address_postalcode : '';
                }

                tmp = document.getElementById('parent_address_country');

                if (tmp) {
                    tmp.value = (str.billing_address_country) ? str.billing_address_country : '';
                }

//                tmp = document.getElementById('to_nip');
//
//                if (tmp) {
//                    tmp.value = (str.sic_code) ? str.sic_code : '';
//                }

                tmp = document.getElementById('to_vatid');

                if (tmp) {
                    tmp.value = (str.nip) ? str.nip : '';
                }

                tmp = document.getElementById('to_is_vat_free');

                if (tmp) {
                    tmp.checked = (str.is_vat_free == 1) ? true : false;
                }

                document.getElementById('parent_name_copy').value = document.getElementById('parent_name').value;

                tmp = document.getElementById('ecmlanguage');

                if (tmp && str.ecmlanguage) {
                    if (tmp.value != str.ecmlanguage) {
                        tmp.value = str.ecmlanguage;
                        setTexts();
                    }
                }
            }
        }

        function ChangeAccessFunction(obj, type) {
            var objs = obj.getElementsByTagName('input');


            for (var i = 0; i < objs.length; i++)
                if (objs[i].id != 'parent_name' && objs[i].id != 'parent_id' && objs[i].name != 'btn_parent_name' && objs[i].name != 'btn_clr_parent_name' && objs[i].name != 'btn_create_parent_name') {
                    objs[i].disabled = type;
                }

            var objs = obj.getElementsByTagName('textarea');

            for (var i = 0; i < objs.length; i++) {
                objs[i].disabled = type;
            }

            var objs = obj.getElementsByTagName('select');

            for (var i = 0; i < objs.length; i++) {
                if (objs[i].id != 'parent_type') {
                    objs[i].disabled = type;
                }
            }

            if (type == 'disabled') {
                TabsMainBlock = true;
            }
            else {
                TabsMainBlock = false;
            }

        }

        console.log('N done');
    }
);
/* /Decree */

CHANGER.startTimer();