protected function saveAction($categoryID = 0, $id = 0)
	{
		$url = '/categories/' . $categoryID . '/elements';
				
		if ($id)
		{
			$action = '/edit/' . $id;
			$element = Elements::findFirst($id);
			
	        if (!$element) 
	        {
	            $this->flash->error("Element not found");
	            return $this->response->redirect($url);
	        }
		}
		else 
		{
			$action = '/new';
			$element = new Elements;
		}
		
		$form = new ElementForm;
		
        $data = $this->request->getPost();

        if (!$form->isValid($data, $element))
        {
            foreach ($form->getMessages() as $message) 
            {
                $this->flash->error($message);
            }
            return $this->response->redirect($url . $action);
        }

		$isSaved = $element->save();

		try 
		{
			if($element->id)
			{
				# Deleting old tags
				$elementsHashtags = ElementsHashtags::find([
			        "elements_id = :id:",
			        "bind"       => ['id' => $element->id . '%'],
			        "bindTypes"	 => ['id' => Column::BIND_PARAM_INT]
				]);
				
				foreach ($elementsHashtags as $elementHashtags)
				{
					$elementHashtags->delete();
				}
				
				# Creating new tags
				if(!empty($data['tags']))
				{									
					foreach ($data['tags'] as $tagID)
					{
						$elementHashtags = new ElementsHashtags;
						$elementHashtags->elements_id = $element->id;
						$elementHashtags->hashtags_id = $tagID;
						$elementHashtags->save();
					}
				}
			}
		}
		catch (Exception $e) 
		{
			$this->flash->error($e->getMessage());
		}

        if ($isSaved == false) 
        {
            foreach ($element->getMessages() as $message) 
            {
                $this->flash->error($message);
            }
            return $this->response->redirect($url . $action);
        }

        $form->clear();		

        $this->flash->success("Элемент успешно сохранен");
        return $this->response->redirect($url);		
	}