public function action($parameter) {
        $result = FALSE;

        if($parameter) {
            $name = $parameter[0];

            $method_name = $name."Action";

            if(method_exists($this, $method_name)) {
                $result = $this->$method_name(array_slice($parameter, 1));
            }

            if(in_array($result, [FALSE, NULL], TRUE)) {
                if($parameter && $this->offsetExists($name)) {
                    $child = $this->offsetGet($name);
                    if($child instanceof ElementInterface) {
                        $result = $child->action(array_slice($parameter, 1));
                    }
                }
            }
        }

        if(in_array($result, [FALSE, NULL], TRUE)) {
            if($this->delegate_action) {
                if($this->offsetExists($this->delegate_action)) {
                    $child = $this->offsetGet($this->delegate_action);
                    if($child instanceof ElementInterface) {
                        $result = $child->action($parameter);
                    }
                }
            }
        }

        if(in_array($result, [FALSE, NULL], TRUE)) {
            if(!$parameter) {
                if($this->direct_access) {
                    $result = TRUE;
                }
                else {
                    $loops = $this->getLoops();

                    if($loops->hasService("request") && $loops->getService("request")->isAjax() && $this->ajax_access) {
                        $result = TRUE;
                    }
                }
            }
        }

        if($result === TRUE) {
            $result = $this;
        }

        return $result;
    }