function normalizeArrayIndex(array, index, sizeOffset) {
    var maxIndex = Math.max(0, array.length - 1 + (sizeOffset || 0));
    return index > maxIndex ? maxIndex : index < 0 ? Math.max(maxIndex + index + 1, 0) : index;
  }
Normalize array index. Basically this function makes sure that the provided
array index is within the bounds of the provided array and also transforms
negative index to the matching positive index. The third (optional) argument
allows you to define offset for array's length in case you are adding items
to the array or removing items from the array.

@param {Array} array
@param {Number} index
@param {Number} [sizeOffset]