   #     element.size()             // -> x: NNN, y: NNN
   #     element.size(x:NNN, y:NNN) // -> element self
   #     element.size(x:NNN)        // -> element self
+  #     element.size(x, y)         // -> element self
+  #     element.size(null, y)      // -> element self
+  #     element.size(x, null)      // -> element self
   #
   # NOTE: this method will adjust the element size
   #       accordingly to provide the given size regardless
   #       to the paddings and internal element margins
   #
-  # @param {Object} size x:NNN, y:NNN in case of setting
+  # @param {Object|Number} size x:NNN, y:NNN or NNN for an x-size
+  # @param {Number} y-size in case of a two numbers call
   # @return {Element|Object} this element or it's size
   #
   size: (size) ->
     if size is undefined
       return x: this._.offsetWidth, y: this._.offsetHeight
     else
+      size  = Element_dimentions_hash(arguments)
       style = this._.style
 
       if 'x' of size

  #     element.position()             // -> x: NNN, y:NNN
  #     element.position(x:NNN, y:NNN) // -> element self
  #     element.position(x:NNN)        // -> element self
  #
  # @param {Object} absolute position x:NNN, y:NNN
  # @return {Element|Object} this element of it's absolute position
  #
  position: (position) ->

        y: rect.top  + scrolls.y - html.clientTop }

    else
      position = Element_dimentions_hash(arguments)
      # TODO: implement me
      return this

  #
  # Checks if current element overlaps with the target position
  #
  # @param {Object|Number} x:NNN, y:NNN position or NNN x-position
  # @param {Number} y-position in case of a two numbers call
  # @return {Boolean} check result
  #
  overlaps: (target) ->
    pos    = this.position()
    size   = this.size()
    target = Element_dimentions_hash(arguments)

    target.x >= pos.x and target.x <= (pos.x + size.x) and
    target.y >= pos.y and target.y <= (pos.y + size.y)
