   #     element.position()             // -> x: NNN, y:NNN
   #     element.position(x:NNN, y:NNN) // -> element self
   #     element.position(x:NNN)        // -> element self
+  #     element.position(x, y)         // -> element self
+  #     element.position(x, null)      // -> element self
+  #     element.position(null, y)      // -> element self
   #
-  # @param {Object} absolute position x:NNN, y:NNN
+  # @param {Object|Number} absolute position x:NNN, y:NNN or NNN x-position
+  # @param {Number} y-position in case of a two numbers call
   # @return {Element|Object} this element of it's absolute position
   #
   position: (position) ->

  #     element.size()             // -> x: NNN, y: NNN
  #     element.size(x:NNN, y:NNN) // -> element self
  #     element.size(x:NNN)        // -> 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
  # @return {Element|Object} this element or it's size
  #
  size: (size) ->
    if size is undefined
      return x: this._.offsetWidth, y: this._.offsetHeight
    else
      style = this._.style

      if 'x' of size

      node = node.previousSibling

    index

# private

# converts arguments into a standard x-y hash
Element_dimentions_hash = (args) ->
  hash = {}

  if args.length is 1
    hash = args[0]
  else
    hash.x = args[0] unless args[0] is null
    hash.y = args[1] unless args[1] is null

  hash