var TicketTemplate = function ($) {
    "use strict";

    var me = {
        storage: {
          api : null,
        },
        selector: {
            overviewTable: '#ticket_vorlagenlist',
            itemPopup: '#tickettemplatepopup',
            newButton: 'input#newtemplate',
        },
        updateOverviewTable: function() {
          $(me.selector.overviewTable).DataTable().ajax.reload();
        },
        saveItem: function()
        {
            $.ajax({
                type: 'POST',
                url: 'index.php?module=ticket_vorlage&action=list&cmd=saveitem',
                data: {
                    itemId: $('#itemid').val(),
                    name:$('#itemname').val(),
                    text:$('#itemtext').val(),
                    project:$('#itemproject').val(),
                    category:$('#itemcategory').val(),
                    sort:$('#itemsort').val(),
                    visible:$('#itemvisible').prop('checked')?1:0,
                },
                success: function () {
                    $(me.selector.itemPopup).dialog('close');
                    me.updateOverviewTable();
                }
            });
        },
        resetItem: function()
        {
            $('#itemid').val('');
            $('#itemname').val('');
            $('#itemtext').val('');
            $('#itemsort').val('');
            $('#itemcategory').val('');
            $('#itemvisible').prop('checked', false);
        },

        getItem: function(itemId)
        {
            $.ajax({
                type: 'POST',
                url: 'index.php?module=ticket_vorlage&action=list&cmd=getitem',
                data: {
                    itemId: itemId,
                    categoryId: $('#categoryid').val(),
                    name:$('#newtemplatename').val()
                },
                success: function (data) {
                    if(typeof data.id == 'undefined') {
                        me.resetItem();
                        $(me.selector.itemPopup).dialog('open');
                        return;
                    }
                    $('#itemid').val(data.id);
                    $('#itemname').val(data.name);
                    $('#itemtext').val(data.text);
                    $('#itemsort').val(data.sort);
                    $('#itemcategory').val(data.category);
                    $('#itemvisible').prop('checked', data.visible == '1');
                    $(me.selector.itemPopup).dialog('open');
                }
            });
        },

        initTree: function() {
            $('#mlmTree').aciTree({
                autoInit: false,
                checkboxChain: false,
                ajax: {
                    url: 'index.php?module=ticket_vorlage&action=list&cmd=gettree'
                },
                checkbox: true,
                itemHook: function(parent, item, itemData, level) {
                    //console.log(itemData);
                },
                filterHook: function(item, search, regexp) {

                    if (search.length) {
                        var parent = this.parent(item);

                        if (parent.length) {
                            var label = this.getLabel(parent);
                            if (regexp.test(String(label))) {
                                this.setVisible(item);
                                return true;
                            }
                            this.setVisible(item);
                        }

                        if (regexp.test(String(this.getLabel(item)))) {
                            item.addClass('searched');
                            return true;
                        } else {
                            return false;
                        }

                        //return regexp.test(String(this.getLabel(item)));
                    } else {
                        return true;
                    }
                }
            });
        },


        initOverview: function() {
            $(me.selector.newButton).on('click',function () {
                me.getItem(0);
            });
            $(me.selector.overviewTable).on('afterreload',function() {
               $(this).find('img.deleteitem').on('click', function() {
                  if(confirm('Wirklich löschen?')) {
                      $.ajax({
                          type: 'POST',
                          url: 'index.php?module=ticket_vorlage&action=list&cmd=deleteitem',
                          data: {
                              itemId: $(this).data('id')
                          },
                          success: function () {
                              me.updateOverviewTable();
                          }
                      });
                  }
               });
               $(this).find('img.edititem').on('click', function() {
                   me.getItem($(this).data('id'));
               });
            });

            $(me.selector.itemPopup).toggleClass('hidden', false);
            $(me.selector.itemPopup).dialog(
                {
                    modal: true,
                    autoOpen: false,
                    minWidth: 940,
                    title:'',
                    buttons: {
                        'ABBRECHEN': function() {
                            $(this).dialog('close');
                        },
                        'SPEICHERN': function()
                        {
                            me.saveItem();
                        },
                    },
                    close: function(event, ui){

                    }
                });

            $('#savesubcategory').on('click',function(){
                $.ajax({
                    type: 'POST',
                    url: 'index.php?module=ticket_vorlage&action=list&cmd=savenewsubcategory',
                    data: {
                        categoryId: $('#categoryid').val(),
                        name: $('#subcategoriename').val(),
                    },
                    success: function () {
                        $('#mlmTree').aciTree('api').unload(null, {
                            success: function() {
                                this.ajaxLoad(null);
                            }
                        });
                        me.updateOverviewTable();
                        $('#subcategoriename').val('');
                    }
                });
            });
            $('#savecategory').on('click',function(){
                $.ajax({
                    type: 'POST',
                    url: 'index.php?module=ticket_vorlage&action=list&cmd=savecategory',
                    data: {
                        categoryId: $('#categoryid').val(),
                        name: $('#categoriename').val(),
                    },
                    success: function () {
                        $('#mlmTree').aciTree('api').unload(null, {
                            success: function() {
                                this.ajaxLoad(null);
                            }
                        });
                        me.updateOverviewTable();
                    }
                });
            });

            $('#deletecategory').on('click',function(){
               if(!confirm('Wirklich löschen?')) {
                   return;
               }
                $.ajax({
                    type: 'POST',
                    url: 'index.php?module=ticket_vorlage&action=list&cmd=deletecategory',
                    data: {
                        categoryId: $('#categoryid').val()
                    },
                    success: function () {
                        $('#categoryid').val('');
                        $('#categoriename').val('');
                        $('#mlmTree').aciTree('api').unload(null, {
                            success: function() {
                                this.ajaxLoad(null);
                            }
                        });

                        me.updateOverviewTable();
                    }
                });
            });

            me.initTree();


            me.storage.api = $('#mlmTree').aciTree('api');


            $('#search').val('');
            var last = '';

            $('#search').on('keyup', function() {
                if ($(this).val() === last) {
                    return;
                }

                $('.aciTreeLi').removeClass('searched');

                last = $(this).val();
                me.storage.api.filter(null, {
                    search: $(this).val(),
                    callback: function() {

                    },
                    success: function(item, options) {

                        if (!options.first) {
                            //alert('No results found!');
                        }
                    }
                });
            });


            $('#mlmTree').on('acitree', function(event, api, item, eventName, options){
                switch (eventName){
                    case 'checked':
                        break;
                    case 'unchecked':
                        break;
                    case 'selected':

                        var ajaxData = {
                            id: api.getId(item),
                            name: api.getLabel(item)
                        }

                        $.ajax({
                            url: 'index.php?module=ticket_vorlage&action=list&cmd=gettreedetail',
                            data: ajaxData,
                            type: 'POST',
                            dataType: 'json',
                            success: function(data) {
                                $('#categoryid').val(data.id);
                                $('#categoriename').val(data.name);
                                me.updateOverviewTable();
                            }
                        });

                        break;
                    default:
                        if (api.isItem(item)){
                            //console.log('the event is: ' + eventName + ' for the item ID: ' + api.getId(item));
                        } else {
                            //console.log('the event is: ' + eventName + ' for the tree ROOT');
                        }
                }
            });

            $('#mlmTree').aciTree('init');
        },

        init: function () {
            if($(me.selector.overviewTable).length) {
                me.initOverview();
            }
        }
    };
    return {
        init: me.init,

    };

}(jQuery);

$(document).ready(function () {
    TicketTemplate.init();
});