<?php
if (class_exists('SiteUsers'))
{
	$SiteUsers = & singleton('SiteUsers');
	$site_user_id = $SiteUsers->GetCurrentSiteUser();
}
else
{
	$site_user_id = 0;
}

// Если пользователь не авторизован
if ($site_user_id == 0)
{
	// Редирект на авторизацию
	header('Location: /users/');
	exit();
}

$messages = & singleton('messages');
$structure = & singleton('Structure');

$iMessagesOnPage = to_int($GLOBALS['LA']['messages_on_page']);
$sEndUrl = to_str(end($GLOBALS['URL_ARRAY']));

$message_parent_id = 0;

$iLimitFrom = 0;

$messages->sStatusMessage = '';

// удаление сообщения
if($sEndUrl == 'delete')
{
	$message_parent_id = intval(prev($GLOBALS['URL_ARRAY']));

	// удаление сообщения
	if ($messages->MarkEraseSiteUsersMail($message_parent_id, $site_user_id))
	{
		$message_parent_id = 0;
		$messages->sStatusMessage = 'Сообщение удалено';
	}
}
elseif (ereg ("^page-([0-9]*)$", $sEndUrl, $regs) && to_int($regs[1]) > 0)
{
	/* Страница умножается на кол-во элементов, выводимых на страницу */
	$iLimitFrom = ($regs[1] - 1) * $iMessagesOnPage;

	$GLOBALS['iLimitFrom'] = $iLimitFrom;
}
else
{
	$message_parent_id = intval($sEndUrl);

	// если сообщение не доступно
	if ($message_parent_id && !$messages->AccessSiteUserToMessage($message_parent_id, $site_user_id))
	{
		// Запрещаем отдавать 200-й заголовок
		if (!defined('IS_ERROR_404'))
		{
			define('IS_ERROR_404', TRUE);
		}

		$site = & singleton('site');
		$site_row = $site->GetSite(CURRENT_SITE);

		if ($site_row['site_error404'])
		{
			$structure_id = intval($site_row['site_error404']);
			$structure_row = $structure->GetStructureItem($structure_id);

			// Если тип - страница
			if ($structure_row['structure_type'] == 0)
			{
				$documents = & singleton('documents');
				$documents_version_row = $documents->GetCurrentDocumentVersion($structure_row['documents_id']);
				$documents_version_id = $documents_version_row['documents_version_id'];

				// Текущая страница
				$kernel->set_current_page($documents->GetDocumentVersionPath($documents_version_id));
			}
			elseif ($structure_row['structure_type'] == 1)
			{
				// Текущая страница - модуль
				$kernel->set_current_page($structure->GetStructureFilesPath() . "/Structure{$structure_id}.php");
			}
			else
			{
				// Типовая динамическая страница
				$lib_id = intval($structure_row['lib_id']);

				// Получаем параметры типовой динамической страницы
				$lib = & singleton ('lib');
				$GLOBALS['LA'] = $lib->LoadLibPropertiesValue($lib_id, $structure_id);

				$kernel->set_current_page($lib->GetLibPath($lib_id) . "/lib_{$lib_id}.php");
			}

			// Шаблон вывода для страницы
			$kernel->set_current_page_data_template($structure_row['data_templates_id']);
		}
	}
}

$messages->iMessage = $message_parent_id;

// Статус ошибки
$iStatusError = 0;

if(isset($_REQUEST['add_message']))
{
	$login = to_str($_REQUEST['login']);
	$text = to_str($_REQUEST['text']);
	$subject = to_str($_REQUEST['subject']);

	// Получаем идентификатор пользователя по его логину, если создаем новую ветку сообщений
	// если пользователь не определён и нет ветки сообщеный, воводим сообщение об ошибке
	$site_user_to_id = $SiteUsers->GetSiteUserByLogin($login);

	if ($messages->InsertSiteUsersMail(array(
		'site_users_mail_datetime' => date("Y-m-d H:i:s"),
		'site_users_mail_from_id' => $site_user_id,
		'site_users_mail_to_id' => to_int($site_user_to_id['site_users_id']),
		'site_users_mail_subject' => $subject,
		'site_users_mail_text' => $text,
		'site_users_mail_read' => 0,
		'site_users_mail_deleted_by_sender' => 0,
		'site_users_mail_deleted_by_recipient' => 0,
		'site_users_mail_answer_to_mail_id' => $message_parent_id
	)))
	{
		$messages->sStatusMessage = 'Сообщение отправлено';
	}
	else
	{
		// пользователь не найден и нет родительского диалога
		if (!$site_user_to_id['site_users_id'] && !$message_parent_id)
		{
			$messages->sStatusMessage = 'Пользователь не найден';
			$iStatusError = 1;
		}
	}
}

// запрос через Ajax
if (isset($_REQUEST['JsHttpRequest']))
{
	$JsHttpRequest = new JsHttpRequest('UTF-8');

	ob_start();

	if(!$message_parent_id) 
	{
		$sXslName = $GLOBALS['LA']['xsl_name'];
		$bPropertyUser = TRUE;
	}
	else
	{
		$sXslName = $GLOBALS['LA']['xsl_name2'];
		$bPropertyUser = FALSE;
	}

	if (isset($_REQUEST['load_messages']))
	{
		// выводить сообщения начиная с
		$iLimitFrom = to_int($_REQUEST['count_messages']);
	}

	// id сообщения, после которого будет формироваться XML
	$iAfterMessage = to_int($_REQUEST['after_message_id']);

	// если есть родительское сообщение и передан статус "прочитано"
	if ($message_parent_id && isset($_REQUEST['read_status']) && $_REQUEST['read_status'] == 1)
	{
		// отмечаем сообщения как прочитанные
		$messages->ChangeMessagesReadStatus($message_parent_id, array('all' => 1));
	}

	// Список сообщений
	$messages->ShowMessages(array('site_users_mail_id' => $message_parent_id, 
		'site_users_id' => $site_user_id, 
		'xsl_name' => $sXslName, 
		'limit_from' => $iLimitFrom, 
		'limit_count' => $iMessagesOnPage, 
		'show_external_property_for_user' => $bPropertyUser, 
		'after_message_id' => $iAfterMessage,
		'external_properties' => array(
			'structure_url' => $structure->GetStructurePath(CURRENT_STRUCTURE_ID, 0),
			'status_message' => $messages->sStatusMessage,
			'status_error' => $iStatusError
		)));

	$GLOBALS['_RESULT']['content'] = ob_get_clean();

	echo $JsHttpRequest->LOADER;
	exit ();
}

?>