/**
	 * Saves a model
	 *
	 * @param 	Atomik_Model $model
	 * @return 	bool
	 */
	public function save(Atomik_Model $model)
	{
		$builder = $model->getBuilder();
		$success = true;
		
		$this->_notify($builder, 'BeforeSave', array($model));
		
		$data = array();
		foreach ($builder->getFields() as $field) {
			$data[$field->name] = $field->filterOutput($model->{$field->name});
		}
		
		if ($model->isNew()) {
			// insert
			if (($id = $this->_dbInstance->insert($builder->tableName, $data)) === false) {
				$success = false;
			} else {
				$model->setPrimaryKey($id);
			}
		} else {
			// update
			$where = array($builder->getPrimaryKeyField()->name => $model->getPrimaryKey());
			$success = $this->_dbInstance->update($builder->tableName, $data, $where);
		}
		
		if (!$success) {
			$this->_notify($builder, 'FailSave', array($model));
			return false;
		}
		$this->_notify($builder, 'AfterSave', array($model));
		return true;
	}