var KretaComboBoxHelper = (function () {
  var kretaComboBoxHelper = function () {};

  kretaComboBoxHelper.getKendoComboBoxData = function (comboBoxId) {
    var comboBox = $('#' + comboBoxId);
    var comboBoxData = comboBox.data('kendoComboBox');
    return comboBoxData;
  };

  kretaComboBoxHelper.getKendoValue = function (comboBoxId) {
    var comboBoxData = kretaComboBoxHelper.getKendoComboBoxData(comboBoxId);
    var result = comboBoxData.value();
    return result;
  };

  kretaComboBoxHelper.getCascadeData = function (inputName) {
    if (inputName.indexOf(',') >= 0) {
      var array = inputName.split(',');
      var data = '';
      $.each(array, function (key, value) {
        if (data.length > 0 && $('#' + value).val() != '') {
          data += ',';
        }

        if (value.indexOf('#') >= 0) {
          data += $(value).val();
        } else {
          data += $('#' + value).val();
        }
      });
      return { cascadeFilter: data };
    } else {
      return { cascadeFilter: $(inputName).val() };
    }
  };

  kretaComboBoxHelper.getServerFilteringData = function (inputName) {
    return { serverFilter: $(inputName).val() };
  };

  kretaComboBoxHelper.getServerFilteringComboBoxTextData = function (
    inputName
  ) {
    var textValue = $(inputName).data('kendoComboBox').text();
    if (textValue.length > 0) {
      return { serverFilter: textValue };
    }

    return null;
  };

  kretaComboBoxHelper.refreshComboBox = function (inputName) {
    var widget = $('#' + inputName).data('kendoComboBox');
    widget.dataSource.read();
  };

  kretaComboBoxHelper.setFirstItem = function (inputName, setIfHasOnlyOneItem) {
    var widget = $('#' + inputName).data('kendoComboBox');
    if (setIfHasOnlyOneItem) {
      if (widget.dataSource.data().length === 1) {
        widget.value(widget.dataSource.data()[0].Value);
      }
    } else {
      //NOTE: Check if has item!
      if (widget.dataSource.data().length > 0) {
        widget.value(widget.dataSource.data()[0].Value);
      }
    }
  };

  kretaComboBoxHelper.onChange = function (e) {
    elementId = e.sender.element[0].id.replace('.', '_');
    $('input[name="' + elementId + '"]').attr(
      'title',
      $('input[name="' + elementId + '_input' + '"]').attr('title')
    ); /*validációs üzenet buborékolása*/

    var comboBox = $('#' + elementId).data('kendoComboBox');
    checkSelectedValue(comboBox);
  };

  kretaComboBoxHelper.checkSelectedValue = function (elementId) {
    var comboBox = $('#' + elementId).data('kendoComboBox');
    checkSelectedValue(comboBox);
  };

  kretaComboBoxHelper.onDataBound = function (e) {
    var elementId = e.sender.element[0].id;
    var comboBox = $('#' + elementId).data('kendoComboBox');
    if (typeof comboBox !== 'undefined') {
      if (!comboBox.element.attr('placeholder')) {
        comboBox.element.attr(
          'placeholder',
          comboBox.input.attr('placeholder')
        );
      }

      var dataSource = comboBox.dataSource;
      if (dataSource != null) {
        if (dataSource.data().length == 1) {
          var data = dataSource.data()[0];
          comboBox.value(data.Value);
          comboBox.trigger('change');
        } else {
          checkSelectedValue(comboBox);
        }
      }
    }
  };

  kretaComboBoxHelper.onDataBoundWithoutSetSingleElement = function (e) {
    var elementId = e.sender.element[0].id;
    var comboBox = $('#' + elementId).data('kendoComboBox');
    if (typeof comboBox !== 'undefined') {
      if (!comboBox.element.attr('placeholder')) {
        comboBox.element.attr(
          'placeholder',
          comboBox.input.attr('placeholder')
        );
      }

      var dataSource = comboBox.dataSource;
      if (dataSource != null) {
        if (dataSource.data().length != 1) {
          checkSelectedValue(comboBox);
        }
      }
    }
  };

  kretaComboBoxHelper.onOpenDropdown = function (e) {
    var elementId = e.sender.element[0].id;
    var comboBox = $('#' + elementId).data('kendoComboBox');

    var maxWidth = 800;
    var comboMinWidth = $('#' + elementId)
      .parents('.k-combobox')
      .width();
    if (comboMinWidth > maxWidth) {
      maxWidth = comboMinWidth;
    }

    comboBox.list.css('maxWidth', maxWidth);
    comboBox.list.css('minWidth', comboMinWidth);
    comboBox.list.width('auto');
  };

  kretaComboBoxHelper.setKendoValue = function (comboBoxData, value) {
    comboBoxData.value(value);
    comboBoxData.trigger('change');
  };

  function checkSelectedValue(comboBox) {
    if (comboBox.selectedIndex === -1 && comboBox.value()) {
      comboBox.value(null);
      comboBox.input.attr(
        'placeholder',
        comboBox.element.attr('data-msg-unknownvalue')
      );
    } else {
      comboBox.input.attr('placeholder', comboBox.element.attr('placeholder'));
    }
  }

  kretaComboBoxHelper.getIndexForValue = function (comboBoxId, value) {
    var data = kretaComboBoxHelper
      .getKendoComboBoxData(comboBoxId)
      .dataSource.data();

    var index = -1;

    for (var i = 0; i < data.length; i++) {
      if (data[i].Value === value) {
        index = i;
        break;
      }
    }

    return index;
  };

  return kretaComboBoxHelper;
})();