var ListCheck = function(element) {
  this.element = $(element);
  this.element.data('exists', true);
  if(this.element.context.parentNode.tagName == "TD") {
    this.elementWrap = $(this.element.context.parentNode);
    this.elementWrap.addClass('listCheck');
  } else if(this.element.context.parentNode.tagName == "TH") {
    this.elementWrap = $(this.element.context.parentNode);
    this.elementWrap.addClass('listCheckHead');
  }
  this.element.before('<i class="icon-check-empty" />');
};

$.fn.listCheck = function (callback) {
  this.each(function (i) {
      if(!$(this).data('exists')) {
         new ListCheck(this);
      };
  });
  this.on(clickEvent, function(e) {
    if($(this).prop('checked')) {
      $(this).siblings('i').addClass('icon-check').removeClass('icon-check-empty').closest('tr').addClass('checkHit');
    } else {
      $(this).siblings('i').addClass('icon-check-empty').removeClass('icon-check').closest('tr').removeClass('checkHit');
    };
    if ($(this).closest('.listCheckHead').length) {
      $('.listCheck .list-check').prop('checked', $(this).prop('checked'));
      if($(this).prop('checked')) {
        $('.listCheck i').addClass('icon-check').removeClass('icon-check-empty').closest('tr').addClass('checkHit');
      } else {
        $('.listCheck i').addClass('icon-check-empty').removeClass('icon-check').closest('tr').removeClass('checkHit');
      }
    };

    var _isCheck = $('tbody .list-check').filter(':checked').length,
        _defaultLength = $('tbody .list-check').length;

    if(_isCheck > 0 && _isCheck < _defaultLength) {
      $('.listCheckHead i').removeClass('icon-check-empty icon-check').addClass('icon-minus');
    } else if(!_isCheck) {
      $('.listCheckHead i').removeClass('icon-minus icon-check').addClass('icon-check-empty');
    } else {
      $('.listCheckHead i').removeClass('icon-check-empty icon-minus').addClass('icon-check');
    }
    _isCheck ? $('.list-active-btn').removeClass('disabled').data('actionable', true) : $('.list-active-btn').addClass('disabled').data('actionable', false);
  });
};
function clearCheck() {
  $('.list-check').each(function() {
    $(this).prop('checked', false);
  })
}
function actionSuccess(e) {
  $("tbody .list-check").each(function() {
    switch(e) {
      case 'list-be-hide':
        $(this).filter(':checked').closest('tr').addClass('checkHide');
        break;
      case 'list-be-show':
        $(this).filter(':checked').closest('tr').removeClass('checkHide');
        break;
      case 'list-be-remove':
        $(this).filter(':checked').closest('tr').fadeOut(300, function() {
          $(this).remove();
        });
        break;
    };
    $('.list-check').siblings('i').removeAttr('class').addClass('icon-check-empty').closest('tr').removeClass('checkHit');
  });
  clearCheck();
}
$(function() {
  var $t = null,
      _data = null;
  clearCheck();
  $('.list-check').listCheck();
  $('.list-active-btn').data('actionable', false).on(clickEvent, function(e) {
    $t = $(this)
    _data = $(this).data()
    _data.actionable ? $('#dialog').modal('show') : "";
    e.preventDefault();
  });
  $('.delete-item').on(clickEvent, function() {
    var _v = [];
    $("tbody .list-check").each(function() {
      this.checked && _v.push("ids[]="+this.value)
    });
    var _t = $t.attr("rel");
    if(_t.indexOf("?") > -1) {
      $.ajax(_t + "&" + _v.join("&")).done(function() {
        actionSuccess(_data.checkAction)
      });
    } else {
      $.ajax(_t + "?" + _v.join("&")).done(function() {
        actionSuccess(_data.checkAction)
      });
    }
    $('#dialog').modal('hide');
    $('.list-active-btn').addClass('disabled').data('actionable', false);
  });
});