docs: function (item, dontPushVal, options)
          {
              var self = this;
  
              if (self.options.maxTags && self.itemsArray.length >= self.options.maxTags)
              {
                  return;
              }
  
              // Ignore false values, except false
              if (item !== false && !item)
              {
                  return;
              }
  
              // Trim value
              if (typeof item === "string" && self.options.trimValue)
              {
                  item = $.trim(item);
              }
  
              // CapitalizeFirstLetter
              if (typeof item === "string" && self.options.CapitalizeFirstLetterOnly)
              {
                  item = item.charAt(0).toUpperCase() + item.slice(1);
              }
  
              // Throw an error when trying to add an object while the itemValue option was not set
              if (typeof item === "object" && !self.objectItems)
              {
                  throw("Can't add objects when itemValue option is not set");
              }
  
              // Ignore strings only contain whitespace
              if (item.toString().match(/^\s*$/))
              {
                  return;
              }
  
              if (typeof item === "string" && this.$element[0].tagName === 'INPUT')
              {
                  var items = item.split(',');
                  if (items.length > 1)
                  {
                      for (var i = 0; i < items.length; i++)
                      {
                          this.add(items[i], true);
                      }
  
                      if (!dontPushVal)
                      {
                          self.pushVal();
                      }
                      return;
                  }
              }
  
              var itemValue = self.options.itemValue(item),
                  itemText  = self.options.itemText(item),
                  tagClass  = self.options.tagClass(item),
                  itemTitle = self.options.itemTitle(item);
  
              // Ignore empty tags
              if (itemText == '' || itemText == undefined){
                  return;
              }
  
              // Ignore items all ready added
              var existing = $.grep(self.itemsArray, function (item) { return self.options.itemValue(item) === itemValue; })[0];
              if (existing && !self.options.allowDuplicates)
              {
                  // Invoke onTagExists
                  if (self.options.onTagExists)
                  {
                      var $existingTag = $(".tag", self.$container).filter(function () { return $(this).data("item") === existing; });
                      self.options.onTagExists(item, $existingTag);
                  }
                  return;
              }
  
              // if length greater than limit
              if (self.items().toString().length + item.length + 1 > self.options.maxInputLength)
              {
                  return;
              }
  
              // raise beforeItemAdd arg
              var beforeItemAddEvent = $.Event('beforeItemAdd', {item : item, cancel : false, options : options});
              self.$element.trigger(beforeItemAddEvent);
              if (beforeItemAddEvent.cancel)
              {
                  return;
              }
  
              // register item in internal array and map
              self.itemsArray.push(item);
  
              // add a tag element
              var $tag = $('<span class="' + htmlEncode(tagClass) + (itemTitle !== null ? ('" title="' + itemTitle) : '') + '">' + htmlEncode(itemText) + '<i class="material-icons" data-role="remove">close</i></span>');
              $tag.data('item', item);
              self.findInputWrapper().before($tag);
              $tag.after(' ');
  
              if (!dontPushVal)
              {
                  self.pushVal();
              }
  
              // Add class when reached maxTags
              if (self.options.maxTags === self.itemsArray.length || self.items().toString().length === self.options.maxInputLength)
              {
                  self.$container.addClass('materialize-tags-max');
                  self.$input.blur();
                  self.$input.prop('readOnly', true);
              }
  
              self.$element.trigger($.Event('itemAdded', {item : item, options : options}));
          }