public function register($assets, $type, $position, $order = 0, $mode = 'default')
    {
        if (! in_array($type, $this->types)) {
            throw new InvalidArgumentException("Invalid assets type [${type}]");
        } else if (! in_array($mode, array('default', 'inline', 'view'))) {
            throw new InvalidArgumentException("Invalid assets mode [${mode}]");
        }

        // The assets type and mode are valid.
        else if (! empty($items = $this->parseAssets($assets, $order, $mode))) {
            // We will merge the items for the specified type and position.

            Arr::set($this->positions, $key = "${type}.${position}", array_merge(
                Arr::get($this->positions, $key, array()), $items
            ));
        }
    }