diff --git a/data/VERSION b/data/VERSION index 2ce0796f24..e58b18e1d3 100644 --- a/data/VERSION +++ b/data/VERSION @@ -1 +1 @@ -1.3.9.485 \ No newline at end of file +1.3.10.490 \ No newline at end of file diff --git a/index.php b/index.php index 651b82dba9..a4f197af47 100644 --- a/index.php +++ b/index.php @@ -1,13 +1,12 @@ array( - 'phpversion' => \phpversion(), + 'phpversion' => PHP_VERSION, 'ssl' => (int) \function_exists('openssl_open'), 'iconv' => (int) \function_exists('iconv') )); diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Base/ResourceRegistry.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Base/ResourceRegistry.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Base/ResourceRegistry.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Base/ResourceRegistry.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Base/StreamWrappers/Binary.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Base/StreamWrappers/Binary.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Base/StreamWrappers/Binary.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Base/StreamWrappers/Binary.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Base/StreamWrappers/Literal.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Base/StreamWrappers/Literal.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Base/StreamWrappers/Literal.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Base/StreamWrappers/Literal.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Base/StreamWrappers/SubStreams.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Base/StreamWrappers/SubStreams.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Base/StreamWrappers/SubStreams.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Base/StreamWrappers/SubStreams.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Base/StreamWrappers/Test.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Base/StreamWrappers/Test.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Base/StreamWrappers/Test.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Base/StreamWrappers/Test.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Base/Utils.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Base/Utils.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Base/Utils.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Base/Utils.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Base/Validator.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Base/Validator.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Base/Validator.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Base/Validator.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Cache/CacheClient.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Cache/CacheClient.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Cache/CacheClient.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Cache/CacheClient.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Cache/DriverInterface.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Cache/DriverInterface.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Cache/DriverInterface.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Cache/DriverInterface.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Cache/Drivers/APC.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Cache/Drivers/APC.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Cache/Drivers/APC.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Cache/Drivers/APC.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Cache/Drivers/File.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Cache/Drivers/File.php similarity index 90% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Cache/Drivers/File.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Cache/Drivers/File.php index 2c36e80f03..4d15c72fc5 100644 --- a/rainloop/v/1.3.9.485/app/libraries/MailSo/Cache/Drivers/File.php +++ b/rainloop/v/1.3.10.490/app/libraries/MailSo/Cache/Drivers/File.php @@ -1,126 +1,126 @@ -sCacheFolder = $sCacheFolder; - $this->sCacheFolder = rtrim(trim($this->sCacheFolder), '\\/').'/'; - if (!\is_dir($this->sCacheFolder)) - { - @\mkdir($this->sCacheFolder, 0777); - } - } - - /** - * @param string $sCacheFolder - * - * @return \MailSo\Cache\Drivers\File - */ - public static function NewInstance($sCacheFolder) - { - return new self($sCacheFolder); - } - - /** - * @param string $sKey - * @param string $sValue - * - * @return bool - */ - public function Set($sKey, $sValue) - { - return false !== \file_put_contents($sPath = $this->generateCachedFileName($sKey, true), $sValue); - } - - /** - * @param string $sKey - * - * @return string - */ - public function Get($sKey) - { - $sValue = ''; - $sPath = $this->generateCachedFileName($sKey); - if (\file_exists($sPath)) - { - $sValue = \file_get_contents($sPath); - } - - return \is_string($sValue) ? $sValue : ''; - } - - /** - * @param string $sKey - * - * @return void - */ - public function Delete($sKey) - { - $sPath = $this->generateCachedFileName($sKey); - if (\file_exists($sPath)) - { - \unlink($sPath); - } - } - - /** - * @param int $iTimeToClearInHours = 24 - * - * @return bool - */ - public function GC($iTimeToClearInHours = 24) - { - if (0 < $iTimeToClearInHours) - { - \MailSo\Base\Utils::RecTimeDirRemove($this->sCacheFolder, 60 * 60 * $iTimeToClearInHours, \time()); - return true; - } - - return false; - } - - /** - * @param string $sKey - * @param bool $bMkDir = false - * - * @return string - */ - private function generateCachedFileName($sKey, $bMkDir = false) - { - $sFilePath = ''; - if (3 < \strlen($sKey)) - { - $sKeyPath = \sha1($sKey); - $sKeyPath = \substr($sKeyPath, 0, 2).'/'.\substr($sKeyPath, 2, 2).'/'.$sKeyPath; - - $sFilePath = $this->sCacheFolder.'/'.$sKeyPath; - if ($bMkDir && !\is_dir(\dirname($sFilePath))) - { - if (!\mkdir(\dirname($sFilePath), 0777, true)) - { - $sFilePath = ''; - } - } - } - - return $sFilePath; - } -} +sCacheFolder = $sCacheFolder; + $this->sCacheFolder = rtrim(trim($this->sCacheFolder), '\\/').'/'; + if (!\is_dir($this->sCacheFolder)) + { + @\mkdir($this->sCacheFolder, 0755); + } + } + + /** + * @param string $sCacheFolder + * + * @return \MailSo\Cache\Drivers\File + */ + public static function NewInstance($sCacheFolder) + { + return new self($sCacheFolder); + } + + /** + * @param string $sKey + * @param string $sValue + * + * @return bool + */ + public function Set($sKey, $sValue) + { + return false !== \file_put_contents($sPath = $this->generateCachedFileName($sKey, true), $sValue); + } + + /** + * @param string $sKey + * + * @return string + */ + public function Get($sKey) + { + $sValue = ''; + $sPath = $this->generateCachedFileName($sKey); + if (\file_exists($sPath)) + { + $sValue = \file_get_contents($sPath); + } + + return \is_string($sValue) ? $sValue : ''; + } + + /** + * @param string $sKey + * + * @return void + */ + public function Delete($sKey) + { + $sPath = $this->generateCachedFileName($sKey); + if (\file_exists($sPath)) + { + \unlink($sPath); + } + } + + /** + * @param int $iTimeToClearInHours = 24 + * + * @return bool + */ + public function GC($iTimeToClearInHours = 24) + { + if (0 < $iTimeToClearInHours) + { + \MailSo\Base\Utils::RecTimeDirRemove($this->sCacheFolder, 60 * 60 * $iTimeToClearInHours, \time()); + return true; + } + + return false; + } + + /** + * @param string $sKey + * @param bool $bMkDir = false + * + * @return string + */ + private function generateCachedFileName($sKey, $bMkDir = false) + { + $sFilePath = ''; + if (3 < \strlen($sKey)) + { + $sKeyPath = \sha1($sKey); + $sKeyPath = \substr($sKeyPath, 0, 2).'/'.\substr($sKeyPath, 2, 2).'/'.$sKeyPath; + + $sFilePath = $this->sCacheFolder.'/'.$sKeyPath; + if ($bMkDir && !\is_dir(\dirname($sFilePath))) + { + if (!\mkdir(\dirname($sFilePath), 0755, true)) + { + $sFilePath = ''; + } + } + } + + return $sFilePath; + } +} diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Cache/Drivers/Memcache.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Cache/Drivers/Memcache.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Cache/Drivers/Memcache.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Cache/Drivers/Memcache.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/BodyStructure.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/BodyStructure.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/BodyStructure.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/BodyStructure.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Enumerations/FetchType.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Enumerations/FetchType.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Enumerations/FetchType.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Enumerations/FetchType.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Enumerations/FolderResponseStatus.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Enumerations/FolderResponseStatus.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Enumerations/FolderResponseStatus.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Enumerations/FolderResponseStatus.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Enumerations/FolderStatus.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Enumerations/FolderStatus.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Enumerations/FolderStatus.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Enumerations/FolderStatus.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Enumerations/FolderType.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Enumerations/FolderType.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Enumerations/FolderType.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Enumerations/FolderType.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Enumerations/MessageFlag.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Enumerations/MessageFlag.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Enumerations/MessageFlag.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Enumerations/MessageFlag.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Enumerations/ResponseStatus.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Enumerations/ResponseStatus.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Enumerations/ResponseStatus.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Enumerations/ResponseStatus.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Enumerations/ResponseType.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Enumerations/ResponseType.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Enumerations/ResponseType.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Enumerations/ResponseType.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Enumerations/StoreAction.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Enumerations/StoreAction.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Enumerations/StoreAction.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Enumerations/StoreAction.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Exceptions/Exception.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Exceptions/Exception.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Exceptions/Exception.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Exceptions/Exception.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Exceptions/InvalidResponseException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Exceptions/InvalidResponseException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Exceptions/InvalidResponseException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Exceptions/InvalidResponseException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Exceptions/LoginBadCredentialsException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Exceptions/LoginBadCredentialsException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Exceptions/LoginBadCredentialsException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Exceptions/LoginBadCredentialsException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Exceptions/LoginBadMethodException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Exceptions/LoginBadMethodException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Exceptions/LoginBadMethodException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Exceptions/LoginBadMethodException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Exceptions/LoginException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Exceptions/LoginException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Exceptions/LoginException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Exceptions/LoginException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Exceptions/NegativeResponseException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Exceptions/NegativeResponseException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Exceptions/NegativeResponseException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Exceptions/NegativeResponseException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Exceptions/ResponseException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Exceptions/ResponseException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Exceptions/ResponseException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Exceptions/ResponseException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Exceptions/ResponseNotFoundException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Exceptions/ResponseNotFoundException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Exceptions/ResponseNotFoundException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Exceptions/ResponseNotFoundException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Exceptions/RuntimeException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Exceptions/RuntimeException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Exceptions/RuntimeException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Exceptions/RuntimeException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/FetchResponse.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/FetchResponse.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/FetchResponse.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/FetchResponse.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Folder.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Folder.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Folder.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Folder.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/FolderInformation.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/FolderInformation.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/FolderInformation.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/FolderInformation.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/ImapClient.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/ImapClient.php similarity index 99% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/ImapClient.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/ImapClient.php index 654826b929..9eb8439506 100644 --- a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/ImapClient.php +++ b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/ImapClient.php @@ -1272,6 +1272,7 @@ public function MessageStoreFlag($sIndexRange, $bIndexIsUid, $aInputStoreItems, * @param int $iStreamSize * @param array $aAppendFlags = null * @param int $iUid = null + * @param int $sDateTime = 0 * * @return \MailSo\Imap\ImapClient * @@ -1279,12 +1280,18 @@ public function MessageStoreFlag($sIndexRange, $bIndexIsUid, $aInputStoreItems, * @throws \MailSo\Net\Exceptions\Exception * @throws \MailSo\Imap\Exceptions\Exception */ - public function MessageAppendStream($sFolderName, $rMessageAppendStream, $iStreamSize, $aAppendFlags = null, &$iUid = null) + public function MessageAppendStream($sFolderName, $rMessageAppendStream, $iStreamSize, $aAppendFlags = null, &$iUid = null, $sDateTime = 0) { - $this->SendRequest('APPEND', - array($this->EscapeString($sFolderName), $aAppendFlags, '{'.$iStreamSize.'}')); + $aData = array($this->EscapeString($sFolderName), $aAppendFlags); + if (0 < $sDateTime) + { + $aData[] = $this->EscapeString(\gmdate('d-M-Y H:i:s', $sDateTime).' +0000'); + } - $this->parseResponseWithValidation('+'); + $aData[] = '{'.$iStreamSize.'}'; + + $this->SendRequest('APPEND', $aData); + $this->parseResponseWithValidation(); $this->writeLog('Write to connection stream', \MailSo\Log\Enumerations\Type::NOTE); diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/NamespaceResult.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/NamespaceResult.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/NamespaceResult.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/NamespaceResult.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Response.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Response.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/Response.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/Response.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/SearchBuilder.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/SearchBuilder.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Imap/SearchBuilder.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Imap/SearchBuilder.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Log/Driver.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Log/Driver.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Log/Driver.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Log/Driver.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Log/Drivers/Callback.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Log/Drivers/Callback.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Log/Drivers/Callback.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Log/Drivers/Callback.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Log/Drivers/File.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Log/Drivers/File.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Log/Drivers/File.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Log/Drivers/File.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Log/Drivers/Inline.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Log/Drivers/Inline.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Log/Drivers/Inline.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Log/Drivers/Inline.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Log/Enumerations/Type.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Log/Enumerations/Type.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Log/Enumerations/Type.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Log/Enumerations/Type.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Log/Logger.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Log/Logger.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Log/Logger.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Log/Logger.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/Attachment.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/Attachment.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/Attachment.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/Attachment.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/AttachmentCollection.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/AttachmentCollection.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/AttachmentCollection.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/AttachmentCollection.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/Exceptions/Exception.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/Exceptions/Exception.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/Exceptions/Exception.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/Exceptions/Exception.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/Exceptions/NonEmptyFolder.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/Exceptions/NonEmptyFolder.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/Exceptions/NonEmptyFolder.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/Exceptions/NonEmptyFolder.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/Exceptions/RuntimeException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/Exceptions/RuntimeException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/Exceptions/RuntimeException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/Exceptions/RuntimeException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/Folder.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/Folder.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/Folder.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/Folder.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/FolderCollection.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/FolderCollection.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/FolderCollection.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/FolderCollection.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/MailClient.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/MailClient.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/MailClient.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/MailClient.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/Message.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/Message.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/Message.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/Message.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/MessageCollection.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/MessageCollection.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mail/MessageCollection.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mail/MessageCollection.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/MailSo.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/MailSo.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/MailSo.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/MailSo.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Attachment.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Attachment.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Attachment.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Attachment.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/AttachmentCollection.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/AttachmentCollection.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/AttachmentCollection.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/AttachmentCollection.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Email.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Email.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Email.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Email.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/EmailCollection.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/EmailCollection.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/EmailCollection.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/EmailCollection.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Enumerations/Constants.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Enumerations/Constants.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Enumerations/Constants.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Enumerations/Constants.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Enumerations/Header.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Enumerations/Header.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Enumerations/Header.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Enumerations/Header.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Enumerations/MessagePriority.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Enumerations/MessagePriority.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Enumerations/MessagePriority.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Enumerations/MessagePriority.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Enumerations/MimeType.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Enumerations/MimeType.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Enumerations/MimeType.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Enumerations/MimeType.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Enumerations/Parameter.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Enumerations/Parameter.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Enumerations/Parameter.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Enumerations/Parameter.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Enumerations/Sensitivity.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Enumerations/Sensitivity.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Enumerations/Sensitivity.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Enumerations/Sensitivity.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Header.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Header.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Header.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Header.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/HeaderCollection.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/HeaderCollection.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/HeaderCollection.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/HeaderCollection.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Message.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Message.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Message.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Message.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Parameter.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Parameter.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Parameter.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Parameter.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/ParameterCollection.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/ParameterCollection.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/ParameterCollection.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/ParameterCollection.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Parser/ParserEmpty.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Parser/ParserEmpty.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Parser/ParserEmpty.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Parser/ParserEmpty.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Parser/ParserInterface.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Parser/ParserInterface.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Parser/ParserInterface.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Parser/ParserInterface.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Parser/ParserMemory.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Parser/ParserMemory.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Parser/ParserMemory.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Parser/ParserMemory.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Part.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Part.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/Part.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/Part.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/PartCollection.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/PartCollection.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Mime/PartCollection.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Mime/PartCollection.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Enumerations/ConnectionSecurityType.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Enumerations/ConnectionSecurityType.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Enumerations/ConnectionSecurityType.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Enumerations/ConnectionSecurityType.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/ConnectionException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/ConnectionException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/ConnectionException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/ConnectionException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/Exception.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/Exception.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/Exception.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/Exception.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/InvalidArgumentException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/InvalidArgumentException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/InvalidArgumentException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/InvalidArgumentException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/SocketAlreadyConnectedException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/SocketAlreadyConnectedException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/SocketAlreadyConnectedException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/SocketAlreadyConnectedException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/SocketCanNotConnectToHostException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/SocketCanNotConnectToHostException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/SocketCanNotConnectToHostException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/SocketCanNotConnectToHostException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/SocketConnectionDoesNotAvailableException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/SocketConnectionDoesNotAvailableException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/SocketConnectionDoesNotAvailableException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/SocketConnectionDoesNotAvailableException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/SocketReadException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/SocketReadException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/SocketReadException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/SocketReadException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/SocketReadTimeoutException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/SocketReadTimeoutException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/SocketReadTimeoutException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/SocketReadTimeoutException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/SocketUnreadBufferException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/SocketUnreadBufferException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/SocketUnreadBufferException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/SocketUnreadBufferException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/SocketUnsuppoterdSecureConnectionException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/SocketUnsuppoterdSecureConnectionException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/SocketUnsuppoterdSecureConnectionException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/SocketUnsuppoterdSecureConnectionException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/SocketWriteException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/SocketWriteException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Net/Exceptions/SocketWriteException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Net/Exceptions/SocketWriteException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Net/NetClient.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Net/NetClient.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Net/NetClient.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Net/NetClient.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Pop3/Exceptions/Exception.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Pop3/Exceptions/Exception.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Pop3/Exceptions/Exception.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Pop3/Exceptions/Exception.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Pop3/Exceptions/LoginBadCredentialsException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Pop3/Exceptions/LoginBadCredentialsException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Pop3/Exceptions/LoginBadCredentialsException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Pop3/Exceptions/LoginBadCredentialsException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Pop3/Exceptions/NegativeResponseException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Pop3/Exceptions/NegativeResponseException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Pop3/Exceptions/NegativeResponseException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Pop3/Exceptions/NegativeResponseException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Pop3/Exceptions/ResponseException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Pop3/Exceptions/ResponseException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Pop3/Exceptions/ResponseException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Pop3/Exceptions/ResponseException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Pop3/Exceptions/RuntimeException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Pop3/Exceptions/RuntimeException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Pop3/Exceptions/RuntimeException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Pop3/Exceptions/RuntimeException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Pop3/Pop3Client.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Pop3/Pop3Client.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Pop3/Pop3Client.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Pop3/Pop3Client.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Poppassd/Exceptions/Exception.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Poppassd/Exceptions/Exception.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Poppassd/Exceptions/Exception.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Poppassd/Exceptions/Exception.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Poppassd/Exceptions/LoginBadCredentialsException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Poppassd/Exceptions/LoginBadCredentialsException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Poppassd/Exceptions/LoginBadCredentialsException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Poppassd/Exceptions/LoginBadCredentialsException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Poppassd/Exceptions/NegativeResponseException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Poppassd/Exceptions/NegativeResponseException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Poppassd/Exceptions/NegativeResponseException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Poppassd/Exceptions/NegativeResponseException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Poppassd/Exceptions/ResponseException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Poppassd/Exceptions/ResponseException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Poppassd/Exceptions/ResponseException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Poppassd/Exceptions/ResponseException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Poppassd/Exceptions/RuntimeException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Poppassd/Exceptions/RuntimeException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Poppassd/Exceptions/RuntimeException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Poppassd/Exceptions/RuntimeException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Poppassd/PoppassdClient.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Poppassd/PoppassdClient.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Poppassd/PoppassdClient.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Poppassd/PoppassdClient.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Sieve/Exceptions/Exception.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Sieve/Exceptions/Exception.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Sieve/Exceptions/Exception.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Sieve/Exceptions/Exception.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Sieve/Exceptions/LoginBadCredentialsException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Sieve/Exceptions/LoginBadCredentialsException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Sieve/Exceptions/LoginBadCredentialsException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Sieve/Exceptions/LoginBadCredentialsException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Sieve/Exceptions/LoginBadMethodException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Sieve/Exceptions/LoginBadMethodException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Sieve/Exceptions/LoginBadMethodException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Sieve/Exceptions/LoginBadMethodException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Sieve/Exceptions/LoginException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Sieve/Exceptions/LoginException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Sieve/Exceptions/LoginException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Sieve/Exceptions/LoginException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Sieve/Exceptions/NegativeResponseException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Sieve/Exceptions/NegativeResponseException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Sieve/Exceptions/NegativeResponseException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Sieve/Exceptions/NegativeResponseException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Sieve/Exceptions/ResponseException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Sieve/Exceptions/ResponseException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Sieve/Exceptions/ResponseException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Sieve/Exceptions/ResponseException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Sieve/Exceptions/RuntimeException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Sieve/Exceptions/RuntimeException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Sieve/Exceptions/RuntimeException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Sieve/Exceptions/RuntimeException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Sieve/ManageSieveClient.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Sieve/ManageSieveClient.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Sieve/ManageSieveClient.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Sieve/ManageSieveClient.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Smtp/Exceptions/Exception.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Smtp/Exceptions/Exception.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Smtp/Exceptions/Exception.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Smtp/Exceptions/Exception.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Smtp/Exceptions/LoginBadCredentialsException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Smtp/Exceptions/LoginBadCredentialsException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Smtp/Exceptions/LoginBadCredentialsException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Smtp/Exceptions/LoginBadCredentialsException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Smtp/Exceptions/LoginBadMethodException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Smtp/Exceptions/LoginBadMethodException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Smtp/Exceptions/LoginBadMethodException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Smtp/Exceptions/LoginBadMethodException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Smtp/Exceptions/LoginException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Smtp/Exceptions/LoginException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Smtp/Exceptions/LoginException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Smtp/Exceptions/LoginException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Smtp/Exceptions/NegativeResponseException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Smtp/Exceptions/NegativeResponseException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Smtp/Exceptions/NegativeResponseException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Smtp/Exceptions/NegativeResponseException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Smtp/Exceptions/ResponseException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Smtp/Exceptions/ResponseException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Smtp/Exceptions/ResponseException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Smtp/Exceptions/ResponseException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Smtp/Exceptions/RuntimeException.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Smtp/Exceptions/RuntimeException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Smtp/Exceptions/RuntimeException.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Smtp/Exceptions/RuntimeException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Smtp/SmtpClient.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Smtp/SmtpClient.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Smtp/SmtpClient.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Smtp/SmtpClient.php diff --git a/rainloop/v/1.3.9.485/app/libraries/MailSo/Version.php b/rainloop/v/1.3.10.490/app/libraries/MailSo/Version.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/MailSo/Version.php rename to rainloop/v/1.3.10.490/app/libraries/MailSo/Version.php diff --git a/rainloop/v/1.3.9.485/app/libraries/PHP-OAuth2/Client.php b/rainloop/v/1.3.10.490/app/libraries/PHP-OAuth2/Client.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/PHP-OAuth2/Client.php rename to rainloop/v/1.3.10.490/app/libraries/PHP-OAuth2/Client.php diff --git a/rainloop/v/1.3.9.485/app/libraries/PHP-OAuth2/GrantType/AuthorizationCode.php b/rainloop/v/1.3.10.490/app/libraries/PHP-OAuth2/GrantType/AuthorizationCode.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/PHP-OAuth2/GrantType/AuthorizationCode.php rename to rainloop/v/1.3.10.490/app/libraries/PHP-OAuth2/GrantType/AuthorizationCode.php diff --git a/rainloop/v/1.3.9.485/app/libraries/PHP-OAuth2/GrantType/ClientCredentials.php b/rainloop/v/1.3.10.490/app/libraries/PHP-OAuth2/GrantType/ClientCredentials.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/PHP-OAuth2/GrantType/ClientCredentials.php rename to rainloop/v/1.3.10.490/app/libraries/PHP-OAuth2/GrantType/ClientCredentials.php diff --git a/rainloop/v/1.3.9.485/app/libraries/PHP-OAuth2/GrantType/IGrantType.php b/rainloop/v/1.3.10.490/app/libraries/PHP-OAuth2/GrantType/IGrantType.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/PHP-OAuth2/GrantType/IGrantType.php rename to rainloop/v/1.3.10.490/app/libraries/PHP-OAuth2/GrantType/IGrantType.php diff --git a/rainloop/v/1.3.9.485/app/libraries/PHP-OAuth2/GrantType/Password.php b/rainloop/v/1.3.10.490/app/libraries/PHP-OAuth2/GrantType/Password.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/PHP-OAuth2/GrantType/Password.php rename to rainloop/v/1.3.10.490/app/libraries/PHP-OAuth2/GrantType/Password.php diff --git a/rainloop/v/1.3.9.485/app/libraries/PHP-OAuth2/GrantType/RefreshToken.php b/rainloop/v/1.3.10.490/app/libraries/PHP-OAuth2/GrantType/RefreshToken.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/PHP-OAuth2/GrantType/RefreshToken.php rename to rainloop/v/1.3.10.490/app/libraries/PHP-OAuth2/GrantType/RefreshToken.php diff --git a/rainloop/v/1.3.9.485/app/libraries/PHP-OAuth2/README b/rainloop/v/1.3.10.490/app/libraries/PHP-OAuth2/README similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/PHP-OAuth2/README rename to rainloop/v/1.3.10.490/app/libraries/PHP-OAuth2/README diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Account.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Account.php similarity index 98% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Account.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Account.php index ccba363c89..04d1ce09d7 100644 --- a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Account.php +++ b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Account.php @@ -175,7 +175,7 @@ public function GetAuthToken() '0', // PasswordIsXOAuth2 $this->sSignMeToken, $this->sParentEmail, - \microtime(true).\rand(1000, 9999) + \RainLoop\Utils::GetShortToken() )); } } diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Actions.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Actions.php similarity index 94% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Actions.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Actions.php index ee4c2c0187..851628e23f 100644 --- a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Actions.php +++ b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Actions.php @@ -315,29 +315,20 @@ private function compileLogFileName() return $sFileName; } - private function generateSpecAuthKey() - { - return 'Account/SpecAuthToken/'.$this->GetSpecAuthToken().'/'.\RainLoop\Utils::GetConnectionToken().'/'.self::AUTH_TOKEN_KEY.'/'; - } - /** * @param \RainLoop\Account $oAccount - * @param bool $bRandomToken = false * * @return void */ - public function SetAuthToken($oAccount, $bRandomToken = false) + public function SetAuthToken($oAccount) { if ($oAccount) { - $sSpecAuthToken = '_'.\md5(APP_SALT.\RainLoop\Utils::GetConnectionToken().$oAccount->Email(). - ($bRandomToken ? microtime(true).rand(1000, 9999) : '').APP_SALT); + $sSpecAuthToken = '_'.$oAccount->GetAuthToken(); $this->SetSpecAuthToken($sSpecAuthToken); - $this->CacherFile()->Set($this->generateSpecAuthKey(), $oAccount->GetAuthToken()); - \RainLoop\Utils::SetCookie(self::AUTH_SPEC_TOKEN_KEY, $sSpecAuthToken, 0, '/', null, null, true); - + if ($oAccount->SignMe() && 0 < \strlen($oAccount->SignMeToken())) { \RainLoop\Utils::SetCookie(self::AUTH_SIGN_ME_TOKEN_KEY, $oAccount->SignMeToken(), @@ -378,7 +369,8 @@ private function setAdminAuthToken($sToken) */ private function getAuthToken() { - return $this->CacherFile()->Get($this->generateSpecAuthKey()); + $sToken = $this->GetSpecAuthToken(); + return $sToken && '_' === \substr($sToken, 0, 1) ? \substr($sToken, 1) : ''; } /** @@ -389,14 +381,6 @@ private function getAdminAuthToken() return \RainLoop\Utils::GetCookie(self::AUTH_ADMIN_TOKEN_KEY, ''); } - /** - * @return void - */ - public function ClearAuthToken() - { - $this->CacherFile()->Delete($this->generateSpecAuthKey()); - } - /** * @return void */ @@ -723,7 +707,7 @@ public function Logger() if (!@is_dir($sLogFileDir)) { - @mkdir($sLogFileDir, 0777, true); + @mkdir($sLogFileDir, 0755, true); } $this->oLogger->Add(\MailSo\Log\Drivers\File::NewInstance($sLogFileFullPath) @@ -738,8 +722,10 @@ public function Logger() $oHttp = $this->Http(); $this->oLogger->Write( - $oHttp->GetMethod().': '.$oHttp->GetHost().$oHttp->GetServer('REQUEST_URI', ''), + $oHttp->GetMethod().': '.$oHttp->GetHost(false, false).$oHttp->GetServer('REQUEST_URI', ''), \MailSo\Log\Enumerations\Type::NOTE, 'REQUEST'); + + $this->oLogger->Write('[PHP:'.PHP_VERSION.'][RL:'.APP_VERSION.']'); } } @@ -786,17 +772,19 @@ public function IsAdminLoggined($bThrowExceptionOnFalse = true) /** * @param string $sToken * @param bool $bThrowExceptionOnFalse = true + * @param bool $bValidateShortToken = true * * @return \RainLoop\Account|bool * @throws \RainLoop\Exceptions\ClientException */ - public function GetAccountFromCustomToken($sToken, $bThrowExceptionOnFalse = true) + public function GetAccountFromCustomToken($sToken, $bThrowExceptionOnFalse = true, $bValidateShortToken = true) { $oResult = false; if (!empty($sToken)) { $aAccountHash = \RainLoop\Utils::DecodeKeyValues($sToken); - if (!empty($aAccountHash[0]) && 'token' === $aAccountHash[0] && 8 === \count($aAccountHash)) + if (!empty($aAccountHash[0]) && 'token' === $aAccountHash[0] && 8 === \count($aAccountHash) && !empty($aAccountHash[7]) && + (!$bValidateShortToken || \RainLoop\Utils::GetShortToken() === $aAccountHash[7])) { $oAccount = $this->LoginProvider()->Provide( $aAccountHash[1], $aAccountHash[2], $aAccountHash[3], empty($aAccountHash[5]) ? '' : $aAccountHash[5]); @@ -857,11 +845,11 @@ private function getAccountFromToken($bThrowExceptionOnFalse = true) */ public function AppData($bAdmin, $sAuthAccountHash = '') { - if (0 < \strlen($sAuthAccountHash) && \preg_match('/[^_a-zA-Z0-9]/', $sAuthAccountHash)) + if (0 < \strlen($sAuthAccountHash) && \preg_match('/[^_\-\.a-zA-Z0-9]/', $sAuthAccountHash)) { $sAuthAccountHash = ''; } - + $oConfig = $this->Config(); $aResult = array( @@ -878,6 +866,7 @@ public function AppData($bAdmin, $sAuthAccountHash = '') 'CustomLoginLink' => $oConfig->Get('labs', 'custom_login_link', ''), 'CustomLogoutLink' => $oConfig->Get('labs', 'custom_logout_link', ''), 'AllowAdditionalAccounts' => (bool) $oConfig->Get('webmail', 'allow_additional_accounts', true), + 'AllowIdentities' => (bool) $oConfig->Get('webmail', 'allow_identities', true), 'DetermineUserLanguage' => (bool) $oConfig->Get('labs', 'determine_user_language', false), 'AllowCustomLogin' => (bool) $oConfig->Get('login', 'allow_custom_login', false), 'LoginDefaultDomain' => $oConfig->Get('login', 'default_domain', ''), @@ -1044,6 +1033,10 @@ public function AppData($bAdmin, $sAuthAccountHash = '') $aResult['ParentEmail'] = $oAccount->ParentEmail(); } + + $aResult['InterfaceAnimation'] = \RainLoop\Enumerations\InterfaceAnimation::NONE === $aResult['InterfaceAnimation'] + ? $aResult['InterfaceAnimation'] : \RainLoop\Enumerations\InterfaceAnimation::NORMAL; + if (!in_array($aResult['CustomThemeType'], array( \RainLoop\Enumerations\CustomThemeType::LIGHT, \RainLoop\Enumerations\CustomThemeType::DARK ))) @@ -1145,11 +1138,10 @@ private function loginErrorDelay() } /** * @param \RainLoop\Account $oAccount - * @param bool $bRandomToken = false */ - public function AuthProcess($oAccount, $bRandomToken = false) + public function AuthProcess($oAccount) { - $this->SetAuthToken($oAccount, $bRandomToken); + $this->SetAuthToken($oAccount); if ($oAccount instanceof \RainLoop\Account) { @@ -1173,10 +1165,7 @@ public function AuthProcess($oAccount, $bRandomToken = false) */ public function LoginProcess($sEmail, $sLogin, $sPassword, $sSignMeToken = '') { - $sSpecAuthToken = '_'.\md5(APP_SALT.\RainLoop\Utils::GetConnectionToken().$sEmail.APP_SALT); - $this->SetSpecAuthToken($sSpecAuthToken); - - $this->Plugins()->RunHook('filter.login-params', array(&$sEmail, &$sLogin, &$sPassword)); + $this->Plugins()->RunHook('filter.login-credentials', array(&$sEmail, &$sLogin, &$sPassword)); $oAccount = $this->LoginProvider()->Provide($sEmail, $sLogin, $sPassword, $sSignMeToken); if (!($oAccount instanceof \RainLoop\Account)) @@ -1226,7 +1215,7 @@ public function LoginProcess($sEmail, $sLogin, $sPassword, $sSignMeToken = '') $this->loginErrorDelay(); throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::AuthError, $oException); } - + return $oAccount; } @@ -1284,7 +1273,7 @@ public function DoLogin() */ public function GetAccounts($oAccount) { - $sParentEmail = 0 < \strlen($oAccount->ParentEmail()) ? $oAccount->ParentEmail() : $oAccount->Email(); + $sParentEmail = $oAccount->ParentEmailHelper(); $sAccounts = $this->StorageProvider()->Get(null, \RainLoop\Providers\Storage\Enumerations\StorageType::NOBODY, 'Webmail/Accounts/'.$sParentEmail.'/Array', null); @@ -1305,6 +1294,54 @@ public function GetAccounts($oAccount) return $aAccounts; } + /** + * @param \RainLoop\Account $oAccount + * + * @return array + */ + public function GetIdentities($oAccount) + { + $aIdentities = array(); + if ($oAccount) + { + $aSubIdentities = array(); + $oSettings = $this->SettingsProvider()->Load($oAccount); + if ($oSettings) + { + $sData = $oSettings->GetConf('Identities', ''); + if ('' !== $sData && '[' === \substr($sData, 0, 1)) + { + $aSubIdentities = @\json_decode($sData, true); + $aSubIdentities = \is_array($aSubIdentities) ? $aSubIdentities : array(); + } + } + + if (0 < \count($aSubIdentities)) + { + foreach ($aSubIdentities as $aItem) + { + if (isset($aItem['Id'], $aItem['Email'], $aItem['Name'], $aItem['ReplyTo'], $aItem['Bcc'])) + { + $oItem = \RainLoop\Identity::NewInstance($aItem['Id'], $aItem['Email'], + $aItem['Name'], $aItem['ReplyTo'], $aItem['Bcc']); + + $aIdentities[] = $oItem; + } + } + } + + if (0 === \count($aIdentities)) + { + $aIdentities[] = \RainLoop\Identity::NewInstance($oAccount->Email(), $oAccount->Email(), + $oSettings->GetConf('DisplayName', ''), + $oSettings->GetConf('ReplyTo', '') + ); + } + } + + return $aIdentities; + } + /** * @param \RainLoop\Account $oAccount * @param array $aAccounts = array() @@ -1313,7 +1350,7 @@ public function GetAccounts($oAccount) */ public function SetAccounts($oAccount, $aAccounts = array()) { - $sParentEmail = 0 < \strlen($oAccount->ParentEmail()) ? $oAccount->ParentEmail() : $oAccount->Email(); + $sParentEmail = $oAccount->ParentEmailHelper(); if (!\is_array($aAccounts) || 0 === \count($aAccounts)) { $this->StorageProvider()->Clear(null, \RainLoop\Providers\Storage\Enumerations\StorageType::NOBODY, @@ -1326,6 +1363,30 @@ public function SetAccounts($oAccount, $aAccounts = array()) } } + /** + * @param \RainLoop\Account $oAccount + * @param array $aIdentities = array() + * + * @return array + */ + public function SetIdentities($oAccount, $aIdentities = array()) + { + $oSettings = $this->SettingsProvider()->Load($oAccount); + if ($oSettings) + { + $aResult = array(); + foreach ($aIdentities as $oItem) + { + $aResult[] = $oItem->ToSimpleJSON(); + } + + $oSettings->SetConf('Identities', @\json_encode($aResult)); + return $this->SettingsProvider()->Save($oAccount, $oSettings); + } + + return false; + } + /** * @return array * @@ -1333,13 +1394,13 @@ public function SetAccounts($oAccount, $aAccounts = array()) */ public function DoAccountAdd() { - $oAccount = $this->getAccountFromToken(); - if (!$this->Config()->Get('webmail', 'allow_additional_accounts', true)) { return $this->FalseResponse(__FUNCTION__); } + $oAccount = $this->getAccountFromToken(); + $sEmail = \trim($this->GetActionParam('Email', '')); $sLogin = \trim($this->GetActionParam('Login', '')); $sPassword = $this->GetActionParam('Password', ''); @@ -1395,13 +1456,13 @@ public function DoAccountAdd() */ public function DoAccountDelete() { - $oAccount = $this->getAccountFromToken(); - if (!$this->Config()->Get('webmail', 'allow_additional_accounts', true)) { return $this->FalseResponse(__FUNCTION__); } + $oAccount = $this->getAccountFromToken(); + $sParentEmail = 0 < \strlen($oAccount->ParentEmail()) ? $oAccount->ParentEmail() : $oAccount->Email(); $sEmailToDelete = \strtolower(\trim($this->GetActionParam('EmailToDelete', ''))); @@ -1422,25 +1483,140 @@ public function DoAccountDelete() return $this->FalseResponse(__FUNCTION__); } + + /** + * @return array + * + * @throws \MailSo\Base\Exceptions\Exception + */ + public function DoIdentityUpdate() + { + if (!$this->Config()->Get('webmail', 'allow_identities', true)) + { + return $this->FalseResponse(__FUNCTION__); + } + + $oAccount = $this->getAccountFromToken(); + + $sId = \trim($this->GetActionParam('Id', '')); + $sEmail = \trim($this->GetActionParam('Email', '')); + $sName = \trim($this->GetActionParam('Name', '')); + $sReplyTo = \trim($this->GetActionParam('ReplyTo', '')); + $sBcc = \trim($this->GetActionParam('Bcc', '')); + + if ($sId === $oAccount->Email()) + { + $sEmail = $oAccount->Email(); + + $oSettings = $this->SettingsProvider()->Load($oAccount); + if ($oSettings) + { + $oSettings->SetConf('DisplayName', $sName); + $oSettings->SetConf('ReplyTo', $sReplyTo); + + $this->SettingsProvider()->Save($oAccount, $oSettings); + } + } + + if (empty($sEmail)) + { + throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::UnknownError); + } + + $oEditIdentity = null; + $aIdentities = $this->GetIdentities($oAccount); + if (0 < \strlen($sId)) + { + foreach ($aIdentities as &$oItem) + { + if ($oItem && $sId === $oItem->Id()) + { + $oEditIdentity =& $oItem; + break; + } + } + } + else + { + $sId = \md5($sEmail.\microtime(true)); + } + + if (!$oEditIdentity) + { + $aIdentities[] = \RainLoop\Identity::NewInstance($sId, $sEmail, $sName, $sReplyTo, $sBcc); + } + else + { + $oEditIdentity + ->SetEmail($sEmail) + ->SetName($sName) + ->SetReplyTo($sReplyTo) + ->SetBcc($sBcc) + ; + } + + return $this->DefaultResponse(__FUNCTION__, $this->SetIdentities($oAccount, $aIdentities)); + } + + /** + * @return array + * + * @throws \MailSo\Base\Exceptions\Exception + */ + public function DoIdentityDelete() + { + if (!$this->Config()->Get('webmail', 'allow_identities', true)) + { + return $this->FalseResponse(__FUNCTION__); + } + + $oAccount = $this->getAccountFromToken(); + + $sId = \trim($this->GetActionParam('IdToDelete', '')); + if (empty($sId) || $sId === $oAccount->Email()) + { + throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::UnknownError); + } + + $aNew = array(); + $aIdentities = $this->GetIdentities($oAccount); + foreach ($aIdentities as $oItem) + { + if ($oItem && $sId !== $oItem->Id()) + { + $aNew[] = $oItem; + } + } + + return $this->DefaultResponse(__FUNCTION__, $this->SetIdentities($oAccount, $aNew)); + } /** * @return array * * @throws \MailSo\Base\Exceptions\Exception */ - public function DoAccounts() + public function DoAccountsAndIdentities() { $oAccount = $this->getAccountFromToken(); + $mAccounts = false; if ($this->Config()->Get('webmail', 'allow_additional_accounts', true)) { - $aAccounts = $this->GetAccounts($oAccount); - $aAccounts = \array_keys($aAccounts); + $mAccounts = $this->GetAccounts($oAccount); + $mAccounts = \array_keys($mAccounts); + } - return $this->DefaultResponse(__FUNCTION__, $aAccounts); + $mIdentities = false; + if ($this->Config()->Get('webmail', 'allow_identities', true)) + { + $mIdentities = $this->GetIdentities($oAccount); } - return $this->FalseResponse(__FUNCTION__); + return $this->DefaultResponse(__FUNCTION__, array( + 'Accounts' => $mAccounts, + 'Identities' => $mIdentities + )); } /** @@ -1458,8 +1634,6 @@ public function DoLogout() 'SignMe/UserToken/'.$oAccount->SignMeToken()); } - $this->ClearAuthToken(); - return $this->TrueResponse(__FUNCTION__); } @@ -1468,8 +1642,6 @@ public function DoLogout() */ public function DoAppDelayStart() { -// $oAccount = $this->getAccountFromToken(); - \RainLoop\Utils::UpdateConnectionToken(); $bUserCache = false; @@ -1649,6 +1821,8 @@ public function DoAdminSettingsUpdate() $this->setConfigFromParams($oConfig, 'LoginDefaultDomain', 'login', 'default_domain', 'string'); $this->setConfigFromParams($oConfig, 'AllowAdditionalAccounts', 'webmail', 'allow_additional_accounts', 'bool'); + $this->setConfigFromParams($oConfig, 'AllowIdentities', 'webmail', 'allow_identities', 'bool'); + $this->setConfigFromParams($oConfig, 'DetermineUserLanguage', 'labs', 'determine_user_language', 'bool'); $this->setConfigFromParams($oConfig, 'Title', 'webmail', 'title', 'string'); @@ -2038,7 +2212,9 @@ private function rainloopRepo($bAdditionalOnly = false) private function rainLoopUpdatable() { - return @file_exists(APP_INDEX_ROOT_PATH.'index.php') && @is_writable(APP_INDEX_ROOT_PATH.'index.php'); + return @file_exists(APP_INDEX_ROOT_PATH.'index.php') && + @is_writable(APP_INDEX_ROOT_PATH.'index.php') && + @is_writable(APP_INDEX_ROOT_PATH.'rainloop/'); } private function rainLoopCoreAccess() @@ -2152,7 +2328,7 @@ private function getRepositoryData(&$bReal, &$bRainLoopUpdatable) { $bRainLoopUpdatable = $this->rainLoopUpdatable(); $bCoreAccess = $this->rainLoopCoreAccess(); - + $aResult = $this->getRepositoryDataByUrl($this->rainloopRepo(), $bReal); $sAddRepo = $this->rainloopRepo(true); @@ -2230,9 +2406,11 @@ private function getRepositoryData(&$bReal, &$bRainLoopUpdatable) $aItem['compare'] = \version_compare($aItem['installed'], $aItem['version'], '<'); $aItem['canBeDeleted'] = '' !== $aItem['installed'] && 'plugin' === $aItem['type']; $aItem['canBeUpdated'] = $aItem['compare']; + $aItem['canBeInstalled'] = true; if (!$bRainLoopUpdatable && 'plugin' !== $aItem['type']) { + $aItem['canBeInstalled'] = false; $aItem['canBeUpdated'] = false; $aItem['compare'] = false; } @@ -2325,7 +2503,7 @@ public function DoAdminPackageInstall() } } } - + $sTmp = ''; $bResult = false; if ('' !== $sRealFile) @@ -2338,6 +2516,8 @@ public function DoAdminPackageInstall() $iCode = 0; $sContentType = ''; + @\set_time_limit(60); + $oHttp = \MailSo\Base\Http::SingletonInstance(); $bResult = $oHttp->SaveUrlToFile($sUrl, $pDest, $sTmp, $sContentType, $iCode, $this->Logger(), 60); if (!$bResult) @@ -2379,12 +2559,23 @@ public function DoAdminPackageInstall() file_exists($sTmpFolder.'/data/VERSION') && is_dir($sTmpFolder.'/rainloop/')) { - \MailSo\Base\Utils::CopyDir($sTmpFolder.'/rainloop/', APP_INDEX_ROOT_PATH.'rainloop/'); - - copy($sTmpFolder.'/data/VERSION', APP_DATA_FOLDER_PATH.'VERSION'); - copy($sTmpFolder.'/index.php', APP_INDEX_ROOT_PATH.'index.php'); + $sNewVersion = file_get_contents($sTmpFolder.'/data/VERSION'); + if ($sNewVersion && !is_dir(APP_INDEX_ROOT_PATH.'rainloop/v/'.$sNewVersion)) + { + \MailSo\Base\Utils::CopyDir($sTmpFolder.'/rainloop/', APP_INDEX_ROOT_PATH.'rainloop/'); + + copy($sTmpFolder.'/data/VERSION', APP_DATA_FOLDER_PATH.'VERSION'); + if (md5_file($sTmpFolder.'/index.php') !== md5_file(APP_INDEX_ROOT_PATH.'index.php')) + { + copy($sTmpFolder.'/index.php', APP_INDEX_ROOT_PATH.'index.php'); + } - $bResult = true; + $bResult = true; + } + else + { + $this->Logger()->WriteDump($sNewVersion.' version already installed', \MailSo\Log\Enumerations\Type::ERROR, 'INSTALLER'); + } } else if ($bResult) { @@ -2393,6 +2584,10 @@ public function DoAdminPackageInstall() \MailSo\Base\Utils::RecRmDir($sTmpFolder); } + else + { + $this->Logger()->Write('Cannot create tmp folder: '.$sTmpFolder, \MailSo\Log\Enumerations\Type::ERROR, 'INSTALLER'); + } } else { @@ -2760,16 +2955,18 @@ public function DoJsError() if (0 < strlen($sMessage)) { $sFileName = $this->GetActionParam('FileName', ''); - $iLineNo = $this->GetActionParam('LineNo', ''); + $sLineNo = $this->GetActionParam('LineNo', ''); $sLocation = $this->GetActionParam('Location', ''); $sHtmlCapa = $this->GetActionParam('HtmlCapa', ''); + $sTimeOnPage = $this->GetActionParam('TimeOnPage', ''); $oHttp = $this->Http(); - $this->Logger()->Write($sMessage.' ('.$sFileName.' ~ '.$iLineNo.')', \MailSo\Log\Enumerations\Type::ERROR, 'JS'); + $this->Logger()->Write($sMessage.' ('.$sFileName.' ~ '.$sLineNo.')', \MailSo\Log\Enumerations\Type::ERROR, 'JS'); $this->Logger()->WriteDump(array( 'Location' => $sLocation, 'Capability' => $sHtmlCapa, + 'TimeOnPage' => $sTimeOnPage, 'HTTP_USER_AGENT' => $oHttp->GetServer('HTTP_USER_AGENT', ''), 'HTTP_ACCEPT_ENCODING' => $oHttp->GetServer('HTTP_ACCEPT_ENCODING', ''), 'HTTP_ACCEPT_LANGUAGE' => $oHttp->GetServer('HTTP_ACCEPT_LANGUAGE', '') @@ -3095,6 +3292,11 @@ public function DoFolderInformation() throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::MailServerError, $oException); } + if (\is_array($aInboxInformation)) + { + $aInboxInformation['Version'] = APP_VERSION; + } + return $this->DefaultResponse(__FUNCTION__, $aInboxInformation); } @@ -3200,6 +3402,7 @@ public function DoMessageList() */ private function buildMessage($oAccount, $bWithDraftInfo = true, $sMessageID = '') { + $sFrom = $this->GetActionParam('From', ''); $sTo = $this->GetActionParam('To', ''); $sCc = $this->GetActionParam('Cc', ''); $sBcc = $this->GetActionParam('Bcc', ''); @@ -3225,22 +3428,29 @@ private function buildMessage($oAccount, $bWithDraftInfo = true, $sMessageID = ' $oMessage->SetXMailer('RainLoop/'.APP_VERSION); $oSettings = $this->SettingsProvider()->Load($oAccount); - $sDisplayName = \trim($oSettings->GetConf('DisplayName', '')); - $sReplyTo = \trim($oSettings->GetConf('ReplyTo', '')); - - $oMessage - ->SetFrom(\MailSo\Mime\Email::NewInstance($oAccount->Email(), $sDisplayName)) - ->SetSubject($sSubject) - ; - if (!empty($sReplyTo)) + if ($this->Config()->Get('webmail', 'allow_identities', true)) + { + $oMessage->SetFrom(\MailSo\Mime\Email::Parse($sFrom)); + } + else { - $oReplyTo = \MailSo\Mime\EmailCollection::NewInstance($sReplyTo); - if ($oReplyTo && $oReplyTo->Count()) + $sDisplayName = \trim($oSettings->GetConf('DisplayName', '')); + $sReplyTo = \trim($oSettings->GetConf('ReplyTo', '')); + + $oMessage->SetFrom(\MailSo\Mime\Email::NewInstance($oAccount->Email(), $sDisplayName)); + + if (!empty($sReplyTo)) { - $oMessage->SetReplyTo($oReplyTo); + $oReplyTo = \MailSo\Mime\EmailCollection::NewInstance($sReplyTo); + if ($oReplyTo && $oReplyTo->Count()) + { + $oMessage->SetReplyTo($oReplyTo); + } } } + + $oMessage->SetSubject($sSubject); $oToEmails = \MailSo\Mime\EmailCollection::NewInstance($sTo); if ($oToEmails && $oToEmails->Count()) @@ -3437,27 +3647,42 @@ public function DoSendMessage() $oRcpt = $oMessage->GetRcpt(); if ($oRcpt && 0 < $oRcpt->Count()) { + $this->Plugins()->RunHook('filter.message-rcpt', array($oAccount, &$oRcpt)); + try { - $sHostName = \function_exists('gethostname') ? \gethostname() : 'localhost'; - $oSmtpClient = \MailSo\Smtp\SmtpClient::NewInstance()->SetLogger($this->Logger()); - $oSmtpClient->Connect($oAccount->Domain()->OutHost(), $oAccount->Domain()->OutPort(), - $sHostName, $oAccount->Domain()->OutSecure()); + $aSmtpCredentials = array( + 'Ehlo' => \function_exists('gethostname') ? \gethostname() : 'localhost', + 'Host' => $oAccount->Domain()->OutHost(), + 'Port' => $oAccount->Domain()->OutPort(), + 'Secure' => $oAccount->Domain()->OutSecure(), + 'UseAuth' => $oAccount->Domain()->OutAuth(), + 'From' => $oAccount->Email(), + 'Login' => $oAccount->Login(), + 'Password' => $oAccount->Password(), + 'UseShortLogin' => $oAccount->Domain()->OutShortLogin(), + 'HiddenRcpt' => array() + ); - if ($oAccount->Domain()->OutAuth()) + $this->Plugins()->RunHook('filter.smtp-credentials', array($oAccount, &$aSmtpCredentials)); + + $oSmtpClient->Connect($aSmtpCredentials['Host'], $aSmtpCredentials['Port'], + $aSmtpCredentials['Ehlo'], $aSmtpCredentials['Secure']); + + if ($aSmtpCredentials['UseAuth']) { - $sLogin = $oAccount->Login(); - if ($oAccount->Domain()->OutShortLogin()) + $sLogin = $aSmtpCredentials['Login']; + if ($aSmtpCredentials['UseShortLogin']) { $sLogin = \MailSo\Base\Utils::GetAccountNameFromEmail($sLogin); } - $oSmtpClient->Login($sLogin, $oAccount->Password()); + $oSmtpClient->Login($sLogin, $aSmtpCredentials['Password']); } - $oSmtpClient->MailFrom($oAccount->Email()); + $oSmtpClient->MailFrom($aSmtpCredentials['From']); $aRcpt =& $oRcpt->GetAsArray(); foreach ($aRcpt as /* @var $oEmail \MailSo\Mime\Email */ $oEmail) @@ -3465,6 +3690,17 @@ public function DoSendMessage() $oSmtpClient->Rcpt($oEmail->GetEmail()); } + if (isset($aSmtpCredentials['HiddenRcpt']) && is_array($aSmtpCredentials['HiddenRcpt'])) + { + foreach ($aSmtpCredentials['HiddenRcpt'] as $sEmail) + { + if (\preg_match('/^[^@\s]+@[^@\s]+$/', $sEmail)) + { + $oSmtpClient->Rcpt($sEmail); + } + } + } + $oSmtpClient->DataWithStream($rMessageStream); $oSmtpClient->LogoutAndDisconnect(); @@ -4888,7 +5124,7 @@ private function setupInformation() 'pdo-sqlite' => \is_array($mPdoDrivers) ? \in_array('sqlite', $mPdoDrivers) : false, 'pdo-mysql' => \is_array($mPdoDrivers) ? \in_array('mysql', $mPdoDrivers) : false ), - 'php' => \phpversion() + 'php' => PHP_VERSION ); $aResult['domains'] = $this->DomainProvider()->Count(); @@ -5273,7 +5509,13 @@ protected function responseObject($mResponse, $sParent = '', $aParameters = arra { $bHook = true; $sClassName = \get_class($mResponse); - if ('MailSo\Mail\Message' === $sClassName) + $bHasSimpleJsonFunc = \method_exists($mResponse, 'ToSimpleJSON'); + + if ($bHasSimpleJsonFunc) + { + $mResult = \array_merge($this->objectData($mResponse, $sParent, $aParameters), $mResponse->ToSimpleJSON()); + } + else if ('MailSo\Mail\Message' === $sClassName) { $oAccount = $this->getAccountFromToken(false); @@ -5418,22 +5660,6 @@ protected function responseObject($mResponse, $sParent = '', $aParameters = arra 'Emails' => $mResponse->Emails )); } - else if ('RainLoop\Domain' === $sClassName) - { - $mResult = \array_merge($this->objectData($mResponse, $sParent, $aParameters), array( - 'Name' => $mResponse->Name(), - 'IncHost' => $mResponse->IncHost(), - 'IncPort' => $mResponse->IncPort(), - 'IncSecure' => $mResponse->IncSecure(), - 'IncShortLogin' => $mResponse->IncShortLogin(), - 'OutHost' => $mResponse->OutHost(), - 'OutPort' => $mResponse->OutPort(), - 'OutSecure' => $mResponse->OutSecure(), - 'OutShortLogin' => $mResponse->OutShortLogin(), - 'OutAuth' => $mResponse->OutAuth(), - 'WhiteList' => $mResponse->WhiteList() - )); - } else if ('MailSo\Mail\Attachment' === $sClassName) { $oAccount = $this->getAccountFromToken(false); @@ -5539,8 +5765,6 @@ protected function responseObject($mResponse, $sParent = '', $aParameters = arra 'IsThreadsSupported' => $mResponse->IsThreadsSupported, 'SystemFolders' => isset($mResponse->SystemFolders) && \is_array($mResponse->SystemFolders) ? $mResponse->SystemFolders : array() )); - - } else if ($mResponse instanceof \MailSo\Base\Collection) { diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Config/AbstractConfig.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Config/AbstractConfig.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Config/AbstractConfig.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Config/AbstractConfig.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Config/Application.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Config/Application.php similarity index 96% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Config/Application.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Config/Application.php index 51d1de4942..634d22abd0 100644 --- a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Config/Application.php +++ b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Config/Application.php @@ -1,223 +1,224 @@ -Set('security', 'admin_password', \md5(APP_SALT.$sPassword.APP_SALT)); - } - - /** - * @param string $sPassword - * - * @return bool - */ - public function ValidatePassword($sPassword) - { - $sPassword = (string) $sPassword; - $sConfigPassword = (string) $this->Get('security', 'admin_password', ''); - - return 0 < \strlen($sPassword) && - ($sPassword === $sConfigPassword || \md5(APP_SALT.$sPassword.APP_SALT) === $sConfigPassword); - } - - /** - * @return bool - */ - public function Save() - { - $this->Set('version', 'current', APP_VERSION); - $this->Set('version', 'saved', \gmdate('r')); - - return parent::Save(); - } - - /** - * @return array - */ - protected function defaultValues() - { - return array( - 'webmail' => array( - - 'title' => array('RainLoop Webmail', 'Text displayed as page title'), - - 'theme' => array('Default', 'Theme used by default'), - 'allow_themes' => array(true, 'Allow theme selection on settings screen'), - 'allow_custom_theme' => array(true, ''), - - 'language' => array('en', 'Language used by default'), - 'allow_languages_on_settings' => array(true, 'Allow language selection on settings screen'), - - 'allow_additional_accounts' => array(true, ''), - - 'use_preview_pane' => array(true, 'Whether message preview pane should be used'), - - 'messages_per_page' => array(20, ' Number of messages displayed on page by default'), - - 'editor_default_type' => array('Html', 'Editor mode used by default (Html or Plain)'), - - 'attachment_size_limit' => array(5, - 'File size limit (MB) for file upload on compose screen -0 for unlimited.') - ), - - 'security' => array( - 'csrf_protection' => array(true, - 'Enable CSRF protection (http://en.wikipedia.org/wiki/Cross-site_request_forgery)'), - - 'custom_server_signature' => array('RainLoop'), - 'admin_login' => array('admin', 'Login and password for web admin panel'), - 'admin_password' => array('12345') - ), - - 'login' => array( - - 'allow_custom_login' => array(false, - 'Enable additional Login field on webmail login screen'), - - 'default_domain' => array('', ''), - - 'allow_languages_on_login' => array(true, - 'Allow language selection on webmail login screen'), - - 'sign_me_auto' => array(\RainLoop\Enumerations\SignMeType::DEFAILT_OFF, - 'This option allows webmail to remember the logged in user -once they closed the browser window. - -Values: - "DefaultOff" - can be used, disabled by default; - "DefaultOn" - can be used, enabled by default; - "Unused" - cannot be used') - ), - - 'plugins' => array( - 'enable' => array(false, 'Enable plugin support'), - 'enabled_list' => array('', 'List of enabled plugins'), - ), - - 'logs' => array( - - 'enable' => array(false, 'Enable logging'), - - 'write_on_error_only' => array(false, 'Logs entire request only if error occured'), - - 'filename' => array('log-{date:Y-m-d}.txt', - 'Log filename. -For security reasons, some characters are removed from filename. -Allows for pattern-based folder creation (see examples below). - -Patterns: - {date:Y-m-d} - Replaced by pattern-based date - Detailed info: http://www.php.net/manual/en/function.date.php - {user:email} - Replaced by user\'s email address - If user is not logged in, value is set to "unknown" - {user:login} - Replaced by user\'s login - If user is not logged in, value is set to "unknown" - {user:domain} - Replaced by user\'s domain name - If user is not logged in, value is set to "unknown" - {user:uid} - Replaced by user\'s UID regardless of account currently used - -Examples: - filename = "log-{date:Y-m-d}.txt" - filename = "{date:Y-m-d}/{user:domain}/{user:email}_{user:uid}.log" - filename = "{user:email}-{date:Y-m-d}.txt"') - ), - - 'debug' => array( - 'enable' => array(false, 'Special option required for development purposes'), - ), - - 'version' => array( - 'current' => array(''), - 'saved' => array('') - ), - - 'social' => array( - 'google_enable' => array(false, 'Google'), - 'google_client_id' => array(''), - 'google_client_secret' => array(''), - - 'fb_enable' => array(false, 'Facebook'), - 'fb_app_id' => array(''), - 'fb_app_secret' => array(''), - - 'twitter_enable' => array(false, 'Twitter'), - 'twitter_consumer_key' => array(''), - 'twitter_consumer_secret' => array(''), - - 'dropbox_enable' => array(false, 'Dropbox'), - 'dropbox_api_key' => array(''), - ), - - 'cache' => array( - 'enable' => array(true, - 'The section controls caching of the entire application. - -Enables caching in the system'), - - 'index' => array('v1', 'Additional caching key. If changed, cache is purged'), - - 'fast_cache_driver' => array('files', 'Can be: files, APC, memcache'), - 'fast_cache_index' => array('v1', 'Additional caching key. If changed, fast cache is purged'), - - 'http' => array(true, 'Browser-level cache. If enabled, caching is maintainted without using files'), - 'server_uids' => array(false, 'Caching message UIDs when searching and sorting (threading)') - ), - - 'labs' => array( - 'ignore_folders_subscription' => array(false, - 'Experimental settings. Handle with care. -'), - 'allow_message_append' => array(false), - 'date_from_headers' => array(false), - 'cache_system_data' => array(true), - 'use_app_debug_js' => array(false), - 'use_app_debug_css' => array(false), - 'login_fault_delay' => array(1), - 'log_ajax_response_write_limit' => array(300), - 'suggestions_limit' => array(50), - 'determine_user_language' => array(false), - 'use_imap_sort' => array(false), - 'use_imap_list_status' => array(false), - 'use_imap_list_subscribe' => array(true), - 'use_imap_thread' => array(true), - 'use_imap_move' => array(true), - 'use_imap_auth_plain' => array(false), - 'custom_repo' => array(''), - 'additional_repo' => array(''), - 'cdn_static_domain' => array(''), - 'in_iframe' => array(false), - 'custom_login_link' => array(''), - 'custom_logout_link' => array(''), - 'allow_contacts' => array(true), - 'allow_external_login' => array(false), - 'allow_admin_panel' => array(true), - 'fast_cache_memcache_host' => array('127.0.0.1'), - 'fast_cache_memcache_port' => array(11211), - 'fast_cache_memcache_expire' => array(43200), - 'usage_statistics' => array(true), - 'dev_email' => array(''), - 'dev_login' => array(''), - 'dev_password' => array('') - ) - ); - } -} +Set('security', 'admin_password', \md5(APP_SALT.$sPassword.APP_SALT)); + } + + /** + * @param string $sPassword + * + * @return bool + */ + public function ValidatePassword($sPassword) + { + $sPassword = (string) $sPassword; + $sConfigPassword = (string) $this->Get('security', 'admin_password', ''); + + return 0 < \strlen($sPassword) && + ($sPassword === $sConfigPassword || \md5(APP_SALT.$sPassword.APP_SALT) === $sConfigPassword); + } + + /** + * @return bool + */ + public function Save() + { + $this->Set('version', 'current', APP_VERSION); + $this->Set('version', 'saved', \gmdate('r')); + + return parent::Save(); + } + + /** + * @return array + */ + protected function defaultValues() + { + return array( + 'webmail' => array( + + 'title' => array('RainLoop Webmail', 'Text displayed as page title'), + + 'theme' => array('Default', 'Theme used by default'), + 'allow_themes' => array(true, 'Allow theme selection on settings screen'), + 'allow_custom_theme' => array(true, ''), + + 'language' => array('en', 'Language used by default'), + 'allow_languages_on_settings' => array(true, 'Allow language selection on settings screen'), + + 'allow_additional_accounts' => array(true, ''), + 'allow_identities' => array(false, ''), + + 'use_preview_pane' => array(true, 'Whether message preview pane should be used'), + + 'messages_per_page' => array(20, ' Number of messages displayed on page by default'), + + 'editor_default_type' => array('Html', 'Editor mode used by default (Html or Plain)'), + + 'attachment_size_limit' => array(5, + 'File size limit (MB) for file upload on compose screen +0 for unlimited.') + ), + + 'security' => array( + 'csrf_protection' => array(true, + 'Enable CSRF protection (http://en.wikipedia.org/wiki/Cross-site_request_forgery)'), + + 'custom_server_signature' => array('RainLoop'), + 'admin_login' => array('admin', 'Login and password for web admin panel'), + 'admin_password' => array('12345') + ), + + 'login' => array( + + 'allow_custom_login' => array(false, + 'Enable additional Login field on webmail login screen'), + + 'default_domain' => array('', ''), + + 'allow_languages_on_login' => array(true, + 'Allow language selection on webmail login screen'), + + 'sign_me_auto' => array(\RainLoop\Enumerations\SignMeType::DEFAILT_OFF, + 'This option allows webmail to remember the logged in user +once they closed the browser window. + +Values: + "DefaultOff" - can be used, disabled by default; + "DefaultOn" - can be used, enabled by default; + "Unused" - cannot be used') + ), + + 'plugins' => array( + 'enable' => array(false, 'Enable plugin support'), + 'enabled_list' => array('', 'List of enabled plugins'), + ), + + 'logs' => array( + + 'enable' => array(false, 'Enable logging'), + + 'write_on_error_only' => array(false, 'Logs entire request only if error occured'), + + 'filename' => array('log-{date:Y-m-d}.txt', + 'Log filename. +For security reasons, some characters are removed from filename. +Allows for pattern-based folder creation (see examples below). + +Patterns: + {date:Y-m-d} - Replaced by pattern-based date + Detailed info: http://www.php.net/manual/en/function.date.php + {user:email} - Replaced by user\'s email address + If user is not logged in, value is set to "unknown" + {user:login} - Replaced by user\'s login + If user is not logged in, value is set to "unknown" + {user:domain} - Replaced by user\'s domain name + If user is not logged in, value is set to "unknown" + {user:uid} - Replaced by user\'s UID regardless of account currently used + +Examples: + filename = "log-{date:Y-m-d}.txt" + filename = "{date:Y-m-d}/{user:domain}/{user:email}_{user:uid}.log" + filename = "{user:email}-{date:Y-m-d}.txt"') + ), + + 'debug' => array( + 'enable' => array(false, 'Special option required for development purposes'), + ), + + 'version' => array( + 'current' => array(''), + 'saved' => array('') + ), + + 'social' => array( + 'google_enable' => array(false, 'Google'), + 'google_client_id' => array(''), + 'google_client_secret' => array(''), + + 'fb_enable' => array(false, 'Facebook'), + 'fb_app_id' => array(''), + 'fb_app_secret' => array(''), + + 'twitter_enable' => array(false, 'Twitter'), + 'twitter_consumer_key' => array(''), + 'twitter_consumer_secret' => array(''), + + 'dropbox_enable' => array(false, 'Dropbox'), + 'dropbox_api_key' => array(''), + ), + + 'cache' => array( + 'enable' => array(true, + 'The section controls caching of the entire application. + +Enables caching in the system'), + + 'index' => array('v1', 'Additional caching key. If changed, cache is purged'), + + 'fast_cache_driver' => array('files', 'Can be: files, APC, memcache'), + 'fast_cache_index' => array('v1', 'Additional caching key. If changed, fast cache is purged'), + + 'http' => array(true, 'Browser-level cache. If enabled, caching is maintainted without using files'), + 'server_uids' => array(false, 'Caching message UIDs when searching and sorting (threading)') + ), + + 'labs' => array( + 'ignore_folders_subscription' => array(false, + 'Experimental settings. Handle with care. +'), + 'allow_message_append' => array(false), + 'date_from_headers' => array(false), + 'cache_system_data' => array(true), + 'use_app_debug_js' => array(false), + 'use_app_debug_css' => array(false), + 'login_fault_delay' => array(1), + 'log_ajax_response_write_limit' => array(300), + 'suggestions_limit' => array(50), + 'determine_user_language' => array(true), + 'use_imap_sort' => array(false), + 'use_imap_list_status' => array(false), + 'use_imap_list_subscribe' => array(true), + 'use_imap_thread' => array(true), + 'use_imap_move' => array(true), + 'use_imap_auth_plain' => array(false), + 'custom_repo' => array(''), + 'additional_repo' => array(''), + 'cdn_static_domain' => array(''), + 'in_iframe' => array(false), + 'custom_login_link' => array(''), + 'custom_logout_link' => array(''), + 'allow_contacts' => array(true), + 'allow_external_login' => array(false), + 'allow_admin_panel' => array(true), + 'fast_cache_memcache_host' => array('127.0.0.1'), + 'fast_cache_memcache_port' => array(11211), + 'fast_cache_memcache_expire' => array(43200), + 'usage_statistics' => array(true), + 'dev_email' => array(''), + 'dev_login' => array(''), + 'dev_password' => array('') + ) + ); + } +} diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Config/Plugin.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Config/Plugin.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Config/Plugin.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Config/Plugin.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Domain.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Domain.php similarity index 94% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Domain.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Domain.php index b4017c7ef8..1a28ec8baa 100644 --- a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Domain.php +++ b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Domain.php @@ -411,4 +411,24 @@ public function ValidateWhiteList($sEmail, $sLogin = '') return true; } + + /** + * @return array + */ + public function ToSimpleJSON() + { + return array( + 'Name' => $this->Name(), + 'IncHost' => $this->IncHost(), + 'IncPort' => $this->IncPort(), + 'IncSecure' => $this->IncSecure(), + 'IncShortLogin' => $this->IncShortLogin(), + 'OutHost' => $this->OutHost(), + 'OutPort' => $this->OutPort(), + 'OutSecure' => $this->OutSecure(), + 'OutShortLogin' => $this->OutShortLogin(), + 'OutAuth' => $this->OutAuth(), + 'WhiteList' => $this->WhiteList() + ); + } } diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Enumerations/CustomThemeType.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Enumerations/CustomThemeType.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Enumerations/CustomThemeType.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Enumerations/CustomThemeType.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Enumerations/InterfaceAnimation.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Enumerations/InterfaceAnimation.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Enumerations/InterfaceAnimation.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Enumerations/InterfaceAnimation.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Enumerations/PluginPropertyType.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Enumerations/PluginPropertyType.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Enumerations/PluginPropertyType.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Enumerations/PluginPropertyType.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Enumerations/SignMeType.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Enumerations/SignMeType.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Enumerations/SignMeType.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Enumerations/SignMeType.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Enumerations/TimeFormat.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Enumerations/TimeFormat.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Enumerations/TimeFormat.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Enumerations/TimeFormat.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Exceptions/AuthException.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Exceptions/AuthException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Exceptions/AuthException.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Exceptions/AuthException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Exceptions/ClientException.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Exceptions/ClientException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Exceptions/ClientException.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Exceptions/ClientException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Exceptions/Exception.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Exceptions/Exception.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Exceptions/Exception.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Exceptions/Exception.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Exceptions/InvalidArgumentException.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Exceptions/InvalidArgumentException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Exceptions/InvalidArgumentException.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Exceptions/InvalidArgumentException.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Exceptions/RuntimeException.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Exceptions/RuntimeException.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Exceptions/RuntimeException.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Exceptions/RuntimeException.php diff --git a/rainloop/v/1.3.10.490/app/libraries/RainLoop/Identity.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Identity.php new file mode 100644 index 0000000000..2adae80e23 --- /dev/null +++ b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Identity.php @@ -0,0 +1,177 @@ +sId = $sId; + $this->sEmail = \strtolower($sEmail); + $this->sName = \trim($sName); + $this->sReplyTo = \trim($sReplyTo); + $this->sBcc = \trim($sBcc); + } + + /** + * @param string $sId + * @param string $sEmail + * @param string $sName = '' + * @param string $sReplyTo = '' + * @param string $sBcc = '' + * + * @return \RainLoop\Identity + */ + public static function NewInstance($sId, $sEmail, $sName = '', $sReplyTo = '', $sBcc = '') + { + return new self($sId, $sEmail, $sName, $sReplyTo, $sBcc); + } + + /** + * @return string + */ + public function Id() + { + return $this->sId; + } + + /** + * @param string $sId + * + * @return \RainLoop\Identity + */ + public function SetId($sId) + { + $this->sId = $sId; + + return $this; + } + + /** + * @return string + */ + public function Email() + { + return $this->sEmail; + } + + /** + * @param string $sEmail + * + * @return \RainLoop\Identity + */ + public function SetEmail($sEmail) + { + $this->sEmail = $sEmail; + + return $this; + } + + /** + * @return string + */ + public function Name() + { + return $this->sName; + } + + /** + * @param string $sName + * + * @return \RainLoop\Identity + */ + public function SetName($sName) + { + $this->sName = $sName; + + return $this; + } + + /** + * @return string + */ + public function ReplyTo() + { + return $this->sReplyTo; + } + + /** + * @param string $sReplyTo + * + * @return \RainLoop\Identity + */ + public function SetReplyTo($sReplyTo) + { + $this->sReplyTo = $sReplyTo; + + return $this; + } + + /** + * @return string + */ + public function Bcc() + { + return $this->sBcc; + } + + /** + * @param string $sBcc + * + * @return \RainLoop\Identity + */ + public function SetBcc($sBcc) + { + $this->sBcc = $sBcc; + + return $this; + } + + /** + * @return array + */ + public function ToSimpleJSON() + { + return array( + 'Id' => $this->Id(), + 'Email' => $this->Email(), + 'Name' => $this->Name(), + 'ReplyTo' => $this->ReplyTo(), + 'Bcc' => $this->Bcc() + ); + } +} diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Notifications.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Notifications.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Notifications.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Notifications.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Plugins/AbstractPlugin.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Plugins/AbstractPlugin.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Plugins/AbstractPlugin.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Plugins/AbstractPlugin.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Plugins/Manager.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Plugins/Manager.php similarity index 91% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Plugins/Manager.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Plugins/Manager.php index 930b88c54d..3595c09d0b 100644 --- a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Plugins/Manager.php +++ b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Plugins/Manager.php @@ -157,19 +157,28 @@ public function CreatePluginByName($sName) public function InstalledPlugins() { $aList = array(); - - foreach (glob(APP_PLUGINS_PATH.'*', GLOB_ONLYDIR|GLOB_NOSORT) as $sPathName) + + $aGlob = @\glob(APP_PLUGINS_PATH.'*', GLOB_ONLYDIR|GLOB_NOSORT); + if (\is_array($aGlob)) { - $sName = basename($sPathName); - if (preg_match('/^[a-z0-9\-]+$/', $sName) && - file_exists($sPathName.'/index.php')) + foreach ($aGlob as $sPathName) { - $sVersion = @file_get_contents($sPathName.'/VERSION'); - $aList[] = array( - $sName, $sVersion - ); + $sName = \basename($sPathName); + if (\preg_match('/^[a-z0-9\-]+$/', $sName) && + \file_exists($sPathName.'/index.php')) + { + $sVersion = @\file_get_contents($sPathName.'/VERSION'); + $aList[] = array( + $sName, $sVersion + ); + } } } + else + { + $this->Actions()->Logger()->Write('Cannot get installed plugins from '.APP_PLUGINS_PATH, + \MailSo\Log\Enumerations\Type::ERROR); + } return $aList; } diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Plugins/Property.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Plugins/Property.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Plugins/Property.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Plugins/Property.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/AbstractProvider.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/AbstractProvider.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/AbstractProvider.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/AbstractProvider.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/ChangePassword.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/ChangePassword.php similarity index 94% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/ChangePassword.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/ChangePassword.php index 8e01e69eba..8530973052 100644 --- a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/ChangePassword.php +++ b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/ChangePassword.php @@ -16,7 +16,7 @@ class ChangePassword extends \RainLoop\Providers\AbstractProvider /** * @param \RainLoop\Actions $oActions - * @param \RainLoop\Providers\Suggestions\SuggestionsInterface|null $oDriver = null + * @param \RainLoop\Providers\ChangePassword\ChangePasswordInterface|null $oDriver = null * * @return void */ diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/ChangePassword/ChangePasswordInterface.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/ChangePassword/ChangePasswordInterface.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/ChangePassword/ChangePasswordInterface.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/ChangePassword/ChangePasswordInterface.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Contacts.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Contacts.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Contacts.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Contacts.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Contacts/Classes/Contact.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Contacts/Classes/Contact.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Contacts/Classes/Contact.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Contacts/Classes/Contact.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Contacts/Classes/Db.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Contacts/Classes/Db.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Contacts/Classes/Db.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Contacts/Classes/Db.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Contacts/ContactsInterface.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Contacts/ContactsInterface.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Contacts/ContactsInterface.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Contacts/ContactsInterface.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Contacts/DefaultContacts.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Contacts/DefaultContacts.php similarity index 95% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Contacts/DefaultContacts.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Contacts/DefaultContacts.php index f24c1fef49..a94b708efb 100644 --- a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Contacts/DefaultContacts.php +++ b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Contacts/DefaultContacts.php @@ -1,600 +1,600 @@ -oLogger = $oLogger instanceof \MailSo\Log\Logger ? $oLogger : null; - $this->bUseDbPerUser = true; - } - - /** - * @param \RainLoop\Account $oAccount - * @staticvar array $aPdoCache - * @return \PDO - */ - private function getPDO($oAccount) - { - static $aPdoCache = array(); - - $sEmail = $oAccount->ParentEmailHelper(); - if (isset($aPdoCache[$sEmail])) - { - return $aPdoCache[$sEmail]; - } - - if (!\class_exists('PDO')) - { - throw new \Exception('class_exists=PDO'); - } - - $sVersionFile = ''; - $sDsn = ''; - - if ($this->bUseDbPerUser) - { - $sSubPath = APP_PRIVATE_DATA.'storage/contacts/'.\rtrim(\substr($sEmail, 0, 2), '@').'/'.$sEmail.'/'; - if (!\is_dir($sSubPath)) - { - if (\mkdir($sSubPath, 0777, true) && \is_dir($sSubPath)) - { - $sVersionFile = $sSubPath.'.version'; - $sDsn = 'sqlite:'.$sSubPath.'contacts.sqlite'; - } - } - else - { - $sVersionFile = $sSubPath.'.version'; - $sDsn = 'sqlite:'.$sSubPath.'contacts.sqlite'; - } - } - else - { - $sVersionFile = APP_PRIVATE_DATA.'.version'; - $sDsn = 'sqlite:'.APP_PRIVATE_DATA.'contacts.sqlite'; - } - - $sDbLogin = ''; - $sDbPassword = ''; - - $oPdo = false; - try - { - $oPdo = new \PDO($sDsn, $sDbLogin, $sDbPassword); - if ($oPdo) - { - $oPdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); - - if (!@\file_exists($sVersionFile) || - (string) @file_get_contents($sVersionFile) !== (string) \RainLoop\Providers\Contacts\Classes\Db::Version()) - { - $this->syncTables($oPdo, $sVersionFile); - } - - $oPdo->sqliteCreateFunction('SIMPLESEARCH', function ($sEmailValue, $sNameValue, $sMask) { - return \preg_match('/'.\preg_quote($sMask, '/').'/ui', - $sEmailValue.' '.$sNameValue) ? 1 : 0; - }); - - } - } - catch (\Exception $oException) - { - throw $oException; - $oPdo = false; - } - - if ($oPdo) - { - $aPdoCache[$oAccount->ParentEmailHelper()] = $oPdo; - } - - return $oPdo; - } - - protected function getWantedColumnsInfo($sTableName, $aCurrent) - { - $aColumns = array(); - foreach ($aCurrent as $sName => $sType) - { - $sSql = $sName.' '.$sType; - switch ($sType) - { - case 'INTEGER': - $sSql .= ' DEFAILT \'0\''; - break; - case 'TEXT': - $sSql .= ' DEFAILT \'\''; - break; - } - - $aColumns[$sName] = $sSql; - } - - if (0 === \count($aColumns)) - { - return ''; - } - - return 'CREATE TABLE '.$sTableName.' (' .\implode(', ', $aColumns).')'; - } - - /** - * @param \PDO $oAccount - * @param string $sTableName - */ - protected function getCurrentColumnsInfo($oPdo, $sTableName) - { - $oStmt = $this->prepareAndExecute($oPdo, 'SELECT `sql` FROM `sqlite_master` WHERE `tbl_name` = :TableName AND `type` = :Type', array( - ':TableName' => array($sTableName, \PDO::PARAM_STR), - ':Type' => array('table', \PDO::PARAM_STR) - )); - - if ($oStmt) - { - $mRow = $oStmt->fetch(\PDO::FETCH_ASSOC); - if ($mRow && isset($mRow['sql'])) - { - return (string) $mRow['sql']; - } - } - - return ''; - } - - /** - * @param \PDO $oPdo - * @param string $sVersionFile = '' - */ - private function syncTables($oPdo, $sVersionFile = '') - { - if ($this->oLogger) - { - $this->oLogger->Write('Start to sync', \MailSo\Log\Enumerations\Type::INFO); - } - - $aStrucure = \RainLoop\Providers\Contacts\Classes\Db::Strucure(); - foreach ($aStrucure as $sTableName => $aField) - { - $sCurrent = $this->getCurrentColumnsInfo($oPdo, $sTableName); - $sWanted = $this->getWantedColumnsInfo($sTableName, $aField); - - if (empty($sCurrent)) - { - $this->prepareAndExecute($oPdo, $sWanted); - } - else if ($sCurrent !== $sWanted) - { - $this->prepareAndExecute($oPdo, 'DROP TABLE IF EXISTS `'.$sTableName.'_old`'); - $this->prepareAndExecute($oPdo, 'ALTER TABLE `'.$sTableName.'` RENAME TO `'.$sTableName.'_old`'); - $this->prepareAndExecute($oPdo, $sWanted); - - $aNewKeys = array(); - $aOldKeys = array(); - foreach ($aField as $sKey => $sType) - { - $aNewKeys[] = $sKey; - $aOldKeys[] = false !== \strpos($sCurrent, $sKey.' ') ? $sKey : - (0 === \strpos($sType, 'INT') ? '\'0\'' : '\'\''); - } - - $sNewKeys = \implode(', ', $aNewKeys); - $sOldKeys = \implode(', ', $aOldKeys); - $this->prepareAndExecute($oPdo, 'INSERT INTO `'.$sTableName.'` ('.$sNewKeys.') SELECT '.$sOldKeys.' FROM `'.$sTableName.'_old`'); - - $this->prepareAndExecute($oPdo, 'DROP TABLE `'.$sTableName.'_old`'); - } - } - - @\file_put_contents($sVersionFile, \RainLoop\Providers\Contacts\Classes\Db::Version()); - - if ($this->oLogger) - { - $this->oLogger->Write('Stop to sync', \MailSo\Log\Enumerations\Type::INFO); - } - } - - /** - * @param \RainLoop\Account|\PDO $oAccountOrPdo - * @param string $sSql - * @param array $aParams - * - * @return \PDOStatement|null - */ - private function prepareAndExecute($oAccountOrPdo, $sSql, $aParams = array()) - { - if ($this->oLogger) - { - $this->oLogger->Write($sSql, \MailSo\Log\Enumerations\Type::INFO, 'SQLITE'); - } - - $oPdo = $oAccountOrPdo instanceof \PDO ? $oAccountOrPdo : $this->getPDO($oAccountOrPdo); - $oStmt = $oPdo->prepare($sSql); - foreach ($aParams as $sName => $aValue) - { - $oStmt->bindValue($sName, $aValue[0], $aValue[1]); - } - -// $sLogSql = $sSql; -// foreach($aParams as $sName => $aValue) -// { -// $sLogSql = \str_replace($sName, $aValue[1] === \PDO::PARAM_INT ? $aValue[0] : '\''.$aValue[0].'\'', $sLogSql); -// } -// -// if ($this->oLogger) -// { -// $this->oLogger->Write($sLogSql, \MailSo\Log\Enumerations\Type::INFO, 'SQLITE'); -// } - - $mResult = $oStmt->execute() ? $oStmt : null; - -// if ($this->oLogger) -// { -// $this->oLogger->Write('RESULT: '.($mResult ? 'true' : 'false'), \MailSo\Log\Enumerations\Type::INFO, 'SQLITE'); -// } - - return $mResult; - } - - /** - * @param \RainLoop\Account|null $oAccount - * @param bool $bSkipInsert = false - * - * @return int - */ - private function getUserId($oAccount, $bSkipInsert = false) - { - if (!$this->bUseDbPerUser) - { - $oStmt = $this->prepareAndExecute($oAccount, - 'SELECT IdUser FROM rlContactsUsers WHERE Email = :Email LIMIT 1', - array( - ':Email' => array($oAccount->ParentEmailHelper(), \PDO::PARAM_STR) - )); - - $mRow = $oStmt->fetch(\PDO::FETCH_ASSOC); - if ($mRow && isset($mRow['IdUser']) && \is_numeric($mRow['IdUser'])) - { - return (int) $mRow['IdUser']; - } - - if (!$bSkipInsert) - { - $oStmt->closeCursor(); - - $oStmt = $this->prepareAndExecute($oAccount, - 'INSERT INTO rlContactsUsers (Email) VALUES (:Email)', - array( - ':Email' => array($oAccount->ParentEmailHelper(), \PDO::PARAM_STR) - )); - - return $this->getUserId($oAccount, true); - } - - throw new \Exception('IdUser=0'); - } - - return 0; - } - - /** - * @param string $sSearch - * @return string - */ - private function convertSearchValue($sSearch) - { - return '%'.$sSearch.'%'; - } - - private function populateContactFromDB($iUserID, $aItem) - { - $oContact = null; - if (isset($aItem['IdContact'])) - { - $oContact = new \RainLoop\Providers\Contacts\Classes\Contact(); - $oContact->IdContact = (int) $aItem['IdContact']; - $oContact->IdUser = $iUserID; - $oContact->Type = (int) $aItem['Type']; - $oContact->Frec = (int) $aItem['Frec']; - $oContact->ListName = (string) $aItem['ListName']; - $oContact->Name = (string) $aItem['Name']; - $oContact->Emails = \explode(' ', \trim((string) $aItem['Emails'])); - $oContact->ImageHash = (string) $aItem['ImageHash']; - - $oContact->ParseData($aItem['Data']); - } - - return $oContact; - } - - /** - * @param \RainLoop\Account $oAccount - * @param int $iIdContact - * - * @return $oContact|null - */ - public function GetContactById($oAccount, $iIdContact) - { - $oResultContact = null; - - $iUserID = $this->getUserId($oAccount); - - $oStmt = $this->prepareAndExecute($oAccount, - 'SELECT IdContact, Type, Frec, ListName, Name, Emails, ImageHash, Data'. - ' FROM rlContactsItems WHERE IdContact = :IdContact AND IdUser = :IdUser LIMIT 1', - array( - ':IdContact' => array($iIdContact, \PDO::PARAM_INT), - ':IdUser' => array($iUserID, \PDO::PARAM_INT) - )); - - $aFetch = $oStmt->fetchAll(\PDO::FETCH_ASSOC); - if (\is_array($aFetch) && isset($aFetch[0]) && \is_array($aFetch[0])) - { - $oContact = $this->populateContactFromDB($iUserID, $aFetch[0]); - if ($oContact instanceof \RainLoop\Providers\Contacts\Classes\Contact) - { - $oResultContact = $oContact; - } - } - - return $oResultContact; - } - - /** - * @param \RainLoop\Account $oAccount - * @param int $iOffset = 0 - * @param int $iLimit = 20 - * @param string $sSearch = '' - * - * @return array - */ - public function GetContacts($oAccount, $iOffset = 0, $iLimit = 20, $sSearch = '') - { - $iOffset = 0 <= $iOffset ? $iOffset : 0; - $iLimit = 0 < $iLimit ? (int) $iLimit : 0; - $sSearch = \trim($sSearch); - - $iUserID = $this->getUserId($oAccount); - - $sSql = 'SELECT IdContact, Type, Frec, ListName, Name, Emails, ImageHash, Data'. - ' FROM rlContactsItems WHERE IdUser = :IdUser' - ; - - $aParams = array( - ':IdUser' => array($iUserID, \PDO::PARAM_INT), - ':limit' => array($iLimit, \PDO::PARAM_INT), - ':offset' => array($iOffset, \PDO::PARAM_INT) - ); - - if (0 < strlen($sSearch)) - { - if (\MailSo\Base\Utils::IsAscii($sSearch)) - { - $sSql .= ' AND Name LIKE :Search OR Emails LIKE :Search'; - $aParams[':Search'] = array($this->convertSearchValue($sSearch), \PDO::PARAM_STR); - } - else - { - $sSql .= ' AND SIMPLESEARCH(Emails, Name, :Search)'; - $aParams[':Search'] = array($sSearch, \PDO::PARAM_STR); - } - } - - $sSql .= ' ORDER BY ListName ASC LIMIT :limit OFFSET :offset'; - - $oStmt = $this->prepareAndExecute($oAccount, $sSql, $aParams); - - $aFetch = $oStmt->fetchAll(\PDO::FETCH_ASSOC); - $aResult = array(); - if (\is_array($aFetch) && 0 < \count($aFetch)) - { - foreach ($aFetch as $aItem) - { - $oContact = $this->populateContactFromDB($iUserID, $aItem); - if ($oContact instanceof \RainLoop\Providers\Contacts\Classes\Contact) - { - $aResult[] = $oContact; - } - } - } - - unset($aFetch); - return $aResult; - } - - /** - * @param \RainLoop\Account $oAccount - * - * @return array - */ - public function GetContactsImageHashes($oAccount) - { - $iUserID = $this->getUserId($oAccount); - - $oStmt = $this->prepareAndExecute($oAccount, - 'SELECT Emails, ImageHash FROM rlContactsItems WHERE IdUser = :IdUser AND ImageHash <> :ImageHash', - array( - ':IdUser' => array($iUserID, \PDO::PARAM_INT), - ':ImageHash' => array('', \PDO::PARAM_STR) - )); - - $aFetch = $oStmt->fetchAll(\PDO::FETCH_ASSOC); - $aResult = array(); - - if (\is_array($aFetch) && 0 < \count($aFetch)) - { - foreach ($aFetch as $aItem) - { - if (!empty($aItem['Emails']) && !empty($aItem['ImageHash'])) - { - $aEmails = \explode(' ', $aItem['Emails']); - foreach ($aEmails as $sEmail) - { - $sEmail = \trim($sEmail); - if (0 < strlen($sEmail)) - { - $aResult[$sEmail] = $aItem['ImageHash']; - } - } - } - } - } - - unset($aFetch); - return $aResult; - } - - /** - * @param \RainLoop\Account $oAccount - * @param \RainLoop\Providers\Contacts\Classes\Contact $oContact - * - * @return bool - */ - public function CreateContact($oAccount, &$oContact) - { - $iUserID = $this->getUserId($oAccount); - - $oContact->IdUser = $iUserID; - - $oStmt = $this->prepareAndExecute($oAccount, - 'INSERT INTO rlContactsItems '. - '( IdUser, Type, Frec, ListName, Name, Emails, ImageHash, Data) VALUES '. - '(:IdUser, :Type, 0, :ListName, :Name, :Emails, :ImageHash, :Data)', - array( - ':IdUser' => array($oContact->IdUser, \PDO::PARAM_INT), - ':Type' => array($oContact->Type, \PDO::PARAM_INT), - ':ListName' => array($oContact->GenarateListName(), \PDO::PARAM_STR), - ':Name' => array($oContact->Name, \PDO::PARAM_STR), - ':Emails' => array($oContact->EmailsAsString(), \PDO::PARAM_STR), - ':ImageHash' => array($oContact->ImageHash, \PDO::PARAM_STR), - ':Data' => array($oContact->DataAsString(), \PDO::PARAM_STR), - )); - - if ($oStmt) - { - $iContactID = $this->getPDO($oAccount)->lastInsertId('IdContact'); - if (is_numeric($iContactID) && 0 < (int) $iContactID) - { - $oContact->IdContact = (int) $iContactID; - return true; - } - } - - throw new \Exception('CreateContact'); - } - - /** - * @param \RainLoop\Account $oAccount - * @param \RainLoop\Providers\Contacts\Classes\Contact $oContact - * - * @return bool - */ - public function UpdateContact($oAccount, &$oContact) - { - $iUserID = $this->getUserId($oAccount); - - $oContact->IdUser = $iUserID; - - return !!$this->prepareAndExecute($oAccount, - 'UPDATE rlContactsItems SET'. - ' Type = :Type, ListName = :ListName, Name = :Name, Emails = :Emails,'. - ' ImageHash = :ImageHash, Data = :Data'. - ' WHERE IdContact = :IdContact AND IdUser = :IdUser', - array( - ':IdContact' => array($oContact->IdContact, \PDO::PARAM_INT), - ':IdUser' => array($oContact->IdUser, \PDO::PARAM_INT), - ':Type' => array($oContact->Type, \PDO::PARAM_INT), - ':ListName' => array($oContact->GenarateListName(), \PDO::PARAM_STR), - ':Name' => array($oContact->Name, \PDO::PARAM_STR), - ':Emails' => array($oContact->EmailsAsString(), \PDO::PARAM_STR), - ':ImageHash' => array($oContact->ImageHash, \PDO::PARAM_STR), - ':Data' => array($oContact->DataAsString(), \PDO::PARAM_STR), - )); - } - - /** - * @param \RainLoop\Account $oAccount - * @param array $aContactIds - * - * @return bool - */ - public function DeleteContacts($oAccount, $aContactIds) - { - $iUserID = $this->getUserId($oAccount); - - $aParams = array( - ':IdUser' => array($iUserID, \PDO::PARAM_INT), - ); - - $aInQuery = array(); - foreach ($aContactIds as $iIndex => $iId) - { - $aInQuery[] = ':IdContact_'.$iIndex; - $aParams[':IdContact_'.$iIndex] = array($iId, \PDO::PARAM_INT); - } - - if (0 === \count($aInQuery)) - { - return false; - } - - return !!$this->prepareAndExecute($oAccount, - 'DELETE FROM rlContactsItems WHERE IdUser = :IdUser AND IdContact IN ('.\implode(', ', $aInQuery).')', - $aParams); - } - - /** - * @return bool - */ - public function IsSupported() - { - $aDrivers = \class_exists('PDO') ? \PDO::getAvailableDrivers() : array(); - return \is_array($aDrivers) ? \in_array('sqlite', $aDrivers) : false; - } - - /** - * @param \RainLoop\Account $oAccount - * @param array $aContactIds - * - * @return bool - */ - public function IncFrec($oAccount, $aContactIds) - { - if (\is_array($aContactIds) && 0 < \count($aContactIds)) - { - $iUserID = $this->getUserId($oAccount); - - $aParams = array( - ':IdUser' => array($iUserID, \PDO::PARAM_INT), - ); - - $aInQuery = array(); - foreach ($aContactIds as $iIndex => $iId) - { - $aInQuery[] = ':IdContact_'.$iIndex; - $aParams[':IdContact_'.$iIndex] = array($iId, \PDO::PARAM_INT); - } - - return !!$this->prepareAndExecute($oAccount, - 'UPDATE rlContactsItems SET Frec = Frec + 1 WHERE IdUser = :IdUser AND IdContact IN ('.\implode(', ', $aInQuery).')', - $aParams); - } - - return false; - } +oLogger = $oLogger instanceof \MailSo\Log\Logger ? $oLogger : null; + $this->bUseDbPerUser = true; + } + + /** + * @param \RainLoop\Account $oAccount + * @staticvar array $aPdoCache + * @return \PDO + */ + private function getPDO($oAccount) + { + static $aPdoCache = array(); + + $sEmail = $oAccount->ParentEmailHelper(); + if (isset($aPdoCache[$sEmail])) + { + return $aPdoCache[$sEmail]; + } + + if (!\class_exists('PDO')) + { + throw new \Exception('class_exists=PDO'); + } + + $sVersionFile = ''; + $sDsn = ''; + + if ($this->bUseDbPerUser) + { + $sSubPath = APP_PRIVATE_DATA.'storage/contacts/'.\rtrim(\substr($sEmail, 0, 2), '@').'/'.$sEmail.'/'; + if (!\is_dir($sSubPath)) + { + if (\mkdir($sSubPath, 0755, true) && \is_dir($sSubPath)) + { + $sVersionFile = $sSubPath.'.version'; + $sDsn = 'sqlite:'.$sSubPath.'contacts.sqlite'; + } + } + else + { + $sVersionFile = $sSubPath.'.version'; + $sDsn = 'sqlite:'.$sSubPath.'contacts.sqlite'; + } + } + else + { + $sVersionFile = APP_PRIVATE_DATA.'.version'; + $sDsn = 'sqlite:'.APP_PRIVATE_DATA.'contacts.sqlite'; + } + + $sDbLogin = ''; + $sDbPassword = ''; + + $oPdo = false; + try + { + $oPdo = new \PDO($sDsn, $sDbLogin, $sDbPassword); + if ($oPdo) + { + $oPdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); + + if (!@\file_exists($sVersionFile) || + (string) @file_get_contents($sVersionFile) !== (string) \RainLoop\Providers\Contacts\Classes\Db::Version()) + { + $this->syncTables($oPdo, $sVersionFile); + } + + $oPdo->sqliteCreateFunction('SIMPLESEARCH', function ($sEmailValue, $sNameValue, $sMask) { + return \preg_match('/'.\preg_quote($sMask, '/').'/ui', + $sEmailValue.' '.$sNameValue) ? 1 : 0; + }); + + } + } + catch (\Exception $oException) + { + throw $oException; + $oPdo = false; + } + + if ($oPdo) + { + $aPdoCache[$oAccount->ParentEmailHelper()] = $oPdo; + } + + return $oPdo; + } + + protected function getWantedColumnsInfo($sTableName, $aCurrent) + { + $aColumns = array(); + foreach ($aCurrent as $sName => $sType) + { + $sSql = $sName.' '.$sType; + switch ($sType) + { + case 'INTEGER': + $sSql .= ' DEFAILT \'0\''; + break; + case 'TEXT': + $sSql .= ' DEFAILT \'\''; + break; + } + + $aColumns[$sName] = $sSql; + } + + if (0 === \count($aColumns)) + { + return ''; + } + + return 'CREATE TABLE '.$sTableName.' (' .\implode(', ', $aColumns).')'; + } + + /** + * @param \PDO $oAccount + * @param string $sTableName + */ + protected function getCurrentColumnsInfo($oPdo, $sTableName) + { + $oStmt = $this->prepareAndExecute($oPdo, 'SELECT `sql` FROM `sqlite_master` WHERE `tbl_name` = :TableName AND `type` = :Type', array( + ':TableName' => array($sTableName, \PDO::PARAM_STR), + ':Type' => array('table', \PDO::PARAM_STR) + )); + + if ($oStmt) + { + $mRow = $oStmt->fetch(\PDO::FETCH_ASSOC); + if ($mRow && isset($mRow['sql'])) + { + return (string) $mRow['sql']; + } + } + + return ''; + } + + /** + * @param \PDO $oPdo + * @param string $sVersionFile = '' + */ + private function syncTables($oPdo, $sVersionFile = '') + { + if ($this->oLogger) + { + $this->oLogger->Write('Start to sync', \MailSo\Log\Enumerations\Type::INFO); + } + + $aStrucure = \RainLoop\Providers\Contacts\Classes\Db::Strucure(); + foreach ($aStrucure as $sTableName => $aField) + { + $sCurrent = $this->getCurrentColumnsInfo($oPdo, $sTableName); + $sWanted = $this->getWantedColumnsInfo($sTableName, $aField); + + if (empty($sCurrent)) + { + $this->prepareAndExecute($oPdo, $sWanted); + } + else if ($sCurrent !== $sWanted) + { + $this->prepareAndExecute($oPdo, 'DROP TABLE IF EXISTS `'.$sTableName.'_old`'); + $this->prepareAndExecute($oPdo, 'ALTER TABLE `'.$sTableName.'` RENAME TO `'.$sTableName.'_old`'); + $this->prepareAndExecute($oPdo, $sWanted); + + $aNewKeys = array(); + $aOldKeys = array(); + foreach ($aField as $sKey => $sType) + { + $aNewKeys[] = $sKey; + $aOldKeys[] = false !== \strpos($sCurrent, $sKey.' ') ? $sKey : + (0 === \strpos($sType, 'INT') ? '\'0\'' : '\'\''); + } + + $sNewKeys = \implode(', ', $aNewKeys); + $sOldKeys = \implode(', ', $aOldKeys); + $this->prepareAndExecute($oPdo, 'INSERT INTO `'.$sTableName.'` ('.$sNewKeys.') SELECT '.$sOldKeys.' FROM `'.$sTableName.'_old`'); + + $this->prepareAndExecute($oPdo, 'DROP TABLE `'.$sTableName.'_old`'); + } + } + + @\file_put_contents($sVersionFile, \RainLoop\Providers\Contacts\Classes\Db::Version()); + + if ($this->oLogger) + { + $this->oLogger->Write('Stop to sync', \MailSo\Log\Enumerations\Type::INFO); + } + } + + /** + * @param \RainLoop\Account|\PDO $oAccountOrPdo + * @param string $sSql + * @param array $aParams + * + * @return \PDOStatement|null + */ + private function prepareAndExecute($oAccountOrPdo, $sSql, $aParams = array()) + { + if ($this->oLogger) + { + $this->oLogger->Write($sSql, \MailSo\Log\Enumerations\Type::INFO, 'SQLITE'); + } + + $oPdo = $oAccountOrPdo instanceof \PDO ? $oAccountOrPdo : $this->getPDO($oAccountOrPdo); + $oStmt = $oPdo->prepare($sSql); + foreach ($aParams as $sName => $aValue) + { + $oStmt->bindValue($sName, $aValue[0], $aValue[1]); + } + +// $sLogSql = $sSql; +// foreach($aParams as $sName => $aValue) +// { +// $sLogSql = \str_replace($sName, $aValue[1] === \PDO::PARAM_INT ? $aValue[0] : '\''.$aValue[0].'\'', $sLogSql); +// } +// +// if ($this->oLogger) +// { +// $this->oLogger->Write($sLogSql, \MailSo\Log\Enumerations\Type::INFO, 'SQLITE'); +// } + + $mResult = $oStmt->execute() ? $oStmt : null; + +// if ($this->oLogger) +// { +// $this->oLogger->Write('RESULT: '.($mResult ? 'true' : 'false'), \MailSo\Log\Enumerations\Type::INFO, 'SQLITE'); +// } + + return $mResult; + } + + /** + * @param \RainLoop\Account|null $oAccount + * @param bool $bSkipInsert = false + * + * @return int + */ + private function getUserId($oAccount, $bSkipInsert = false) + { + if (!$this->bUseDbPerUser) + { + $oStmt = $this->prepareAndExecute($oAccount, + 'SELECT IdUser FROM rlContactsUsers WHERE Email = :Email LIMIT 1', + array( + ':Email' => array($oAccount->ParentEmailHelper(), \PDO::PARAM_STR) + )); + + $mRow = $oStmt->fetch(\PDO::FETCH_ASSOC); + if ($mRow && isset($mRow['IdUser']) && \is_numeric($mRow['IdUser'])) + { + return (int) $mRow['IdUser']; + } + + if (!$bSkipInsert) + { + $oStmt->closeCursor(); + + $oStmt = $this->prepareAndExecute($oAccount, + 'INSERT INTO rlContactsUsers (Email) VALUES (:Email)', + array( + ':Email' => array($oAccount->ParentEmailHelper(), \PDO::PARAM_STR) + )); + + return $this->getUserId($oAccount, true); + } + + throw new \Exception('IdUser=0'); + } + + return 0; + } + + /** + * @param string $sSearch + * @return string + */ + private function convertSearchValue($sSearch) + { + return '%'.$sSearch.'%'; + } + + private function populateContactFromDB($iUserID, $aItem) + { + $oContact = null; + if (isset($aItem['IdContact'])) + { + $oContact = new \RainLoop\Providers\Contacts\Classes\Contact(); + $oContact->IdContact = (int) $aItem['IdContact']; + $oContact->IdUser = $iUserID; + $oContact->Type = (int) $aItem['Type']; + $oContact->Frec = (int) $aItem['Frec']; + $oContact->ListName = (string) $aItem['ListName']; + $oContact->Name = (string) $aItem['Name']; + $oContact->Emails = \explode(' ', \trim((string) $aItem['Emails'])); + $oContact->ImageHash = (string) $aItem['ImageHash']; + + $oContact->ParseData($aItem['Data']); + } + + return $oContact; + } + + /** + * @param \RainLoop\Account $oAccount + * @param int $iIdContact + * + * @return $oContact|null + */ + public function GetContactById($oAccount, $iIdContact) + { + $oResultContact = null; + + $iUserID = $this->getUserId($oAccount); + + $oStmt = $this->prepareAndExecute($oAccount, + 'SELECT IdContact, Type, Frec, ListName, Name, Emails, ImageHash, Data'. + ' FROM rlContactsItems WHERE IdContact = :IdContact AND IdUser = :IdUser LIMIT 1', + array( + ':IdContact' => array($iIdContact, \PDO::PARAM_INT), + ':IdUser' => array($iUserID, \PDO::PARAM_INT) + )); + + $aFetch = $oStmt->fetchAll(\PDO::FETCH_ASSOC); + if (\is_array($aFetch) && isset($aFetch[0]) && \is_array($aFetch[0])) + { + $oContact = $this->populateContactFromDB($iUserID, $aFetch[0]); + if ($oContact instanceof \RainLoop\Providers\Contacts\Classes\Contact) + { + $oResultContact = $oContact; + } + } + + return $oResultContact; + } + + /** + * @param \RainLoop\Account $oAccount + * @param int $iOffset = 0 + * @param int $iLimit = 20 + * @param string $sSearch = '' + * + * @return array + */ + public function GetContacts($oAccount, $iOffset = 0, $iLimit = 20, $sSearch = '') + { + $iOffset = 0 <= $iOffset ? $iOffset : 0; + $iLimit = 0 < $iLimit ? (int) $iLimit : 0; + $sSearch = \trim($sSearch); + + $iUserID = $this->getUserId($oAccount); + + $sSql = 'SELECT IdContact, Type, Frec, ListName, Name, Emails, ImageHash, Data'. + ' FROM rlContactsItems WHERE IdUser = :IdUser' + ; + + $aParams = array( + ':IdUser' => array($iUserID, \PDO::PARAM_INT), + ':limit' => array($iLimit, \PDO::PARAM_INT), + ':offset' => array($iOffset, \PDO::PARAM_INT) + ); + + if (0 < strlen($sSearch)) + { + if (\MailSo\Base\Utils::IsAscii($sSearch)) + { + $sSql .= ' AND Name LIKE :Search OR Emails LIKE :Search'; + $aParams[':Search'] = array($this->convertSearchValue($sSearch), \PDO::PARAM_STR); + } + else + { + $sSql .= ' AND SIMPLESEARCH(Emails, Name, :Search)'; + $aParams[':Search'] = array($sSearch, \PDO::PARAM_STR); + } + } + + $sSql .= ' ORDER BY ListName ASC LIMIT :limit OFFSET :offset'; + + $oStmt = $this->prepareAndExecute($oAccount, $sSql, $aParams); + + $aFetch = $oStmt->fetchAll(\PDO::FETCH_ASSOC); + $aResult = array(); + if (\is_array($aFetch) && 0 < \count($aFetch)) + { + foreach ($aFetch as $aItem) + { + $oContact = $this->populateContactFromDB($iUserID, $aItem); + if ($oContact instanceof \RainLoop\Providers\Contacts\Classes\Contact) + { + $aResult[] = $oContact; + } + } + } + + unset($aFetch); + return $aResult; + } + + /** + * @param \RainLoop\Account $oAccount + * + * @return array + */ + public function GetContactsImageHashes($oAccount) + { + $iUserID = $this->getUserId($oAccount); + + $oStmt = $this->prepareAndExecute($oAccount, + 'SELECT Emails, ImageHash FROM rlContactsItems WHERE IdUser = :IdUser AND ImageHash <> :ImageHash', + array( + ':IdUser' => array($iUserID, \PDO::PARAM_INT), + ':ImageHash' => array('', \PDO::PARAM_STR) + )); + + $aFetch = $oStmt->fetchAll(\PDO::FETCH_ASSOC); + $aResult = array(); + + if (\is_array($aFetch) && 0 < \count($aFetch)) + { + foreach ($aFetch as $aItem) + { + if (!empty($aItem['Emails']) && !empty($aItem['ImageHash'])) + { + $aEmails = \explode(' ', $aItem['Emails']); + foreach ($aEmails as $sEmail) + { + $sEmail = \trim($sEmail); + if (0 < strlen($sEmail)) + { + $aResult[$sEmail] = $aItem['ImageHash']; + } + } + } + } + } + + unset($aFetch); + return $aResult; + } + + /** + * @param \RainLoop\Account $oAccount + * @param \RainLoop\Providers\Contacts\Classes\Contact $oContact + * + * @return bool + */ + public function CreateContact($oAccount, &$oContact) + { + $iUserID = $this->getUserId($oAccount); + + $oContact->IdUser = $iUserID; + + $oStmt = $this->prepareAndExecute($oAccount, + 'INSERT INTO rlContactsItems '. + '( IdUser, Type, Frec, ListName, Name, Emails, ImageHash, Data) VALUES '. + '(:IdUser, :Type, 0, :ListName, :Name, :Emails, :ImageHash, :Data)', + array( + ':IdUser' => array($oContact->IdUser, \PDO::PARAM_INT), + ':Type' => array($oContact->Type, \PDO::PARAM_INT), + ':ListName' => array($oContact->GenarateListName(), \PDO::PARAM_STR), + ':Name' => array($oContact->Name, \PDO::PARAM_STR), + ':Emails' => array($oContact->EmailsAsString(), \PDO::PARAM_STR), + ':ImageHash' => array($oContact->ImageHash, \PDO::PARAM_STR), + ':Data' => array($oContact->DataAsString(), \PDO::PARAM_STR), + )); + + if ($oStmt) + { + $iContactID = $this->getPDO($oAccount)->lastInsertId('IdContact'); + if (is_numeric($iContactID) && 0 < (int) $iContactID) + { + $oContact->IdContact = (int) $iContactID; + return true; + } + } + + throw new \Exception('CreateContact'); + } + + /** + * @param \RainLoop\Account $oAccount + * @param \RainLoop\Providers\Contacts\Classes\Contact $oContact + * + * @return bool + */ + public function UpdateContact($oAccount, &$oContact) + { + $iUserID = $this->getUserId($oAccount); + + $oContact->IdUser = $iUserID; + + return !!$this->prepareAndExecute($oAccount, + 'UPDATE rlContactsItems SET'. + ' Type = :Type, ListName = :ListName, Name = :Name, Emails = :Emails,'. + ' ImageHash = :ImageHash, Data = :Data'. + ' WHERE IdContact = :IdContact AND IdUser = :IdUser', + array( + ':IdContact' => array($oContact->IdContact, \PDO::PARAM_INT), + ':IdUser' => array($oContact->IdUser, \PDO::PARAM_INT), + ':Type' => array($oContact->Type, \PDO::PARAM_INT), + ':ListName' => array($oContact->GenarateListName(), \PDO::PARAM_STR), + ':Name' => array($oContact->Name, \PDO::PARAM_STR), + ':Emails' => array($oContact->EmailsAsString(), \PDO::PARAM_STR), + ':ImageHash' => array($oContact->ImageHash, \PDO::PARAM_STR), + ':Data' => array($oContact->DataAsString(), \PDO::PARAM_STR), + )); + } + + /** + * @param \RainLoop\Account $oAccount + * @param array $aContactIds + * + * @return bool + */ + public function DeleteContacts($oAccount, $aContactIds) + { + $iUserID = $this->getUserId($oAccount); + + $aParams = array( + ':IdUser' => array($iUserID, \PDO::PARAM_INT), + ); + + $aInQuery = array(); + foreach ($aContactIds as $iIndex => $iId) + { + $aInQuery[] = ':IdContact_'.$iIndex; + $aParams[':IdContact_'.$iIndex] = array($iId, \PDO::PARAM_INT); + } + + if (0 === \count($aInQuery)) + { + return false; + } + + return !!$this->prepareAndExecute($oAccount, + 'DELETE FROM rlContactsItems WHERE IdUser = :IdUser AND IdContact IN ('.\implode(', ', $aInQuery).')', + $aParams); + } + + /** + * @return bool + */ + public function IsSupported() + { + $aDrivers = \class_exists('PDO') ? \PDO::getAvailableDrivers() : array(); + return \is_array($aDrivers) ? \in_array('sqlite', $aDrivers) : false; + } + + /** + * @param \RainLoop\Account $oAccount + * @param array $aContactIds + * + * @return bool + */ + public function IncFrec($oAccount, $aContactIds) + { + if (\is_array($aContactIds) && 0 < \count($aContactIds)) + { + $iUserID = $this->getUserId($oAccount); + + $aParams = array( + ':IdUser' => array($iUserID, \PDO::PARAM_INT), + ); + + $aInQuery = array(); + foreach ($aContactIds as $iIndex => $iId) + { + $aInQuery[] = ':IdContact_'.$iIndex; + $aParams[':IdContact_'.$iIndex] = array($iId, \PDO::PARAM_INT); + } + + return !!$this->prepareAndExecute($oAccount, + 'UPDATE rlContactsItems SET Frec = Frec + 1 WHERE IdUser = :IdUser AND IdContact IN ('.\implode(', ', $aInQuery).')', + $aParams); + } + + return false; + } } \ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Domain.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Domain.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Domain.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Domain.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Domain/DefaultDomain.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Domain/DefaultDomain.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Domain/DefaultDomain.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Domain/DefaultDomain.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Domain/DomainAdminInterface.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Domain/DomainAdminInterface.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Domain/DomainAdminInterface.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Domain/DomainAdminInterface.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Domain/DomainInterface.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Domain/DomainInterface.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Domain/DomainInterface.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Domain/DomainInterface.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Domain/DomainSimpleInterface.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Domain/DomainSimpleInterface.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Domain/DomainSimpleInterface.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Domain/DomainSimpleInterface.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Login.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Login.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Login.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Login.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Login/DefaultLogin.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Login/DefaultLogin.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Login/DefaultLogin.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Login/DefaultLogin.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Login/LoginInterface.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Login/LoginInterface.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Login/LoginInterface.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Login/LoginInterface.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Settings.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Settings.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Settings.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Settings.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Settings/DefaultSettings.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Settings/DefaultSettings.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Settings/DefaultSettings.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Settings/DefaultSettings.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Settings/SettingsInterface.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Settings/SettingsInterface.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Settings/SettingsInterface.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Settings/SettingsInterface.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Storage.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Storage.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Storage.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Storage.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Storage/DefaultStorage.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Storage/DefaultStorage.php similarity index 95% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Storage/DefaultStorage.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Storage/DefaultStorage.php index 13809961d5..641425e0c3 100644 --- a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Storage/DefaultStorage.php +++ b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Storage/DefaultStorage.php @@ -1,290 +1,290 @@ -sDataPath = \rtrim(\trim($sStoragePath), '\\/'); - } - - /** - * @param \RainLoop\Account|null $oAccount - * @param int $iStorageType - * @param string $sKey - * @param string $sValue - * - * @return bool - */ - public function Put($oAccount, $iStorageType, $sKey, $sValue) - { - return false !== @\file_put_contents( - $this->generateFileName($oAccount, $iStorageType, $sKey, true), $sValue); - } - - /** - * @param \RainLoop\Account|null $oAccount - * @param int $iStorageType - * @param string $sKey - * @param resource $rSource - * - * @return bool - */ - public function PutFile($oAccount, $iStorageType, $sKey, $rSource) - { - $bResult = false; - if ($rSource) - { - $rOpenOutput = @\fopen($this->generateFileName($oAccount, $iStorageType, $sKey, true), 'w+b'); - if ($rOpenOutput) - { - $bResult = (false !== \MailSo\Base\Utils::MultipleStreamWriter($rSource, array($rOpenOutput))); - @\fclose($rOpenOutput); - } - } - return $bResult; - } - - /** - * @param \RainLoop\Account|null $oAccount - * @param int $iStorageType - * @param string $sKey - * @param string $sSource - * - * @return bool - */ - public function MoveUploadedFile($oAccount, $iStorageType, $sKey, $sSource) - { - return @\move_uploaded_file($sSource, - $this->generateFileName($oAccount, $iStorageType, $sKey, true)); - } - - /** - * @param \RainLoop\Account|null $oAccount - * @param int $iStorageType - * @param string $sSource - * @param string $sDest - * - * @return bool - */ - public function SaveFileToBase64File($oAccount, $iStorageType, $sSource, $sDest) - { - $bResult = false; - $rOpenInput = @\fopen($this->generateFileName($oAccount, $iStorageType, $sSource), 'rb'); - $rOpenOutput = @\fopen($this->generateFileName($oAccount, $iStorageType, $sDest, true), 'wb'); - - if ($rOpenInput && $rOpenOutput) - { - $aParam = array('line-length' => 76, 'line-break-chars' => "\r\n"); - $rFilter = @\stream_filter_append($rOpenOutput, 'convert.base64-encode', STREAM_FILTER_WRITE, $aParam); - if (@\is_resource($rFilter)) - { - $bResult = true; - } - } - - if ($bResult) - { - $bResult = (false !== \MailSo\Base\Utils::MultipleStreamWriter($rOpenInput, array($rOpenOutput))); - } - - if ($rOpenInput && $rOpenOutput) - { - @\fclose($rOpenInput); - @\fclose($rOpenOutput); - } - - return $bResult; - } - - /** - * @param \RainLoop\Account|null $oAccount - * @param int $iStorageType - * @param string $sKey - * @param mixed $mDefault = false - * - * @return mixed - */ - public function Get($oAccount, $iStorageType, $sKey, $mDefault = false) - { - $mValue = false; - $sFileName = $this->generateFileName($oAccount, $iStorageType, $sKey); - if (\file_exists($sFileName)) - { - $mValue = \file_get_contents($sFileName); - } - - return false === $mValue ? $mDefault : $mValue; - } - - /** - * @param \RainLoop\Account|null $oAccount - * @param int $iStorageType - * @param string $sKey - * @param string $sOpenMode = 'rb' - * - * @return resource | bool - */ - public function GetFile($oAccount, $iStorageType, $sKey, $sOpenMode = 'rb') - { - $mResult = false; - $bCreate = !!\preg_match('/[wac]/', $sOpenMode); - - $sFileName = $this->generateFileName($oAccount, $iStorageType, $sKey, $bCreate); - if ($bCreate || \file_exists($sFileName)) - { - $mResult = @\fopen($sFileName, $sOpenMode); - } - - return $mResult; - } - - /** - * @param \RainLoop\Account|null $oAccount - * @param int $iStorageType - * @param string $sKey - * - * @return string | bool - */ - public function GetFileName($oAccount, $iStorageType, $sKey) - { - $mResult = false; - $sFileName = $this->generateFileName($oAccount, $iStorageType, $sKey); - if (\file_exists($sFileName)) - { - $mResult = $sFileName; - } - - return $mResult; - } - - /** - * @param \RainLoop\Account|null $oAccount - * @param int $iStorageType - * @param string $sKey - * - * @return bool - */ - public function Clear($oAccount, $iStorageType, $sKey) - { - $mResult = true; - $sFileName = $this->generateFileName($oAccount, $iStorageType, $sKey); - if (\file_exists($sFileName)) - { - $mResult = @\unlink($sFileName); - } - - return $mResult; - } - - /** - * @param \RainLoop\Account|null $oAccount - * @param int $iStorageType - * @param string $sKey - * - * @return int | bool - */ - public function FileSize($oAccount, $iStorageType, $sKey) - { - $mResult = false; - $sFileName = $this->generateFileName($oAccount, $iStorageType, $sKey); - if (\file_exists($sFileName)) - { - $mResult = \filesize($sFileName); - } - - return $mResult; - } - - /** - * @param \RainLoop\Account|null $oAccount - * @param int $iType - * @param string $sKey - * - * @return bool - */ - public function FileExists($oAccount, $iStorageType, $sKey) - { - return @\file_exists($this->generateFileName($oAccount, $iStorageType, $sKey)); - } - - /** - * @param int $iTimeToClearInHours = 24 - * - * @return bool - */ - public function GC($iTimeToClearInHours = 24) - { - if (0 < $iTimeToClearInHours) - { - \MailSo\Base\Utils::RecTimeDirRemove($this->sDataPath.'/tmp', 60 * 60 * $iTimeToClearInHours, \time()); - return true; - } - - return false; - } - - /** - * @param \RainLoop\Account|null $oAccount - * @param int $iStorageType - * @param string $sKey - * @param bool $bMkDir = false - * - * @return string - */ - private function generateFileName($oAccount, $iStorageType, $sKey, $bMkDir = false) - { - $sEmail = $oAccount ? \preg_replace('/[^a-z0-9\-\.@]+/', '_', - ('' === $oAccount->ParentEmail() ? '' : $oAccount->ParentEmail().'/').$oAccount->Email()) : ''; - - $sTypePath = $sKeyPath = ''; - switch ($iStorageType) - { - case \RainLoop\Providers\Storage\Enumerations\StorageType::TEMP: - $sTypePath = 'tmp'; - $sKeyPath = \md5($sKey); - $sKeyPath = \substr($sKeyPath, 0, 2).'/'.$sKeyPath; - break; - case \RainLoop\Providers\Storage\Enumerations\StorageType::USER: - case \RainLoop\Providers\Storage\Enumerations\StorageType::NOBODY: - $sTypePath = 'data'; - $sKeyPath = \md5($sKey); - $sKeyPath = \substr($sKeyPath, 0, 2).'/'.$sKeyPath; - break; - case \RainLoop\Providers\Storage\Enumerations\StorageType::CONFIG: - $sTypePath = 'cfg'; - $sKeyPath = \preg_replace('/[_]+/', '_', \preg_replace('/[^a-zA-Z0-9\/]/', '_', $sKey)); - break; - } - - if (\RainLoop\Providers\Storage\Enumerations\StorageType::NOBODY === $iStorageType) - { - $sFilePath = $this->sDataPath.'/'.$sTypePath.'/__nobody__/'.$sKeyPath; - } - else if (!empty($sEmail)) - { - $sFilePath = $this->sDataPath.'/'.$sTypePath.'/'.rtrim(substr($sEmail, 0, 2), '@').'/'.$sEmail.'/'.$sKeyPath; - } - - if ($bMkDir && !empty($sFilePath) && !@\is_dir(\dirname($sFilePath))) - { - if (!@\mkdir(\dirname($sFilePath), 0777, true)) - { - throw new \RainLoop\Exceptions\Exception('Can\'t make storage directory "'.$sFilePath.'"'); - } - } - - return $sFilePath; - } -} +sDataPath = \rtrim(\trim($sStoragePath), '\\/'); + } + + /** + * @param \RainLoop\Account|null $oAccount + * @param int $iStorageType + * @param string $sKey + * @param string $sValue + * + * @return bool + */ + public function Put($oAccount, $iStorageType, $sKey, $sValue) + { + return false !== @\file_put_contents( + $this->generateFileName($oAccount, $iStorageType, $sKey, true), $sValue); + } + + /** + * @param \RainLoop\Account|null $oAccount + * @param int $iStorageType + * @param string $sKey + * @param resource $rSource + * + * @return bool + */ + public function PutFile($oAccount, $iStorageType, $sKey, $rSource) + { + $bResult = false; + if ($rSource) + { + $rOpenOutput = @\fopen($this->generateFileName($oAccount, $iStorageType, $sKey, true), 'w+b'); + if ($rOpenOutput) + { + $bResult = (false !== \MailSo\Base\Utils::MultipleStreamWriter($rSource, array($rOpenOutput))); + @\fclose($rOpenOutput); + } + } + return $bResult; + } + + /** + * @param \RainLoop\Account|null $oAccount + * @param int $iStorageType + * @param string $sKey + * @param string $sSource + * + * @return bool + */ + public function MoveUploadedFile($oAccount, $iStorageType, $sKey, $sSource) + { + return @\move_uploaded_file($sSource, + $this->generateFileName($oAccount, $iStorageType, $sKey, true)); + } + + /** + * @param \RainLoop\Account|null $oAccount + * @param int $iStorageType + * @param string $sSource + * @param string $sDest + * + * @return bool + */ + public function SaveFileToBase64File($oAccount, $iStorageType, $sSource, $sDest) + { + $bResult = false; + $rOpenInput = @\fopen($this->generateFileName($oAccount, $iStorageType, $sSource), 'rb'); + $rOpenOutput = @\fopen($this->generateFileName($oAccount, $iStorageType, $sDest, true), 'wb'); + + if ($rOpenInput && $rOpenOutput) + { + $aParam = array('line-length' => 76, 'line-break-chars' => "\r\n"); + $rFilter = @\stream_filter_append($rOpenOutput, 'convert.base64-encode', STREAM_FILTER_WRITE, $aParam); + if (@\is_resource($rFilter)) + { + $bResult = true; + } + } + + if ($bResult) + { + $bResult = (false !== \MailSo\Base\Utils::MultipleStreamWriter($rOpenInput, array($rOpenOutput))); + } + + if ($rOpenInput && $rOpenOutput) + { + @\fclose($rOpenInput); + @\fclose($rOpenOutput); + } + + return $bResult; + } + + /** + * @param \RainLoop\Account|null $oAccount + * @param int $iStorageType + * @param string $sKey + * @param mixed $mDefault = false + * + * @return mixed + */ + public function Get($oAccount, $iStorageType, $sKey, $mDefault = false) + { + $mValue = false; + $sFileName = $this->generateFileName($oAccount, $iStorageType, $sKey); + if (\file_exists($sFileName)) + { + $mValue = \file_get_contents($sFileName); + } + + return false === $mValue ? $mDefault : $mValue; + } + + /** + * @param \RainLoop\Account|null $oAccount + * @param int $iStorageType + * @param string $sKey + * @param string $sOpenMode = 'rb' + * + * @return resource | bool + */ + public function GetFile($oAccount, $iStorageType, $sKey, $sOpenMode = 'rb') + { + $mResult = false; + $bCreate = !!\preg_match('/[wac]/', $sOpenMode); + + $sFileName = $this->generateFileName($oAccount, $iStorageType, $sKey, $bCreate); + if ($bCreate || \file_exists($sFileName)) + { + $mResult = @\fopen($sFileName, $sOpenMode); + } + + return $mResult; + } + + /** + * @param \RainLoop\Account|null $oAccount + * @param int $iStorageType + * @param string $sKey + * + * @return string | bool + */ + public function GetFileName($oAccount, $iStorageType, $sKey) + { + $mResult = false; + $sFileName = $this->generateFileName($oAccount, $iStorageType, $sKey); + if (\file_exists($sFileName)) + { + $mResult = $sFileName; + } + + return $mResult; + } + + /** + * @param \RainLoop\Account|null $oAccount + * @param int $iStorageType + * @param string $sKey + * + * @return bool + */ + public function Clear($oAccount, $iStorageType, $sKey) + { + $mResult = true; + $sFileName = $this->generateFileName($oAccount, $iStorageType, $sKey); + if (\file_exists($sFileName)) + { + $mResult = @\unlink($sFileName); + } + + return $mResult; + } + + /** + * @param \RainLoop\Account|null $oAccount + * @param int $iStorageType + * @param string $sKey + * + * @return int | bool + */ + public function FileSize($oAccount, $iStorageType, $sKey) + { + $mResult = false; + $sFileName = $this->generateFileName($oAccount, $iStorageType, $sKey); + if (\file_exists($sFileName)) + { + $mResult = \filesize($sFileName); + } + + return $mResult; + } + + /** + * @param \RainLoop\Account|null $oAccount + * @param int $iType + * @param string $sKey + * + * @return bool + */ + public function FileExists($oAccount, $iStorageType, $sKey) + { + return @\file_exists($this->generateFileName($oAccount, $iStorageType, $sKey)); + } + + /** + * @param int $iTimeToClearInHours = 24 + * + * @return bool + */ + public function GC($iTimeToClearInHours = 24) + { + if (0 < $iTimeToClearInHours) + { + \MailSo\Base\Utils::RecTimeDirRemove($this->sDataPath.'/tmp', 60 * 60 * $iTimeToClearInHours, \time()); + return true; + } + + return false; + } + + /** + * @param \RainLoop\Account|null $oAccount + * @param int $iStorageType + * @param string $sKey + * @param bool $bMkDir = false + * + * @return string + */ + private function generateFileName($oAccount, $iStorageType, $sKey, $bMkDir = false) + { + $sEmail = $oAccount ? \preg_replace('/[^a-z0-9\-\.@]+/', '_', + ('' === $oAccount->ParentEmail() ? '' : $oAccount->ParentEmail().'/').$oAccount->Email()) : ''; + + $sTypePath = $sKeyPath = ''; + switch ($iStorageType) + { + case \RainLoop\Providers\Storage\Enumerations\StorageType::TEMP: + $sTypePath = 'tmp'; + $sKeyPath = \md5($sKey); + $sKeyPath = \substr($sKeyPath, 0, 2).'/'.$sKeyPath; + break; + case \RainLoop\Providers\Storage\Enumerations\StorageType::USER: + case \RainLoop\Providers\Storage\Enumerations\StorageType::NOBODY: + $sTypePath = 'data'; + $sKeyPath = \md5($sKey); + $sKeyPath = \substr($sKeyPath, 0, 2).'/'.$sKeyPath; + break; + case \RainLoop\Providers\Storage\Enumerations\StorageType::CONFIG: + $sTypePath = 'cfg'; + $sKeyPath = \preg_replace('/[_]+/', '_', \preg_replace('/[^a-zA-Z0-9\/]/', '_', $sKey)); + break; + } + + if (\RainLoop\Providers\Storage\Enumerations\StorageType::NOBODY === $iStorageType) + { + $sFilePath = $this->sDataPath.'/'.$sTypePath.'/__nobody__/'.$sKeyPath; + } + else if (!empty($sEmail)) + { + $sFilePath = $this->sDataPath.'/'.$sTypePath.'/'.rtrim(substr($sEmail, 0, 2), '@').'/'.$sEmail.'/'.$sKeyPath; + } + + if ($bMkDir && !empty($sFilePath) && !@\is_dir(\dirname($sFilePath))) + { + if (!@\mkdir(\dirname($sFilePath), 0755, true)) + { + throw new \RainLoop\Exceptions\Exception('Can\'t make storage directory "'.$sFilePath.'"'); + } + } + + return $sFilePath; + } +} diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Storage/Enumerations/StorageType.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Storage/Enumerations/StorageType.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Storage/Enumerations/StorageType.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Storage/Enumerations/StorageType.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Storage/Enumerations/UploadClientError.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Storage/Enumerations/UploadClientError.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Storage/Enumerations/UploadClientError.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Storage/Enumerations/UploadClientError.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Storage/Enumerations/UploadError.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Storage/Enumerations/UploadError.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Storage/Enumerations/UploadError.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Storage/Enumerations/UploadError.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Storage/StorageInterface.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Storage/StorageInterface.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Storage/StorageInterface.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Storage/StorageInterface.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Suggestions.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Suggestions.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Suggestions.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Suggestions.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Suggestions/SuggestionsInterface.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Suggestions/SuggestionsInterface.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Providers/Suggestions/SuggestionsInterface.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Providers/Suggestions/SuggestionsInterface.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Service.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Service.php similarity index 99% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Service.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Service.php index 66b3727353..2f8d78c87d 100644 --- a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Service.php +++ b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Service.php @@ -174,6 +174,7 @@ public function Handle() $sResult .= ' [version:'.APP_VERSION; $sResult .= '][time:'.substr(\microtime(true) - APP_START, 0, 6); $sResult .= '][cached:'.($bCached ? 'true' : 'false'); + $sResult .= '][session:'.md5(\RainLoop\Utils::GetShortToken()); $sResult .= '] -->'; } diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/ServiceActions.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/ServiceActions.php similarity index 94% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/ServiceActions.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/ServiceActions.php index 2d5cba6f17..e6bb4b9535 100644 --- a/rainloop/v/1.3.9.485/app/libraries/RainLoop/ServiceActions.php +++ b/rainloop/v/1.3.10.490/app/libraries/RainLoop/ServiceActions.php @@ -1,951 +1,943 @@ -oHttp = $oHttp; - $this->oActions = $oActions; - $this->aPaths = array(); - } - - /** - * @return \MailSo\Log\Logger - */ - public function Logger() - { - return $this->oActions->Logger(); - } - - /** - * @return \RainLoop\Plugins\Manager - */ - public function Plugins() - { - return $this->oActions->Plugins(); - } - - /** - * @return \RainLoop\Application - */ - public function Config() - { - return $this->oActions->Config(); - } - - /** - * @return \MailSo\Cache\CacheClient - */ - public function Cacher() - { - return $this->oActions->Cacher(); - } - - /** - * @return \RainLoop\Providers\Storage - */ - public function StorageProvider() - { - return $this->oActions->StorageProvider(); - } - - /** - * @param array $aPaths - * - * @return \RainLoop\ServiceActions - */ - public function SetPaths($aPaths) - { - $this->aPaths = \is_array($aPaths) ? $aPaths : array(); - return $this; - } - - /** - * @param string $sQuery - * - * @return \RainLoop\ServiceActions - */ - public function SetQuery($sQuery) - { - $this->sQuery = $sQuery; - return $this; - } - - /** - * @return string - */ - public function ServiceAjax() - { - @\ob_start(); - - $aResponseItem = null; - $oException = null; - - $sAction = $this->oHttp->GetPost('Action', null); - if (empty($sAction) && $this->oHttp->IsGet() && !empty($this->aPaths[2])) - { - $sAction = $this->aPaths[2]; - } - - try - { - if ($this->oHttp->IsPost() && - $this->Config()->Get('security', 'csrf_protection', false) - && $this->oHttp->GetPost('XToken', '') !== \RainLoop\Utils::GetCsrfToken()) - { - throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::InvalidToken); - } - else if (!empty($sAction)) - { - $sMethodName = 'Do'.$sAction; - - $this->Logger()->Write('Action: '.$sMethodName, \MailSo\Log\Enumerations\Type::NOTE, 'AJAX'); - - $aPost = $this->oHttp->GetPostAsArray(); - if (\is_array($aPost) && 0 < \count($aPost)) - { - $this->oActions->SetActionParams($aPost, $sMethodName); - switch ($sMethodName) - { - case 'DoLogin': - case 'DoAdminLogin': - case 'DoAccountAdd': - $this->Logger()->AddSecret($this->oActions->GetActionParam('Password', '')); - break; - case 'DoChangePassword': - $this->Logger()->AddSecret($this->oActions->GetActionParam('PrevPassword', '')); - $this->Logger()->AddSecret($this->oActions->GetActionParam('NewPassword', '')); - break; - } - - $this->Logger()->Write(\MailSo\Base\Utils::Php2js($aPost), \MailSo\Log\Enumerations\Type::INFO, 'POST', true); - } - else if (3 < \count($this->aPaths) && $this->oHttp->IsGet()) - { - $this->oActions->SetActionParams(array( - 'RawKey' => empty($this->aPaths[3]) ? '' : $this->aPaths[3] - ), $sMethodName); - } - - if (\method_exists($this->oActions, $sMethodName) && - \is_callable(array($this->oActions, $sMethodName))) - { - $this->Plugins()->RunHook('ajax.action-pre-call', array($sAction)); - $aResponseItem = \call_user_func(array($this->oActions, $sMethodName)); - $this->Plugins()->RunHook('ajax.action-post-call', array($sAction, &$aResponseItem)); - } - else if ($this->Plugins()->HasAdditionalAjax($sMethodName)) - { - $this->Plugins()->RunHook('ajax.action-pre-call', array($sAction)); - $aResponseItem = $this->Plugins()->RunAdditionalAjax($sMethodName); - $this->Plugins()->RunHook('ajax.action-post-call', array($sAction, &$aResponseItem)); - } - } - - if (!\is_array($aResponseItem)) - { - throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::UnknownError); - } - } - catch (\Exception $oException) - { - $oException = /* @var $oException \Exception */ $oException; - - $bLogout = ('Folders' === $sAction && $oException instanceof \RainLoop\Exceptions\ClientException); - if ($bLogout) - { - $this->oActions->ClearAuthToken(); - } - - $aResponseItem = $this->oActions->ExceptionResponse( - empty($sAction) ? 'Unknown' : $sAction, $oException); - - if ($bLogout && \is_array($aResponseItem)) - { - $aResponseItem['Logout'] = true; - } - } - - if (\is_array($aResponseItem)) - { - $aResponseItem['Time'] = (int) ((\microtime(true) - APP_START) * 1000); - } - - $this->Plugins()->RunHook('filter.ajax-response', array($sAction, &$aResponseItem)); - - @\header('Content-Type: application/json; charset=utf-8'); - $sResult = \MailSo\Base\Utils::Php2js($aResponseItem); - - $sObResult = @\ob_get_clean(); - - if ($this->Logger()->IsEnabled()) - { - if (0 < \strlen($sObResult)) - { - $this->Logger()->Write($sObResult, \MailSo\Log\Enumerations\Type::ERROR, 'OB-DATA'); - } - - if ($oException) - { - $this->Logger()->WriteException($oException, \MailSo\Log\Enumerations\Type::ERROR); - } - - $iLimit = (int) $this->Config()->Get('labs', 'log_ajax_response_write_limit', 0); - $this->Logger()->Write(0 < $iLimit && $iLimit < \strlen($sResult) - ? \substr($sResult, 0, $iLimit).'...' : $sResult, \MailSo\Log\Enumerations\Type::INFO, 'AJAX'); - } - - return $sResult; - } - - /** - * @return string - */ - public function ServiceAppend() - { - @\ob_start(); - $bResponse = false; - $oException = null; - try - { - if (\method_exists($this->oActions, 'Append') && - \is_callable(array($this->oActions, 'Append'))) - { - $this->oActions->SetActionParams($this->oHttp->GetPostAsArray(), 'Append'); - $bResponse = \call_user_func(array($this->oActions, 'Append')); - } - } - catch (\Exception $oException) - { - $bResponse = false; - } - - @\header('Content-Type: text/plain; charset=utf-8'); - $sResult = true === $bResponse ? '1' : '0'; - - $sObResult = @\ob_get_clean(); - if (0 < \strlen($sObResult)) - { - $this->Logger()->Write($sObResult, \MailSo\Log\Enumerations\Type::ERROR, 'OB-DATA'); - } - - if ($oException) - { - $this->Logger()->WriteException($oException, \MailSo\Log\Enumerations\Type::ERROR); - } - - $this->Logger()->Write($sResult, \MailSo\Log\Enumerations\Type::INFO, 'APPEND'); - - return $sResult; - } - - /** - * @param string $sAction - * - * @return string - */ - private function privateUpload($sAction) - { - @\ob_start(); - $aResponseItem = null; - try - { - if (\method_exists($this->oActions, $sAction) && - \is_callable(array($this->oActions, $sAction))) - { - $this->oActions->SetActionParams($this->oHttp->GetQueryAsArray(), $sAction); - - $aResponseItem = \call_user_func(array($this->oActions, $sAction)); - } - - if (!is_array($aResponseItem)) - { - throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::UnknownError); - } - } - catch (\Exception $oException) - { - $aResponseItem = $this->oActions->ExceptionResponse($sAction, $oException); - } - - if ('iframe' === $this->oHttp->GetPost('jua-post-type', '')) - { - @\header('Content-Type: text/html; charset=utf-8'); - } - else - { - @\header('Content-Type: application/json; charset=utf-8'); - } - - $this->Plugins()->RunHook('filter.upload-response', array(&$aResponseItem)); - $sResult = \MailSo\Base\Utils::Php2js($aResponseItem); - - $sObResult = @\ob_get_clean(); - if (0 < \strlen($sObResult)) - { - $this->Logger()->Write($sObResult, \MailSo\Log\Enumerations\Type::ERROR, 'OB-DATA'); - } - - $this->Logger()->Write($sResult, \MailSo\Log\Enumerations\Type::INFO, 'UPLOAD'); - - return $sResult; - } - - /** - * @return string - */ - public function ServiceUpload() - { - return $this->privateUpload('Upload'); - } - - /** - * @return string - */ - public function ServiceUploadBackground() - { - return $this->privateUpload('UploadBackground'); - } - - /** - * @return string - */ - public function ServiceRaw() - { - $sResult = ''; - $sRawError = ''; - $sAction = empty($this->aPaths[2]) ? '' : $this->aPaths[2]; - $oException = null; - - try - { - $sRawError = 'Invalid action'; - if (0 !== \strlen($sAction)) - { - $sMethodName = 'Raw'.$sAction; - if (\method_exists($this->oActions, $sMethodName)) - { - $sRawError = ''; - $this->oActions->SetActionParams(array( - 'RawKey' => empty($this->aPaths[3]) ? '' : $this->aPaths[3] - ), $sMethodName); - - if (!\call_user_func(array($this->oActions, $sMethodName))) - { - $sRawError = 'False result'; - } - else - { - $sRawError = ''; - } - } - } - } - catch (\RainLoop\Exceptions\ClientException $oException) - { - $sRawError = 'Exception as result'; - switch ($oException->getCode()) - { - case \RainLoop\Notifications::AuthError: - $sRawError = 'Authentication failed'; - break; - } - } - catch (\Exception $oException) - { - $sRawError = 'Exception as result'; - } - - if (0 < \strlen($sRawError)) - { - $this->oActions->Logger()->Write($sRawError, \MailSo\Log\Enumerations\Type::ERROR); - } - - if ($oException) - { - $this->Logger()->WriteException($oException, \MailSo\Log\Enumerations\Type::ERROR, 'RAW'); - } - - return $sResult; - } - - /** - * @return string - */ - public function ServiceLang() - { - $sResult = ''; - @\header('Content-Type: application/javascript; charset=utf-8'); - - if (!empty($this->aPaths[2])) - { - $sLanguage = $this->oActions->ValidateLanguage($this->aPaths[2]); - - $bCacheEnabled = $this->Config()->Get('labs', 'cache_system_data', true); - if (!empty($sLanguage) && $bCacheEnabled) - { - $this->oActions->verifyCacheByKey($this->sQuery); - } - - $sCacheFileName = ''; - if ($bCacheEnabled) - { - $sCacheFileName = 'LANG:'.$this->oActions->Plugins()->Hash().$sLanguage.APP_VERSION; - $sResult = $this->Cacher()->Get($sCacheFileName); - } - - if (0 === \strlen($sResult)) - { - $sResult = $this->compileLanguage($sLanguage, false); - if ($bCacheEnabled && 0 < \strlen($sCacheFileName)) - { - $this->Cacher()->Set($sCacheFileName, $sResult); - } - } - - if ($bCacheEnabled) - { - $this->oActions->cacheByKey($this->sQuery); - } - } - - return $sResult; - } - - /** - * @return string - */ - public function ServiceTemplates() - { - $sResult = ''; - @\header('Content-Type: application/javascript; charset=utf-8'); - - $bCacheEnabled = $this->Config()->Get('labs', 'cache_system_data', true); - if ($bCacheEnabled) - { - $this->oActions->verifyCacheByKey($this->sQuery); - } - - $sCacheFileName = ''; - if ($bCacheEnabled) - { - $sCacheFileName = 'TEMPLATES:'.$this->oActions->Plugins()->Hash().APP_VERSION; - $sResult = $this->Cacher()->Get($sCacheFileName); - } - - if (0 === \strlen($sResult)) - { - $sResult = $this->compileTemplates(false); - if ($bCacheEnabled && 0 < \strlen($sCacheFileName)) - { - $this->Cacher()->Set($sCacheFileName, $sResult); - } - } - - if ($bCacheEnabled) - { - $this->oActions->cacheByKey($this->sQuery); - } - - return $sResult; - } - - /** - * @return string - */ - public function ServicePlugins() - { - $sResult = ''; - $bAdmin = !empty($this->aPaths[2]) && 'Admin' === $this->aPaths[2]; - - @\header('Content-Type: application/javascript; charset=utf-8'); - - $bCacheEnabled = $this->Config()->Get('labs', 'cache_system_data', true); - if ($bCacheEnabled) - { - $this->oActions->verifyCacheByKey($this->sQuery); - } - - $sCacheFileName = ''; - if ($bCacheEnabled) - { - $sCacheFileName = 'PLUGIN:'.$this->oActions->Plugins()->Hash().APP_VERSION; - $sResult = $this->Cacher()->Get($sCacheFileName); - } - - if (0 === strlen($sResult)) - { - $sResult = $this->Plugins()->CompileJs($bAdmin); - if ($bCacheEnabled && 0 < \strlen($sCacheFileName)) - { - $this->Cacher()->Set($sCacheFileName, $sResult); - } - } - - if ($bCacheEnabled) - { - $this->oActions->cacheByKey($this->sQuery); - } - - return $sResult; - } - - /** - * @return string - */ - public function ServiceCss() - { - $sResult = ''; - $bCustom = false; - $oAccount = null; - $oSettings = null; - - $bAdmin = !empty($this->aPaths[2]) && 'Admin' === $this->aPaths[2]; - $bJson = !empty($this->aPaths[7]) && 'Json' === $this->aPaths[7]; - - if ($bJson) - { - @\header('Content-Type: application/json; charset=utf-8'); - } - else - { - @\header('Content-Type: text/css; charset=utf-8'); - } - - $sTheme = ''; - if (!empty($this->aPaths[4])) - { - $sTheme = $this->oActions->ValidateTheme($this->aPaths[4]); - if ('Custom' === $sTheme && !empty($this->aPaths[1]) && '0' !== $this->aPaths[1]) - { - $bCustom = true; - $oAccount = $this->oActions->GetAccount(false); - if ($oAccount) - { - $oSettings = $this->oActions->SettingsProvider()->Load($oAccount); - } - } - - $bCacheEnabled = $this->Config()->Get('labs', 'cache_system_data', true); - if ($bCacheEnabled && !$bCustom) - { - $this->oActions->verifyCacheByKey($this->sQuery); - } - - $sCacheFileName = ''; - if ($bCacheEnabled && !$bCustom) - { - $sCacheFileName = 'THEMES/PLUGINS:'.$sTheme.':'.$this->Plugins()->Hash(); - $sResult = $this->Cacher()->Get($sCacheFileName); - } - - if (0 === \strlen($sResult)) - { - try - { - include_once APP_VERSION_ROOT_PATH.'app/libraries/lessphp/ctype.php'; - include_once APP_VERSION_ROOT_PATH.'app/libraries/lessphp/lessc.inc.php'; - - $oLess = new \lessc(); - $oLess->setFormatter('compressed'); - - $aResult = array(); - - $sThemeValuesFile = APP_VERSION_ROOT_PATH.'app/templates/Themes/values.less'; - if ($bCustom) - { - $sThemeFile = APP_VERSION_ROOT_PATH.'app/templates/Themes/custom-values-light.less'; - if ($oSettings) - { - if (\RainLoop\Enumerations\CustomThemeType::LIGHT === (string) $oSettings->GetConf('CustomThemeType', \RainLoop\Enumerations\CustomThemeType::LIGHT)) - { - $sThemeFile = APP_VERSION_ROOT_PATH.'app/templates/Themes/custom-values-light.less'; - } - else - { - $sThemeFile = APP_VERSION_ROOT_PATH.'app/templates/Themes/custom-values-dark.less'; - } - } - } - else - { - $sThemeFile = APP_VERSION_ROOT_PATH.'themes/'.$sTheme.'/styles.less'; - } - - $sThemeTemplateFile = APP_VERSION_ROOT_PATH.'app/templates/Themes/template.less'; - - if (\file_exists($sThemeFile) && \file_exists($sThemeTemplateFile) && \file_exists($sThemeValuesFile)) - { - $aResult[] = '@base: "'.APP_WEB_PATH.'themes/'.$sTheme.'/";'; - $aResult[] = \file_get_contents($sThemeValuesFile); - $aResult[] = \file_get_contents($sThemeFile); - $aResult[] = \file_get_contents($sThemeTemplateFile); - - if (\file_exists(APP_VERSION_ROOT_PATH.'themes/'.$sTheme.'/ext.less')) - { - $aResult[] = \file_get_contents(APP_VERSION_ROOT_PATH.'themes/'.$sTheme.'/ext.less'); - } - } - - $aResult[] = $this->Plugins()->CompileCss($bAdmin); - - $sResult = $oLess->compile(\implode("\n", $aResult)); - - if ($bCustom && $oAccount) - { - $mData = $this->oActions->StorageProvider()->Get($oAccount, StorageType::USER, 'CustomThemeBackground', ''); - if (!empty($mData) && 'data:' === \substr($mData, 0, 5)) - { - $sResult = \str_replace('background-image:link', 'background-image:url("'.$mData.'")', $sResult); - } - } - - if ($bCacheEnabled && !$bCustom) - { - if (0 < \strlen($sCacheFileName)) - { - $this->Cacher()->Set($sCacheFileName, $sResult); - } - } - } - catch (\Exception $oException) - { - $this->Logger()->WriteException($oException, \MailSo\Log\Enumerations\Type::ERROR, 'LESS'); - } - } - - if ($bCacheEnabled && !$bCustom) - { - $this->oActions->cacheByKey($this->sQuery); - } - } - - return $bJson ? \MailSo\Base\Utils::Php2js(array($sTheme, $sResult)) : $sResult; - } - - /** - * @return string - */ - public function ServiceSocialGoogle() - { - return $this->oActions->Social()->GooglePopupService(); - } - - /** - * @return string - */ - public function ServiceSocialFacebook() - { - return $this->oActions->Social()->FacebookPopupService(); - } - - /** - * @return string - */ - public function ServiceSocialTwitter() - { - return $this->oActions->Social()->TwitterPopupService(); - } - - /** - * @return string - */ - public function ServiceAppData() - { - return $this->localAppData(false); - } - - /** - * @return string - */ - public function ServiceAdminAppData() - { - return $this->localAppData(true); - } - - /** - * @return string - */ - public function ServiceNoScript() - { - return $this->localError($this->oActions->StaticI18N('STATIC/NO_SCRIPT_TITLE'), $this->oActions->StaticI18N('STATIC/NO_SCRIPT_DESC')); - } - - /** - * @return string - */ - public function ServiceNoCookie() - { - return $this->localError($this->oActions->StaticI18N('STATIC/NO_COOKIE_TITLE'), $this->oActions->StaticI18N('STATIC/NO_COOKIE_DESC')); - } - - /** - * @return string - */ - public function ServiceBadBrowser() - { - $sTitle = $this->oActions->StaticI18N('STATIC/BAD_BROWSER_TITLE'); - $sDesc = \nl2br($this->oActions->StaticI18N('STATIC/BAD_BROWSER_DESC')); - - @\header('Content-Type: text/html; charset=utf-8'); - return \strtr(\file_get_contents(APP_VERSION_ROOT_PATH.'app/templates/BadBrowser.html'), array( - '{{BaseWebStaticPath}}' => APP_WEB_STATIC_PATH, - '{{ErrorTitle}}' => $sTitle, - '{{ErrorHeader}}' => $sTitle, - '{{ErrorDesc}}' => $sDesc - )); - } - - /** - * @return string - */ - public function ServicePing() - { - @\header('Content-Type: text/plain; charset=utf-8'); - $this->oActions->Logger()->Write('Pong', \MailSo\Log\Enumerations\Type::INFO, 'PING'); - return 'Pong'; - } - - /** - * @return string - */ - public function ServiceInfo() - { - if ($this->oActions->IsAdminLoggined(false)) - { - @\header('Content-Type: text/html; charset=utf-8'); - \phpinfo(); - } - } - - /** - * @return string - */ - public function ServiceExternalLogin() - { - if ($this->oActions->Config()->Get('labs', 'allow_external_login', false)) - { - $oException = null; - try - { - $sEmail = trim($this->oHttp->GetRequest('Email', '')); - $sLogin = trim($this->oHttp->GetRequest('Login', '')); - $sPassword = $this->oHttp->GetRequest('Password', ''); - - $this->oActions->Logger()->AddSecret($sPassword); - - if (0 === \strlen($sLogin)) - { - $sLogin = $sEmail; - } - - $oAccount = $this->oActions->LoginProcess($sEmail, $sLogin, $sPassword); - $this->oActions->AuthProcess($oAccount); - } - catch (\Exception $oException) - { - $this->oActions->Logger()->WriteException($oException); - } - } - - $this->oActions->Location('./'); - return ''; - } - - /** - * @return string - */ - public function ServiceChange() - { - if ($this->Config()->Get('webmail', 'allow_additional_accounts', true)) - { - $oAccountToLogin = null; - $sEmail = empty($this->aPaths[2]) ? '' : \strtolower(\urldecode(\trim($this->aPaths[2]))); - if (!empty($sEmail)) - { - $oAccount = $this->oActions->GetAccount(); - if ($oAccount) - { - $aAccounts = $this->oActions->GetAccounts($oAccount); - if (isset($aAccounts[$sEmail])) - { - $oAccountToLogin = $this->oActions->GetAccountFromCustomToken($aAccounts[$sEmail], false); - } - } - } - - if ($oAccountToLogin) - { - $this->oActions->AuthProcess($oAccountToLogin, true); - } - } - - $this->oActions->Location('./'); - return ''; - } - - /** - * @param string $sTitle - * @param string $sDesc - * - * @return string - */ - private function localError($sTitle, $sDesc) - { - @header('Content-Type: text/html; charset=utf-8'); - return $this->oActions->ErrorTemplates($sTitle, \nl2br($sDesc)); - } - - /** - * @param bool $bAdmin = true - * - * @return string - */ - private function localAppData($bAdmin = false) - { - @\header('Content-Type: application/javascript; charset=utf-8'); - @\header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); - @\header('Last-Modified: '.\gmdate('D, d M Y H:i:s').' GMT'); - @\header('Cache-Control: no-store, no-cache, must-revalidate'); - @\header('Cache-Control: post-check=0, pre-check=0', false); - @\header('Pragma: no-cache'); - - $sAuthAccountHash = ''; - if (!$bAdmin) - { - $sAuthAccountHash = $this->oActions->GetSpecAuthTokenWithDeletion(); - if (empty($sAuthAccountHash)) - { - $sAuthAccountHash = $this->oActions->GetSpecAuthToken(); - } - - if (empty($sAuthAccountHash)) - { - $sSignMeToken = \RainLoop\Utils::GetCookie(\RainLoop\Actions::AUTH_SIGN_ME_TOKEN_KEY, ''); - if (!empty($sSignMeToken)) - { - $oAccount = $this->oActions->GetAccountFromCustomToken($this->StorageProvider()->Get(null, - \RainLoop\Providers\Storage\Enumerations\StorageType::NOBODY, - 'SignMe/UserToken/'.$sSignMeToken - ), false); - - if ($oAccount) - { - $this->oActions->AuthProcess($oAccount); - $sAuthAccountHash = $this->oActions->GetSpecAuthToken(); - } - } - } - - $this->oActions->SetSpecAuthToken($sAuthAccountHash); - } - - $sResult = $this->compileAppData($this->oActions->AppData($bAdmin, $sAuthAccountHash), false); - - $this->Logger()->Write($sResult, \MailSo\Log\Enumerations\Type::INFO, 'APPDATA'); - - return $sResult; - } - - /** - * @param bool $bAdmin = false - * @param bool $bWrapByScriptTag = true - * - * @return string - */ - private function compileTemplates($bAdmin = false, $bWrapByScriptTag = false) - { - $sHtml = \RainLoop\Utils::CompileTemplates(APP_VERSION_ROOT_PATH.'app/templates/Views', $this->oActions). - $this->oActions->Plugins()->CompileTemplate($bAdmin); - - return - ($bWrapByScriptTag ? '' : '') - ; - } - - /** - * @param string $sLanguage - * @param bool $bWrapByScriptTag = true - * - * @return string - */ - private function compileLanguage($sLanguage, $bWrapByScriptTag = true) - { - $aResultLang = array(); - - $sMoment = 'window.moment && window.moment.lang && window.moment.lang(\'en\');'; - $sMomentFileName = APP_VERSION_ROOT_PATH.'app/i18n/moment/'.$sLanguage.'.js'; - if (\file_exists($sMomentFileName)) - { - $sMoment = \file_get_contents($sMomentFileName); - $sMoment = \preg_replace('/\/\/[^\n]+\n/', '', $sMoment); - } - - \RainLoop\Utils::ReadAndAddLang(APP_VERSION_ROOT_PATH.'app/i18n/langs.ini', $aResultLang); - \RainLoop\Utils::ReadAndAddLang(APP_VERSION_ROOT_PATH.'langs/'.$sLanguage.'.ini', $aResultLang); - - $this->Plugins()->ReadLang($sLanguage, $aResultLang); - - $sLangJs = ''; - $aLangKeys = \array_keys($aResultLang); - foreach ($aLangKeys as $sKey) - { - $sString = isset($aResultLang[$sKey]) ? $aResultLang[$sKey] : $sKey; - - $sLangJs .= '"'.\str_replace('"', '\\"', \str_replace('\\', '\\\\', $sKey)).'":' - .'"'.\str_replace(array("\r", "\n", "\t"), array('\r', '\n', '\t'), - \str_replace('"', '\\"', \str_replace('\\', '\\\\', $sString))).'",'; - } - - $sResult = empty($sLangJs) ? 'null' : '{'.\substr($sLangJs, 0, -1).'}'; - - return - ($bWrapByScriptTag ? '' : '') - ; - } - - /** - * @param array $aAppData - * @param bool $bWrapByScriptTag = true - * - * @return string - */ - private function compileAppData($aAppData, $bWrapByScriptTag = true) - { - return - ($bWrapByScriptTag ? '' : '') - ; - } -} +oHttp = $oHttp; + $this->oActions = $oActions; + $this->aPaths = array(); + } + + /** + * @return \MailSo\Log\Logger + */ + public function Logger() + { + return $this->oActions->Logger(); + } + + /** + * @return \RainLoop\Plugins\Manager + */ + public function Plugins() + { + return $this->oActions->Plugins(); + } + + /** + * @return \RainLoop\Application + */ + public function Config() + { + return $this->oActions->Config(); + } + + /** + * @return \MailSo\Cache\CacheClient + */ + public function Cacher() + { + return $this->oActions->Cacher(); + } + + /** + * @return \RainLoop\Providers\Storage + */ + public function StorageProvider() + { + return $this->oActions->StorageProvider(); + } + + /** + * @param array $aPaths + * + * @return \RainLoop\ServiceActions + */ + public function SetPaths($aPaths) + { + $this->aPaths = \is_array($aPaths) ? $aPaths : array(); + return $this; + } + + /** + * @param string $sQuery + * + * @return \RainLoop\ServiceActions + */ + public function SetQuery($sQuery) + { + $this->sQuery = $sQuery; + return $this; + } + + /** + * @return string + */ + public function ServiceAjax() + { + @\ob_start(); + + $aResponseItem = null; + $oException = null; + + $sAction = $this->oHttp->GetPost('Action', null); + if (empty($sAction) && $this->oHttp->IsGet() && !empty($this->aPaths[2])) + { + $sAction = $this->aPaths[2]; + } + + try + { + if ($this->oHttp->IsPost() && + $this->Config()->Get('security', 'csrf_protection', false) + && $this->oHttp->GetPost('XToken', '') !== \RainLoop\Utils::GetCsrfToken()) + { + throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::InvalidToken); + } + else if (!empty($sAction)) + { + $sMethodName = 'Do'.$sAction; + + $this->Logger()->Write('Action: '.$sMethodName, \MailSo\Log\Enumerations\Type::NOTE, 'AJAX'); + + $aPost = $this->oHttp->GetPostAsArray(); + if (\is_array($aPost) && 0 < \count($aPost)) + { + $this->oActions->SetActionParams($aPost, $sMethodName); + switch ($sMethodName) + { + case 'DoLogin': + case 'DoAdminLogin': + case 'DoAccountAdd': + $this->Logger()->AddSecret($this->oActions->GetActionParam('Password', '')); + break; + case 'DoChangePassword': + $this->Logger()->AddSecret($this->oActions->GetActionParam('PrevPassword', '')); + $this->Logger()->AddSecret($this->oActions->GetActionParam('NewPassword', '')); + break; + } + + $this->Logger()->Write(\MailSo\Base\Utils::Php2js($aPost), \MailSo\Log\Enumerations\Type::INFO, 'POST', true); + } + else if (3 < \count($this->aPaths) && $this->oHttp->IsGet()) + { + $this->oActions->SetActionParams(array( + 'RawKey' => empty($this->aPaths[3]) ? '' : $this->aPaths[3] + ), $sMethodName); + } + + if (\method_exists($this->oActions, $sMethodName) && + \is_callable(array($this->oActions, $sMethodName))) + { + $this->Plugins()->RunHook('ajax.action-pre-call', array($sAction)); + $aResponseItem = \call_user_func(array($this->oActions, $sMethodName)); + $this->Plugins()->RunHook('ajax.action-post-call', array($sAction, &$aResponseItem)); + } + else if ($this->Plugins()->HasAdditionalAjax($sMethodName)) + { + $this->Plugins()->RunHook('ajax.action-pre-call', array($sAction)); + $aResponseItem = $this->Plugins()->RunAdditionalAjax($sMethodName); + $this->Plugins()->RunHook('ajax.action-post-call', array($sAction, &$aResponseItem)); + } + } + + if (!\is_array($aResponseItem)) + { + throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::UnknownError); + } + } + catch (\Exception $oException) + { + $aResponseItem = $this->oActions->ExceptionResponse( + empty($sAction) ? 'Unknown' : $sAction, $oException); + + if (\is_array($aResponseItem) && 'Folders' === $sAction && $oException instanceof \RainLoop\Exceptions\ClientException) + { + $aResponseItem['Logout'] = true; + } + } + + if (\is_array($aResponseItem)) + { + $aResponseItem['Time'] = (int) ((\microtime(true) - APP_START) * 1000); + } + + $this->Plugins()->RunHook('filter.ajax-response', array($sAction, &$aResponseItem)); + + @\header('Content-Type: application/json; charset=utf-8'); + $sResult = \MailSo\Base\Utils::Php2js($aResponseItem); + + $sObResult = @\ob_get_clean(); + + if ($this->Logger()->IsEnabled()) + { + if (0 < \strlen($sObResult)) + { + $this->Logger()->Write($sObResult, \MailSo\Log\Enumerations\Type::ERROR, 'OB-DATA'); + } + + if ($oException) + { + $this->Logger()->WriteException($oException, \MailSo\Log\Enumerations\Type::ERROR); + } + + $iLimit = (int) $this->Config()->Get('labs', 'log_ajax_response_write_limit', 0); + $this->Logger()->Write(0 < $iLimit && $iLimit < \strlen($sResult) + ? \substr($sResult, 0, $iLimit).'...' : $sResult, \MailSo\Log\Enumerations\Type::INFO, 'AJAX'); + } + + return $sResult; + } + + /** + * @return string + */ + public function ServiceAppend() + { + @\ob_start(); + $bResponse = false; + $oException = null; + try + { + if (\method_exists($this->oActions, 'Append') && + \is_callable(array($this->oActions, 'Append'))) + { + $this->oActions->SetActionParams($this->oHttp->GetPostAsArray(), 'Append'); + $bResponse = \call_user_func(array($this->oActions, 'Append')); + } + } + catch (\Exception $oException) + { + $bResponse = false; + } + + @\header('Content-Type: text/plain; charset=utf-8'); + $sResult = true === $bResponse ? '1' : '0'; + + $sObResult = @\ob_get_clean(); + if (0 < \strlen($sObResult)) + { + $this->Logger()->Write($sObResult, \MailSo\Log\Enumerations\Type::ERROR, 'OB-DATA'); + } + + if ($oException) + { + $this->Logger()->WriteException($oException, \MailSo\Log\Enumerations\Type::ERROR); + } + + $this->Logger()->Write($sResult, \MailSo\Log\Enumerations\Type::INFO, 'APPEND'); + + return $sResult; + } + + /** + * @param string $sAction + * + * @return string + */ + private function privateUpload($sAction) + { + @\ob_start(); + $aResponseItem = null; + try + { + if (\method_exists($this->oActions, $sAction) && + \is_callable(array($this->oActions, $sAction))) + { + $this->oActions->SetActionParams($this->oHttp->GetQueryAsArray(), $sAction); + + $aResponseItem = \call_user_func(array($this->oActions, $sAction)); + } + + if (!is_array($aResponseItem)) + { + throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::UnknownError); + } + } + catch (\Exception $oException) + { + $aResponseItem = $this->oActions->ExceptionResponse($sAction, $oException); + } + + if ('iframe' === $this->oHttp->GetPost('jua-post-type', '')) + { + @\header('Content-Type: text/html; charset=utf-8'); + } + else + { + @\header('Content-Type: application/json; charset=utf-8'); + } + + $this->Plugins()->RunHook('filter.upload-response', array(&$aResponseItem)); + $sResult = \MailSo\Base\Utils::Php2js($aResponseItem); + + $sObResult = @\ob_get_clean(); + if (0 < \strlen($sObResult)) + { + $this->Logger()->Write($sObResult, \MailSo\Log\Enumerations\Type::ERROR, 'OB-DATA'); + } + + $this->Logger()->Write($sResult, \MailSo\Log\Enumerations\Type::INFO, 'UPLOAD'); + + return $sResult; + } + + /** + * @return string + */ + public function ServiceUpload() + { + return $this->privateUpload('Upload'); + } + + /** + * @return string + */ + public function ServiceUploadBackground() + { + return $this->privateUpload('UploadBackground'); + } + + /** + * @return string + */ + public function ServiceRaw() + { + $sResult = ''; + $sRawError = ''; + $sAction = empty($this->aPaths[2]) ? '' : $this->aPaths[2]; + $oException = null; + + try + { + $sRawError = 'Invalid action'; + if (0 !== \strlen($sAction)) + { + $sMethodName = 'Raw'.$sAction; + if (\method_exists($this->oActions, $sMethodName)) + { + $sRawError = ''; + $this->oActions->SetActionParams(array( + 'RawKey' => empty($this->aPaths[3]) ? '' : $this->aPaths[3] + ), $sMethodName); + + if (!\call_user_func(array($this->oActions, $sMethodName))) + { + $sRawError = 'False result'; + } + else + { + $sRawError = ''; + } + } + } + } + catch (\RainLoop\Exceptions\ClientException $oException) + { + $sRawError = 'Exception as result'; + switch ($oException->getCode()) + { + case \RainLoop\Notifications::AuthError: + $sRawError = 'Authentication failed'; + break; + } + } + catch (\Exception $oException) + { + $sRawError = 'Exception as result'; + } + + if (0 < \strlen($sRawError)) + { + $this->oActions->Logger()->Write($sRawError, \MailSo\Log\Enumerations\Type::ERROR); + } + + if ($oException) + { + $this->Logger()->WriteException($oException, \MailSo\Log\Enumerations\Type::ERROR, 'RAW'); + } + + return $sResult; + } + + /** + * @return string + */ + public function ServiceLang() + { + $sResult = ''; + @\header('Content-Type: application/javascript; charset=utf-8'); + + if (!empty($this->aPaths[2])) + { + $sLanguage = $this->oActions->ValidateLanguage($this->aPaths[2]); + + $bCacheEnabled = $this->Config()->Get('labs', 'cache_system_data', true); + if (!empty($sLanguage) && $bCacheEnabled) + { + $this->oActions->verifyCacheByKey($this->sQuery); + } + + $sCacheFileName = ''; + if ($bCacheEnabled) + { + $sCacheFileName = 'LANG:'.$this->oActions->Plugins()->Hash().$sLanguage.APP_VERSION; + $sResult = $this->Cacher()->Get($sCacheFileName); + } + + if (0 === \strlen($sResult)) + { + $sResult = $this->compileLanguage($sLanguage, false); + if ($bCacheEnabled && 0 < \strlen($sCacheFileName)) + { + $this->Cacher()->Set($sCacheFileName, $sResult); + } + } + + if ($bCacheEnabled) + { + $this->oActions->cacheByKey($this->sQuery); + } + } + + return $sResult; + } + + /** + * @return string + */ + public function ServiceTemplates() + { + $sResult = ''; + @\header('Content-Type: application/javascript; charset=utf-8'); + + $bCacheEnabled = $this->Config()->Get('labs', 'cache_system_data', true); + if ($bCacheEnabled) + { + $this->oActions->verifyCacheByKey($this->sQuery); + } + + $sCacheFileName = ''; + if ($bCacheEnabled) + { + $sCacheFileName = 'TEMPLATES:'.$this->oActions->Plugins()->Hash().APP_VERSION; + $sResult = $this->Cacher()->Get($sCacheFileName); + } + + if (0 === \strlen($sResult)) + { + $sResult = $this->compileTemplates(false); + if ($bCacheEnabled && 0 < \strlen($sCacheFileName)) + { + $this->Cacher()->Set($sCacheFileName, $sResult); + } + } + + if ($bCacheEnabled) + { + $this->oActions->cacheByKey($this->sQuery); + } + + return $sResult; + } + + /** + * @return string + */ + public function ServicePlugins() + { + $sResult = ''; + $bAdmin = !empty($this->aPaths[2]) && 'Admin' === $this->aPaths[2]; + + @\header('Content-Type: application/javascript; charset=utf-8'); + + $bCacheEnabled = $this->Config()->Get('labs', 'cache_system_data', true); + if ($bCacheEnabled) + { + $this->oActions->verifyCacheByKey($this->sQuery); + } + + $sCacheFileName = ''; + if ($bCacheEnabled) + { + $sCacheFileName = 'PLUGIN:'.$this->oActions->Plugins()->Hash().APP_VERSION; + $sResult = $this->Cacher()->Get($sCacheFileName); + } + + if (0 === strlen($sResult)) + { + $sResult = $this->Plugins()->CompileJs($bAdmin); + if ($bCacheEnabled && 0 < \strlen($sCacheFileName)) + { + $this->Cacher()->Set($sCacheFileName, $sResult); + } + } + + if ($bCacheEnabled) + { + $this->oActions->cacheByKey($this->sQuery); + } + + return $sResult; + } + + /** + * @return string + */ + public function ServiceCss() + { + $sResult = ''; + $bCustom = false; + $oAccount = null; + $oSettings = null; + + $bAdmin = !empty($this->aPaths[2]) && 'Admin' === $this->aPaths[2]; + $bJson = !empty($this->aPaths[7]) && 'Json' === $this->aPaths[7]; + + if ($bJson) + { + @\header('Content-Type: application/json; charset=utf-8'); + } + else + { + @\header('Content-Type: text/css; charset=utf-8'); + } + + $sTheme = ''; + if (!empty($this->aPaths[4])) + { + $sTheme = $this->oActions->ValidateTheme($this->aPaths[4]); + if ('Custom' === $sTheme && !empty($this->aPaths[1]) && '0' !== $this->aPaths[1]) + { + $bCustom = true; + $oAccount = $this->oActions->GetAccount(false); + if ($oAccount) + { + $oSettings = $this->oActions->SettingsProvider()->Load($oAccount); + } + } + + $bCacheEnabled = $this->Config()->Get('labs', 'cache_system_data', true); + if ($bCacheEnabled && !$bCustom) + { + $this->oActions->verifyCacheByKey($this->sQuery); + } + + $sCacheFileName = ''; + if ($bCacheEnabled && !$bCustom) + { + $sCacheFileName = 'THEMES/PLUGINS:'.$sTheme.':'.$this->Plugins()->Hash(); + $sResult = $this->Cacher()->Get($sCacheFileName); + } + + if (0 === \strlen($sResult)) + { + try + { + include_once APP_VERSION_ROOT_PATH.'app/libraries/lessphp/ctype.php'; + include_once APP_VERSION_ROOT_PATH.'app/libraries/lessphp/lessc.inc.php'; + + $oLess = new \lessc(); + $oLess->setFormatter('compressed'); + + $aResult = array(); + + $sThemeValuesFile = APP_VERSION_ROOT_PATH.'app/templates/Themes/values.less'; + if ($bCustom) + { + $sThemeFile = APP_VERSION_ROOT_PATH.'app/templates/Themes/custom-values-light.less'; + if ($oSettings) + { + if (\RainLoop\Enumerations\CustomThemeType::LIGHT === (string) $oSettings->GetConf('CustomThemeType', \RainLoop\Enumerations\CustomThemeType::LIGHT)) + { + $sThemeFile = APP_VERSION_ROOT_PATH.'app/templates/Themes/custom-values-light.less'; + } + else + { + $sThemeFile = APP_VERSION_ROOT_PATH.'app/templates/Themes/custom-values-dark.less'; + } + } + } + else + { + $sThemeFile = APP_VERSION_ROOT_PATH.'themes/'.$sTheme.'/styles.less'; + } + + $sThemeTemplateFile = APP_VERSION_ROOT_PATH.'app/templates/Themes/template.less'; + + if (\file_exists($sThemeFile) && \file_exists($sThemeTemplateFile) && \file_exists($sThemeValuesFile)) + { + $aResult[] = '@base: "'.APP_WEB_PATH.'themes/'.$sTheme.'/";'; + $aResult[] = \file_get_contents($sThemeValuesFile); + $aResult[] = \file_get_contents($sThemeFile); + $aResult[] = \file_get_contents($sThemeTemplateFile); + + if (\file_exists(APP_VERSION_ROOT_PATH.'themes/'.$sTheme.'/ext.less')) + { + $aResult[] = \file_get_contents(APP_VERSION_ROOT_PATH.'themes/'.$sTheme.'/ext.less'); + } + } + + $aResult[] = $this->Plugins()->CompileCss($bAdmin); + + $sResult = $oLess->compile(\implode("\n", $aResult)); + + if ($bCustom && $oAccount) + { + $mData = $this->oActions->StorageProvider()->Get($oAccount, StorageType::USER, 'CustomThemeBackground', ''); + if (!empty($mData) && 'data:' === \substr($mData, 0, 5)) + { + $sResult = \str_replace('background-image:link', 'background-image:url("'.$mData.'")', $sResult); + } + } + + if ($bCacheEnabled && !$bCustom) + { + if (0 < \strlen($sCacheFileName)) + { + $this->Cacher()->Set($sCacheFileName, $sResult); + } + } + } + catch (\Exception $oException) + { + $this->Logger()->WriteException($oException, \MailSo\Log\Enumerations\Type::ERROR, 'LESS'); + } + } + + if ($bCacheEnabled && !$bCustom) + { + $this->oActions->cacheByKey($this->sQuery); + } + } + + return $bJson ? \MailSo\Base\Utils::Php2js(array($sTheme, $sResult)) : $sResult; + } + + /** + * @return string + */ + public function ServiceSocialGoogle() + { + return $this->oActions->Social()->GooglePopupService(); + } + + /** + * @return string + */ + public function ServiceSocialFacebook() + { + return $this->oActions->Social()->FacebookPopupService(); + } + + /** + * @return string + */ + public function ServiceSocialTwitter() + { + return $this->oActions->Social()->TwitterPopupService(); + } + + /** + * @return string + */ + public function ServiceAppData() + { + return $this->localAppData(false); + } + + /** + * @return string + */ + public function ServiceAdminAppData() + { + return $this->localAppData(true); + } + + /** + * @return string + */ + public function ServiceNoScript() + { + return $this->localError($this->oActions->StaticI18N('STATIC/NO_SCRIPT_TITLE'), $this->oActions->StaticI18N('STATIC/NO_SCRIPT_DESC')); + } + + /** + * @return string + */ + public function ServiceNoCookie() + { + return $this->localError($this->oActions->StaticI18N('STATIC/NO_COOKIE_TITLE'), $this->oActions->StaticI18N('STATIC/NO_COOKIE_DESC')); + } + + /** + * @return string + */ + public function ServiceBadBrowser() + { + $sTitle = $this->oActions->StaticI18N('STATIC/BAD_BROWSER_TITLE'); + $sDesc = \nl2br($this->oActions->StaticI18N('STATIC/BAD_BROWSER_DESC')); + + @\header('Content-Type: text/html; charset=utf-8'); + return \strtr(\file_get_contents(APP_VERSION_ROOT_PATH.'app/templates/BadBrowser.html'), array( + '{{BaseWebStaticPath}}' => APP_WEB_STATIC_PATH, + '{{ErrorTitle}}' => $sTitle, + '{{ErrorHeader}}' => $sTitle, + '{{ErrorDesc}}' => $sDesc + )); + } + + /** + * @return string + */ + public function ServicePing() + { + @\header('Content-Type: text/plain; charset=utf-8'); + $this->oActions->Logger()->Write('Pong', \MailSo\Log\Enumerations\Type::INFO, 'PING'); + return 'Pong'; + } + + /** + * @return string + */ + public function ServiceInfo() + { + if ($this->oActions->IsAdminLoggined(false)) + { + @\header('Content-Type: text/html; charset=utf-8'); + \phpinfo(); + } + } + + /** + * @return string + */ + public function ServiceExternalLogin() + { + if ($this->oActions->Config()->Get('labs', 'allow_external_login', false)) + { + $oException = null; + try + { + $sEmail = trim($this->oHttp->GetRequest('Email', '')); + $sLogin = trim($this->oHttp->GetRequest('Login', '')); + $sPassword = $this->oHttp->GetRequest('Password', ''); + + $this->oActions->Logger()->AddSecret($sPassword); + + if (0 === \strlen($sLogin)) + { + $sLogin = $sEmail; + } + + $oAccount = $this->oActions->LoginProcess($sEmail, $sLogin, $sPassword); + $this->oActions->AuthProcess($oAccount); + } + catch (\Exception $oException) + { + $this->oActions->Logger()->WriteException($oException); + } + } + + $this->oActions->Location('./'); + return ''; + } + + /** + * @return string + */ + public function ServiceChange() + { + if ($this->Config()->Get('webmail', 'allow_additional_accounts', true)) + { + $oAccountToLogin = null; + $sEmail = empty($this->aPaths[2]) ? '' : \strtolower(\urldecode(\trim($this->aPaths[2]))); + if (!empty($sEmail)) + { + $oAccount = $this->oActions->GetAccount(); + if ($oAccount) + { + $aAccounts = $this->oActions->GetAccounts($oAccount); + if (isset($aAccounts[$sEmail])) + { + $oAccountToLogin = $this->oActions->GetAccountFromCustomToken($aAccounts[$sEmail], false, false); + } + } + } + + if ($oAccountToLogin) + { + $this->oActions->AuthProcess($oAccountToLogin); + } + } + + $this->oActions->Location('./'); + return ''; + } + + /** + * @param string $sTitle + * @param string $sDesc + * + * @return string + */ + private function localError($sTitle, $sDesc) + { + @header('Content-Type: text/html; charset=utf-8'); + return $this->oActions->ErrorTemplates($sTitle, \nl2br($sDesc)); + } + + /** + * @param bool $bAdmin = true + * + * @return string + */ + private function localAppData($bAdmin = false) + { + @\header('Content-Type: application/javascript; charset=utf-8'); + @\header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); + @\header('Last-Modified: '.\gmdate('D, d M Y H:i:s').' GMT'); + @\header('Cache-Control: no-store, no-cache, must-revalidate'); + @\header('Cache-Control: post-check=0, pre-check=0', false); + @\header('Pragma: no-cache'); + + $sAuthAccountHash = ''; + if (!$bAdmin) + { + $sAuthAccountHash = $this->oActions->GetSpecAuthTokenWithDeletion(); + if (empty($sAuthAccountHash)) + { + $sAuthAccountHash = $this->oActions->GetSpecAuthToken(); + } + + if (empty($sAuthAccountHash)) + { + $sSignMeToken = \RainLoop\Utils::GetCookie(\RainLoop\Actions::AUTH_SIGN_ME_TOKEN_KEY, ''); + if (!empty($sSignMeToken)) + { + $oAccount = $this->oActions->GetAccountFromCustomToken($this->StorageProvider()->Get(null, + \RainLoop\Providers\Storage\Enumerations\StorageType::NOBODY, + 'SignMe/UserToken/'.$sSignMeToken + ), false, false); + + if ($oAccount) + { + $this->oActions->AuthProcess($oAccount); + $sAuthAccountHash = $this->oActions->GetSpecAuthToken(); + } + } + } + + $this->oActions->SetSpecAuthToken($sAuthAccountHash); + } + + $sResult = $this->compileAppData($this->oActions->AppData($bAdmin, $sAuthAccountHash), false); + + $this->Logger()->Write($sResult, \MailSo\Log\Enumerations\Type::INFO, 'APPDATA'); + + return $sResult; + } + + /** + * @param bool $bAdmin = false + * @param bool $bWrapByScriptTag = true + * + * @return string + */ + private function compileTemplates($bAdmin = false, $bWrapByScriptTag = false) + { + $sHtml = \RainLoop\Utils::CompileTemplates(APP_VERSION_ROOT_PATH.'app/templates/Views', $this->oActions). + $this->oActions->Plugins()->CompileTemplate($bAdmin); + + return + ($bWrapByScriptTag ? '' : '') + ; + } + + /** + * @param string $sLanguage + * @param bool $bWrapByScriptTag = true + * + * @return string + */ + private function compileLanguage($sLanguage, $bWrapByScriptTag = true) + { + $aResultLang = array(); + + $sMoment = 'window.moment && window.moment.lang && window.moment.lang(\'en\');'; + $sMomentFileName = APP_VERSION_ROOT_PATH.'app/i18n/moment/'.$sLanguage.'.js'; + if (\file_exists($sMomentFileName)) + { + $sMoment = \file_get_contents($sMomentFileName); + $sMoment = \preg_replace('/\/\/[^\n]+\n/', '', $sMoment); + } + + \RainLoop\Utils::ReadAndAddLang(APP_VERSION_ROOT_PATH.'app/i18n/langs.ini', $aResultLang); + \RainLoop\Utils::ReadAndAddLang(APP_VERSION_ROOT_PATH.'langs/'.$sLanguage.'.ini', $aResultLang); + + $this->Plugins()->ReadLang($sLanguage, $aResultLang); + + $sLangJs = ''; + $aLangKeys = \array_keys($aResultLang); + foreach ($aLangKeys as $sKey) + { + $sString = isset($aResultLang[$sKey]) ? $aResultLang[$sKey] : $sKey; + + $sLangJs .= '"'.\str_replace('"', '\\"', \str_replace('\\', '\\\\', $sKey)).'":' + .'"'.\str_replace(array("\r", "\n", "\t"), array('\r', '\n', '\t'), + \str_replace('"', '\\"', \str_replace('\\', '\\\\', $sString))).'",'; + } + + $sResult = empty($sLangJs) ? 'null' : '{'.\substr($sLangJs, 0, -1).'}'; + + return + ($bWrapByScriptTag ? '' : '') + ; + } + + /** + * @param array $aAppData + * @param bool $bWrapByScriptTag = true + * + * @return string + */ + private function compileAppData($aAppData, $bWrapByScriptTag = true) + { + return + ($bWrapByScriptTag ? '' : '') + ; + } +} diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Settings.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Settings.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Settings.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Settings.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Social.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Social.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Social.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Social.php diff --git a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Utils.php b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Utils.php similarity index 95% rename from rainloop/v/1.3.9.485/app/libraries/RainLoop/Utils.php rename to rainloop/v/1.3.10.490/app/libraries/RainLoop/Utils.php index fa29a74df7..8c5b728c65 100644 --- a/rainloop/v/1.3.9.485/app/libraries/RainLoop/Utils.php +++ b/rainloop/v/1.3.10.490/app/libraries/RainLoop/Utils.php @@ -1,392 +1,409 @@ -isFile() ? \md5_file($oFile) : $oFile)); - } - } - - return $sResult; - } - - /** - * @param string $FileName - * @param array $aResultLang - * - * @return void - */ - public static function ReadAndAddLang($FileName, &$aResultLang) - { - if (\file_exists($FileName)) - { - $aLang = @\parse_ini_file($FileName, true); - if (\is_array($aLang)) - { - foreach ($aLang as $sKey => $mValue) - { - if (\is_array($mValue)) - { - foreach ($mValue as $sSecKey => $mSecValue) - { - $aResultLang[$sKey.'/'.$sSecKey] = $mSecValue; - } - } - else - { - $aResultLang[$sKey] = $mValue; - } - } - } - } - } - - /** - * @param string $sDir - * @param string $sType = '' - * @return array - */ - public static function FolderFiles($sDir, $sType = '') - { - $aResult = array(); - if (@\is_dir($sDir)) - { - if (false !== ($rDirHandle = @\opendir($sDir))) - { - while (false !== ($sFile = @\readdir($rDirHandle))) - { - if (empty($sType) || $sType === \substr($sFile, -\strlen($sType))) - { - if (\is_file($sDir.'/'.$sFile)) - { - $aResult[] = $sFile; - } - } - } - - @\closedir($rDirHandle); - } - } - - return $aResult; - } - - /** - * @param string $sHtml - * - * @return string - */ - public static function ClearHtmlOutput($sHtml) - { -// return $sHtml; - return \str_replace('> <', '><', - \preg_replace('/[\s]+ /i', ' ', - \preg_replace('/ [\s]+/i', ' ', - \preg_replace('/[\r\n\t]+/', ' ', - $sHtml - )))); - } - - /** - * @param string $sKey - * @return bool - */ - public static function FastCheck($sKey) - { - $bResult = false; - - $aMatches = array(); - if (!empty($sKey) && 0 < \strlen($sKey) && \preg_match('/^(RL[\d]+)\-(.+)\-([^\-]+)$/', $sKey, $aMatches) && 3 === \count($aMatches)) - { - $bResult = $aMatches[3] === \strtoupper(\base_convert(\crc32(\md5( - $aMatches[1].'-'.$aMatches[2].'-')), 10, 32)); - } - - return $bResult; - } - - /** - * @param string $sDirName - * - * @return string - */ - public static function CompileTemplates($sDirName, $oAction) - { - $sResult = ''; - if (\file_exists($sDirName)) - { - $aList = \RainLoop\Utils::FolderFiles($sDirName, '.html'); - - foreach ($aList as $sName) - { - $sTemplateName = \substr($sName, 0, -5); - $sResult .= ''; - } - - $sResult = \trim($sResult); - } - - return $sResult; - } - - /** - * @param string $sName - * @param mixed $mDefault = null - * @return mixed - */ - public static function GetCookie($sName, $mDefault = null) - { - if (null === self::$Cookies) - { - self::$Cookies = is_array($_COOKIE) ? $_COOKIE : array(); - } - - return isset(self::$Cookies[$sName]) ? self::$Cookies[$sName] : $mDefault; - } - - public static function SetCookie($sName, $sValue = '', $iExpire = 0, $sPath = '/', $sDomain = '', $sSecure = false, $bHttpOnly = false) - { - if (null === self::$Cookies) - { - self::$Cookies = is_array($_COOKIE) ? $_COOKIE : array(); - } - - self::$Cookies[$sName] = $sValue; - @\setcookie($sName, $sValue, $iExpire, $sPath, $sDomain, $sSecure, $bHttpOnly); - } - - public static function ClearCookie($sName) - { - if (null === self::$Cookies) - { - self::$Cookies = is_array($_COOKIE) ? $_COOKIE : array(); - } - - unset(self::$Cookies[$sName]); - @\setcookie($sName, '', \time() - 3600 * 24 * 30, '/'); - } - - /** - * @return array - */ - public static function ServicesPics() - { - return array( - 'ebay.com' => 'ebay.jpg', - 'reply.ebay.com' => 'ebay.jpg', - 'reply1.ebay.com' => 'ebay.jpg', - 'reply2.ebay.com' => 'ebay.jpg', - 'reply3.ebay.com' => 'ebay.jpg', - - 'facebook.com' => 'facebook.png', - 'facebookmail.com' => 'facebook.png', - - 'cnet.online.com' => 'cnet.jpg', - 'github.com' => 'github.png', - 'steampowered.com' => 'steam.png', - 'myspace.com' => 'myspace.png', - 'new.myspace.com' => 'myspace.png', - 'youtube.com' => 'youtube.gif', - 'amazon.com' => 'amazon.png', - 'ted.com' => 'ted.png', - 'icloud.com' => 'icloud.jpg', - 'google.com' => 'google.png', - 'plus.google.com' => 'google-plus.png', - - 'email.microsoft.com' => 'microsoft.jpg', - 'microsoftonline.com' => 'microsoft.jpg', - 'microsoft.com' => 'microsoft.jpg', - - 'paypal.com' => 'paypal.jpg', - 'intl.paypal.com' => 'paypal.jpg', - 'e.paypal.com' => 'paypal.jpg', - - 'ea.com' => 'ea.png', - 'em.ea.com' => 'ea.png', - 'battlefieldheroes.com' => 'ea.png', - - 'battle.net' => 'battle.net.png', - 'blizzard.com' => 'battle.net.png', - 'email.blizzard.com' => 'battle.net.png', - 'battlefieldheroes.com' => 'battle.net.png', - - 'twitter.com' => 'twitter.jpg', - 'postmaster.twitter.com' => 'twitter.jpg', - - 'skype.com' => 'skype.png', - 'email.skype.com' => 'skype.png', - - 'apple.com' => 'apple.jpg', - 'id.apple.com' => 'apple.jpg', - - 'onlive.com' => 'onlive.png', - 'news.onlive.com' => 'onlive.png', - - 'asana.com' => 'asana.png', - 'connect.asana.com' => 'asana.png', - ); - } - - public static function CustomBaseConvert($sNumberInput, $sFromBaseInput = '0123456789', $sToBaseInput = '0123456789') - { - if ($sFromBaseInput === $sToBaseInput) - { - return $sNumberInput; - } - - $mFromBase = \str_split($sFromBaseInput, 1); - $mToBase = \str_split($sToBaseInput, 1); - $aNumber = \str_split($sNumberInput, 1); - $iFromLen = \strlen($sFromBaseInput); - $iToLen = \strlen($sToBaseInput); - $numberLen = \strlen($sNumberInput); - $mRetVal = ''; - - if ($sToBaseInput === '0123456789') - { - $mRetVal = 0; - for ($iIndex = 1; $iIndex <= $numberLen; $iIndex++) - { - $mRetVal = \bcadd($mRetVal, \bcmul(\array_search($aNumber[$iIndex - 1], $mFromBase), \bcpow($iFromLen, $numberLen - $iIndex))); - } - - return $mRetVal; - } - - if ($sFromBaseInput != '0123456789') - { - $sBase10 = \RainLoop\Utils::CustomBaseConvert($sNumberInput, $sFromBaseInput, '0123456789'); - } - else - { - $sBase10 = $sNumberInput; - } - - if ($sBase10 < \strlen($sToBaseInput)) - { - return $mToBase[$sBase10]; - } - - while ($sBase10 !== '0') - { - $mRetVal = $mToBase[\bcmod($sBase10, $iToLen)].$mRetVal; - $sBase10 = \bcdiv($sBase10, $iToLen, 0); - } - - return $mRetVal; - } +isFile() ? \md5_file($oFile) : $oFile)); + } + } + + return $sResult; + } + + /** + * @param string $FileName + * @param array $aResultLang + * + * @return void + */ + public static function ReadAndAddLang($FileName, &$aResultLang) + { + if (\file_exists($FileName)) + { + $aLang = @\parse_ini_file($FileName, true); + if (\is_array($aLang)) + { + foreach ($aLang as $sKey => $mValue) + { + if (\is_array($mValue)) + { + foreach ($mValue as $sSecKey => $mSecValue) + { + $aResultLang[$sKey.'/'.$sSecKey] = $mSecValue; + } + } + else + { + $aResultLang[$sKey] = $mValue; + } + } + } + } + } + + /** + * @param string $sDir + * @param string $sType = '' + * @return array + */ + public static function FolderFiles($sDir, $sType = '') + { + $aResult = array(); + if (@\is_dir($sDir)) + { + if (false !== ($rDirHandle = @\opendir($sDir))) + { + while (false !== ($sFile = @\readdir($rDirHandle))) + { + if (empty($sType) || $sType === \substr($sFile, -\strlen($sType))) + { + if (\is_file($sDir.'/'.$sFile)) + { + $aResult[] = $sFile; + } + } + } + + @\closedir($rDirHandle); + } + } + + return $aResult; + } + + /** + * @param string $sHtml + * + * @return string + */ + public static function ClearHtmlOutput($sHtml) + { +// return $sHtml; + return \str_replace('> <', '><', + \preg_replace('/[\s]+ /i', ' ', + \preg_replace('/ [\s]+/i', ' ', + \preg_replace('/[\r\n\t]+/', ' ', + $sHtml + )))); + } + + /** + * @param string $sKey + * @return bool + */ + public static function FastCheck($sKey) + { + $bResult = false; + + $aMatches = array(); + if (!empty($sKey) && 0 < \strlen($sKey) && \preg_match('/^(RL[\d]+)\-(.+)\-([^\-]+)$/', $sKey, $aMatches) && 3 === \count($aMatches)) + { + $bResult = $aMatches[3] === \strtoupper(\base_convert(\crc32(\md5( + $aMatches[1].'-'.$aMatches[2].'-')), 10, 32)); + } + + return $bResult; + } + + /** + * @param string $sDirName + * + * @return string + */ + public static function CompileTemplates($sDirName, $oAction) + { + $sResult = ''; + if (\file_exists($sDirName)) + { + $aList = \RainLoop\Utils::FolderFiles($sDirName, '.html'); + + foreach ($aList as $sName) + { + $sTemplateName = \substr($sName, 0, -5); + $sResult .= ''; + } + + $sResult = \trim($sResult); + } + + return $sResult; + } + + /** + * @param string $sName + * @param mixed $mDefault = null + * @return mixed + */ + public static function GetCookie($sName, $mDefault = null) + { + if (null === self::$Cookies) + { + self::$Cookies = is_array($_COOKIE) ? $_COOKIE : array(); + } + + return isset(self::$Cookies[$sName]) ? self::$Cookies[$sName] : $mDefault; + } + + public static function SetCookie($sName, $sValue = '', $iExpire = 0, $sPath = '/', $sDomain = '', $sSecure = false, $bHttpOnly = false) + { + if (null === self::$Cookies) + { + self::$Cookies = is_array($_COOKIE) ? $_COOKIE : array(); + } + + self::$Cookies[$sName] = $sValue; + @\setcookie($sName, $sValue, $iExpire, $sPath, $sDomain, $sSecure, $bHttpOnly); + } + + public static function ClearCookie($sName) + { + if (null === self::$Cookies) + { + self::$Cookies = is_array($_COOKIE) ? $_COOKIE : array(); + } + + unset(self::$Cookies[$sName]); + @\setcookie($sName, '', \time() - 3600 * 24 * 30, '/'); + } + + /** + * @return array + */ + public static function ServicesPics() + { + return array( + 'ebay.com' => 'ebay.jpg', + 'reply.ebay.com' => 'ebay.jpg', + 'reply1.ebay.com' => 'ebay.jpg', + 'reply2.ebay.com' => 'ebay.jpg', + 'reply3.ebay.com' => 'ebay.jpg', + + 'facebook.com' => 'facebook.png', + 'facebookmail.com' => 'facebook.png', + + 'cnet.online.com' => 'cnet.jpg', + 'github.com' => 'github.png', + 'steampowered.com' => 'steam.png', + 'myspace.com' => 'myspace.png', + 'new.myspace.com' => 'myspace.png', + 'youtube.com' => 'youtube.gif', + 'amazon.com' => 'amazon.png', + 'ted.com' => 'ted.png', + 'icloud.com' => 'icloud.jpg', + 'google.com' => 'google.png', + 'plus.google.com' => 'google-plus.png', + + 'email.microsoft.com' => 'microsoft.jpg', + 'microsoftonline.com' => 'microsoft.jpg', + 'microsoft.com' => 'microsoft.jpg', + + 'paypal.com' => 'paypal.jpg', + 'intl.paypal.com' => 'paypal.jpg', + 'e.paypal.com' => 'paypal.jpg', + + 'ea.com' => 'ea.png', + 'em.ea.com' => 'ea.png', + 'battlefieldheroes.com' => 'ea.png', + + 'battle.net' => 'battle.net.png', + 'blizzard.com' => 'battle.net.png', + 'email.blizzard.com' => 'battle.net.png', + 'battlefieldheroes.com' => 'battle.net.png', + + 'twitter.com' => 'twitter.jpg', + 'postmaster.twitter.com' => 'twitter.jpg', + + 'skype.com' => 'skype.png', + 'email.skype.com' => 'skype.png', + + 'apple.com' => 'apple.jpg', + 'id.apple.com' => 'apple.jpg', + + 'onlive.com' => 'onlive.png', + 'news.onlive.com' => 'onlive.png', + + 'asana.com' => 'asana.png', + 'connect.asana.com' => 'asana.png', + ); + } + + public static function CustomBaseConvert($sNumberInput, $sFromBaseInput = '0123456789', $sToBaseInput = '0123456789') + { + if ($sFromBaseInput === $sToBaseInput) + { + return $sNumberInput; + } + + $mFromBase = \str_split($sFromBaseInput, 1); + $mToBase = \str_split($sToBaseInput, 1); + $aNumber = \str_split($sNumberInput, 1); + $iFromLen = \strlen($sFromBaseInput); + $iToLen = \strlen($sToBaseInput); + $numberLen = \strlen($sNumberInput); + $mRetVal = ''; + + if ($sToBaseInput === '0123456789') + { + $mRetVal = 0; + for ($iIndex = 1; $iIndex <= $numberLen; $iIndex++) + { + $mRetVal = \bcadd($mRetVal, \bcmul(\array_search($aNumber[$iIndex - 1], $mFromBase), \bcpow($iFromLen, $numberLen - $iIndex))); + } + + return $mRetVal; + } + + if ($sFromBaseInput != '0123456789') + { + $sBase10 = \RainLoop\Utils::CustomBaseConvert($sNumberInput, $sFromBaseInput, '0123456789'); + } + else + { + $sBase10 = $sNumberInput; + } + + if ($sBase10 < \strlen($sToBaseInput)) + { + return $mToBase[$sBase10]; + } + + while ($sBase10 !== '0') + { + $mRetVal = $mToBase[\bcmod($sBase10, $iToLen)].$mRetVal; + $sBase10 = \bcdiv($sBase10, $iToLen, 0); + } + + return $mRetVal; + } } \ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/libraries/facebook/base_facebook.php b/rainloop/v/1.3.10.490/app/libraries/facebook/base_facebook.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/facebook/base_facebook.php rename to rainloop/v/1.3.10.490/app/libraries/facebook/base_facebook.php diff --git a/rainloop/v/1.3.9.485/app/libraries/facebook/facebook.php b/rainloop/v/1.3.10.490/app/libraries/facebook/facebook.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/facebook/facebook.php rename to rainloop/v/1.3.10.490/app/libraries/facebook/facebook.php diff --git a/rainloop/v/1.3.9.485/app/libraries/facebook/fb_ca_chain_bundle.crt b/rainloop/v/1.3.10.490/app/libraries/facebook/fb_ca_chain_bundle.crt similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/facebook/fb_ca_chain_bundle.crt rename to rainloop/v/1.3.10.490/app/libraries/facebook/fb_ca_chain_bundle.crt diff --git a/rainloop/v/1.3.9.485/app/libraries/lessphp/LICENSE b/rainloop/v/1.3.10.490/app/libraries/lessphp/LICENSE similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/lessphp/LICENSE rename to rainloop/v/1.3.10.490/app/libraries/lessphp/LICENSE diff --git a/rainloop/v/1.3.9.485/app/libraries/lessphp/README.md b/rainloop/v/1.3.10.490/app/libraries/lessphp/README.md similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/lessphp/README.md rename to rainloop/v/1.3.10.490/app/libraries/lessphp/README.md diff --git a/rainloop/v/1.3.9.485/app/libraries/lessphp/ctype.php b/rainloop/v/1.3.10.490/app/libraries/lessphp/ctype.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/lessphp/ctype.php rename to rainloop/v/1.3.10.490/app/libraries/lessphp/ctype.php diff --git a/rainloop/v/1.3.9.485/app/libraries/lessphp/lessc.inc.php b/rainloop/v/1.3.10.490/app/libraries/lessphp/lessc.inc.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/lessphp/lessc.inc.php rename to rainloop/v/1.3.10.490/app/libraries/lessphp/lessc.inc.php diff --git a/rainloop/v/1.3.9.485/app/libraries/pclzip/gnu-lgpl.txt b/rainloop/v/1.3.10.490/app/libraries/pclzip/gnu-lgpl.txt similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/pclzip/gnu-lgpl.txt rename to rainloop/v/1.3.10.490/app/libraries/pclzip/gnu-lgpl.txt diff --git a/rainloop/v/1.3.9.485/app/libraries/pclzip/pclzip.lib.php b/rainloop/v/1.3.10.490/app/libraries/pclzip/pclzip.lib.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/pclzip/pclzip.lib.php rename to rainloop/v/1.3.10.490/app/libraries/pclzip/pclzip.lib.php diff --git a/rainloop/v/1.3.9.485/app/libraries/pclzip/readme.txt b/rainloop/v/1.3.10.490/app/libraries/pclzip/readme.txt similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/pclzip/readme.txt rename to rainloop/v/1.3.10.490/app/libraries/pclzip/readme.txt diff --git a/rainloop/v/1.3.9.485/app/libraries/tmhOAuth/LICENSE b/rainloop/v/1.3.10.490/app/libraries/tmhOAuth/LICENSE similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/tmhOAuth/LICENSE rename to rainloop/v/1.3.10.490/app/libraries/tmhOAuth/LICENSE diff --git a/rainloop/v/1.3.9.485/app/libraries/tmhOAuth/README.md b/rainloop/v/1.3.10.490/app/libraries/tmhOAuth/README.md similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/tmhOAuth/README.md rename to rainloop/v/1.3.10.490/app/libraries/tmhOAuth/README.md diff --git a/rainloop/v/1.3.9.485/app/libraries/tmhOAuth/cacert.pem b/rainloop/v/1.3.10.490/app/libraries/tmhOAuth/cacert.pem similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/tmhOAuth/cacert.pem rename to rainloop/v/1.3.10.490/app/libraries/tmhOAuth/cacert.pem diff --git a/rainloop/v/1.3.9.485/app/libraries/tmhOAuth/tmhOAuth.php b/rainloop/v/1.3.10.490/app/libraries/tmhOAuth/tmhOAuth.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/tmhOAuth/tmhOAuth.php rename to rainloop/v/1.3.10.490/app/libraries/tmhOAuth/tmhOAuth.php diff --git a/rainloop/v/1.3.9.485/app/libraries/tmhOAuth/tmhUtilities.php b/rainloop/v/1.3.10.490/app/libraries/tmhOAuth/tmhUtilities.php similarity index 100% rename from rainloop/v/1.3.9.485/app/libraries/tmhOAuth/tmhUtilities.php rename to rainloop/v/1.3.10.490/app/libraries/tmhOAuth/tmhUtilities.php diff --git a/rainloop/v/1.3.9.485/app/templates/BadBrowser.html b/rainloop/v/1.3.10.490/app/templates/BadBrowser.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/BadBrowser.html rename to rainloop/v/1.3.10.490/app/templates/BadBrowser.html diff --git a/rainloop/v/1.3.9.485/app/templates/Error.html b/rainloop/v/1.3.10.490/app/templates/Error.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Error.html rename to rainloop/v/1.3.10.490/app/templates/Error.html diff --git a/rainloop/v/1.3.9.485/app/templates/Index.html b/rainloop/v/1.3.10.490/app/templates/Index.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Index.html rename to rainloop/v/1.3.10.490/app/templates/Index.html diff --git a/rainloop/v/1.3.9.485/app/templates/Themes/custom-values-dark.less b/rainloop/v/1.3.10.490/app/templates/Themes/custom-values-dark.less similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Themes/custom-values-dark.less rename to rainloop/v/1.3.10.490/app/templates/Themes/custom-values-dark.less diff --git a/rainloop/v/1.3.9.485/app/templates/Themes/custom-values-light.less b/rainloop/v/1.3.10.490/app/templates/Themes/custom-values-light.less similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Themes/custom-values-light.less rename to rainloop/v/1.3.10.490/app/templates/Themes/custom-values-light.less diff --git a/rainloop/v/1.3.9.485/app/templates/Themes/template.less b/rainloop/v/1.3.10.490/app/templates/Themes/template.less similarity index 96% rename from rainloop/v/1.3.9.485/app/templates/Themes/template.less rename to rainloop/v/1.3.10.490/app/templates/Themes/template.less index 16d8968696..6ca0ada708 100644 --- a/rainloop/v/1.3.9.485/app/templates/Themes/template.less +++ b/rainloop/v/1.3.10.490/app/templates/Themes/template.less @@ -1,148 +1,148 @@ - -// mixins +++ -.thm-linear-gradient-mixin(@start, @end) when (iscolor(@start)) and (iscolor(@end)) { - background-color: mix(@start, @end, 60%) !important; - background-image: -moz-linear-gradient(top, @start, @end) !important; // FF 3.6+ - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@start), to(@end)) !important; // Safari 4+, Chrome 2+ - background-image: -webkit-linear-gradient(top, @start, @end) !important; // Safari 5.1+, Chrome 10+ - background-image: -o-linear-gradient(top, @start, @end !important); // Opera 11.10 - background-image: linear-gradient(to bottom, @start, @end) !important; // Standard, IE10 - background-repeat: repeat-x !important; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start),argb(@end))) !important; // IE9 and down -} - -.thm-border-radius(@radius) when (ispixel(@radius)) { - -webkit-border-radius: @radius !important; - -moz-border-radius: @radius !important; - border-radius: @radius !important; -} - -.thm-box-shadow(@shadow) { - -webkit-box-shadow: @shadow !important; - -moz-box-shadow: @shadow !important; - box-shadow: @shadow !important; -} -.thm-body-background-image(@value) when (isstring(@value)) { - background-image: url("@{base}@{value}") !important; -} -.thm-body-background-image(@value) when not (isstring(@value)) { - background-image: @value !important; -} -.thm-rgba-background-color(@simple, @rgba) when (@rgba = false) { - background-color: @simple !important; -} -.thm-rgba-background-color(@simple, @rgba) when not (@rgba = false) { - background-color: @simple !important; - background-color: @rgba !important; -} -// --- mixins - -.thm-body { - color: @main-color; - background-color: @main-background-color; - .thm-body-background-image(@main-background-image); -} - -.thm-loading { - color: @loading-color !important; - text-shadow: @loading-text-shadow !important; -} - -.thm-login { - color: @login-color !important; - border: @login-border !important; - .thm-rgba-background-color(@login-background-color, @login-rgba-background-color); - .thm-linear-gradient-mixin(@login-gradient-start, @login-gradient-end); - .thm-border-radius(@login-border-radius); - .thm-box-shadow(@login-box-shadow); - - .legend, .checkboxSignMe, g-ui-link { - color: @login-color !important; - } -} - -.g-ui-menu { - color: @dropdown-menu-color !important; - background-color: @dropdown-menu-background-color !important; -} - -.g-ui-menu .e-item > .e-link { - color: @dropdown-menu-color !important; - background-color: @dropdown-menu-background-color !important; - - > i { - color: @dropdown-menu-color !important; - } -} - -.g-ui-menu .e-item > .e-link:hover { - color: @dropdown-menu-hover-color !important; - background-color: @dropdown-menu-hover-background-color !important; - - > i { - color: @dropdown-menu-hover-color !important; - } -} - -.g-ui-menu .e-item.disable > .e-link, .g-ui-menu .e-item.disable > .e-link:hover { - color: @dropdown-menu-disable-color !important; - background-color: @dropdown-menu-background-color !important; - - > i { - color: @dropdown-menu-disable-color !important; - } -} - -.thm-message-list-top-toolbar, .thm-message-list-bottom-toolbar { - .thm-rgba-background-color(@message-list-toolbar-background-color, @message-list-toolbar-rgba-background-color); - .thm-linear-gradient-mixin(@message-list-toolbar-gradient-start, @message-list-toolbar-gradient-end); -} - -.thm-folders .e-link { - - color: @folders-disabled-color !important; - - &.selectable { - color: @folders-color !important; - } - - &.selectable:hover { - color: @folders-hover-color !important; - .thm-rgba-background-color(@folders-hover-background-color, @folders-hover-rgba-background-color); - } - - &.selectable.selected { - color: @folders-selected-color !important; - .thm-rgba-background-color(@folders-selected-background-color, @folders-selected-rgba-background-color); - } - - &.selectable.droppableHover { - color: @folders-drop-color !important; - .thm-rgba-background-color(@folders-drop-background-color, @folders-drop-rgba-background-color); - } -} - -.thm-settings-menu .e-item { - - .e-link { - color: @settings-menu-disabled-color !important; - } - - &.selectable .e-link { - color: @settings-menu-color !important; - } - - &.selectable:hover .e-link { - .thm-rgba-background-color(@settings-menu-hover-background-color, @settings-menu-hover-rgba-background-color); - color: @settings-menu-hover-color !important; - } - - &.selectable.selected .e-link { - .thm-rgba-background-color(@settings-menu-selected-background-color, @settings-menu-selected-rgba-background-color); - color: @settings-menu-selected-color !important; - } -} - -.thm-message-view-background-color { - .thm-rgba-background-color(@message-background-color, @message-rgba-background-color); -} + +// mixins +++ +.thm-linear-gradient-mixin(@start, @end) when (iscolor(@start)) and (iscolor(@end)) { + background-color: mix(@start, @end, 60%) !important; + background-image: -moz-linear-gradient(top, @start, @end) !important; // FF 3.6+ + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@start), to(@end)) !important; // Safari 4+, Chrome 2+ + background-image: -webkit-linear-gradient(top, @start, @end) !important; // Safari 5.1+, Chrome 10+ + background-image: -o-linear-gradient(top, @start, @end !important); // Opera 11.10 + background-image: linear-gradient(to bottom, @start, @end) !important; // Standard, IE10 + background-repeat: repeat-x !important; + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start),argb(@end))) !important; // IE9 and down +} + +.thm-border-radius(@radius) when (ispixel(@radius)) { + -webkit-border-radius: @radius !important; + -moz-border-radius: @radius !important; + border-radius: @radius !important; +} + +.thm-box-shadow(@shadow) { + -webkit-box-shadow: @shadow !important; + -moz-box-shadow: @shadow !important; + box-shadow: @shadow !important; +} +.thm-body-background-image(@value) when (isstring(@value)) { + background-image: url("@{base}@{value}") !important; +} +.thm-body-background-image(@value) when not (isstring(@value)) { + background-image: @value !important; +} +.thm-rgba-background-color(@simple, @rgba) when (@rgba = false) { + background-color: @simple !important; +} +.thm-rgba-background-color(@simple, @rgba) when not (@rgba = false) { + background-color: @simple !important; + background-color: @rgba !important; +} +// --- mixins + +.thm-body { + color: @main-color; + background-color: @main-background-color; + .thm-body-background-image(@main-background-image); +} + +.thm-loading { + color: @loading-color !important; + text-shadow: @loading-text-shadow !important; +} + +.thm-login { + color: @login-color !important; + border: @login-border !important; + .thm-rgba-background-color(@login-background-color, @login-rgba-background-color); + .thm-linear-gradient-mixin(@login-gradient-start, @login-gradient-end); + .thm-border-radius(@login-border-radius); + .thm-box-shadow(@login-box-shadow); + + .legend, .checkboxSignMe, g-ui-link { + color: @login-color !important; + } +} + +.g-ui-menu { + color: @dropdown-menu-color !important; + background-color: @dropdown-menu-background-color !important; +} + +.g-ui-menu .e-item > .e-link { + color: @dropdown-menu-color !important; + background-color: @dropdown-menu-background-color !important; + + > i { + color: @dropdown-menu-color !important; + } +} + +.g-ui-menu .e-item > .e-link:hover { + color: @dropdown-menu-hover-color !important; + background-color: @dropdown-menu-hover-background-color !important; + + > i { + color: @dropdown-menu-hover-color !important; + } +} + +.g-ui-menu .e-item.disable > .e-link, .g-ui-menu .e-item.disable > .e-link:hover { + color: @dropdown-menu-disable-color !important; + background-color: @dropdown-menu-background-color !important; + + > i { + color: @dropdown-menu-disable-color !important; + } +} + +.thm-message-list-top-toolbar, .thm-message-list-bottom-toolbar { + .thm-rgba-background-color(@message-list-toolbar-background-color, @message-list-toolbar-rgba-background-color); + .thm-linear-gradient-mixin(@message-list-toolbar-gradient-start, @message-list-toolbar-gradient-end); +} + +.thm-folders .e-link { + + color: @folders-disabled-color !important; + + &.selectable { + color: @folders-color !important; + } + + &.selectable:hover { + color: @folders-hover-color !important; + .thm-rgba-background-color(@folders-hover-background-color, @folders-hover-rgba-background-color); + } + + &.selectable.selected { + color: @folders-selected-color !important; + .thm-rgba-background-color(@folders-selected-background-color, @folders-selected-rgba-background-color); + } + + &.selectable.droppableHover { + color: @folders-drop-color !important; + .thm-rgba-background-color(@folders-drop-background-color, @folders-drop-rgba-background-color); + } +} + +.thm-settings-menu .e-item { + + .e-link { + color: @settings-menu-disabled-color !important; + } + + &.selectable .e-link { + color: @settings-menu-color !important; + } + + &.selectable:hover .e-link { + .thm-rgba-background-color(@settings-menu-hover-background-color, @settings-menu-hover-rgba-background-color); + color: @settings-menu-hover-color !important; + } + + &.selectable.selected .e-link { + .thm-rgba-background-color(@settings-menu-selected-background-color, @settings-menu-selected-rgba-background-color); + color: @settings-menu-selected-color !important; + } +} + +.thm-message-view-background-color { + .thm-rgba-background-color(@message-background-color, @message-rgba-background-color); +} diff --git a/rainloop/v/1.3.9.485/app/templates/Themes/values.less b/rainloop/v/1.3.10.490/app/templates/Themes/values.less similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Themes/values.less rename to rainloop/v/1.3.10.490/app/templates/Themes/values.less diff --git a/rainloop/v/1.3.9.485/app/templates/Views/AdminDomainListItem.html b/rainloop/v/1.3.10.490/app/templates/Views/AdminDomainListItem.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/AdminDomainListItem.html rename to rainloop/v/1.3.10.490/app/templates/Views/AdminDomainListItem.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/AdminDomains.html b/rainloop/v/1.3.10.490/app/templates/Views/AdminDomains.html similarity index 82% rename from rainloop/v/1.3.9.485/app/templates/Views/AdminDomains.html rename to rainloop/v/1.3.10.490/app/templates/Views/AdminDomains.html index 66e2a9c786..72a22c37ab 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/AdminDomains.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/AdminDomains.html @@ -1,31 +1,31 @@ -
-
- Domains -
-
-
-

- List of domains webmail is allowed to access. -

-
- - -    - Add Domain - -
- -    - loading... -
- - - - - - - - -
-
+
+
+ Domains +
+
+
+

+ List of domains webmail is allowed to access. +

+
+ + +    + Add Domain + +
+ +    + loading... +
+ + + + + + + + +
+
\ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/templates/Views/AdminGeneral.html b/rainloop/v/1.3.10.490/app/templates/Views/AdminGeneral.html similarity index 86% rename from rainloop/v/1.3.9.485/app/templates/Views/AdminGeneral.html rename to rainloop/v/1.3.10.490/app/templates/Views/AdminGeneral.html index ad26501482..2ef714d2ce 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/AdminGeneral.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/AdminGeneral.html @@ -1,100 +1,104 @@ -
-
-
-

Notice!

-
- Contacts functions are not supported. -
- You need to install or enable PDO (sqlite) exstenstion on your server. -
-
-
-
- General -
-
- -
- -
-
-
-
- -
- -
-
-
- -
-
-
- -
- -
-
-
-
-
- - -
-
-
-
- -
-
-
-
-
- Login Screen -
-
- -
- -
-
-
-
-
- - -
- -
-
-
+
+
+
+

Notice!

+
+ Contacts functions are not supported. +
+ You need to install or enable PDO (sqlite) exstenstion on your server. +
+
+
+
+ General +
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+ +
+
+
+ +
+ +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ Login Screen +
+
+ +
+ +
+
+
+
+
+ + +
+ +
+
+
\ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/templates/Views/AdminLicensing.html b/rainloop/v/1.3.10.490/app/templates/Views/AdminLicensing.html similarity index 95% rename from rainloop/v/1.3.9.485/app/templates/Views/AdminLicensing.html rename to rainloop/v/1.3.10.490/app/templates/Views/AdminLicensing.html index 50d7847853..bbcf0d46b5 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/AdminLicensing.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/AdminLicensing.html @@ -1,72 +1,72 @@ -
-
-
- RainLoop Webmail is licensed under Creative Commons -
- Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0)
license. -
-
- You are free to use it for your personal or non-profit projects. -
-
- Commercial use of RainLoop Webmail requires getting a - - permission (Coming soon). -
-
-
-
- -
- - - -
-
-
-
-
- This domain can't be licensed for commercial use. -
-
-
-
-
-
- -    - checking... -
-
-
- This domain isn't licensed for commercial use. -
-
-
-

- This domain is licensed for commercial use -

-

- Subscription expires: -   - -

-
-
-
-
-
-
-
-
- -
-
-
+
+
+
+ RainLoop Webmail is licensed under Creative Commons +
+ Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0)
license. +
+
+ You are free to use it for your personal or non-profit projects. +
+
+ Commercial use of RainLoop Webmail requires getting a + + permission (Coming soon). +
+
+
+
+ +
+ + + +
+
+
+
+
+ This domain can't be licensed for commercial use. +
+
+
+
+
+
+ +    + checking... +
+
+
+ This domain isn't licensed for commercial use. +
+
+
+

+ This domain is licensed for commercial use +

+

+ Subscription expires: +   + +

+
+
+
+
+
+
+
+
+ +
+
+
\ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/templates/Views/AdminLogin.html b/rainloop/v/1.3.10.490/app/templates/Views/AdminLogin.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/AdminLogin.html rename to rainloop/v/1.3.10.490/app/templates/Views/AdminLogin.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/AdminMenu.html b/rainloop/v/1.3.10.490/app/templates/Views/AdminMenu.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/AdminMenu.html rename to rainloop/v/1.3.10.490/app/templates/Views/AdminMenu.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/AdminPackages.html b/rainloop/v/1.3.10.490/app/templates/Views/AdminPackages.html similarity index 96% rename from rainloop/v/1.3.9.485/app/templates/Views/AdminPackages.html rename to rainloop/v/1.3.10.490/app/templates/Views/AdminPackages.html index 23592a5edc..22475ec34a 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/AdminPackages.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/AdminPackages.html @@ -1,46 +1,48 @@ -
- -
- Cannot access the repository at the moment. -
- -
- Unable to update RainLoop Webmail source! -
- -
- - -
- -
- -    - loading... -
- -
-
- Available for Update () -
-
-
-
- -
-
- Installed Packages -
-
-
-
- -
-
- Available for Installation -
-
-
-
- +
+ +
+ Cannot access the repository at the moment. +
+ + + +
+ + +
+ +
+ +    + loading... +
+ +
+
+ Available for Update () +
+
+
+
+ +
+
+ Installed Packages +
+
+
+
+ +
+
+ Available for Installation +
+
+
+
+
\ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/templates/Views/AdminPackagesListItem.html b/rainloop/v/1.3.10.490/app/templates/Views/AdminPackagesListItem.html similarity index 90% rename from rainloop/v/1.3.9.485/app/templates/Views/AdminPackagesListItem.html rename to rainloop/v/1.3.10.490/app/templates/Views/AdminPackagesListItem.html index e5a0d777ef..4b5a017f23 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/AdminPackagesListItem.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/AdminPackagesListItem.html @@ -1,19 +1,20 @@ - - - - -
- - - - - - - - - -   - - - - + + + + + +
+ + + + + + + + + +   + + + + diff --git a/rainloop/v/1.3.9.485/app/templates/Views/AdminPackagesTable.html b/rainloop/v/1.3.10.490/app/templates/Views/AdminPackagesTable.html similarity index 79% rename from rainloop/v/1.3.9.485/app/templates/Views/AdminPackagesTable.html rename to rainloop/v/1.3.10.490/app/templates/Views/AdminPackagesTable.html index 47e7a3f72e..b8e7617f13 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/AdminPackagesTable.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/AdminPackagesTable.html @@ -1,9 +1,9 @@ - - - - - - - - +
+ + + + + + +
\ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/templates/Views/AdminPane.html b/rainloop/v/1.3.10.490/app/templates/Views/AdminPane.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/AdminPane.html rename to rainloop/v/1.3.10.490/app/templates/Views/AdminPane.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/AdminPluginListItem.html b/rainloop/v/1.3.10.490/app/templates/Views/AdminPluginListItem.html similarity index 92% rename from rainloop/v/1.3.9.485/app/templates/Views/AdminPluginListItem.html rename to rainloop/v/1.3.10.490/app/templates/Views/AdminPluginListItem.html index 01a46e559f..f12bb24f40 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/AdminPluginListItem.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/AdminPluginListItem.html @@ -1,15 +1,16 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/templates/Views/AdminPluginProperty.html b/rainloop/v/1.3.10.490/app/templates/Views/AdminPluginProperty.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/AdminPluginProperty.html rename to rainloop/v/1.3.10.490/app/templates/Views/AdminPluginProperty.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/AdminPlugins.html b/rainloop/v/1.3.10.490/app/templates/Views/AdminPlugins.html similarity index 91% rename from rainloop/v/1.3.9.485/app/templates/Views/AdminPlugins.html rename to rainloop/v/1.3.10.490/app/templates/Views/AdminPlugins.html index 607753e6b8..612c496e0b 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/AdminPlugins.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/AdminPlugins.html @@ -1,48 +1,48 @@ -
- -
-
- - -
-
- -
- -    - loading... -
- -
- Plugins -
- -
- -
-
-
-
- No plugins have yet been installed. -
-
- Click here install new! -
-
-
-
- - - - - - - -
-
-
+
+ +
+
+ + +
+
+ +
+ +    + loading... +
+ +
+ Plugins +
+ +
+ +
+
+
+
+ No plugins have yet been installed. +
+
+ Click here install new! +
+
+
+
+ + + + + + + +
+
+
\ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/templates/Views/AdminSecurity.html b/rainloop/v/1.3.10.490/app/templates/Views/AdminSecurity.html similarity index 82% rename from rainloop/v/1.3.9.485/app/templates/Views/AdminSecurity.html rename to rainloop/v/1.3.10.490/app/templates/Views/AdminSecurity.html index dbfac24241..c825cb5f91 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/AdminSecurity.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/AdminSecurity.html @@ -1,60 +1,60 @@ -
-
-
- Security -
-
-
- -
-
-
-
- -
-
- -
-
-
- Changer Admin Password -
-
- -
- -
-
-
- -
- -
-
- -
+
+
+
+ Security +
+
+
+ +
+
+
+
+ +
+
+ +
+
+
+ Changer Admin Password +
+
+ +
+ +
+
+
+ +
+ +
+
+ +
\ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/templates/Views/AdminSocial.html b/rainloop/v/1.3.10.490/app/templates/Views/AdminSocial.html similarity index 95% rename from rainloop/v/1.3.9.485/app/templates/Views/AdminSocial.html rename to rainloop/v/1.3.10.490/app/templates/Views/AdminSocial.html index 86ecae75f7..53cab699dd 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/AdminSocial.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/AdminSocial.html @@ -1,117 +1,117 @@ -
-
-
- Detailed information on social integration is found at - http://rainloop.net/docs/social/ -
-
-
-
- Google -
-
-
- -
-
-
- -
- -
-
-
-
- -
- -
-
-
-
- Facebook -
-
-
- -
-
-
- -
- -
-
-
-
- -
- -
-
-
-
- Twitter -
-
-
- -
-
-
- -
- -
-
-
-
- -
- -
-
-
-
- Dropbox -
-
-
- -
-
-
- -
- -
-
-
-
+
+
+
+ Detailed information on social integration is found at + http://rainloop.net/docs/social/ +
+
+
+
+ Google +
+
+
+ +
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+
+ Facebook +
+
+
+ +
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+
+ Twitter +
+
+
+ +
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+
+ Dropbox +
+
+
+ +
+
+
+ +
+ +
+
+
+
\ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/templates/Views/ComposeAttachment.html b/rainloop/v/1.3.10.490/app/templates/Views/ComposeAttachment.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/ComposeAttachment.html rename to rainloop/v/1.3.10.490/app/templates/Views/ComposeAttachment.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/ComposeAttachmentInProcess.html b/rainloop/v/1.3.10.490/app/templates/Views/ComposeAttachmentInProcess.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/ComposeAttachmentInProcess.html rename to rainloop/v/1.3.10.490/app/templates/Views/ComposeAttachmentInProcess.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/Login.html b/rainloop/v/1.3.10.490/app/templates/Views/Login.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/Login.html rename to rainloop/v/1.3.10.490/app/templates/Views/Login.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/MailFolderList.html b/rainloop/v/1.3.10.490/app/templates/Views/MailFolderList.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/MailFolderList.html rename to rainloop/v/1.3.10.490/app/templates/Views/MailFolderList.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/MailFolderListItem.html b/rainloop/v/1.3.10.490/app/templates/Views/MailFolderListItem.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/MailFolderListItem.html rename to rainloop/v/1.3.10.490/app/templates/Views/MailFolderListItem.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/MailFolderListSystemItem.html b/rainloop/v/1.3.10.490/app/templates/Views/MailFolderListSystemItem.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/MailFolderListSystemItem.html rename to rainloop/v/1.3.10.490/app/templates/Views/MailFolderListSystemItem.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/MailMessageList.html b/rainloop/v/1.3.10.490/app/templates/Views/MailMessageList.html similarity index 94% rename from rainloop/v/1.3.9.485/app/templates/Views/MailMessageList.html rename to rainloop/v/1.3.10.490/app/templates/Views/MailMessageList.html index 4f2a3262c2..0b106f70f9 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/MailMessageList.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/MailMessageList.html @@ -1,163 +1,163 @@ -
-
- -
-
-
-
- - - - -
- - -
-
-
-
-
-
-
- - - - : -
-
- -    - -
-
- -
-
- -
-
- -
-
- ... -
-
- -
-
-
-
-
-
-
-
- -
-
+
+
+ +
+
+
+
+ + + + +
+ + +
+
+
+
+
+
+
+ + + + : +
+
+ +    + +
+
+ +
+
+ +
+
+ +
+
+ ... +
+
+ +
+
+
+
+
+
+
+
+ +
+
\ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/templates/Views/MailMessageListItem.html b/rainloop/v/1.3.10.490/app/templates/Views/MailMessageListItem.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/MailMessageListItem.html rename to rainloop/v/1.3.10.490/app/templates/Views/MailMessageListItem.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/MailMessageListItemNoPreviewPane.html b/rainloop/v/1.3.10.490/app/templates/Views/MailMessageListItemNoPreviewPane.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/MailMessageListItemNoPreviewPane.html rename to rainloop/v/1.3.10.490/app/templates/Views/MailMessageListItemNoPreviewPane.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/MailMessageView.html b/rainloop/v/1.3.10.490/app/templates/Views/MailMessageView.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/MailMessageView.html rename to rainloop/v/1.3.10.490/app/templates/Views/MailMessageView.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/PopupsActivate.html b/rainloop/v/1.3.10.490/app/templates/Views/PopupsActivate.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/PopupsActivate.html rename to rainloop/v/1.3.10.490/app/templates/Views/PopupsActivate.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/PopupsAddAccount.html b/rainloop/v/1.3.10.490/app/templates/Views/PopupsAddAccount.html similarity index 97% rename from rainloop/v/1.3.9.485/app/templates/Views/PopupsAddAccount.html rename to rainloop/v/1.3.10.490/app/templates/Views/PopupsAddAccount.html index e6b683d197..7b61f3cb11 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/PopupsAddAccount.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/PopupsAddAccount.html @@ -1,48 +1,49 @@ -
- -
+
+ +
diff --git a/rainloop/v/1.3.9.485/app/templates/Views/PopupsAdvancedSearch.html b/rainloop/v/1.3.10.490/app/templates/Views/PopupsAdvancedSearch.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/PopupsAdvancedSearch.html rename to rainloop/v/1.3.10.490/app/templates/Views/PopupsAdvancedSearch.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/PopupsCompose.html b/rainloop/v/1.3.10.490/app/templates/Views/PopupsCompose.html similarity index 78% rename from rainloop/v/1.3.9.485/app/templates/Views/PopupsCompose.html rename to rainloop/v/1.3.10.490/app/templates/Views/PopupsCompose.html index 13ac60b63c..1c3cc6cb54 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/PopupsCompose.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/PopupsCompose.html @@ -1,113 +1,138 @@ -
- +
+
\ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/templates/Views/PopupsContacts.html b/rainloop/v/1.3.10.490/app/templates/Views/PopupsContacts.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/PopupsContacts.html rename to rainloop/v/1.3.10.490/app/templates/Views/PopupsContacts.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/PopupsDomain.html b/rainloop/v/1.3.10.490/app/templates/Views/PopupsDomain.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/PopupsDomain.html rename to rainloop/v/1.3.10.490/app/templates/Views/PopupsDomain.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/PopupsFolderClear.html b/rainloop/v/1.3.10.490/app/templates/Views/PopupsFolderClear.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/PopupsFolderClear.html rename to rainloop/v/1.3.10.490/app/templates/Views/PopupsFolderClear.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/PopupsFolderCreate.html b/rainloop/v/1.3.10.490/app/templates/Views/PopupsFolderCreate.html similarity index 97% rename from rainloop/v/1.3.9.485/app/templates/Views/PopupsFolderCreate.html rename to rainloop/v/1.3.10.490/app/templates/Views/PopupsFolderCreate.html index f2ba6ea104..03622eccf7 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/PopupsFolderCreate.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/PopupsFolderCreate.html @@ -1,40 +1,41 @@ -
- -
+
+ +
diff --git a/rainloop/v/1.3.9.485/app/templates/Views/PopupsFolderSystem.html b/rainloop/v/1.3.10.490/app/templates/Views/PopupsFolderSystem.html similarity index 97% rename from rainloop/v/1.3.9.485/app/templates/Views/PopupsFolderSystem.html rename to rainloop/v/1.3.10.490/app/templates/Views/PopupsFolderSystem.html index 8a017438f4..efaed87ff5 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/PopupsFolderSystem.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/PopupsFolderSystem.html @@ -1,53 +1,54 @@ -
- +
+
\ No newline at end of file diff --git a/rainloop/v/1.3.10.490/app/templates/Views/PopupsIdentity.html b/rainloop/v/1.3.10.490/app/templates/Views/PopupsIdentity.html new file mode 100644 index 0000000000..8eb000f478 --- /dev/null +++ b/rainloop/v/1.3.10.490/app/templates/Views/PopupsIdentity.html @@ -0,0 +1,62 @@ +
+ +
diff --git a/rainloop/v/1.3.9.485/app/templates/Views/PopupsLanguages.html b/rainloop/v/1.3.10.490/app/templates/Views/PopupsLanguages.html similarity index 97% rename from rainloop/v/1.3.9.485/app/templates/Views/PopupsLanguages.html rename to rainloop/v/1.3.10.490/app/templates/Views/PopupsLanguages.html index b8985b9b13..16bbcf4aa8 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/PopupsLanguages.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/PopupsLanguages.html @@ -1,20 +1,20 @@ -
- +
+
\ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/templates/Views/PopupsPlugin.html b/rainloop/v/1.3.10.490/app/templates/Views/PopupsPlugin.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/PopupsPlugin.html rename to rainloop/v/1.3.10.490/app/templates/Views/PopupsPlugin.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/PopupsWindowSimpleMessage.html b/rainloop/v/1.3.10.490/app/templates/Views/PopupsWindowSimpleMessage.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/PopupsWindowSimpleMessage.html rename to rainloop/v/1.3.10.490/app/templates/Views/PopupsWindowSimpleMessage.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/SettingsAccounts.html b/rainloop/v/1.3.10.490/app/templates/Views/SettingsAccounts.html similarity index 90% rename from rainloop/v/1.3.9.485/app/templates/Views/SettingsAccounts.html rename to rainloop/v/1.3.10.490/app/templates/Views/SettingsAccounts.html index 6b6f08d9b3..aedbfadb2c 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/SettingsAccounts.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/SettingsAccounts.html @@ -1,38 +1,39 @@ -
-
-
- -
-
- - -    - - -
- -    - -
- - - - - - - - - - - -
+
+
+
+ +
+
+ + +    + + +
+ +    + +
+ + + + + + + + + + + +
\ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/templates/Views/SettingsChangePassword.html b/rainloop/v/1.3.10.490/app/templates/Views/SettingsChangePassword.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/SettingsChangePassword.html rename to rainloop/v/1.3.10.490/app/templates/Views/SettingsChangePassword.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/SettingsCustom.html b/rainloop/v/1.3.10.490/app/templates/Views/SettingsCustom.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/SettingsCustom.html rename to rainloop/v/1.3.10.490/app/templates/Views/SettingsCustom.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/SettingsFolderItem.html b/rainloop/v/1.3.10.490/app/templates/Views/SettingsFolderItem.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/SettingsFolderItem.html rename to rainloop/v/1.3.10.490/app/templates/Views/SettingsFolderItem.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/SettingsFolders.html b/rainloop/v/1.3.10.490/app/templates/Views/SettingsFolders.html similarity index 90% rename from rainloop/v/1.3.9.485/app/templates/Views/SettingsFolders.html rename to rainloop/v/1.3.10.490/app/templates/Views/SettingsFolders.html index 91e631b037..e0eefaeb7d 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/SettingsFolders.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/SettingsFolders.html @@ -1,35 +1,35 @@ -
-
-
- -
-
- - -    - - -    - - -    - - -
- - -
-
- -    - -
- - - - - - - -
+
+
+
+ +
+
+ + +    + + +    + + +    + + +
+ + +
+
+ +    + +
+ + + + + + + +
\ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/templates/Views/SettingsGeneral.html b/rainloop/v/1.3.10.490/app/templates/Views/SettingsGeneral.html similarity index 91% rename from rainloop/v/1.3.9.485/app/templates/Views/SettingsGeneral.html rename to rainloop/v/1.3.10.490/app/templates/Views/SettingsGeneral.html index 4271646bac..dea2737847 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/SettingsGeneral.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/SettingsGeneral.html @@ -1,123 +1,125 @@ -
-
-
- -
-
- -
- -
-
-
- -
- - - -
-
-
- -
- - -
-
-
-
-
- -
-
-
- - -
-
-
-
-
- - - - - -
-
-
-
-
- -
-
-
-
- -
-
-
-
+
+
+
+ +
+
+ +
+ +
+
+ +
+ +
+ + +
+
+
+
+
+ +
+
+
+ + +
+
+
+
+
+ + + + + +
+
+
+
+
+ +
+
+
+
+ +
+
+
+
\ No newline at end of file diff --git a/rainloop/v/1.3.10.490/app/templates/Views/SettingsIdentities.html b/rainloop/v/1.3.10.490/app/templates/Views/SettingsIdentities.html new file mode 100644 index 0000000000..ee57d83be8 --- /dev/null +++ b/rainloop/v/1.3.10.490/app/templates/Views/SettingsIdentities.html @@ -0,0 +1,53 @@ +
+
+
+ +
+
+ + +    + + +
+ +    + +
+ + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+
+
+ +
+
+
\ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/templates/Views/SettingsMenu.html b/rainloop/v/1.3.10.490/app/templates/Views/SettingsMenu.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/SettingsMenu.html rename to rainloop/v/1.3.10.490/app/templates/Views/SettingsMenu.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/SettingsPane.html b/rainloop/v/1.3.10.490/app/templates/Views/SettingsPane.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/SettingsPane.html rename to rainloop/v/1.3.10.490/app/templates/Views/SettingsPane.html diff --git a/rainloop/v/1.3.9.485/app/templates/Views/SettingsPersonal.html b/rainloop/v/1.3.10.490/app/templates/Views/SettingsPersonal.html similarity index 83% rename from rainloop/v/1.3.9.485/app/templates/Views/SettingsPersonal.html rename to rainloop/v/1.3.10.490/app/templates/Views/SettingsPersonal.html index 8e3b8594e3..93851460a9 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/SettingsPersonal.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/SettingsPersonal.html @@ -1,33 +1,33 @@ -
-
-
- -
-
- -
- -
-
-
- -
- -
- -
-
-
-
+
+
+
+ +
+
+ +
+ +
+
+
+ +
+ +
+ +
+
+
+
\ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/templates/Views/SettingsSocial.html b/rainloop/v/1.3.10.490/app/templates/Views/SettingsSocial.html similarity index 84% rename from rainloop/v/1.3.9.485/app/templates/Views/SettingsSocial.html rename to rainloop/v/1.3.10.490/app/templates/Views/SettingsSocial.html index 8e282645a7..8a65b3d4d9 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/SettingsSocial.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/SettingsSocial.html @@ -1,101 +1,101 @@ -
-
-
- -
-
- -
-
-
-

-
-
-
- - -    - - -
-
- -
-
-
-
- -
-
- -
-
-
-

-
-
-
- - -    - - -
-
- -
-
-
-
- -
-
- -
-
-
-

-
-
-
- - -    - - -
-
- -
-
+
+
+
+ +
+
+ +
+
+
+

+
+
+
+ + +    + + +
+
+ +
+
+
+
+ +
+
+ +
+
+
+

+
+
+
+ + +    + + +
+
+ +
+
+
+
+ +
+
+ +
+
+
+

+
+
+
+ + +    + + +
+
+ +
+
\ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/templates/Views/SettingsThemes.html b/rainloop/v/1.3.10.490/app/templates/Views/SettingsThemes.html similarity index 91% rename from rainloop/v/1.3.9.485/app/templates/Views/SettingsThemes.html rename to rainloop/v/1.3.10.490/app/templates/Views/SettingsThemes.html index b6b38aad0c..a9a81b5309 100644 --- a/rainloop/v/1.3.9.485/app/templates/Views/SettingsThemes.html +++ b/rainloop/v/1.3.10.490/app/templates/Views/SettingsThemes.html @@ -1,59 +1,59 @@ -
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
- -
- - -
-
-
- -
-
- -    - -
-
-
- - -    - - -
-
-
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+ +
+ + +
+
+
+ +
+
+ +    + +
+
+
+ + +    + + +
+
+
\ No newline at end of file diff --git a/rainloop/v/1.3.9.485/app/templates/Views/SystemDropDown.html b/rainloop/v/1.3.10.490/app/templates/Views/SystemDropDown.html similarity index 100% rename from rainloop/v/1.3.9.485/app/templates/Views/SystemDropDown.html rename to rainloop/v/1.3.10.490/app/templates/Views/SystemDropDown.html diff --git a/rainloop/v/1.3.10.490/check.php b/rainloop/v/1.3.10.490/check.php new file mode 100644 index 0000000000..226b5ea86e --- /dev/null +++ b/rainloop/v/1.3.10.490/check.php @@ -0,0 +1,42 @@ + function_exists('curl_init'), + 'iconv' => function_exists('iconv'), + 'json' => function_exists('json_decode'), + 'DateTime' => class_exists('DateTime') && class_exists('DateTimeZone'), + 'libxml' => function_exists('libxml_use_internal_errors'), + 'dom' => class_exists('DOMDocument'), + 'Zlib' => function_exists('gzopen'), + 'PCRE' => function_exists('preg_replace'), + 'SPL' => function_exists('spl_autoload_register') + ); + + if (version_compare(PHP_VERSION, '5.3.0', '<')) + { + echo '

'; + echo '[301] Your PHP version ('.PHP_VERSION.') is lower than the minimal required 5.3.0!'; + echo '

'; + exit(301); + } + + if (in_array(false, $aRequirements)) + { + echo '

'; + echo '[302] The following PHP extensions are not available in your PHP configuration!'; + echo '

    '; + + foreach ($aRequirements as $sKey => $bValue) + { + if (!$bValue) + { + echo '
  • '.$sKey.'
  • '; + } + } + + echo '
'; + exit(302); + } + } diff --git a/rainloop/v/1.3.9.485/index.php b/rainloop/v/1.3.10.490/index.php similarity index 92% rename from rainloop/v/1.3.9.485/index.php rename to rainloop/v/1.3.10.490/index.php index eab11b7535..ed863b740a 100644 --- a/rainloop/v/1.3.9.485/index.php +++ b/rainloop/v/1.3.10.490/index.php @@ -25,7 +25,6 @@ trim(__get_private_data_folder_internal_name(APP_SITE)) : ''; define('APP_PRIVATE_DATA_NAME', 0 === strlen($sPrivateDataFolderInternalName) ? APP_DEFAULT_PRIVATE_DATA_NAME : $sPrivateDataFolderInternalName); define('APP_MULTIPLY', 0 < strlen($sPrivateDataFolderInternalName) && APP_DEFAULT_PRIVATE_DATA_NAME !== APP_PRIVATE_DATA_NAME); - unset($sPrivateDataFolderInternalName); define('APP_CORE_INSTALL_ACCESS_SITE', function_exists('__get_core_install_access_site') ? __get_core_install_access_site(APP_SITE) : APP_SITE); @@ -56,22 +55,22 @@ if (!@is_dir(APP_DATA_FOLDER_PATH)) { - @mkdir(APP_DATA_FOLDER_PATH, 0777); + @mkdir(APP_DATA_FOLDER_PATH, 0755); } else { - @chmod(APP_DATA_FOLDER_PATH, 0777); + @chmod(APP_DATA_FOLDER_PATH, 0755); } if ( !@is_dir(APP_DATA_FOLDER_PATH) || !is_readable(APP_DATA_FOLDER_PATH) || !is_writable(APP_DATA_FOLDER_PATH) || - !@mkdir($sCheckFolder, 0777) || + !@mkdir($sCheckFolder, 0755) || false === @file_put_contents($sCheckFilePath, time()) || !@unlink($sCheckFilePath) || !@rmdir($sCheckFolder) ) { - echo 'Data folder permisions error (Error Code: 202)'; + echo '[202] Data folder permisions error'; exit(202); } @@ -103,8 +102,6 @@ define('APP_PRIVATE_DATA', APP_DATA_FOLDER_PATH.'_data_'.md5($sData).'/'.APP_PRIVATE_DATA_NAME.'/'); define('APP_PLUGINS_PATH', APP_PRIVATE_DATA.'plugins/'); - unset($sSite, $sSalt, $sData); - if (APP_VERSION !== $sInstalled || (APP_MULTIPLY && !@is_dir(APP_PRIVATE_DATA))) { define('APP_INSTALLED_START', true); @@ -122,14 +119,14 @@ if (!@is_dir(APP_PRIVATE_DATA)) { - @mkdir(APP_PRIVATE_DATA, 0777, true); + @mkdir(APP_PRIVATE_DATA, 0755, true); } foreach (array('logs', 'cache', 'configs', 'plugins', 'storage') as $sName) { if (!@is_dir(APP_PRIVATE_DATA.$sName)) { - @mkdir(APP_PRIVATE_DATA.$sName, 0777, true); + @mkdir(APP_PRIVATE_DATA.$sName, 0755, true); } } @@ -137,7 +134,7 @@ { if (!@is_dir(APP_PRIVATE_DATA.'domains')) { - @mkdir(APP_PRIVATE_DATA.'domains', 0777); + @mkdir(APP_PRIVATE_DATA.'domains', 0755); @copy(APP_VERSION_ROOT_PATH.'app/domains/disabled', APP_PRIVATE_DATA.'domains/disabled'); @copy(APP_VERSION_ROOT_PATH.'app/domains/gmail.com.ini', APP_PRIVATE_DATA.'domains/gmail.com.ini'); @@ -149,5 +146,7 @@ } } + unset($sSite, $sSalt, $sData, $sInstalled, $sPrivateDataFolderInternalName); + include APP_VERSION_ROOT_PATH.'app/handle.php'; } diff --git a/rainloop/v/1.3.9.485/langs/de.ini b/rainloop/v/1.3.10.490/langs/de.ini similarity index 96% rename from rainloop/v/1.3.9.485/langs/de.ini rename to rainloop/v/1.3.10.490/langs/de.ini index 1c2adeaacf..bea0d750f2 100644 --- a/rainloop/v/1.3.9.485/langs/de.ini +++ b/rainloop/v/1.3.10.490/langs/de.ini @@ -142,6 +142,7 @@ TITLE_FROM = "Von" TITLE_TO = "An" TITLE_CC = "CC" TITLE_BCC = "BCC" +TITLE_REPLY_TO = "Reply To" TITLE_SUBJECT = "Thema" LINK_SHOW_INPUTS = "alle Felder anzeigen" BUTTON_SEND = "Senden" @@ -171,6 +172,16 @@ TITLE_LANGUAGES = "Choose language" TITLE_ADD_ACCOUNT = "Konto hinzufügen?" BUTTON_ADD_ACCOUNT = "Hinzufügen" +[POPUPS_IDENTITIES] +TITLE_ADD_IDENTITY = "Add Identity?" +TITLE_UPDATE_IDENTITY = "Update Identity?" +BUTTON_ADD_IDENTITY = "Add" +BUTTON_UPDATE_IDENTITY = "Update" +LABEL_EMAIL = "Email" +LABEL_NAME = "Name" +LABEL_REPLY_TO = "Reply To" +LABEL_BCC = "Bcc" + [POPUPS_CREATE_FOLDER] TITLE_CREATE_FOLDER = "Ordner anlegen?" SELECT_NO_PARENT = "" @@ -239,6 +250,7 @@ LABEL_PERSONAL_NAME = "Persönlich" LABEL_GENERAL_NAME = "Allgemein" LABEL_FOLDERS_NAME = "Ordner" LABEL_ACCOUNTS_NAME = "Konten" +LABEL_IDENTITIES_NAME = "Identities" LABEL_SOCIAL_NAME = "Social" LABEL_THEMES_NAME = "Vorlagen" LABEL_CHANGE_PASSWORD_NAME = "Passwort" @@ -318,6 +330,14 @@ BUTTON_DELETE = "Löschen" LOADING_PROCESS = "Liste der Konten wird geladen" DELETING_ASK = "Sind Sie sicher?" +[SETTINGS_IDENTITIES] +LEGEND_IDENTITIES_FOR = "Identities for \"%EMAIL%\"" +LEGEND_SIGNATURE = "Signature" +BUTTON_ADD_IDENTITY = "Add Identity" +BUTTON_DELETE = "Delete" +LOADING_PROCESS = "Updating identity list" +DELETING_ASK = "Are you sure?" + [SETTINGS_CHANGE_PASSWORD] LEGEND_CHANGE_PASSWORD = "Passwort ändern" LABEL_CURRENT_PASSWORD = "Aktuelles Passwort" diff --git a/rainloop/v/1.3.9.485/langs/en.ini b/rainloop/v/1.3.10.490/langs/en.ini similarity index 96% rename from rainloop/v/1.3.9.485/langs/en.ini rename to rainloop/v/1.3.10.490/langs/en.ini index 8154b0fa20..6e29d2ff18 100644 --- a/rainloop/v/1.3.9.485/langs/en.ini +++ b/rainloop/v/1.3.10.490/langs/en.ini @@ -142,6 +142,7 @@ TITLE_FROM = "From" TITLE_TO = "To" TITLE_CC = "CC" TITLE_BCC = "BCC" +TITLE_REPLY_TO = "Reply To" TITLE_SUBJECT = "Subject" LINK_SHOW_INPUTS = "show all fields" BUTTON_SEND = "Send" @@ -171,6 +172,16 @@ TITLE_LANGUAGES = "Choose language" TITLE_ADD_ACCOUNT = "Add Account?" BUTTON_ADD_ACCOUNT = "Add" +[POPUPS_IDENTITIES] +TITLE_ADD_IDENTITY = "Add Identity?" +TITLE_UPDATE_IDENTITY = "Update Identity?" +BUTTON_ADD_IDENTITY = "Add" +BUTTON_UPDATE_IDENTITY = "Update" +LABEL_EMAIL = "Email" +LABEL_NAME = "Name" +LABEL_REPLY_TO = "Reply To" +LABEL_BCC = "Bcc" + [POPUPS_CREATE_FOLDER] TITLE_CREATE_FOLDER = "Create a folder?" SELECT_NO_PARENT = "" @@ -239,6 +250,7 @@ LABEL_PERSONAL_NAME = "Personal" LABEL_GENERAL_NAME = "General" LABEL_FOLDERS_NAME = "Folders" LABEL_ACCOUNTS_NAME = "Accounts" +LABEL_IDENTITIES_NAME = "Identities" LABEL_SOCIAL_NAME = "Social" LABEL_THEMES_NAME = "Themes" LABEL_CHANGE_PASSWORD_NAME = "Password" @@ -247,7 +259,7 @@ BUTTON_BACK = "Back" [SETTINGS_PERSONAL] LEGEND_PERSONAL = "Personal" LABEL_DISPLAY_NAME = "Name" -LABEL_REPLY_TO = "Reply To" +LABEL_REPLY_TO = "Reply-To" LABEL_SIGNATURE = "Signature" [SETTINGS_GENERAL] @@ -318,6 +330,14 @@ BUTTON_DELETE = "Delete" LOADING_PROCESS = "Updating account list" DELETING_ASK = "Are you sure?" +[SETTINGS_IDENTITIES] +LEGEND_IDENTITIES_FOR = "Identities for \"%EMAIL%\"" +LEGEND_SIGNATURE = "Signature" +BUTTON_ADD_IDENTITY = "Add Identity" +BUTTON_DELETE = "Delete" +LOADING_PROCESS = "Updating identity list" +DELETING_ASK = "Are you sure?" + [SETTINGS_CHANGE_PASSWORD] LEGEND_CHANGE_PASSWORD = "Change Password" LABEL_CURRENT_PASSWORD = "Current password" diff --git a/rainloop/v/1.3.9.485/langs/es.ini b/rainloop/v/1.3.10.490/langs/es.ini similarity index 96% rename from rainloop/v/1.3.9.485/langs/es.ini rename to rainloop/v/1.3.10.490/langs/es.ini index 35d7693efa..71861890f7 100644 --- a/rainloop/v/1.3.9.485/langs/es.ini +++ b/rainloop/v/1.3.10.490/langs/es.ini @@ -142,6 +142,7 @@ TITLE_FROM = "De" TITLE_TO = "Para" TITLE_CC = "CC" TITLE_BCC = "BCC" +TITLE_REPLY_TO = "Reply To" TITLE_SUBJECT = "Asunto" LINK_SHOW_INPUTS = "mostrar todos los campos" BUTTON_SEND = "Enviar" @@ -171,6 +172,16 @@ TITLE_LANGUAGES = "Choose language" TITLE_ADD_ACCOUNT = "Añadir cuenta" BUTTON_ADD_ACCOUNT = "Añadir" +[POPUPS_IDENTITIES] +TITLE_ADD_IDENTITY = "Add Identity?" +TITLE_UPDATE_IDENTITY = "Update Identity?" +BUTTON_ADD_IDENTITY = "Add" +BUTTON_UPDATE_IDENTITY = "Update" +LABEL_EMAIL = "Email" +LABEL_NAME = "Name" +LABEL_REPLY_TO = "Reply To" +LABEL_BCC = "Bcc" + [POPUPS_CREATE_FOLDER] TITLE_CREATE_FOLDER = "Crear una carpeta" SELECT_NO_PARENT = "" @@ -239,6 +250,7 @@ LABEL_PERSONAL_NAME = "Personal" LABEL_GENERAL_NAME = "General" LABEL_FOLDERS_NAME = "Carpetas" LABEL_ACCOUNTS_NAME = "Cuentas" +LABEL_IDENTITIES_NAME = "Identities" LABEL_SOCIAL_NAME = "Social" LABEL_THEMES_NAME = "Temas" LABEL_CHANGE_PASSWORD_NAME = "Contraseña" @@ -318,6 +330,14 @@ BUTTON_DELETE = "Eliminar" LOADING_PROCESS = "Actualizando lista de cuentas" DELETING_ASK = "Estas seguro?" +[SETTINGS_IDENTITIES] +LEGEND_IDENTITIES_FOR = "Identities for \"%EMAIL%\"" +LEGEND_SIGNATURE = "Signature" +BUTTON_ADD_IDENTITY = "Add Identity" +BUTTON_DELETE = "Delete" +LOADING_PROCESS = "Updating identity list" +DELETING_ASK = "Are you sure?" + [SETTINGS_CHANGE_PASSWORD] LEGEND_CHANGE_PASSWORD = "Cambiar contraseña" LABEL_CURRENT_PASSWORD = "Contraseña actual" diff --git a/rainloop/v/1.3.9.485/langs/fr.ini b/rainloop/v/1.3.10.490/langs/fr.ini similarity index 96% rename from rainloop/v/1.3.9.485/langs/fr.ini rename to rainloop/v/1.3.10.490/langs/fr.ini index 314a033a18..15c81562a9 100644 --- a/rainloop/v/1.3.9.485/langs/fr.ini +++ b/rainloop/v/1.3.10.490/langs/fr.ini @@ -142,6 +142,7 @@ TITLE_FROM = "De" TITLE_TO = "A" TITLE_CC = "CC" TITLE_BCC = "BCC" +TITLE_REPLY_TO = "Reply To" TITLE_SUBJECT = "Sujet" LINK_SHOW_INPUTS = "voir tous les champs" BUTTON_SEND = "Envoyer" @@ -171,6 +172,16 @@ TITLE_LANGUAGES = "Choisir la langue" TITLE_ADD_ACCOUNT = "Ajouter un compte ?" BUTTON_ADD_ACCOUNT = "Ajouter" +[POPUPS_IDENTITIES] +TITLE_ADD_IDENTITY = "Add Identity?" +TITLE_UPDATE_IDENTITY = "Update Identity?" +BUTTON_ADD_IDENTITY = "Add" +BUTTON_UPDATE_IDENTITY = "Update" +LABEL_EMAIL = "Email" +LABEL_NAME = "Name" +LABEL_REPLY_TO = "Reply To" +LABEL_BCC = "Bcc" + [POPUPS_CREATE_FOLDER] TITLE_CREATE_FOLDER = "Créer un dossier ?" SELECT_NO_PARENT = "" @@ -239,6 +250,7 @@ LABEL_PERSONAL_NAME = "Personnel" LABEL_GENERAL_NAME = "Général" LABEL_FOLDERS_NAME = "Dossiers" LABEL_ACCOUNTS_NAME = "Comptes" +LABEL_IDENTITIES_NAME = "Identities" LABEL_SOCIAL_NAME = "Social" LABEL_THEMES_NAME = "Thèmes" LABEL_CHANGE_PASSWORD_NAME = "Mot de passe" @@ -318,6 +330,14 @@ BUTTON_DELETE = "Supprimer" LOADING_PROCESS = "Mise à jour de la liste des comptes" DELETING_ASK = "Etes-vous sûr ?" +[SETTINGS_IDENTITIES] +LEGEND_IDENTITIES_FOR = "Identities for \"%EMAIL%\"" +LEGEND_SIGNATURE = "Signature" +BUTTON_ADD_IDENTITY = "Add Identity" +BUTTON_DELETE = "Delete" +LOADING_PROCESS = "Updating identity list" +DELETING_ASK = "Are you sure?" + [SETTINGS_CHANGE_PASSWORD] LEGEND_CHANGE_PASSWORD = "Modifier le mot de passe" LABEL_CURRENT_PASSWORD = "Mot de passe actuel" diff --git a/rainloop/v/1.3.9.485/langs/is.ini b/rainloop/v/1.3.10.490/langs/is.ini similarity index 96% rename from rainloop/v/1.3.9.485/langs/is.ini rename to rainloop/v/1.3.10.490/langs/is.ini index c41d37ba65..b312e1e3e8 100644 --- a/rainloop/v/1.3.9.485/langs/is.ini +++ b/rainloop/v/1.3.10.490/langs/is.ini @@ -142,6 +142,7 @@ TITLE_FROM = "Frá" TITLE_TO = "Til" TITLE_CC = "CC" TITLE_BCC = "BCC" +TITLE_REPLY_TO = "Reply To" TITLE_SUBJECT = "Viðhengi" LINK_SHOW_INPUTS = "sýna alla reiti" BUTTON_SEND = "Senda" @@ -171,6 +172,16 @@ TITLE_LANGUAGES = "Choose language" TITLE_ADD_ACCOUNT = "Bæta við aðgangi?" BUTTON_ADD_ACCOUNT = "Bæta við" +[POPUPS_IDENTITIES] +TITLE_ADD_IDENTITY = "Add Identity?" +TITLE_UPDATE_IDENTITY = "Update Identity?" +BUTTON_ADD_IDENTITY = "Add" +BUTTON_UPDATE_IDENTITY = "Update" +LABEL_EMAIL = "Email" +LABEL_NAME = "Name" +LABEL_REPLY_TO = "Reply To" +LABEL_BCC = "Bcc" + [POPUPS_CREATE_FOLDER] TITLE_CREATE_FOLDER = "Búa til möppu?" SELECT_NO_PARENT = "" @@ -239,6 +250,7 @@ LABEL_PERSONAL_NAME = "Persónulegt" LABEL_GENERAL_NAME = "Almennt" LABEL_FOLDERS_NAME = "Möppur" LABEL_ACCOUNTS_NAME = "Aðgangar" +LABEL_IDENTITIES_NAME = "Identities" LABEL_SOCIAL_NAME = "Félagsmiðlar" LABEL_THEMES_NAME = "Þemur" LABEL_CHANGE_PASSWORD_NAME = "Lykilorð" @@ -318,6 +330,14 @@ BUTTON_DELETE = "Eyða" LOADING_PROCESS = "Uppfæri aðgangslista" DELETING_ASK = "Ertu viss?" +[SETTINGS_IDENTITIES] +LEGEND_IDENTITIES_FOR = "Identities for \"%EMAIL%\"" +LEGEND_SIGNATURE = "Signature" +BUTTON_ADD_IDENTITY = "Add Identity" +BUTTON_DELETE = "Delete" +LOADING_PROCESS = "Updating identity list" +DELETING_ASK = "Are you sure?" + [SETTINGS_CHANGE_PASSWORD] LEGEND_CHANGE_PASSWORD = "Breyta lykilorði" LABEL_CURRENT_PASSWORD = "Núverandi lykilorð" diff --git a/rainloop/v/1.3.9.485/langs/lv.ini b/rainloop/v/1.3.10.490/langs/lv.ini similarity index 96% rename from rainloop/v/1.3.9.485/langs/lv.ini rename to rainloop/v/1.3.10.490/langs/lv.ini index 18e2595ed9..ce3de1680b 100644 --- a/rainloop/v/1.3.9.485/langs/lv.ini +++ b/rainloop/v/1.3.10.490/langs/lv.ini @@ -142,6 +142,7 @@ TITLE_FROM = "No" TITLE_TO = "Kam" TITLE_CC = "CC" TITLE_BCC = "BCC" +TITLE_REPLY_TO = "Reply To" TITLE_SUBJECT = "Tēma" LINK_SHOW_INPUTS = "rādīt visus laukus" BUTTON_SEND = "Sūtīt" @@ -171,6 +172,16 @@ TITLE_LANGUAGES = "Choose language" TITLE_ADD_ACCOUNT = "Pievienot kontu?" BUTTON_ADD_ACCOUNT = "Pievienot" +[POPUPS_IDENTITIES] +TITLE_ADD_IDENTITY = "Add Identity?" +TITLE_UPDATE_IDENTITY = "Update Identity?" +BUTTON_ADD_IDENTITY = "Add" +BUTTON_UPDATE_IDENTITY = "Update" +LABEL_EMAIL = "Email" +LABEL_NAME = "Name" +LABEL_REPLY_TO = "Reply To" +LABEL_BCC = "Bcc" + [POPUPS_CREATE_FOLDER] TITLE_CREATE_FOLDER = "Izveidot mapi?" SELECT_NO_PARENT = "" @@ -239,6 +250,7 @@ LABEL_PERSONAL_NAME = "Personīgie" LABEL_GENERAL_NAME = "Vispārējie" LABEL_FOLDERS_NAME = "Mapes" LABEL_ACCOUNTS_NAME = "Konti" +LABEL_IDENTITIES_NAME = "Identities" LABEL_SOCIAL_NAME = "Sociālie" LABEL_THEMES_NAME = "Tēmas" LABEL_CHANGE_PASSWORD_NAME = "Parole" @@ -318,6 +330,14 @@ BUTTON_DELETE = "Dzēst" LOADING_PROCESS = "Atjauno kontu sarakstu" DELETING_ASK = "Tiešām?" +[SETTINGS_IDENTITIES] +LEGEND_IDENTITIES_FOR = "Identities for \"%EMAIL%\"" +LEGEND_SIGNATURE = "Signature" +BUTTON_ADD_IDENTITY = "Add Identity" +BUTTON_DELETE = "Delete" +LOADING_PROCESS = "Updating identity list" +DELETING_ASK = "Are you sure?" + [SETTINGS_CHANGE_PASSWORD] LEGEND_CHANGE_PASSWORD = "Mainīt paroli" LABEL_CURRENT_PASSWORD = "Tagadējā parole" diff --git a/rainloop/v/1.3.9.485/langs/nl.ini b/rainloop/v/1.3.10.490/langs/nl.ini similarity index 96% rename from rainloop/v/1.3.9.485/langs/nl.ini rename to rainloop/v/1.3.10.490/langs/nl.ini index 0cee48591f..3ae1f2d9d7 100644 --- a/rainloop/v/1.3.9.485/langs/nl.ini +++ b/rainloop/v/1.3.10.490/langs/nl.ini @@ -142,6 +142,7 @@ TITLE_FROM = "Van" TITLE_TO = "Naar" TITLE_CC = "CC" TITLE_BCC = "BCC" +TITLE_REPLY_TO = "Reply To" TITLE_SUBJECT = "Onderwerp" LINK_SHOW_INPUTS = "Toon alle velden" BUTTON_SEND = "Verzenden" @@ -166,10 +167,21 @@ EMPTY_TO_ERROR_DESC = "Gelieve minstens 1 ontvanger aan te duiden" [POPUPS_LANGUAGES] TITLE_LANGUAGES = "Kies uw taal" + [POPUPS_ADD_ACCOUNT] TITLE_ADD_ACCOUNT = "Account toevoegen?" BUTTON_ADD_ACCOUNT = "Toevoegen" +[POPUPS_IDENTITIES] +TITLE_ADD_IDENTITY = "Add Identity?" +TITLE_UPDATE_IDENTITY = "Update Identity?" +BUTTON_ADD_IDENTITY = "Add" +BUTTON_UPDATE_IDENTITY = "Update" +LABEL_EMAIL = "Email" +LABEL_NAME = "Name" +LABEL_REPLY_TO = "Reply To" +LABEL_BCC = "Bcc" + [POPUPS_CREATE_FOLDER] TITLE_CREATE_FOLDER = "Map aanmaken?" SELECT_NO_PARENT = "" @@ -238,6 +250,7 @@ LABEL_PERSONAL_NAME = "Persoonlijk" LABEL_GENERAL_NAME = "Algemeen" LABEL_FOLDERS_NAME = "Mappen" LABEL_ACCOUNTS_NAME = "Accounts" +LABEL_IDENTITIES_NAME = "Identities" LABEL_SOCIAL_NAME = "Social" LABEL_THEMES_NAME = "Themes" LABEL_CHANGE_PASSWORD_NAME = "Paswoord" @@ -317,6 +330,14 @@ BUTTON_DELETE = "Wissen" LOADING_PROCESS = "Updating account lijst" DELETING_ASK = "Ben je zeker?" +[SETTINGS_IDENTITIES] +LEGEND_IDENTITIES_FOR = "Identities for \"%EMAIL%\"" +LEGEND_SIGNATURE = "Signature" +BUTTON_ADD_IDENTITY = "Add Identity" +BUTTON_DELETE = "Delete" +LOADING_PROCESS = "Updating identity list" +DELETING_ASK = "Are you sure?" + [SETTINGS_CHANGE_PASSWORD] LEGEND_CHANGE_PASSWORD = "Paswoord aanpassen" LABEL_CURRENT_PASSWORD = "Huidig paswoord" diff --git a/rainloop/v/1.3.9.485/langs/pt-br.ini b/rainloop/v/1.3.10.490/langs/pt-br.ini similarity index 96% rename from rainloop/v/1.3.9.485/langs/pt-br.ini rename to rainloop/v/1.3.10.490/langs/pt-br.ini index 0662c02854..77fe8c1fb3 100644 --- a/rainloop/v/1.3.9.485/langs/pt-br.ini +++ b/rainloop/v/1.3.10.490/langs/pt-br.ini @@ -142,6 +142,7 @@ TITLE_FROM = "De" TITLE_TO = "Para" TITLE_CC = "CC" TITLE_BCC = "BCC" +TITLE_REPLY_TO = "Reply To" TITLE_SUBJECT = "Assunto" LINK_SHOW_INPUTS = "Mostrar todos os campos" BUTTON_SEND = "Enviar" @@ -171,6 +172,16 @@ TITLE_LANGUAGES = "Choose language" TITLE_ADD_ACCOUNT = "Adicionar conta?" BUTTON_ADD_ACCOUNT = "Adicionar" +[POPUPS_IDENTITIES] +TITLE_ADD_IDENTITY = "Add Identity?" +TITLE_UPDATE_IDENTITY = "Update Identity?" +BUTTON_ADD_IDENTITY = "Add" +BUTTON_UPDATE_IDENTITY = "Update" +LABEL_EMAIL = "Email" +LABEL_NAME = "Name" +LABEL_REPLY_TO = "Reply To" +LABEL_BCC = "Bcc" + [POPUPS_CREATE_FOLDER] TITLE_CREATE_FOLDER = "Criar pasta?" SELECT_NO_PARENT = "" @@ -239,6 +250,7 @@ LABEL_PERSONAL_NAME = "Pessoal" LABEL_GENERAL_NAME = "Geral" LABEL_FOLDERS_NAME = "Pastas" LABEL_ACCOUNTS_NAME = "Contas" +LABEL_IDENTITIES_NAME = "Identities" LABEL_SOCIAL_NAME = "Social" LABEL_THEMES_NAME = "Temas" LABEL_CHANGE_PASSWORD_NAME = "Senha" @@ -318,6 +330,14 @@ BUTTON_DELETE = "Excluir" LOADING_PROCESS = "Atualizar a lista de contas" DELETING_ASK = "Você tem certeza?" +[SETTINGS_IDENTITIES] +LEGEND_IDENTITIES_FOR = "Identities for \"%EMAIL%\"" +LEGEND_SIGNATURE = "Signature" +BUTTON_ADD_IDENTITY = "Add Identity" +BUTTON_DELETE = "Delete" +LOADING_PROCESS = "Updating identity list" +DELETING_ASK = "Are you sure?" + [SETTINGS_CHANGE_PASSWORD] LEGEND_CHANGE_PASSWORD = "Mudar a Senha" LABEL_CURRENT_PASSWORD = "Senha atual" diff --git a/rainloop/v/1.3.9.485/langs/ru.ini b/rainloop/v/1.3.10.490/langs/ru.ini similarity index 96% rename from rainloop/v/1.3.9.485/langs/ru.ini rename to rainloop/v/1.3.10.490/langs/ru.ini index b601078332..2144e11b73 100644 --- a/rainloop/v/1.3.9.485/langs/ru.ini +++ b/rainloop/v/1.3.10.490/langs/ru.ini @@ -1,383 +1,403 @@ -[LOGIN] -LABEL_EMAIL = "Почта" -LABEL_LOGIN = "Логин" -LABEL_PASSWORD = "Пароль" -LABEL_SIGN_ME = "Запомнить меня" -BUTTON_SIGN_IN = "Войти" -TITLE_SIGN_IN_GOOGLE = "Войти, используя Google" -TITLE_SIGN_IN_FACEBOOK = "Войти, используя Facebook" -TITLE_SIGN_IN_TWITTER = "Войти, используя Twitter" - -[TOP_TOOLBAR] -BUTTON_ADD_ACCOUNT = "Добавить ещё аккаунт" -BUTTON_SETTINGS = "Настройки" -BUTTON_LOGOUT = "Выйти" - -[SEARCH] -MAIN_INPUT_PLACEHOLDER = "Поиск писем" -TITLE_ADV = "Расширенный поиск писем" -LABEL_ADV_FROM = "От" -LABEL_ADV_TO = "Кому" -LABEL_ADV_SUBJECT = "Тема" -LABEL_ADV_TEXT = "Текст" -LABEL_ADV_HAS_ATTACHMENTS = "С файлами" -LABEL_ADV_DATE = "Дата" -LABEL_ADV_DATE_ALL = "За все время" -LABEL_ADV_DATE_3_DAYS = "За три дня" -LABEL_ADV_DATE_7_DAYS = "За неделю" -LABEL_ADV_DATE_MONTH = "За месяц" -LABEL_ADV_DATE_3_MONTHS = "За 3 месяца" -LABEL_ADV_DATE_6_MONTHS = "За полгода" -LABEL_ADV_DATE_YEAR = "За год" -BUTTON_ADV_SEARCH = "Искать" - -[MAGNIFIC_POPUP] -CLOSE = "Закрыть (Esc)" -LOADING = "Загрузка..." -GALLERY_PREV = "Назад (Стрелка ←)" -GALLERY_NEXT = "Вперед (Стрелка →)" -GALLERY_COUNTER = "%curr% из %total%" -IMAGE_ERROR = "Изображение не загрузилось." -AJAX_ERROR = "Данные не загрузились." - -[FOLDER_LIST] -BUTTON_COMPOSE = "Написать" -BUTTON_CONTACTS = "Контакты" -INBOX_NAME = "Входящие" -SENT_NAME = "Отправленные" -DRAFTS_NAME = "Черновики" -SPAM_NAME = "Спам" -TRASH_NAME = "Корзина" - -[QUOTA] -TITLE = "Дисковая квота" - -[MESSAGE_LIST] -BUTTON_RELOAD = "Обновить Список Писем" -BUTTON_MOVE_TO = "Переместить" -BUTTON_DELETE = "Удалить" -BUTTON_SPAM = "В спам" -BUTTON_EMPTY_FOLDER = "Очистить всю папку" -BUTTON_MULTY_FORWARD = "Переслать сообщения" -BUTTON_DELETE_WITHOUT_MOVE = "Удалить мимо корзины" -BUTTON_MORE = "Еще" -MENU_SET_SEEN = "Отметить как прочитанное" -MENU_SET_ALL_SEEN = "Отметить все как прочитанные" -MENU_UNSET_SEEN = "Отметить как непрочитанное" -MENU_SET_FLAG = "Установить флаг" -MENU_UNSET_FLAG = "Снять флаг" -MENU_SELECT_ALL = "Все" -MENU_SELECT_NONE = "Ни одного" -MENU_SELECT_INVERT = "Инвентировать" -MENU_SELECT_UNSEEN = "Непрочитанные" -MENU_SELECT_SEEN = "Прочитанные" -MENU_SELECT_FLAGGED = "Помеченные" -MENU_SELECT_UNFLAGGED = "Без пометок" -EMPTY_LIST = "В папке нет писем." -EMPTY_SEARCH_LIST = "Письма не найдены." -SEARCH_RESULT_FOR = "Результат поиска \"%SEARCH%\"" -LIST_LOADING = "Загрузка" -EMPTY_SUBJECT_TEXT = "(Без темы)" -PUT_MESSAGE_HERE = "Киньте сообщение сюда, чтобы посмотреть его в списке" -TODAY_AT = "сегодня в %TIME%" -YESTERDAY_IN = "вчера в %TIME%" -SEARCH_PLACEHOLDER = "Поиск писем" -NEW_MESSAGE_NOTIFICATION = "У вас %COUNT% новых сообщений!" -QUOTA_SIZE = "Использовано %SIZE% (%PROC%%) из %LIMIT%" - -[MESSAGE] -BUTTON_EDIT = "Редактировать" -BUTTON_BACK = "Назад" -BUTTON_CLOSE = "Закрыть" -BUTTON_DELETE = "Удалить" -BUTTON_MOVE_TO = "Переместить" -BUTTON_MORE = "Еще" -BUTTON_REPLY = "Ответить на Письмо" -BUTTON_REPLY_ALL = "Ответить Всем" -BUTTON_FORWARD = "Переслать" -BUTTON_FORWARD_AS_ATTACHMENT = "Переслать как файл" -BUTTON_SHOW_IMAGES = "Показать внешние изображения в письме" -BUTTON_IN_NEW_WINDOW = "В отдельном окне" -MENU_HEADERS = "Просмотреть заголовки" -MENU_VIEW_ORIGINAL = "Просмотреть оригинал" -MENU_DOWNLOAD_ORIGINAL = "Скачать как .eml файл" -MENU_FILTER_SIMILAR = "Фильтровать похожие" -MENU_PRINT = "Распечатать" -EMPTY_SUBJECT_TEXT = "(Без темы)" -LABEL_SUBJECT = "Тема" -LABEL_DATE = "Дата" -LABEL_FROM = "От" -LABEL_FROM_SHORT = "от" -LABEL_TO = "Кому" -LABEL_TO_SHORT = "кому" -LABEL_CC = "Копия" -LABEL_BCC = "Скрытая" -PRINT_LABEL_FROM = "От" -PRINT_LABEL_TO = "Кому" -PRINT_LABEL_CC = "Копия" -PRINT_LABEL_BCC = "Скрытая" -PRINT_LABEL_DATE = "Дата" -PRINT_LABEL_SUBJECT = "Тема" -PRINT_LABEL_ATTACHMENTS = "Файлы" -MESSAGE_LOADING = "Загрузка" -MESSAGE_VIEW_DESC = "Выберите сообщение для просмотра." - -[SUGGESTIONS] -SEARCHING_DESC = "Поиск..." - -[CONTACTS] -LEGEND_CONTACTS = "Контакты" -SEARCH_INPUT_PLACEHOLDER = "Поиск контактов" -BUTTON_ADD_CONTACT = "Добавить контакт" -BUTTON_CREATE_CONTACT = "Сохранить контакт" -BUTTON_UPDATE_CONTACT = "Обновить контакт" -LIST_LOADING = "Загрузка" -EMPTY_LIST = "Нет контактов" -EMPTY_SEARCH = "Контакты не найдены" -CLEAR_SEARCH = "Очистить поиск" -CONTACT_VIEW_DESC = "Выберите контакт для просмотра." - -[COMPOSE] -TITLE_FROM = "От" -TITLE_TO = "Кому" -TITLE_CC = "Копия" -TITLE_BCC = "Скрытая" -TITLE_SUBJECT = "Тема" -LINK_SHOW_INPUTS = "Показать все поля" -BUTTON_SEND = "Отправить" -BUTTON_SAVE = "Сохранить" -BUTTON_DELETE = "Удалить" -BUTTON_CANCEL = "Отменить" -SAVED_TIME = "Сохранено в %TIME%" -SAVED_ERROR_ON_SEND = "Сообщение было отправлено, но не было сохранено" -ATTACH_FILES = "Прикрепить файлы" -ATTACH_DROP_FILES_DESC = "Поместите файлы сюда" -ATTACH_ITEM_CANCEL = "Отменить" -DROPBOX = "Dropbox" -GOOGLE_DRIVE = "Google Drive" -REPLY_MESSAGE_TITLE = "%DATETIME% %EMAIL% написал" -FORWARD_MESSAGE_TOP_TITLE = "-------- Пересланное сообщение -------" -FORWARD_MESSAGE_TOP_FROM = "От" -FORWARD_MESSAGE_TOP_TO = "Кому" -FORWARD_MESSAGE_TOP_CC = "Копия" -FORWARD_MESSAGE_TOP_SENT = "Отправлено" -FORWARD_MESSAGE_TOP_SUBJECT = "Тема" -EMPTY_TO_ERROR_DESC = "Укажите как минимум одного получателя" - -[POPUPS_LANGUAGES] -TITLE_LANGUAGES = "Выберите язык" - -[POPUPS_ADD_ACCOUNT] -TITLE_ADD_ACCOUNT = "Добавить ещё аккаунт?" -BUTTON_ADD_ACCOUNT = "Добавить" - -[POPUPS_CREATE_FOLDER] -TITLE_CREATE_FOLDER = "Создать папку?" -SELECT_NO_PARENT = "" -LABEL_NAME = "Имя папки" -LABEL_PARENT = "Родительская папка" -BUTTON_CREATE = "Создать" -BUTTON_CANCEL = "Отменить" -BUTTON_CLOSE = "Закрыть" -TITLE_CREATING_PROCESS = "Cоздание папки" - -[POPUPS_CLEAR_FOLDER] -TITLE_CLEAR_FOLDER = "Очистить папку от писем?" -BUTTON_CLEAR = "Очистить" -BUTTON_CANCEL = "Отменить" -BUTTON_CLOSE = "Закрыть" -DANGER_DESC_WARNING = "Внимание!" -DANGER_DESC_HTML_1 = "Данное действие приведет к полному удалению всех писем из папки %FOLDER%." -DANGER_DESC_HTML_2 = "После начала очистки, процесс нельзя будет останосить или отменить." -TITLE_CLEARING_PROCESS = "Очистка папки..." - -[POPUPS_SYSTEM_FOLDERS] -TITLE_SYSTEM_FOLDERS = "Выберите системые папки" -SELECT_CHOOSE_ONE = "Еще не выбрана" -SELECT_UNUSE_NAME = "Не использовать" -LABEL_SENT = "Отправленные" -LABEL_DRAFTS = "Черновики" -LABEL_SPAM = "Спам" -LABEL_TRASH = "Удаленные" -BUTTON_CANCEL = "Отменить" -BUTTON_CLOSE = "Закрыть" - -NOTIFICATION_SENT = "Вы еще не выбрали системную папку \"Отправленные\", в которую складываются все сообщения после отправки. -Если вы не хотите сохранять отправленные письма, пожалуйста, выберите пункт \"Не использовать\"." - -NOTIFICATION_DRAFTS = "Вы еще не выбрали системную папку \"Черновики\", в которую складываются все сохраненые сообщения." - -NOTIFICATION_SPAM = "Вы еще не выбрали системную папку \"Спам\", в которую складываются все спамовые сообщения. -Если же вы хотите удалять письма сразу, пожалуйста, выберите пункт \"Не использовать\"." - -NOTIFICATION_TRASH = "Вы еще не выбрали системную папку \"Удаленные\", в которую складываются все сообщения после удаления. -Если же вы хотите удалять письма сразу, пожалуйста, выберите пункт \"Не использовать\"." - -[TITLES] -LOADING = "Загрузка" -LOGIN = "Вход" -MAILBOX = "Почта" -SETTINGS = "Настройки" -COMPOSE = "Написать письмо" - -[UPLOAD] -ERROR_FILE_IS_TOO_BIG = "Файл слишком большой" -ERROR_FILE_PARTIALLY_UPLOADED = "Файл не загрузился полностью" -ERROR_NO_FILE_UPLOADED = "Файл не был загружен" -ERROR_MISSING_TEMP_FOLDER = "Ошибка при сохранении файла" -ERROR_ON_SAVING_FILE = "Ошибка при сохранении файла" -ERROR_FILE_TYPE = "Неверный тип файла" -ERROR_UNKNOWN = "Ошибка загрузки файла" - -[EDITOR] -TEXT_SWITCHER_PLAINT_TEXT = "Обычный текст" -TEXT_SWITCHER_RICH_FORMATTING = "Форматированный текст" -TEXT_SWITCHER_CONFIRM = "Форматирование текста и изображения будут потеряны. Вы уверены, что хотите продолжить?" - -[SETTINGS_LABELS] -LABEL_PERSONAL_NAME = "Персональные" -LABEL_GENERAL_NAME = "Основные" -LABEL_FOLDERS_NAME = "Папки" -LABEL_ACCOUNTS_NAME = "Аккаунты" -LABEL_SOCIAL_NAME = "Социальные" -LABEL_THEMES_NAME = "Темы" -LABEL_CHANGE_PASSWORD_NAME = "Пароль" -BUTTON_BACK = "Назад" - -[SETTINGS_PERSONAL] -LEGEND_PERSONAL = "Персональные Настройки" -LABEL_DISPLAY_NAME = "Имя" -LABEL_REPLY_TO = "От кого" -LABEL_SIGNATURE = "Подпись" - -[SETTINGS_GENERAL] -LEGEND_GENERAL = "Основные Настройки" -LABEL_LANGUAGE = "Язык" -LABEL_EDITOR = "Редактор текста по умолчанию" -LABEL_EDITOR_HTML_AS_DEFAULT = "Форматированный" -LABEL_EDITOR_PLAIN_AS_DEFAULT = "Простой" -LABEL_ANIMATION = "Анимация интерфейса" -LABEL_ANIMATION_FULL = "Полная" -LABEL_ANIMATION_NORMAL = "Нормальная" -LABEL_ANIMATION_NONE = "Отсутствует" -LABEL_VIEW_OPTIONS = "Отображение" -LABEL_USE_PREVIEW_PANE = "Использовать трехколоночный режим отображения" -LABEL_USE_CHECKBOXES_IN_LIST = "Показывать чекбоксы в списках" -LABEL_USE_THREADS = "Сворачивать письма в переписках" -LABEL_REPLY_SAME_FOLDER = "Помещать ответы в ту же папку, где находится оригинал" -LABEL_SHOW_IMAGES = "Показывать внешние изображения в теле письма без предупреждения" -LABEL_SHOW_ANIMATION = "Использовать анимацию" -LABEL_MESSAGE_PER_PAGE = "сообщений на одной странице" -LABEL_CHROME_NOTIFICATION = "Уведомления" -LABEL_CHROME_NOTIFICATION_DESC = "Показывать уведомления о новых сообщениях в всплывающих подсказках" -LABEL_CHROME_NOTIFICATION_DESC_DENIED = "(Блокировано браузером)" - -[SETTINGS_SOCIAL] -LEGEND_GOOGLE = "Google" -BUTTON_GOOGLE_CONNECT = "Подключить Google аккаунт" -BUTTON_GOOGLE_DISCONNECT = "Отключить Google аккаунт" -MAIN_GOOGLE_DESC = "После подключения к Google вы сможете залогиниться в данный аккаунт, используя кнопку Google на экране логина." -LEGEND_FACEBOOK = "Facebook" -BUTTON_FACEBOOK_CONNECT = "Подключить Facebook аккаунт" -BUTTON_FACEBOOK_DISCONNECT = "Отключить Facebook аккаунт" -MAIN_FACEBOOK_DESC = "После подключения к Facebook вы сможете залогиниться в данный аккаунт, используя кнопку Facebook на экране логина." -LEGEND_TWITTER = "Twitter" -BUTTON_TWITTER_CONNECT = "Подключить Twitter аккаунт" -BUTTON_TWITTER_DISCONNECT = "Отключить Twitter аккаунт" -MAIN_TWITTER_DESC = "После подключения к Twitter вы сможете залогиниться в данный аккаунт, используя кнопку Twitter на экране логина." - -[SETTINGS_THEMES] -LEGEND_THEMES = "Темы Оформления" -LEGEND_THEMES_CUSTOM = "Настройка Пользовательской Темы" -LABEL_CUSTOM_TYPE = "Тип Темы" -LABEL_CUSTOM_TYPE_LIGHT = "Светлая" -LABEL_CUSTOM_TYPE_DARK = "Темная" -LABEL_CUSTOM_BACKGROUND_IMAGE = "Картинка на фоне" -BUTTON_UPLOAD_BACKGROUND_IMAGE = "Загрузить фоновую картинку (JPG, PNG)" -ERROR_FILE_IS_TOO_BIG = "Файл слишком большой (1MB+)" -ERROR_FILE_TYPE_ERROR = "Неверный тип файла (только JPG и PNG)" -ERROR_UNKNOWN = "Ошибка загрузки файла" - -[SETTINGS_FOLDERS] -LEGEND_FOLDERS = "Список Папок" -BUTTON_CREATE = "Создать Папку" -BUTTON_SYSTEM = "Назначить Системные Папки" -BUTTON_DELETE = "Удалить" -BUTTON_SUBSCRIBE = "Подписаться" -BUTTON_UNSUBSCRIBE = "Отписаться" -LOADING_PROCESS = "Обновление списка папок" -CREATING_PROCESS = "Cоздание папки" -DELETING_PROCESS = "Удаление папки" -RENAMING_PROCESS = "Переименование папки" -DELETING_ASK = "Точно?" - -[SETTINGS_ACCOUNTS] -LEGEND_ACCOUNTS = "Список Аккаунтов" -BUTTON_ADD_ACCOUNT = "Добавить ещё аккаунт" -BUTTON_DELETE = "Удалить" -LOADING_PROCESS = "Обновление списка аккаунтов" -DELETING_ASK = "Точно?" - -[SETTINGS_CHANGE_PASSWORD] -LEGEND_CHANGE_PASSWORD = "Изменить Пароль" -LABEL_CURRENT_PASSWORD = "Текущий пароль" -LABEL_NEW_PASSWORD = "Новый пароль" -LABEL_REPEAT_PASSWORD = "Повторить" -BUTTON_UPDATE_PASSWORD = "Установить Новый Пароль" - -[NOTIFICATIONS] -INVALID_TOKEN = "Неверный токен запроса" -AUTH_ERROR = "Не удалось авторизоваться" -ACCESS_ERROR = "Ошибка доступа" -CONNECTION_ERROR = "Ошибка соединения с сервером." -CAPTCHA_ERROR = "Неправильное проверочное слово." -SOCIAL_FACEBOOK_LOGIN_ACCESS_DISABLE = "К данному социальному пользователю еще не прикреплен почтовый аккаунт. Войдите в систему под своим почтовым аккаунтом и включите эту возможность в настройках." -SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE = "К данному социальному пользователю еще не прикреплен почтовый аккаунт. Войдите в систему под своим почтовым аккаунтом и включите эту возможность в настройках." -SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE = "К данному социальному пользователю еще не прикреплен почтовый аккаунт. Войдите в систему под своим почтовым аккаунтом и включите эту возможность в настройках." -DOMAIN_NOT_ALLOWED = "Данный домен не разрешен" -ACCOUNT_NOT_ALLOWED = "Данный аккаунт не разрешен" -CANT_GET_MESSAGE_LIST = "Не могу получить список писем" -CANT_GET_MESSAGE = "Не могу получить письмо" -CANT_DELETE_MESSAGE = "Не могу удалить письмо" -CANT_MOVE_MESSAGE = "Не могу переместить письмо" -CANT_SAVE_MESSAGE = "Не могу сохранить письмо" -CANT_SEND_MESSAGE = "Не могу отправить письмо" -INVALID_RECIPIENTS = "Проверьте правильность ввода всех адресов." -CANT_CREATE_FOLDER = "Не могу создать папку" -CANT_RENAME_FOLDER = "Не могу переименовать папку" -CANT_DELETE_FOLDER = "Не могу удалить папку" -CANT_DELETE_NON_EMPTY_FOLDER = "Не могу удалить непустую папку" -CANT_SUBSCRIBE_FOLDER = "Не могу подписать папку" -CANT_UNSUBSCRIBE_FOLDER = "Не могу отписать папку" -CANT_SAVE_SETTINGS = "Не могу сохранить настройки" -CANT_SAVE_PLUGIN_SETTINGS = "Не могу сохранить настройки" -DOMAIN_ALREADY_EXISTS = "Домен уже существует" -CANT_INSTALL_PACKAGE = "Ошибка установки пакета" -CANT_DELETE_PACKAGE = "Ошибка удаления пакета" -INVALID_PLUGIN_PACKAGE = "Ошибка пакета плагина" -UNSUPPORTED_PLUGIN_PACKAGE = "Для работы плагина необходима полная поддержка сервера" -LICENSING_SERVER_IS_UNAVAILABLE = "Сервер подписок временно не доступен." -LICENSING_EXPIRED = "Подписка на данный домен устарела." -LICENSING_BANNED = "Подписка на данный домен заблокирована." -DEMO_SEND_MESSAGE_ERROR = "Демо аккаунту отправка писем на внешние почтовые адреса запрещена!" -ACCOUNT_ALREADY_EXISTS = "Аккаунт уже добавлен" -MAIL_SERVER_ERROR = "Ошибка доступа к почтовому серверу" -UNKNOWN_ERROR = "Неизвестная ошибка" - -[STATIC] -BACK_LINK = "Обновить" -DOMAIN_LIST_DESC = "Список доменов, к которым разрешен доступ через веб почту." -PHP_EXSTENSIONS_ERROR_DESC = "Необходимые расширения PHP не установлены на вашем сервере!" -PHP_VERSION_ERROR_DESC = "Ваша версия PHP (%VERSION%) ниже требуемой 5.3.0!" - -NO_SCRIPT_TITLE = "Для работы приложения необходим JavaScript." -NO_SCRIPT_DESC = "По-видимому, JavaScript либо не поддерживается вашим браузером, либо отключен. -Включите JavaScript, изменив настройки браузера, затем повторите попытку." - -NO_COOKIE_TITLE = "Для работы приложения необходимы Cookie." -NO_COOKIE_DESC = "По-видимому, Cookie либо не поддерживаются вашим браузером, либо отключены. -Включите Cookie, изменив настройки браузера, затем повторите попытку." - -BAD_BROWSER_TITLE = "Ваш браузер устарел." -BAD_BROWSER_DESC = "Чтобы использовать все возможности приложения, -загрузите и установите один из этих браузеров:" +[LOGIN] +LABEL_EMAIL = "Почта" +LABEL_LOGIN = "Логин" +LABEL_PASSWORD = "Пароль" +LABEL_SIGN_ME = "Запомнить меня" +BUTTON_SIGN_IN = "Войти" +TITLE_SIGN_IN_GOOGLE = "Войти, используя Google" +TITLE_SIGN_IN_FACEBOOK = "Войти, используя Facebook" +TITLE_SIGN_IN_TWITTER = "Войти, используя Twitter" + +[TOP_TOOLBAR] +BUTTON_ADD_ACCOUNT = "Добавить ещё аккаунт" +BUTTON_SETTINGS = "Настройки" +BUTTON_LOGOUT = "Выйти" + +[SEARCH] +MAIN_INPUT_PLACEHOLDER = "Поиск писем" +TITLE_ADV = "Расширенный поиск писем" +LABEL_ADV_FROM = "От" +LABEL_ADV_TO = "Кому" +LABEL_ADV_SUBJECT = "Тема" +LABEL_ADV_TEXT = "Текст" +LABEL_ADV_HAS_ATTACHMENTS = "С файлами" +LABEL_ADV_DATE = "Дата" +LABEL_ADV_DATE_ALL = "За все время" +LABEL_ADV_DATE_3_DAYS = "За три дня" +LABEL_ADV_DATE_7_DAYS = "За неделю" +LABEL_ADV_DATE_MONTH = "За месяц" +LABEL_ADV_DATE_3_MONTHS = "За 3 месяца" +LABEL_ADV_DATE_6_MONTHS = "За полгода" +LABEL_ADV_DATE_YEAR = "За год" +BUTTON_ADV_SEARCH = "Искать" + +[MAGNIFIC_POPUP] +CLOSE = "Закрыть (Esc)" +LOADING = "Загрузка..." +GALLERY_PREV = "Назад (Стрелка ←)" +GALLERY_NEXT = "Вперед (Стрелка →)" +GALLERY_COUNTER = "%curr% из %total%" +IMAGE_ERROR = "Изображение не загрузилось." +AJAX_ERROR = "Данные не загрузились." + +[FOLDER_LIST] +BUTTON_COMPOSE = "Написать" +BUTTON_CONTACTS = "Контакты" +INBOX_NAME = "Входящие" +SENT_NAME = "Отправленные" +DRAFTS_NAME = "Черновики" +SPAM_NAME = "Спам" +TRASH_NAME = "Корзина" + +[QUOTA] +TITLE = "Дисковая квота" + +[MESSAGE_LIST] +BUTTON_RELOAD = "Обновить Список Писем" +BUTTON_MOVE_TO = "Переместить" +BUTTON_DELETE = "Удалить" +BUTTON_SPAM = "В спам" +BUTTON_EMPTY_FOLDER = "Очистить всю папку" +BUTTON_MULTY_FORWARD = "Переслать сообщения" +BUTTON_DELETE_WITHOUT_MOVE = "Удалить мимо корзины" +BUTTON_MORE = "Еще" +MENU_SET_SEEN = "Отметить как прочитанное" +MENU_SET_ALL_SEEN = "Отметить все как прочитанные" +MENU_UNSET_SEEN = "Отметить как непрочитанное" +MENU_SET_FLAG = "Установить флаг" +MENU_UNSET_FLAG = "Снять флаг" +MENU_SELECT_ALL = "Все" +MENU_SELECT_NONE = "Ни одного" +MENU_SELECT_INVERT = "Инвентировать" +MENU_SELECT_UNSEEN = "Непрочитанные" +MENU_SELECT_SEEN = "Прочитанные" +MENU_SELECT_FLAGGED = "Помеченные" +MENU_SELECT_UNFLAGGED = "Без пометок" +EMPTY_LIST = "В папке нет писем." +EMPTY_SEARCH_LIST = "Письма не найдены." +SEARCH_RESULT_FOR = "Результат поиска \"%SEARCH%\"" +LIST_LOADING = "Загрузка" +EMPTY_SUBJECT_TEXT = "(Без темы)" +PUT_MESSAGE_HERE = "Киньте сообщение сюда, чтобы посмотреть его в списке" +TODAY_AT = "сегодня в %TIME%" +YESTERDAY_IN = "вчера в %TIME%" +SEARCH_PLACEHOLDER = "Поиск писем" +NEW_MESSAGE_NOTIFICATION = "У вас %COUNT% новых сообщений!" +QUOTA_SIZE = "Использовано %SIZE% (%PROC%%) из %LIMIT%" + +[MESSAGE] +BUTTON_EDIT = "Редактировать" +BUTTON_BACK = "Назад" +BUTTON_CLOSE = "Закрыть" +BUTTON_DELETE = "Удалить" +BUTTON_MOVE_TO = "Переместить" +BUTTON_MORE = "Еще" +BUTTON_REPLY = "Ответить на Письмо" +BUTTON_REPLY_ALL = "Ответить Всем" +BUTTON_FORWARD = "Переслать" +BUTTON_FORWARD_AS_ATTACHMENT = "Переслать как файл" +BUTTON_SHOW_IMAGES = "Показать внешние изображения в письме" +BUTTON_IN_NEW_WINDOW = "В отдельном окне" +MENU_HEADERS = "Просмотреть заголовки" +MENU_VIEW_ORIGINAL = "Просмотреть оригинал" +MENU_DOWNLOAD_ORIGINAL = "Скачать как .eml файл" +MENU_FILTER_SIMILAR = "Фильтровать похожие" +MENU_PRINT = "Распечатать" +EMPTY_SUBJECT_TEXT = "(Без темы)" +LABEL_SUBJECT = "Тема" +LABEL_DATE = "Дата" +LABEL_FROM = "От" +LABEL_FROM_SHORT = "от" +LABEL_TO = "Кому" +LABEL_TO_SHORT = "кому" +LABEL_CC = "Копия" +LABEL_BCC = "Скрытая" +PRINT_LABEL_FROM = "От" +PRINT_LABEL_TO = "Кому" +PRINT_LABEL_CC = "Копия" +PRINT_LABEL_BCC = "Скрытая" +PRINT_LABEL_DATE = "Дата" +PRINT_LABEL_SUBJECT = "Тема" +PRINT_LABEL_ATTACHMENTS = "Файлы" +MESSAGE_LOADING = "Загрузка" +MESSAGE_VIEW_DESC = "Выберите сообщение для просмотра." + +[SUGGESTIONS] +SEARCHING_DESC = "Поиск..." + +[CONTACTS] +LEGEND_CONTACTS = "Контакты" +SEARCH_INPUT_PLACEHOLDER = "Поиск контактов" +BUTTON_ADD_CONTACT = "Добавить контакт" +BUTTON_CREATE_CONTACT = "Сохранить контакт" +BUTTON_UPDATE_CONTACT = "Обновить контакт" +LIST_LOADING = "Загрузка" +EMPTY_LIST = "Нет контактов" +EMPTY_SEARCH = "Контакты не найдены" +CLEAR_SEARCH = "Очистить поиск" +CONTACT_VIEW_DESC = "Выберите контакт для просмотра." + +[COMPOSE] +TITLE_FROM = "От" +TITLE_TO = "Кому" +TITLE_CC = "Копия" +TITLE_BCC = "Скрытая" +TITLE_REPLY_TO = "Отвечать на" +TITLE_SUBJECT = "Тема" +LINK_SHOW_INPUTS = "Показать все поля" +BUTTON_SEND = "Отправить" +BUTTON_SAVE = "Сохранить" +BUTTON_DELETE = "Удалить" +BUTTON_CANCEL = "Отменить" +SAVED_TIME = "Сохранено в %TIME%" +SAVED_ERROR_ON_SEND = "Сообщение было отправлено, но не было сохранено" +ATTACH_FILES = "Прикрепить файлы" +ATTACH_DROP_FILES_DESC = "Поместите файлы сюда" +ATTACH_ITEM_CANCEL = "Отменить" +DROPBOX = "Dropbox" +GOOGLE_DRIVE = "Google Drive" +REPLY_MESSAGE_TITLE = "%DATETIME% %EMAIL% написал" +FORWARD_MESSAGE_TOP_TITLE = "-------- Пересланное сообщение -------" +FORWARD_MESSAGE_TOP_FROM = "От" +FORWARD_MESSAGE_TOP_TO = "Кому" +FORWARD_MESSAGE_TOP_CC = "Копия" +FORWARD_MESSAGE_TOP_SENT = "Отправлено" +FORWARD_MESSAGE_TOP_SUBJECT = "Тема" +EMPTY_TO_ERROR_DESC = "Укажите как минимум одного получателя" + +[POPUPS_LANGUAGES] +TITLE_LANGUAGES = "Выберите язык" + +[POPUPS_ADD_ACCOUNT] +TITLE_ADD_ACCOUNT = "Добавить ещё аккаунт?" +BUTTON_ADD_ACCOUNT = "Добавить" + +[POPUPS_IDENTITIES] +TITLE_ADD_IDENTITY = "Добавить Профиль?" +TITLE_UPDATE_IDENTITY = "Обновить Профиль?" +BUTTON_ADD_IDENTITY = "Добавить" +BUTTON_UPDATE_IDENTITY = "Обновить" +LABEL_EMAIL = "Почта" +LABEL_NAME = "Имя" +LABEL_REPLY_TO = "Отвечать на" +LABEL_BCC = "Скрытая" + +[POPUPS_CREATE_FOLDER] +TITLE_CREATE_FOLDER = "Создать папку?" +SELECT_NO_PARENT = "" +LABEL_NAME = "Имя папки" +LABEL_PARENT = "Родительская папка" +BUTTON_CREATE = "Создать" +BUTTON_CANCEL = "Отменить" +BUTTON_CLOSE = "Закрыть" +TITLE_CREATING_PROCESS = "Cоздание папки" + +[POPUPS_CLEAR_FOLDER] +TITLE_CLEAR_FOLDER = "Очистить папку от писем?" +BUTTON_CLEAR = "Очистить" +BUTTON_CANCEL = "Отменить" +BUTTON_CLOSE = "Закрыть" +DANGER_DESC_WARNING = "Внимание!" +DANGER_DESC_HTML_1 = "Данное действие приведет к полному удалению всех писем из папки %FOLDER%." +DANGER_DESC_HTML_2 = "После начала очистки, процесс нельзя будет останосить или отменить." +TITLE_CLEARING_PROCESS = "Очистка папки..." + +[POPUPS_SYSTEM_FOLDERS] +TITLE_SYSTEM_FOLDERS = "Выберите системые папки" +SELECT_CHOOSE_ONE = "Еще не выбрана" +SELECT_UNUSE_NAME = "Не использовать" +LABEL_SENT = "Отправленные" +LABEL_DRAFTS = "Черновики" +LABEL_SPAM = "Спам" +LABEL_TRASH = "Удаленные" +BUTTON_CANCEL = "Отменить" +BUTTON_CLOSE = "Закрыть" + +NOTIFICATION_SENT = "Вы еще не выбрали системную папку \"Отправленные\", в которую складываются все сообщения после отправки. +Если вы не хотите сохранять отправленные письма, пожалуйста, выберите пункт \"Не использовать\"." + +NOTIFICATION_DRAFTS = "Вы еще не выбрали системную папку \"Черновики\", в которую складываются все сохраненые сообщения." + +NOTIFICATION_SPAM = "Вы еще не выбрали системную папку \"Спам\", в которую складываются все спамовые сообщения. +Если же вы хотите удалять письма сразу, пожалуйста, выберите пункт \"Не использовать\"." + +NOTIFICATION_TRASH = "Вы еще не выбрали системную папку \"Удаленные\", в которую складываются все сообщения после удаления. +Если же вы хотите удалять письма сразу, пожалуйста, выберите пункт \"Не использовать\"." + +[TITLES] +LOADING = "Загрузка" +LOGIN = "Вход" +MAILBOX = "Почта" +SETTINGS = "Настройки" +COMPOSE = "Написать письмо" + +[UPLOAD] +ERROR_FILE_IS_TOO_BIG = "Файл слишком большой" +ERROR_FILE_PARTIALLY_UPLOADED = "Файл не загрузился полностью" +ERROR_NO_FILE_UPLOADED = "Файл не был загружен" +ERROR_MISSING_TEMP_FOLDER = "Ошибка при сохранении файла" +ERROR_ON_SAVING_FILE = "Ошибка при сохранении файла" +ERROR_FILE_TYPE = "Неверный тип файла" +ERROR_UNKNOWN = "Ошибка загрузки файла" + +[EDITOR] +TEXT_SWITCHER_PLAINT_TEXT = "Обычный текст" +TEXT_SWITCHER_RICH_FORMATTING = "Форматированный текст" +TEXT_SWITCHER_CONFIRM = "Форматирование текста и изображения будут потеряны. Вы уверены, что хотите продолжить?" + +[SETTINGS_LABELS] +LABEL_PERSONAL_NAME = "Персональные" +LABEL_GENERAL_NAME = "Основные" +LABEL_FOLDERS_NAME = "Папки" +LABEL_ACCOUNTS_NAME = "Аккаунты" +LABEL_IDENTITIES_NAME = "Профили" +LABEL_SOCIAL_NAME = "Социальные" +LABEL_THEMES_NAME = "Темы" +LABEL_CHANGE_PASSWORD_NAME = "Пароль" +BUTTON_BACK = "Назад" + +[SETTINGS_PERSONAL] +LEGEND_PERSONAL = "Персональные Настройки" +LABEL_DISPLAY_NAME = "Имя" +LABEL_REPLY_TO = "Отвечать на" +LABEL_SIGNATURE = "Подпись" + +[SETTINGS_GENERAL] +LEGEND_GENERAL = "Основные Настройки" +LABEL_LANGUAGE = "Язык" +LABEL_EDITOR = "Редактор текста по умолчанию" +LABEL_EDITOR_HTML_AS_DEFAULT = "Форматированный" +LABEL_EDITOR_PLAIN_AS_DEFAULT = "Простой" +LABEL_ANIMATION = "Анимация интерфейса" +LABEL_ANIMATION_FULL = "Полная" +LABEL_ANIMATION_NORMAL = "Нормальная" +LABEL_ANIMATION_NONE = "Отсутствует" +LABEL_VIEW_OPTIONS = "Отображение" +LABEL_USE_PREVIEW_PANE = "Использовать трехколоночный режим отображения" +LABEL_USE_CHECKBOXES_IN_LIST = "Показывать чекбоксы в списках" +LABEL_USE_THREADS = "Сворачивать письма в переписках" +LABEL_REPLY_SAME_FOLDER = "Помещать ответы в ту же папку, где находится оригинал" +LABEL_SHOW_IMAGES = "Показывать внешние изображения в теле письма без предупреждения" +LABEL_SHOW_ANIMATION = "Использовать анимацию" +LABEL_MESSAGE_PER_PAGE = "сообщений на одной странице" +LABEL_CHROME_NOTIFICATION = "Уведомления" +LABEL_CHROME_NOTIFICATION_DESC = "Показывать уведомления о новых сообщениях в всплывающих подсказках" +LABEL_CHROME_NOTIFICATION_DESC_DENIED = "(Блокировано браузером)" + +[SETTINGS_THEMES] +LEGEND_THEMES = "Темы Оформления" +LEGEND_THEMES_CUSTOM = "Настройка Пользовательской Темы" +LABEL_CUSTOM_TYPE = "Тип Темы" +LABEL_CUSTOM_TYPE_LIGHT = "Светлая" +LABEL_CUSTOM_TYPE_DARK = "Темная" +LABEL_CUSTOM_BACKGROUND_IMAGE = "Картинка на фоне" +BUTTON_UPLOAD_BACKGROUND_IMAGE = "Загрузить фоновую картинку (JPG, PNG)" +ERROR_FILE_IS_TOO_BIG = "Файл слишком большой (1MB+)" +ERROR_FILE_TYPE_ERROR = "Неверный тип файла (только JPG и PNG)" +ERROR_UNKNOWN = "Ошибка загрузки файла" + +[SETTINGS_SOCIAL] +LEGEND_GOOGLE = "Google" +BUTTON_GOOGLE_CONNECT = "Подключить Google аккаунт" +BUTTON_GOOGLE_DISCONNECT = "Отключить Google аккаунт" +MAIN_GOOGLE_DESC = "После подключения к Google вы сможете залогиниться в данный аккаунт, используя кнопку Google на экране логина." +LEGEND_FACEBOOK = "Facebook" +BUTTON_FACEBOOK_CONNECT = "Подключить Facebook аккаунт" +BUTTON_FACEBOOK_DISCONNECT = "Отключить Facebook аккаунт" +MAIN_FACEBOOK_DESC = "После подключения к Facebook вы сможете залогиниться в данный аккаунт, используя кнопку Facebook на экране логина." +LEGEND_TWITTER = "Twitter" +BUTTON_TWITTER_CONNECT = "Подключить Twitter аккаунт" +BUTTON_TWITTER_DISCONNECT = "Отключить Twitter аккаунт" +MAIN_TWITTER_DESC = "После подключения к Twitter вы сможете залогиниться в данный аккаунт, используя кнопку Twitter на экране логина." + +[SETTINGS_FOLDERS] +LEGEND_FOLDERS = "Список Папок" +BUTTON_CREATE = "Создать Папку" +BUTTON_SYSTEM = "Назначить Системные Папки" +BUTTON_DELETE = "Удалить" +BUTTON_SUBSCRIBE = "Подписаться" +BUTTON_UNSUBSCRIBE = "Отписаться" +LOADING_PROCESS = "Обновление списка папок" +CREATING_PROCESS = "Cоздание папки" +DELETING_PROCESS = "Удаление папки" +RENAMING_PROCESS = "Переименование папки" +DELETING_ASK = "Точно?" + +[SETTINGS_ACCOUNTS] +LEGEND_ACCOUNTS = "Список Аккаунтов" +BUTTON_ADD_ACCOUNT = "Добавить ещё аккаунт" +BUTTON_DELETE = "Удалить" +LOADING_PROCESS = "Обновление списка аккаунтов" +DELETING_ASK = "Точно?" + +[SETTINGS_IDENTITIES] +LEGEND_IDENTITIES_FOR = "Профили для \"%EMAIL%\"" +LEGEND_SIGNATURE = "Подпись" +BUTTON_ADD_IDENTITY = "Добавить профиль" +BUTTON_DELETE = "Удалить" +LOADING_PROCESS = "Обновление списка профилей" +DELETING_ASK = "Точно?" + +[SETTINGS_CHANGE_PASSWORD] +LEGEND_CHANGE_PASSWORD = "Изменить Пароль" +LABEL_CURRENT_PASSWORD = "Текущий пароль" +LABEL_NEW_PASSWORD = "Новый пароль" +LABEL_REPEAT_PASSWORD = "Повторить" +BUTTON_UPDATE_PASSWORD = "Установить Новый Пароль" + +[NOTIFICATIONS] +INVALID_TOKEN = "Неверный токен запроса" +AUTH_ERROR = "Не удалось авторизоваться" +ACCESS_ERROR = "Ошибка доступа" +CONNECTION_ERROR = "Ошибка соединения с сервером." +CAPTCHA_ERROR = "Неправильное проверочное слово." +SOCIAL_FACEBOOK_LOGIN_ACCESS_DISABLE = "К данному социальному пользователю еще не прикреплен почтовый аккаунт. Войдите в систему под своим почтовым аккаунтом и включите эту возможность в настройках." +SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE = "К данному социальному пользователю еще не прикреплен почтовый аккаунт. Войдите в систему под своим почтовым аккаунтом и включите эту возможность в настройках." +SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE = "К данному социальному пользователю еще не прикреплен почтовый аккаунт. Войдите в систему под своим почтовым аккаунтом и включите эту возможность в настройках." +DOMAIN_NOT_ALLOWED = "Данный домен не разрешен" +ACCOUNT_NOT_ALLOWED = "Данный аккаунт не разрешен" +CANT_GET_MESSAGE_LIST = "Не могу получить список писем" +CANT_GET_MESSAGE = "Не могу получить письмо" +CANT_DELETE_MESSAGE = "Не могу удалить письмо" +CANT_MOVE_MESSAGE = "Не могу переместить письмо" +CANT_SAVE_MESSAGE = "Не могу сохранить письмо" +CANT_SEND_MESSAGE = "Не могу отправить письмо" +INVALID_RECIPIENTS = "Проверьте правильность ввода всех адресов." +CANT_CREATE_FOLDER = "Не могу создать папку" +CANT_RENAME_FOLDER = "Не могу переименовать папку" +CANT_DELETE_FOLDER = "Не могу удалить папку" +CANT_DELETE_NON_EMPTY_FOLDER = "Не могу удалить непустую папку" +CANT_SUBSCRIBE_FOLDER = "Не могу подписать папку" +CANT_UNSUBSCRIBE_FOLDER = "Не могу отписать папку" +CANT_SAVE_SETTINGS = "Не могу сохранить настройки" +CANT_SAVE_PLUGIN_SETTINGS = "Не могу сохранить настройки" +DOMAIN_ALREADY_EXISTS = "Домен уже существует" +CANT_INSTALL_PACKAGE = "Ошибка установки пакета" +CANT_DELETE_PACKAGE = "Ошибка удаления пакета" +INVALID_PLUGIN_PACKAGE = "Ошибка пакета плагина" +UNSUPPORTED_PLUGIN_PACKAGE = "Для работы плагина необходима полная поддержка сервера" +LICENSING_SERVER_IS_UNAVAILABLE = "Сервер подписок временно не доступен." +LICENSING_EXPIRED = "Подписка на данный домен устарела." +LICENSING_BANNED = "Подписка на данный домен заблокирована." +DEMO_SEND_MESSAGE_ERROR = "Демо аккаунту отправка писем на внешние почтовые адреса запрещена!" +ACCOUNT_ALREADY_EXISTS = "Аккаунт уже добавлен" +MAIL_SERVER_ERROR = "Ошибка доступа к почтовому серверу" +UNKNOWN_ERROR = "Неизвестная ошибка" + +[STATIC] +BACK_LINK = "Обновить" +DOMAIN_LIST_DESC = "Список доменов, к которым разрешен доступ через веб почту." +PHP_EXSTENSIONS_ERROR_DESC = "Необходимые расширения PHP не установлены на вашем сервере!" +PHP_VERSION_ERROR_DESC = "Ваша версия PHP (%VERSION%) ниже требуемой 5.3.0!" + +NO_SCRIPT_TITLE = "Для работы приложения необходим JavaScript." +NO_SCRIPT_DESC = "По-видимому, JavaScript либо не поддерживается вашим браузером, либо отключен. +Включите JavaScript, изменив настройки браузера, затем повторите попытку." + +NO_COOKIE_TITLE = "Для работы приложения необходимы Cookie." +NO_COOKIE_DESC = "По-видимому, Cookie либо не поддерживаются вашим браузером, либо отключены. +Включите Cookie, изменив настройки браузера, затем повторите попытку." + +BAD_BROWSER_TITLE = "Ваш браузер устарел." +BAD_BROWSER_DESC = "Чтобы использовать все возможности приложения, +загрузите и установите один из этих браузеров:" diff --git a/rainloop/v/1.3.9.485/static/browsers/chrome.gif b/rainloop/v/1.3.10.490/static/browsers/chrome.gif similarity index 100% rename from rainloop/v/1.3.9.485/static/browsers/chrome.gif rename to rainloop/v/1.3.10.490/static/browsers/chrome.gif diff --git a/rainloop/v/1.3.9.485/static/browsers/firefox.gif b/rainloop/v/1.3.10.490/static/browsers/firefox.gif similarity index 100% rename from rainloop/v/1.3.9.485/static/browsers/firefox.gif rename to rainloop/v/1.3.10.490/static/browsers/firefox.gif diff --git a/rainloop/v/1.3.9.485/static/browsers/opera.gif b/rainloop/v/1.3.10.490/static/browsers/opera.gif similarity index 100% rename from rainloop/v/1.3.9.485/static/browsers/opera.gif rename to rainloop/v/1.3.10.490/static/browsers/opera.gif diff --git a/rainloop/v/1.3.9.485/static/browsers/safari.gif b/rainloop/v/1.3.10.490/static/browsers/safari.gif similarity index 100% rename from rainloop/v/1.3.9.485/static/browsers/safari.gif rename to rainloop/v/1.3.10.490/static/browsers/safari.gif diff --git a/rainloop/v/1.3.9.485/static/css/app.css b/rainloop/v/1.3.10.490/static/css/app.css similarity index 98% rename from rainloop/v/1.3.9.485/static/css/app.css rename to rainloop/v/1.3.10.490/static/css/app.css index 93dc5ab6b6..005b13c682 100644 --- a/rainloop/v/1.3.9.485/static/css/app.css +++ b/rainloop/v/1.3.10.490/static/css/app.css @@ -6362,7 +6362,7 @@ html.rl-no-preview-pane #rl-right .ui-resizable-handle { } .b-folders .e-item .e-link .count { display: none; - margin-top: 4px; + margin-top: 5px; line-height: 19px; } .b-folders .e-item .e-link.print-count { @@ -6431,7 +6431,7 @@ html.rl-no-preview-pane #rl-right .ui-resizable-handle { width: 520px; } .popups .b-languages-content.exp { - width: 530px; + width: 521px; } .popups .b-languages-content .modal-header { background-color: #fff; @@ -6453,6 +6453,13 @@ html.rl-no-preview-pane #rl-right .ui-resizable-handle { .popups .b-account-add-content .modal-header { background-color: #fff; } +.popups .b-identity-content .modal-header { + background-color: #fff; +} +.popups .b-identity-content .textEmail { + margin-top: 5px; + font-weight: bold; +} .popups .b-advanced-search-content.modal { width: 750px; } @@ -7131,8 +7138,9 @@ html.rl-no-preview-pane .messageView.message-selected { background-color: #eee; border: 1px solid #999; display: inline-block; - width: 40px; - height: 18px; + width: 30px; + height: 14px; + line-height: 14px; text-align: center; cursor: pointer; margin: 10px 0px; @@ -7533,9 +7541,20 @@ html.rl-message-fullscreen .messageView .b-content .buttonFull { background-color: #eee; color: #333; } +.b-compose .b-header .e-identity { + font-weight: bold; +} +.b-compose .b-header .e-identity.multiply { + cursor: pointer; + border-bottom: 1px dashed #555; +} .b-compose .b-header .e-row { line-height: 30px; } +.b-compose .b-header .e-delimiter-row { + line-height: 2px; + height: 5px; +} .b-compose .b-header .e-label { text-align: right; width: 1%; @@ -7792,6 +7811,10 @@ html.rl-message-fullscreen .messageView .b-content .buttonFull { .b-admin-packages-list-table { width: 700px; } +.b-admin-packages-list-table .e-item .package-img { + font-size: 12px; + margin-right: 2px; +} .b-admin-packages-list-table .e-item .package-name.core { font-weight: bold; } @@ -7820,6 +7843,11 @@ html.rl-message-fullscreen .messageView .b-content .buttonFull { .b-admin-plugins-list-table .e-item .e-action { cursor: pointer; } +.b-admin-plugins-list-table .e-item .plugin-img { + font-size: 12px; + margin-right: 2px; +} +.b-admin-plugins-list-table .e-item.disabled .plugin-img, .b-admin-plugins-list-table .e-item.disabled .plugin-name { color: #bbb; } @@ -7968,13 +7996,16 @@ html.rl-message-fullscreen .messageView .b-content .buttonFull { padding: 4px 8px; line-height: 30px; } +.b-settings-accounts .list-table .account-img { + font-size: 12px; + margin-right: 5px; +} .b-settings-accounts .list-table .account-name { display: inline-block; word-break: break-all; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; - margin-left: 7px; line-height: 22px; cursor: default; } @@ -7996,6 +8027,52 @@ html.rl-message-fullscreen .messageView .b-content .buttonFull { opacity: 0.5; filter: alpha(opacity=50); } +.b-settings-identities .process-place { + text-align: center; + width: 600px; + padding: 14px 0; +} +.b-settings-identities .list-table { + width: 600px; +} +.b-settings-identities .list-table td { + padding: 4px 8px; + line-height: 30px; +} +.b-settings-identities .list-table .identity-img { + font-size: 12px; + margin-right: 5px; +} +.b-settings-identities .list-table .identity-name { + display: inline-block; + word-break: break-all; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + line-height: 22px; + cursor: pointer; +} +.b-settings-identities .identity-item .e-action { + cursor: pointer; +} +.b-settings-identities .identity-item .button-delete { + margin-right: 15px; + margin-top: 5px; + visibility: hidden; + opacity: 0; + filter: alpha(opacity=0); +} +.b-settings-identities .identity-item .delete-access.button-delete { + visibility: visible; + margin-right: 0; + opacity: 1; + filter: alpha(opacity=100); +} +.b-settings-identities .identity-item .delete-identity { + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} .b-settings-folders.ignore-folder-subscribe .subscribe-folder, .b-settings-folders.ignore-folder-subscribe .unsubscribe-folder { display: none; @@ -8197,34 +8274,6 @@ html.rl-message-fullscreen .messageView .b-content .buttonFull { background-position: 60px 0; } } -.rl-anim.csstransitions.rl-anim-full .rl-settings-view-model { - -webkit-transition: all 0.5s ease; - -moz-transition: all 0.5s ease; - -o-transition: all 0.5s ease; - transition: all 0.5s ease; -} -.rl-anim.csstransitions.rl-anim-full .rl-settings-view-model .rl-animation-margin-sub1 { - -webkit-transition: margin-left 0.5s ease; - -moz-transition: margin-left 0.5s ease; - -o-transition: margin-left 0.5s ease; - transition: margin-left 0.5s ease; -} -.rl-anim.csstransitions.rl-anim-full .rl-settings-view-model .rl-animation-margin-sub2 { - -webkit-transition: margin-left 0.5s ease; - -moz-transition: margin-left 0.5s ease; - -o-transition: margin-left 0.5s ease; - transition: margin-left 0.5s ease; -} -.rl-anim.csstransitions.rl-anim-full .rl-settings-view-model.rl-animation-margin { - margin-left: 5px; - opacity: .5; -} -.rl-anim.csstransitions.rl-anim-full .rl-settings-view-model.rl-animation-margin .rl-animation-margin-sub1 { - margin-left: 12px; -} -.rl-anim.csstransitions.rl-anim-full .rl-settings-view-model.rl-animation-margin .rl-animation-margin-sub2 { - margin-left: 17px; -} .rl-anim.rgba.cssanimations.backgroundsize .e-strip-animation { -webkit-background-size: 60px 60px; -moz-background-size: 60px 60px; @@ -8250,6 +8299,12 @@ html.rl-message-fullscreen .messageView .b-content .buttonFull { -o-transition: all 0.2s linear; transition: all 0.2s linear; } +.rl-anim.csstransitions .b-settings-identities .identity-item .button-delete { + -webkit-transition: all 0.2s linear; + -moz-transition: all 0.2s linear; + -o-transition: all 0.2s linear; + transition: all 0.2s linear; +} .rl-anim.csstransitions .b-admin-domains .e-item .button-delete { -webkit-transition: all 0.2s linear; -moz-transition: all 0.2s linear; diff --git a/rainloop/v/1.3.9.485/static/css/app.min.css b/rainloop/v/1.3.10.490/static/css/app.min.css similarity index 76% rename from rainloop/v/1.3.9.485/static/css/app.min.css rename to rainloop/v/1.3.10.490/static/css/app.min.css index 0540ecd7b1..9660801a4b 100644 --- a/rainloop/v/1.3.9.485/static/css/app.min.css +++ b/rainloop/v/1.3.10.490/static/css/app.min.css @@ -1,4 +1,4 @@ /*! jQuery UI - v1.10.3 - 2013-11-02 * http://jqueryui.com * Includes: jquery.ui.core.css, jquery.ui.resizable.css -* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}/*! normalize.css 2012-03-11T12:53 UTC - http://github.com/necolas/normalize.css */article,aside,details,figcaption,figure,footer,header,hgroup,nav,section,summary{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}html,button,input,select,textarea{font-family:sans-serif}body{margin:0}a:focus{outline:thin dotted}a:hover,a:active{outline:0}h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em;margin:.83em 0}h3{font-size:1.17em;margin:1em 0}h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.75em;margin:2.33em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:1em 40px}dfn{font-style:italic}mark{background:#ff0;color:#000}p,pre{margin:1em 0}pre,code,kbd,samp{font-family:monospace,serif;_font-family:'courier new',monospace;font-size:1em}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word}q{quotes:none}q:before,q:after{content:'';content:none}small{font-size:75%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,menu,ol,ul{margin:1em 0}dd{margin:0 0 0 40px}menu,ol,ul{padding:0 0 0 40px}nav ul,nav ol{list-style:none;list-style-image:none}img{border:0;-ms-interpolation-mode:bicubic}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0;white-space:normal;*margin-left:-7px}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0;*height:13px;*width:13px}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-decoration,input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@font-face{font-family:icomoon;src:url(fonts/icomoon.eot);src:url(fonts/icomoon.eot?#iefix) format('embedded-opentype'),url(fonts/icomoon.woff) format('woff'),url(fonts/icomoon.ttf) format('truetype'),url(fonts/icomoon.svg#icomoon) format('svg');font-weight:400;font-style:normal}[data-icon]:before{font-family:icomoon;content:attr(data-icon);speak:none;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased}.icon-paperplane,.icon-reply,.icon-reply-all,.icon-forward,.icon-search,.icon-add-to-list,.icon-info,.icon-arrow-right,.icon-arrow-down,.icon-ellipsis,.icon-pencil,.icon-image,.icon-music,.icon-film,.icon-print,.icon-calendar,.icon-key,.icon-cog,.icon-fire,.icon-rocket,.icon-checkbox-checked,.icon-checkbox-unchecked,.icon-checkbox-partial,.icon-radio-checked,.icon-radio-unchecked,.icon-google,.icon-google-plus,.icon-facebook,.icon-twitter,.icon-youtube,.icon-file-pdf,.icon-file-word,.icon-file-excel,.icon-file-powerpoint,.icon-file-xml,.icon-file-css,.icon-warning,.icon-switch,.icon-wrench,.icon-remove,.icon-ok,.icon-plus,.icon-minus,.icon-attachment,.icon-arrow-left,.icon-arrow-up--upload,.icon-arrow-right-2,.icon-arrow-down-2,.icon-file,.icon-file-zip,.icon-console,.icon-floppy,.icon-user,.icon-envelope,.icon-user-add,.icon-eye,.icon-arrow-right-3,.icon-arrow-down-3,.icon-facebook-2,.icon-spinner,.icon-lightning,.icon-trash,.icon-download,.icon-upload,.icon-settings5,.icon-bug,.icon-libreoffice,.icon-file-openoffice,.icon-google-drive,.icon-edit2,.icon-phonebook,.icon-book,.icon-spinner-2,.icon-bell,.icon-cart,.icon-cog-2,.icon-legacyfilemanager,.icon-favorite,.icon-favorite2,.icon-loved,.icon-love,.icon-scaleup,.icon-scaledown,.icon-opennewwindow,.icon-repeat,.icon-reorder,.icon-skype,.icon-dropbox{font-family:icomoon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased}.icon-paperplane:before{content:"\e000"}.icon-reply:before{content:"\e001"}.icon-reply-all:before{content:"\e002"}.icon-forward:before{content:"\e003"}.icon-search:before{content:"\e004"}.icon-add-to-list:before{content:"\e005"}.icon-info:before{content:"\e006"}.icon-arrow-right:before{content:"\e007"}.icon-arrow-down:before{content:"\e008"}.icon-ellipsis:before{content:"\e009"}.icon-pencil:before{content:"\e00a"}.icon-image:before{content:"\e00b"}.icon-music:before{content:"\e00c"}.icon-film:before{content:"\e00d"}.icon-print:before{content:"\e00e"}.icon-calendar:before{content:"\e00f"}.icon-key:before{content:"\e010"}.icon-cog:before{content:"\e011"}.icon-fire:before{content:"\e012"}.icon-rocket:before{content:"\e013"}.icon-checkbox-checked:before{content:"\e014"}.icon-checkbox-unchecked:before{content:"\e015"}.icon-checkbox-partial:before{content:"\e016"}.icon-radio-checked:before{content:"\e017"}.icon-radio-unchecked:before{content:"\e018"}.icon-google:before{content:"\e019"}.icon-google-plus:before{content:"\e01a"}.icon-facebook:before{content:"\e01b"}.icon-twitter:before{content:"\e01c"}.icon-youtube:before{content:"\e01d"}.icon-file-pdf:before{content:"\e01e"}.icon-file-word:before{content:"\e01f"}.icon-file-excel:before{content:"\e020"}.icon-file-powerpoint:before{content:"\e021"}.icon-file-xml:before{content:"\e022"}.icon-file-css:before{content:"\e023"}.icon-warning:before{content:"\e024"}.icon-switch:before{content:"\e025"}.icon-wrench:before{content:"\e026"}.icon-remove:before{content:"\e027"}.icon-ok:before{content:"\e028"}.icon-plus:before{content:"\e029"}.icon-minus:before{content:"\e02a"}.icon-attachment:before{content:"\e02b"}.icon-arrow-left:before{content:"\e02c"}.icon-arrow-up--upload:before{content:"\e02d"}.icon-arrow-right-2:before{content:"\e02e"}.icon-arrow-down-2:before{content:"\e02f"}.icon-file:before{content:"\e030"}.icon-file-zip:before{content:"\e031"}.icon-console:before{content:"\e032"}.icon-floppy:before{content:"\e033"}.icon-user:before{content:"\e034"}.icon-envelope:before{content:"\e035"}.icon-user-add:before{content:"\e036"}.icon-eye:before{content:"\e037"}.icon-arrow-right-3:before{content:"\e038"}.icon-arrow-down-3:before{content:"\e039"}.icon-facebook-2:before{content:"\e03a"}.icon-spinner:before{content:"\e03b"}.icon-lightning:before{content:"\e03c"}.icon-trash:before{content:"\e03d"}.icon-download:before{content:"\e03e"}.icon-upload:before{content:"\e03f"}.icon-settings5:before{content:"\e040"}.icon-bug:before{content:"\e041"}.icon-libreoffice:before{content:"\e042"}.icon-file-openoffice:before{content:"\e043"}.icon-google-drive:before{content:"\e044"}.icon-edit2:before{content:"\e045"}.icon-phonebook:before{content:"\e046"}.icon-book:before{content:"\e047"}.icon-spinner-2:before{content:"\e048"}.icon-bell:before{content:"\e049"}.icon-cart:before{content:"\e04a"}.icon-cog-2:before{content:"\e04b"}.icon-legacyfilemanager:before{content:"\e04c"}.icon-favorite:before{content:"\e04d"}.icon-favorite2:before{content:"\e04e"}.icon-loved:before{content:"\e04f"}.icon-love:before{content:"\e050"}.icon-scaleup:before{content:"\e051"}.icon-scaledown:before{content:"\e052"}.icon-opennewwindow:before{content:"\e053"}.icon-repeat:before{content:"\e054"}.icon-reorder:before{content:"\e055"}.icon-skype:before{content:"\e056"}.icon-dropbox:before{content:"\e057"}.select2-container{margin:0;position:relative;display:inline-block;zoom:1;*display:inline;vertical-align:middle}.select2-container,.select2-drop,.select2-search,.select2-search input{-webkit-box-sizing:border-box;-khtml-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.select2-container .select2-choice{display:block;height:26px;padding:0 0 0 8px;overflow:hidden;position:relative;border:1px solid #aaa;white-space:nowrap;line-height:26px;color:#444;text-decoration:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#eee),color-stop(0.5,#fff));background-image:-webkit-linear-gradient(center bottom,#eee 0,#fff 50%);background-image:-moz-linear-gradient(center bottom,#eee 0,#fff 50%);background-image:-o-linear-gradient(bottom,#eee 0,#fff 50%);background-image:-ms-linear-gradient(top,#fff 0,#eee 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);background-image:linear-gradient(top,#fff 0,#eee 50%)}.select2-container.select2-drop-above .select2-choice{border-bottom-color:#aaa;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#eee),color-stop(0.9,#fff));background-image:-webkit-linear-gradient(center bottom,#eee 0,#fff 90%);background-image:-moz-linear-gradient(center bottom,#eee 0,#fff 90%);background-image:-o-linear-gradient(bottom,#eee 0,#fff 90%);background-image:-ms-linear-gradient(top,#eee 0,#fff 90%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);background-image:linear-gradient(top,#eee 0,#fff 90%)}.select2-container.select2-allowclear .select2-choice .select2-chosen{margin-right:42px}.select2-container .select2-choice>.select2-chosen{margin-right:26px;display:block;overflow:hidden;white-space:nowrap;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis}.select2-container .select2-choice abbr{display:none;width:12px;height:12px;position:absolute;right:24px;top:8px;font-size:1px;text-decoration:none;border:0;background:url(select2.png) right top no-repeat;cursor:pointer;outline:0}.select2-container.select2-allowclear .select2-choice abbr{display:inline-block}.select2-container .select2-choice abbr:hover{background-position:right -11px;cursor:pointer}.select2-drop-undermask{border:0;margin:0;padding:0;position:absolute;left:0;top:0;z-index:9998;background-color:transparent;filter:alpha(opacity=0)}.select2-drop-mask{border:0;margin:0;padding:0;position:absolute;left:0;top:0;z-index:9998;background-color:#fff;opacity:0;filter:alpha(opacity=0)}.select2-drop{width:100%;margin-top:-1px;position:absolute;z-index:9999;top:100%;background:#fff;color:#000;border:1px solid #aaa;border-top:0;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;-webkit-box-shadow:0 4px 5px rgba(0,0,0,.15);-moz-box-shadow:0 4px 5px rgba(0,0,0,.15);box-shadow:0 4px 5px rgba(0,0,0,.15)}.select2-drop-auto-width{border-top:1px solid #aaa;width:auto}.select2-drop-auto-width .select2-search{padding-top:4px}.select2-drop.select2-drop-above{margin-top:1px;border-top:1px solid #aaa;border-bottom:0;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;-webkit-box-shadow:0 -4px 5px rgba(0,0,0,.15);-moz-box-shadow:0 -4px 5px rgba(0,0,0,.15);box-shadow:0 -4px 5px rgba(0,0,0,.15)}.select2-drop-active{border:1px solid #5897fb;border-top:0}.select2-drop.select2-drop-above.select2-drop-active{border-top:1px solid #5897fb}.select2-container .select2-choice .select2-arrow{display:inline-block;width:18px;height:100%;position:absolute;right:0;top:0;border-left:1px solid #aaa;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;background:#ccc;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#ccc),color-stop(0.6,#eee));background-image:-webkit-linear-gradient(center bottom,#ccc 0,#eee 60%);background-image:-moz-linear-gradient(center bottom,#ccc 0,#eee 60%);background-image:-o-linear-gradient(bottom,#ccc 0,#eee 60%);background-image:-ms-linear-gradient(top,#ccc 0,#eee 60%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#cccccc', GradientType=0);background-image:linear-gradient(top,#ccc 0,#eee 60%)}.select2-container .select2-choice .select2-arrow b{display:block;width:100%;height:100%;background:url(select2.png) no-repeat 0 1px}.select2-search{display:inline-block;width:100%;min-height:26px;margin:0;padding-left:4px;padding-right:4px;position:relative;z-index:10000;white-space:nowrap}.select2-search input{width:100%;height:auto!important;min-height:26px;padding:4px 20px 4px 5px;margin:0;outline:0;font-family:sans-serif;font-size:1em;border:1px solid #aaa;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background:#fff url(select2.png) no-repeat 100% -22px;background:url(select2.png) no-repeat 100% -22px,-webkit-gradient(linear,left bottom,left top,color-stop(0.85,#fff),color-stop(0.99,#eee));background:url(select2.png) no-repeat 100% -22px,-webkit-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(select2.png) no-repeat 100% -22px,-moz-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(select2.png) no-repeat 100% -22px,-o-linear-gradient(bottom,#fff 85%,#eee 99%);background:url(select2.png) no-repeat 100% -22px,-ms-linear-gradient(top,#fff 85%,#eee 99%);background:url(select2.png) no-repeat 100% -22px,linear-gradient(top,#fff 85%,#eee 99%)}.select2-drop.select2-drop-above .select2-search input{margin-top:4px}.select2-search input.select2-active{background:#fff url(select2-spinner.gif) no-repeat 100%;background:url(select2-spinner.gif) no-repeat 100%,-webkit-gradient(linear,left bottom,left top,color-stop(0.85,#fff),color-stop(0.99,#eee));background:url(select2-spinner.gif) no-repeat 100%,-webkit-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(select2-spinner.gif) no-repeat 100%,-moz-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(select2-spinner.gif) no-repeat 100%,-o-linear-gradient(bottom,#fff 85%,#eee 99%);background:url(select2-spinner.gif) no-repeat 100%,-ms-linear-gradient(top,#fff 85%,#eee 99%);background:url(select2-spinner.gif) no-repeat 100%,linear-gradient(top,#fff 85%,#eee 99%)}.select2-container-active .select2-choice,.select2-container-active .select2-choices{border:1px solid #5897fb;outline:0;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);-moz-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.select2-dropdown-open .select2-choice{border-bottom-color:transparent;-webkit-box-shadow:0 1px 0 #fff inset;-moz-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;background-color:#eee;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#fff),color-stop(0.5,#eee));background-image:-webkit-linear-gradient(center bottom,#fff 0,#eee 50%);background-image:-moz-linear-gradient(center bottom,#fff 0,#eee 50%);background-image:-o-linear-gradient(bottom,#fff 0,#eee 50%);background-image:-ms-linear-gradient(top,#fff 0,#eee 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);background-image:linear-gradient(top,#fff 0,#eee 50%)}.select2-dropdown-open.select2-drop-above .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choices{border:1px solid #5897fb;border-top-color:transparent;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(0.5,#eee));background-image:-webkit-linear-gradient(center top,#fff 0,#eee 50%);background-image:-moz-linear-gradient(center top,#fff 0,#eee 50%);background-image:-o-linear-gradient(top,#fff 0,#eee 50%);background-image:-ms-linear-gradient(bottom,#fff 0,#eee 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);background-image:linear-gradient(bottom,#fff 0,#eee 50%)}.select2-dropdown-open .select2-choice .select2-arrow{background:transparent;border-left:0;filter:none}.select2-dropdown-open .select2-choice .select2-arrow b{background-position:-18px 1px}.select2-results{max-height:200px;padding:0 0 0 4px;margin:4px 4px 4px 0;position:relative;overflow-x:hidden;overflow-y:auto;-webkit-tap-highlight-color:rgba(0,0,0,0)}.select2-results ul.select2-result-sub{margin:0;padding-left:0}.select2-results ul.select2-result-sub>li .select2-result-label{padding-left:20px}.select2-results ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:40px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:60px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:80px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:100px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:110px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:120px}.select2-results li{list-style:none;display:list-item;background-image:none}.select2-results li.select2-result-with-children>.select2-result-label{font-weight:700}.select2-results .select2-result-label{padding:3px 7px 4px;margin:0;cursor:pointer;min-height:1em;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select2-results .select2-highlighted{background:#3875d7;color:#fff}.select2-results li em{background:#feffde;font-style:normal}.select2-results .select2-highlighted em{background:transparent}.select2-results .select2-highlighted ul{background:#fff;color:#000}.select2-results .select2-no-results,.select2-results .select2-searching,.select2-results .select2-selection-limit{background:#f4f4f4;display:list-item}.select2-results .select2-disabled.select2-highlighted{color:#666;background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-disabled{background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-selected{display:none}.select2-more-results.select2-active{background:#f4f4f4 url(select2-spinner.gif) no-repeat 100%}.select2-more-results{background:#f4f4f4;display:list-item}.select2-container.select2-container-disabled .select2-choice{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container.select2-container-disabled .select2-choice .select2-arrow{background-color:#f4f4f4;background-image:none;border-left:0}.select2-container.select2-container-disabled .select2-choice abbr{display:none}.select2-container-multi .select2-choices{height:auto!important;height:1%;margin:0;padding:0;position:relative;border:1px solid #aaa;cursor:text;overflow:hidden;background-color:#fff;background-image:-webkit-gradient(linear,0 0,0 100%,color-stop(1%,#eee),color-stop(15%,#fff));background-image:-webkit-linear-gradient(top,#eee 1%,#fff 15%);background-image:-moz-linear-gradient(top,#eee 1%,#fff 15%);background-image:-o-linear-gradient(top,#eee 1%,#fff 15%);background-image:-ms-linear-gradient(top,#eee 1%,#fff 15%);background-image:linear-gradient(top,#eee 1%,#fff 15%)}.select2-locked{padding:3px 5px!important}.select2-container-multi .select2-choices{min-height:26px}.select2-container-multi.select2-container-active .select2-choices{border:1px solid #5897fb;outline:0;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);-moz-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.select2-container-multi .select2-choices li{float:left;list-style:none}.select2-container-multi .select2-choices .select2-search-field{margin:0;padding:0;white-space:nowrap}.select2-container-multi .select2-choices .select2-search-field input{padding:5px;margin:1px 0;font-family:sans-serif;font-size:100%;color:#666;outline:0;border:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background:transparent!important}.select2-container-multi .select2-choices .select2-search-field input.select2-active{background:#fff url(select2-spinner.gif) no-repeat 100%!important}.select2-default{color:#999!important}.select2-container-multi .select2-choices .select2-search-choice{padding:3px 5px 3px 18px;margin:3px 0 3px 5px;position:relative;line-height:13px;color:#333;cursor:default;border:1px solid #aaa;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);-moz-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#e4e4e4;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);background-image:-webkit-gradient(linear,0 0,0 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-ms-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%)}.select2-container-multi .select2-choices .select2-search-choice .select2-chosen{cursor:default}.select2-container-multi .select2-choices .select2-search-choice-focus{background:#d4d4d4}.select2-search-choice-close{display:block;width:12px;height:13px;position:absolute;right:3px;top:4px;font-size:1px;outline:0;background:url(select2.png) right top no-repeat}.select2-container-multi .select2-search-choice-close{left:3px}.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover{background-position:right -11px}.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close{background-position:right -11px}.select2-container-multi.select2-container-disabled .select2-choices{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice{padding:3px 5px;border:1px solid #ddd;background-image:none;background-color:#f4f4f4}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close{display:none;background:0}.select2-result-selectable .select2-match,.select2-result-unselectable .select2-match{text-decoration:underline}.select2-offscreen,.select2-offscreen:focus{clip:rect(0 0 0 0);width:1px;height:1px;border:0;margin:0;padding:0;overflow:hidden;position:absolute;outline:0;left:0}.select2-display-none{display:none}.select2-measure-scrollbar{position:absolute;top:-10000px;left:-10000px;width:100px;height:100px;overflow:scroll}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:144dpi){.select2-search input,.select2-search-choice-close,.select2-container .select2-choice abbr,.select2-container .select2-choice .select2-arrow b{background-image:url(select2x2.png)!important;background-repeat:no-repeat!important;background-size:60px 40px!important}.select2-search input{background-position:100% -21px!important}}.nano{overflow :hidden!important}.nano .content{position :absolute;overflow :scroll;top :0;right :0;bottom :0;left :0;-webkit-overflow-scrolling:touch}.nano .content .content-wrapper{height:100%}.nano .content::-webkit-scrollbar{visibility:hidden}.has-scrollbar .content::-webkit-scrollbar{visibility:hidden}.nano-visibility-hidden::-webkit-scrollbar{visibility:hidden}.nano>.pane{background :none;position :absolute;width :5px;right :0;top :1px;bottom :1px;opacity :.01;filter:alpha(opacity=1);-webkit-transition :.4s;-moz-transition :.4s;-o-transition :.4s;transition :.4s;-moz-border-radius :5px;-webkit-border-radius :5px;border-radius :5px;z-index:10000;margin :2px}.nano>.pane2{background :none;position :absolute;height :5px;right :1px;left :1px;bottom :0;opacity :.01;filter:alpha(opacity=1);-webkit-transition :.4s;-moz-transition :.4s;-o-transition :.4s;transition :.4s;-moz-border-radius :5px;-webkit-border-radius :5px;border-radius :5px;z-index:10000;margin :2px}.nano>.pane>.slider{background-color:#999;background-color:rgba(0,0,0,.3);position :relative;margin :0;-moz-border-radius :3px;-webkit-border-radius :3px;border-radius :3px;width :5px}.nano>.pane2>.slider2{background-color:#999;background-color:rgba(0,0,0,.3);position :relative;margin :0;-moz-border-radius :3px;-webkit-border-radius :3px;border-radius :3px;height :5px}.nano:hover>.pane,.nano:hover>.pane2,.pane.active,.pane2.active,.pane.flashed,.pane2.flashed{visibility :visible\9;opacity :.99;filter:alpha(opacity=99)}.nano>.pane:hover,.nano>.pane.active{background-color:rgba(0,0,0,.15)}.nano>.pane2:hover,.nano>.pane2.active{background-color:rgba(0,0,0,.15)}.nano>.pane:hover>.slider,.nano>.pane.active>.slider{background-color:rgba(0,0,0,.4)}.nano>.pane2:hover>.slider2,.nano>.pane2.active>.slider2{background-color:rgba(0,0,0,.4)}.mfp-bg{top:0;left:0;width:100%;height:100%;z-index:502;overflow:hidden;position:fixed;background:#0b0b0b;opacity:.8;filter:alpha(opacity=80)}.mfp-wrap{top:0;left:0;width:100%;height:100%;z-index:503;position:fixed;outline:0!important;-webkit-backface-visibility:hidden}.mfp-container{height:100%;text-align:center;position:absolute;width:100%;height:100%;left:0;top:0;padding:0 8px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mfp-container:before{content:'';display:inline-block;height:100%;vertical-align:middle}.mfp-align-top .mfp-container:before{display:none}.mfp-content{position:relative;display:inline-block;vertical-align:middle;margin:0 auto;text-align:left;z-index:505}.mfp-inline-holder .mfp-content,.mfp-ajax-holder .mfp-content{width:100%;cursor:auto}.mfp-ajax-cur{cursor:progress}.mfp-zoom-out-cur{cursor:-moz-zoom-out;cursor:-webkit-zoom-out;cursor:zoom-out}.mfp-zoom-out-cur,.mfp-zoom-out-cur .mfp-image-holder .mfp-close{cursor:pointer}.mfp-zoom{cursor:pointer;cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.mfp-auto-cursor .mfp-content{cursor:auto}.mfp-close,.mfp-arrow,.mfp-preloader,.mfp-counter{-webkit-user-select:none;-moz-user-select:none;user-select:none}.mfp-loading.mfp-figure{display:none}.mfp-hide{display:none!important}.mfp-preloader{color:#ccc;position:absolute;top:50%;width:auto;text-align:center;margin-top:-.8em;left:8px;right:8px;z-index:504}.mfp-preloader a{color:#ccc}.mfp-preloader a:hover{color:#fff}.mfp-s-ready .mfp-preloader{display:none}.mfp-s-error .mfp-content{display:none}button.mfp-close,button.mfp-arrow{overflow:visible;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;display:block;padding:0;z-index:506}button::-moz-focus-inner{padding:0;border:0}.mfp-close{width:44px;height:44px;line-height:44px;position:absolute;right:0;top:0;text-decoration:none;text-align:center;opacity:.65;padding:0 0 18px 10px;color:#fff;font-style:normal;font-size:28px;font-family:Arial,Baskerville,monospace}.mfp-close:hover,.mfp-close:focus{opacity:1}.mfp-close:active{top:1px}.mfp-close-btn-in .mfp-close{color:#333}.mfp-image-holder .mfp-close,.mfp-iframe-holder .mfp-close{color:#fff;right:-6px;text-align:right;padding-right:6px;width:100%}.mfp-counter{position:absolute;top:0;right:0;color:#ccc;font-size:12px;line-height:18px}.mfp-arrow{position:absolute;top:0;opacity:.65;margin:0;top:50%;margin-top:-55px;padding:0;width:90px;height:110px;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mfp-arrow:active{margin-top:-54px}.mfp-arrow:hover,.mfp-arrow:focus{opacity:1}.mfp-arrow:before,.mfp-arrow:after,.mfp-arrow .mfp-b,.mfp-arrow .mfp-a{content:'';display:block;width:0;height:0;position:absolute;left:0;top:0;margin-top:35px;margin-left:35px;border:solid transparent}.mfp-arrow:after,.mfp-arrow .mfp-a{opacity:.8;border-top-width:12px;border-bottom-width:12px;top:8px}.mfp-arrow:before,.mfp-arrow .mfp-b{border-top-width:20px;border-bottom-width:20px}.mfp-arrow-left{left:0}.mfp-arrow-left:after,.mfp-arrow-left .mfp-a{border-right:12px solid #000;left:5px}.mfp-arrow-left:before,.mfp-arrow-left .mfp-b{border-right:20px solid #fff}.mfp-arrow-right{right:0}.mfp-arrow-right:after,.mfp-arrow-right .mfp-a{border-left:12px solid #000;left:3px}.mfp-arrow-right:before,.mfp-arrow-right .mfp-b{border-left:20px solid #fff}.mfp-iframe-holder{padding-top:40px;padding-bottom:40px}.mfp-iframe-holder .mfp-content{line-height:0;width:100%;max-width:900px}.mfp-iframe-scaler{width:100%;height:0;overflow:hidden;padding-top:56.25%}.mfp-iframe-scaler iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;box-shadow:0 0 8px rgba(0,0,0,.6);background:#000}.mfp-iframe-holder .mfp-close{top:-40px}img.mfp-img{width:auto;max-width:100%;height:auto;display:block;line-height:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:40px 0;margin:0 auto}.mfp-figure:after{content:'';position:absolute;left:0;top:40px;bottom:40px;display:block;right:0;width:auto;height:auto;z-index:-1;box-shadow:0 0 8px rgba(0,0,0,.6)}.mfp-figure{line-height:0}.mfp-bottom-bar{margin-top:-36px;position:absolute;top:100%;left:0;width:100%;cursor:auto}.mfp-title{text-align:left;line-height:18px;color:#f3f3f3;word-break:break-word;padding-right:36px}.mfp-figure small{color:#bdbdbd;display:block;font-size:12px;line-height:14px}.mfp-image-holder .mfp-content{max-width:100%}.mfp-gallery .mfp-image-holder .mfp-figure{cursor:pointer}@media screen and (max-width:800px) and (orientation:landscape),screen and (max-height:300px){.mfp-img-mobile .mfp-image-holder{padding-left:0;padding-right:0}.mfp-img-mobile img.mfp-img{padding:0}.mfp-img-mobile .mfp-figure:after{top:0;bottom:0}.mfp-img-mobile .mfp-bottom-bar{background:rgba(0,0,0,.6);bottom:0;margin:0;top:auto;padding:3px 5px;position:fixed;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mfp-img-mobile .mfp-bottom-bar:empty{padding:0}.mfp-img-mobile .mfp-counter{right:5px;top:3px}.mfp-img-mobile .mfp-close{top:0;right:0;width:35px;height:35px;line-height:35px;background:rgba(0,0,0,.6);position:fixed;text-align:center;padding:0}.mfp-img-mobile .mfp-figure small{display:inline;margin-left:5px}}@media all and (max-width:800px){.mfp-arrow{-webkit-transform:scale(0.75);transform:scale(0.75)}.mfp-arrow-left{-webkit-transform-origin:0;transform-origin:0}.mfp-arrow-right{-webkit-transform-origin:100%;transform-origin:100%}.mfp-container{padding-left:6px;padding-right:6px}}.mfp-ie7 .mfp-img{padding:0}.mfp-ie7 .mfp-bottom-bar{width:600px;left:50%;margin-left:-300px;margin-top:5px;padding-bottom:5px}.mfp-ie7 .mfp-container{padding:0}.mfp-ie7 .mfp-content{padding-top:44px}.mfp-ie7 .mfp-close{top:0;right:0;padding-top:0}.mfp-fade.mfp-bg{opacity:0;-webkit-transition:all .15s ease-out;-moz-transition:all .15s ease-out;transition:all .15s ease-out}.mfp-fade.mfp-bg.mfp-ready{opacity:.8}.mfp-fade.mfp-bg.mfp-removing{opacity:0}.mfp-fade.mfp-wrap .mfp-content{opacity:0;-webkit-transition:all .15s ease-out;-moz-transition:all .15s ease-out;transition:all .15s ease-out}.mfp-fade.mfp-wrap.mfp-ready .mfp-content{opacity:1}.mfp-fade.mfp-wrap.mfp-removing .mfp-content{opacity:0}.my-mfp-zoom-in .zoom-anim-dialog{opacity:0;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;-webkit-transform:scale(0.8);-moz-transform:scale(0.8);-ms-transform:scale(0.8);-o-transform:scale(0.8);transform:scale(0.8)}.my-mfp-zoom-in.mfp-ready .zoom-anim-dialog{opacity:1;-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.my-mfp-zoom-in.mfp-removing .zoom-anim-dialog{-webkit-transform:scale(0.8);-moz-transform:scale(0.8);-ms-transform:scale(0.8);-o-transform:scale(0.8);transform:scale(0.8);opacity:0}.my-mfp-zoom-in.mfp-bg{opacity:0;-webkit-transition:opacity .3s ease-out;-moz-transition:opacity .3s ease-out;-o-transition:opacity .3s ease-out;transition:opacity .3s ease-out}.my-mfp-zoom-in.mfp-ready.mfp-bg{opacity:.8}.my-mfp-zoom-in.mfp-removing.mfp-bg{opacity:0}.simple-pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.simple-pace-inactive{display:none}.simple-pace .simple-pace-progress{background-color:#939595;position:fixed;z-index:2000;top:0;left:0;height:3px;overflow:hidden;-webkit-transition:width .5s;-moz-transition:width .5s;-o-transition:width .5s;transition:width .5s}.simple-pace .simple-pace-progress-inner{position:absolute;top:0;left:0;right:-32px;bottom:0;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.3)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.3)),color-stop(0.75,rgba(255,255,255,.3)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.3) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.3) 50%,rgba(255,255,255,.3) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.3) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.3) 50%,rgba(255,255,255,.3) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.3) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.3) 50%,rgba(255,255,255,.3) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.3) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.3) 50%,rgba(255,255,255,.3) 75%,transparent 75%,transparent);-webkit-background-size:32px 32px;-moz-background-size:32px 32px;-o-background-size:32px 32px;background-size:32px 32px;-webkit-animation:simple-pace-stripe-animation 500ms linear infinite;-moz-animation:simple-pace-stripe-animation 500ms linear infinite;-ms-animation:simple-pace-stripe-animation 500ms linear infinite;-o-animation:simple-pace-stripe-animation 500ms linear infinite;animation:simple-pace-stripe-animation 500ms linear infinite}@-webkit-keyframes simple-pace-stripe-animation{0%{-webkit-transform:none;transform:none}100%{-webkit-transform:translate(-32px,0);transform:translate(-32px,0)}}@-moz-keyframes simple-pace-stripe-animation{0%{-moz-transform:none;transform:none}100%{-moz-transform:translate(-32px,0);transform:translate(-32px,0)}}@-o-keyframes simple-pace-stripe-animation{0%{-o-transform:none;transform:none}100%{-o-transform:translate(-32px,0);transform:translate(-32px,0)}}@-ms-keyframes simple-pace-stripe-animation{0%{-ms-transform:none;transform:none}100%{-ms-transform:translate(-32px,0);transform:translate(-32px,0)}}@keyframes simple-pace-stripe-animation{0%{transform:none;transform:none}100%{transform:translate(-32px,0);transform:translate(-32px,0)}}.flag-wrapper{width:24px;height:16px;display:inline-block}.flag{width:16px;height:11px;display:inline-block;background:url(flags.png) no-repeat}.flag.flag-en{background-position:-144px -154px}.flag.flag-en-us{background-position:-144px -154px}.flag.flag-en-gb{background-position:-240px -33px}.flag.flag-en-ca{background-position:-48px -22px}.flag.flag-nl,.flag.flag-nl-nl{background-position:-80px -110px}.flag.flag-ru,.flag.flag-ru-ru{background-position:-224px -121px}.flag.flag-de,.flag.flag-de-de{background-position:-80px -33px}.flag.flag-it,.flag.flag-it-it{background-position:-208px -66px}.flag.flag-is,.flag.flag-is-is{background-position:-192px -66px}.flag.flag-lv,.flag.flag-lv-lv{background-position:-112px -88px}.flag.flag-fr,.flag.flag-fr-fr,.flag.flag-fr-ca{background-position:-144px -44px}.flag.flag-es,.flag.flag-es-es,.flag.flag-es-la{background-position:-16px -44px}.flag.flag-ja,.flag.flag-jp,.flag.flag-ja-jp{background-position:-16px -77px}.flag.flag-pt,.flag.flag-pt-pt{background-position:-112px -121px}.flag.flag-pt-br{background-position:-192px -11px}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:"";line-height:0}.row:after{clear:both}[class*=span]{float:left;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0}.row-fluid:after{clear:both}.row-fluid [class*=span]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%}.row-fluid [class*=span]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*=span].hide,.row-fluid [class*=span].hide{display:none}[class*=span].pull-right,.row-fluid [class*=span].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;content:"";line-height:0}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:20px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:700}em{font-style:italic}cite{font-style:normal}.muted{color:#999}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:700;line-height:1;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:400;line-height:1;color:#999}h1{font-size:36px;line-height:40px}h2{font-size:30px;line-height:40px}h3{font-size:24px;line-height:40px}h4{font-size:18px;line-height:20px}h5{font-size:14px;line-height:20px}h6{font-size:12px;line-height:20px}h1 small{font-size:24px}h2 small{font-size:18px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:700}dd{margin-left:10px}.dl-horizontal dt{float:left;width:120px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:130px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:25px}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:400;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type=text],input[type=password],input[type=datetime],input[type=datetime-local],input[type=date],input[type=month],input[type=time],input[type=week],input[type=number],input[type=email],input[type=url],input[type=search],input[type=tel],input[type=color],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:9px;font-size:14px;line-height:20px;color:#555;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}input,textarea{width:210px}textarea{height:auto}textarea,input[type=text],input[type=password],input[type=datetime],input[type=datetime-local],input[type=date],input[type=month],input[type=time],input[type=week],input[type=number],input[type=email],input[type=url],input[type=search],input[type=tel],input[type=color],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=date]:focus,input[type=month]:focus,input[type=time]:focus,input[type=week]:focus,input[type=number]:focus,input[type=email]:focus,input[type=url]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=color]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6)}input[type=radio],input[type=checkbox]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal;cursor:pointer}input[type=file],input[type=image],input[type=submit],input[type=reset],input[type=button],input[type=radio],input[type=checkbox]{width:auto}select,input[type=file]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;border:1px solid #bbb;background-color:#fff}select[multiple],select[size]{height:auto}select:focus,input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.025);box-shadow:inset 0 1px 2px rgba(0,0,0,.025);cursor:not-allowed}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:18px;padding-left:18px}.radio input[type=radio],.checkbox input[type=checkbox]{float:left;margin-left:-18px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*=span],select[class*=span],textarea[class*=span],.uneditable-input[class*=span],.row-fluid input[class*=span],.row-fluid select[class*=span],.row-fluid textarea[class*=span],.row-fluid .uneditable-input[class*=span]{float:none;margin-left:0}.input-append input[class*=span],.input-append .uneditable-input[class*=span],.input-prepend input[class*=span],.input-prepend .uneditable-input[class*=span],.row-fluid input[class*=span],.row-fluid select[class*=span],.row-fluid textarea[class*=span],.row-fluid .uneditable-input[class*=span],.row-fluid .input-prepend [class*=span],.row-fluid .input-append [class*=span]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*=span]+[class*=span]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;content:"";line-height:0}.controls-row:after{clear:both}.controls-row [class*=span]{float:left}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio][readonly],input[type=checkbox][readonly]{background-color:transparent}.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.control-group.warning .checkbox:focus,.control-group.warning .radio:focus,.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.control-group.error .checkbox:focus,.control-group.error .radio:focus,.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.control-group.success .checkbox:focus,.control-group.success .radio:focus,.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;content:"";line-height:0}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px}.input-append,.input-prepend{margin-bottom:5px;font-size:0;white-space:nowrap}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;font-size:14px;vertical-align:top;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:400;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn{margin-left:-1px;vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append .add-on:last-child,.input-append .btn:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;vertical-align:middle}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type=radio],.form-search .checkbox input[type=checkbox],.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:140px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:160px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:160px}.form-horizontal .help-block{margin-top:10px;margin-bottom:0}.form-horizontal .form-actions{padding-left:160px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:700}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child,.table-bordered tfoot:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child,.table-bordered tfoot:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-right-topleft:4px}.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9}.table-hover tbody tr:hover td,.table-hover tbody tr:hover th{background-color:#f5f5f5}table [class*=span],.row-fluid table [class*=span]{display:table-cell;float:none;margin-left:0}table .span1{float:none;width:44px;margin-left:0}table .span2{float:none;width:124px;margin-left:0}table .span3{float:none;width:204px;margin-left:0}table .span4{float:none;width:284px;margin-left:0}table .span5{float:none;width:364px;margin-left:0}table .span6{float:none;width:444px;margin-left:0}table .span7{float:none;width:524px;margin-left:0}table .span8{float:none;width:604px;margin-left:0}table .span9{float:none;width:684px;margin-left:0}table .span10{float:none;width:764px;margin-left:0}table .span11{float:none;width:844px;margin-left:0}table .span12{float:none;width:924px;margin-left:0}table .span13{float:none;width:1004px;margin-left:0}table .span14{float:none;width:1084px;margin-left:0}table .span15{float:none;width:1164px;margin-left:0}table .span16{float:none;width:1244px;margin-left:0}table .span17{float:none;width:1324px;margin-left:0}table .span18{float:none;width:1404px;margin-left:0}table .span19{float:none;width:1484px;margin-left:0}table .span20{float:none;width:1564px;margin-left:0}table .span21{float:none;width:1644px;margin-left:0}table .span22{float:none;width:1724px;margin-left:0}table .span23{float:none;width:1804px;margin-left:0}table .span24{float:none;width:1884px;margin-left:0}.table tbody tr.success td{background-color:#dff0d8}.table tbody tr.error td{background-color:#f2dede}.table tbody tr.info td{background-color:#d9edf7}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a{text-decoration:none;color:#fff;background-color:#08c;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0)}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#08c;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0)}.dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover{color:#999}.dropdown-menu .disabled>a:hover{text-decoration:none;background-color:transparent;cursor:default}.open{*z-index:1000}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:"\2191"}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px;-moz-border-radius:0 6px 6px;border-radius:0 6px 6px}.dropdown-submenu:hover .dropdown-menu{display:block}.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#ccc;margin-top:5px;margin-right:-10px}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px}.typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;overflow:visible \9;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:700;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 14px;margin-bottom:0;font-size:14px;line-height:20px;*line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border:1px solid #bbb;*border:0;border-bottom-color:#a2a2a2;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover{color:#333;text-decoration:none;background-color:#e6e6e6;*background-color:#d9d9d9;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-color:#e6e6e6;background-color:#d9d9d9 \9;background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn.disabled,.btn[disabled]{cursor:default;background-color:#e6e6e6;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.btn-large [class^=icon-]{margin-top:2px}.btn-small{padding:3px 9px;font-size:12px;line-height:18px}.btn-small [class^=icon-]{margin-top:0}.btn-mini{padding:2px 6px;font-size:11px;line-height:16px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,.75)}.btn{border-color:#c5c5c5;border-color:rgba(0,0,0,.15) rgba(0,0,0,.15) rgba(0,0,0,.25)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#da4f49;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#49afcd;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#363636;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);border-color:#222 #222 #000;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#222;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type=submit].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type=submit].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type=submit].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type=submit].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type=submit].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{border-color:transparent;cursor:pointer;color:#08c;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent}.btn-group{position:relative;font-size:0;white-space:nowrap;*margin-left:.3em}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1}.btn-toolbar .btn+.btn,.btn-toolbar .btn-group+.btn,.btn-toolbar .btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu{font-size:14px}.btn-group>.btn-mini{font-size:11px}.btn-group>.btn-small{font-size:12px}.btn-group>.btn-large{font-size:16px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px}.btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-mini .caret,.btn-small .caret,.btn-large .caret{margin-top:6px}.btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px}.dropup .btn-large .caret{border-bottom:5px solid #000;border-top:0}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical .btn{display:block;float:none;width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical .btn+.btn{margin-left:0;margin-top:-1px}.btn-group-vertical .btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical .btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical .btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical .btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847}.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.modal-open .dropdown-menu{z-index:2050}.modal-open .dropdown.open{*z-index:2050}.modal-open .popover{z-index:2060}.modal-open .tooltip{z-index:2080}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:50%;left:50%;z-index:1050;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,.3);box-shadow:0 3px 7px rgba(0,0,0,.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out;top:-25%}.modal.fade.in{top:50%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{overflow-y:auto;max-height:400px;padding:15px}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;*zoom:1}.modal-footer:before,.modal-footer:after{display:table;content:"";line-height:0}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{margin-top:-3px}.tooltip.right{margin-left:3px}.tooltip.bottom{margin-top:3px}.tooltip.left{margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#eee;text-align:center;text-decoration:none;background-color:#333;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#333}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#333}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#333}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#333}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;width:236px;padding:1px;background-color:#fff;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-bottom:10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-right:10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0}.popover .arrow,.popover .arrow:after{position:absolute;display:inline-block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow:after{content:"";z-index:-1}.popover.top .arrow{bottom:-10px;left:50%;margin-left:-10px;border-width:10px 10px 0;border-top-color:#fff}.popover.top .arrow:after{border-width:11px 11px 0;border-top-color:rgba(0,0,0,.25);bottom:-1px;left:-11px}.popover.right .arrow{top:50%;left:-10px;margin-top:-10px;border-width:10px 10px 10px 0;border-right-color:#fff}.popover.right .arrow:after{border-width:11px 11px 11px 0;border-right-color:rgba(0,0,0,.25);bottom:-11px;left:-1px}.popover.bottom .arrow{top:-10px;left:50%;margin-left:-10px;border-width:0 10px 10px;border-bottom-color:#fff}.popover.bottom .arrow:after{border-width:0 11px 11px;border-bottom-color:rgba(0,0,0,.25);top:-1px;left:-11px}.popover.left .arrow{top:50%;right:-10px;margin-top:-10px;border-width:10px 0 10px 10px;border-left-color:#fff}.popover.left .arrow:after{border-width:11px 0 11px 11px;border-left-color:rgba(0,0,0,.25);bottom:-11px;right:-1px}.label,.badge{font-size:11.844px;font-weight:700;line-height:14px;color:#fff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#999}.label{padding:1px 4px 2px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding:1px 9px 2px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}a.label:hover,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.progress .bar{width:0;height:100%;color:#fff;float:left;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}@media screen and (-webkit-min-device-pixel-ratio:0){@font-face{font-family:icomoon;src:url(fonts/icomoon.svg#icomoon) format('svg')}}[class^=icon-],[class*=" icon-"]{display:inline-block;width:16px;height:16px;line-height:16px;font-size:15px;*margin-right:.3em;vertical-align:text-top}.icon-white,.nav>.active>a>[class^=icon-],.nav>.active>a>[class*=" icon-"]{color:#fff}.g-ui-menu .e-item:hover [class^=icon-],.g-ui-menu .e-item:hover [class*=" icon-"]{color:#fff}[class^=icon2-],[class*=" icon2-"]{display:inline-block;width:16px;height:16px;line-height:16px;font-size:15px;*margin-right:.3em;vertical-align:text-top;background-repeat:no-repeat}.icon2-none{background-image:none}.icon3-as-button{cursor:pointer}.icon-checkbox-checked,.icon-checkbox-unchecked,.icon-checkbox-partial,.icon-radio-checked,.icon-radio-unchecked{cursor:pointer;color:#555;font-size:1em}.icon-checkbox-checked:hover,.icon-checkbox-unchecked:hover,.icon-checkbox-partial:hover,.icon-radio-checked:hover,.icon-radio-unchecked:hover,.icon-checkbox-checked:active,.icon-checkbox-unchecked:active,.icon-checkbox-partial:active,.icon-radio-checked:active,.icon-radio-unchecked:active{color:#000}.icon-white.icon-checkbox-checked,.icon-white.icon-checkbox-unchecked,.icon-white.icon-checkbox-partial,.icon-white.icon-radio-checked,.icon-white.icon-radio-unchecked{color:#eee}.icon-white.icon-checkbox-checked:hover,.icon-white.icon-checkbox-unchecked:hover,.icon-white.icon-checkbox-partial:hover,.icon-white.icon-radio-checked:hover,.icon-white.icon-radio-unchecked:hover,.icon-white.icon-checkbox-checked:active,.icon-white.icon-checkbox-unchecked:active,.icon-white.icon-checkbox-partial:active,.icon-white.icon-radio-checked:active,.icon-white.icon-radio-unchecked:active{color:#fff}.icon-refresh.in-process{background-position:0 0;background-image:url(images/sync.gif)}.denied-by-browser{cursor:default}.denied-by-browser .icon-checkbox-checked,.denied-by-browser icon-checkbox-unchecked{cursor:default}.icon-arrow-right-3,.icon-arrow-down-3{width:16px;line-height:20px}.icon2-reload{background-image:url(images/sync.png);background-repeat:no-repeat}.icon2-aminate-reload{background-image:url(images/sync.gif);background-repeat:no-repeat}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(359deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0deg)}to{-moz-transform:rotate(359deg)}}@keyframes rotation{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.icon-repeat,.icon-spinner,.icon-spinner-2{width:16px;height:16px}.icon-repeat:before,.icon-spinner:before,.icon-spinner-2:before{font-size:16px;line-height:100%}html.no-cssanimations .icon-repeat,html.no-cssanimations .icon-spinner,html.no-cssanimations .icon-spinner-2{background-image:url(images/sync.png);background-repeat:no-repeat;font-family:Arial}html.no-cssanimations .icon-repeat:before,html.no-cssanimations .icon-spinner:before,html.no-cssanimations .icon-spinner-2:before{content:""}html.no-cssanimations .icon-repeat.animated,html.no-cssanimations .icon-spinner.animated,html.no-cssanimations .icon-spinner-2.animated{background-image:url(images/sync.gif)}html.cssanimations .icon-repeat.animated,html.cssanimations .icon-spinner.animated,html.cssanimations .icon-spinner-2.animated{-webkit-animation:rotation 1s infinite linear;-moz-animation:rotation 1s infinite linear;animation:rotation 1s infinite linear}body{background-color:transparent}label{cursor:pointer}.legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}.legend small{font-size:15px;color:#999}.legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}select{width:223px}.btn-small.btn-small-small{padding:3px 9px;font-size:11px;line-height:11px}.btn.btn-ellipsis{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.btn.btn-narrow{padding-left:12px;padding-right:12px}.dropdown-menu{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.btn{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background-image:none;text-shadow:0 1px 0 #fff}.btn.disabled,.btn[disabled]{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}html.rgba.textshadow .btn.btn-danger,html.rgba.textshadow .btn.btn-success,html.rgba.textshadow .btn.btn-primary{text-shadow:0 1px 0 rgba(0,0,0,.3)}.btn-toolbar{margin-top:0;margin-bottom:0}.dropdown-menu{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);-moz-box-shadow:0 1px 2px rgba(0,0,0,.2);box-shadow:0 1px 2px rgba(0,0,0,.2)}.tooltip{font-size:14px}.tooltip.in{opacity:1;filter:alpha(opacity=100)}.tooltip .tooltip-big{font-size:18px;padding:0 10px}.tooltip-inner{padding:5px 10px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.btn-group>.btn:first-child{-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px;-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px;-webkit-border-bottom-right-radius:2px;-moz-border-radius-bottomright:2px;border-bottom-right-radius:2px}.btn-group>.btn.large:first-child{-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px;-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px;-webkit-border-bottom-right-radius:2px;-moz-border-radius-bottomright:2px;border-bottom-right-radius:2px}textarea,input[type=text],input[type=password],input[type=email],input[type=search]{border:1px solid #ccc}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=search]:focus{background-color:#fff;border:1px solid #999;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}input[type=text],input[type=password],input[type=email],input[type=search]{height:20px;line-height:20px}select{border:1px solid #ccc}.alert.alert-null-left-margin{margin-left:0}html.no-rgba .modal{border-width:0!important}.modal-backdrop,.modal-backdrop.fade.in{opacity:.1;filter:alpha(opacity=10)}.popups{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1100;overflow:auto}.popups .modal{position:static;z-index:1101;margin:5% auto;background-color:transparent;overflow:hidden;-webkit-box-shadow:0 5px 80px rgba(0,0,0,.3);-moz-box-shadow:0 5px 80px rgba(0,0,0,.3);box-shadow:0 5px 80px rgba(0,0,0,.3)}.popups .modal .modal-body{background-color:#fff;max-height:none}.modal.loginContent .modal-body,.modal.loginAdminContent .modal-body{background-color:transparent!important}.picker.modal-dialog-bg,.picker.picker-dialog-bg{z-index:2000!important}.picker.modal-dialog,.picker.picker-dialog{z-index:2001!important}.select2-container-multi .select2-choices{background-image:none;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.select2-container-multi .select2-choices .select2-search-choice{line-height:15px;font-size:16px}.select2-container-multi.select2-container-active .select2-choices{border:1px solid #999;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.select2-drop{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.select2-drop .select2-subname{color:#777}.select2-drop .select2-highlighted .select2-subname{color:#eee}.select2-results{margin:0;padding:0;max-height:400px}.select2-results .select2-searching{padding:1px 4px}.select2-icon{line-height:20px;padding:0 0 0 7px}.select2-icon-result{line-height:40px}.select2-result-label{margin:0!important;padding:5px!important;font-size:16px;height:40px;line-height:40px}.select2-result-label .select2-user-pic{display:inline-block;height:40px;width:40px;margin-right:10px}.g-ui-user-select-none{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-webkit-touch-callout:none}.g-ui-clearfix{*zoom:1}.g-ui-clearfix:before,.g-ui-clearfix:after{display:table;content:"";line-height:0}.g-ui-clearfix:after{clear:both}.g-ui-link{color:#369;text-decoration:underline;cursor:pointer}.g-ui-min-height-300{min-height:300px}.g-ui-absolute-reset{position:absolute;top:0;right:0;bottom:0;left:0;padding:0;margin:0;border:0;z-index:0}.g-ui-menu{max-height:400px;max-width:300px;overflow-y:auto;overflow-x:hidden}.g-ui-menu .e-link{text-decoration:none;cursor:pointer}.g-ui-menu .e-item>.e-link:hover{background-color:#555;background-image:none;color:#fff}.g-ui-menu .e-item.disable>.e-link{cursor:not-allowed;background-color:#fff;background-image:none;color:grey}.g-ui-menu .e-item.disable [class^=icon-]{color:grey}.g-ui-table{display:table;width:100%}.g-ui-table .e-row{display:table-row}.g-ui-table .e-cell{display:table-cell;vertical-align:top;text-align:left}.g-ui-resizable-delimiter-highlight{border:0;border-right:6px solid #aaa}html.rgba .g-ui-resizable-delimiter-highlight{border-right-color:rgba(0,0,0,.2)}.settings-saved-trigger{display:inline-block;line-height:17px;font-size:16px}.settings-saved-trigger .animated{color:green}.settings-saved-trigger .success{color:green;-webkit-transition:opacity .5s linear;-moz-transition:opacity .5s linear;-o-transition:opacity .5s linear;transition:opacity .5s linear;opacity:0;filter:alpha(opacity=0)}.settings-saved-trigger .error{color:red;-webkit-transition:opacity .5s linear;-moz-transition:opacity .5s linear;-o-transition:opacity .5s linear;transition:opacity .5s linear;opacity:0;filter:alpha(opacity=0)}.settings-saved-trigger .visible{opacity:1;filter:alpha(opacity=100)}*{outline:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}html{margin:0;padding:0;overflow:hidden;font-family:Arial,Verdana,Geneva,sans-serif}body{margin:0;padding:0;overflow:hidden;background-color:#e3e3e3;font-family:Arial,Verdana,Geneva,sans-serif;-webkit-touch-callout:none;position:absolute;top:0;left:0;bottom:0;right:0}textarea{resize:none}option:disabled{color:#aaa;cursor:not-allowed}body:before{content:"";position:fixed;top:-10px;left:0;width:100%;height:8px;z-index:100;-webkit-box-shadow:0 0 10px rgba(0,0,0,.6);-moz-box-shadow:0 0 10px rgba(0,0,0,.6);box-shadow:0 0 10px rgba(0,0,0,.6)}#rl-content{height:100%;width:100%}#rl-center{position:absolute;top:0;right:0;bottom:0;left:0;padding:0;margin:0;border:0;z-index:0;min-width:900px;min-height:400px}#rl-top{position:absolute;top:0;right:0;bottom:0;left:0;padding:0;margin:0;border:0;z-index:0;bottom:auto;z-index:2}#rl-bottom{position:absolute;top:0;right:0;bottom:0;left:0;padding:0;margin:0;border:0;z-index:0;top:auto;z-index:1}#rl-left{position:absolute;top:0;right:0;bottom:0;left:0;padding:0;margin:0;border:0;z-index:0;right:auto;width:100%}#rl-right{position:absolute;top:0;right:0;bottom:0;left:0;padding:0;margin:0;border:0;z-index:0;z-index:1}#rl-resizer-right{position:absolute;top:0;bottom:0;right:0;left:35%}#rl-resizer-left{position:absolute;top:0;bottom:0;left:0;right:65%;min-width:350px}#rl-top-resizer-right{position:absolute;top:0;bottom:0;right:0;left:230px}#rl-top-resizer-left{position:absolute;top:0;bottom:0;left:0;right:auto;min-width:120px}html.mobile #rl-top-resizer-left{width:170px}html.mobile #rl-top-resizer-right{left:170px}html.mobile #rl-resizer-left{width:350px}html.mobile #rl-resizer-right{left:350px}html.rl-no-preview-pane #rl-resizer-left{right:5px!important;width:inherit}html.rl-no-preview-pane #rl-resizer-right{left:0!important}html.rl-no-preview-pane #rl-right .ui-resizable-handle{display:none!important}#rl-loading,#rl-loading-error{position:absolute;font:30px Tahoma;top:50%;left:50%;width:120px;height:60px;margin:0;margin-top:-60px;margin-left:-25px;background-color:transparent;background-repeat:no-repeat;background-position:40px 40px;background-image:url(images/loader-black.gif);color:#000}#rl-loading-error{background-image:none;width:600px;margin-left:-200px;display:none}.b-system-drop-down .b-toolbar{position:absolute;top:0;right:0;height:30px;padding:10px 8px;z-index:103}.b-system-drop-down .e-facebook-name{display:inline-block;padding-top:4px}.b-system-drop-down .btn.system-dropdown{padding-left:10px;padding-right:10px}.b-system-drop-down .button-fb-logout{margin:5px}.b-system-drop-down .email-title{display:inline-block;max-width:200px;text-align:left;text-overflow:ellipsis;overflow:hidden}.rl-view-model.RL-Login,.rl-view-model.RL-LoginNew,.rl-view-model.RL-AdminLogin{height:100%}.b-login-content{height:100%;text-align:center;margin-left:-230px}.b-login-content .loginFormWrapper{display:inline-block;vertical-align:middle;text-align:center;width:380px}.b-login-content .loginFormWrapper .loginForm{background-color:#efefef;text-align:left;color:#333;margin:0;float:none}.b-login-content .loginFormWrapper .control-label{font-size:16px;line-height:30px}.b-login-content .loginFormWrapper .control-group{margin-bottom:25px}.b-login-content .loginFormWrapper .wrapper{padding:40px 40px 10px}.b-login-content .loginFormWrapper #recaptcha_image img{border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.b-login-content .loginFormWrapper .inputLoginForm,.b-login-content .loginFormWrapper .inputEmail,.b-login-content .loginFormWrapper .inputLogin,.b-login-content .loginFormWrapper .inputPassword{font-size:18px;height:30px;line-height:29px}.b-login-content .loginFormWrapper .signMeLabel{margin-top:5px}.b-login-content .loginFormWrapper .input-append .add-on{position:relative;height:30px;background:0;margin-left:-35px;z-index:1000;border:0}.b-login-content .loginFormWrapper .input-append .add-on i{font-size:17px;line-height:29px;color:#999}.b-login-content .loginFormWrapper .control-group.error .add-on i{color:#b94a48}.b-login-content .buttonLogin{margin:0}.b-login-content .alert{margin:0 0 20px;text-align:left}.b-login-content .loginAfter{display:inline-block;height:90%;vertical-align:middle;width:0}.b-login-content .flag-selector{margin-bottom:0}.b-folders .b-toolbar{position:absolute;top:0;right:0;left:0;height:30px;padding:10px 10px 0 8px;color:#fff}.b-folders .b-content{position:absolute;top:58px;bottom:13px;left:0;right:0;overflow:hidden;overflow-y:auto}.b-folders .b-content .content{-webkit-overflow-scrolling:touch}.b-folders .b-list-delimiter{margin:10px;border-top:0 solid #000;border-bottom:1px solid #999}.b-folders .e-item{overflow:hidden;white-space:nowrap}.b-folders .e-item .e-link{display:block;position:relative;z-index:1;height:34px;line-height:34px;background-color:transparent;vertical-align:middle;color:grey;cursor:not-allowed;font-size:14px;padding:0;padding-left:10px;padding-right:10px;outline:0;text-decoration:none}.b-folders .e-item .e-link.selectable{color:#000;cursor:pointer}.b-folders .e-item .e-link.selectable:hover,.b-folders .e-item .e-link.selectable.selected,.b-folders .e-item .e-link.selectable.droppableHover{background-color:#555;color:#fff}.b-folders .e-item .e-link.system{cursor:default;color:grey}.b-folders .e-item .e-link .count{display:none;margin-top:4px;line-height:19px}.b-folders .e-item .e-link.print-count{font-weight:700}.b-folders .e-item .e-link.print-count .count{display:inline}.b-folders .e-item .e-link .e-collapsed-sign{cursor:pointer;width:22px;height:30px;line-height:30px;text-align:center;vertical-align:inherit}.b-folders .e-item .hidden.e-link{display:none}.b-folders .e-item .b-sub-folders.collapsed{max-height:0;height:0;display:none}.b-folders .b-folder-system-item{font-weight:700}.b-folders .b-sub-folders .e-item .e-link{padding-left:25px}.b-folders .b-sub-folders.unpaddig-folder .e-item .e-link{padding-left:10px}.b-folders .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:40px}.b-folders .b-sub-folders.unpaddig-folder .b-sub-folders .e-item .e-link{padding-left:25px}.b-folders .b-sub-folders .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:55px}.b-folders .b-sub-folders.unpaddig-folder .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:40px}.b-folders .b-sub-folders .b-sub-folders .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:70px}.b-folders .b-sub-folders.unpaddig-folder .b-sub-folders .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:55px}.popups .b-folder-clear-content .modal-header{background-color:#fff}.popups .b-folder-create-content .modal-header{background-color:#fff}.popups .b-folder-system-content.modal{z-index:1102}.popups .b-folder-system-content .modal-header{background-color:#fff}.popups .b-languages-content.modal{z-index:1103;width:520px}.popups .b-languages-content.exp{width:530px}.popups .b-languages-content .modal-header{background-color:#fff}.popups .b-languages-content .lang-item{display:inline-block;padding:5px 15px;margin:2px 5px;width:200px;background-color:#fff;text-align:left}.popups .b-languages-content .lang-item.selected{background-color:#f5f5f5}.popups .b-languages-content .lang-item:hover{background-color:#eee}.popups .b-account-add-content .modal-header{background-color:#fff}.popups .b-advanced-search-content.modal{width:750px}.popups .b-advanced-search-content.modal .control-label{width:100px}.popups .b-advanced-search-content.modal .controls{margin-left:110px}.popups .b-advanced-search-content .modal-header{background-color:#fff}html.rl-no-preview-pane .messageList.message-selected{display:none}.messageList .toolbar{position:absolute;top:0;right:0;left:0;height:30px;padding:10px 1px;min-width:280px;z-index:102}.messageList .b-footer{position:absolute;bottom:0;right:0;left:0;height:29px;padding:10px;min-width:300px;z-index:101;background-color:#eee;-webkit-border-bottom-right-radius:5px;-moz-border-radius-bottomright:5px;border-bottom-right-radius:5px;-webkit-border-bottom-left-radius:5px;-moz-border-radius-bottomleft:5px;border-bottom-left-radius:5px}.messageList .b-footer .e-quota{display:inline-block;margin-left:10px;font-size:18px;cursor:help}.messageList .b-footer .e-quota:hover{border-bottom:1px dashed #333}.messageList .inputSearch{width:258px}.messageList .btn.buttonMoreSearch{padding-left:8px;padding-right:8px}.messageList .b-message-list-wrapper{position:absolute;top:50px;right:0;left:0;bottom:5px;border:1px solid #aaa;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.3);-moz-box-shadow:0 2px 8px rgba(0,0,0,.3);box-shadow:0 2px 8px rgba(0,0,0,.3);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;z-index:101}.messageList .second-toolbar{position:absolute;top:0;right:0;left:0;height:29px;padding:10px 8px 10px 11px;min-width:280px;z-index:101;background-color:#eee;-webkit-border-top-right-radius:5px;-moz-border-radius-topright:5px;border-top-right-radius:5px;-webkit-border-top-left-radius:5px;-moz-border-radius-topleft:5px;border-top-left-radius:5px}.messageList .second-toolbar .checkboxCkeckAll{margin:5px 0}.messageList .mainDelimiter{position:absolute;left:0;right:0;height:1px;z-index:101;background-color:#bbb}.messageList .toolbarDelimiter{top:49px}.messageList .footerDelimiter{bottom:49px}.messageList .b-content{position:absolute;top:50px;bottom:50px;left:0;right:0;padding:0;overflow-x:hidden;overflow-y:auto;z-index:101;min-width:300px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.messageList .b-content .content{-webkit-overflow-scrolling:touch}.messageList .b-content .listClear{color:#333;text-align:center;padding:10px;font-size:14px;line-height:13px}.messageList .b-content .listEmptyList,.messageList .b-content .listEmptyListLoading,.messageList .b-content .listDragOver,.messageList .b-content .listError,.messageList .b-content .listEmptySearchList{color:#999;text-align:center;padding:60px 10px;font-size:24px;line-height:30px}.messageList .b-content .listEmptyList .e-icon,.messageList .b-content .listEmptyListLoading .e-icon,.messageList .b-content .listDragOver .e-icon,.messageList .b-content .listError .e-icon,.messageList .b-content .listEmptySearchList .e-icon{font-size:24px;line-height:30px}.messageList .b-content .listDragOver{max-height:0;overflow:hidden;padding:0 10px}.messageList .b-content .listDragOver.viewAppendArea{max-height:120px;padding:30px 10px}.messageList .b-content .listDragOver.dragOverEnter{background-color:#e0fdda;color:#333}.messageList .b-content .listError{color:#DA4F49}.messageList .b-content .listSearchDesc{font-size:20px;padding:20px;border-bottom:1px solid #eee}.messageList .b-content .delimiter{display:block;height:1px;background-color:#e5e5e5}.messageList .b-content .messageListItem:last-child{border-bottom:1px solid #e5e5e5}.messageList .b-content .messageListItem:last-child.selected{border-bottom:1px solid #bfd5ef}.messageList .b-content .fullThreadsParent{height:25px;padding:3px 5px;background-color:#f4f4f4;text-align:center}.messageList .b-content .messageListItem{position:relative;height:52px;max-height:60px;font-size:12px;line-height:21px;overflow:hidden;cursor:pointer;margin:0;border:0 solid transparent;z-index:100;background-color:#f9f9f9}.messageList .b-content .messageListItem .delimiter{position:relative;display:block;height:1px;background-color:#999;opacity:.2;filter:alpha(opacity=20)}.messageList .b-content .messageListItem .wrapper{padding:5px 0}.messageList .b-content .messageListItem .sidebarParent{display:inline-block;width:6px;background-color:#eee;float:left;height:100%}.messageList .b-content .messageListItem.e-single-line{height:35px}.messageList .b-content .messageListItem.e-single-line .wrapper{line-height:25px;padding:5px}.messageList .b-content .messageListItem.new{max-height:0}.messageList .b-content .messageListItem.deleted{max-height:0;border-color:transparent!important}.messageList .b-content .messageListItem .checkedParent{display:inline-block;float:left;margin-top:11px;padding:0 8px 0 6px;font-size:14px}.messageList .b-content .messageListItem.e-single-line .checkedParent{margin-top:1px}.messageList .b-content .messageListItem .flagParent{display:inline-block;float:right;padding:0 8px 0 5px}.messageList .b-content .messageListItem.e-single-line .flagParent{float:left;padding:0 8px 0 2px}.messageList .b-content .messageListItem .dateParent{display:inline-block;float:right;position:relative;margin:0 5px;color:#999;font-size:11px}.messageList .b-content .messageListItem .attachmentParent{display:inline-block;float:right;position:relative;margin:2px 8px 0 5px}.messageList .b-content .messageListItem.e-single-line .attachmentParent{float:left;margin:0 5px 0 0}.messageList .b-content .messageListItem .senderParent{display:block;overflow:hidden;text-overflow:ellipsis}.messageList .b-content .messageListItem .threadsCountParent{display:inline;overflow:hidden;background-color:#eee;padding:1px 5px;margin-right:5px;border:1px solid #ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.messageList .b-content .messageListItem .threadsCountParent.lastSelected{background-color:#999;border-color:#999;color:#fff}.messageList .b-content .messageListItem .threadsCountParent:hover{border-color:#666}.messageList .b-content .messageListItem.e-single-line .senderParent{display:inline-block;text-overflow:none;width:200px;float:left;font-weight:400}.messageList .b-content .messageListItem .subjectParent{display:block;overflow:hidden;text-overflow:ellipsis;color:#000}.messageList .b-content .messageListItem .senderParent,.messageList .b-content .messageListItem .subjectParent,.messageList .b-content .messageListItem .dateParent{white-space:nowrap}.messageList .b-content .messageListItem .subjectParent .emptySubjectText{display:none;font-style:italic;color:#999}.messageList .b-content .messageListItem.emptySubject .subjectParent .subject{display:none}.messageList .b-content .messageListItem.emptySubject .subjectParent .emptySubjectText{display:inline}.messageList .b-content .messageListItem .sender,.messageList .b-content .messageListItem .subject{overflow:hidden;text-overflow:ellipsis}.messageList .b-content .messageListItem .attachment{display:none}.messageList .b-content .messageListItem .flagOff,.messageList .b-content .messageListItem .flagOn,.messageList .b-content .messageListItem .flagOnHalf{cursor:pointer;display:inline-block}.messageList .b-content .messageListItem .flagOff{opacity:.5;filter:alpha(opacity=50)}.messageList .b-content .messageListItem .flagOff:hover{opacity:1;filter:alpha(opacity=100)}.messageList .b-content .messageListItem .flagOn,.messageList .b-content .messageListItem .flagOnHalf{display:none;color:orange}.messageList .b-content .messageListItem .replyFlag,.messageList .b-content .messageListItem .forwardFlag{display:none}.messageList .b-content .messageListItem.answered .replyFlag{display:inline-block}.messageList .b-content .messageListItem.forwarded .forwardFlag{display:inline-block}.messageList .b-content .messageListItem.withAttachments .attachment{display:inline-block;color:#666;text-shadow:0 1px 0 #eee}.messageList .b-content .messageListItem.unseen{background-color:#FFFFD9}.messageList .b-content .messageListItem.unseen .sender,.messageList .b-content .messageListItem.unseen .subject{font-weight:700}.messageList .b-content .messageListItem.unseen .sidebarParent{background-color:orange}.messageList .b-content .messageListItem.hasUnseenSubMessage{background-color:#FFFFD9}.messageList .b-content .messageListItem.hasUnseenSubMessage .sidebarParent{background-color:#ffdb99}.messageList .b-content .messageListItem.hasParentMessage{background-color:#ecf0f1}.messageList .b-content .messageListItem.hasParentMessage .sidebarParent{background-color:#bdc3c7}.messageList .b-content .messageListItem.hasParentMessage.unseen{background-color:#dde4e6}.messageList .b-content .messageListItem.hasParentMessage.unseen .sidebarParent{background-color:#6c777f}.messageList .b-content .messageListItem.checked .sidebarParent{background-color:#69a8f5!important}.messageList .b-content .messageListItem.selected{background-color:#DFEFFF;z-index:102}.messageList .b-content .messageListItem.selected .sidebarParent{background-color:#398CF2!important}.messageList .b-content .messageListItem.selected .delimiter{background-color:#398CF2;opacity:.2;filter:alpha(opacity=20)}.messageList .b-content .messageListItem.selected+.messageListItem .delimiter{background-color:#398CF2;opacity:.3;filter:alpha(opacity=30)}.messageList .b-content .messageListItem.hasFlaggedSubMessage .flagOff,.messageList .b-content .messageListItem.hasFlaggedSubMessage .flagOn{display:none}.messageList .b-content .messageListItem.hasFlaggedSubMessage .flagOnHalf{display:inline-block}.messageList .b-content .messageListItem.flagged .flagOff,.messageList .b-content .messageListItem.flagged .flagOnHalf{display:none}.messageList .b-content .messageListItem.flagged .flagOn{display:inline-block}.messageList.hideMessageListCheckbox .checkedParent,.messageList.hideMessageListCheckbox .checkboxCkeckAll{display:none!important}.messageList.hideMessageListCheckbox .sidebarParent{margin-right:10px!important}.messageList .pagenator .page{display:inline-block;color:#999;text-decoration:none;font-size:24px;padding:3px;cursor:pointer}.messageList .pagenator .page:hover .pageNumber{color:#555}.messageList .pagenator .page.current .pageNumber{font-size:28px;color:#333;border-bottom:2px solid #000}.draggablePlace{z-index:10002;color:#fff;background-color:#333;background-color:rgba(0,0,0,.5);padding:4px 10px;min-width:30px;height:20px;cursor:pointer;cursor:move}html.rl-no-preview-pane .messageView{display:none}html.rl-no-preview-pane .messageView.message-selected{display:block}.messageView{z-index:100}.messageView .toolbar{position:absolute;top:0;right:0;left:0;height:30px;padding:10px 0;color:#fff}.messageView .b-content{position:absolute;margin:0;top:58px;bottom:13px;right:8px;left:0;overflow:hidden;border:1px solid #aaa;border-left:0;-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px;background-color:#fff}.messageView .b-content .b-message-view-desc{text-align:center;font-size:24px;line-height:30px;padding-top:120px;color:#999}.messageView .b-content .b-message-view-desc.error{color:#DA4F49}.messageView .b-content .content{-webkit-overflow-scrolling:touch}.messageView .b-content .messageItem{position:absolute;top:0;bottom:0;left:0;right:0;overflow:auto;-webkit-overflow-scrolling:touch;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.messageView .b-content .messageItem .emptySubjectText{display:none;font-style:italic;color:#999}.messageView .b-content .messageItem.emptySubject .emptySubjectText{display:inline}.messageView .b-content .messageItem .buttonUp,.messageView .b-content .messageItem .buttonUnFull,.messageView .b-content .messageItem .buttonFull{display:inline-block;position:fixed;right:30px;top:90px;height:30px;width:30px;text-align:center;vertical-align:middle;line-height:30px;background-color:transparent;background-color:#fff;border:1px solid #333;color:#333;z-index:2;cursor:pointer;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;opacity:.3;filter:alpha(opacity=30)}.messageView .b-content .messageItem .buttonUp:hover,.messageView .b-content .messageItem .buttonUnFull:hover,.messageView .b-content .messageItem .buttonFull:hover{opacity:.8;filter:alpha(opacity=80);border-color:#000;background-color:#888;color:#fff}.messageView .b-content .messageItem .buttonUp{right:70px;z-index:0}.messageView .b-content .messageItem .buttonUnFull{display:none}.messageView .b-content .messageItem .messageItemHeader{position:relative;padding:10px;background-color:#f8f8f8;border-top:0;border-bottom:1px solid #ddd;z-index:1}.messageView .b-content .messageItem .messageItemHeader .fromPic{display:inline-block;width:50px;height:50px;float:left;padding:2px;margin:0 5px 0 0;background:#fff;border:1px solid #ccc;border-radius:10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.messageView .b-content .messageItem .messageItemHeader .subjectParent{font-size:16px;font-weight:700;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;margin-left:3px}.messageView .b-content .messageItem .messageItemHeader .senderParent{margin-top:10px}.messageView .b-content .messageItem .messageItemHeader .messageButtons{margin-top:5px}.messageView .b-content .messageItem .messageItemHeader .informationShort{margin-left:15px}.messageView .b-content .messageItem .messageItemHeader .informationShort a{color:#369;text-decoration:underline;cursor:pointer}.messageView .b-content .messageItem .messageItemHeader .informationFull{margin-top:10px;border:1px solid #ddd;background-color:#fff;border-radius:5px;padding:10px 15px}.messageView .b-content .messageItem .loading{text-align:center;font-size:24px;color:grey;padding-top:50px}.messageView .b-content .messageItem .line-loading{height:0}.messageView .b-content .messageItem .showImages{cursor:pointer;background-color:#eee;padding:10px 15px;border-bottom:1px solid #ccc}.messageView .b-content .messageItem .attachmentsPlace{padding:10px}.messageView .b-content .messageItem .attachmentsPlace .attachmentList{margin:0}.messageView .b-content .messageItem .attachmentsPlace .attachmentList .attachmentItem{display:inline-block;margin:5px;padding:5px;max-width:170px;min-width:60px;overflow:hidden;cursor:pointer;list-style:none;line-height:24px;border:2px solid grey;background-color:#fff;box-shadow:1px 1px 5px #ccc;box-shadow:1px 1px 5px rgba(0,0,0,.1);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.messageView .b-content .messageItem .attachmentsPlace .attachmentList .attachmentItem .attachmentIcon{font-size:23px;width:23px;height:23px}.messageView .b-content .messageItem .attachmentsPlace .attachmentList .attachmentItem .attachmentPreview{color:#999;margin:0 5px}.messageView .b-content .messageItem .attachmentsPlace .attachmentList .attachmentItem .attachmentPreview:hover{color:#333}.messageView .b-content .messageItem .rlBlockquoteSwitcher{background-color:#eee;border:1px solid #999;display:inline-block;width:40px;height:18px;text-align:center;cursor:pointer;margin:10px 0;opacity:.5;filter:alpha(opacity=50)}.messageView .b-content .messageItem .rlBlockquoteSwitcher:hover{opacity:1;filter:alpha(opacity=100)}.messageView .b-content .messageItem .bodyText{color:#000;font-family:arial,sans-serif}.messageView .b-content .messageItem .bodyText .b-text-part a{color:#00f;text-decoration:underline}.messageView .b-content .messageItem .bodyText .b-text-part a:visited{color:#609}.messageView .b-content .messageItem .bodyText .b-text-part a:active{color:red}.messageView .b-content .messageItem .bodyText .b-text-part table{border-collapse:separate}.messageView .b-content .messageItem .bodyText .b-text-part blockquote{border-left:2px solid #000;margin:0;padding:0 10px}.messageView .b-content .messageItem .bodyText .b-text-part .rl-bq-switcher.hidden-bq{display:none}.messageView .b-content .messageItem .bodyText .b-text-part.rtl-text-part{direction:rtl}.messageView .b-content .messageItem .bodyText .b-text-part.html .mailso-body{margin:15px}.messageView .b-content .messageItem .bodyText .b-text-part.plain{padding:15px}.messageView .b-content .messageItem .bodyText .b-text-part.plain pre{margin:0;padding:0;font-family:arial,sans-serif;background:#fff;border:0;white-space:normal}.messageView .b-content .messageItem .bodyText .b-text-part.plain blockquote{border-left:2px solid #00f;color:#00f}.messageView .b-content .messageItem .bodyText .b-text-part.plain blockquote blockquote{border-left:2px solid green;color:green}.messageView .b-content .messageItem .bodyText .b-text-part.plain blockquote blockquote blockquote{border-left:2px solid red;color:red}html.rl-no-preview-pane .messageView .toolbar{padding-left:1px}html.rl-no-preview-pane .messageView .b-content{top:50px;bottom:5px;right:5px;border:1px solid #aaa;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.3);-moz-box-shadow:0 2px 8px rgba(0,0,0,.3);box-shadow:0 2px 8px rgba(0,0,0,.3);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}html.rl-no-preview-pane .messageView .b-content .buttonUp,html.rl-no-preview-pane .messageView .b-content .buttonUnFull,html.rl-no-preview-pane .messageView .b-content .buttonFull{top:70px}html.cssanimations.rl-anim .line-loading{height:5px!important}html.rl-message-fullscreen #rl-left,html.rl-message-fullscreen #rl-bottom{display:none!important}html.rl-message-fullscreen #rl-right .RL-MailMessageList,html.rl-message-fullscreen #rl-right .RL-SettingsPane,html.rl-message-fullscreen #rl-right .RL-SystemDropDown,html.rl-message-fullscreen #rl-right .RL-MailMessageView .messageView .toolbar{display:none!important}html.rl-message-fullscreen .messageView .b-content{position:fixed;margin:5px;top:0;left:0;right:0;bottom:0;z-index:10000}html.rl-message-fullscreen .messageView .b-content .buttonUp,html.rl-message-fullscreen .messageView .b-content .buttonUnFull{display:inline-block;top:36px}html.rl-message-fullscreen .messageView .b-content .buttonFull{display:none}.b-contacts-content.modal{position:absolute;right:0;top:0;bottom:0;left:0;width:900px;min-height:300px;max-height:700px;margin:auto}.b-contacts-content.modal .modal-body{overflow:auto;height:100%;background-color:#f5f5f5;padding:0}.b-contacts-content.modal .b-header-toolbar{height:40px;background-color:#aaa;color:#fff;background-color:#333;background-color:rgba(0,0,0,.8)!important}.b-contacts-content.modal .b-header-toolbar .close{color:#fff;opacity:1;filter:alpha(opacity=100)}.b-contacts-content.modal .b-header-toolbar .btn{margin-top:4px}.b-contacts-content.modal .b-header-toolbar .button-new-message{margin-left:8px}.b-contacts-content.modal .b-header-toolbar .button-delete{margin-left:8px}.b-contacts-content.modal .b-list-toopbar{padding:0;height:45px;text-align:center;width:250px;-webkit-box-shadow:inset 0 -1px 0 #ccc;-moz-box-shadow:inset 0 -1px 0 #ccc;box-shadow:inset 0 -1px 0 #ccc}.b-contacts-content.modal .b-list-toopbar .e-search{margin-top:7px}.b-contacts-content.modal .b-list-content{position:absolute;top:45px;bottom:60px;left:0;width:250px;overflow:hidden;overflow-y:auto}.b-contacts-content.modal .b-list-content .content{-webkit-overflow-scrolling:touch}.b-contacts-content.modal .b-list-content .listClear{color:#333;text-align:center;padding:10px;font-size:14px;line-height:13px;background-color:#fff}.b-contacts-content.modal .b-list-content .listEmptyList,.b-contacts-content.modal .b-list-content .listEmptyListLoading,.b-contacts-content.modal .b-list-content .listEmptySearchList{color:#999;text-align:center;padding:60px 10px;font-size:24px;line-height:30px}.b-contacts-content.modal .b-list-content.hideContactListCheckbox .checkedParent,.b-contacts-content.modal .b-list-content.hideContactListCheckbox .checkboxCkeckAll{display:none!important}.b-contacts-content.modal .b-list-content.hideContactListCheckbox .sidebarParent{margin-right:10px!important}.b-contacts-content.modal .b-list-content .e-contact-foreach{border-bottom:1px solid #ddd}.b-contacts-content.modal .b-list-content .e-contact-item{position:relative;height:45px;max-height:45px;line-height:45px;overflow:hidden;cursor:pointer;margin:0;border:0 solid transparent;z-index:100}.b-contacts-content.modal .b-list-content .e-contact-item .delimiter{position:relative;display:block;height:1px;background-color:#999;opacity:.2;filter:alpha(opacity=20)}.b-contacts-content.modal .b-list-content .e-contact-item .wrapper{padding:0}.b-contacts-content.modal .b-list-content .e-contact-item .sidebarParent{display:inline-block;width:6px;background-color:#eee;float:left;height:100%}.b-contacts-content.modal .b-list-content .e-contact-item.deleted{max-height:0;border-color:transparent!important}.b-contacts-content.modal .b-list-content .e-contact-item .checkedParent{display:inline-block;float:left;padding:0 8px 0 6px}.b-contacts-content.modal .b-list-content .e-contact-item .nameParent{display:block;overflow:hidden;text-overflow:ellipsis;color:#333;font-size:16px}.b-contacts-content.modal .b-list-content .e-contact-item .nameParent,.b-contacts-content.modal .b-list-content .e-contact-item .emailParent{white-space:nowrap}.b-contacts-content.modal .b-list-content .e-contact-item .displayName,.b-contacts-content.modal .b-list-content .e-contact-item .displayEmail{overflow:hidden;text-overflow:ellipsis}.b-contacts-content.modal .b-list-content .e-contact-item .displayImg{display:inline-block;float:right;position:relative;margin:0 5px}.b-contacts-content.modal .b-list-content .e-contact-item.checked{z-index:101}.b-contacts-content.modal .b-list-content .e-contact-item.checked .sidebarParent{background-color:#69A8F5}.b-contacts-content.modal .b-list-content .e-contact-item.selected{background-color:#fff;z-index:102}.b-contacts-content.modal .b-list-content .e-contact-item.selected .sidebarParent{background-color:#398CF2}.b-contacts-content.modal .b-view-content{position:absolute;top:0;bottom:60px;left:250px;right:0;overflow:hidden;overflow-y:auto;background-color:#fff;border-left:1px solid #ddd}.b-contacts-content.modal .b-view-content .content{-webkit-overflow-scrolling:touch}.b-contacts-content.modal .b-view-content .b-contact-view-desc{text-align:center;font-size:24px;line-height:30px;padding-top:120px;color:#999}.b-contacts-content.modal .b-view-content .top-part{margin-top:20px}.b-contacts-content.modal .b-view-content .top-part .control-label{text-align:center}.b-contacts-content.modal .b-view-content .image-wrapper{margin-left:30px;border-radius:10px}.b-contacts-content.modal .b-view-content .image-wrapper img{border-radius:10px}.b-contacts-content.modal .b-view-content .top-row{padding:10px 0;height:30px}.b-contacts-content.modal .b-view-content .contactEmptyValueClick,.b-contacts-content.modal .b-view-content .contactValueClick,.b-contacts-content.modal .b-view-content .contactValueInput{display:inline-block;font-size:24px;line-height:28px;height:28px}.b-contacts-content.modal .b-view-content .contactEmptyValueClick,.b-contacts-content.modal .b-view-content .contactValueClick{color:#ddd;cursor:pointer;margin:5px 0 0 7px}.b-contacts-content.modal .b-view-content .contactValueInput{padding-left:6px}.b-contacts-content.modal .b-view-content .contactEmptyValueClick{border-bottom:1px dashed #ddd}.b-contacts-content.modal .b-view-content .contactValueClick{color:#555;border-bottom:11px dashed transparent}.b-contacts-content.modal .b-view-content .contactValueClick:hover{color:#000;border-bottom:1px dashed #000}.b-contacts-content.modal .b-view-content .hasError .contactValueClick,.b-contacts-content.modal .b-view-content .hasError .contactValueInput{color:#ee5f5b;border:1px solid #ee5f5b}.b-contacts-content.modal .b-view-content .button-save-contact{position:absolute;bottom:20px;right:20px}.b-contacts-content .e-contact-item{position:relative;height:55px;max-height:60px;line-height:22px;overflow:hidden;cursor:pointer;margin:0;border:0 solid transparent;z-index:100}.b-compose.modal{width:850px;margin:10px auto}.b-compose.modal .modal-body{overflow:auto;padding:0}.b-compose .b-header-toolbar{height:40px;background-color:#aaa;color:#fff;background-color:#333;background-color:rgba(0,0,0,.8)!important}.b-compose .b-header-toolbar .close{color:#fff;opacity:1;filter:alpha(opacity=100)}.b-compose .b-header-toolbar .btn.disable.button-delete{visibility:hidden}.b-compose .b-header-toolbar .button-save,.b-compose .b-header-toolbar .button-delete,.b-compose .b-header-toolbar .saved-text{margin-left:8px}.b-compose .b-header-toolbar .disable.button-delete{margin-left:0}.b-compose .b-header{padding:10px;border-bottom:1px solid #333;background-color:#eee;color:#333}.b-compose .b-header .e-row{line-height:30px}.b-compose .b-header .e-label{text-align:right;width:1%;min-width:70px;padding:6px 10px}.b-compose .b-header .e-value{padding:2px 0}.b-compose .b-header .e-value textarea,.b-compose .b-header .e-value input[type=text]{width:98%}.b-compose .b-header .e-value textarea{height:40px}.b-compose .b-header .e-value .select2-container{width:100%}.b-compose .b-header .error-desc{color:red}.b-compose .b-header .b-appachments .b-attacment{display:inline-block;line-height:20px}.b-compose .b-header .b-appachments .b-attacment-in-process{display:inline-block;line-height:20px}.b-compose .b-header .b-appachments .b-attacment-in-process .uploading{display:none;padding-right:5px}.b-compose .b-header .b-appachments .b-attacment-in-process.uploading .uploading{display:inline}.b-compose .b-header .b-appachments .b-attacment-in-process .upload-progress{font-weight:700}.b-compose .b-header .b-appachments .b-attacment-in-process.error .namedStr{color:#888}.b-compose .b-header .b-appachments .b-attacment-in-process .error{color:red}.b-compose .b-header .b-appachments .b-attacment-in-process .close{float:left;padding-right:13px}.b-compose .b-attachment-button{display:inline-block}.b-compose .b-attachment-place{position:absolute;height:120px;border:2px #777 dashed;line-height:119px;text-align:center;background-color:#fff;z-index:300;left:20px;right:20px;font-size:24px}.b-compose .b-attachment-place.drag-and-drop-over{background:#777;color:#fff}.b-compose .editorTextArea,.b-compose .editorHtmlArea{background:#fff;color:#000;font-family:Arial,Verdana,Geneva,sans-serif;font-size:14px}.b-compose .editorTextArea table,.b-compose .editorHtmlArea table{border-collapse:separate}.b-compose .editorTextArea blockquote,.b-compose .editorHtmlArea blockquote{border:0;border-left:solid 2px #444;margin-left:5px;margin:5px 0;padding-left:5px}.b-admin-left .b-toolbar{position:absolute;top:0;right:0;left:0;height:34px;padding:8px 0 0 8px}.b-admin-left .b-content{position:absolute;top:68px;bottom:8px;left:0;right:0;overflow:hidden}.b-admin-left .b-content .content{-webkit-overflow-scrolling:touch}.b-admin-menu .e-item{overflow:hidden;text-decoration:none;outline:0}.b-admin-menu .e-link{position:relative;display:block;height:30px;line-height:29px;cursor:pointer;font-size:18px;z-index:1;cursor:default;background-color:transparent;color:#888;padding:4px 10px;outline:0;text-decoration:none}.b-admin-menu .e-item.selectable .e-link{cursor:pointer}.b-admin-menu .e-item.selectable:hover .e-link,.b-admin-menu .e-item.selectable.selected .e-link{background-color:#555;color:#fff}.b-admin-right .b-toolbar{position:absolute;top:0;right:0;left:0;height:34px;padding:8px;color:#fff}.b-admin-right .b-content{position:absolute;top:58px;bottom:8px;left:0;right:8px;overflow-y:auto;z-index:2;background-color:#fff;border:1px solid #aaa;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.3);-moz-box-shadow:0 2px 8px rgba(0,0,0,.3);box-shadow:0 2px 8px rgba(0,0,0,.3);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.b-admin-right .b-content .content{-webkit-overflow-scrolling:touch}.b-admin-right .b-settings-content{padding:20px}.b-admin-domains .process-place{width:600px;padding:14px 0;text-align:center;visibility:hidden}.b-admin-domains-list-table{width:600px}.b-admin-domains-list-table .e-item .e-action{cursor:pointer}.b-admin-domains-list-table .e-item .domain-name{display:inline-block;word-break:break-all;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.b-admin-domains-list-table .e-item.disabled .domain-name{color:#bbb}.b-admin-domains-list-table .e-item .button-delete{margin-right:15px;visibility:hidden;opacity:0;filter:alpha(opacity=0)}.b-admin-domains-list-table .e-item .delete-access.button-delete{visibility:visible;margin-right:0;opacity:1;filter:alpha(opacity=100)}.b-admin-domains-list-table .e-item .delete-domain,.b-admin-domains-list-table .e-item .disable-domain{cursor:pointer;opacity:.5;filter:alpha(opacity=50)}.b-admin-domains-list-table .e-item.disabled .disable-domain{opacity:.5;filter:alpha(opacity=50)}.b-admin-domains-list-table .e-item .delete-domain:hover,.b-admin-domains-list-table .e-item .disable-domain:hover{opacity:1;filter:alpha(opacity=100)}.b-domain-content.modal{width:645px}.b-domain-content .modal-header{background-color:#fff}.b-domain-content .modal-body{position:relative;overflow:hidden;width:1300px;height:390px}.b-domain-content.domain-edit .modal-body{height:350px}.b-domain-content.domain-white-list-page .modal-body{left:-640px}.b-domain-content .error-desc{color:red;margin-left:10px}.b-domain-content .testing-done .imap-header,.b-domain-content .testing-done .smtp-header{color:green;font-weight:700}.b-domain-content .testing-error .imap-header,.b-domain-content .testing-error .smtp-header{color:red}.b-admin-packages .alert{width:650px}.b-admin-packages .process-place{visibility:hidden}.b-admin-packages-list-table{width:700px}.b-admin-packages-list-table .e-item .package-name.core{font-weight:700}.b-admin-packages-list-table .e-item .package-desc{color:#999;font-size:12px}.b-admin-packages-list-table .e-item .e-action{cursor:pointer}.b-admin-packages-list-table .e-item .package-release-parent,.b-admin-packages-list-table .e-item .package-actions-parent{text-align:center}.b-admin-packages-list-table .e-item .package-actions-parent{vertical-align:middle}.b-admin-plugins .process-place{visibility:hidden}.b-admin-plugins-list-table.disabled{opacity:.5;filter:alpha(opacity=50);background-color:#eee}.b-admin-plugins-list-table .e-item .e-action{cursor:pointer}.b-admin-plugins-list-table .e-item.disabled .plugin-name{color:#bbb}.b-admin-plugins-list-table .e-item.disabled .disable-plugin{opacity:.5;filter:alpha(opacity=50)}.b-admin-plugin-property .help-block{margin-bottom:5px}.b-plugin-content.modal{width:660px}.b-plugin-content.modal .modal-body{overflow:auto}.b-plugin-content .modal-header{background-color:#fff}.b-plugin-content .information{display:inline-block;background-color:#ddd;border-radius:10px;cursor:pointer;height:25px;width:30px;text-align:center;padding-top:5px}.b-plugin-content textarea{width:400px;height:50px}.popups .b-activate-content{width:700px}.popups .b-activate-content .modal-header{background-color:#fff}.popups .b-activate-content .help-inline{padding-left:0}.b-settins-left .b-toolbar{position:absolute;top:0;right:0;left:0;height:34px;padding:8px 0 0 8px}.b-settins-left .b-content{position:absolute;top:68px;bottom:8px;left:0;right:0;overflow:hidden}.b-settins-left .b-content .content{-webkit-overflow-scrolling:touch}.b-settings-menu .e-item{overflow:hidden;text-decoration:none;outline:0}.b-settings-menu .e-link{position:relative;display:block;height:30px;line-height:29px;font-size:18px;z-index:1;cursor:default;background-color:transparent;color:#888;padding:4px 10px;outline:0;text-decoration:none}.b-settings-menu .e-item.selectable .e-link{cursor:pointer}.b-settings-menu .e-item.selectable:hover .e-link,.b-settings-menu .e-item.selectable.selected .e-link{background-color:#555;color:#fff}.b-settins-right .b-toolbar{position:absolute;top:0;right:0;left:0;height:34px;padding:8px 5px;color:#fff}.b-settins-right .b-content{position:absolute;top:58px;bottom:8px;left:0;right:8px;overflow-y:auto;z-index:2;background-color:#fff;border:1px solid #aaa;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.3);-moz-box-shadow:0 2px 8px rgba(0,0,0,.3);box-shadow:0 2px 8px rgba(0,0,0,.3);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.b-settins-right .b-content .content{-webkit-overflow-scrolling:touch}.b-settins-right .b-settings-content{padding:20px}.b-settings-general .notification-desc-denied{color:#999;display:none}.b-settings-general .denied-by-browser .notification-desc-denied{display:inline}.b-settings-general .denied-by-browser .notification-desc{color:#999}.b-settings-general .flag-selector{padding-top:5px}.b-settings-general .flag-name{border-bottom:1px dashed #555}.b-settings-accounts .process-place{text-align:center;width:600px;padding:14px 0}.b-settings-accounts .list-table{width:600px}.b-settings-accounts .list-table td{padding:4px 8px;line-height:30px}.b-settings-accounts .list-table .account-name{display:inline-block;word-break:break-all;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-left:7px;line-height:22px;cursor:default}.b-settings-accounts .account-item .button-delete{margin-right:15px;margin-top:5px;visibility:hidden;opacity:0;filter:alpha(opacity=0)}.b-settings-accounts .account-item .delete-access.button-delete{visibility:visible;margin-right:0;opacity:1;filter:alpha(opacity=100)}.b-settings-accounts .account-item .delete-account{cursor:pointer;opacity:.5;filter:alpha(opacity=50)}.b-settings-folders.ignore-folder-subscribe .subscribe-folder,.b-settings-folders.ignore-folder-subscribe .unsubscribe-folder{display:none}.b-settings-folders .process-place{text-align:center;width:600px;padding:14px 0}.b-settings-folders .folders-list-error{width:550px;margin:10px 0}.b-settings-folders .list-table{width:600px}.b-settings-folders .list-table .e-action{cursor:pointer}.b-settings-folders .list-table td{padding:4px 8px;line-height:30px}.b-settings-folders .list-table .folder-padding{display:inline-block;width:0}.b-settings-folders .list-table .folder-name{display:inline-block;word-break:break-all;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-left:7px;line-height:22px;cursor:default}.b-settings-folders .list-table .folder-system-name{display:inline-block;line-height:22px;color:#999;cursor:default}.b-settings-folders .list-table .folder-name.can-be-edited:hover{border-bottom:1px dashed #333;cursor:pointer}.b-settings-folders .list-table .folder-name-input{border-width:1px;margin-bottom:0}.b-settings-folders .folder-item .button-delete{margin-right:15px;margin-top:5px;visibility:hidden;opacity:0;filter:alpha(opacity=0)}.b-settings-folders .folder-item .delete-access.button-delete{visibility:visible;margin-right:0;opacity:1;filter:alpha(opacity=100)}.b-settings-folders .folder-item .delete-folder,.b-settings-folders .folder-item .subscribe-folder,.b-settings-folders .folder-item .unsubscribe-folder{cursor:pointer;opacity:.6;filter:alpha(opacity=60)}.b-settings-folders .folder-item .unsubscribe-folder{opacity:.25;filter:alpha(opacity=25)}.b-settings-folders .folder-padding.deep-1{width:25px}.b-settings-folders .folder-padding.deep-2{width:40px}.b-settings-folders .folder-padding.deep-3{width:55px}.b-settings-folders .folder-padding.deep-4{width:70px}.b-settings-folders .folder-padding.deep-5{width:85px}.b-themes-list .e-item{display:inline-block;border:2px solid transparent;cursor:pointer;color:#000;background-color:#fff;padding:16px;margin:5px}.b-themes-list .e-item:hover{border:2px solid grey}.b-themes-list .e-item.selected{background-color:#eee;border:2px solid #000}.b-themes-list .e-item .e-image{width:100px;height:100px;border:1px solid #ddd}@keyframes highlight-folder-row{0%{transform:scale(1)}50%{transform:scale(1.1)}100%{transform:scale(1)}}@-moz-keyframes highlight-folder-row{0%{-moz-transform:scale(1)}50%{-moz-transform:scale(1.1)}100%{-moz-transform:scale(1)}}@-webkit-keyframes highlight-folder-row{0%{-webkit-transform:scale(1)}50%{-webkit-transform:scale(1.1)}100%{-webkit-transform:scale(1)}}@-webkit-keyframes textLoadingAnimationKeyFrame{0%{opacity:1}33%{opacity:0}100%{opacity:1}}@-moz-keyframes textLoadingAnimationKeyFrame{0%{opacity:1}33%{opacity:0}100%{opacity:1}}@keyframes textLoadingAnimationKeyFrame{0%{opacity:1}33%{opacity:0}100%{opacity:1}}@-webkit-keyframes animate-stripes{0%{background-position:0 0}100%{background-position:60px 0}}@-moz-keyframes animate-stripes{0%{background-position:0 0}100%{background-position:60px 0}}@keyframes animate-stripes{0%{background-position:0 0}100%{background-position:60px 0}}.rl-anim.csstransitions.rl-anim-full .rl-settings-view-model{-webkit-transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease}.rl-anim.csstransitions.rl-anim-full .rl-settings-view-model .rl-animation-margin-sub1{-webkit-transition:margin-left .5s ease;-moz-transition:margin-left .5s ease;-o-transition:margin-left .5s ease;transition:margin-left .5s ease}.rl-anim.csstransitions.rl-anim-full .rl-settings-view-model .rl-animation-margin-sub2{-webkit-transition:margin-left .5s ease;-moz-transition:margin-left .5s ease;-o-transition:margin-left .5s ease;transition:margin-left .5s ease}.rl-anim.csstransitions.rl-anim-full .rl-settings-view-model.rl-animation-margin{margin-left:5px;opacity:.5}.rl-anim.csstransitions.rl-anim-full .rl-settings-view-model.rl-animation-margin .rl-animation-margin-sub1{margin-left:12px}.rl-anim.csstransitions.rl-anim-full .rl-settings-view-model.rl-animation-margin .rl-animation-margin-sub2{margin-left:17px}.rl-anim.rgba.cssanimations.backgroundsize .e-strip-animation{-webkit-background-size:60px 60px;-moz-background-size:60px 60px;background-size:60px 60px;background-image:-webkit-linear-gradient(135deg,rgba(0,0,0,.1) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.1) 50%,rgba(0,0,0,.1) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(135deg,rgba(0,0,0,.1) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.1) 50%,rgba(0,0,0,.1) 75%,transparent 75%,transparent);background-image:-ms-linear-gradient(135deg,rgba(0,0,0,.1) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.1) 50%,rgba(0,0,0,.1) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(135deg,rgba(0,0,0,.1) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.1) 50%,rgba(0,0,0,.1) 75%,transparent 75%,transparent);background-image:linear-gradient(135deg,rgba(0,0,0,.1) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.1) 50%,rgba(0,0,0,.1) 75%,transparent 75%,transparent);-webkit-animation:animate-stripes 2s linear infinite;-moz-animation:animate-stripes 2s linear infinite;animation:animate-stripes 2s linear infinite}.rl-anim.csstransitions .b-settings-folders .folder-item .button-delete{-webkit-transition:all .2s linear;-moz-transition:all .2s linear;-o-transition:all .2s linear;transition:all .2s linear}.rl-anim.csstransitions .b-settings-accounts .account-item .button-delete{-webkit-transition:all .2s linear;-moz-transition:all .2s linear;-o-transition:all .2s linear;transition:all .2s linear}.rl-anim.csstransitions .b-admin-domains .e-item .button-delete{-webkit-transition:all .2s linear;-moz-transition:all .2s linear;-o-transition:all .2s linear;transition:all .2s linear}.rl-anim.csstransitions .b-compose .button-delete{-webkit-transition:margin-left .2s linear;-moz-transition:margin-left .2s linear;-o-transition:margin-left .2s linear;transition:margin-left .2s linear}.rl-anim.cssanimations .b-folders .e-item .anim-action-class{-webkit-animation:highlight-folder-row .5s linear;-moz-animation:highlight-folder-row .5s linear;animation:highlight-folder-row .5s linear}.rl-anim.csstransitions .messageList .messageListItem{-webkit-transition:max-height 400ms ease;-moz-transition:max-height 400ms ease;-o-transition:max-height 400ms ease;transition:max-height 400ms ease}.rl-anim.csstransitions .messageList .listDragOver{-webkit-transition:all 400ms ease;-moz-transition:all 400ms ease;-o-transition:all 400ms ease;transition:all 400ms ease}.rl-anim.csstransitions .b-list-content .e-contact-item{-webkit-transition:max-height 400ms ease;-moz-transition:max-height 400ms ease;-o-transition:max-height 400ms ease;transition:max-height 400ms ease}.rl-anim.csstransitions .modal.b-domain-content .modal-body{-webkit-transition:left 500ms ease;-moz-transition:left 500ms ease;-o-transition:left 500ms ease;transition:left 500ms ease}.rl-anim.csstransitions .modal-open .popups .modal{-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-o-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transition:.3s all cubic-bezier(0.250,.460,.450,.940);-moz-transition:.3s all cubic-bezier(0.250,.460,.450,.940);-o-transition:.3s all cubic-bezier(0.250,.460,.450,.940);transition:.3s all cubic-bezier(0.250,.460,.450,.940);-webkit-transform:scale(0.9);-moz-transform:scale(0.9);-ms-transform:scale(0.9);-o-transform:scale(0.9);transform:scale(0.9)}.rl-anim .modal-open .popups .popup-active.modal{-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none}.rl-anim.cssanimations .b-compose.loading .b-header-toolbar{-webkit-background-size:60px 60px;-moz-background-size:60px 60px;background-size:60px 60px;background-image:-webkit-linear-gradient(135deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(135deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);background-image:-ms-linear-gradient(135deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(135deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);background-image:linear-gradient(135deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);-webkit-animation:animate-stripes 2s linear infinite;-moz-animation:animate-stripes 2s linear infinite;animation:animate-stripes 2s linear infinite}.textLoadingAnimationD1,.textLoadingAnimationD2,.textLoadingAnimationD3{-webkit-animation:textLoadingAnimationKeyFrame 1s linear infinite 0s;-moz-animation:textLoadingAnimationKeyFrame 1s linear infinite 0s;animation:textLoadingAnimationKeyFrame 1s linear infinite 0s}.textLoadingAnimationD2{-webkit-animation-delay:.3s;-moz-animation-delay:.3s;animation-delay:.3s}.textLoadingAnimationD3{-webkit-animation-delay:.6s;-moz-animation-delay:.6s;animation-delay:.6s}.editorToolbar{position:relative;height:20px;margin-top:10px;line-height:19px}.editorToolbar.editorHideToolbar .editorToolbarButtom{display:none}.editorToolbar .editorSwitcher{display:inline-block;vertical-align:middle}.editorToolbar .editorToolbarButtom{display:inline-block;width:16px;height:16px;padding:3px}.editorToolbar .editorToolbarButtom a{display:inline-block;border:0;margin:0;padding:0;width:16px;height:16px;cursor:default;background:url(images/editor.png)}.editorToolbar .editorToolbarButtom a.bold{background-position:0 0}.editorToolbar .editorToolbarButtom a.italic{background-position:-16px 0}.editorToolbar .editorToolbarButtom a.underline{background-position:-32px 0}.editorToolbar .editorToolbarButtom a.strikethrough{background-position:-48px 0}.editorToolbar .editorToolbarButtom a.link{background-position:-64px 0}.editorToolbar .editorToolbarButtom a.unlink{background-position:-80px 0}.editorToolbar .editorToolbarButtom a.orderedlist{background-position:-96px 0}.editorToolbar .editorToolbarButtom a.unorderedlist{background-position:-112px 0}.editorToolbar .editorToolbarButtom a.image{background-position:-128px 0}.editorToolbar .editorToolbarButtom a.h1{background-position:0 -16px}.editorToolbar .editorToolbarButtom a.h2{background-position:-16px -16px}.editorToolbar .editorToolbarButtom a.h3{background-position:-32px -16px}.editorToolbar .editorToolbarButtom a.h4{background-position:-48px -16px}.editorToolbar .editorToolbarButtom a.h5{background-position:-64px -16px}.editorToolbar .editorToolbarButtom a.h6{background-position:-80px -16px}.editorToolbar .editorToolbarButtom a.subscript{background-position:-96px -16px}.editorToolbar .editorToolbarButtom a.superscript{background-position:-112px -16px}.editorToolbar .editorToolbarButtom a.indent{background-position:-128px -16px}.editorToolbar .editorToolbarButtom a.outdent{background-position:-144px -16px}.editorToolbar .editorToolbarButtom a.horizontalrule{background-position:-160px -16px}.editorToolbar .editorToolbarButtom a.p{background-position:-176px -16px}.editorToolbar .editorToolbarButtom a.justifyleft{background-position:0 -32px}.editorToolbar .editorToolbarButtom a.justifycenter{background-position:-16px -32px}.editorToolbar .editorToolbarButtom a.justifyright{background-position:-32px -32px}.editorToolbar .editorToolbarButtom a.increasefontsize{background-position:-48px -32px}.editorToolbar .editorToolbarButtom a.decreasefontsize{background-position:-64px -32px}.editorToolbar .editorToolbarButtom a.forecolor{background-position:-80px -32px}.editorToolbar .editorToolbarButtom a.backcolor{background-position:-80px -32px}.editorToolbar .editorToolbarButtom a.removeformat{background-position:-144px 0}.textAreaParent{padding:0}.textAreaParent .editorHtmlArea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:0!important;overflow:auto;overflow-y:scroll;font-family:arial,sans-serif;font-size:13px;line-height:16px;margin:0;padding:8px}.textAreaParent .editorHtmlArea ul{padding-left:40px}.textAreaParent .editorHtmlArea ul li{list-style-type:disc!important}.textAreaParent .editorHtmlArea ol{padding-left:40px}.textAreaParent .editorHtmlArea ol li{list-style-type:decimal!important}.textAreaParent .editorHtmlArea blockquote{border-left:solid 2px #444;margin-left:5px;padding-left:5px}.textAreaParent .editorHtmlArea img{vertical-align:bottom}.textAreaParent .editorHtmlArea.editorDragOver{background:#ffffef}.textAreaParent .editorTextArea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;border:0!important;width:100%;line-height:16px;margin:0;padding:8px;overflow:auto;overflow-y:scroll}.editorColorPicker .editorCpColors{float:left;margin:0;clear:both;width:128px;border:1px solid #000;backgroud:#000}.editorColorPicker .editorCpColors .editorCpColor{border:1px solid #fff;float:left;width:14px;height:14px}.editorSwitcher{color:#369;text-decoration:underline;cursor:pointer;float:right;padding-bottom:6px}.editorFontStylePicker .editorFpFonts{padding:5px;border:1px solid #000;background-color:#fff}.editorFontStylePicker .editorFpFonts .editorFpFont{padding:5px} \ No newline at end of file +* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}/*! normalize.css 2012-03-11T12:53 UTC - http://github.com/necolas/normalize.css */article,aside,details,figcaption,figure,footer,header,hgroup,nav,section,summary{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}html,button,input,select,textarea{font-family:sans-serif}body{margin:0}a:focus{outline:thin dotted}a:hover,a:active{outline:0}h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em;margin:.83em 0}h3{font-size:1.17em;margin:1em 0}h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.75em;margin:2.33em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:1em 40px}dfn{font-style:italic}mark{background:#ff0;color:#000}p,pre{margin:1em 0}pre,code,kbd,samp{font-family:monospace,serif;_font-family:'courier new',monospace;font-size:1em}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word}q{quotes:none}q:before,q:after{content:'';content:none}small{font-size:75%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,menu,ol,ul{margin:1em 0}dd{margin:0 0 0 40px}menu,ol,ul{padding:0 0 0 40px}nav ul,nav ol{list-style:none;list-style-image:none}img{border:0;-ms-interpolation-mode:bicubic}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0;white-space:normal;*margin-left:-7px}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0;*height:13px;*width:13px}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-decoration,input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@font-face{font-family:icomoon;src:url(fonts/icomoon.eot);src:url(fonts/icomoon.eot?#iefix) format('embedded-opentype'),url(fonts/icomoon.woff) format('woff'),url(fonts/icomoon.ttf) format('truetype'),url(fonts/icomoon.svg#icomoon) format('svg');font-weight:400;font-style:normal}[data-icon]:before{font-family:icomoon;content:attr(data-icon);speak:none;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased}.icon-paperplane,.icon-reply,.icon-reply-all,.icon-forward,.icon-search,.icon-add-to-list,.icon-info,.icon-arrow-right,.icon-arrow-down,.icon-ellipsis,.icon-pencil,.icon-image,.icon-music,.icon-film,.icon-print,.icon-calendar,.icon-key,.icon-cog,.icon-fire,.icon-rocket,.icon-checkbox-checked,.icon-checkbox-unchecked,.icon-checkbox-partial,.icon-radio-checked,.icon-radio-unchecked,.icon-google,.icon-google-plus,.icon-facebook,.icon-twitter,.icon-youtube,.icon-file-pdf,.icon-file-word,.icon-file-excel,.icon-file-powerpoint,.icon-file-xml,.icon-file-css,.icon-warning,.icon-switch,.icon-wrench,.icon-remove,.icon-ok,.icon-plus,.icon-minus,.icon-attachment,.icon-arrow-left,.icon-arrow-up--upload,.icon-arrow-right-2,.icon-arrow-down-2,.icon-file,.icon-file-zip,.icon-console,.icon-floppy,.icon-user,.icon-envelope,.icon-user-add,.icon-eye,.icon-arrow-right-3,.icon-arrow-down-3,.icon-facebook-2,.icon-spinner,.icon-lightning,.icon-trash,.icon-download,.icon-upload,.icon-settings5,.icon-bug,.icon-libreoffice,.icon-file-openoffice,.icon-google-drive,.icon-edit2,.icon-phonebook,.icon-book,.icon-spinner-2,.icon-bell,.icon-cart,.icon-cog-2,.icon-legacyfilemanager,.icon-favorite,.icon-favorite2,.icon-loved,.icon-love,.icon-scaleup,.icon-scaledown,.icon-opennewwindow,.icon-repeat,.icon-reorder,.icon-skype,.icon-dropbox{font-family:icomoon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased}.icon-paperplane:before{content:"\e000"}.icon-reply:before{content:"\e001"}.icon-reply-all:before{content:"\e002"}.icon-forward:before{content:"\e003"}.icon-search:before{content:"\e004"}.icon-add-to-list:before{content:"\e005"}.icon-info:before{content:"\e006"}.icon-arrow-right:before{content:"\e007"}.icon-arrow-down:before{content:"\e008"}.icon-ellipsis:before{content:"\e009"}.icon-pencil:before{content:"\e00a"}.icon-image:before{content:"\e00b"}.icon-music:before{content:"\e00c"}.icon-film:before{content:"\e00d"}.icon-print:before{content:"\e00e"}.icon-calendar:before{content:"\e00f"}.icon-key:before{content:"\e010"}.icon-cog:before{content:"\e011"}.icon-fire:before{content:"\e012"}.icon-rocket:before{content:"\e013"}.icon-checkbox-checked:before{content:"\e014"}.icon-checkbox-unchecked:before{content:"\e015"}.icon-checkbox-partial:before{content:"\e016"}.icon-radio-checked:before{content:"\e017"}.icon-radio-unchecked:before{content:"\e018"}.icon-google:before{content:"\e019"}.icon-google-plus:before{content:"\e01a"}.icon-facebook:before{content:"\e01b"}.icon-twitter:before{content:"\e01c"}.icon-youtube:before{content:"\e01d"}.icon-file-pdf:before{content:"\e01e"}.icon-file-word:before{content:"\e01f"}.icon-file-excel:before{content:"\e020"}.icon-file-powerpoint:before{content:"\e021"}.icon-file-xml:before{content:"\e022"}.icon-file-css:before{content:"\e023"}.icon-warning:before{content:"\e024"}.icon-switch:before{content:"\e025"}.icon-wrench:before{content:"\e026"}.icon-remove:before{content:"\e027"}.icon-ok:before{content:"\e028"}.icon-plus:before{content:"\e029"}.icon-minus:before{content:"\e02a"}.icon-attachment:before{content:"\e02b"}.icon-arrow-left:before{content:"\e02c"}.icon-arrow-up--upload:before{content:"\e02d"}.icon-arrow-right-2:before{content:"\e02e"}.icon-arrow-down-2:before{content:"\e02f"}.icon-file:before{content:"\e030"}.icon-file-zip:before{content:"\e031"}.icon-console:before{content:"\e032"}.icon-floppy:before{content:"\e033"}.icon-user:before{content:"\e034"}.icon-envelope:before{content:"\e035"}.icon-user-add:before{content:"\e036"}.icon-eye:before{content:"\e037"}.icon-arrow-right-3:before{content:"\e038"}.icon-arrow-down-3:before{content:"\e039"}.icon-facebook-2:before{content:"\e03a"}.icon-spinner:before{content:"\e03b"}.icon-lightning:before{content:"\e03c"}.icon-trash:before{content:"\e03d"}.icon-download:before{content:"\e03e"}.icon-upload:before{content:"\e03f"}.icon-settings5:before{content:"\e040"}.icon-bug:before{content:"\e041"}.icon-libreoffice:before{content:"\e042"}.icon-file-openoffice:before{content:"\e043"}.icon-google-drive:before{content:"\e044"}.icon-edit2:before{content:"\e045"}.icon-phonebook:before{content:"\e046"}.icon-book:before{content:"\e047"}.icon-spinner-2:before{content:"\e048"}.icon-bell:before{content:"\e049"}.icon-cart:before{content:"\e04a"}.icon-cog-2:before{content:"\e04b"}.icon-legacyfilemanager:before{content:"\e04c"}.icon-favorite:before{content:"\e04d"}.icon-favorite2:before{content:"\e04e"}.icon-loved:before{content:"\e04f"}.icon-love:before{content:"\e050"}.icon-scaleup:before{content:"\e051"}.icon-scaledown:before{content:"\e052"}.icon-opennewwindow:before{content:"\e053"}.icon-repeat:before{content:"\e054"}.icon-reorder:before{content:"\e055"}.icon-skype:before{content:"\e056"}.icon-dropbox:before{content:"\e057"}.select2-container{margin:0;position:relative;display:inline-block;zoom:1;*display:inline;vertical-align:middle}.select2-container,.select2-drop,.select2-search,.select2-search input{-webkit-box-sizing:border-box;-khtml-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.select2-container .select2-choice{display:block;height:26px;padding:0 0 0 8px;overflow:hidden;position:relative;border:1px solid #aaa;white-space:nowrap;line-height:26px;color:#444;text-decoration:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#eee),color-stop(0.5,#fff));background-image:-webkit-linear-gradient(center bottom,#eee 0,#fff 50%);background-image:-moz-linear-gradient(center bottom,#eee 0,#fff 50%);background-image:-o-linear-gradient(bottom,#eee 0,#fff 50%);background-image:-ms-linear-gradient(top,#fff 0,#eee 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);background-image:linear-gradient(top,#fff 0,#eee 50%)}.select2-container.select2-drop-above .select2-choice{border-bottom-color:#aaa;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#eee),color-stop(0.9,#fff));background-image:-webkit-linear-gradient(center bottom,#eee 0,#fff 90%);background-image:-moz-linear-gradient(center bottom,#eee 0,#fff 90%);background-image:-o-linear-gradient(bottom,#eee 0,#fff 90%);background-image:-ms-linear-gradient(top,#eee 0,#fff 90%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);background-image:linear-gradient(top,#eee 0,#fff 90%)}.select2-container.select2-allowclear .select2-choice .select2-chosen{margin-right:42px}.select2-container .select2-choice>.select2-chosen{margin-right:26px;display:block;overflow:hidden;white-space:nowrap;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis}.select2-container .select2-choice abbr{display:none;width:12px;height:12px;position:absolute;right:24px;top:8px;font-size:1px;text-decoration:none;border:0;background:url(select2.png) right top no-repeat;cursor:pointer;outline:0}.select2-container.select2-allowclear .select2-choice abbr{display:inline-block}.select2-container .select2-choice abbr:hover{background-position:right -11px;cursor:pointer}.select2-drop-undermask{border:0;margin:0;padding:0;position:absolute;left:0;top:0;z-index:9998;background-color:transparent;filter:alpha(opacity=0)}.select2-drop-mask{border:0;margin:0;padding:0;position:absolute;left:0;top:0;z-index:9998;background-color:#fff;opacity:0;filter:alpha(opacity=0)}.select2-drop{width:100%;margin-top:-1px;position:absolute;z-index:9999;top:100%;background:#fff;color:#000;border:1px solid #aaa;border-top:0;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;-webkit-box-shadow:0 4px 5px rgba(0,0,0,.15);-moz-box-shadow:0 4px 5px rgba(0,0,0,.15);box-shadow:0 4px 5px rgba(0,0,0,.15)}.select2-drop-auto-width{border-top:1px solid #aaa;width:auto}.select2-drop-auto-width .select2-search{padding-top:4px}.select2-drop.select2-drop-above{margin-top:1px;border-top:1px solid #aaa;border-bottom:0;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;-webkit-box-shadow:0 -4px 5px rgba(0,0,0,.15);-moz-box-shadow:0 -4px 5px rgba(0,0,0,.15);box-shadow:0 -4px 5px rgba(0,0,0,.15)}.select2-drop-active{border:1px solid #5897fb;border-top:0}.select2-drop.select2-drop-above.select2-drop-active{border-top:1px solid #5897fb}.select2-container .select2-choice .select2-arrow{display:inline-block;width:18px;height:100%;position:absolute;right:0;top:0;border-left:1px solid #aaa;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;background:#ccc;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#ccc),color-stop(0.6,#eee));background-image:-webkit-linear-gradient(center bottom,#ccc 0,#eee 60%);background-image:-moz-linear-gradient(center bottom,#ccc 0,#eee 60%);background-image:-o-linear-gradient(bottom,#ccc 0,#eee 60%);background-image:-ms-linear-gradient(top,#ccc 0,#eee 60%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#cccccc', GradientType=0);background-image:linear-gradient(top,#ccc 0,#eee 60%)}.select2-container .select2-choice .select2-arrow b{display:block;width:100%;height:100%;background:url(select2.png) no-repeat 0 1px}.select2-search{display:inline-block;width:100%;min-height:26px;margin:0;padding-left:4px;padding-right:4px;position:relative;z-index:10000;white-space:nowrap}.select2-search input{width:100%;height:auto!important;min-height:26px;padding:4px 20px 4px 5px;margin:0;outline:0;font-family:sans-serif;font-size:1em;border:1px solid #aaa;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background:#fff url(select2.png) no-repeat 100% -22px;background:url(select2.png) no-repeat 100% -22px,-webkit-gradient(linear,left bottom,left top,color-stop(0.85,#fff),color-stop(0.99,#eee));background:url(select2.png) no-repeat 100% -22px,-webkit-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(select2.png) no-repeat 100% -22px,-moz-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(select2.png) no-repeat 100% -22px,-o-linear-gradient(bottom,#fff 85%,#eee 99%);background:url(select2.png) no-repeat 100% -22px,-ms-linear-gradient(top,#fff 85%,#eee 99%);background:url(select2.png) no-repeat 100% -22px,linear-gradient(top,#fff 85%,#eee 99%)}.select2-drop.select2-drop-above .select2-search input{margin-top:4px}.select2-search input.select2-active{background:#fff url(select2-spinner.gif) no-repeat 100%;background:url(select2-spinner.gif) no-repeat 100%,-webkit-gradient(linear,left bottom,left top,color-stop(0.85,#fff),color-stop(0.99,#eee));background:url(select2-spinner.gif) no-repeat 100%,-webkit-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(select2-spinner.gif) no-repeat 100%,-moz-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(select2-spinner.gif) no-repeat 100%,-o-linear-gradient(bottom,#fff 85%,#eee 99%);background:url(select2-spinner.gif) no-repeat 100%,-ms-linear-gradient(top,#fff 85%,#eee 99%);background:url(select2-spinner.gif) no-repeat 100%,linear-gradient(top,#fff 85%,#eee 99%)}.select2-container-active .select2-choice,.select2-container-active .select2-choices{border:1px solid #5897fb;outline:0;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);-moz-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.select2-dropdown-open .select2-choice{border-bottom-color:transparent;-webkit-box-shadow:0 1px 0 #fff inset;-moz-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;background-color:#eee;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#fff),color-stop(0.5,#eee));background-image:-webkit-linear-gradient(center bottom,#fff 0,#eee 50%);background-image:-moz-linear-gradient(center bottom,#fff 0,#eee 50%);background-image:-o-linear-gradient(bottom,#fff 0,#eee 50%);background-image:-ms-linear-gradient(top,#fff 0,#eee 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);background-image:linear-gradient(top,#fff 0,#eee 50%)}.select2-dropdown-open.select2-drop-above .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choices{border:1px solid #5897fb;border-top-color:transparent;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(0.5,#eee));background-image:-webkit-linear-gradient(center top,#fff 0,#eee 50%);background-image:-moz-linear-gradient(center top,#fff 0,#eee 50%);background-image:-o-linear-gradient(top,#fff 0,#eee 50%);background-image:-ms-linear-gradient(bottom,#fff 0,#eee 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);background-image:linear-gradient(bottom,#fff 0,#eee 50%)}.select2-dropdown-open .select2-choice .select2-arrow{background:transparent;border-left:0;filter:none}.select2-dropdown-open .select2-choice .select2-arrow b{background-position:-18px 1px}.select2-results{max-height:200px;padding:0 0 0 4px;margin:4px 4px 4px 0;position:relative;overflow-x:hidden;overflow-y:auto;-webkit-tap-highlight-color:rgba(0,0,0,0)}.select2-results ul.select2-result-sub{margin:0;padding-left:0}.select2-results ul.select2-result-sub>li .select2-result-label{padding-left:20px}.select2-results ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:40px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:60px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:80px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:100px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:110px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:120px}.select2-results li{list-style:none;display:list-item;background-image:none}.select2-results li.select2-result-with-children>.select2-result-label{font-weight:700}.select2-results .select2-result-label{padding:3px 7px 4px;margin:0;cursor:pointer;min-height:1em;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select2-results .select2-highlighted{background:#3875d7;color:#fff}.select2-results li em{background:#feffde;font-style:normal}.select2-results .select2-highlighted em{background:transparent}.select2-results .select2-highlighted ul{background:#fff;color:#000}.select2-results .select2-no-results,.select2-results .select2-searching,.select2-results .select2-selection-limit{background:#f4f4f4;display:list-item}.select2-results .select2-disabled.select2-highlighted{color:#666;background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-disabled{background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-selected{display:none}.select2-more-results.select2-active{background:#f4f4f4 url(select2-spinner.gif) no-repeat 100%}.select2-more-results{background:#f4f4f4;display:list-item}.select2-container.select2-container-disabled .select2-choice{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container.select2-container-disabled .select2-choice .select2-arrow{background-color:#f4f4f4;background-image:none;border-left:0}.select2-container.select2-container-disabled .select2-choice abbr{display:none}.select2-container-multi .select2-choices{height:auto!important;height:1%;margin:0;padding:0;position:relative;border:1px solid #aaa;cursor:text;overflow:hidden;background-color:#fff;background-image:-webkit-gradient(linear,0 0,0 100%,color-stop(1%,#eee),color-stop(15%,#fff));background-image:-webkit-linear-gradient(top,#eee 1%,#fff 15%);background-image:-moz-linear-gradient(top,#eee 1%,#fff 15%);background-image:-o-linear-gradient(top,#eee 1%,#fff 15%);background-image:-ms-linear-gradient(top,#eee 1%,#fff 15%);background-image:linear-gradient(top,#eee 1%,#fff 15%)}.select2-locked{padding:3px 5px!important}.select2-container-multi .select2-choices{min-height:26px}.select2-container-multi.select2-container-active .select2-choices{border:1px solid #5897fb;outline:0;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);-moz-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.select2-container-multi .select2-choices li{float:left;list-style:none}.select2-container-multi .select2-choices .select2-search-field{margin:0;padding:0;white-space:nowrap}.select2-container-multi .select2-choices .select2-search-field input{padding:5px;margin:1px 0;font-family:sans-serif;font-size:100%;color:#666;outline:0;border:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background:transparent!important}.select2-container-multi .select2-choices .select2-search-field input.select2-active{background:#fff url(select2-spinner.gif) no-repeat 100%!important}.select2-default{color:#999!important}.select2-container-multi .select2-choices .select2-search-choice{padding:3px 5px 3px 18px;margin:3px 0 3px 5px;position:relative;line-height:13px;color:#333;cursor:default;border:1px solid #aaa;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);-moz-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#e4e4e4;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);background-image:-webkit-gradient(linear,0 0,0 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-ms-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%)}.select2-container-multi .select2-choices .select2-search-choice .select2-chosen{cursor:default}.select2-container-multi .select2-choices .select2-search-choice-focus{background:#d4d4d4}.select2-search-choice-close{display:block;width:12px;height:13px;position:absolute;right:3px;top:4px;font-size:1px;outline:0;background:url(select2.png) right top no-repeat}.select2-container-multi .select2-search-choice-close{left:3px}.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover{background-position:right -11px}.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close{background-position:right -11px}.select2-container-multi.select2-container-disabled .select2-choices{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice{padding:3px 5px;border:1px solid #ddd;background-image:none;background-color:#f4f4f4}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close{display:none;background:0}.select2-result-selectable .select2-match,.select2-result-unselectable .select2-match{text-decoration:underline}.select2-offscreen,.select2-offscreen:focus{clip:rect(0 0 0 0);width:1px;height:1px;border:0;margin:0;padding:0;overflow:hidden;position:absolute;outline:0;left:0}.select2-display-none{display:none}.select2-measure-scrollbar{position:absolute;top:-10000px;left:-10000px;width:100px;height:100px;overflow:scroll}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:144dpi){.select2-search input,.select2-search-choice-close,.select2-container .select2-choice abbr,.select2-container .select2-choice .select2-arrow b{background-image:url(select2x2.png)!important;background-repeat:no-repeat!important;background-size:60px 40px!important}.select2-search input{background-position:100% -21px!important}}.nano{overflow :hidden!important}.nano .content{position :absolute;overflow :scroll;top :0;right :0;bottom :0;left :0;-webkit-overflow-scrolling:touch}.nano .content .content-wrapper{height:100%}.nano .content::-webkit-scrollbar{visibility:hidden}.has-scrollbar .content::-webkit-scrollbar{visibility:hidden}.nano-visibility-hidden::-webkit-scrollbar{visibility:hidden}.nano>.pane{background :none;position :absolute;width :5px;right :0;top :1px;bottom :1px;opacity :.01;filter:alpha(opacity=1);-webkit-transition :.4s;-moz-transition :.4s;-o-transition :.4s;transition :.4s;-moz-border-radius :5px;-webkit-border-radius :5px;border-radius :5px;z-index:10000;margin :2px}.nano>.pane2{background :none;position :absolute;height :5px;right :1px;left :1px;bottom :0;opacity :.01;filter:alpha(opacity=1);-webkit-transition :.4s;-moz-transition :.4s;-o-transition :.4s;transition :.4s;-moz-border-radius :5px;-webkit-border-radius :5px;border-radius :5px;z-index:10000;margin :2px}.nano>.pane>.slider{background-color:#999;background-color:rgba(0,0,0,.3);position :relative;margin :0;-moz-border-radius :3px;-webkit-border-radius :3px;border-radius :3px;width :5px}.nano>.pane2>.slider2{background-color:#999;background-color:rgba(0,0,0,.3);position :relative;margin :0;-moz-border-radius :3px;-webkit-border-radius :3px;border-radius :3px;height :5px}.nano:hover>.pane,.nano:hover>.pane2,.pane.active,.pane2.active,.pane.flashed,.pane2.flashed{visibility :visible\9;opacity :.99;filter:alpha(opacity=99)}.nano>.pane:hover,.nano>.pane.active{background-color:rgba(0,0,0,.15)}.nano>.pane2:hover,.nano>.pane2.active{background-color:rgba(0,0,0,.15)}.nano>.pane:hover>.slider,.nano>.pane.active>.slider{background-color:rgba(0,0,0,.4)}.nano>.pane2:hover>.slider2,.nano>.pane2.active>.slider2{background-color:rgba(0,0,0,.4)}.mfp-bg{top:0;left:0;width:100%;height:100%;z-index:502;overflow:hidden;position:fixed;background:#0b0b0b;opacity:.8;filter:alpha(opacity=80)}.mfp-wrap{top:0;left:0;width:100%;height:100%;z-index:503;position:fixed;outline:0!important;-webkit-backface-visibility:hidden}.mfp-container{height:100%;text-align:center;position:absolute;width:100%;height:100%;left:0;top:0;padding:0 8px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mfp-container:before{content:'';display:inline-block;height:100%;vertical-align:middle}.mfp-align-top .mfp-container:before{display:none}.mfp-content{position:relative;display:inline-block;vertical-align:middle;margin:0 auto;text-align:left;z-index:505}.mfp-inline-holder .mfp-content,.mfp-ajax-holder .mfp-content{width:100%;cursor:auto}.mfp-ajax-cur{cursor:progress}.mfp-zoom-out-cur{cursor:-moz-zoom-out;cursor:-webkit-zoom-out;cursor:zoom-out}.mfp-zoom-out-cur,.mfp-zoom-out-cur .mfp-image-holder .mfp-close{cursor:pointer}.mfp-zoom{cursor:pointer;cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.mfp-auto-cursor .mfp-content{cursor:auto}.mfp-close,.mfp-arrow,.mfp-preloader,.mfp-counter{-webkit-user-select:none;-moz-user-select:none;user-select:none}.mfp-loading.mfp-figure{display:none}.mfp-hide{display:none!important}.mfp-preloader{color:#ccc;position:absolute;top:50%;width:auto;text-align:center;margin-top:-.8em;left:8px;right:8px;z-index:504}.mfp-preloader a{color:#ccc}.mfp-preloader a:hover{color:#fff}.mfp-s-ready .mfp-preloader{display:none}.mfp-s-error .mfp-content{display:none}button.mfp-close,button.mfp-arrow{overflow:visible;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;display:block;padding:0;z-index:506}button::-moz-focus-inner{padding:0;border:0}.mfp-close{width:44px;height:44px;line-height:44px;position:absolute;right:0;top:0;text-decoration:none;text-align:center;opacity:.65;padding:0 0 18px 10px;color:#fff;font-style:normal;font-size:28px;font-family:Arial,Baskerville,monospace}.mfp-close:hover,.mfp-close:focus{opacity:1}.mfp-close:active{top:1px}.mfp-close-btn-in .mfp-close{color:#333}.mfp-image-holder .mfp-close,.mfp-iframe-holder .mfp-close{color:#fff;right:-6px;text-align:right;padding-right:6px;width:100%}.mfp-counter{position:absolute;top:0;right:0;color:#ccc;font-size:12px;line-height:18px}.mfp-arrow{position:absolute;top:0;opacity:.65;margin:0;top:50%;margin-top:-55px;padding:0;width:90px;height:110px;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mfp-arrow:active{margin-top:-54px}.mfp-arrow:hover,.mfp-arrow:focus{opacity:1}.mfp-arrow:before,.mfp-arrow:after,.mfp-arrow .mfp-b,.mfp-arrow .mfp-a{content:'';display:block;width:0;height:0;position:absolute;left:0;top:0;margin-top:35px;margin-left:35px;border:solid transparent}.mfp-arrow:after,.mfp-arrow .mfp-a{opacity:.8;border-top-width:12px;border-bottom-width:12px;top:8px}.mfp-arrow:before,.mfp-arrow .mfp-b{border-top-width:20px;border-bottom-width:20px}.mfp-arrow-left{left:0}.mfp-arrow-left:after,.mfp-arrow-left .mfp-a{border-right:12px solid #000;left:5px}.mfp-arrow-left:before,.mfp-arrow-left .mfp-b{border-right:20px solid #fff}.mfp-arrow-right{right:0}.mfp-arrow-right:after,.mfp-arrow-right .mfp-a{border-left:12px solid #000;left:3px}.mfp-arrow-right:before,.mfp-arrow-right .mfp-b{border-left:20px solid #fff}.mfp-iframe-holder{padding-top:40px;padding-bottom:40px}.mfp-iframe-holder .mfp-content{line-height:0;width:100%;max-width:900px}.mfp-iframe-scaler{width:100%;height:0;overflow:hidden;padding-top:56.25%}.mfp-iframe-scaler iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;box-shadow:0 0 8px rgba(0,0,0,.6);background:#000}.mfp-iframe-holder .mfp-close{top:-40px}img.mfp-img{width:auto;max-width:100%;height:auto;display:block;line-height:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:40px 0;margin:0 auto}.mfp-figure:after{content:'';position:absolute;left:0;top:40px;bottom:40px;display:block;right:0;width:auto;height:auto;z-index:-1;box-shadow:0 0 8px rgba(0,0,0,.6)}.mfp-figure{line-height:0}.mfp-bottom-bar{margin-top:-36px;position:absolute;top:100%;left:0;width:100%;cursor:auto}.mfp-title{text-align:left;line-height:18px;color:#f3f3f3;word-break:break-word;padding-right:36px}.mfp-figure small{color:#bdbdbd;display:block;font-size:12px;line-height:14px}.mfp-image-holder .mfp-content{max-width:100%}.mfp-gallery .mfp-image-holder .mfp-figure{cursor:pointer}@media screen and (max-width:800px) and (orientation:landscape),screen and (max-height:300px){.mfp-img-mobile .mfp-image-holder{padding-left:0;padding-right:0}.mfp-img-mobile img.mfp-img{padding:0}.mfp-img-mobile .mfp-figure:after{top:0;bottom:0}.mfp-img-mobile .mfp-bottom-bar{background:rgba(0,0,0,.6);bottom:0;margin:0;top:auto;padding:3px 5px;position:fixed;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mfp-img-mobile .mfp-bottom-bar:empty{padding:0}.mfp-img-mobile .mfp-counter{right:5px;top:3px}.mfp-img-mobile .mfp-close{top:0;right:0;width:35px;height:35px;line-height:35px;background:rgba(0,0,0,.6);position:fixed;text-align:center;padding:0}.mfp-img-mobile .mfp-figure small{display:inline;margin-left:5px}}@media all and (max-width:800px){.mfp-arrow{-webkit-transform:scale(0.75);transform:scale(0.75)}.mfp-arrow-left{-webkit-transform-origin:0;transform-origin:0}.mfp-arrow-right{-webkit-transform-origin:100%;transform-origin:100%}.mfp-container{padding-left:6px;padding-right:6px}}.mfp-ie7 .mfp-img{padding:0}.mfp-ie7 .mfp-bottom-bar{width:600px;left:50%;margin-left:-300px;margin-top:5px;padding-bottom:5px}.mfp-ie7 .mfp-container{padding:0}.mfp-ie7 .mfp-content{padding-top:44px}.mfp-ie7 .mfp-close{top:0;right:0;padding-top:0}.mfp-fade.mfp-bg{opacity:0;-webkit-transition:all .15s ease-out;-moz-transition:all .15s ease-out;transition:all .15s ease-out}.mfp-fade.mfp-bg.mfp-ready{opacity:.8}.mfp-fade.mfp-bg.mfp-removing{opacity:0}.mfp-fade.mfp-wrap .mfp-content{opacity:0;-webkit-transition:all .15s ease-out;-moz-transition:all .15s ease-out;transition:all .15s ease-out}.mfp-fade.mfp-wrap.mfp-ready .mfp-content{opacity:1}.mfp-fade.mfp-wrap.mfp-removing .mfp-content{opacity:0}.my-mfp-zoom-in .zoom-anim-dialog{opacity:0;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;-webkit-transform:scale(0.8);-moz-transform:scale(0.8);-ms-transform:scale(0.8);-o-transform:scale(0.8);transform:scale(0.8)}.my-mfp-zoom-in.mfp-ready .zoom-anim-dialog{opacity:1;-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.my-mfp-zoom-in.mfp-removing .zoom-anim-dialog{-webkit-transform:scale(0.8);-moz-transform:scale(0.8);-ms-transform:scale(0.8);-o-transform:scale(0.8);transform:scale(0.8);opacity:0}.my-mfp-zoom-in.mfp-bg{opacity:0;-webkit-transition:opacity .3s ease-out;-moz-transition:opacity .3s ease-out;-o-transition:opacity .3s ease-out;transition:opacity .3s ease-out}.my-mfp-zoom-in.mfp-ready.mfp-bg{opacity:.8}.my-mfp-zoom-in.mfp-removing.mfp-bg{opacity:0}.simple-pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.simple-pace-inactive{display:none}.simple-pace .simple-pace-progress{background-color:#939595;position:fixed;z-index:2000;top:0;left:0;height:3px;overflow:hidden;-webkit-transition:width .5s;-moz-transition:width .5s;-o-transition:width .5s;transition:width .5s}.simple-pace .simple-pace-progress-inner{position:absolute;top:0;left:0;right:-32px;bottom:0;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.3)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.3)),color-stop(0.75,rgba(255,255,255,.3)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.3) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.3) 50%,rgba(255,255,255,.3) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.3) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.3) 50%,rgba(255,255,255,.3) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.3) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.3) 50%,rgba(255,255,255,.3) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.3) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.3) 50%,rgba(255,255,255,.3) 75%,transparent 75%,transparent);-webkit-background-size:32px 32px;-moz-background-size:32px 32px;-o-background-size:32px 32px;background-size:32px 32px;-webkit-animation:simple-pace-stripe-animation 500ms linear infinite;-moz-animation:simple-pace-stripe-animation 500ms linear infinite;-ms-animation:simple-pace-stripe-animation 500ms linear infinite;-o-animation:simple-pace-stripe-animation 500ms linear infinite;animation:simple-pace-stripe-animation 500ms linear infinite}@-webkit-keyframes simple-pace-stripe-animation{0%{-webkit-transform:none;transform:none}100%{-webkit-transform:translate(-32px,0);transform:translate(-32px,0)}}@-moz-keyframes simple-pace-stripe-animation{0%{-moz-transform:none;transform:none}100%{-moz-transform:translate(-32px,0);transform:translate(-32px,0)}}@-o-keyframes simple-pace-stripe-animation{0%{-o-transform:none;transform:none}100%{-o-transform:translate(-32px,0);transform:translate(-32px,0)}}@-ms-keyframes simple-pace-stripe-animation{0%{-ms-transform:none;transform:none}100%{-ms-transform:translate(-32px,0);transform:translate(-32px,0)}}@keyframes simple-pace-stripe-animation{0%{transform:none;transform:none}100%{transform:translate(-32px,0);transform:translate(-32px,0)}}.flag-wrapper{width:24px;height:16px;display:inline-block}.flag{width:16px;height:11px;display:inline-block;background:url(flags.png) no-repeat}.flag.flag-en{background-position:-144px -154px}.flag.flag-en-us{background-position:-144px -154px}.flag.flag-en-gb{background-position:-240px -33px}.flag.flag-en-ca{background-position:-48px -22px}.flag.flag-nl,.flag.flag-nl-nl{background-position:-80px -110px}.flag.flag-ru,.flag.flag-ru-ru{background-position:-224px -121px}.flag.flag-de,.flag.flag-de-de{background-position:-80px -33px}.flag.flag-it,.flag.flag-it-it{background-position:-208px -66px}.flag.flag-is,.flag.flag-is-is{background-position:-192px -66px}.flag.flag-lv,.flag.flag-lv-lv{background-position:-112px -88px}.flag.flag-fr,.flag.flag-fr-fr,.flag.flag-fr-ca{background-position:-144px -44px}.flag.flag-es,.flag.flag-es-es,.flag.flag-es-la{background-position:-16px -44px}.flag.flag-ja,.flag.flag-jp,.flag.flag-ja-jp{background-position:-16px -77px}.flag.flag-pt,.flag.flag-pt-pt{background-position:-112px -121px}.flag.flag-pt-br{background-position:-192px -11px}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:"";line-height:0}.row:after{clear:both}[class*=span]{float:left;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0}.row-fluid:after{clear:both}.row-fluid [class*=span]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%}.row-fluid [class*=span]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*=span].hide,.row-fluid [class*=span].hide{display:none}[class*=span].pull-right,.row-fluid [class*=span].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;content:"";line-height:0}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:20px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:700}em{font-style:italic}cite{font-style:normal}.muted{color:#999}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:700;line-height:1;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:400;line-height:1;color:#999}h1{font-size:36px;line-height:40px}h2{font-size:30px;line-height:40px}h3{font-size:24px;line-height:40px}h4{font-size:18px;line-height:20px}h5{font-size:14px;line-height:20px}h6{font-size:12px;line-height:20px}h1 small{font-size:24px}h2 small{font-size:18px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:700}dd{margin-left:10px}.dl-horizontal dt{float:left;width:120px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:130px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:25px}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:400;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type=text],input[type=password],input[type=datetime],input[type=datetime-local],input[type=date],input[type=month],input[type=time],input[type=week],input[type=number],input[type=email],input[type=url],input[type=search],input[type=tel],input[type=color],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:9px;font-size:14px;line-height:20px;color:#555;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}input,textarea{width:210px}textarea{height:auto}textarea,input[type=text],input[type=password],input[type=datetime],input[type=datetime-local],input[type=date],input[type=month],input[type=time],input[type=week],input[type=number],input[type=email],input[type=url],input[type=search],input[type=tel],input[type=color],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=date]:focus,input[type=month]:focus,input[type=time]:focus,input[type=week]:focus,input[type=number]:focus,input[type=email]:focus,input[type=url]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=color]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6)}input[type=radio],input[type=checkbox]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal;cursor:pointer}input[type=file],input[type=image],input[type=submit],input[type=reset],input[type=button],input[type=radio],input[type=checkbox]{width:auto}select,input[type=file]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;border:1px solid #bbb;background-color:#fff}select[multiple],select[size]{height:auto}select:focus,input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.025);box-shadow:inset 0 1px 2px rgba(0,0,0,.025);cursor:not-allowed}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:18px;padding-left:18px}.radio input[type=radio],.checkbox input[type=checkbox]{float:left;margin-left:-18px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*=span],select[class*=span],textarea[class*=span],.uneditable-input[class*=span],.row-fluid input[class*=span],.row-fluid select[class*=span],.row-fluid textarea[class*=span],.row-fluid .uneditable-input[class*=span]{float:none;margin-left:0}.input-append input[class*=span],.input-append .uneditable-input[class*=span],.input-prepend input[class*=span],.input-prepend .uneditable-input[class*=span],.row-fluid input[class*=span],.row-fluid select[class*=span],.row-fluid textarea[class*=span],.row-fluid .uneditable-input[class*=span],.row-fluid .input-prepend [class*=span],.row-fluid .input-append [class*=span]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*=span]+[class*=span]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;content:"";line-height:0}.controls-row:after{clear:both}.controls-row [class*=span]{float:left}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio][readonly],input[type=checkbox][readonly]{background-color:transparent}.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.control-group.warning .checkbox:focus,.control-group.warning .radio:focus,.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.control-group.error .checkbox:focus,.control-group.error .radio:focus,.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.control-group.success .checkbox:focus,.control-group.success .radio:focus,.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;content:"";line-height:0}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px}.input-append,.input-prepend{margin-bottom:5px;font-size:0;white-space:nowrap}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;font-size:14px;vertical-align:top;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:400;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn{margin-left:-1px;vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append .add-on:last-child,.input-append .btn:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;vertical-align:middle}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type=radio],.form-search .checkbox input[type=checkbox],.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:140px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:160px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:160px}.form-horizontal .help-block{margin-top:10px;margin-bottom:0}.form-horizontal .form-actions{padding-left:160px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:700}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child,.table-bordered tfoot:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child,.table-bordered tfoot:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-right-topleft:4px}.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9}.table-hover tbody tr:hover td,.table-hover tbody tr:hover th{background-color:#f5f5f5}table [class*=span],.row-fluid table [class*=span]{display:table-cell;float:none;margin-left:0}table .span1{float:none;width:44px;margin-left:0}table .span2{float:none;width:124px;margin-left:0}table .span3{float:none;width:204px;margin-left:0}table .span4{float:none;width:284px;margin-left:0}table .span5{float:none;width:364px;margin-left:0}table .span6{float:none;width:444px;margin-left:0}table .span7{float:none;width:524px;margin-left:0}table .span8{float:none;width:604px;margin-left:0}table .span9{float:none;width:684px;margin-left:0}table .span10{float:none;width:764px;margin-left:0}table .span11{float:none;width:844px;margin-left:0}table .span12{float:none;width:924px;margin-left:0}table .span13{float:none;width:1004px;margin-left:0}table .span14{float:none;width:1084px;margin-left:0}table .span15{float:none;width:1164px;margin-left:0}table .span16{float:none;width:1244px;margin-left:0}table .span17{float:none;width:1324px;margin-left:0}table .span18{float:none;width:1404px;margin-left:0}table .span19{float:none;width:1484px;margin-left:0}table .span20{float:none;width:1564px;margin-left:0}table .span21{float:none;width:1644px;margin-left:0}table .span22{float:none;width:1724px;margin-left:0}table .span23{float:none;width:1804px;margin-left:0}table .span24{float:none;width:1884px;margin-left:0}.table tbody tr.success td{background-color:#dff0d8}.table tbody tr.error td{background-color:#f2dede}.table tbody tr.info td{background-color:#d9edf7}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a{text-decoration:none;color:#fff;background-color:#08c;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0)}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#08c;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0)}.dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover{color:#999}.dropdown-menu .disabled>a:hover{text-decoration:none;background-color:transparent;cursor:default}.open{*z-index:1000}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:"\2191"}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px;-moz-border-radius:0 6px 6px;border-radius:0 6px 6px}.dropdown-submenu:hover .dropdown-menu{display:block}.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#ccc;margin-top:5px;margin-right:-10px}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px}.typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;overflow:visible \9;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:700;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 14px;margin-bottom:0;font-size:14px;line-height:20px;*line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border:1px solid #bbb;*border:0;border-bottom-color:#a2a2a2;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover{color:#333;text-decoration:none;background-color:#e6e6e6;*background-color:#d9d9d9;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-color:#e6e6e6;background-color:#d9d9d9 \9;background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn.disabled,.btn[disabled]{cursor:default;background-color:#e6e6e6;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.btn-large [class^=icon-]{margin-top:2px}.btn-small{padding:3px 9px;font-size:12px;line-height:18px}.btn-small [class^=icon-]{margin-top:0}.btn-mini{padding:2px 6px;font-size:11px;line-height:16px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,.75)}.btn{border-color:#c5c5c5;border-color:rgba(0,0,0,.15) rgba(0,0,0,.15) rgba(0,0,0,.25)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#da4f49;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#49afcd;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#363636;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);border-color:#222 #222 #000;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);*background-color:#222;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type=submit].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type=submit].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type=submit].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type=submit].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type=submit].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{border-color:transparent;cursor:pointer;color:#08c;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent}.btn-group{position:relative;font-size:0;white-space:nowrap;*margin-left:.3em}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1}.btn-toolbar .btn+.btn,.btn-toolbar .btn-group+.btn,.btn-toolbar .btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu{font-size:14px}.btn-group>.btn-mini{font-size:11px}.btn-group>.btn-small{font-size:12px}.btn-group>.btn-large{font-size:16px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px}.btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-mini .caret,.btn-small .caret,.btn-large .caret{margin-top:6px}.btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px}.dropup .btn-large .caret{border-bottom:5px solid #000;border-top:0}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical .btn{display:block;float:none;width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical .btn+.btn{margin-left:0;margin-top:-1px}.btn-group-vertical .btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical .btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical .btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical .btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847}.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.modal-open .dropdown-menu{z-index:2050}.modal-open .dropdown.open{*z-index:2050}.modal-open .popover{z-index:2060}.modal-open .tooltip{z-index:2080}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:50%;left:50%;z-index:1050;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,.3);box-shadow:0 3px 7px rgba(0,0,0,.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out;top:-25%}.modal.fade.in{top:50%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{overflow-y:auto;max-height:400px;padding:15px}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;*zoom:1}.modal-footer:before,.modal-footer:after{display:table;content:"";line-height:0}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{margin-top:-3px}.tooltip.right{margin-left:3px}.tooltip.bottom{margin-top:3px}.tooltip.left{margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#eee;text-align:center;text-decoration:none;background-color:#333;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#333}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#333}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#333}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#333}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;width:236px;padding:1px;background-color:#fff;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-bottom:10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-right:10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0}.popover .arrow,.popover .arrow:after{position:absolute;display:inline-block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow:after{content:"";z-index:-1}.popover.top .arrow{bottom:-10px;left:50%;margin-left:-10px;border-width:10px 10px 0;border-top-color:#fff}.popover.top .arrow:after{border-width:11px 11px 0;border-top-color:rgba(0,0,0,.25);bottom:-1px;left:-11px}.popover.right .arrow{top:50%;left:-10px;margin-top:-10px;border-width:10px 10px 10px 0;border-right-color:#fff}.popover.right .arrow:after{border-width:11px 11px 11px 0;border-right-color:rgba(0,0,0,.25);bottom:-11px;left:-1px}.popover.bottom .arrow{top:-10px;left:50%;margin-left:-10px;border-width:0 10px 10px;border-bottom-color:#fff}.popover.bottom .arrow:after{border-width:0 11px 11px;border-bottom-color:rgba(0,0,0,.25);top:-1px;left:-11px}.popover.left .arrow{top:50%;right:-10px;margin-top:-10px;border-width:10px 0 10px 10px;border-left-color:#fff}.popover.left .arrow:after{border-width:11px 0 11px 11px;border-left-color:rgba(0,0,0,.25);bottom:-11px;right:-1px}.label,.badge{font-size:11.844px;font-weight:700;line-height:14px;color:#fff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#999}.label{padding:1px 4px 2px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding:1px 9px 2px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}a.label:hover,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.progress .bar{width:0;height:100%;color:#fff;float:left;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}@media screen and (-webkit-min-device-pixel-ratio:0){@font-face{font-family:icomoon;src:url(fonts/icomoon.svg#icomoon) format('svg')}}[class^=icon-],[class*=" icon-"]{display:inline-block;width:16px;height:16px;line-height:16px;font-size:15px;*margin-right:.3em;vertical-align:text-top}.icon-white,.nav>.active>a>[class^=icon-],.nav>.active>a>[class*=" icon-"]{color:#fff}.g-ui-menu .e-item:hover [class^=icon-],.g-ui-menu .e-item:hover [class*=" icon-"]{color:#fff}[class^=icon2-],[class*=" icon2-"]{display:inline-block;width:16px;height:16px;line-height:16px;font-size:15px;*margin-right:.3em;vertical-align:text-top;background-repeat:no-repeat}.icon2-none{background-image:none}.icon3-as-button{cursor:pointer}.icon-checkbox-checked,.icon-checkbox-unchecked,.icon-checkbox-partial,.icon-radio-checked,.icon-radio-unchecked{cursor:pointer;color:#555;font-size:1em}.icon-checkbox-checked:hover,.icon-checkbox-unchecked:hover,.icon-checkbox-partial:hover,.icon-radio-checked:hover,.icon-radio-unchecked:hover,.icon-checkbox-checked:active,.icon-checkbox-unchecked:active,.icon-checkbox-partial:active,.icon-radio-checked:active,.icon-radio-unchecked:active{color:#000}.icon-white.icon-checkbox-checked,.icon-white.icon-checkbox-unchecked,.icon-white.icon-checkbox-partial,.icon-white.icon-radio-checked,.icon-white.icon-radio-unchecked{color:#eee}.icon-white.icon-checkbox-checked:hover,.icon-white.icon-checkbox-unchecked:hover,.icon-white.icon-checkbox-partial:hover,.icon-white.icon-radio-checked:hover,.icon-white.icon-radio-unchecked:hover,.icon-white.icon-checkbox-checked:active,.icon-white.icon-checkbox-unchecked:active,.icon-white.icon-checkbox-partial:active,.icon-white.icon-radio-checked:active,.icon-white.icon-radio-unchecked:active{color:#fff}.icon-refresh.in-process{background-position:0 0;background-image:url(images/sync.gif)}.denied-by-browser{cursor:default}.denied-by-browser .icon-checkbox-checked,.denied-by-browser icon-checkbox-unchecked{cursor:default}.icon-arrow-right-3,.icon-arrow-down-3{width:16px;line-height:20px}.icon2-reload{background-image:url(images/sync.png);background-repeat:no-repeat}.icon2-aminate-reload{background-image:url(images/sync.gif);background-repeat:no-repeat}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(359deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0deg)}to{-moz-transform:rotate(359deg)}}@keyframes rotation{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.icon-repeat,.icon-spinner,.icon-spinner-2{width:16px;height:16px}.icon-repeat:before,.icon-spinner:before,.icon-spinner-2:before{font-size:16px;line-height:100%}html.no-cssanimations .icon-repeat,html.no-cssanimations .icon-spinner,html.no-cssanimations .icon-spinner-2{background-image:url(images/sync.png);background-repeat:no-repeat;font-family:Arial}html.no-cssanimations .icon-repeat:before,html.no-cssanimations .icon-spinner:before,html.no-cssanimations .icon-spinner-2:before{content:""}html.no-cssanimations .icon-repeat.animated,html.no-cssanimations .icon-spinner.animated,html.no-cssanimations .icon-spinner-2.animated{background-image:url(images/sync.gif)}html.cssanimations .icon-repeat.animated,html.cssanimations .icon-spinner.animated,html.cssanimations .icon-spinner-2.animated{-webkit-animation:rotation 1s infinite linear;-moz-animation:rotation 1s infinite linear;animation:rotation 1s infinite linear}body{background-color:transparent}label{cursor:pointer}.legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}.legend small{font-size:15px;color:#999}.legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}select{width:223px}.btn-small.btn-small-small{padding:3px 9px;font-size:11px;line-height:11px}.btn.btn-ellipsis{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.btn.btn-narrow{padding-left:12px;padding-right:12px}.dropdown-menu{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.btn{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background-image:none;text-shadow:0 1px 0 #fff}.btn.disabled,.btn[disabled]{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}html.rgba.textshadow .btn.btn-danger,html.rgba.textshadow .btn.btn-success,html.rgba.textshadow .btn.btn-primary{text-shadow:0 1px 0 rgba(0,0,0,.3)}.btn-toolbar{margin-top:0;margin-bottom:0}.dropdown-menu{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);-moz-box-shadow:0 1px 2px rgba(0,0,0,.2);box-shadow:0 1px 2px rgba(0,0,0,.2)}.tooltip{font-size:14px}.tooltip.in{opacity:1;filter:alpha(opacity=100)}.tooltip .tooltip-big{font-size:18px;padding:0 10px}.tooltip-inner{padding:5px 10px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.btn-group>.btn:first-child{-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px;-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px;-webkit-border-bottom-right-radius:2px;-moz-border-radius-bottomright:2px;border-bottom-right-radius:2px}.btn-group>.btn.large:first-child{-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px;-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px;-webkit-border-bottom-right-radius:2px;-moz-border-radius-bottomright:2px;border-bottom-right-radius:2px}textarea,input[type=text],input[type=password],input[type=email],input[type=search]{border:1px solid #ccc}textarea:focus,input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=search]:focus{background-color:#fff;border:1px solid #999;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}input[type=text],input[type=password],input[type=email],input[type=search]{height:20px;line-height:20px}select{border:1px solid #ccc}.alert.alert-null-left-margin{margin-left:0}html.no-rgba .modal{border-width:0!important}.modal-backdrop,.modal-backdrop.fade.in{opacity:.1;filter:alpha(opacity=10)}.popups{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1100;overflow:auto}.popups .modal{position:static;z-index:1101;margin:5% auto;background-color:transparent;overflow:hidden;-webkit-box-shadow:0 5px 80px rgba(0,0,0,.3);-moz-box-shadow:0 5px 80px rgba(0,0,0,.3);box-shadow:0 5px 80px rgba(0,0,0,.3)}.popups .modal .modal-body{background-color:#fff;max-height:none}.modal.loginContent .modal-body,.modal.loginAdminContent .modal-body{background-color:transparent!important}.picker.modal-dialog-bg,.picker.picker-dialog-bg{z-index:2000!important}.picker.modal-dialog,.picker.picker-dialog{z-index:2001!important}.select2-container-multi .select2-choices{background-image:none;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.select2-container-multi .select2-choices .select2-search-choice{line-height:15px;font-size:16px}.select2-container-multi.select2-container-active .select2-choices{border:1px solid #999;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.select2-drop{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.select2-drop .select2-subname{color:#777}.select2-drop .select2-highlighted .select2-subname{color:#eee}.select2-results{margin:0;padding:0;max-height:400px}.select2-results .select2-searching{padding:1px 4px}.select2-icon{line-height:20px;padding:0 0 0 7px}.select2-icon-result{line-height:40px}.select2-result-label{margin:0!important;padding:5px!important;font-size:16px;height:40px;line-height:40px}.select2-result-label .select2-user-pic{display:inline-block;height:40px;width:40px;margin-right:10px}.g-ui-user-select-none{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-webkit-touch-callout:none}.g-ui-clearfix{*zoom:1}.g-ui-clearfix:before,.g-ui-clearfix:after{display:table;content:"";line-height:0}.g-ui-clearfix:after{clear:both}.g-ui-link{color:#369;text-decoration:underline;cursor:pointer}.g-ui-min-height-300{min-height:300px}.g-ui-absolute-reset{position:absolute;top:0;right:0;bottom:0;left:0;padding:0;margin:0;border:0;z-index:0}.g-ui-menu{max-height:400px;max-width:300px;overflow-y:auto;overflow-x:hidden}.g-ui-menu .e-link{text-decoration:none;cursor:pointer}.g-ui-menu .e-item>.e-link:hover{background-color:#555;background-image:none;color:#fff}.g-ui-menu .e-item.disable>.e-link{cursor:not-allowed;background-color:#fff;background-image:none;color:grey}.g-ui-menu .e-item.disable [class^=icon-]{color:grey}.g-ui-table{display:table;width:100%}.g-ui-table .e-row{display:table-row}.g-ui-table .e-cell{display:table-cell;vertical-align:top;text-align:left}.g-ui-resizable-delimiter-highlight{border:0;border-right:6px solid #aaa}html.rgba .g-ui-resizable-delimiter-highlight{border-right-color:rgba(0,0,0,.2)}.settings-saved-trigger{display:inline-block;line-height:17px;font-size:16px}.settings-saved-trigger .animated{color:green}.settings-saved-trigger .success{color:green;-webkit-transition:opacity .5s linear;-moz-transition:opacity .5s linear;-o-transition:opacity .5s linear;transition:opacity .5s linear;opacity:0;filter:alpha(opacity=0)}.settings-saved-trigger .error{color:red;-webkit-transition:opacity .5s linear;-moz-transition:opacity .5s linear;-o-transition:opacity .5s linear;transition:opacity .5s linear;opacity:0;filter:alpha(opacity=0)}.settings-saved-trigger .visible{opacity:1;filter:alpha(opacity=100)}*{outline:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}html{margin:0;padding:0;overflow:hidden;font-family:Arial,Verdana,Geneva,sans-serif}body{margin:0;padding:0;overflow:hidden;background-color:#e3e3e3;font-family:Arial,Verdana,Geneva,sans-serif;-webkit-touch-callout:none;position:absolute;top:0;left:0;bottom:0;right:0}textarea{resize:none}option:disabled{color:#aaa;cursor:not-allowed}body:before{content:"";position:fixed;top:-10px;left:0;width:100%;height:8px;z-index:100;-webkit-box-shadow:0 0 10px rgba(0,0,0,.6);-moz-box-shadow:0 0 10px rgba(0,0,0,.6);box-shadow:0 0 10px rgba(0,0,0,.6)}#rl-content{height:100%;width:100%}#rl-center{position:absolute;top:0;right:0;bottom:0;left:0;padding:0;margin:0;border:0;z-index:0;min-width:900px;min-height:400px}#rl-top{position:absolute;top:0;right:0;bottom:0;left:0;padding:0;margin:0;border:0;z-index:0;bottom:auto;z-index:2}#rl-bottom{position:absolute;top:0;right:0;bottom:0;left:0;padding:0;margin:0;border:0;z-index:0;top:auto;z-index:1}#rl-left{position:absolute;top:0;right:0;bottom:0;left:0;padding:0;margin:0;border:0;z-index:0;right:auto;width:100%}#rl-right{position:absolute;top:0;right:0;bottom:0;left:0;padding:0;margin:0;border:0;z-index:0;z-index:1}#rl-resizer-right{position:absolute;top:0;bottom:0;right:0;left:35%}#rl-resizer-left{position:absolute;top:0;bottom:0;left:0;right:65%;min-width:350px}#rl-top-resizer-right{position:absolute;top:0;bottom:0;right:0;left:230px}#rl-top-resizer-left{position:absolute;top:0;bottom:0;left:0;right:auto;min-width:120px}html.mobile #rl-top-resizer-left{width:170px}html.mobile #rl-top-resizer-right{left:170px}html.mobile #rl-resizer-left{width:350px}html.mobile #rl-resizer-right{left:350px}html.rl-no-preview-pane #rl-resizer-left{right:5px!important;width:inherit}html.rl-no-preview-pane #rl-resizer-right{left:0!important}html.rl-no-preview-pane #rl-right .ui-resizable-handle{display:none!important}#rl-loading,#rl-loading-error{position:absolute;font:30px Tahoma;top:50%;left:50%;width:120px;height:60px;margin:0;margin-top:-60px;margin-left:-25px;background-color:transparent;background-repeat:no-repeat;background-position:40px 40px;background-image:url(images/loader-black.gif);color:#000}#rl-loading-error{background-image:none;width:600px;margin-left:-200px;display:none}.b-system-drop-down .b-toolbar{position:absolute;top:0;right:0;height:30px;padding:10px 8px;z-index:103}.b-system-drop-down .e-facebook-name{display:inline-block;padding-top:4px}.b-system-drop-down .btn.system-dropdown{padding-left:10px;padding-right:10px}.b-system-drop-down .button-fb-logout{margin:5px}.b-system-drop-down .email-title{display:inline-block;max-width:200px;text-align:left;text-overflow:ellipsis;overflow:hidden}.rl-view-model.RL-Login,.rl-view-model.RL-LoginNew,.rl-view-model.RL-AdminLogin{height:100%}.b-login-content{height:100%;text-align:center;margin-left:-230px}.b-login-content .loginFormWrapper{display:inline-block;vertical-align:middle;text-align:center;width:380px}.b-login-content .loginFormWrapper .loginForm{background-color:#efefef;text-align:left;color:#333;margin:0;float:none}.b-login-content .loginFormWrapper .control-label{font-size:16px;line-height:30px}.b-login-content .loginFormWrapper .control-group{margin-bottom:25px}.b-login-content .loginFormWrapper .wrapper{padding:40px 40px 10px}.b-login-content .loginFormWrapper #recaptcha_image img{border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.b-login-content .loginFormWrapper .inputLoginForm,.b-login-content .loginFormWrapper .inputEmail,.b-login-content .loginFormWrapper .inputLogin,.b-login-content .loginFormWrapper .inputPassword{font-size:18px;height:30px;line-height:29px}.b-login-content .loginFormWrapper .signMeLabel{margin-top:5px}.b-login-content .loginFormWrapper .input-append .add-on{position:relative;height:30px;background:0;margin-left:-35px;z-index:1000;border:0}.b-login-content .loginFormWrapper .input-append .add-on i{font-size:17px;line-height:29px;color:#999}.b-login-content .loginFormWrapper .control-group.error .add-on i{color:#b94a48}.b-login-content .buttonLogin{margin:0}.b-login-content .alert{margin:0 0 20px;text-align:left}.b-login-content .loginAfter{display:inline-block;height:90%;vertical-align:middle;width:0}.b-login-content .flag-selector{margin-bottom:0}.b-folders .b-toolbar{position:absolute;top:0;right:0;left:0;height:30px;padding:10px 10px 0 8px;color:#fff}.b-folders .b-content{position:absolute;top:58px;bottom:13px;left:0;right:0;overflow:hidden;overflow-y:auto}.b-folders .b-content .content{-webkit-overflow-scrolling:touch}.b-folders .b-list-delimiter{margin:10px;border-top:0 solid #000;border-bottom:1px solid #999}.b-folders .e-item{overflow:hidden;white-space:nowrap}.b-folders .e-item .e-link{display:block;position:relative;z-index:1;height:34px;line-height:34px;background-color:transparent;vertical-align:middle;color:grey;cursor:not-allowed;font-size:14px;padding:0;padding-left:10px;padding-right:10px;outline:0;text-decoration:none}.b-folders .e-item .e-link.selectable{color:#000;cursor:pointer}.b-folders .e-item .e-link.selectable:hover,.b-folders .e-item .e-link.selectable.selected,.b-folders .e-item .e-link.selectable.droppableHover{background-color:#555;color:#fff}.b-folders .e-item .e-link.system{cursor:default;color:grey}.b-folders .e-item .e-link .count{display:none;margin-top:5px;line-height:19px}.b-folders .e-item .e-link.print-count{font-weight:700}.b-folders .e-item .e-link.print-count .count{display:inline}.b-folders .e-item .e-link .e-collapsed-sign{cursor:pointer;width:22px;height:30px;line-height:30px;text-align:center;vertical-align:inherit}.b-folders .e-item .hidden.e-link{display:none}.b-folders .e-item .b-sub-folders.collapsed{max-height:0;height:0;display:none}.b-folders .b-folder-system-item{font-weight:700}.b-folders .b-sub-folders .e-item .e-link{padding-left:25px}.b-folders .b-sub-folders.unpaddig-folder .e-item .e-link{padding-left:10px}.b-folders .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:40px}.b-folders .b-sub-folders.unpaddig-folder .b-sub-folders .e-item .e-link{padding-left:25px}.b-folders .b-sub-folders .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:55px}.b-folders .b-sub-folders.unpaddig-folder .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:40px}.b-folders .b-sub-folders .b-sub-folders .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:70px}.b-folders .b-sub-folders.unpaddig-folder .b-sub-folders .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:55px}.popups .b-folder-clear-content .modal-header{background-color:#fff}.popups .b-folder-create-content .modal-header{background-color:#fff}.popups .b-folder-system-content.modal{z-index:1102}.popups .b-folder-system-content .modal-header{background-color:#fff}.popups .b-languages-content.modal{z-index:1103;width:520px}.popups .b-languages-content.exp{width:521px}.popups .b-languages-content .modal-header{background-color:#fff}.popups .b-languages-content .lang-item{display:inline-block;padding:5px 15px;margin:2px 5px;width:200px;background-color:#fff;text-align:left}.popups .b-languages-content .lang-item.selected{background-color:#f5f5f5}.popups .b-languages-content .lang-item:hover{background-color:#eee}.popups .b-account-add-content .modal-header{background-color:#fff}.popups .b-identity-content .modal-header{background-color:#fff}.popups .b-identity-content .textEmail{margin-top:5px;font-weight:700}.popups .b-advanced-search-content.modal{width:750px}.popups .b-advanced-search-content.modal .control-label{width:100px}.popups .b-advanced-search-content.modal .controls{margin-left:110px}.popups .b-advanced-search-content .modal-header{background-color:#fff}html.rl-no-preview-pane .messageList.message-selected{display:none}.messageList .toolbar{position:absolute;top:0;right:0;left:0;height:30px;padding:10px 1px;min-width:280px;z-index:102}.messageList .b-footer{position:absolute;bottom:0;right:0;left:0;height:29px;padding:10px;min-width:300px;z-index:101;background-color:#eee;-webkit-border-bottom-right-radius:5px;-moz-border-radius-bottomright:5px;border-bottom-right-radius:5px;-webkit-border-bottom-left-radius:5px;-moz-border-radius-bottomleft:5px;border-bottom-left-radius:5px}.messageList .b-footer .e-quota{display:inline-block;margin-left:10px;font-size:18px;cursor:help}.messageList .b-footer .e-quota:hover{border-bottom:1px dashed #333}.messageList .inputSearch{width:258px}.messageList .btn.buttonMoreSearch{padding-left:8px;padding-right:8px}.messageList .b-message-list-wrapper{position:absolute;top:50px;right:0;left:0;bottom:5px;border:1px solid #aaa;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.3);-moz-box-shadow:0 2px 8px rgba(0,0,0,.3);box-shadow:0 2px 8px rgba(0,0,0,.3);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;z-index:101}.messageList .second-toolbar{position:absolute;top:0;right:0;left:0;height:29px;padding:10px 8px 10px 11px;min-width:280px;z-index:101;background-color:#eee;-webkit-border-top-right-radius:5px;-moz-border-radius-topright:5px;border-top-right-radius:5px;-webkit-border-top-left-radius:5px;-moz-border-radius-topleft:5px;border-top-left-radius:5px}.messageList .second-toolbar .checkboxCkeckAll{margin:5px 0}.messageList .mainDelimiter{position:absolute;left:0;right:0;height:1px;z-index:101;background-color:#bbb}.messageList .toolbarDelimiter{top:49px}.messageList .footerDelimiter{bottom:49px}.messageList .b-content{position:absolute;top:50px;bottom:50px;left:0;right:0;padding:0;overflow-x:hidden;overflow-y:auto;z-index:101;min-width:300px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.messageList .b-content .content{-webkit-overflow-scrolling:touch}.messageList .b-content .listClear{color:#333;text-align:center;padding:10px;font-size:14px;line-height:13px}.messageList .b-content .listEmptyList,.messageList .b-content .listEmptyListLoading,.messageList .b-content .listDragOver,.messageList .b-content .listError,.messageList .b-content .listEmptySearchList{color:#999;text-align:center;padding:60px 10px;font-size:24px;line-height:30px}.messageList .b-content .listEmptyList .e-icon,.messageList .b-content .listEmptyListLoading .e-icon,.messageList .b-content .listDragOver .e-icon,.messageList .b-content .listError .e-icon,.messageList .b-content .listEmptySearchList .e-icon{font-size:24px;line-height:30px}.messageList .b-content .listDragOver{max-height:0;overflow:hidden;padding:0 10px}.messageList .b-content .listDragOver.viewAppendArea{max-height:120px;padding:30px 10px}.messageList .b-content .listDragOver.dragOverEnter{background-color:#e0fdda;color:#333}.messageList .b-content .listError{color:#DA4F49}.messageList .b-content .listSearchDesc{font-size:20px;padding:20px;border-bottom:1px solid #eee}.messageList .b-content .delimiter{display:block;height:1px;background-color:#e5e5e5}.messageList .b-content .messageListItem:last-child{border-bottom:1px solid #e5e5e5}.messageList .b-content .messageListItem:last-child.selected{border-bottom:1px solid #bfd5ef}.messageList .b-content .fullThreadsParent{height:25px;padding:3px 5px;background-color:#f4f4f4;text-align:center}.messageList .b-content .messageListItem{position:relative;height:52px;max-height:60px;font-size:12px;line-height:21px;overflow:hidden;cursor:pointer;margin:0;border:0 solid transparent;z-index:100;background-color:#f9f9f9}.messageList .b-content .messageListItem .delimiter{position:relative;display:block;height:1px;background-color:#999;opacity:.2;filter:alpha(opacity=20)}.messageList .b-content .messageListItem .wrapper{padding:5px 0}.messageList .b-content .messageListItem .sidebarParent{display:inline-block;width:6px;background-color:#eee;float:left;height:100%}.messageList .b-content .messageListItem.e-single-line{height:35px}.messageList .b-content .messageListItem.e-single-line .wrapper{line-height:25px;padding:5px}.messageList .b-content .messageListItem.new{max-height:0}.messageList .b-content .messageListItem.deleted{max-height:0;border-color:transparent!important}.messageList .b-content .messageListItem .checkedParent{display:inline-block;float:left;margin-top:11px;padding:0 8px 0 6px;font-size:14px}.messageList .b-content .messageListItem.e-single-line .checkedParent{margin-top:1px}.messageList .b-content .messageListItem .flagParent{display:inline-block;float:right;padding:0 8px 0 5px}.messageList .b-content .messageListItem.e-single-line .flagParent{float:left;padding:0 8px 0 2px}.messageList .b-content .messageListItem .dateParent{display:inline-block;float:right;position:relative;margin:0 5px;color:#999;font-size:11px}.messageList .b-content .messageListItem .attachmentParent{display:inline-block;float:right;position:relative;margin:2px 8px 0 5px}.messageList .b-content .messageListItem.e-single-line .attachmentParent{float:left;margin:0 5px 0 0}.messageList .b-content .messageListItem .senderParent{display:block;overflow:hidden;text-overflow:ellipsis}.messageList .b-content .messageListItem .threadsCountParent{display:inline;overflow:hidden;background-color:#eee;padding:1px 5px;margin-right:5px;border:1px solid #ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.messageList .b-content .messageListItem .threadsCountParent.lastSelected{background-color:#999;border-color:#999;color:#fff}.messageList .b-content .messageListItem .threadsCountParent:hover{border-color:#666}.messageList .b-content .messageListItem.e-single-line .senderParent{display:inline-block;text-overflow:none;width:200px;float:left;font-weight:400}.messageList .b-content .messageListItem .subjectParent{display:block;overflow:hidden;text-overflow:ellipsis;color:#000}.messageList .b-content .messageListItem .senderParent,.messageList .b-content .messageListItem .subjectParent,.messageList .b-content .messageListItem .dateParent{white-space:nowrap}.messageList .b-content .messageListItem .subjectParent .emptySubjectText{display:none;font-style:italic;color:#999}.messageList .b-content .messageListItem.emptySubject .subjectParent .subject{display:none}.messageList .b-content .messageListItem.emptySubject .subjectParent .emptySubjectText{display:inline}.messageList .b-content .messageListItem .sender,.messageList .b-content .messageListItem .subject{overflow:hidden;text-overflow:ellipsis}.messageList .b-content .messageListItem .attachment{display:none}.messageList .b-content .messageListItem .flagOff,.messageList .b-content .messageListItem .flagOn,.messageList .b-content .messageListItem .flagOnHalf{cursor:pointer;display:inline-block}.messageList .b-content .messageListItem .flagOff{opacity:.5;filter:alpha(opacity=50)}.messageList .b-content .messageListItem .flagOff:hover{opacity:1;filter:alpha(opacity=100)}.messageList .b-content .messageListItem .flagOn,.messageList .b-content .messageListItem .flagOnHalf{display:none;color:orange}.messageList .b-content .messageListItem .replyFlag,.messageList .b-content .messageListItem .forwardFlag{display:none}.messageList .b-content .messageListItem.answered .replyFlag{display:inline-block}.messageList .b-content .messageListItem.forwarded .forwardFlag{display:inline-block}.messageList .b-content .messageListItem.withAttachments .attachment{display:inline-block;color:#666;text-shadow:0 1px 0 #eee}.messageList .b-content .messageListItem.unseen{background-color:#FFFFD9}.messageList .b-content .messageListItem.unseen .sender,.messageList .b-content .messageListItem.unseen .subject{font-weight:700}.messageList .b-content .messageListItem.unseen .sidebarParent{background-color:orange}.messageList .b-content .messageListItem.hasUnseenSubMessage{background-color:#FFFFD9}.messageList .b-content .messageListItem.hasUnseenSubMessage .sidebarParent{background-color:#ffdb99}.messageList .b-content .messageListItem.hasParentMessage{background-color:#ecf0f1}.messageList .b-content .messageListItem.hasParentMessage .sidebarParent{background-color:#bdc3c7}.messageList .b-content .messageListItem.hasParentMessage.unseen{background-color:#dde4e6}.messageList .b-content .messageListItem.hasParentMessage.unseen .sidebarParent{background-color:#6c777f}.messageList .b-content .messageListItem.checked .sidebarParent{background-color:#69a8f5!important}.messageList .b-content .messageListItem.selected{background-color:#DFEFFF;z-index:102}.messageList .b-content .messageListItem.selected .sidebarParent{background-color:#398CF2!important}.messageList .b-content .messageListItem.selected .delimiter{background-color:#398CF2;opacity:.2;filter:alpha(opacity=20)}.messageList .b-content .messageListItem.selected+.messageListItem .delimiter{background-color:#398CF2;opacity:.3;filter:alpha(opacity=30)}.messageList .b-content .messageListItem.hasFlaggedSubMessage .flagOff,.messageList .b-content .messageListItem.hasFlaggedSubMessage .flagOn{display:none}.messageList .b-content .messageListItem.hasFlaggedSubMessage .flagOnHalf{display:inline-block}.messageList .b-content .messageListItem.flagged .flagOff,.messageList .b-content .messageListItem.flagged .flagOnHalf{display:none}.messageList .b-content .messageListItem.flagged .flagOn{display:inline-block}.messageList.hideMessageListCheckbox .checkedParent,.messageList.hideMessageListCheckbox .checkboxCkeckAll{display:none!important}.messageList.hideMessageListCheckbox .sidebarParent{margin-right:10px!important}.messageList .pagenator .page{display:inline-block;color:#999;text-decoration:none;font-size:24px;padding:3px;cursor:pointer}.messageList .pagenator .page:hover .pageNumber{color:#555}.messageList .pagenator .page.current .pageNumber{font-size:28px;color:#333;border-bottom:2px solid #000}.draggablePlace{z-index:10002;color:#fff;background-color:#333;background-color:rgba(0,0,0,.5);padding:4px 10px;min-width:30px;height:20px;cursor:pointer;cursor:move}html.rl-no-preview-pane .messageView{display:none}html.rl-no-preview-pane .messageView.message-selected{display:block}.messageView{z-index:100}.messageView .toolbar{position:absolute;top:0;right:0;left:0;height:30px;padding:10px 0;color:#fff}.messageView .b-content{position:absolute;margin:0;top:58px;bottom:13px;right:8px;left:0;overflow:hidden;border:1px solid #aaa;border-left:0;-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px;background-color:#fff}.messageView .b-content .b-message-view-desc{text-align:center;font-size:24px;line-height:30px;padding-top:120px;color:#999}.messageView .b-content .b-message-view-desc.error{color:#DA4F49}.messageView .b-content .content{-webkit-overflow-scrolling:touch}.messageView .b-content .messageItem{position:absolute;top:0;bottom:0;left:0;right:0;overflow:auto;-webkit-overflow-scrolling:touch;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.messageView .b-content .messageItem .emptySubjectText{display:none;font-style:italic;color:#999}.messageView .b-content .messageItem.emptySubject .emptySubjectText{display:inline}.messageView .b-content .messageItem .buttonUp,.messageView .b-content .messageItem .buttonUnFull,.messageView .b-content .messageItem .buttonFull{display:inline-block;position:fixed;right:30px;top:90px;height:30px;width:30px;text-align:center;vertical-align:middle;line-height:30px;background-color:transparent;background-color:#fff;border:1px solid #333;color:#333;z-index:2;cursor:pointer;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;opacity:.3;filter:alpha(opacity=30)}.messageView .b-content .messageItem .buttonUp:hover,.messageView .b-content .messageItem .buttonUnFull:hover,.messageView .b-content .messageItem .buttonFull:hover{opacity:.8;filter:alpha(opacity=80);border-color:#000;background-color:#888;color:#fff}.messageView .b-content .messageItem .buttonUp{right:70px;z-index:0}.messageView .b-content .messageItem .buttonUnFull{display:none}.messageView .b-content .messageItem .messageItemHeader{position:relative;padding:10px;background-color:#f8f8f8;border-top:0;border-bottom:1px solid #ddd;z-index:1}.messageView .b-content .messageItem .messageItemHeader .fromPic{display:inline-block;width:50px;height:50px;float:left;padding:2px;margin:0 5px 0 0;background:#fff;border:1px solid #ccc;border-radius:10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.messageView .b-content .messageItem .messageItemHeader .subjectParent{font-size:16px;font-weight:700;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;margin-left:3px}.messageView .b-content .messageItem .messageItemHeader .senderParent{margin-top:10px}.messageView .b-content .messageItem .messageItemHeader .messageButtons{margin-top:5px}.messageView .b-content .messageItem .messageItemHeader .informationShort{margin-left:15px}.messageView .b-content .messageItem .messageItemHeader .informationShort a{color:#369;text-decoration:underline;cursor:pointer}.messageView .b-content .messageItem .messageItemHeader .informationFull{margin-top:10px;border:1px solid #ddd;background-color:#fff;border-radius:5px;padding:10px 15px}.messageView .b-content .messageItem .loading{text-align:center;font-size:24px;color:grey;padding-top:50px}.messageView .b-content .messageItem .line-loading{height:0}.messageView .b-content .messageItem .showImages{cursor:pointer;background-color:#eee;padding:10px 15px;border-bottom:1px solid #ccc}.messageView .b-content .messageItem .attachmentsPlace{padding:10px}.messageView .b-content .messageItem .attachmentsPlace .attachmentList{margin:0}.messageView .b-content .messageItem .attachmentsPlace .attachmentList .attachmentItem{display:inline-block;margin:5px;padding:5px;max-width:170px;min-width:60px;overflow:hidden;cursor:pointer;list-style:none;line-height:24px;border:2px solid grey;background-color:#fff;box-shadow:1px 1px 5px #ccc;box-shadow:1px 1px 5px rgba(0,0,0,.1);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.messageView .b-content .messageItem .attachmentsPlace .attachmentList .attachmentItem .attachmentIcon{font-size:23px;width:23px;height:23px}.messageView .b-content .messageItem .attachmentsPlace .attachmentList .attachmentItem .attachmentPreview{color:#999;margin:0 5px}.messageView .b-content .messageItem .attachmentsPlace .attachmentList .attachmentItem .attachmentPreview:hover{color:#333}.messageView .b-content .messageItem .rlBlockquoteSwitcher{background-color:#eee;border:1px solid #999;display:inline-block;width:30px;height:14px;line-height:14px;text-align:center;cursor:pointer;margin:10px 0;opacity:.5;filter:alpha(opacity=50)}.messageView .b-content .messageItem .rlBlockquoteSwitcher:hover{opacity:1;filter:alpha(opacity=100)}.messageView .b-content .messageItem .bodyText{color:#000;font-family:arial,sans-serif}.messageView .b-content .messageItem .bodyText .b-text-part a{color:#00f;text-decoration:underline}.messageView .b-content .messageItem .bodyText .b-text-part a:visited{color:#609}.messageView .b-content .messageItem .bodyText .b-text-part a:active{color:red}.messageView .b-content .messageItem .bodyText .b-text-part table{border-collapse:separate}.messageView .b-content .messageItem .bodyText .b-text-part blockquote{border-left:2px solid #000;margin:0;padding:0 10px}.messageView .b-content .messageItem .bodyText .b-text-part .rl-bq-switcher.hidden-bq{display:none}.messageView .b-content .messageItem .bodyText .b-text-part.rtl-text-part{direction:rtl}.messageView .b-content .messageItem .bodyText .b-text-part.html .mailso-body{margin:15px}.messageView .b-content .messageItem .bodyText .b-text-part.plain{padding:15px}.messageView .b-content .messageItem .bodyText .b-text-part.plain pre{margin:0;padding:0;font-family:arial,sans-serif;background:#fff;border:0;white-space:normal}.messageView .b-content .messageItem .bodyText .b-text-part.plain blockquote{border-left:2px solid #00f;color:#00f}.messageView .b-content .messageItem .bodyText .b-text-part.plain blockquote blockquote{border-left:2px solid green;color:green}.messageView .b-content .messageItem .bodyText .b-text-part.plain blockquote blockquote blockquote{border-left:2px solid red;color:red}html.rl-no-preview-pane .messageView .toolbar{padding-left:1px}html.rl-no-preview-pane .messageView .b-content{top:50px;bottom:5px;right:5px;border:1px solid #aaa;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.3);-moz-box-shadow:0 2px 8px rgba(0,0,0,.3);box-shadow:0 2px 8px rgba(0,0,0,.3);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}html.rl-no-preview-pane .messageView .b-content .buttonUp,html.rl-no-preview-pane .messageView .b-content .buttonUnFull,html.rl-no-preview-pane .messageView .b-content .buttonFull{top:70px}html.cssanimations.rl-anim .line-loading{height:5px!important}html.rl-message-fullscreen #rl-left,html.rl-message-fullscreen #rl-bottom{display:none!important}html.rl-message-fullscreen #rl-right .RL-MailMessageList,html.rl-message-fullscreen #rl-right .RL-SettingsPane,html.rl-message-fullscreen #rl-right .RL-SystemDropDown,html.rl-message-fullscreen #rl-right .RL-MailMessageView .messageView .toolbar{display:none!important}html.rl-message-fullscreen .messageView .b-content{position:fixed;margin:5px;top:0;left:0;right:0;bottom:0;z-index:10000}html.rl-message-fullscreen .messageView .b-content .buttonUp,html.rl-message-fullscreen .messageView .b-content .buttonUnFull{display:inline-block;top:36px}html.rl-message-fullscreen .messageView .b-content .buttonFull{display:none}.b-contacts-content.modal{position:absolute;right:0;top:0;bottom:0;left:0;width:900px;min-height:300px;max-height:700px;margin:auto}.b-contacts-content.modal .modal-body{overflow:auto;height:100%;background-color:#f5f5f5;padding:0}.b-contacts-content.modal .b-header-toolbar{height:40px;background-color:#aaa;color:#fff;background-color:#333;background-color:rgba(0,0,0,.8)!important}.b-contacts-content.modal .b-header-toolbar .close{color:#fff;opacity:1;filter:alpha(opacity=100)}.b-contacts-content.modal .b-header-toolbar .btn{margin-top:4px}.b-contacts-content.modal .b-header-toolbar .button-new-message{margin-left:8px}.b-contacts-content.modal .b-header-toolbar .button-delete{margin-left:8px}.b-contacts-content.modal .b-list-toopbar{padding:0;height:45px;text-align:center;width:250px;-webkit-box-shadow:inset 0 -1px 0 #ccc;-moz-box-shadow:inset 0 -1px 0 #ccc;box-shadow:inset 0 -1px 0 #ccc}.b-contacts-content.modal .b-list-toopbar .e-search{margin-top:7px}.b-contacts-content.modal .b-list-content{position:absolute;top:45px;bottom:60px;left:0;width:250px;overflow:hidden;overflow-y:auto}.b-contacts-content.modal .b-list-content .content{-webkit-overflow-scrolling:touch}.b-contacts-content.modal .b-list-content .listClear{color:#333;text-align:center;padding:10px;font-size:14px;line-height:13px;background-color:#fff}.b-contacts-content.modal .b-list-content .listEmptyList,.b-contacts-content.modal .b-list-content .listEmptyListLoading,.b-contacts-content.modal .b-list-content .listEmptySearchList{color:#999;text-align:center;padding:60px 10px;font-size:24px;line-height:30px}.b-contacts-content.modal .b-list-content.hideContactListCheckbox .checkedParent,.b-contacts-content.modal .b-list-content.hideContactListCheckbox .checkboxCkeckAll{display:none!important}.b-contacts-content.modal .b-list-content.hideContactListCheckbox .sidebarParent{margin-right:10px!important}.b-contacts-content.modal .b-list-content .e-contact-foreach{border-bottom:1px solid #ddd}.b-contacts-content.modal .b-list-content .e-contact-item{position:relative;height:45px;max-height:45px;line-height:45px;overflow:hidden;cursor:pointer;margin:0;border:0 solid transparent;z-index:100}.b-contacts-content.modal .b-list-content .e-contact-item .delimiter{position:relative;display:block;height:1px;background-color:#999;opacity:.2;filter:alpha(opacity=20)}.b-contacts-content.modal .b-list-content .e-contact-item .wrapper{padding:0}.b-contacts-content.modal .b-list-content .e-contact-item .sidebarParent{display:inline-block;width:6px;background-color:#eee;float:left;height:100%}.b-contacts-content.modal .b-list-content .e-contact-item.deleted{max-height:0;border-color:transparent!important}.b-contacts-content.modal .b-list-content .e-contact-item .checkedParent{display:inline-block;float:left;padding:0 8px 0 6px}.b-contacts-content.modal .b-list-content .e-contact-item .nameParent{display:block;overflow:hidden;text-overflow:ellipsis;color:#333;font-size:16px}.b-contacts-content.modal .b-list-content .e-contact-item .nameParent,.b-contacts-content.modal .b-list-content .e-contact-item .emailParent{white-space:nowrap}.b-contacts-content.modal .b-list-content .e-contact-item .displayName,.b-contacts-content.modal .b-list-content .e-contact-item .displayEmail{overflow:hidden;text-overflow:ellipsis}.b-contacts-content.modal .b-list-content .e-contact-item .displayImg{display:inline-block;float:right;position:relative;margin:0 5px}.b-contacts-content.modal .b-list-content .e-contact-item.checked{z-index:101}.b-contacts-content.modal .b-list-content .e-contact-item.checked .sidebarParent{background-color:#69A8F5}.b-contacts-content.modal .b-list-content .e-contact-item.selected{background-color:#fff;z-index:102}.b-contacts-content.modal .b-list-content .e-contact-item.selected .sidebarParent{background-color:#398CF2}.b-contacts-content.modal .b-view-content{position:absolute;top:0;bottom:60px;left:250px;right:0;overflow:hidden;overflow-y:auto;background-color:#fff;border-left:1px solid #ddd}.b-contacts-content.modal .b-view-content .content{-webkit-overflow-scrolling:touch}.b-contacts-content.modal .b-view-content .b-contact-view-desc{text-align:center;font-size:24px;line-height:30px;padding-top:120px;color:#999}.b-contacts-content.modal .b-view-content .top-part{margin-top:20px}.b-contacts-content.modal .b-view-content .top-part .control-label{text-align:center}.b-contacts-content.modal .b-view-content .image-wrapper{margin-left:30px;border-radius:10px}.b-contacts-content.modal .b-view-content .image-wrapper img{border-radius:10px}.b-contacts-content.modal .b-view-content .top-row{padding:10px 0;height:30px}.b-contacts-content.modal .b-view-content .contactEmptyValueClick,.b-contacts-content.modal .b-view-content .contactValueClick,.b-contacts-content.modal .b-view-content .contactValueInput{display:inline-block;font-size:24px;line-height:28px;height:28px}.b-contacts-content.modal .b-view-content .contactEmptyValueClick,.b-contacts-content.modal .b-view-content .contactValueClick{color:#ddd;cursor:pointer;margin:5px 0 0 7px}.b-contacts-content.modal .b-view-content .contactValueInput{padding-left:6px}.b-contacts-content.modal .b-view-content .contactEmptyValueClick{border-bottom:1px dashed #ddd}.b-contacts-content.modal .b-view-content .contactValueClick{color:#555;border-bottom:11px dashed transparent}.b-contacts-content.modal .b-view-content .contactValueClick:hover{color:#000;border-bottom:1px dashed #000}.b-contacts-content.modal .b-view-content .hasError .contactValueClick,.b-contacts-content.modal .b-view-content .hasError .contactValueInput{color:#ee5f5b;border:1px solid #ee5f5b}.b-contacts-content.modal .b-view-content .button-save-contact{position:absolute;bottom:20px;right:20px}.b-contacts-content .e-contact-item{position:relative;height:55px;max-height:60px;line-height:22px;overflow:hidden;cursor:pointer;margin:0;border:0 solid transparent;z-index:100}.b-compose.modal{width:850px;margin:10px auto}.b-compose.modal .modal-body{overflow:auto;padding:0}.b-compose .b-header-toolbar{height:40px;background-color:#aaa;color:#fff;background-color:#333;background-color:rgba(0,0,0,.8)!important}.b-compose .b-header-toolbar .close{color:#fff;opacity:1;filter:alpha(opacity=100)}.b-compose .b-header-toolbar .btn.disable.button-delete{visibility:hidden}.b-compose .b-header-toolbar .button-save,.b-compose .b-header-toolbar .button-delete,.b-compose .b-header-toolbar .saved-text{margin-left:8px}.b-compose .b-header-toolbar .disable.button-delete{margin-left:0}.b-compose .b-header{padding:10px;border-bottom:1px solid #333;background-color:#eee;color:#333}.b-compose .b-header .e-identity{font-weight:700}.b-compose .b-header .e-identity.multiply{cursor:pointer;border-bottom:1px dashed #555}.b-compose .b-header .e-row{line-height:30px}.b-compose .b-header .e-delimiter-row{line-height:2px;height:5px}.b-compose .b-header .e-label{text-align:right;width:1%;min-width:70px;padding:6px 10px}.b-compose .b-header .e-value{padding:2px 0}.b-compose .b-header .e-value textarea,.b-compose .b-header .e-value input[type=text]{width:98%}.b-compose .b-header .e-value textarea{height:40px}.b-compose .b-header .e-value .select2-container{width:100%}.b-compose .b-header .error-desc{color:red}.b-compose .b-header .b-appachments .b-attacment{display:inline-block;line-height:20px}.b-compose .b-header .b-appachments .b-attacment-in-process{display:inline-block;line-height:20px}.b-compose .b-header .b-appachments .b-attacment-in-process .uploading{display:none;padding-right:5px}.b-compose .b-header .b-appachments .b-attacment-in-process.uploading .uploading{display:inline}.b-compose .b-header .b-appachments .b-attacment-in-process .upload-progress{font-weight:700}.b-compose .b-header .b-appachments .b-attacment-in-process.error .namedStr{color:#888}.b-compose .b-header .b-appachments .b-attacment-in-process .error{color:red}.b-compose .b-header .b-appachments .b-attacment-in-process .close{float:left;padding-right:13px}.b-compose .b-attachment-button{display:inline-block}.b-compose .b-attachment-place{position:absolute;height:120px;border:2px #777 dashed;line-height:119px;text-align:center;background-color:#fff;z-index:300;left:20px;right:20px;font-size:24px}.b-compose .b-attachment-place.drag-and-drop-over{background:#777;color:#fff}.b-compose .editorTextArea,.b-compose .editorHtmlArea{background:#fff;color:#000;font-family:Arial,Verdana,Geneva,sans-serif;font-size:14px}.b-compose .editorTextArea table,.b-compose .editorHtmlArea table{border-collapse:separate}.b-compose .editorTextArea blockquote,.b-compose .editorHtmlArea blockquote{border:0;border-left:solid 2px #444;margin-left:5px;margin:5px 0;padding-left:5px}.b-admin-left .b-toolbar{position:absolute;top:0;right:0;left:0;height:34px;padding:8px 0 0 8px}.b-admin-left .b-content{position:absolute;top:68px;bottom:8px;left:0;right:0;overflow:hidden}.b-admin-left .b-content .content{-webkit-overflow-scrolling:touch}.b-admin-menu .e-item{overflow:hidden;text-decoration:none;outline:0}.b-admin-menu .e-link{position:relative;display:block;height:30px;line-height:29px;cursor:pointer;font-size:18px;z-index:1;cursor:default;background-color:transparent;color:#888;padding:4px 10px;outline:0;text-decoration:none}.b-admin-menu .e-item.selectable .e-link{cursor:pointer}.b-admin-menu .e-item.selectable:hover .e-link,.b-admin-menu .e-item.selectable.selected .e-link{background-color:#555;color:#fff}.b-admin-right .b-toolbar{position:absolute;top:0;right:0;left:0;height:34px;padding:8px;color:#fff}.b-admin-right .b-content{position:absolute;top:58px;bottom:8px;left:0;right:8px;overflow-y:auto;z-index:2;background-color:#fff;border:1px solid #aaa;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.3);-moz-box-shadow:0 2px 8px rgba(0,0,0,.3);box-shadow:0 2px 8px rgba(0,0,0,.3);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.b-admin-right .b-content .content{-webkit-overflow-scrolling:touch}.b-admin-right .b-settings-content{padding:20px}.b-admin-domains .process-place{width:600px;padding:14px 0;text-align:center;visibility:hidden}.b-admin-domains-list-table{width:600px}.b-admin-domains-list-table .e-item .e-action{cursor:pointer}.b-admin-domains-list-table .e-item .domain-name{display:inline-block;word-break:break-all;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.b-admin-domains-list-table .e-item.disabled .domain-name{color:#bbb}.b-admin-domains-list-table .e-item .button-delete{margin-right:15px;visibility:hidden;opacity:0;filter:alpha(opacity=0)}.b-admin-domains-list-table .e-item .delete-access.button-delete{visibility:visible;margin-right:0;opacity:1;filter:alpha(opacity=100)}.b-admin-domains-list-table .e-item .delete-domain,.b-admin-domains-list-table .e-item .disable-domain{cursor:pointer;opacity:.5;filter:alpha(opacity=50)}.b-admin-domains-list-table .e-item.disabled .disable-domain{opacity:.5;filter:alpha(opacity=50)}.b-admin-domains-list-table .e-item .delete-domain:hover,.b-admin-domains-list-table .e-item .disable-domain:hover{opacity:1;filter:alpha(opacity=100)}.b-domain-content.modal{width:645px}.b-domain-content .modal-header{background-color:#fff}.b-domain-content .modal-body{position:relative;overflow:hidden;width:1300px;height:390px}.b-domain-content.domain-edit .modal-body{height:350px}.b-domain-content.domain-white-list-page .modal-body{left:-640px}.b-domain-content .error-desc{color:red;margin-left:10px}.b-domain-content .testing-done .imap-header,.b-domain-content .testing-done .smtp-header{color:green;font-weight:700}.b-domain-content .testing-error .imap-header,.b-domain-content .testing-error .smtp-header{color:red}.b-admin-packages .alert{width:650px}.b-admin-packages .process-place{visibility:hidden}.b-admin-packages-list-table{width:700px}.b-admin-packages-list-table .e-item .package-img{font-size:12px;margin-right:2px}.b-admin-packages-list-table .e-item .package-name.core{font-weight:700}.b-admin-packages-list-table .e-item .package-desc{color:#999;font-size:12px}.b-admin-packages-list-table .e-item .e-action{cursor:pointer}.b-admin-packages-list-table .e-item .package-release-parent,.b-admin-packages-list-table .e-item .package-actions-parent{text-align:center}.b-admin-packages-list-table .e-item .package-actions-parent{vertical-align:middle}.b-admin-plugins .process-place{visibility:hidden}.b-admin-plugins-list-table.disabled{opacity:.5;filter:alpha(opacity=50);background-color:#eee}.b-admin-plugins-list-table .e-item .e-action{cursor:pointer}.b-admin-plugins-list-table .e-item .plugin-img{font-size:12px;margin-right:2px}.b-admin-plugins-list-table .e-item.disabled .plugin-img,.b-admin-plugins-list-table .e-item.disabled .plugin-name{color:#bbb}.b-admin-plugins-list-table .e-item.disabled .disable-plugin{opacity:.5;filter:alpha(opacity=50)}.b-admin-plugin-property .help-block{margin-bottom:5px}.b-plugin-content.modal{width:660px}.b-plugin-content.modal .modal-body{overflow:auto}.b-plugin-content .modal-header{background-color:#fff}.b-plugin-content .information{display:inline-block;background-color:#ddd;border-radius:10px;cursor:pointer;height:25px;width:30px;text-align:center;padding-top:5px}.b-plugin-content textarea{width:400px;height:50px}.popups .b-activate-content{width:700px}.popups .b-activate-content .modal-header{background-color:#fff}.popups .b-activate-content .help-inline{padding-left:0}.b-settins-left .b-toolbar{position:absolute;top:0;right:0;left:0;height:34px;padding:8px 0 0 8px}.b-settins-left .b-content{position:absolute;top:68px;bottom:8px;left:0;right:0;overflow:hidden}.b-settins-left .b-content .content{-webkit-overflow-scrolling:touch}.b-settings-menu .e-item{overflow:hidden;text-decoration:none;outline:0}.b-settings-menu .e-link{position:relative;display:block;height:30px;line-height:29px;font-size:18px;z-index:1;cursor:default;background-color:transparent;color:#888;padding:4px 10px;outline:0;text-decoration:none}.b-settings-menu .e-item.selectable .e-link{cursor:pointer}.b-settings-menu .e-item.selectable:hover .e-link,.b-settings-menu .e-item.selectable.selected .e-link{background-color:#555;color:#fff}.b-settins-right .b-toolbar{position:absolute;top:0;right:0;left:0;height:34px;padding:8px 5px;color:#fff}.b-settins-right .b-content{position:absolute;top:58px;bottom:8px;left:0;right:8px;overflow-y:auto;z-index:2;background-color:#fff;border:1px solid #aaa;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.3);-moz-box-shadow:0 2px 8px rgba(0,0,0,.3);box-shadow:0 2px 8px rgba(0,0,0,.3);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.b-settins-right .b-content .content{-webkit-overflow-scrolling:touch}.b-settins-right .b-settings-content{padding:20px}.b-settings-general .notification-desc-denied{color:#999;display:none}.b-settings-general .denied-by-browser .notification-desc-denied{display:inline}.b-settings-general .denied-by-browser .notification-desc{color:#999}.b-settings-general .flag-selector{padding-top:5px}.b-settings-general .flag-name{border-bottom:1px dashed #555}.b-settings-accounts .process-place{text-align:center;width:600px;padding:14px 0}.b-settings-accounts .list-table{width:600px}.b-settings-accounts .list-table td{padding:4px 8px;line-height:30px}.b-settings-accounts .list-table .account-img{font-size:12px;margin-right:5px}.b-settings-accounts .list-table .account-name{display:inline-block;word-break:break-all;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;line-height:22px;cursor:default}.b-settings-accounts .account-item .button-delete{margin-right:15px;margin-top:5px;visibility:hidden;opacity:0;filter:alpha(opacity=0)}.b-settings-accounts .account-item .delete-access.button-delete{visibility:visible;margin-right:0;opacity:1;filter:alpha(opacity=100)}.b-settings-accounts .account-item .delete-account{cursor:pointer;opacity:.5;filter:alpha(opacity=50)}.b-settings-identities .process-place{text-align:center;width:600px;padding:14px 0}.b-settings-identities .list-table{width:600px}.b-settings-identities .list-table td{padding:4px 8px;line-height:30px}.b-settings-identities .list-table .identity-img{font-size:12px;margin-right:5px}.b-settings-identities .list-table .identity-name{display:inline-block;word-break:break-all;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;line-height:22px;cursor:pointer}.b-settings-identities .identity-item .e-action{cursor:pointer}.b-settings-identities .identity-item .button-delete{margin-right:15px;margin-top:5px;visibility:hidden;opacity:0;filter:alpha(opacity=0)}.b-settings-identities .identity-item .delete-access.button-delete{visibility:visible;margin-right:0;opacity:1;filter:alpha(opacity=100)}.b-settings-identities .identity-item .delete-identity{cursor:pointer;opacity:.5;filter:alpha(opacity=50)}.b-settings-folders.ignore-folder-subscribe .subscribe-folder,.b-settings-folders.ignore-folder-subscribe .unsubscribe-folder{display:none}.b-settings-folders .process-place{text-align:center;width:600px;padding:14px 0}.b-settings-folders .folders-list-error{width:550px;margin:10px 0}.b-settings-folders .list-table{width:600px}.b-settings-folders .list-table .e-action{cursor:pointer}.b-settings-folders .list-table td{padding:4px 8px;line-height:30px}.b-settings-folders .list-table .folder-padding{display:inline-block;width:0}.b-settings-folders .list-table .folder-name{display:inline-block;word-break:break-all;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-left:7px;line-height:22px;cursor:default}.b-settings-folders .list-table .folder-system-name{display:inline-block;line-height:22px;color:#999;cursor:default}.b-settings-folders .list-table .folder-name.can-be-edited:hover{border-bottom:1px dashed #333;cursor:pointer}.b-settings-folders .list-table .folder-name-input{border-width:1px;margin-bottom:0}.b-settings-folders .folder-item .button-delete{margin-right:15px;margin-top:5px;visibility:hidden;opacity:0;filter:alpha(opacity=0)}.b-settings-folders .folder-item .delete-access.button-delete{visibility:visible;margin-right:0;opacity:1;filter:alpha(opacity=100)}.b-settings-folders .folder-item .delete-folder,.b-settings-folders .folder-item .subscribe-folder,.b-settings-folders .folder-item .unsubscribe-folder{cursor:pointer;opacity:.6;filter:alpha(opacity=60)}.b-settings-folders .folder-item .unsubscribe-folder{opacity:.25;filter:alpha(opacity=25)}.b-settings-folders .folder-padding.deep-1{width:25px}.b-settings-folders .folder-padding.deep-2{width:40px}.b-settings-folders .folder-padding.deep-3{width:55px}.b-settings-folders .folder-padding.deep-4{width:70px}.b-settings-folders .folder-padding.deep-5{width:85px}.b-themes-list .e-item{display:inline-block;border:2px solid transparent;cursor:pointer;color:#000;background-color:#fff;padding:16px;margin:5px}.b-themes-list .e-item:hover{border:2px solid grey}.b-themes-list .e-item.selected{background-color:#eee;border:2px solid #000}.b-themes-list .e-item .e-image{width:100px;height:100px;border:1px solid #ddd}@keyframes highlight-folder-row{0%{transform:scale(1)}50%{transform:scale(1.1)}100%{transform:scale(1)}}@-moz-keyframes highlight-folder-row{0%{-moz-transform:scale(1)}50%{-moz-transform:scale(1.1)}100%{-moz-transform:scale(1)}}@-webkit-keyframes highlight-folder-row{0%{-webkit-transform:scale(1)}50%{-webkit-transform:scale(1.1)}100%{-webkit-transform:scale(1)}}@-webkit-keyframes textLoadingAnimationKeyFrame{0%{opacity:1}33%{opacity:0}100%{opacity:1}}@-moz-keyframes textLoadingAnimationKeyFrame{0%{opacity:1}33%{opacity:0}100%{opacity:1}}@keyframes textLoadingAnimationKeyFrame{0%{opacity:1}33%{opacity:0}100%{opacity:1}}@-webkit-keyframes animate-stripes{0%{background-position:0 0}100%{background-position:60px 0}}@-moz-keyframes animate-stripes{0%{background-position:0 0}100%{background-position:60px 0}}@keyframes animate-stripes{0%{background-position:0 0}100%{background-position:60px 0}}.rl-anim.rgba.cssanimations.backgroundsize .e-strip-animation{-webkit-background-size:60px 60px;-moz-background-size:60px 60px;background-size:60px 60px;background-image:-webkit-linear-gradient(135deg,rgba(0,0,0,.1) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.1) 50%,rgba(0,0,0,.1) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(135deg,rgba(0,0,0,.1) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.1) 50%,rgba(0,0,0,.1) 75%,transparent 75%,transparent);background-image:-ms-linear-gradient(135deg,rgba(0,0,0,.1) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.1) 50%,rgba(0,0,0,.1) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(135deg,rgba(0,0,0,.1) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.1) 50%,rgba(0,0,0,.1) 75%,transparent 75%,transparent);background-image:linear-gradient(135deg,rgba(0,0,0,.1) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.1) 50%,rgba(0,0,0,.1) 75%,transparent 75%,transparent);-webkit-animation:animate-stripes 2s linear infinite;-moz-animation:animate-stripes 2s linear infinite;animation:animate-stripes 2s linear infinite}.rl-anim.csstransitions .b-settings-folders .folder-item .button-delete{-webkit-transition:all .2s linear;-moz-transition:all .2s linear;-o-transition:all .2s linear;transition:all .2s linear}.rl-anim.csstransitions .b-settings-accounts .account-item .button-delete{-webkit-transition:all .2s linear;-moz-transition:all .2s linear;-o-transition:all .2s linear;transition:all .2s linear}.rl-anim.csstransitions .b-settings-identities .identity-item .button-delete{-webkit-transition:all .2s linear;-moz-transition:all .2s linear;-o-transition:all .2s linear;transition:all .2s linear}.rl-anim.csstransitions .b-admin-domains .e-item .button-delete{-webkit-transition:all .2s linear;-moz-transition:all .2s linear;-o-transition:all .2s linear;transition:all .2s linear}.rl-anim.csstransitions .b-compose .button-delete{-webkit-transition:margin-left .2s linear;-moz-transition:margin-left .2s linear;-o-transition:margin-left .2s linear;transition:margin-left .2s linear}.rl-anim.cssanimations .b-folders .e-item .anim-action-class{-webkit-animation:highlight-folder-row .5s linear;-moz-animation:highlight-folder-row .5s linear;animation:highlight-folder-row .5s linear}.rl-anim.csstransitions .messageList .messageListItem{-webkit-transition:max-height 400ms ease;-moz-transition:max-height 400ms ease;-o-transition:max-height 400ms ease;transition:max-height 400ms ease}.rl-anim.csstransitions .messageList .listDragOver{-webkit-transition:all 400ms ease;-moz-transition:all 400ms ease;-o-transition:all 400ms ease;transition:all 400ms ease}.rl-anim.csstransitions .b-list-content .e-contact-item{-webkit-transition:max-height 400ms ease;-moz-transition:max-height 400ms ease;-o-transition:max-height 400ms ease;transition:max-height 400ms ease}.rl-anim.csstransitions .modal.b-domain-content .modal-body{-webkit-transition:left 500ms ease;-moz-transition:left 500ms ease;-o-transition:left 500ms ease;transition:left 500ms ease}.rl-anim.csstransitions .modal-open .popups .modal{-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-o-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transition:.3s all cubic-bezier(0.250,.460,.450,.940);-moz-transition:.3s all cubic-bezier(0.250,.460,.450,.940);-o-transition:.3s all cubic-bezier(0.250,.460,.450,.940);transition:.3s all cubic-bezier(0.250,.460,.450,.940);-webkit-transform:scale(0.9);-moz-transform:scale(0.9);-ms-transform:scale(0.9);-o-transform:scale(0.9);transform:scale(0.9)}.rl-anim .modal-open .popups .popup-active.modal{-webkit-transform:none;-moz-transform:none;-o-transform:none;transform:none}.rl-anim.cssanimations .b-compose.loading .b-header-toolbar{-webkit-background-size:60px 60px;-moz-background-size:60px 60px;background-size:60px 60px;background-image:-webkit-linear-gradient(135deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(135deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);background-image:-ms-linear-gradient(135deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(135deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);background-image:linear-gradient(135deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);-webkit-animation:animate-stripes 2s linear infinite;-moz-animation:animate-stripes 2s linear infinite;animation:animate-stripes 2s linear infinite}.textLoadingAnimationD1,.textLoadingAnimationD2,.textLoadingAnimationD3{-webkit-animation:textLoadingAnimationKeyFrame 1s linear infinite 0s;-moz-animation:textLoadingAnimationKeyFrame 1s linear infinite 0s;animation:textLoadingAnimationKeyFrame 1s linear infinite 0s}.textLoadingAnimationD2{-webkit-animation-delay:.3s;-moz-animation-delay:.3s;animation-delay:.3s}.textLoadingAnimationD3{-webkit-animation-delay:.6s;-moz-animation-delay:.6s;animation-delay:.6s}.editorToolbar{position:relative;height:20px;margin-top:10px;line-height:19px}.editorToolbar.editorHideToolbar .editorToolbarButtom{display:none}.editorToolbar .editorSwitcher{display:inline-block;vertical-align:middle}.editorToolbar .editorToolbarButtom{display:inline-block;width:16px;height:16px;padding:3px}.editorToolbar .editorToolbarButtom a{display:inline-block;border:0;margin:0;padding:0;width:16px;height:16px;cursor:default;background:url(images/editor.png)}.editorToolbar .editorToolbarButtom a.bold{background-position:0 0}.editorToolbar .editorToolbarButtom a.italic{background-position:-16px 0}.editorToolbar .editorToolbarButtom a.underline{background-position:-32px 0}.editorToolbar .editorToolbarButtom a.strikethrough{background-position:-48px 0}.editorToolbar .editorToolbarButtom a.link{background-position:-64px 0}.editorToolbar .editorToolbarButtom a.unlink{background-position:-80px 0}.editorToolbar .editorToolbarButtom a.orderedlist{background-position:-96px 0}.editorToolbar .editorToolbarButtom a.unorderedlist{background-position:-112px 0}.editorToolbar .editorToolbarButtom a.image{background-position:-128px 0}.editorToolbar .editorToolbarButtom a.h1{background-position:0 -16px}.editorToolbar .editorToolbarButtom a.h2{background-position:-16px -16px}.editorToolbar .editorToolbarButtom a.h3{background-position:-32px -16px}.editorToolbar .editorToolbarButtom a.h4{background-position:-48px -16px}.editorToolbar .editorToolbarButtom a.h5{background-position:-64px -16px}.editorToolbar .editorToolbarButtom a.h6{background-position:-80px -16px}.editorToolbar .editorToolbarButtom a.subscript{background-position:-96px -16px}.editorToolbar .editorToolbarButtom a.superscript{background-position:-112px -16px}.editorToolbar .editorToolbarButtom a.indent{background-position:-128px -16px}.editorToolbar .editorToolbarButtom a.outdent{background-position:-144px -16px}.editorToolbar .editorToolbarButtom a.horizontalrule{background-position:-160px -16px}.editorToolbar .editorToolbarButtom a.p{background-position:-176px -16px}.editorToolbar .editorToolbarButtom a.justifyleft{background-position:0 -32px}.editorToolbar .editorToolbarButtom a.justifycenter{background-position:-16px -32px}.editorToolbar .editorToolbarButtom a.justifyright{background-position:-32px -32px}.editorToolbar .editorToolbarButtom a.increasefontsize{background-position:-48px -32px}.editorToolbar .editorToolbarButtom a.decreasefontsize{background-position:-64px -32px}.editorToolbar .editorToolbarButtom a.forecolor{background-position:-80px -32px}.editorToolbar .editorToolbarButtom a.backcolor{background-position:-80px -32px}.editorToolbar .editorToolbarButtom a.removeformat{background-position:-144px 0}.textAreaParent{padding:0}.textAreaParent .editorHtmlArea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:0!important;overflow:auto;overflow-y:scroll;font-family:arial,sans-serif;font-size:13px;line-height:16px;margin:0;padding:8px}.textAreaParent .editorHtmlArea ul{padding-left:40px}.textAreaParent .editorHtmlArea ul li{list-style-type:disc!important}.textAreaParent .editorHtmlArea ol{padding-left:40px}.textAreaParent .editorHtmlArea ol li{list-style-type:decimal!important}.textAreaParent .editorHtmlArea blockquote{border-left:solid 2px #444;margin-left:5px;padding-left:5px}.textAreaParent .editorHtmlArea img{vertical-align:bottom}.textAreaParent .editorHtmlArea.editorDragOver{background:#ffffef}.textAreaParent .editorTextArea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;border:0!important;width:100%;line-height:16px;margin:0;padding:8px;overflow:auto;overflow-y:scroll}.editorColorPicker .editorCpColors{float:left;margin:0;clear:both;width:128px;border:1px solid #000;backgroud:#000}.editorColorPicker .editorCpColors .editorCpColor{border:1px solid #fff;float:left;width:14px;height:14px}.editorSwitcher{color:#369;text-decoration:underline;cursor:pointer;float:right;padding-bottom:6px}.editorFontStylePicker .editorFpFonts{padding:5px;border:1px solid #000;background-color:#fff}.editorFontStylePicker .editorFpFonts .editorFpFont{padding:5px} \ No newline at end of file diff --git a/rainloop/v/1.3.9.485/static/css/flags.png b/rainloop/v/1.3.10.490/static/css/flags.png similarity index 100% rename from rainloop/v/1.3.9.485/static/css/flags.png rename to rainloop/v/1.3.10.490/static/css/flags.png diff --git a/rainloop/v/1.3.9.485/static/css/fonts/icomoon.dev.svg b/rainloop/v/1.3.10.490/static/css/fonts/icomoon.dev.svg similarity index 100% rename from rainloop/v/1.3.9.485/static/css/fonts/icomoon.dev.svg rename to rainloop/v/1.3.10.490/static/css/fonts/icomoon.dev.svg diff --git a/rainloop/v/1.3.9.485/static/css/fonts/icomoon.eot b/rainloop/v/1.3.10.490/static/css/fonts/icomoon.eot similarity index 100% rename from rainloop/v/1.3.9.485/static/css/fonts/icomoon.eot rename to rainloop/v/1.3.10.490/static/css/fonts/icomoon.eot diff --git a/rainloop/v/1.3.9.485/static/css/fonts/icomoon.svg b/rainloop/v/1.3.10.490/static/css/fonts/icomoon.svg similarity index 100% rename from rainloop/v/1.3.9.485/static/css/fonts/icomoon.svg rename to rainloop/v/1.3.10.490/static/css/fonts/icomoon.svg diff --git a/rainloop/v/1.3.9.485/static/css/fonts/icomoon.ttf b/rainloop/v/1.3.10.490/static/css/fonts/icomoon.ttf similarity index 100% rename from rainloop/v/1.3.9.485/static/css/fonts/icomoon.ttf rename to rainloop/v/1.3.10.490/static/css/fonts/icomoon.ttf diff --git a/rainloop/v/1.3.9.485/static/css/fonts/icomoon.woff b/rainloop/v/1.3.10.490/static/css/fonts/icomoon.woff similarity index 100% rename from rainloop/v/1.3.9.485/static/css/fonts/icomoon.woff rename to rainloop/v/1.3.10.490/static/css/fonts/icomoon.woff diff --git a/rainloop/v/1.3.9.485/static/css/images/editor.png b/rainloop/v/1.3.10.490/static/css/images/editor.png similarity index 100% rename from rainloop/v/1.3.9.485/static/css/images/editor.png rename to rainloop/v/1.3.10.490/static/css/images/editor.png diff --git a/rainloop/v/1.3.9.485/static/css/images/empty-contact.png b/rainloop/v/1.3.10.490/static/css/images/empty-contact.png similarity index 100% rename from rainloop/v/1.3.9.485/static/css/images/empty-contact.png rename to rainloop/v/1.3.10.490/static/css/images/empty-contact.png diff --git a/rainloop/v/1.3.9.485/static/css/images/grey.png b/rainloop/v/1.3.10.490/static/css/images/grey.png similarity index 100% rename from rainloop/v/1.3.9.485/static/css/images/grey.png rename to rainloop/v/1.3.10.490/static/css/images/grey.png diff --git a/rainloop/v/1.3.9.485/static/css/images/icom-message-notification.png b/rainloop/v/1.3.10.490/static/css/images/icom-message-notification.png similarity index 100% rename from rainloop/v/1.3.9.485/static/css/images/icom-message-notification.png rename to rainloop/v/1.3.10.490/static/css/images/icom-message-notification.png diff --git a/rainloop/v/1.3.9.485/static/css/images/loader-black.gif b/rainloop/v/1.3.10.490/static/css/images/loader-black.gif similarity index 100% rename from rainloop/v/1.3.9.485/static/css/images/loader-black.gif rename to rainloop/v/1.3.10.490/static/css/images/loader-black.gif diff --git a/rainloop/v/1.3.9.485/static/css/images/loader-white.gif b/rainloop/v/1.3.10.490/static/css/images/loader-white.gif similarity index 100% rename from rainloop/v/1.3.9.485/static/css/images/loader-white.gif rename to rainloop/v/1.3.10.490/static/css/images/loader-white.gif diff --git a/rainloop/v/1.3.9.485/static/css/images/sync.gif b/rainloop/v/1.3.10.490/static/css/images/sync.gif similarity index 100% rename from rainloop/v/1.3.9.485/static/css/images/sync.gif rename to rainloop/v/1.3.10.490/static/css/images/sync.gif diff --git a/rainloop/v/1.3.9.485/static/css/images/sync.png b/rainloop/v/1.3.10.490/static/css/images/sync.png similarity index 100% rename from rainloop/v/1.3.9.485/static/css/images/sync.png rename to rainloop/v/1.3.10.490/static/css/images/sync.png diff --git a/rainloop/v/1.3.9.485/static/css/images/white.png b/rainloop/v/1.3.10.490/static/css/images/white.png similarity index 100% rename from rainloop/v/1.3.9.485/static/css/images/white.png rename to rainloop/v/1.3.10.490/static/css/images/white.png diff --git a/rainloop/v/1.3.9.485/static/css/select2-spinner.gif b/rainloop/v/1.3.10.490/static/css/select2-spinner.gif similarity index 100% rename from rainloop/v/1.3.9.485/static/css/select2-spinner.gif rename to rainloop/v/1.3.10.490/static/css/select2-spinner.gif diff --git a/rainloop/v/1.3.9.485/static/css/select2.png b/rainloop/v/1.3.10.490/static/css/select2.png similarity index 100% rename from rainloop/v/1.3.9.485/static/css/select2.png rename to rainloop/v/1.3.10.490/static/css/select2.png diff --git a/rainloop/v/1.3.9.485/static/css/select2x2.png b/rainloop/v/1.3.10.490/static/css/select2x2.png similarity index 100% rename from rainloop/v/1.3.9.485/static/css/select2x2.png rename to rainloop/v/1.3.10.490/static/css/select2x2.png diff --git a/rainloop/v/1.3.9.485/static/favicon.ico b/rainloop/v/1.3.10.490/static/favicon.ico similarity index 100% rename from rainloop/v/1.3.9.485/static/favicon.ico rename to rainloop/v/1.3.10.490/static/favicon.ico diff --git a/rainloop/v/1.3.9.485/static/favicon.png b/rainloop/v/1.3.10.490/static/favicon.png similarity index 100% rename from rainloop/v/1.3.9.485/static/favicon.png rename to rainloop/v/1.3.10.490/static/favicon.png diff --git a/rainloop/v/1.3.10.490/static/js/admin.min.js b/rainloop/v/1.3.10.490/static/js/admin.min.js new file mode 100644 index 0000000000..70d7f7747a --- /dev/null +++ b/rainloop/v/1.3.10.490/static/js/admin.min.js @@ -0,0 +1,159 @@ +(function(g,i,d,fa,y,j){function p(){this.sBase="#/";this.sCdnStaticDomain=e.settingsGet("CdnStaticDomain");this.sVersion=e.settingsGet("Version");this.sSpecSuffix=e.settingsGet("AuthAccountHash")||"0";this.sServer=(e.settingsGet("IndexFile")||"./")+"?";this.sCdnStaticDomain=""===this.sCdnStaticDomain?this.sCdnStaticDomain:"/"===this.sCdnStaticDomain.substr(-1)?this.sCdnStaticDomain:this.sCdnStaticDomain+"/"}function N(){}function O(){}function P(){var a=j.find([O,N],function(a){return a.supported()}); +a&&(this.oDriver=new a)}function ga(){}function t(a,b){this.sPosition=c.pString(a);this.sTemplate=c.pString(b);this.viewModelName="";this.viewModelVisibility=d.observable(!1);"Popups"===this.sPosition&&(this.modalVisibility=d.observable(!1));this.viewModelDom=null}function w(a,b){this.sScreenName=a;this.aViewModels=c.isArray(b)?b:[]}function r(){this.sDefaultScreenName="";this.oScreens={};this.oCurrentScreen=this.oBoot=null;this.popupVisibility=d.observable(!1);this.popupVisibility.subscribe(function(a){e&& +e.popupVisibility(a)})}function s(a,b){this.email=a||"";this.name=b||"";this.privateType=null;this.clearDuplicateName()}function B(){t.call(this,"Popups","PopupsDomain");this.edit=d.observable(!1);this.saving=d.observable(!1);this.savingError=d.observable("");this.whiteListPage=d.observable(!1);this.testing=d.observable(!1);this.testingDone=d.observable(!1);this.testingImapError=d.observable(!1);this.testingSmtpError=d.observable(!1);this.imapServerFocus=d.observable(!1);this.smtpServerFocus=d.observable(!1); +this.name=d.observable("");this.imapServer=d.observable("");this.imapPort=d.observable(m.Values.ImapDefaulPort);this.imapSecure=d.observable(f.ServerSecure.None);this.imapShortLogin=d.observable(!1);this.smtpServer=d.observable("");this.smtpPort=d.observable(m.Values.SmtpDefaulPort);this.smtpSecure=d.observable(f.ServerSecure.None);this.smtpShortLogin=d.observable(!1);this.smtpAuth=d.observable(!0);this.whiteList=d.observable("");this.imapServerFocus.subscribe(function(a){a&&(""!==this.name()&&""=== +this.imapServer())&&this.imapServer(this.name())},this);this.smtpServerFocus.subscribe(function(a){a&&(""!==this.imapServer()&&""===this.smtpServer())&&this.smtpServer(this.imapServer())},this);this.headerText=d.computed(function(){var a=this.name();return this.edit()?'Edit Domain "'+a+'"':"Add Domain"+(""===a?"":' "'+a+'"')},this);this.domainIsComputed=d.computed(function(){return""!==this.name()&&""!==this.imapServer()&&""!==this.imapPort()&&""!==this.smtpServer()&&""!==this.smtpPort()},this);this.canBeTested= +d.computed(function(){return!this.testing()&&this.domainIsComputed()},this);this.canBeSaved=d.computed(function(){return!this.saving()&&this.domainIsComputed()},this);this.createOrAddCommand=c.createCommand(this,function(){this.saving(!0);e.remote().createOrUpdateDomain(j.bind(this.onDomainCreateOrSaveResponse,this),!this.edit(),this.name(),this.imapServer(),this.imapPort(),this.imapSecure(),this.imapShortLogin(),this.smtpServer(),this.smtpPort(),this.smtpSecure(),this.smtpShortLogin(),this.smtpAuth(), +this.whiteList())},this.canBeSaved);this.testConnectionCommand=c.createCommand(this,function(){this.whiteListPage(!1);this.testingDone(!1);this.testingImapError(!1);this.testingSmtpError(!1);this.testing(!0);e.remote().testConnectionForDomain(j.bind(this.onTestConnectionResponse,this),this.imapServer(),this.imapPort(),this.imapSecure(),this.smtpServer(),this.smtpPort(),this.smtpSecure(),this.smtpAuth())},this.canBeTested);this.whiteListCommand=c.createCommand(this,function(){this.whiteListPage(!this.whiteListPage())})} +function Q(){t.call(this,"Popups","PopupsPlugin");var a=this;this.onPluginSettingsUpdateResponse=j.bind(this.onPluginSettingsUpdateResponse,this);this.saveError=d.observable("");this.name=d.observable("");this.readme=d.observable("");this.configures=d.observableArray([]);this.hasReadme=d.computed(function(){return""!==this.readme()},this);this.hasConfiguration=d.computed(function(){return 0').appendTo("body");H.on("error",function(a){e&&(a&&a.originalEvent&&a.originalEvent.message&&-1===c.inArray(a.originalEvent.message, +["Script error.","Uncaught Error: Error calling method on NPObject."]))&&e.remote().jsError(c.emptyFunction,a.originalEvent.message,a.originalEvent.filename,a.originalEvent.lineno,location&&location.toString?location.toString():"",I.attr("class"),c.microtime()-k.now)})}function v(){u.call(this);this.oCache=this.oRemote=this.oData=null}var m={},f={},l={},c={},o={},k={},A={settings:[],"settings-removed":[],"settings-disabled":[]},q=null,U=g.rainloopAppData||{},da=g.rainloopI18N||{},I=i("html"),H=i(g), +ka=i(g.document),V=g.Notification&&g.Notification.requestPermission?g.Notification:null,e=null;k.now=(new Date).getTime();k.minuteTick=d.observable(!0);k.fiveMinuteTick=d.observable(!0);k.langChangeTick=d.observable(!0);k.iAjaxErrorCount=0;k.iTokenErrorCount=0;k.iMessageBodyCacheCount=0;k.bUnload=!1;k.sUserAgent=(navigator.userAgent||"").toLowerCase();k.bIsiOSDevice=-1/g,">").replace(/"/g,""").replace(/'/g,"'"):""};c.splitPlainText=function(a, +b){for(var h="",d="",e=a,f=0,g=0,b=c.isUnd(b)?100:b;e.length>b;)d=e.substring(0,b),f=d.lastIndexOf(" "),g=d.lastIndexOf("\n"),-1!==g&&(f=g),-1===f&&(f=b),h+=d.substring(0,f)+"\n",e=e.substring(f+1);return h+e};var W={};c.timeOutAction=function(a,b,h){c.isUnd(W[a])&&(W[a]=0);g.clearTimeout(W[a]);W[a]=g.setTimeout(b,h)};var ea={};c.timeOutActionSecond=function(a,b,h){ea[a]||(ea[a]=g.setTimeout(function(){b();ea[a]=0},h))};var z=!1;c.audio=function(a,b){if(!1===z)if(k.bIsiOSDevice)z=null;else{var h= +!1,c=!1,d=g.Audio?new g.Audio:null;d&&d.canPlayType&&d.play?((h=""!==d.canPlayType('audio/mpeg; codecs="mp3"'))||(c=""!==d.canPlayType('audio/ogg; codecs="vorbis"')),h||c?(z=d,z.preload="none",z.loop=!1,z.autoplay=!1,z.muted=!1,z.src=h?a:b):z=null):z=null}return z};c.hos=function(a,b){return a&&Object.hasOwnProperty?Object.hasOwnProperty.call(a,b):!1};c.i18n=function(a,b,h){var d="",a=c.isUnd(da[a])?c.isUnd(h)?a:h:da[a];if(!c.isUnd(b)&&!c.isNull(b))for(d in b)c.hos(b,d)&&(a=a.replace("%"+d+"%",b[d])); +return a};c.i18nToNode=function(a){j.defer(function(){i(".i18n",a).each(function(){var a=i(this),h="";(h=a.data("i18n-text"))?a.text(c.i18n(h)):((h=a.data("i18n-html"))&&a.html(c.i18n(h)),(h=a.data("i18n-placeholder"))&&a.attr("placeholder",c.i18n(h)))})})};c.i18nToDoc=function(){g.rainloopI18N&&(da=g.rainloopI18N||{},c.i18nToNode(ka),k.langChangeTick(!k.langChangeTick()));g.rainloopI18N={}};c.initOnStartOrLangChange=function(a,b,c){a&&a.call(b);c?k.langChangeTick.subscribe(function(){a&&a.call(b); +c.call(b)}):a&&k.langChangeTick.subscribe(a,b)};c.inFocus=function(){var a=document.activeElement;return a&&("INPUT"===a.tagName||"TEXTAREA"===a.tagName||"IFRAME"===a.tagName||"DIV"===a.tagName&&"editorHtmlArea"===a.className&&a.contentEditable)};c.removeInFocus=function(){if(document&&document.activeElement&&document.activeElement.blur){var a=i(document.activeElement);(a.is("input")||a.is("textarea"))&&document.activeElement.blur()}};c.removeSelection=function(){if(g&&g.getSelection){var a=g.getSelection(); +a&&a.removeAllRanges&&a.removeAllRanges()}else document&&(document.selection&&document.selection.empty)&&document.selection.empty()};c.replySubjectAdd=function(a,b){var h=null,d=c.trim(b);null!==(h=(new g.RegExp("^"+a+"[\\s]?\\:(.*)$","gi")).exec(b))&&!c.isUnd(h[1])?d=a+"[2]: "+h[1]:null!==(h=(new g.RegExp("^("+a+"[\\s]?[\\[\\(]?)([\\d]+)([\\]\\)]?[\\s]?\\:.*)$","gi")).exec(b))&&!c.isUnd(h[1])&&!c.isUnd(h[2])&&!c.isUnd(h[3])?(c.pInt(h[2]),d=h[1]+(c.pInt(h[2])+1)+h[3]):d=a+": "+b;return d};c.roundNumber= +function(a,b){return Math.round(a*Math.pow(10,b))/Math.pow(10,b)};c.friendlySize=function(a){a=c.pInt(a);return 1073741824<=a?c.roundNumber(a/1073741824,1)+"GB":1048576<=a?c.roundNumber(a/1048576,1)+"MB":1024<=a?c.roundNumber(a/1024,0)+"KB":a+"B"};c.log=function(a){g.console&&g.console.log&&g.console.log(a)};c.getNotification=function(a){a=c.pInt(a);return c.isUnd(l[a])?"":l[a]};c.initNotificationLanguage=function(){l[f.Notification.InvalidToken]=c.i18n("NOTIFICATIONS/INVALID_TOKEN");l[f.Notification.AuthError]= +c.i18n("NOTIFICATIONS/AUTH_ERROR");l[f.Notification.AccessError]=c.i18n("NOTIFICATIONS/ACCESS_ERROR");l[f.Notification.ConnectionError]=c.i18n("NOTIFICATIONS/CONNECTION_ERROR");l[f.Notification.CaptchaError]=c.i18n("NOTIFICATIONS/CAPTCHA_ERROR");l[f.Notification.SocialFacebookLoginAccessDisable]=c.i18n("NOTIFICATIONS/SOCIAL_FACEBOOK_LOGIN_ACCESS_DISABLE");l[f.Notification.SocialTwitterLoginAccessDisable]=c.i18n("NOTIFICATIONS/SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE");l[f.Notification.SocialGoogleLoginAccessDisable]= +c.i18n("NOTIFICATIONS/SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE");l[f.Notification.DomainNotAllowed]=c.i18n("NOTIFICATIONS/DOMAIN_NOT_ALLOWED");l[f.Notification.AccountNotAllowed]=c.i18n("NOTIFICATIONS/ACCOUNT_NOT_ALLOWED");l[f.Notification.CantGetMessageList]=c.i18n("NOTIFICATIONS/CANT_GET_MESSAGE_LIST");l[f.Notification.CantGetMessage]=c.i18n("NOTIFICATIONS/CANT_GET_MESSAGE");l[f.Notification.CantDeleteMessage]=c.i18n("NOTIFICATIONS/CANT_DELETE_MESSAGE");l[f.Notification.CantMoveMessage]=c.i18n("NOTIFICATIONS/CANT_MOVE_MESSAGE"); +l[f.Notification.CantSaveMessage]=c.i18n("NOTIFICATIONS/CANT_SAVE_MESSAGE");l[f.Notification.CantSendMessage]=c.i18n("NOTIFICATIONS/CANT_SEND_MESSAGE");l[f.Notification.InvalidRecipients]=c.i18n("NOTIFICATIONS/INVALID_RECIPIENTS");l[f.Notification.CantCreateFolder]=c.i18n("NOTIFICATIONS/CANT_CREATE_FOLDER");l[f.Notification.CantRenameFolder]=c.i18n("NOTIFICATIONS/CANT_RENAME_FOLDER");l[f.Notification.CantDeleteFolder]=c.i18n("NOTIFICATIONS/CANT_DELETE_FOLDER");l[f.Notification.CantDeleteNonEmptyFolder]= +c.i18n("NOTIFICATIONS/CANT_DELETE_NON_EMPTY_FOLDER");l[f.Notification.CantSubscribeFolder]=c.i18n("NOTIFICATIONS/CANT_SUBSCRIBE_FOLDER");l[f.Notification.CantUnsubscribeFolder]=c.i18n("NOTIFICATIONS/CANT_UNSUBSCRIBE_FOLDER");l[f.Notification.CantSaveSettings]=c.i18n("NOTIFICATIONS/CANT_SAVE_SETTINGS");l[f.Notification.CantSavePluginSettings]=c.i18n("NOTIFICATIONS/CANT_SAVE_PLUGIN_SETTINGS");l[f.Notification.DomainAlreadyExists]=c.i18n("NOTIFICATIONS/DOMAIN_ALREADY_EXISTS");l[f.Notification.CantInstallPackage]= +c.i18n("NOTIFICATIONS/CANT_INSTALL_PACKAGE");l[f.Notification.CantDeletePackage]=c.i18n("NOTIFICATIONS/CANT_DELETE_PACKAGE");l[f.Notification.InvalidPluginPackage]=c.i18n("NOTIFICATIONS/INVALID_PLUGIN_PACKAGE");l[f.Notification.UnsupportedPluginPackage]=c.i18n("NOTIFICATIONS/UNSUPPORTED_PLUGIN_PACKAGE");l[f.Notification.LicensingServerIsUnavailable]=c.i18n("NOTIFICATIONS/LICENSING_SERVER_IS_UNAVAILABLE");l[f.Notification.LicensingExpired]=c.i18n("NOTIFICATIONS/LICENSING_EXPIRED");l[f.Notification.LicensingBanned]= +c.i18n("NOTIFICATIONS/LICENSING_BANNED");l[f.Notification.DemoSendMessageError]=c.i18n("NOTIFICATIONS/DEMO_SEND_MESSAGE_ERROR");l[f.Notification.AccountAlreadyExists]=c.i18n("NOTIFICATIONS/ACCOUNT_ALREADY_EXISTS");l[f.Notification.MailServerError]=c.i18n("NOTIFICATIONS/MAIL_SERVER_ERROR");l[f.Notification.UnknownNotification]=c.i18n("NOTIFICATIONS/UNKNOWN_ERROR");l[f.Notification.UnknownError]=c.i18n("NOTIFICATIONS/UNKNOWN_ERROR")};c.getUploadErrorDescByCode=function(a){var b="";switch(c.pInt(a)){case f.UploadErrorCode.FileIsTooBig:b= +c.i18n("UPLOAD/ERROR_FILE_IS_TOO_BIG");break;case f.UploadErrorCode.FilePartiallyUploaded:b=c.i18n("UPLOAD/ERROR_FILE_PARTIALLY_UPLOADED");break;case f.UploadErrorCode.FileNoUploaded:b=c.i18n("UPLOAD/ERROR_NO_FILE_UPLOADED");break;case f.UploadErrorCode.MissingTempFolder:b=c.i18n("UPLOAD/ERROR_MISSING_TEMP_FOLDER");break;case f.UploadErrorCode.FileOnSaveingError:b=c.i18n("UPLOAD/ERROR_ON_SAVING_FILE");break;case f.UploadErrorCode.FileType:b=c.i18n("UPLOAD/ERROR_FILE_TYPE");break;default:b=c.i18n("UPLOAD/ERROR_UNKNOWN")}return b}; +c.killCtrlAandS=function(a){if(a=a||g.event){var b=a.target||a.srcElement,c=a.keyCode||a.which;if(a.ctrlKey&&c===f.EventKeyCode.S)a.preventDefault();else if((!b||!b.tagName||!b.tagName.match(/INPUT|TEXTAREA/i))&&a.ctrlKey&&c===f.EventKeyCode.A)g.getSelection?g.getSelection().removeAllRanges():g.document.selection&&g.document.selection.clear&&g.document.selection.clear(),a.preventDefault()}};c.createCommand=function(a,b,h){var e=b?function(){e.canExecute&&e.canExecute()&&b.apply(a,Array.prototype.slice.call(arguments)); +return!1}:function(){};e.enabled=d.observable(!0);h=c.isUnd(h)?!0:h;e.canExecute=c.isFunc(h)?d.computed(function(){return e.enabled()&&h.call(a)}):d.computed(function(){return e.enabled()&&!!h});return e};c.initDataConstructorBySettings=function(a){a.editorDefaultType=d.observable(f.EditorDefaultType.Html);a.showImages=d.observable(!1);a.interfaceAnimation=d.observable(f.InterfaceAnimation.Full);k.sAnimationType=f.InterfaceAnimation.Full;a.allowThemes=d.observable(!0);a.allowCustomLogin=d.observable(!1); +a.allowLanguagesOnSettings=d.observable(!0);a.allowLanguagesOnLogin=d.observable(!0);a.desktopNotifications=d.observable(!1);a.useThreads=d.observable(!0);a.replySameFolder=d.observable(!0);a.usePreviewPane=d.observable(!0);a.useCheckboxesInList=d.observable(!0);a.interfaceAnimation.subscribe(function(a){if(k.bMobileDevice||a===f.InterfaceAnimation.None)I.removeClass("rl-anim rl-anim-full").addClass("no-rl-anim"),k.sAnimationType=f.InterfaceAnimation.None;else switch(a){case f.InterfaceAnimation.Full:I.removeClass("no-rl-anim").addClass("rl-anim rl-anim-full"); +k.sAnimationType=a;break;case f.InterfaceAnimation.Normal:I.removeClass("no-rl-anim rl-anim-full").addClass("rl-anim"),k.sAnimationType=a}});a.interfaceAnimation.valueHasMutated();a.desktopNotificationsPermisions=d.computed(function(){a.desktopNotifications();var b=f.DesktopNotifications.NotSupported;if(V&&V.permission)switch(V.permission.toLowerCase()){case "granted":b=f.DesktopNotifications.Allowed;break;case "denied":b=f.DesktopNotifications.Denied;break;case "default":b=f.DesktopNotifications.NotAllowed}else g.webkitNotifications&& +g.webkitNotifications.checkPermission&&(b=g.webkitNotifications.checkPermission());return b});a.useDesktopNotifications=d.computed({read:function(){return a.desktopNotifications()&&f.DesktopNotifications.Allowed===a.desktopNotificationsPermisions()},write:function(b){b?(b=a.desktopNotificationsPermisions(),f.DesktopNotifications.Allowed===b?a.desktopNotifications(!0):f.DesktopNotifications.NotAllowed===b?V.requestPermission(function(){a.desktopNotifications.valueHasMutated();f.DesktopNotifications.Allowed=== +a.desktopNotificationsPermisions()?a.desktopNotifications()?a.desktopNotifications.valueHasMutated():a.desktopNotifications(!0):a.desktopNotifications()?a.desktopNotifications(!1):a.desktopNotifications.valueHasMutated()}):a.desktopNotifications(!1)):a.desktopNotifications(!1)}});a.language=d.observable("");a.languages=d.observableArray([]);a.mainLanguage=d.computed({read:a.language,write:function(b){b!==a.language()?-1=a.diff(h,"hours")?d:a.format("L")===h.format("L")?c.i18n("MESSAGE_LIST/TODAY_AT", +{TIME:h.format("LT")}):a.clone().subtract("days",1).format("L")===h.format("L")?c.i18n("MESSAGE_LIST/YESTERDAY_IN",{TIME:h.format("LT")}):a.year()===h.year()?h.format("D MMM."):h.format("LL")},a)};c.isFolderExpanded=function(a){var b=e.local().get(f.ClientSideKeyName.ExpandedFolders);return j.isArray(b)&&-1!==j.indexOf(b,a)};c.setExpandedFolder=function(a,b){var c=e.local().get(f.ClientSideKeyName.ExpandedFolders);j.isArray(c)||(c=[]);b?(c.push(a),c=j.uniq(c)):c=j.without(c,a);e.local().set(f.ClientSideKeyName.ExpandedFolders, +c)};c.initLayoutResizer=function(a,b,c,d,f,M,g,k){var d=d||300,f=f||500,M=M||f-d/2,g=g||300,x=0,l=i(a),m=i(b),o=i(c),b=e.local().get(k)||M,p=function(a,b,c){if(b||c)a=o.width(),b=b?100*(b.size.width/a):null,null===b&&c&&(b=100*(l.width()/a)),null!==b&&(l.css({width:"",height:"",right:""+(100-b)+"%"}),m.css({width:"",height:"",left:""+b+"%"}))};b&&l.width(b);x=o.width()-g;x=f>x?x:f;l.resizable({minWidth:d,maxWidth:x,handles:"e",resize:p,stop:p});p(null,null,!0);H.resize(j.throttle(function(b,c){c&& +(c.element&&c.element[0].id&&"#"+c.element[0].id===""+a)&&(x=o.width()-g,x=f>x?x:f,l.resizable("option","maxWidth",x),c.size&&c.size.width&&e.local().set(k,c.size.width),p(null,null,!0))},400))};c.initBlockquoteSwitcher=function(a){if(a){var b=i("blockquote:not(.rl-bq-switcher)",a).filter(function(){return 0===i(this).parent().closest("blockquote",a).length});b&&0').insertBefore(a).click(function(){a.toggleClass("hidden-bq"); +c.windowResize()}).after("
").before("
")})}};c.removeBlockquoteSwitcher=function(a){a&&(i(a).find("blockquote.rl-bq-switcher").each(function(){i(this).removeClass("rl-bq-switcher hidden-bq")}),i(a).find(".rlBlockquoteSwitcher").each(function(){i(this).remove()}))};c.extendAsViewModel=function(a,b){b&&(b.__name=a,o.regViewModelHook(a,b),j.extend(b.prototype,t.prototype))};c.addSettingsViewModel=function(a,b,c,d,e){a.__rlSettingsData={Label:c,Template:b,Route:d,IsDefault:!!e};A.settings.push(a)}; +c.removeSettingsViewModel=function(a){A["settings-removed"].push(a)};c.disableSettingsViewModel=function(a){A["settings-disabled"].push(a)};c.convertThemeName=function(a){return c.trim(a.replace(/[^a-zA-Z]/g," ").replace(/([A-Z])/g," $1").replace(/[\s]+/g," "))};c.quoteName=function(a){return a.replace(/["]/g,'\\"')};c.microtime=function(){return(new Date).getTime()};c.convertLangName=function(a){return c.i18n("LANGS_NAMES/LANG_"+a.toUpperCase().replace(/[^a-zA-Z0-9]+/,"_"),null,a)};c.fakeMd5=function(a){for(var b= +"",a=c.isUnd(a)?32:c.pInt(a);b.length/g,">").replace(/")};c.draggeblePlace=function(){return i('
 
').appendTo("#rl-hidden")};c.defautOptionsAfterRender=function(a, +b){b&&!c.isUnd(b.disable)&&d.applyBindingsToNode(a,{disable:b.disable},b)};c.windowPopupKnockout=function(a,b,h,d){var e=null,f=g.open(""),j="__OpenerApplyBindingsUid"+c.fakeMd5()+"__",k=i("#"+b);g[j]=function(){if(f&&f.document.body&&k&&k[0]){var b=i(f.document.body);i("#rl-content",b).html(k.html());i("html",f.document).addClass("external "+i("html").attr("class"));c.i18nToNode(b);r.prototype.applyExternal(a,i("#rl-content",b)[0]);g[j]=null;d(f)}};f.document.open();f.document.write(''+ +c.encodeHtml(h)+'
');f.document.close();e=f.document.createElement("script");e.type="text/javascript";e.innerHTML="if(window&&window.opener&&window.opener['"+j+"']){window.opener['"+j+"']();window.opener['"+j+"']=null}";f.document.getElementsByTagName("head")[0].appendChild(e)};c.settingsSaveHelperFunction=function(a,b,h,d){h=h||null;d=c.isUnd(d)?1E3:c.pInt(d);return function(c,e,g,i,x){b.call(h,e&&e.Result?f.SaveSettingsStep.TrueResult: +f.SaveSettingsStep.FalseResult);a&&a.call(h,c,e,g,i,x);j.delay(function(){b.call(h,f.SaveSettingsStep.Idle)},d)}};c.settingsSaveHelperSimpleFunction=function(a,b){return c.settingsSaveHelperFunction(null,a,b,1E3)};c.resizeAndCrop=function(a,b,c){var d=new Image;d.onload=function(){var a=[0,0],d=document.createElement("canvas"),e=d.getContext("2d");d.width=b;d.height=b;a=this.width>this.height?[this.width-this.height,0]:[0,this.height-this.width];e.fillStyle="#fff";e.fillRect(0,0,b,b);e.drawImage(this, +a[0]/2,a[1]/2,this.width-a[0],this.height-a[1],0,0,b,b);c(d.toDataURL("image/jpeg"))};d.src=a};d.bindingHandlers.tooltip={init:function(a,b){if(!k.bMobileDevice){var h=i(a).data("tooltip-class")||"",e=i(a).data("tooltip-placement")||"top";i(a).tooltip({delay:{show:500,hide:100},html:!0,placement:e,trigger:"hover",title:function(){return''+c.i18n(d.utils.unwrapObservable(b()))+""}})}}};d.bindingHandlers.tooltip2={init:function(a,b){var c=i(a).data("tooltip-class")|| +"",d=i(a).data("tooltip-placement")||"top";i(a).tooltip({delay:{show:500,hide:100},html:!0,placement:d,title:function(){return''+b()()+""}})}};d.bindingHandlers.dropdown={init:function(a){i(a).closest(".dropdown").on("click",".e-item",function(){i(a).dropdown("toggle")})}};d.bindingHandlers.popover={init:function(a,b){i(a).popover(d.utils.unwrapObservable(b()))}};d.bindingHandlers.resizecrop={init:function(a){i(a).addClass("resizecrop").resizecrop({width:"100", +height:"100",wrapperCSS:{"border-radius":"10px"}})},update:function(a,b){b()();i(a).resizecrop({width:"100",height:"100"})}};d.bindingHandlers.onEnter={init:function(a,b,c,d){i(a).on("keypress",function(c){c&&13===g.parseInt(c.keyCode,10)&&(i(a).trigger("change"),b().call(d))})}};d.bindingHandlers.onEsc={init:function(a,b,c,d){i(a).on("keypress",function(c){c&&27===g.parseInt(c.keyCode,10)&&(i(a).trigger("change"),b().call(d))})}};d.bindingHandlers.modal={init:function(a,b){i(a).modal({keyboard:!1, +show:d.utils.unwrapObservable(b())}).on("hidden",function(){b()(!1)})},update:function(a,b){var c=d.utils.unwrapObservable(b());i(a).modal(c?"show":"hide");j.delay(function(){i(a).toggleClass("popup-active",c)},1)}};d.bindingHandlers.i18nInit={init:function(a){c.i18nToNode(a)}};d.bindingHandlers.i18nUpdate={update:function(a,b){d.utils.unwrapObservable(b());c.i18nToNode(a)}};d.bindingHandlers.link={update:function(a,b){i(a).attr("href",d.utils.unwrapObservable(b()))}};d.bindingHandlers.title={update:function(a, +b){i(a).attr("title",d.utils.unwrapObservable(b()))}};d.bindingHandlers.textF={init:function(a,b){i(a).text(d.utils.unwrapObservable(b()))}};d.bindingHandlers.initDom={init:function(a,b){b()(a)}};d.bindingHandlers.initResizeTrigger={init:function(a,b){var c=d.utils.unwrapObservable(b());i(a).css({height:c[1],"min-height":c[1]})},update:function(a,b){var h=d.utils.unwrapObservable(b()),e=c.pInt(h[1]),f=0,f=i(a).offset().top;0=h.left&&a.pageX<=h.left+d.width()&&(a.pageY>=b-100&&a.pageY<=b&&(b=function(){d.scrollTop(d.scrollTop()+3);c.windowResize()},d.data("timerScroll",g.setInterval(b,10)),b()),a.pageY>=h.top&&a.pageY<=h.top+100))h=function(){d.scrollTop(d.scrollTop()-3);c.windowResize()},d.data("timerScroll",g.setInterval(h,10)),h()})},h.stop=function(){i(e).each(function(){g.clearInterval(i(this).data("timerScroll"));i(this).data("timerScroll",!1)})});h.helper=function(a){return b()(a&&a.target?d.dataFor(a.target): +null)};i(a).draggable(h).on("mousedown",function(){c.removeInFocus()})}}};d.bindingHandlers.droppable={init:function(a,b,c){if(!k.bMobileDevice){var d=b(),e=(b=c())&&b.droppableOver?b.droppableOver:null,f=b&&b.droppableOut?b.droppableOut:null,b={tolerance:"pointer",hoverClass:"droppableHover"};d&&(b.drop=function(a,b){d(a,b)},e&&(b.over=function(a,b){e(a,b)}),f&&(b.out=function(a,b){f(a,b)}),i(a).droppable(b))}}};d.bindingHandlers.nano={init:function(a){k.bDisableNanoScroll||i(a).addClass("nano").nanoScroller({iOSNativeScrolling:!1, +preventPageScrolling:!0})}};d.bindingHandlers.saveTrigger={init:function(a){i(a).append('  ').addClass("settings-saved-trigger")},update:function(a,b){var c=d.utils.unwrapObservable(b()),e=i(a);switch(c.toString()){case "1":e.find(".animated,.error").hide().removeClass("visible").end().find(".success").show().addClass("visible");break;case "0":e.find(".animated,.success").hide().removeClass("visible").end().find(".error").show().addClass("visible"); +break;case "-2":e.find(".error,.success").hide().removeClass("visible").end().find(".animated").show().addClass("visible");break;default:e.find(".animated").hide().end().find(".error,.success").removeClass("visible")}}};d.bindingHandlers.select2={init:function(a,b){var h=0,f=null,la=new g.RegExp(/[a-zA-Z0-9\.\-_]+@[a-zA-Z0-9\.\-_]+/),M=new g.RegExp(/(.+) [<]?([^\s<@]+@[a-zA-Z0-9\.\-_]+)[>]?/),k=function(){return""},l=function(a){e.getAutocomplete(a.term,a.page,function(b,c){a.callback({more:!!c,results:j.map(b, +function(a){var b=a.toLine(!1);return{id:b,text:b,c:a}})})})};i(a).addClass("ko-select2").select2({query:function(a){a&&(0===h?(l(a),h=g.setTimeout(c.emptyFunction,100)):(g.clearInterval(h),h=g.setTimeout(function(){l(a)},100)))},formatSelection:function(a,b){var c=a&&a.c?a.c.select2Selection(b):a.text;if(null!==c)return c},formatResult:function(a,b,c,h){b=a&&a.c?a.c.select2Result(b):"";return""===b?h(a.text):b},createSearchChoice:function(a,b){return 0===b.length&&la.test(a)?{id:a,text:a}:null}, +formatNoMatches:k,formatSearching:function(){return c.i18n("SUGGESTIONS/SEARCHING_DESC")},formatInputTooShort:k,formatSelectionTooBig:k,multiple:!0,tokenSeparators:[",",";"],minimumInputLength:2,selectOnBlur:!1,closeOnSelect:!0,openOnEnter:!1});d.utils.domNodeDisposal.addDisposeCallback(a,function(){i(a).select2("destroy")});i(a).on("change",function(){for(var a=i(this).select2("data"),h=0,d=a.length,e=null,g=[];h").addClass("rl-view-model").addClass("RL-"+h.viewModelTemplate()).hide().attr("data-bind",'template: {name: "'+h.viewModelTemplate()+'"}, i18nInit: true'),j.appendTo(g),h.viewModelDom=j,a.__dom=j,"Popups"===f&&(h.cancelCommand=h.closeCommand=c.createCommand(h,function(){q.hideScreenPopup(a)})),o.runHook("view-model-pre-build",[a.__name,h,j]),d.applyBindings(h,j[0]),this.delegateRun(h, +"onBuild",[j]),o.runHook("view-model-post-build",[a.__name,h,j])):c.log("Cannot find view model position: "+f)}return a?a.__vm:null};r.prototype.applyExternal=function(a,b){a&&b&&d.applyBindings(a,b)};r.prototype.hideScreenPopup=function(a){a&&(a.__vm&&a.__dom)&&(a.__dom.hide(),a.__vm.modalVisibility(!1),this.delegateRun(a.__vm,"onHide"),this.popupVisibility(!1),j.defer(function(){a.__dom.find(".ko-select2").select2("close")}))};r.prototype.showScreenPopup=function(a,b){a&&(this.buildViewModel(a), +a.__vm&&a.__dom&&(a.__dom.show(),a.__vm.modalVisibility(!0),this.delegateRun(a.__vm,"onShow",b||[]),this.popupVisibility(!0),o.runHook("view-model-on-show",[a.__name,a.__vm,b||[]])))};r.prototype.screenOnRoute=function(a,b){var d=this,e=null,f=null;""===c.pString(a)&&(a=this.sDefaultScreenName);if(""!==a){e=this.screen(a);if(!e&&(e=this.screen(this.sDefaultScreenName)))b=a+"/"+b,a=this.sDefaultScreenName;e&&e.__started&&(e.__builded||(e.__builded=!0,c.isNonEmptyArray(e.viewModels())&&j.each(e.viewModels(), +function(a){this.buildViewModel(a,e)},this),this.delegateRun(e,"onBuild")),j.defer(function(){if(d.oCurrentScreen){d.delegateRun(d.oCurrentScreen,"onHide");c.isNonEmptyArray(d.oCurrentScreen.viewModels())&&j.each(d.oCurrentScreen.viewModels(),function(a){if(a.__vm&&a.__dom&&"Popups"!==a.__vm.viewModelPosition()){a.__dom.hide();a.__vm.viewModelVisibility(false);d.delegateRun(a.__vm,"onHide")}})}d.oCurrentScreen=e;if(d.oCurrentScreen){d.delegateRun(d.oCurrentScreen,"onShow");o.runHook("screen-on-show", +[d.oCurrentScreen.screenName(),d.oCurrentScreen]);c.isNonEmptyArray(d.oCurrentScreen.viewModels())&&j.each(d.oCurrentScreen.viewModels(),function(a){if(a.__vm&&a.__dom&&"Popups"!==a.__vm.viewModelPosition()){a.__dom.show();a.__vm.viewModelVisibility(true);d.delegateRun(a.__vm,"onShow");o.runHook("view-model-on-show",[a.__name,a.__vm])}},d)}(f=e.__cross())&&f.parse(b)}))}};r.prototype.startScreens=function(a){j.each(a,function(a){var c=(a=new a)?a.screenName():"";a&&""!==c&&(""===this.sDefaultScreenName&& +(this.sDefaultScreenName=c),this.oScreens[c]=a)},this);j.each(this.oScreens,function(a){a&&(!a.__started&&a.__start)&&(a.__started=!0,a.__start(),o.runHook("screen-pre-start",[a.screenName(),a]),this.delegateRun(a,"onStart"),o.runHook("screen-post-start",[a.screenName(),a]))},this);a=fa.create();a.addRoute(/^([a-zA-Z0-9\-]*)\/?(.*)$/,j.bind(this.screenOnRoute,this));y.initialized.add(a.parse,a);y.changed.add(a.parse,a);y.init()};r.prototype.setHash=function(a,b,d){a="#"===a.substr(0,1)?a.substr(1): +a;a="/"===a.substr(0,1)?a.substr(1):a;d=c.isUnd(d)?!1:!!d;(c.isUnd(b)?0:b)?(y.changed.active=!1,y[d?"replaceHash":"setHash"](a),y.changed.active=!0):(y.changed.active=!0,y[d?"replaceHash":"setHash"](a),y.setHash(a))};r.prototype.bootstart=function(){this.oBoot&&this.oBoot.bootstart&&this.oBoot.bootstart();return this};q=new r;s.newInstanceFromJson=function(a){var b=new s;return b.initByJson(a)?b:null};s.prototype.name="";s.prototype.email="";s.prototype.privateType=null;s.prototype.validate=function(){return""!== +this.name||""!==this.email};s.prototype.hash=function(a){return"#"+(a?"":this.name)+"#"+this.email+"#"};s.prototype.clearDuplicateName=function(){this.name===this.email&&(this.name="")};s.prototype.type=function(){if(null===this.privateType&&(this.email&&"@facebook.com"===this.email.substr(-13)&&(this.privateType=f.EmailType.Facebook),null===this.privateType))this.privateType=f.EmailType.Default;return this.privateType};s.prototype.search=function(a){return-1<(this.name+" "+this.email).toLowerCase().indexOf(a.toLowerCase())}; +s.prototype.parse=function(a){var a=c.trim(a),b=/(?:"([^"]+)")? ?,]+)>?,? ?/g.exec(a);b?(this.name=b[1]||"",this.email=b[2]||"",this.clearDuplicateName()):/^[^@]+@[^@]+$/.test(a)&&(this.name="",this.email=a)};s.prototype.initByJson=function(a){var b=!1;a&&"Object/Email"===a["@Object"]&&(this.name=c.trim(a.Name),this.email=c.trim(a.Email),b=""!==this.email,this.clearDuplicateName());return b};s.prototype.toLine=function(a,b){var d="";""!==this.email&&(b=c.isUnd(b)?!1:!!b,a&&""!==this.name? +d=b?'")+'" target="_blank" tabindex="-1">'+c.encodeHtml(this.name)+"":this.name:(d=this.email,""!==this.name?d=b?c.encodeHtml('"'+this.name+'" <')+'")+'" target="_blank" tabindex="-1">'+c.encodeHtml(d)+""+c.encodeHtml(">"):'"'+this.name+'" <'+d+">":b&&(d=''+c.encodeHtml(this.email)+""))); +return d};s.prototype.select2Result=function(){var a="",b=e.cache().getUserPic(this.email),a=""!==b?a+(''):a+('');f.EmailType.Facebook===this.type()?(a+=""+(0'):a+=""+(0('+this.name+")": +this.email);return a+""};s.prototype.select2Selection=function(a){var b="";if(f.EmailType.Facebook===this.type()){if(b=0").text(b).appendTo(a),a.append(''),null}else b=0(new g.Date).getTime()-p);n&&l.oRequests[n]&&(l.oRequests[n].__aborted&&(e="abort"),l.oRequests[n]=null);l.defaultResponse(a,n,e,d,f,b)});n&&(0
").addClass("rl-settings-view-model").hide().attr("data-bind", +'template: {name: "'+g.__rlSettingsData.Template+'"}, i18nInit: true'),l.appendTo(k),f.data=e.data(),f.viewModelDom=l,f.__rlSettingsData=g.__rlSettingsData,g.__dom=l,g.__builded=!0,g.__vm=f,d.applyBindings(f,l[0]),q.delegateRun(f,"onBuild",[l])):c.log("Cannot find sub settings view model position: SettingsSubScreen"),f&&j.defer(function(){if(b.oCurrentSubScreen){q.delegateRun(b.oCurrentSubScreen,"onHide");b.oCurrentSubScreen.viewModelDom.hide()}b.oCurrentSubScreen=f;if(b.oCurrentSubScreen){b.oCurrentSubScreen.viewModelDom.show(); +q.delegateRun(b.oCurrentSubScreen,"onShow");j.each(b.menu(),function(a){a.selected(f&&f.__rlSettingsData&&a.route===f.__rlSettingsData.Route)});i("#rl-content .b-settings .b-content .content").scrollTop(0)}c.windowResize()})):q.setHash(e.link().settings(),!1,!0)};G.prototype.onHide=function(){this.oCurrentSubScreen&&this.oCurrentSubScreen.viewModelDom&&(q.delegateRun(this.oCurrentSubScreen,"onHide"),this.oCurrentSubScreen.viewModelDom.hide())};G.prototype.onBuild=function(){j.each(A.settings,function(a){a&& +(a.__rlSettingsData&&!j.find(A["settings-removed"],function(b){return b&&b===a}))&&this.menu.push({route:a.__rlSettingsData.Route,label:a.__rlSettingsData.Label,selected:d.observable(!1),disabled:!!j.find(A["settings-disabled"],function(b){return b&&b===a})})},this);this.oViewModelPlace=i("#rl-content #rl-settings-subscreen")};G.prototype.routes=function(){var a=j.find(A.settings,function(a){return a&&a.__rlSettingsData&&a.__rlSettingsData.IsDefault}),b=a?a.__rlSettingsData.Route:"general",a={subname:/^(.*)$/, +normalize_:function(a,d){d.subname=c.isUnd(d.subname)?b:c.pString(d.subname);return[d.subname]}};return[["{subname}/",a],["{subname}",a],["",a]]};j.extend(ba.prototype,w.prototype);ba.prototype.onShow=function(){e.setTitle("")};j.extend(ca.prototype,G.prototype);ca.prototype.onShow=function(){e.setTitle("")};j.extend(u.prototype,ga.prototype);u.prototype.oSettings=null;u.prototype.oLink=null;u.prototype.download=function(a){var b=null,c=null;if((b=navigator.userAgent.toLowerCase())&&(-1=e||g-2<=e)k+=2;l(e);c=b=e}for(;0=c)l(c, +!0),k--;else if(0>=b)break;3===b?l(2,!1):3c&&l(Math.round((g+c)/2),!0,"...");1c&&l(g,!0)}return f},this);this.checkAll=e.computed({read:function(){return 0c},this);this.hasMessages=e.computed(function(){return 0'),c.after(k),c.remove();k&&k[0]&&k.attr("data-href",e).attr("data-theme",b[0]).text(b[1]);a.themeTrigger(g.SaveSettingsStep.TrueResult)}}).always(function(){a.iTimer=h.setTimeout(function(){a.themeTrigger(g.SaveSettingsStep.Idle)},1E3);a.oLastAjax=null}));f.remote().saveSettings(null,{Theme:b})},this)}function Pa(){d.initDataConstructorBySettings(this)}function U(){d.initDataConstructorBySettings(this);var a=function(a){return function(){var b= +f.cache().getFolderFromCacheList(a());b&&b.type(g.FolderType.User)}},b=function(a){return function(b){(b=f.cache().getFolderFromCacheList(b))&&b.type(a)}};this.devPassword=this.devLogin=this.devEmail="";this.accountEmail=e.observable("");this.accountLogin=e.observable("");this.projectHash=e.observable("");this.threading=e.observable(!1);this.lastFoldersHash="";this.remoteChangePassword=this.remoteSuggestions=!1;this.sentFolder=e.observable("");this.draftFolder=e.observable("");this.spamFolder=e.observable(""); +this.trashFolder=e.observable("");this.sentFolder.subscribe(a(this.sentFolder),this,"beforeChange");this.draftFolder.subscribe(a(this.draftFolder),this,"beforeChange");this.spamFolder.subscribe(a(this.spamFolder),this,"beforeChange");this.trashFolder.subscribe(a(this.trashFolder),this,"beforeChange");this.sentFolder.subscribe(b(g.FolderType.SentItems),this);this.draftFolder.subscribe(b(g.FolderType.Draft),this);this.spamFolder.subscribe(b(g.FolderType.Spam),this);this.trashFolder.subscribe(b(g.FolderType.Trash), +this);this.draftFolderNotEnabled=e.computed(function(){return""===this.draftFolder()||n.Values.UnuseOptionValue===this.draftFolder()},this);this.displayName=e.observable("");this.signature=e.observable("");this.replyTo=e.observable("");this.accounts=e.observableArray([]);this.accountsLoading=e.observable(!1).extend({throttle:100});this.identities=e.observableArray([]);this.identitiesLoading=e.observable(!1).extend({throttle:100});this.namespace="";this.folderList=e.observableArray([]);this.foldersListError= +e.observable("");this.foldersLoading=e.observable(!1);this.foldersCreating=e.observable(!1);this.foldersDeleting=e.observable(!1);this.foldersRenaming=e.observable(!1);this.currentFolder=e.observable(null).extend({toggleSubscribe:[null,function(a){a&&a.selected(!1)},function(a){a&&a.selected(!0)}]});this.currentFolderFullNameRaw=e.computed(function(){return this.currentFolder()?this.currentFolder().fullNameRaw:""},this);this.currentFolderFullName=e.computed(function(){return this.currentFolder()? +this.currentFolder().fullName:""},this);this.currentFolderFullNameHash=e.computed(function(){return this.currentFolder()?this.currentFolder().fullNameHash:""},this);this.currentFolderName=e.computed(function(){return this.currentFolder()?this.currentFolder().name():""},this);this.folderListSystemNames=e.computed(function(){var a=["INBOX"],b=this.folderList(),f=this.sentFolder(),e=this.draftFolder(),g=this.spamFolder(),l=this.trashFolder();d.isArray(b)&&0').appendTo("body");R.on("error",function(a){f&& +(a&&a.originalEvent&&a.originalEvent.message&&-1===d.inArray(a.originalEvent.message,["Script error.","Uncaught Error: Error calling method on NPObject."]))&&f.remote().jsError(d.emptyFunction,a.originalEvent.message,a.originalEvent.filename,a.originalEvent.lineno,location&&location.toString?location.toString():"",Q.attr("class"),d.microtime()-m.now)})}function B(){K.call(this);this.oCache=this.oRemote=this.oData=null;this.iSuggestionsLimit=d.pInt(this.settingsGet("SuggestionsLimit"));this.iSuggestionsLimit= +0===this.iSuggestionsLimit?20:this.iSuggestionsLimit;this.quotaDebounce=i.debounce(this.quota,3E4)}var n={},g={},v={},d={},y={},ma={},m={},V={settings:[],"settings-removed":[],"settings-disabled":[]},o=null,Ga=h.rainloopAppData||{},Ra=h.rainloopI18N||{},Q=j("html"),R=j(h),Ha=j(h.document),na=h.Notification&&h.Notification.requestPermission?h.Notification:null,f=null;m.now=(new Date).getTime();m.minuteTick=e.observable(!0);m.fiveMinuteTick=e.observable(!0);m.langChangeTick=e.observable(!0);m.iAjaxErrorCount= +0;m.iTokenErrorCount=0;m.iMessageBodyCacheCount=0;m.bUnload=!1;m.sUserAgent=(navigator.userAgent||"").toLowerCase();m.bIsiOSDevice=-1/g,">").replace(/"/g,""").replace(/'/g,"'"):""};d.splitPlainText=function(a,b){for(var c="",k="",f=a,e=0,g=0,b=d.isUnd(b)?100:b;f.length>b;)k=f.substring(0,b),e=k.lastIndexOf(" "),g=k.lastIndexOf("\n"),-1!==g&&(e=g),-1===e&&(e=b),c+=k.substring(0,e)+"\n",f=f.substring(e+1);return c+f};var Ia= +{};d.timeOutAction=function(a,b,c){d.isUnd(Ia[a])&&(Ia[a]=0);h.clearTimeout(Ia[a]);Ia[a]=h.setTimeout(b,c)};var Sa={};d.timeOutActionSecond=function(a,b,c){Sa[a]||(Sa[a]=h.setTimeout(function(){b();Sa[a]=0},c))};var S=!1;d.audio=function(a,b){if(!1===S)if(m.bIsiOSDevice)S=null;else{var c=!1,d=!1,f=h.Audio?new h.Audio:null;f&&f.canPlayType&&f.play?((c=""!==f.canPlayType('audio/mpeg; codecs="mp3"'))||(d=""!==f.canPlayType('audio/ogg; codecs="vorbis"')),c||d?(S=f,S.preload="none",S.loop=!1,S.autoplay= +!1,S.muted=!1,S.src=c?a:b):S=null):S=null}return S};d.hos=function(a,b){return a&&Object.hasOwnProperty?Object.hasOwnProperty.call(a,b):!1};d.i18n=function(a,b,c){var k="",a=d.isUnd(Ra[a])?d.isUnd(c)?a:c:Ra[a];if(!d.isUnd(b)&&!d.isNull(b))for(k in b)d.hos(b,k)&&(a=a.replace("%"+k+"%",b[k]));return a};d.i18nToNode=function(a){i.defer(function(){j(".i18n",a).each(function(){var a=j(this),c="";(c=a.data("i18n-text"))?a.text(d.i18n(c)):((c=a.data("i18n-html"))&&a.html(d.i18n(c)),(c=a.data("i18n-placeholder"))&& +a.attr("placeholder",d.i18n(c)))})})};d.i18nToDoc=function(){h.rainloopI18N&&(Ra=h.rainloopI18N||{},d.i18nToNode(Ha),m.langChangeTick(!m.langChangeTick()));h.rainloopI18N={}};d.initOnStartOrLangChange=function(a,b,c){a&&a.call(b);c?m.langChangeTick.subscribe(function(){a&&a.call(b);c.call(b)}):a&&m.langChangeTick.subscribe(a,b)};d.inFocus=function(){var a=document.activeElement;return a&&("INPUT"===a.tagName||"TEXTAREA"===a.tagName||"IFRAME"===a.tagName||"DIV"===a.tagName&&"editorHtmlArea"===a.className&& +a.contentEditable)};d.removeInFocus=function(){if(document&&document.activeElement&&document.activeElement.blur){var a=j(document.activeElement);(a.is("input")||a.is("textarea"))&&document.activeElement.blur()}};d.removeSelection=function(){if(h&&h.getSelection){var a=h.getSelection();a&&a.removeAllRanges&&a.removeAllRanges()}else document&&(document.selection&&document.selection.empty)&&document.selection.empty()};d.replySubjectAdd=function(a,b){var c=null,k=d.trim(b);null!==(c=(new h.RegExp("^"+ +a+"[\\s]?\\:(.*)$","gi")).exec(b))&&!d.isUnd(c[1])?k=a+"[2]: "+c[1]:null!==(c=(new h.RegExp("^("+a+"[\\s]?[\\[\\(]?)([\\d]+)([\\]\\)]?[\\s]?\\:.*)$","gi")).exec(b))&&!d.isUnd(c[1])&&!d.isUnd(c[2])&&!d.isUnd(c[3])?(d.pInt(c[2]),k=c[1]+(d.pInt(c[2])+1)+c[3]):k=a+": "+b;return k};d.roundNumber=function(a,b){return Math.round(a*Math.pow(10,b))/Math.pow(10,b)};d.friendlySize=function(a){a=d.pInt(a);return 1073741824<=a?d.roundNumber(a/1073741824,1)+"GB":1048576<=a?d.roundNumber(a/1048576,1)+"MB":1024<= +a?d.roundNumber(a/1024,0)+"KB":a+"B"};d.log=function(a){h.console&&h.console.log&&h.console.log(a)};d.getNotification=function(a){a=d.pInt(a);return d.isUnd(v[a])?"":v[a]};d.initNotificationLanguage=function(){v[g.Notification.InvalidToken]=d.i18n("NOTIFICATIONS/INVALID_TOKEN");v[g.Notification.AuthError]=d.i18n("NOTIFICATIONS/AUTH_ERROR");v[g.Notification.AccessError]=d.i18n("NOTIFICATIONS/ACCESS_ERROR");v[g.Notification.ConnectionError]=d.i18n("NOTIFICATIONS/CONNECTION_ERROR");v[g.Notification.CaptchaError]= +d.i18n("NOTIFICATIONS/CAPTCHA_ERROR");v[g.Notification.SocialFacebookLoginAccessDisable]=d.i18n("NOTIFICATIONS/SOCIAL_FACEBOOK_LOGIN_ACCESS_DISABLE");v[g.Notification.SocialTwitterLoginAccessDisable]=d.i18n("NOTIFICATIONS/SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE");v[g.Notification.SocialGoogleLoginAccessDisable]=d.i18n("NOTIFICATIONS/SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE");v[g.Notification.DomainNotAllowed]=d.i18n("NOTIFICATIONS/DOMAIN_NOT_ALLOWED");v[g.Notification.AccountNotAllowed]=d.i18n("NOTIFICATIONS/ACCOUNT_NOT_ALLOWED"); +v[g.Notification.CantGetMessageList]=d.i18n("NOTIFICATIONS/CANT_GET_MESSAGE_LIST");v[g.Notification.CantGetMessage]=d.i18n("NOTIFICATIONS/CANT_GET_MESSAGE");v[g.Notification.CantDeleteMessage]=d.i18n("NOTIFICATIONS/CANT_DELETE_MESSAGE");v[g.Notification.CantMoveMessage]=d.i18n("NOTIFICATIONS/CANT_MOVE_MESSAGE");v[g.Notification.CantSaveMessage]=d.i18n("NOTIFICATIONS/CANT_SAVE_MESSAGE");v[g.Notification.CantSendMessage]=d.i18n("NOTIFICATIONS/CANT_SEND_MESSAGE");v[g.Notification.InvalidRecipients]= +d.i18n("NOTIFICATIONS/INVALID_RECIPIENTS");v[g.Notification.CantCreateFolder]=d.i18n("NOTIFICATIONS/CANT_CREATE_FOLDER");v[g.Notification.CantRenameFolder]=d.i18n("NOTIFICATIONS/CANT_RENAME_FOLDER");v[g.Notification.CantDeleteFolder]=d.i18n("NOTIFICATIONS/CANT_DELETE_FOLDER");v[g.Notification.CantDeleteNonEmptyFolder]=d.i18n("NOTIFICATIONS/CANT_DELETE_NON_EMPTY_FOLDER");v[g.Notification.CantSubscribeFolder]=d.i18n("NOTIFICATIONS/CANT_SUBSCRIBE_FOLDER");v[g.Notification.CantUnsubscribeFolder]=d.i18n("NOTIFICATIONS/CANT_UNSUBSCRIBE_FOLDER"); +v[g.Notification.CantSaveSettings]=d.i18n("NOTIFICATIONS/CANT_SAVE_SETTINGS");v[g.Notification.CantSavePluginSettings]=d.i18n("NOTIFICATIONS/CANT_SAVE_PLUGIN_SETTINGS");v[g.Notification.DomainAlreadyExists]=d.i18n("NOTIFICATIONS/DOMAIN_ALREADY_EXISTS");v[g.Notification.CantInstallPackage]=d.i18n("NOTIFICATIONS/CANT_INSTALL_PACKAGE");v[g.Notification.CantDeletePackage]=d.i18n("NOTIFICATIONS/CANT_DELETE_PACKAGE");v[g.Notification.InvalidPluginPackage]=d.i18n("NOTIFICATIONS/INVALID_PLUGIN_PACKAGE"); +v[g.Notification.UnsupportedPluginPackage]=d.i18n("NOTIFICATIONS/UNSUPPORTED_PLUGIN_PACKAGE");v[g.Notification.LicensingServerIsUnavailable]=d.i18n("NOTIFICATIONS/LICENSING_SERVER_IS_UNAVAILABLE");v[g.Notification.LicensingExpired]=d.i18n("NOTIFICATIONS/LICENSING_EXPIRED");v[g.Notification.LicensingBanned]=d.i18n("NOTIFICATIONS/LICENSING_BANNED");v[g.Notification.DemoSendMessageError]=d.i18n("NOTIFICATIONS/DEMO_SEND_MESSAGE_ERROR");v[g.Notification.AccountAlreadyExists]=d.i18n("NOTIFICATIONS/ACCOUNT_ALREADY_EXISTS"); +v[g.Notification.MailServerError]=d.i18n("NOTIFICATIONS/MAIL_SERVER_ERROR");v[g.Notification.UnknownNotification]=d.i18n("NOTIFICATIONS/UNKNOWN_ERROR");v[g.Notification.UnknownError]=d.i18n("NOTIFICATIONS/UNKNOWN_ERROR")};d.getUploadErrorDescByCode=function(a){var b="";switch(d.pInt(a)){case g.UploadErrorCode.FileIsTooBig:b=d.i18n("UPLOAD/ERROR_FILE_IS_TOO_BIG");break;case g.UploadErrorCode.FilePartiallyUploaded:b=d.i18n("UPLOAD/ERROR_FILE_PARTIALLY_UPLOADED");break;case g.UploadErrorCode.FileNoUploaded:b= +d.i18n("UPLOAD/ERROR_NO_FILE_UPLOADED");break;case g.UploadErrorCode.MissingTempFolder:b=d.i18n("UPLOAD/ERROR_MISSING_TEMP_FOLDER");break;case g.UploadErrorCode.FileOnSaveingError:b=d.i18n("UPLOAD/ERROR_ON_SAVING_FILE");break;case g.UploadErrorCode.FileType:b=d.i18n("UPLOAD/ERROR_FILE_TYPE");break;default:b=d.i18n("UPLOAD/ERROR_UNKNOWN")}return b};d.killCtrlAandS=function(a){if(a=a||h.event){var b=a.target||a.srcElement,c=a.keyCode||a.which;if(a.ctrlKey&&c===g.EventKeyCode.S)a.preventDefault();else if((!b|| +!b.tagName||!b.tagName.match(/INPUT|TEXTAREA/i))&&a.ctrlKey&&c===g.EventKeyCode.A)h.getSelection?h.getSelection().removeAllRanges():h.document.selection&&h.document.selection.clear&&h.document.selection.clear(),a.preventDefault()}};d.createCommand=function(a,b,c){var k=b?function(){k.canExecute&&k.canExecute()&&b.apply(a,Array.prototype.slice.call(arguments));return!1}:function(){};k.enabled=e.observable(!0);c=d.isUnd(c)?!0:c;k.canExecute=d.isFunc(c)?e.computed(function(){return k.enabled()&&c.call(a)}): +e.computed(function(){return k.enabled()&&!!c});return k};d.initDataConstructorBySettings=function(a){a.editorDefaultType=e.observable(g.EditorDefaultType.Html);a.showImages=e.observable(!1);a.interfaceAnimation=e.observable(g.InterfaceAnimation.Full);m.sAnimationType=g.InterfaceAnimation.Full;a.allowThemes=e.observable(!0);a.allowCustomLogin=e.observable(!1);a.allowLanguagesOnSettings=e.observable(!0);a.allowLanguagesOnLogin=e.observable(!0);a.desktopNotifications=e.observable(!1);a.useThreads=e.observable(!0); +a.replySameFolder=e.observable(!0);a.usePreviewPane=e.observable(!0);a.useCheckboxesInList=e.observable(!0);a.interfaceAnimation.subscribe(function(a){if(m.bMobileDevice||a===g.InterfaceAnimation.None)Q.removeClass("rl-anim rl-anim-full").addClass("no-rl-anim"),m.sAnimationType=g.InterfaceAnimation.None;else switch(a){case g.InterfaceAnimation.Full:Q.removeClass("no-rl-anim").addClass("rl-anim rl-anim-full");m.sAnimationType=a;break;case g.InterfaceAnimation.Normal:Q.removeClass("no-rl-anim rl-anim-full").addClass("rl-anim"), +m.sAnimationType=a}});a.interfaceAnimation.valueHasMutated();a.desktopNotificationsPermisions=e.computed(function(){a.desktopNotifications();var b=g.DesktopNotifications.NotSupported;if(na&&na.permission)switch(na.permission.toLowerCase()){case "granted":b=g.DesktopNotifications.Allowed;break;case "denied":b=g.DesktopNotifications.Denied;break;case "default":b=g.DesktopNotifications.NotAllowed}else h.webkitNotifications&&h.webkitNotifications.checkPermission&&(b=h.webkitNotifications.checkPermission()); +return b});a.useDesktopNotifications=e.computed({read:function(){return a.desktopNotifications()&&g.DesktopNotifications.Allowed===a.desktopNotificationsPermisions()},write:function(b){b?(b=a.desktopNotificationsPermisions(),g.DesktopNotifications.Allowed===b?a.desktopNotifications(!0):g.DesktopNotifications.NotAllowed===b?na.requestPermission(function(){a.desktopNotifications.valueHasMutated();g.DesktopNotifications.Allowed===a.desktopNotificationsPermisions()?a.desktopNotifications()?a.desktopNotifications.valueHasMutated(): +a.desktopNotifications(!0):a.desktopNotifications()?a.desktopNotifications(!1):a.desktopNotifications.valueHasMutated()}):a.desktopNotifications(!1)):a.desktopNotifications(!1)}});a.language=e.observable("");a.languages=e.observableArray([]);a.mainLanguage=e.computed({read:a.language,write:function(b){b!==a.language()?-1=a.diff(c,"hours")?k:a.format("L")===c.format("L")?d.i18n("MESSAGE_LIST/TODAY_AT",{TIME:c.format("LT")}):a.clone().subtract("days",1).format("L")===c.format("L")?d.i18n("MESSAGE_LIST/YESTERDAY_IN", +{TIME:c.format("LT")}):a.year()===c.year()?c.format("D MMM."):c.format("LL")},a)};d.isFolderExpanded=function(a){var b=f.local().get(g.ClientSideKeyName.ExpandedFolders);return i.isArray(b)&&-1!==i.indexOf(b,a)};d.setExpandedFolder=function(a,b){var c=f.local().get(g.ClientSideKeyName.ExpandedFolders);i.isArray(c)||(c=[]);b?(c.push(a),c=i.uniq(c)):c=i.without(c,a);f.local().set(g.ClientSideKeyName.ExpandedFolders,c)};d.initLayoutResizer=function(a,b,c,d,e,g,w,l){var d=d||300,e=e||500,g=g||e-d/2,w= +w||300,h=0,q=j(a),gb=j(b),r=j(c),b=f.local().get(l)||g,H=function(a,b,c){if(b||c)a=r.width(),b=b?100*(b.size.width/a):null,null===b&&c&&(b=100*(q.width()/a)),null!==b&&(q.css({width:"",height:"",right:""+(100-b)+"%"}),gb.css({width:"",height:"",left:""+b+"%"}))};b&&q.width(b);h=r.width()-w;h=e>h?h:e;q.resizable({minWidth:d,maxWidth:h,handles:"e",resize:H,stop:H});H(null,null,!0);R.resize(i.throttle(function(b,c){c&&(c.element&&c.element[0].id&&"#"+c.element[0].id===""+a)&&(h=r.width()-w,h=e>h?h:e, +q.resizable("option","maxWidth",h),c.size&&c.size.width&&f.local().set(l,c.size.width),H(null,null,!0))},400))};d.initBlockquoteSwitcher=function(a){if(a){var b=j("blockquote:not(.rl-bq-switcher)",a).filter(function(){return 0===j(this).parent().closest("blockquote",a).length});b&&0').insertBefore(a).click(function(){a.toggleClass("hidden-bq"); +d.windowResize()}).after("
").before("
")})}};d.removeBlockquoteSwitcher=function(a){a&&(j(a).find("blockquote.rl-bq-switcher").each(function(){j(this).removeClass("rl-bq-switcher hidden-bq")}),j(a).find(".rlBlockquoteSwitcher").each(function(){j(this).remove()}))};d.extendAsViewModel=function(a,b){b&&(b.__name=a,y.regViewModelHook(a,b),i.extend(b.prototype,D.prototype))};d.addSettingsViewModel=function(a,b,c,d,f){a.__rlSettingsData={Label:c,Template:b,Route:d,IsDefault:!!f};V.settings.push(a)}; +d.removeSettingsViewModel=function(a){V["settings-removed"].push(a)};d.disableSettingsViewModel=function(a){V["settings-disabled"].push(a)};d.convertThemeName=function(a){return d.trim(a.replace(/[^a-zA-Z]/g," ").replace(/([A-Z])/g," $1").replace(/[\s]+/g," "))};d.quoteName=function(a){return a.replace(/["]/g,'\\"')};d.microtime=function(){return(new Date).getTime()};d.convertLangName=function(a){return d.i18n("LANGS_NAMES/LANG_"+a.toUpperCase().replace(/[^a-zA-Z0-9]+/,"_"),null,a)};d.fakeMd5=function(a){for(var b= +"",a=d.isUnd(a)?32:d.pInt(a);b.length/g,">").replace(/")};d.draggeblePlace=function(){return j('
 
').appendTo("#rl-hidden")};d.defautOptionsAfterRender=function(a, +b){b&&!d.isUnd(b.disable)&&e.applyBindingsToNode(a,{disable:b.disable},b)};d.windowPopupKnockout=function(a,b,c,k){var f=null,e=h.open(""),g="__OpenerApplyBindingsUid"+d.fakeMd5()+"__",l=j("#"+b);h[g]=function(){if(e&&e.document.body&&l&&l[0]){var b=j(e.document.body);j("#rl-content",b).html(l.html());j("html",e.document).addClass("external "+j("html").attr("class"));d.i18nToNode(b);F.prototype.applyExternal(a,j("#rl-content",b)[0]);h[g]=null;k(e)}};e.document.open();e.document.write(''+ +d.encodeHtml(c)+'
');e.document.close();f=e.document.createElement("script");f.type="text/javascript";f.innerHTML="if(window&&window.opener&&window.opener['"+g+"']){window.opener['"+g+"']();window.opener['"+g+"']=null}";e.document.getElementsByTagName("head")[0].appendChild(f)};d.settingsSaveHelperFunction=function(a,b,c,k){c=c||null;k=d.isUnd(k)?1E3:d.pInt(k);return function(d,f,e,l,h){b.call(c,f&&f.Result?g.SaveSettingsStep.TrueResult: +g.SaveSettingsStep.FalseResult);a&&a.call(c,d,f,e,l,h);i.delay(function(){b.call(c,g.SaveSettingsStep.Idle)},k)}};d.settingsSaveHelperSimpleFunction=function(a,b){return d.settingsSaveHelperFunction(null,a,b,1E3)};d.resizeAndCrop=function(a,b,c){var d=new Image;d.onload=function(){var a=[0,0],d=document.createElement("canvas"),k=d.getContext("2d");d.width=b;d.height=b;a=this.width>this.height?[this.width-this.height,0]:[0,this.height-this.width];k.fillStyle="#fff";k.fillRect(0,0,b,b);k.drawImage(this, +a[0]/2,a[1]/2,this.width-a[0],this.height-a[1],0,0,b,b);c(d.toDataURL("image/jpeg"))};d.src=a};ma={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",urlsafe_encode:function(a){return ma.encode(a).replace(/[+]/g,"-").replace(/[\/]/g,"_").replace(/[=]/g,".")},encode:function(a){for(var b="",c,d,f,e,g,l,i=0,a=ma._utf8_encode(a);i>2,c=(c&3)<<4|d>>4,g=(d&15)<<2|f>>6,l=f&63,isNaN(d)?g=l=64:isNaN(f)&&(l= +64),b=b+this._keyStr.charAt(e)+this._keyStr.charAt(c)+this._keyStr.charAt(g)+this._keyStr.charAt(l);return b},decode:function(a){for(var b="",c,d,f,e,g,l=0,a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");l>4,d=(d&15)<<4|e>>2,f=(e&3)<<6|g,b+=String.fromCharCode(c),64!==e&&(b+=String.fromCharCode(d)),64!==g&&(b+=String.fromCharCode(f));return ma._utf8_decode(b)}, +_utf8_encode:function(a){for(var a=a.replace(/\r\n/g,"\n"),b="",c=0,d=a.length,f=0;cf?b+=String.fromCharCode(f):(127f?b+=String.fromCharCode(f>>6|192):(b+=String.fromCharCode(f>>12|224),b+=String.fromCharCode(f>>6&63|128)),b+=String.fromCharCode(f&63|128));return b},_utf8_decode:function(a){for(var b="",c=0,d=0,f=0,e=0;cd?(b+=String.fromCharCode(d),c++):191d?(f=a.charCodeAt(c+1),b+=String.fromCharCode((d&31)<<6|f&63),c+= +2):(f=a.charCodeAt(c+1),e=a.charCodeAt(c+2),b+=String.fromCharCode((d&15)<<12|(f&63)<<6|e&63),c+=3);return b}};e.bindingHandlers.tooltip={init:function(a,b){if(!m.bMobileDevice){var c=j(a).data("tooltip-class")||"",k=j(a).data("tooltip-placement")||"top";j(a).tooltip({delay:{show:500,hide:100},html:!0,placement:k,trigger:"hover",title:function(){return''+d.i18n(e.utils.unwrapObservable(b()))+""}})}}};e.bindingHandlers.tooltip2={init:function(a,b){var c=j(a).data("tooltip-class")|| +"",d=j(a).data("tooltip-placement")||"top";j(a).tooltip({delay:{show:500,hide:100},html:!0,placement:d,title:function(){return''+b()()+""}})}};e.bindingHandlers.dropdown={init:function(a){j(a).closest(".dropdown").on("click",".e-item",function(){j(a).dropdown("toggle")})}};e.bindingHandlers.popover={init:function(a,b){j(a).popover(e.utils.unwrapObservable(b()))}};e.bindingHandlers.resizecrop={init:function(a){j(a).addClass("resizecrop").resizecrop({width:"100", +height:"100",wrapperCSS:{"border-radius":"10px"}})},update:function(a,b){b()();j(a).resizecrop({width:"100",height:"100"})}};e.bindingHandlers.onEnter={init:function(a,b,c,d){j(a).on("keypress",function(c){c&&13===h.parseInt(c.keyCode,10)&&(j(a).trigger("change"),b().call(d))})}};e.bindingHandlers.onEsc={init:function(a,b,c,d){j(a).on("keypress",function(c){c&&27===h.parseInt(c.keyCode,10)&&(j(a).trigger("change"),b().call(d))})}};e.bindingHandlers.modal={init:function(a,b){j(a).modal({keyboard:!1, +show:e.utils.unwrapObservable(b())}).on("hidden",function(){b()(!1)})},update:function(a,b){var c=e.utils.unwrapObservable(b());j(a).modal(c?"show":"hide");i.delay(function(){j(a).toggleClass("popup-active",c)},1)}};e.bindingHandlers.i18nInit={init:function(a){d.i18nToNode(a)}};e.bindingHandlers.i18nUpdate={update:function(a,b){e.utils.unwrapObservable(b());d.i18nToNode(a)}};e.bindingHandlers.link={update:function(a,b){j(a).attr("href",e.utils.unwrapObservable(b()))}};e.bindingHandlers.title={update:function(a, +b){j(a).attr("title",e.utils.unwrapObservable(b()))}};e.bindingHandlers.textF={init:function(a,b){j(a).text(e.utils.unwrapObservable(b()))}};e.bindingHandlers.initDom={init:function(a,b){b()(a)}};e.bindingHandlers.initResizeTrigger={init:function(a,b){var c=e.utils.unwrapObservable(b());j(a).css({height:c[1],"min-height":c[1]})},update:function(a,b){var c=e.utils.unwrapObservable(b()),k=d.pInt(c[1]),f=0,f=j(a).offset().top;0=c.left&&a.pageX<=c.left+k.width()&&(a.pageY>=b-100&&a.pageY<=b&&(b=function(){k.scrollTop(k.scrollTop()+3);d.windowResize()},k.data("timerScroll",h.setInterval(b,10)),b()),a.pageY>=c.top&&a.pageY<=c.top+100))c=function(){k.scrollTop(k.scrollTop()-3);d.windowResize()},k.data("timerScroll",h.setInterval(c,10)),c()})},c.stop=function(){j(k).each(function(){h.clearInterval(j(this).data("timerScroll"));j(this).data("timerScroll",!1)})});c.helper=function(a){return b()(a&&a.target?e.dataFor(a.target): +null)};j(a).draggable(c).on("mousedown",function(){d.removeInFocus()})}}};e.bindingHandlers.droppable={init:function(a,b,c){if(!m.bMobileDevice){var d=b(),f=(b=c())&&b.droppableOver?b.droppableOver:null,e=b&&b.droppableOut?b.droppableOut:null,b={tolerance:"pointer",hoverClass:"droppableHover"};d&&(b.drop=function(a,b){d(a,b)},f&&(b.over=function(a,b){f(a,b)}),e&&(b.out=function(a,b){e(a,b)}),j(a).droppable(b))}}};e.bindingHandlers.nano={init:function(a){m.bDisableNanoScroll||j(a).addClass("nano").nanoScroller({iOSNativeScrolling:!1, +preventPageScrolling:!0})}};e.bindingHandlers.saveTrigger={init:function(a){j(a).append('  ').addClass("settings-saved-trigger")},update:function(a,b){var c=e.utils.unwrapObservable(b()),d=j(a);switch(c.toString()){case "1":d.find(".animated,.error").hide().removeClass("visible").end().find(".success").show().addClass("visible");break;case "0":d.find(".animated,.success").hide().removeClass("visible").end().find(".error").show().addClass("visible"); +break;case "-2":d.find(".error,.success").hide().removeClass("visible").end().find(".animated").show().addClass("visible");break;default:d.find(".animated").hide().end().find(".error,.success").removeClass("visible")}}};e.bindingHandlers.select2={init:function(a,b){var c=0,k=null,g=new h.RegExp(/[a-zA-Z0-9\.\-_]+@[a-zA-Z0-9\.\-_]+/),t=new h.RegExp(/(.+) [<]?([^\s<@]+@[a-zA-Z0-9\.\-_]+)[>]?/),w=function(){return""},l=function(a){f.getAutocomplete(a.term,a.page,function(b,c){a.callback({more:!!c,results:i.map(b, +function(a){var b=a.toLine(!1);return{id:b,text:b,c:a}})})})};j(a).addClass("ko-select2").select2({query:function(a){a&&(0===c?(l(a),c=h.setTimeout(d.emptyFunction,100)):(h.clearInterval(c),c=h.setTimeout(function(){l(a)},100)))},formatSelection:function(a,b){var c=a&&a.c?a.c.select2Selection(b):a.text;if(null!==c)return c},formatResult:function(a,b,c,d){b=a&&a.c?a.c.select2Result(b):"";return""===b?d(a.text):b},createSearchChoice:function(a,b){return 0===b.length&&g.test(a)?{id:a,text:a}:null},formatNoMatches:w, +formatSearching:function(){return d.i18n("SUGGESTIONS/SEARCHING_DESC")},formatInputTooShort:w,formatSelectionTooBig:w,multiple:!0,tokenSeparators:[",",";"],minimumInputLength:2,selectOnBlur:!1,closeOnSelect:!0,openOnEnter:!1});e.utils.domNodeDisposal.addDisposeCallback(a,function(){j(a).select2("destroy")});j(a).on("change",function(){for(var a=j(this).select2("data"),c=0,f=a.length,e=null,g=[];c "+d.trim(a).replace(/\n/gm,"\n> ")+"\n>\n";return a.replace(/\n([> ]+)/gm,function(){return arguments&&1]*>([\s\S]*)<\/div>/gmi,f),a="\n"+d.trim(a)+"\n");return a}return""}, +a=d.isUnd(a)?!0:!!a,b=this.toHtmlString().replace(/[\s]+/gm," ").replace(//gmi,"\n").replace(/<\/h\d>/gi,"\n").replace(/<\/p>/gi,"\n\n").replace(/<\/li>/gi,"\n").replace(/<\/td>/gi,"\n").replace(/<\/tr>/gi,"\n").replace(/]*>/gmi,"\n_______________________________\n\n").replace(/]*>/gmi,"").replace(/]*>([\s\S]*)<\/div>/gmi,f).replace(/]*>/gmi,"\n__bq__start__\n").replace(/<\/blockquote>/gmi,"\n__bq__end__\n").replace(/]*>([\s\S]*?)<\/a>/gmi,function(){return arguments&& +1]*>/gm,"").replace(/>/gi,">").replace(/</gi,"<").replace(/&/gi,"&").replace(/&\w{2,6};/gi,"");return(a?d.splitPlainText(b):b).replace(/\n[ \t]+/gm,"\n").replace(/[\n]{3,}/gm,"\n\n").replace(/__bq__start__([\s\S]*)__bq__end__/gm,c).replace(/__bq__start__/gm,"").replace(/__bq__end__/gm,"")};u.prototype.getHtmlFromText=function(){return d.convertPlainTextToHtml(this.textarea.val())};u.prototype.switchToggle=function(){this.isHtml()? +this.switchToPlain():this.switchToHtml()};u.prototype.switchToPlain=function(a){var a=d.isUnd(a)?!0:a,b=this.getTextFromHtml(),c=i.bind(function(a){a&&(this.toolbar.addClass("editorHideToolbar"),j(".editorSwitcher",this.toolbar).text(this.switcherLinkText(!1)),this.textarea.val(b),this.textarea.show(),this.htmlarea.hide(),this.fOnSwitch&&this.fOnSwitch(!1))},this);!a||0===d.trim(b).length?c(!0):c(h.confirm(this.oOptions.LangSwitcherConferm))};u.prototype.switcherLinkText=function(a){return a?this.oOptions.LangSwitcherTextLabel: +this.oOptions.LangSwitcherHtmlLabel};u.prototype.switchToHtml=function(){this.toolbar.removeClass("editorHideToolbar");j(".editorSwitcher",this.toolbar).text(this.switcherLinkText(!0));this.textarea.val(this.getHtmlFromText());this.updateHtmlArea();this.textarea.hide();this.htmlarea.show();this.fOnSwitch&&this.fOnSwitch(!0)};u.prototype.addButton=function(a,b){var c=this;j("
").addClass("editorToolbarButtom").append(j('').addClass(a)).attr("title", +b).click(function(b){d.isUnd(u.htmlFunctions[a])?h.alert(a):u.htmlFunctions[a].apply(c,[j(this),b])}).appendTo(this.toolbar)};u.htmlInitToolbar=function(){if(!this.bOnlyPlain){this.addButton("bold","Bold");this.addButton("italic","Italic");this.addButton("underline","Underline");this.addButton("strikethrough","Strikethrough");this.addButton("removeformat","removeformat");this.addButton("justifyleft","justifyleft");this.addButton("justifycenter","justifycenter");this.addButton("justifyright","justifyright"); +this.addButton("horizontalrule","horizontalrule");this.addButton("orderedlist","orderedlist");this.addButton("unorderedlist","unorderedlist");this.addButton("indent","indent");this.addButton("outdent","outdent");this.addButton("forecolor","forecolor");var a=this;j("").addClass("editorSwitcher").text(a.switcherLinkText(!0)).click(function(){a.switchToggle()}).appendTo(a.toolbar)}};u.htmlInitEditor=function(){this.editor=this.htmlarea[0];this.editor.innerHTML=this.textarea.val()};u.htmlAttachEditorEvents= +function(){var a=this,b=function(b){if(b=(b&&b.originalEvent?b.originalEvent:b)||h.event){b.stopPropagation();b.preventDefault();var c=null,d=null;if((b=b.files||(b.dataTransfer?b.dataTransfer.files:null))&&1===b.length&&b[0]&&b[0].type&&0===b[0].type.indexOf("image/")){var d=b[0],c=new h.FileReader,f=d;c.onload=function(b){a.insertImage(b.target.result,f.name)};c.readAsDataURL(d)}}a.htmlarea.removeClass("editorDragOver")},c=function(){a.htmlarea.removeClass("editorDragOver")},d=function(b){b.stopPropagation(); +b.preventDefault();a.htmlarea.addClass("editorDragOver")},f=function(b){(b=b&&b.clipboardData?b.clipboardData:b&&b.originalEvent&&b.originalEvent.clipboardData?b.originalEvent.clipboardData:null)&&b.items&&i.each(b.items,function(b){if(b&&(b.type&&0===b.type.indexOf("image/"))&&b.getAsFile){var c=null,d=b.getAsFile();d&&(c=new h.FileReader,c.onload=function(b){a.insertImage(b.target.result,d.name)},c.readAsDataURL(d))}})};!this.bOnlyPlain&&(h.File&&h.FileReader&&h.FileList)&&(this.htmlarea.bind("dragover", +d),this.htmlarea.bind("dragleave",c),this.htmlarea.bind("drop",b),this.htmlarea.bind("paste",f))};for(var hb=u,ra=[],Ya=[],Y=0,Ja=0,Ka=0,La=0,Ma="",Y=0;256>Y;Y+=85)Ma=Y.toString(16),ra.push(1===Ma.length?"0"+Ma:Ma);La=ra.length;for(Y=0;Y
'),ab=sa.find(".editorFpFonts"), +bb=function(){};j.each("Arial;Arial Black;Courier New;Tahoma;Times New Roman;Verdana".split(";"),function(a,b){ab.append(j(''+b+"").click(function(){bb(b)}));ab.append("
")});sa.hide();ib.htmlFontPicker=function(a,b,c){$a||(sa.appendTo(c),$a=!0);bb=b;Za.unbind("click.fpNamespace");h.setTimeout(function(){Za.one("click.fpNamespace",function(){sa.hide()})},500);b=j(a).position();sa.css("top",5+b.top+ +j(a).height()+"px").css("left",b.left+"px").show()};var jb=u,cb=j(h.document),db=!1,ta=j('
'),eb=ta.find(".editorCpColors"),fb=function(){};j.each(u.htmlColorPickerColors,function(a,b){eb.append('')});ta.hide();j(".editorCpColor",eb).click(function(a){var b=1,c="#000000",a=j(a.target).css("background-color"), +c=a.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);if(null!==c){for(delete c[0];3>=b;++b)c[b]=d.pInt(c[b]).toString(16),1===c[b].length&&(c[b]="0"+c[b]);c="#"+c.join("")}else c=a;fb(c)});jb.htmlColorPicker=function(a,b,c){db||(ta.appendTo(c),db=!0);c=j(a).position();fb=b;cb.unbind("click.cpNamespace");h.setTimeout(function(){cb.one("click.cpNamespace",function(){ta.hide()})},100);ta.css("top",5+c.top+j(a).height()+"px").css("left",c.left+"px").show()};u.htmlFunctions={bold:function(){this.ec("bold")}, +italic:function(){this.ec("italic")},underline:function(){this.ec("underline")},strikethrough:function(){this.ec("strikethrough")},indent:function(){this.ec("indent")},outdent:function(){this.ec("outdent")},justifyleft:function(){this.ec("justifyLeft")},justifycenter:function(){this.ec("justifyCenter")},justifyright:function(){this.ec("justifyRight")},horizontalrule:function(){this.ec("insertHorizontalRule",!1,"ht")},removeformat:function(){this.ec("removeFormat")},orderedlist:function(){this.ec("insertorderedlist")}, +unorderedlist:function(){this.ec("insertunorderedlist")},forecolor:function(a){u.htmlColorPicker(a,i.bind(function(a){this.setcolor("forecolor",a)},this),this.toolbar)},backcolor:function(a){u.htmlColorPicker(a,i.bind(function(a){this.setcolor("backcolor",a)},this),this.toolbar)},fontname:function(a){u.htmlFontPicker(a,i.bind(function(a){this.ec("fontname",!1,a)},this),this.toolbar)}};M.prototype.selectItemCallbacks=function(a){(this.oCallbacks.onItemSelect||this.emptyFunction)(a)};M.prototype.init= +function(a,b){this.oContentVisible=a;this.oContentScrollable=b;if(this.oContentVisible&&this.oContentScrollable){var c=this;j(this.oContentVisible).on("click",this.sItemSelector,function(a){c.actionClick(e.dataFor(this),a)}).on("click",this.sItemCheckedSelector,function(a){var b=e.dataFor(this);b&&(a&&a.shiftKey?c.actionClick(b,a):(c.sLastUid=c.getItemUid(b),b.selected()?(b.checked(!1),c.selectedItem(null)):b.checked(!b.checked())))});j(h.document).on("keydown",function(a){var b=!0;if(a&&c.bUseKeyboard&& +!d.inFocus())if(-1d?0:d;w=l[d];break}}else if(g.EventKeyCode.Down===a||g.EventKeyCode.Insert===a||g.EventKeyCode.Home=== +a||g.EventKeyCode.PageUp===a)w=l[0];else if(g.EventKeyCode.Up===a||g.EventKeyCode.End===a||g.EventKeyCode.PageDown===a)w=l[l.length-1];w?(q&&(b?(g.EventKeyCode.Up===a||g.EventKeyCode.Down===a)&&q.checked(!q.checked()):g.EventKeyCode.Insert===a&&q.checked(!q.checked())),this.throttleSelection=!0,this.selectedItem(w),this.throttleSelection=!0,0!==this.iSelectTimer?(h.clearTimeout(this.iSelectTimer),this.iSelectTimer=h.setTimeout(function(){c.iSelectTimer=0;c.actionClick(w)},1E3)):(this.iSelectTimer= +h.setTimeout(function(){c.iSelectTimer=0},200),this.actionClick(w)),this.scrollToSelected()):q&&(b&&(g.EventKeyCode.Up===a||g.EventKeyCode.Down===a)?q.checked(!q.checked()):g.EventKeyCode.Insert===a&&q.checked(!q.checked()))};M.prototype.scrollToSelected=function(){if(!this.oContentVisible||!this.oContentScrollable)return!1;var a=j(this.sItemSelectedSelector,this.oContentScrollable),b=a.position(),c=this.oContentVisible.height(),a=a.outerHeight();return b&&(0>b.top||b.top+a>c)?(0>b.top?this.oContentScrollable.scrollTop(this.oContentScrollable.scrollTop()+ +b.top-20):this.oContentScrollable.scrollTop(this.oContentScrollable.scrollTop()+b.top-c+a+20),!0):!1};M.prototype.eventClickFunction=function(a,b){var c=this.getItemUid(a),d=0,f=0,e=null,g="",l=!1,i=!1,h=[],j=!1;if(b&&b.shiftKey&&""!==c&&""!==this.sLastUid&&c!==this.sLastUid){h=this.list();j=a.checked();d=0;for(f=h.length;d").addClass("rl-view-model").addClass("RL-"+c.viewModelTemplate()).hide().attr("data-bind",'template: {name: "'+c.viewModelTemplate()+'"}, i18nInit: true'),t.appendTo(g),c.viewModelDom=t,a.__dom=t,"Popups"===k&&(c.cancelCommand=c.closeCommand=d.createCommand(c,function(){o.hideScreenPopup(a)})),y.runHook("view-model-pre-build",[a.__name,c,t]),e.applyBindings(c,t[0]),this.delegateRun(c,"onBuild",[t]),y.runHook("view-model-post-build",[a.__name,c,t])):d.log("Cannot find view model position: "+ +k)}return a?a.__vm:null};F.prototype.applyExternal=function(a,b){a&&b&&e.applyBindings(a,b)};F.prototype.hideScreenPopup=function(a){a&&(a.__vm&&a.__dom)&&(a.__dom.hide(),a.__vm.modalVisibility(!1),this.delegateRun(a.__vm,"onHide"),this.popupVisibility(!1),i.defer(function(){a.__dom.find(".ko-select2").select2("close")}))};F.prototype.showScreenPopup=function(a,b){a&&(this.buildViewModel(a),a.__vm&&a.__dom&&(a.__dom.show(),a.__vm.modalVisibility(!0),this.delegateRun(a.__vm,"onShow",b||[]),this.popupVisibility(!0), +y.runHook("view-model-on-show",[a.__name,a.__vm,b||[]])))};F.prototype.screenOnRoute=function(a,b){var c=this,f=null,e=null;""===d.pString(a)&&(a=this.sDefaultScreenName);if(""!==a){f=this.screen(a);if(!f&&(f=this.screen(this.sDefaultScreenName)))b=a+"/"+b,a=this.sDefaultScreenName;f&&f.__started&&(f.__builded||(f.__builded=!0,d.isNonEmptyArray(f.viewModels())&&i.each(f.viewModels(),function(a){this.buildViewModel(a,f)},this),this.delegateRun(f,"onBuild")),i.defer(function(){if(c.oCurrentScreen){c.delegateRun(c.oCurrentScreen, +"onHide");d.isNonEmptyArray(c.oCurrentScreen.viewModels())&&i.each(c.oCurrentScreen.viewModels(),function(a){if(a.__vm&&a.__dom&&"Popups"!==a.__vm.viewModelPosition()){a.__dom.hide();a.__vm.viewModelVisibility(false);c.delegateRun(a.__vm,"onHide")}})}c.oCurrentScreen=f;if(c.oCurrentScreen){c.delegateRun(c.oCurrentScreen,"onShow");y.runHook("screen-on-show",[c.oCurrentScreen.screenName(),c.oCurrentScreen]);d.isNonEmptyArray(c.oCurrentScreen.viewModels())&&i.each(c.oCurrentScreen.viewModels(),function(a){if(a.__vm&& +a.__dom&&"Popups"!==a.__vm.viewModelPosition()){a.__dom.show();a.__vm.viewModelVisibility(true);c.delegateRun(a.__vm,"onShow");y.runHook("view-model-on-show",[a.__name,a.__vm])}},c)}(e=f.__cross())&&e.parse(b)}))}};F.prototype.startScreens=function(a){i.each(a,function(a){var c=(a=new a)?a.screenName():"";a&&""!==c&&(""===this.sDefaultScreenName&&(this.sDefaultScreenName=c),this.oScreens[c]=a)},this);i.each(this.oScreens,function(a){a&&(!a.__started&&a.__start)&&(a.__started=!0,a.__start(),y.runHook("screen-pre-start", +[a.screenName(),a]),this.delegateRun(a,"onStart"),y.runHook("screen-post-start",[a.screenName(),a]))},this);a=Ta.create();a.addRoute(/^([a-zA-Z0-9\-]*)\/?(.*)$/,i.bind(this.screenOnRoute,this));P.initialized.add(a.parse,a);P.changed.add(a.parse,a);P.init()};F.prototype.setHash=function(a,b,c){a="#"===a.substr(0,1)?a.substr(1):a;a="/"===a.substr(0,1)?a.substr(1):a;c=d.isUnd(c)?!1:!!c;(d.isUnd(b)?0:b)?(P.changed.active=!1,P[c?"replaceHash":"setHash"](a),P.changed.active=!0):(P.changed.active=!0,P[c? +"replaceHash":"setHash"](a),P.setHash(a))};F.prototype.bootstart=function(){this.oBoot&&this.oBoot.bootstart&&this.oBoot.bootstart();return this};o=new F;G.newInstanceFromJson=function(a){var b=new G;return b.initByJson(a)?b:null};G.prototype.name="";G.prototype.email="";G.prototype.privateType=null;G.prototype.validate=function(){return""!==this.name||""!==this.email};G.prototype.hash=function(a){return"#"+(a?"":this.name)+"#"+this.email+"#"};G.prototype.clearDuplicateName=function(){this.name=== +this.email&&(this.name="")};G.prototype.type=function(){if(null===this.privateType&&(this.email&&"@facebook.com"===this.email.substr(-13)&&(this.privateType=g.EmailType.Facebook),null===this.privateType))this.privateType=g.EmailType.Default;return this.privateType};G.prototype.search=function(a){return-1<(this.name+" "+this.email).toLowerCase().indexOf(a.toLowerCase())};G.prototype.parse=function(a){var a=d.trim(a),b=/(?:"([^"]+)")? ?,]+)>?,? ?/g.exec(a);b?(this.name=b[1]||"",this.email= +b[2]||"",this.clearDuplicateName()):/^[^@]+@[^@]+$/.test(a)&&(this.name="",this.email=a)};G.prototype.initByJson=function(a){var b=!1;a&&"Object/Email"===a["@Object"]&&(this.name=d.trim(a.Name),this.email=d.trim(a.Email),b=""!==this.email,this.clearDuplicateName());return b};G.prototype.toLine=function(a,b){var c="";""!==this.email&&(b=d.isUnd(b)?!1:!!b,a&&""!==this.name?c=b?'")+'" target="_blank" tabindex="-1">'+d.encodeHtml(this.name)+ +"":this.name:(c=this.email,""!==this.name?c=b?d.encodeHtml('"'+this.name+'" <')+'")+'" target="_blank" tabindex="-1">'+d.encodeHtml(c)+""+d.encodeHtml(">"):'"'+this.name+'" <'+c+">":b&&(c=''+d.encodeHtml(this.email)+"")));return c};G.prototype.select2Result=function(){var a="",b=f.cache().getUserPic(this.email),a=""!==b?a+(''):a+('');g.EmailType.Facebook===this.type()?(a+=""+(0'):a+=""+(0('+this.name+")":this.email);return a+""};G.prototype.select2Selection=function(a){var b="";if(g.EmailType.Facebook===this.type()){if(b=0").text(b).appendTo(a),a.append(''),null}else b=0+$/,""),b=!0);return b};E.prototype.isImage=function(){return-1+$/,""),b=i.find(c,function(b){return a===b.cidWithOutTags})); +return b||null};p.prototype.findAttachmentByContentLocation=function(a){var b=null,c=this.attachments();d.isNonEmptyArray(c)&&(b=i.find(c,function(b){return a===b.contentLocation}));return b||null};p.prototype.messageId=function(){return this.sMessageId};p.prototype.inReplyTo=function(){return this.sInReplyTo};p.prototype.references=function(){return this.sReferences};p.prototype.fromAsSingleEmail=function(){return d.isArray(this.from)&&this.from[0]?this.from[0].email:""};p.prototype.viewLink=function(){return f.link().messageViewLink(this.requestHash)}; +p.prototype.downloadLink=function(){return f.link().messageDownloadLink(this.requestHash)};p.prototype.replyEmails=function(a){var b=[],a=d.isUnd(a)?{}:a;p.replyHelper(this.replyTo,a,b);0===b.length&&p.replyHelper(this.from,a,b);return b};p.prototype.replyAllEmails=function(a){var b=[],c=[],a=d.isUnd(a)?{}:a;p.replyHelper(this.replyTo,a,b);0===b.length&&p.replyHelper(this.from,a,b);p.replyHelper(this.to,a,b);p.replyHelper(this.cc,a,c);return[b,c]};p.prototype.textBodyToString=function(){return this.body? +this.body.html():""};p.prototype.attachmentsToStringLine=function(){var a=i.map(this.attachments(),function(a){return a.fileName+" ("+a.friendlySize+")"});return a&&0"};ya.prototype.formattedNameForCompose=function(){var a=this.name();return""===a?this.email():a+" ("+this.email()+")"};ya.prototype.formattedNameForEmail=function(){var a=this.name();return""===a?this.email():'"'+d.quoteName(a)+'" <'+this.email()+">"};d.extendAsViewModel("PopupsFolderClearViewModel",za);za.prototype.clearPopup=function(){this.clearingProcess(!1);this.selectedFolder(null)};za.prototype.onShow=function(a){this.clearPopup(); +a&&this.selectedFolder(a)};d.extendAsViewModel("PopupsFolderCreateViewModel",ga);ga.prototype.sNoParentText="";ga.prototype.simpleFolderNameValidation=function(a){return/^[^\\\/]+$/g.test(d.trim(a))};ga.prototype.clearPopup=function(){this.folderName("");this.selectedParentValue("");this.focusTrigger(!1)};ga.prototype.onShow=function(){this.clearPopup();this.focusTrigger(!0)};d.extendAsViewModel("PopupsFolderSystemViewModel",aa);aa.prototype.sChooseOnText="";aa.prototype.sUnuseText="";aa.prototype.onShow= +function(a){var b="",a=d.isUnd(a)?g.SetSystemFoldersNotification.None:a;switch(a){case g.SetSystemFoldersNotification.Sent:b=d.i18n("POPUPS_SYSTEM_FOLDERS/NOTIFICATION_SENT");break;case g.SetSystemFoldersNotification.Draft:b=d.i18n("POPUPS_SYSTEM_FOLDERS/NOTIFICATION_DRAFTS");break;case g.SetSystemFoldersNotification.Spam:b=d.i18n("POPUPS_SYSTEM_FOLDERS/NOTIFICATION_SPAM");break;case g.SetSystemFoldersNotification.Trash:b=d.i18n("POPUPS_SYSTEM_FOLDERS/NOTIFICATION_TRASH")}this.notification(b)};d.extendAsViewModel("PopupsComposeViewModel", +z);z.prototype.selectIdentity=function(a){a&&this.currentIdentityID(a.optValue)};z.prototype.formattedFrom=function(a){var b=f.data().displayName(),c=f.data().accountEmail();return""===b?c:(d.isUnd(a)?0:a)?'"'+d.quoteName(b)+'" <'+c+">":b+" ("+c+")"};z.prototype.sendMessageResponse=function(a,b){var c=!1;this.sending(!1);g.StorageResultType.Success===a&&(b&&b.Result)&&(c=!0,this.modalVisibility()&&o.delegateRun(this,"closeCommand"));this.modalVisibility()&&!c&&(b&&g.Notification.CantSaveMessage=== +b.ErrorCode?(this.sendSuccessButSaveError(!0),h.alert(d.trim(d.i18n("COMPOSE/SAVED_ERROR_ON_SEND")))):(this.sendError(!0),h.alert(d.getNotification(b.ErrorCode?b.ErrorCode:g.Notification.CantSendMessage))))};z.prototype.saveMessageResponse=function(a,b){var c=!1,e=null;this.saving(!1);if(g.StorageResultType.Success===a&&(b&&b.Result)&&(b.Result.NewFolder&&b.Result.NewUid)&&(this.bFromDraft&&(e=f.data().message())&&(this.draftFolder()===e.folderFullNameRaw&&this.draftUid()===e.uid)&&f.data().message(null), +this.draftFolder(b.Result.NewFolder),this.draftUid(b.Result.NewUid),this.draftID(b.Result.NewID),this.modalVisibility()))this.savedTime(h.Math.round((new h.Date).getTime()/1E3)),this.savedOrSendingText(0
"+l+":

"+q+"
";break;case g.ComposeType.Forward:Z=r.fromToLine(!1,!0);t=r.toToLine(!1,!0);w=r.ccToLine(!1,!0);q="


"+d.i18n("COMPOSE/FORWARD_MESSAGE_TOP_TITLE")+"
"+d.i18n("COMPOSE/FORWARD_MESSAGE_TOP_FROM")+": "+Z+"
"+d.i18n("COMPOSE/FORWARD_MESSAGE_TOP_TO")+": "+t+(0"+d.i18n("COMPOSE/FORWARD_MESSAGE_TOP_CC")+": "+w:"")+"
"+d.i18n("COMPOSE/FORWARD_MESSAGE_TOP_SENT")+ +": "+d.encodeHtml(l)+"
"+d.i18n("COMPOSE/FORWARD_MESSAGE_TOP_SUBJECT")+": "+d.encodeHtml(h)+"

"+q;break;case g.ComposeType.ForwardAsAttachment:q=""}this.oEditor.setRawText(q,r.isHtml)}}else this.oEditor&&g.ComposeType.Empty===a?this.oEditor.setRawText("
"+d.convertPlainTextToHtml(f.data().signature()),g.EditorDefaultType.Html===f.data().editorDefaultType()):d.isNonEmptyArray(b)&&i.each(b,function(a){e.addMessageAsAttachment(a)});r=this.getAttachmentsDownloadsForUpload();d.isNonEmptyArray(r)&& +f.remote().messageUploadAttachments(function(a,b){if(g.StorageResultType.Success===a&&b&&b.Result){var c=null,d="";if(!e.viewModelVisibility())for(d in b.Result)if(b.Result.hasOwnProperty(d))(c=e.getAttachmentById(b.Result[d]))&&c.tempName(d)}else e.setMessageAttachmentFailedDowbloadText()},r);m&&this.oEditor&&this.oEditor.focus();this.triggerForResize()};z.prototype.onBuild=function(){this.initEditor();this.initUploader();var a=this,b=null;R.on("keydown",function(b){var d=!0;b&&(a.modalVisibility()&& +f.data().useKeyboardShortcuts())&&(b.ctrlKey&&g.EventKeyCode.S===b.keyCode?(a.saveCommand(),d=!1):b.ctrlKey&&g.EventKeyCode.Enter===b.keyCode&&(a.sendCommand(),d=!1));return d});R.on("resize",function(){a.triggerForResize()});this.dropboxEnabled()&&(b=document.createElement("script"),b.type="text/javascript",b.src="https://www.dropbox.com/static/api/1/dropins.js",j(b).attr("id","dropboxjs").attr("data-app-key",f.settingsGet("DropboxApiKey")),document.body.appendChild(b))};z.prototype.getAttachmentById= +function(a){for(var b=this.attachments(),c=0,d=b.length;cb.data("rl-cache-count")&&(b.addClass("rl-cache-purge"),a++)}),0').hide().addClass("rl-cache-class"),h.data("rl-cache-count",++m.iMessageBodyCacheCount),d.isNormal(a.Result.Html)&&""!==a.Result.Html?(c=!0,h.html(a.Result.Html.toString()).addClass("b-text-part html")):d.isNormal(a.Result.Plain)&&""!==a.Result.Plain?(c=!1,h.html(a.Result.Plain.toString()).addClass("b-text-part plain")): +c=!1,a.Result.Rtl&&(h.data("rl-is-rtl",!0),h.addClass("rtl-text-part")),i.append(h),h.data("rl-is-html",c),h.data("rl-has-images",e),l.isRtl(!!h.data("rl-is-rtl")),l.isHtml(!!h.data("rl-is-html")),l.hasImages(!!h.data("rl-has-images")),l.body=h,g&&l.showInternalImages(!0),l.hasImages()&&this.showImages()&&l.showExternalImages(!0),this.purgeMessageBodyCacheThrottle()):(e.data("rl-cache-count",++m.iMessageBodyCacheCount),l.isRtl(!!e.data("rl-is-rtl")),l.isHtml(!!e.data("rl-is-html")),l.hasImages(!!e.data("rl-has-images")), +l.body=e),this.messageActiveDom(l.body),this.hideMessageBodies(),l.body.show(),h&&d.initBlockquoteSwitcher(h);f.cache().initMessageFlagsFromCache(l);l.unseen()&&f.setMessageSeen(l);d.windowResize()}};U.prototype.setMessageList=function(a,b){if(a&&a.Result&&"Collection/MessageCollection"===a.Result["@Object"]&&a.Result["@Collection"]&&d.isArray(a.Result["@Collection"])){var c=f.data(),e=f.cache(),h=null,i=0,j=0,l=0,m=0,q=[],o=c.staticMessageList,r=null,H=null,n=null,s=0,u=!1,l=d.pInt(a.Result.MessageResultCount), +m=d.pInt(a.Result.Offset);d.isNonEmptyArray(a.Result.LastCollapsedThreadUids)&&(h=a.Result.LastCollapsedThreadUids);if((n=f.cache().getFolderFromCacheList(d.isNormal(a.Result.Folder)?a.Result.Folder:""))&&!b)f.cache().setFolderHash(a.Result.Folder,a.Result.FolderHash),d.isNormal(a.Result.MessageCount)&&n.messageCountAll(a.Result.MessageCount),d.isNormal(a.Result.MessageUnseenCount)&&(d.pInt(n.messageCountUnread())!==d.pInt(a.Result.MessageUnseenCount)&&(u=!0),n.messageCountUnread(a.Result.MessageUnseenCount)), +this.initUidNextAndNewMessages(n.fullNameRaw,a.Result.UidNext,a.Result.NewMessages);u&&n&&f.cache().clearMessageFlagsFromCacheByFolder(n.fullNameRaw);i=0;for(j=a.Result["@Collection"].length;i=s&&(s++,H.newForAnimation(!0)),H.deleted(!1),b?f.cache().initMessageFlagsFromCache(H):f.cache().storeMessageFlagsToCache(H), +H.lastInCollapsedThread(h&&-1(new h.Date).getTime()-l);q&&t.oRequests[q]&& +(t.oRequests[q].__aborted&&(f="abort"),t.oRequests[q]=null);t.defaultResponse(a,q,f,c,e,b)});q&&(0
").addClass("rl-settings-view-model").hide().attr("data-bind",'template: {name: "'+g.__rlSettingsData.Template+'"}, i18nInit: true'),t.appendTo(h),c.data=f.data(),c.viewModelDom=t,c.__rlSettingsData=g.__rlSettingsData,g.__dom=t,g.__builded= +!0,g.__vm=c,e.applyBindings(c,t[0]),o.delegateRun(c,"onBuild",[t])):d.log("Cannot find sub settings view model position: SettingsSubScreen"),c&&i.defer(function(){if(b.oCurrentSubScreen){o.delegateRun(b.oCurrentSubScreen,"onHide");b.oCurrentSubScreen.viewModelDom.hide()}b.oCurrentSubScreen=c;if(b.oCurrentSubScreen){b.oCurrentSubScreen.viewModelDom.show();o.delegateRun(b.oCurrentSubScreen,"onShow");i.each(b.menu(),function(a){a.selected(c&&c.__rlSettingsData&&a.route===c.__rlSettingsData.Route)}); +j("#rl-content .b-settings .b-content .content").scrollTop(0)}d.windowResize()})):o.setHash(f.link().settings(),!1,!0)};fa.prototype.onHide=function(){this.oCurrentSubScreen&&this.oCurrentSubScreen.viewModelDom&&(o.delegateRun(this.oCurrentSubScreen,"onHide"),this.oCurrentSubScreen.viewModelDom.hide())};fa.prototype.onBuild=function(){i.each(V.settings,function(a){a&&(a.__rlSettingsData&&!i.find(V["settings-removed"],function(b){return b&&b===a}))&&this.menu.push({route:a.__rlSettingsData.Route,label:a.__rlSettingsData.Label, +selected:e.observable(!1),disabled:!!i.find(V["settings-disabled"],function(b){return b&&b===a})})},this);this.oViewModelPlace=j("#rl-content #rl-settings-subscreen")};fa.prototype.routes=function(){var a=i.find(V.settings,function(a){return a&&a.__rlSettingsData&&a.__rlSettingsData.IsDefault}),b=a?a.__rlSettingsData.Route:"general",a={subname:/^(.*)$/,normalize_:function(a,f){f.subname=d.isUnd(f.subname)?b:d.pString(f.subname);return[f.subname]}};return[["{subname}/",a],["{subname}",a],["",a]]}; +i.extend(Fa.prototype,L.prototype);Fa.prototype.onShow=function(){f.setTitle(d.i18n("TITLES/LOGIN"))};i.extend(ca.prototype,L.prototype);ca.prototype.oLastRoute={};ca.prototype.onShow=function(){var a=f.data().accountEmail();f.setTitle((""===a?"":a+" - ")+d.i18n("TITLES/MAILBOX"))};ca.prototype.onRoute=function(a,b,c){var d=f.data(),a=f.cache().getFolderFullNameRaw(a);if(a=f.cache().getFolderFromCacheList(a))d.currentFolder(a).messageListPage(b).messageListSearch(c),!d.usePreviewPane()&&d.message()&& +d.message(null),f.reloadMessageList()};ca.prototype.onStart=function(){var a=f.data(),b=function(){d.windowResize()};f.accountsAndIdentities();i.delay(function(){f.quota()},5E3);i.delay(function(){"INBOX"!==a.currentFolderFullNameRaw()&&f.folderInformation("INBOX")},1E3);i.delay(function(){var b=f.data().spamFolder();b!==a.currentFolderFullNameRaw()&&f.folderInformation(b)},1500);i.delay(function(){var b=f.data().draftFolder();b!==a.currentFolderFullNameRaw()&&f.folderInformation(b)},2E3);i.delay(function(){f.remote().appDelayStart(d.emptyFunction)}, +35E3);h.setInterval(function(){f.folderInformation("INBOX")},12E4);h.setInterval(function(){f.quota()},3E5);Q.toggleClass("rl-no-preview-pane",!a.usePreviewPane());a.folderList.subscribe(b);a.messageList.subscribe(b);a.message.subscribe(b);a.usePreviewPane.subscribe(function(a){Q.toggleClass("rl-no-preview-pane",!a)})};ca.prototype.onBuild=function(){m.bMobileDevice||i.defer(function(){d.initLayoutResizer("#rl-resizer-left","#rl-resizer-right","#rl-right",350,800,350,350,g.ClientSideKeyName.MailBoxListSize)})}; +ca.prototype.routes=function(){var a=function(a,c){c[0]=d.pString(c[0]);c[1]=d.pInt(c[1]);c[1]=0>=c[1]?1:c[1];c[2]=d.pString(c[2]);""===a&&(c[0]="Inbox",c[1]=1);return[decodeURI(c[0]),c[1],decodeURI(c[2])]};return[[/^([a-zA-Z0-9]+)\/p([1-9][0-9]*)\/(.+)\/?$/,{normalize_:a}],[/^([a-zA-Z0-9]+)\/p([1-9][0-9]*)\/?$/,{normalize_:a}],[/^([a-zA-Z0-9]+)\/(.+)\/?$/,{normalize_:function(a,c){c[0]=d.pString(c[0]);c[1]=d.pString(c[1]);""===a&&(c[0]="Inbox");return[decodeURI(c[0]),1,decodeURI(c[1])]}}],[/^([^\/]*)$/, +{normalize_:a}]]};i.extend(Qa.prototype,fa.prototype);Qa.prototype.onShow=function(){f.setTitle(this.sSettingsTitle)};i.extend(K.prototype,Ua.prototype);K.prototype.oSettings=null;K.prototype.oLink=null;K.prototype.download=function(a){var b=null,c=null;if((b=navigator.userAgent.toLowerCase())&&(-1 function_exists('curl_init'), - 'iconv' => function_exists('iconv'), - 'json' => function_exists('json_encode'), - 'DateTime' => class_exists('DateTime') && class_exists('DateTimeZone'), - 'libxml' => function_exists('libxml_use_internal_errors'), - 'dom' => class_exists('DOMDocument'), - 'Zlib' => function_exists('gzopen'), - 'PCRE' => function_exists('preg_replace'), - 'SPL' => function_exists('spl_autoload_register') - ); - - if (version_compare(PHP_VERSION, '5.3.0', '<')) - { - echo '

'; - echo 'Your PHP version ('.PHP_VERSION.') is lower than the minimal required 5.3.0! (Error Code: 301)'; - echo '

'; - exit(301); - } - - if (in_array(false, $aRequirements)) - { - echo '

'; - echo 'The following PHP extensions are not available in your PHP configuration! (Error Code: 302)'; - echo '

    '; - - foreach ($aRequirements as $sKey => $bValue) - { - if (!$bValue) - { - echo '
  • '.$sKey.'
  • '; - } - } - - echo '
'; - exit(302); - } diff --git a/rainloop/v/1.3.9.485/static/js/admin.min.js b/rainloop/v/1.3.9.485/static/js/admin.min.js deleted file mode 100644 index b1574c55f3..0000000000 --- a/rainloop/v/1.3.9.485/static/js/admin.min.js +++ /dev/null @@ -1,158 +0,0 @@ -(function(g,j,d,ga,A,i){function p(){this.sBase="#/";this.sCdnStaticDomain=e.settingsGet("CdnStaticDomain");this.sVersion=e.settingsGet("Version");this.sSpecSuffix=e.settingsGet("AuthAccountHash")||"0";this.sServer=(e.settingsGet("IndexFile")||"./")+"?";this.sCdnStaticDomain=""===this.sCdnStaticDomain?this.sCdnStaticDomain:"/"===this.sCdnStaticDomain.substr(-1)?this.sCdnStaticDomain:this.sCdnStaticDomain+"/"}function O(){}function P(){}function Q(){var a=i.find([P,O],function(a){return a.supported()}); -a&&(this.oDriver=new a)}function ha(){}function u(a,b){this.sPosition=c.pString(a);this.sTemplate=c.pString(b);this.viewModelName="";this.viewModelVisibility=d.observable(!1);"Popups"===this.sPosition&&(this.modalVisibility=d.observable(!1));this.viewModelDom=null}function x(a,b){this.sScreenName=a;this.aViewModels=c.isArray(b)?b:[]}function q(){this.sDefaultScreenName="";this.oScreens={};this.oCurrentScreen=this.oBoot=null;this.popupVisibility=d.observable(!1);this.popupVisibility.subscribe(function(a){e&& -e.popupVisibility(a)})}function t(a,b){this.email=a||"";this.name=b||"";this.privateType=null;this.clearDuplicateName()}function C(){u.call(this,"Popups","PopupsDomain");this.edit=d.observable(!1);this.saving=d.observable(!1);this.savingError=d.observable("");this.whiteListPage=d.observable(!1);this.testing=d.observable(!1);this.testingDone=d.observable(!1);this.testingImapError=d.observable(!1);this.testingSmtpError=d.observable(!1);this.imapServerFocus=d.observable(!1);this.smtpServerFocus=d.observable(!1); -this.name=d.observable("");this.imapServer=d.observable("");this.imapPort=d.observable(m.Values.ImapDefaulPort);this.imapSecure=d.observable(f.ServerSecure.None);this.imapShortLogin=d.observable(!1);this.smtpServer=d.observable("");this.smtpPort=d.observable(m.Values.SmtpDefaulPort);this.smtpSecure=d.observable(f.ServerSecure.None);this.smtpShortLogin=d.observable(!1);this.smtpAuth=d.observable(!0);this.whiteList=d.observable("");this.imapServerFocus.subscribe(function(a){a&&(""!==this.name()&&""=== -this.imapServer())&&this.imapServer(this.name())},this);this.smtpServerFocus.subscribe(function(a){a&&(""!==this.imapServer()&&""===this.smtpServer())&&this.smtpServer(this.imapServer())},this);this.headerText=d.computed(function(){var a=this.name();return this.edit()?'Edit Domain "'+a+'"':"Add Domain"+(""===a?"":' "'+a+'"')},this);this.domainIsComputed=d.computed(function(){return""!==this.name()&&""!==this.imapServer()&&""!==this.imapPort()&&""!==this.smtpServer()&&""!==this.smtpPort()},this);this.canBeTested= -d.computed(function(){return!this.testing()&&this.domainIsComputed()},this);this.canBeSaved=d.computed(function(){return!this.saving()&&this.domainIsComputed()},this);this.createOrAddCommand=c.createCommand(this,function(){this.saving(!0);e.remote().createOrUpdateDomain(i.bind(this.onDomainCreateOrSaveResponse,this),!this.edit(),this.name(),this.imapServer(),this.imapPort(),this.imapSecure(),this.imapShortLogin(),this.smtpServer(),this.smtpPort(),this.smtpSecure(),this.smtpShortLogin(),this.smtpAuth(), -this.whiteList())},this.canBeSaved);this.testConnectionCommand=c.createCommand(this,function(){this.whiteListPage(!1);this.testingDone(!1);this.testingImapError(!1);this.testingSmtpError(!1);this.testing(!0);e.remote().testConnectionForDomain(i.bind(this.onTestConnectionResponse,this),this.imapServer(),this.imapPort(),this.imapSecure(),this.smtpServer(),this.smtpPort(),this.smtpSecure(),this.smtpAuth())},this.canBeTested);this.whiteListCommand=c.createCommand(this,function(){this.whiteListPage(!this.whiteListPage())})} -function R(){u.call(this,"Popups","PopupsPlugin");var a=this;this.onPluginSettingsUpdateResponse=i.bind(this.onPluginSettingsUpdateResponse,this);this.saveError=d.observable("");this.name=d.observable("");this.readme=d.observable("");this.configures=d.observableArray([]);this.hasReadme=d.computed(function(){return""!==this.readme()},this);this.hasConfiguration=d.computed(function(){return 0').appendTo("body");I.on("error",function(a){e&&(a&&a.originalEvent&&a.originalEvent.message&&-1===c.inArray(a.originalEvent.message, -["Uncaught Error: Error calling method on NPObject."]))&&e.remote().jsError(c.emptyFunction,a.originalEvent.message,a.originalEvent.filename,a.originalEvent.lineno,location&&location.toString?location.toString():"",K.attr("class"))})}function w(){v.call(this);this.oCache=this.oRemote=this.oData=null}var m={},f={},l={},c={},o={},k={},B={settings:[],"settings-removed":[],"settings-disabled":[]},r=null,V=g.rainloopAppData||{},ea=g.rainloopI18N||{},K=j("html"),I=j(g),la=j(g.document),W=g.Notification&& -g.Notification.requestPermission?g.Notification:null,e=null;k.minuteTick=d.observable(!0);k.fiveMinuteTick=d.observable(!0);k.langChangeTick=d.observable(!0);k.iAjaxErrorCount=0;k.iTokenErrorCount=0;k.iMessageBodyCacheCount=0;k.bUnload=!1;k.sUserAgent=(navigator.userAgent||"").toLowerCase();k.bIsiOSDevice=-1/g,">").replace(/"/g,""").replace(/'/g,"'"):""};c.splitPlainText=function(a,b){for(var h="",s="",d=a,e=0,f=0,b=c.isUnd(b)?100:b;d.length>b;)s=d.substring(0, -b),e=s.lastIndexOf(" "),f=s.lastIndexOf("\n"),-1!==f&&(e=f),-1===e&&(e=b),h+=s.substring(0,e)+"\n",d=d.substring(e+1);return h+d};var X={};c.timeOutAction=function(a,b,h){c.isUnd(X[a])&&(X[a]=0);g.clearTimeout(X[a]);X[a]=g.setTimeout(b,h)};var fa={};c.timeOutActionSecond=function(a,b,h){fa[a]||(fa[a]=g.setTimeout(function(){b();fa[a]=0},h))};var z=!1;c.audio=function(a,b){if(!1===z)if(k.bIsiOSDevice)z=null;else{var h=!1,c=!1,d=g.Audio?new g.Audio:null;d&&d.canPlayType&&d.play?((h=""!==d.canPlayType('audio/mpeg; codecs="mp3"'))|| -(c=""!==d.canPlayType('audio/ogg; codecs="vorbis"')),h||c?(z=d,z.preload="none",z.loop=!1,z.autoplay=!1,z.muted=!1,z.src=h?a:b):z=null):z=null}return z};c.hos=function(a,b){return a&&Object.hasOwnProperty?Object.hasOwnProperty.call(a,b):!1};c.i18n=function(a,b,h){var d="",a=c.isUnd(ea[a])?c.isUnd(h)?a:h:ea[a];if(!c.isUnd(b)&&!c.isNull(b))for(d in b)c.hos(b,d)&&(a=a.replace("%"+d+"%",b[d]));return a};c.i18nToNode=function(a){i.defer(function(){j(".i18n",a).each(function(){var a=j(this),h="";(h=a.data("i18n-text"))? -a.text(c.i18n(h)):((h=a.data("i18n-html"))&&a.html(c.i18n(h)),(h=a.data("i18n-placeholder"))&&a.attr("placeholder",c.i18n(h)))})})};c.i18nToDoc=function(){g.rainloopI18N&&(ea=g.rainloopI18N||{},c.i18nToNode(la),k.langChangeTick(!k.langChangeTick()));g.rainloopI18N={}};c.initOnStartOrLangChange=function(a,b,c){a&&a.call(b);c?k.langChangeTick.subscribe(function(){a&&a.call(b);c.call(b)}):a&&k.langChangeTick.subscribe(a,b)};c.inFocus=function(){var a=document.activeElement;return a&&("INPUT"===a.tagName|| -"TEXTAREA"===a.tagName||"IFRAME"===a.tagName||"DIV"===a.tagName&&"editorHtmlArea"===a.className&&a.contentEditable)};c.removeInFocus=function(){if(document&&document.activeElement&&document.activeElement.blur){var a=j(document.activeElement);(a.is("input")||a.is("textarea"))&&document.activeElement.blur()}};c.removeSelection=function(){if(g&&g.getSelection){var a=g.getSelection();a&&a.removeAllRanges&&a.removeAllRanges()}else document&&(document.selection&&document.selection.empty)&&document.selection.empty()}; -c.replySubjectAdd=function(a,b){var h=null,d=c.trim(b);null!==(h=(new g.RegExp("^"+a+"[\\s]?\\:(.*)$","gi")).exec(b))&&!c.isUnd(h[1])?d=a+"[2]: "+h[1]:null!==(h=(new g.RegExp("^("+a+"[\\s]?[\\[\\(]?)([\\d]+)([\\]\\)]?[\\s]?\\:.*)$","gi")).exec(b))&&!c.isUnd(h[1])&&!c.isUnd(h[2])&&!c.isUnd(h[3])?(c.pInt(h[2]),d=h[1]+(c.pInt(h[2])+1)+h[3]):d=a+": "+b;return d};c.roundNumber=function(a,b){return Math.round(a*Math.pow(10,b))/Math.pow(10,b)};c.friendlySize=function(a){a=c.pInt(a);return 1073741824<=a? -c.roundNumber(a/1073741824,1)+"GB":1048576<=a?c.roundNumber(a/1048576,1)+"MB":1024<=a?c.roundNumber(a/1024,0)+"KB":a+"B"};c.log=function(a){g.console&&g.console.log&&g.console.log(a)};c.getNotification=function(a){a=c.pInt(a);return c.isUnd(l[a])?"":l[a]};c.initNotificationLanguage=function(){l[f.Notification.InvalidToken]=c.i18n("NOTIFICATIONS/INVALID_TOKEN");l[f.Notification.AuthError]=c.i18n("NOTIFICATIONS/AUTH_ERROR");l[f.Notification.AccessError]=c.i18n("NOTIFICATIONS/ACCESS_ERROR");l[f.Notification.ConnectionError]= -c.i18n("NOTIFICATIONS/CONNECTION_ERROR");l[f.Notification.CaptchaError]=c.i18n("NOTIFICATIONS/CAPTCHA_ERROR");l[f.Notification.SocialFacebookLoginAccessDisable]=c.i18n("NOTIFICATIONS/SOCIAL_FACEBOOK_LOGIN_ACCESS_DISABLE");l[f.Notification.SocialTwitterLoginAccessDisable]=c.i18n("NOTIFICATIONS/SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE");l[f.Notification.SocialGoogleLoginAccessDisable]=c.i18n("NOTIFICATIONS/SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE");l[f.Notification.DomainNotAllowed]=c.i18n("NOTIFICATIONS/DOMAIN_NOT_ALLOWED"); -l[f.Notification.AccountNotAllowed]=c.i18n("NOTIFICATIONS/ACCOUNT_NOT_ALLOWED");l[f.Notification.CantGetMessageList]=c.i18n("NOTIFICATIONS/CANT_GET_MESSAGE_LIST");l[f.Notification.CantGetMessage]=c.i18n("NOTIFICATIONS/CANT_GET_MESSAGE");l[f.Notification.CantDeleteMessage]=c.i18n("NOTIFICATIONS/CANT_DELETE_MESSAGE");l[f.Notification.CantMoveMessage]=c.i18n("NOTIFICATIONS/CANT_MOVE_MESSAGE");l[f.Notification.CantSaveMessage]=c.i18n("NOTIFICATIONS/CANT_SAVE_MESSAGE");l[f.Notification.CantSendMessage]= -c.i18n("NOTIFICATIONS/CANT_SEND_MESSAGE");l[f.Notification.InvalidRecipients]=c.i18n("NOTIFICATIONS/INVALID_RECIPIENTS");l[f.Notification.CantCreateFolder]=c.i18n("NOTIFICATIONS/CANT_CREATE_FOLDER");l[f.Notification.CantRenameFolder]=c.i18n("NOTIFICATIONS/CANT_RENAME_FOLDER");l[f.Notification.CantDeleteFolder]=c.i18n("NOTIFICATIONS/CANT_DELETE_FOLDER");l[f.Notification.CantDeleteNonEmptyFolder]=c.i18n("NOTIFICATIONS/CANT_DELETE_NON_EMPTY_FOLDER");l[f.Notification.CantSubscribeFolder]=c.i18n("NOTIFICATIONS/CANT_SUBSCRIBE_FOLDER"); -l[f.Notification.CantUnsubscribeFolder]=c.i18n("NOTIFICATIONS/CANT_UNSUBSCRIBE_FOLDER");l[f.Notification.CantSaveSettings]=c.i18n("NOTIFICATIONS/CANT_SAVE_SETTINGS");l[f.Notification.CantSavePluginSettings]=c.i18n("NOTIFICATIONS/CANT_SAVE_PLUGIN_SETTINGS");l[f.Notification.DomainAlreadyExists]=c.i18n("NOTIFICATIONS/DOMAIN_ALREADY_EXISTS");l[f.Notification.CantInstallPackage]=c.i18n("NOTIFICATIONS/CANT_INSTALL_PACKAGE");l[f.Notification.CantDeletePackage]=c.i18n("NOTIFICATIONS/CANT_DELETE_PACKAGE"); -l[f.Notification.InvalidPluginPackage]=c.i18n("NOTIFICATIONS/INVALID_PLUGIN_PACKAGE");l[f.Notification.UnsupportedPluginPackage]=c.i18n("NOTIFICATIONS/UNSUPPORTED_PLUGIN_PACKAGE");l[f.Notification.LicensingServerIsUnavailable]=c.i18n("NOTIFICATIONS/LICENSING_SERVER_IS_UNAVAILABLE");l[f.Notification.LicensingExpired]=c.i18n("NOTIFICATIONS/LICENSING_EXPIRED");l[f.Notification.LicensingBanned]=c.i18n("NOTIFICATIONS/LICENSING_BANNED");l[f.Notification.DemoSendMessageError]=c.i18n("NOTIFICATIONS/DEMO_SEND_MESSAGE_ERROR"); -l[f.Notification.AccountAlreadyExists]=c.i18n("NOTIFICATIONS/ACCOUNT_ALREADY_EXISTS");l[f.Notification.MailServerError]=c.i18n("NOTIFICATIONS/MAIL_SERVER_ERROR");l[f.Notification.UnknownNotification]=c.i18n("NOTIFICATIONS/UNKNOWN_ERROR");l[f.Notification.UnknownError]=c.i18n("NOTIFICATIONS/UNKNOWN_ERROR")};c.getUploadErrorDescByCode=function(a){var b="";switch(c.pInt(a)){case f.UploadErrorCode.FileIsTooBig:b=c.i18n("UPLOAD/ERROR_FILE_IS_TOO_BIG");break;case f.UploadErrorCode.FilePartiallyUploaded:b= -c.i18n("UPLOAD/ERROR_FILE_PARTIALLY_UPLOADED");break;case f.UploadErrorCode.FileNoUploaded:b=c.i18n("UPLOAD/ERROR_NO_FILE_UPLOADED");break;case f.UploadErrorCode.MissingTempFolder:b=c.i18n("UPLOAD/ERROR_MISSING_TEMP_FOLDER");break;case f.UploadErrorCode.FileOnSaveingError:b=c.i18n("UPLOAD/ERROR_ON_SAVING_FILE");break;case f.UploadErrorCode.FileType:b=c.i18n("UPLOAD/ERROR_FILE_TYPE");break;default:b=c.i18n("UPLOAD/ERROR_UNKNOWN")}return b};c.killCtrlAandS=function(a){if(a=a||g.event){var b=a.target|| -a.srcElement,c=a.keyCode||a.which;if(a.ctrlKey&&c===f.EventKeyCode.S)a.preventDefault();else if((!b||!b.tagName||!b.tagName.match(/INPUT|TEXTAREA/i))&&a.ctrlKey&&c===f.EventKeyCode.A)g.getSelection?g.getSelection().removeAllRanges():g.document.selection&&g.document.selection.clear&&g.document.selection.clear(),a.preventDefault()}};c.createCommand=function(a,b,h){var s=b?function(){s.canExecute&&s.canExecute()&&b.apply(a,Array.prototype.slice.call(arguments));return!1}:function(){};s.enabled=d.observable(!0); -h=c.isUnd(h)?!0:h;s.canExecute=c.isFunc(h)?d.computed(function(){return s.enabled()&&h.call(a)}):d.computed(function(){return s.enabled()&&!!h});return s};c.initDataConstructorBySettings=function(a){a.editorDefaultType=d.observable(f.EditorDefaultType.Html);a.showImages=d.observable(!1);a.interfaceAnimation=d.observable(f.InterfaceAnimation.Full);k.sAnimationType=f.InterfaceAnimation.Full;a.allowThemes=d.observable(!0);a.allowCustomLogin=d.observable(!1);a.allowLanguagesOnSettings=d.observable(!0); -a.allowLanguagesOnLogin=d.observable(!0);a.desktopNotifications=d.observable(!1);a.useThreads=d.observable(!0);a.replySameFolder=d.observable(!0);a.usePreviewPane=d.observable(!0);a.useCheckboxesInList=d.observable(!0);a.interfaceAnimation.subscribe(function(a){if(k.bMobileDevice||a===f.InterfaceAnimation.None)K.removeClass("rl-anim rl-anim-full").addClass("no-rl-anim"),k.sAnimationType=f.InterfaceAnimation.None;else switch(a){case f.InterfaceAnimation.Full:K.removeClass("no-rl-anim").addClass("rl-anim rl-anim-full"); -k.sAnimationType=a;break;case f.InterfaceAnimation.Normal:K.removeClass("no-rl-anim rl-anim-full").addClass("rl-anim"),k.sAnimationType=a}});a.interfaceAnimation.valueHasMutated();a.desktopNotificationsPermisions=d.computed(function(){a.desktopNotifications();var b=f.DesktopNotifications.NotSupported;if(W&&W.permission)switch(W.permission.toLowerCase()){case "granted":b=f.DesktopNotifications.Allowed;break;case "denied":b=f.DesktopNotifications.Denied;break;case "default":b=f.DesktopNotifications.NotAllowed}else g.webkitNotifications&& -g.webkitNotifications.checkPermission&&(b=g.webkitNotifications.checkPermission());return b});a.useDesktopNotifications=d.computed({read:function(){return a.desktopNotifications()&&f.DesktopNotifications.Allowed===a.desktopNotificationsPermisions()},write:function(b){b?(b=a.desktopNotificationsPermisions(),f.DesktopNotifications.Allowed===b?a.desktopNotifications(!0):f.DesktopNotifications.NotAllowed===b?W.requestPermission(function(){a.desktopNotifications.valueHasMutated();f.DesktopNotifications.Allowed=== -a.desktopNotificationsPermisions()?a.desktopNotifications()?a.desktopNotifications.valueHasMutated():a.desktopNotifications(!0):a.desktopNotifications()?a.desktopNotifications(!1):a.desktopNotifications.valueHasMutated()}):a.desktopNotifications(!1)):a.desktopNotifications(!1)}});a.language=d.observable("");a.languages=d.observableArray([]);a.mainLanguage=d.computed({read:a.language,write:function(b){b!==a.language()?-1=a.diff(h,"hours")?d:a.format("L")===h.format("L")?c.i18n("MESSAGE_LIST/TODAY_AT",{TIME:h.format("LT")}):a.clone().subtract("days", -1).format("L")===h.format("L")?c.i18n("MESSAGE_LIST/YESTERDAY_IN",{TIME:h.format("LT")}):a.year()===h.year()?h.format("D MMM."):h.format("LL")},a)};c.isFolderExpanded=function(a){var b=e.local().get(f.ClientSideKeyName.ExpandedFolders);return i.isArray(b)&&-1!==i.indexOf(b,a)};c.setExpandedFolder=function(a,b){var c=e.local().get(f.ClientSideKeyName.ExpandedFolders);i.isArray(c)||(c=[]);b?(c.push(a),c=i.uniq(c)):c=i.without(c,a);e.local().set(f.ClientSideKeyName.ExpandedFolders,c)};c.initLayoutResizer= -function(a,b,c,d,f,N,g,k){var d=d||300,f=f||500,N=N||f-d/2,g=g||300,y=0,l=j(a),m=j(b),o=j(c),b=e.local().get(k)||N,p=function(a,b,c){if(b||c)a=o.width(),b=b?100*(b.size.width/a):null,null===b&&c&&(b=100*(l.width()/a)),null!==b&&(l.css({width:"",height:"",right:""+(100-b)+"%"}),m.css({width:"",height:"",left:""+b+"%"}))};b&&l.width(b);y=o.width()-g;y=f>y?y:f;l.resizable({minWidth:d,maxWidth:y,handles:"e",resize:p,stop:p});p(null,null,!0);I.resize(i.throttle(function(b,c){c&&(c.element&&c.element[0].id&& -"#"+c.element[0].id===""+a)&&(y=o.width()-g,y=f>y?y:f,l.resizable("option","maxWidth",y),c.size&&c.size.width&&e.local().set(k,c.size.width),p(null,null,!0))},400))};c.initBlockquoteSwitcher=function(a){if(a){var b=j("blockquote:not(.rl-bq-switcher)",a).filter(function(){return 0===j(this).parent().closest("blockquote",a).length});b&&0').insertBefore(a).click(function(){a.toggleClass("hidden-bq"); -c.windowResize()}).after("
").before("
")})}};c.removeBlockquoteSwitcher=function(a){a&&(j(a).find("blockquote.rl-bq-switcher").each(function(){j(this).removeClass("rl-bq-switcher hidden-bq")}),j(a).find(".rlBlockquoteSwitcher").each(function(){j(this).remove()}))};c.extendAsViewModel=function(a,b){b&&(b.__name=a,o.regViewModelHook(a,b),i.extend(b.prototype,u.prototype))};c.addSettingsViewModel=function(a,b,c,d,e){a.__rlSettingsData={Label:c,Template:b,Route:d,IsDefault:!!e};B.settings.push(a)}; -c.removeSettingsViewModel=function(a){B["settings-removed"].push(a)};c.disableSettingsViewModel=function(a){B["settings-disabled"].push(a)};c.convertThemeName=function(a){return c.trim(a.replace(/[^a-zA-Z]/g," ").replace(/([A-Z])/g," $1").replace(/[\s]+/g," "))};c.convertLangName=function(a){return c.i18n("LANGS_NAMES/LANG_"+a.toUpperCase().replace(/[^a-zA-Z0-9]+/,"_"),null,a)};c.fakeMd5=function(a){for(var b="",a=c.isUnd(a)?32:c.pInt(a);b.length/g,">").replace(/")};c.draggeblePlace=function(){return j('
 
').appendTo("#rl-hidden")};c.defautOptionsAfterRender=function(a,b){b&&!c.isUnd(b.disable)&&d.applyBindingsToNode(a,{disable:b.disable},b)};c.windowPopupKnockout=function(a, -b,h,d){var e=null,f=g.open(""),i="__OpenerApplyBindingsUid"+c.fakeMd5()+"__",k=j("#"+b);g[i]=function(){if(f&&f.document.body&&k&&k[0]){var b=j(f.document.body);j("#rl-content",b).html(k.html());j("html",f.document).addClass("external "+j("html").attr("class"));c.i18nToNode(b);q.prototype.applyExternal(a,j("#rl-content",b)[0]);g[i]=null;d(f)}};f.document.open();f.document.write(''+ -c.encodeHtml(h)+'
');f.document.close();e=f.document.createElement("script");e.type="text/javascript";e.innerHTML="if(window&&window.opener&&window.opener['"+i+"']){window.opener['"+i+"']();window.opener['"+i+"']=null}";f.document.getElementsByTagName("head")[0].appendChild(e)};c.settingsSaveHelperFunction=function(a,b,h,d){h=h||null;d=c.isUnd(d)?1E3:c.pInt(d);return function(c,e,g,j,y){b.call(h,e&&e.Result?f.SaveSettingsStep.TrueResult: -f.SaveSettingsStep.FalseResult);a&&a.call(h,c,e,g,j,y);i.delay(function(){b.call(h,f.SaveSettingsStep.Idle)},d)}};c.settingsSaveHelperSimpleFunction=function(a,b){return c.settingsSaveHelperFunction(null,a,b,1E3)};c.resizeAndCrop=function(a,b,c){var d=new Image;d.onload=function(){var a=[0,0],d=document.createElement("canvas"),e=d.getContext("2d");d.width=b;d.height=b;a=this.width>this.height?[this.width-this.height,0]:[0,this.height-this.width];e.fillStyle="#fff";e.fillRect(0,0,b,b);e.drawImage(this, -a[0]/2,a[1]/2,this.width-a[0],this.height-a[1],0,0,b,b);c(d.toDataURL("image/jpeg"))};d.src=a};d.bindingHandlers.tooltip={init:function(a,b){if(!k.bMobileDevice){var h=j(a).data("tooltip-class")||"",e=j(a).data("tooltip-placement")||"top";j(a).tooltip({delay:{show:500,hide:100},html:!0,placement:e,trigger:"hover",title:function(){return''+c.i18n(d.utils.unwrapObservable(b()))+""}})}}};d.bindingHandlers.tooltip2={init:function(a,b){var c=j(a).data("tooltip-class")|| -"",d=j(a).data("tooltip-placement")||"top";j(a).tooltip({delay:{show:500,hide:100},html:!0,placement:d,title:function(){return''+b()()+""}})}};d.bindingHandlers.popover={init:function(a,b){j(a).popover(d.utils.unwrapObservable(b()))}};d.bindingHandlers.resizecrop={init:function(a){j(a).addClass("resizecrop").resizecrop({width:"100",height:"100",wrapperCSS:{"border-radius":"10px"}})},update:function(a,b){b()();j(a).resizecrop({width:"100",height:"100"})}};d.bindingHandlers.onEnter= -{init:function(a,b,c,d){j(a).on("keypress",function(c){c&&13===g.parseInt(c.keyCode,10)&&(j(a).trigger("change"),b().call(d))})}};d.bindingHandlers.onEsc={init:function(a,b,c,d){j(a).on("keypress",function(c){c&&27===g.parseInt(c.keyCode,10)&&(j(a).trigger("change"),b().call(d))})}};d.bindingHandlers.modal={init:function(a,b){j(a).modal({keyboard:!1,show:d.utils.unwrapObservable(b())}).on("hidden",function(){b()(!1)})},update:function(a,b){var c=d.utils.unwrapObservable(b());j(a).modal(c?"show":"hide"); -i.delay(function(){j(a).toggleClass("popup-active",c)},1)}};d.bindingHandlers.i18nInit={init:function(a){c.i18nToNode(a)}};d.bindingHandlers.i18nUpdate={update:function(a,b){d.utils.unwrapObservable(b());c.i18nToNode(a)}};d.bindingHandlers.link={update:function(a,b){j(a).attr("href",d.utils.unwrapObservable(b()))}};d.bindingHandlers.title={update:function(a,b){j(a).attr("title",d.utils.unwrapObservable(b()))}};d.bindingHandlers.textF={init:function(a,b){j(a).text(d.utils.unwrapObservable(b()))}}; -d.bindingHandlers.initDom={init:function(a,b){b()(a)}};d.bindingHandlers.initResizeTrigger={init:function(a,b){var c=d.utils.unwrapObservable(b());j(a).css({height:c[1],"min-height":c[1]})},update:function(a,b){var h=d.utils.unwrapObservable(b()),e=c.pInt(h[1]),f=0,f=j(a).offset().top;0=h.left&&a.pageX<=h.left+d.width()&&(a.pageY>=b-100&&a.pageY<=b&&(b=function(){d.scrollTop(d.scrollTop()+3);c.windowResize()},d.data("timerScroll", -g.setInterval(b,10)),b()),a.pageY>=h.top&&a.pageY<=h.top+100))h=function(){d.scrollTop(d.scrollTop()-3);c.windowResize()},d.data("timerScroll",g.setInterval(h,10)),h()})},h.stop=function(){j(e).each(function(){g.clearInterval(j(this).data("timerScroll"));j(this).data("timerScroll",!1)})});h.helper=function(a){return b()(a&&a.target?d.dataFor(a.target):null)};j(a).draggable(h).on("mousedown",function(){c.removeInFocus()})}}};d.bindingHandlers.droppable={init:function(a,b,c){if(!k.bMobileDevice){var d= -b(),e=(b=c())&&b.droppableOver?b.droppableOver:null,f=b&&b.droppableOut?b.droppableOut:null,b={tolerance:"pointer",hoverClass:"droppableHover"};d&&(b.drop=function(a,b){d(a,b)},e&&(b.over=function(a,b){e(a,b)}),f&&(b.out=function(a,b){f(a,b)}),j(a).droppable(b))}}};d.bindingHandlers.nano={init:function(a){k.bDisableNanoScroll||j(a).addClass("nano").nanoScroller({iOSNativeScrolling:!1,preventPageScrolling:!0})}};d.bindingHandlers.saveTrigger={init:function(a){j(a).append('  ').addClass("settings-saved-trigger")}, -update:function(a,b){var c=d.utils.unwrapObservable(b()),e=j(a);switch(c.toString()){case "1":e.find(".animated,.error").hide().removeClass("visible").end().find(".success").show().addClass("visible");break;case "0":e.find(".animated,.success").hide().removeClass("visible").end().find(".error").show().addClass("visible");break;case "-2":e.find(".error,.success").hide().removeClass("visible").end().find(".animated").show().addClass("visible");break;default:e.find(".animated").hide().end().find(".error,.success").removeClass("visible")}}}; -d.bindingHandlers.select2={init:function(a,b){var h=0,f=null,ma=new g.RegExp(/[a-zA-Z0-9\.\-_]+@[a-zA-Z0-9\.\-_]+/),N=new g.RegExp(/(.+) [<]?([^\s<@]+@[a-zA-Z0-9\.\-_]+)[>]?/),k=function(){return""},l=function(a){e.getAutocomplete(a.term,a.page,function(b,c){a.callback({more:!!c,results:i.map(b,function(a){var b=a.toLine(!1);return{id:b,text:b,c:a}})})})};j(a).addClass("ko-select2").select2({query:function(a){a&&(0===h?(l(a),h=g.setTimeout(c.emptyFunction,100)):(g.clearInterval(h),h=g.setTimeout(function(){l(a)}, -100)))},formatSelection:function(a,b){var c=a&&a.c?a.c.select2Selection(b):a.text;if(null!==c)return c},formatResult:function(a,b,c,h){b=a&&a.c?a.c.select2Result(b):"";return""===b?h(a.text):b},createSearchChoice:function(a,b){return 0===b.length&&ma.test(a)?{id:a,text:a}:null},formatNoMatches:k,formatSearching:function(){return c.i18n("SUGGESTIONS/SEARCHING_DESC")},formatInputTooShort:k,formatSelectionTooBig:k,multiple:!0,tokenSeparators:[",",";"],minimumInputLength:2,selectOnBlur:!1,closeOnSelect:!0, -openOnEnter:!1});d.utils.domNodeDisposal.addDisposeCallback(a,function(){j(a).select2("destroy")});j(a).on("change",function(){for(var a=j(this).select2("data"),h=0,d=a.length,e=null,g=[];h").addClass("rl-view-model").addClass("RL-"+h.viewModelTemplate()).hide().attr("data-bind",'template: {name: "'+h.viewModelTemplate()+'"}, i18nInit: true'),i.appendTo(g),h.viewModelDom=i,a.__dom=i,"Popups"===f&&(h.cancelCommand=h.closeCommand=c.createCommand(h,function(){r.hideScreenPopup(a)})),o.runHook("view-model-pre-build",[a.__name,h,i]),d.applyBindings(h, -i[0]),this.delegateRun(h,"onBuild",[i]),o.runHook("view-model-post-build",[a.__name,h,i])):c.log("Cannot find view model position: "+f)}return a?a.__vm:null};q.prototype.applyExternal=function(a,b){a&&b&&d.applyBindings(a,b)};q.prototype.hideScreenPopup=function(a){a&&(a.__vm&&a.__dom)&&(a.__dom.hide(),a.__vm.modalVisibility(!1),this.delegateRun(a.__vm,"onHide"),this.popupVisibility(!1),i.defer(function(){a.__dom.find(".ko-select2").select2("close")}))};q.prototype.showScreenPopup=function(a,b){a&& -(this.buildViewModel(a),a.__vm&&a.__dom&&(a.__dom.show(),a.__vm.modalVisibility(!0),this.delegateRun(a.__vm,"onShow",b||[]),this.popupVisibility(!0),o.runHook("view-model-on-show",[a.__name,a.__vm,b||[]])))};q.prototype.screenOnRoute=function(a,b){var d=this,e=null,f=null;""===c.pString(a)&&(a=this.sDefaultScreenName);if(""!==a){e=this.screen(a);if(!e&&(e=this.screen(this.sDefaultScreenName)))b=a+"/"+b,a=this.sDefaultScreenName;e&&e.__started&&(e.__builded||(e.__builded=!0,c.isNonEmptyArray(e.viewModels())&& -i.each(e.viewModels(),function(a){this.buildViewModel(a,e)},this),this.delegateRun(e,"onBuild")),i.defer(function(){if(d.oCurrentScreen){d.delegateRun(d.oCurrentScreen,"onHide");c.isNonEmptyArray(d.oCurrentScreen.viewModels())&&i.each(d.oCurrentScreen.viewModels(),function(a){if(a.__vm&&a.__dom&&"Popups"!==a.__vm.viewModelPosition()){a.__dom.hide();a.__vm.viewModelVisibility(false);d.delegateRun(a.__vm,"onHide")}})}d.oCurrentScreen=e;if(d.oCurrentScreen){d.delegateRun(d.oCurrentScreen,"onShow");o.runHook("screen-on-show", -[d.oCurrentScreen.screenName(),d.oCurrentScreen]);c.isNonEmptyArray(d.oCurrentScreen.viewModels())&&i.each(d.oCurrentScreen.viewModels(),function(a){if(a.__vm&&a.__dom&&"Popups"!==a.__vm.viewModelPosition()){a.__dom.show();a.__vm.viewModelVisibility(true);d.delegateRun(a.__vm,"onShow");o.runHook("view-model-on-show",[a.__name,a.__vm])}},d)}(f=e.__cross())&&f.parse(b)}))}};q.prototype.startScreens=function(a){i.each(a,function(a){var c=(a=new a)?a.screenName():"";a&&""!==c&&(""===this.sDefaultScreenName&& -(this.sDefaultScreenName=c),this.oScreens[c]=a)},this);i.each(this.oScreens,function(a){a&&(!a.__started&&a.__start)&&(a.__started=!0,a.__start(),o.runHook("screen-pre-start",[a.screenName(),a]),this.delegateRun(a,"onStart"),o.runHook("screen-post-start",[a.screenName(),a]))},this);a=ga.create();a.addRoute(/^([a-zA-Z0-9\-]*)\/?(.*)$/,i.bind(this.screenOnRoute,this));A.initialized.add(a.parse,a);A.changed.add(a.parse,a);A.init()};q.prototype.setHash=function(a,b){a="#"===a.substr(0,1)?a.substr(1): -a;a="/"===a.substr(0,1)?a.substr(1):a;(c.isUnd(b)?0:b)?(A.changed.active=!1,A.setHash(a),A.changed.active=!0):(A.changed.active=!0,A.setHash(a))};q.prototype.bootstart=function(){this.oBoot&&this.oBoot.bootstart&&this.oBoot.bootstart();return this};r=new q;t.newInstanceFromJson=function(a){var b=new t;return b.initByJson(a)?b:null};t.prototype.name="";t.prototype.email="";t.prototype.privateType=null;t.prototype.validate=function(){return""!==this.name||""!==this.email};t.prototype.hash=function(a){return"#"+ -(a?"":this.name)+"#"+this.email+"#"};t.prototype.clearDuplicateName=function(){this.name===this.email&&(this.name="")};t.prototype.type=function(){if(null===this.privateType&&(this.email&&"@facebook.com"===this.email.substr(-13)&&(this.privateType=f.EmailType.Facebook),null===this.privateType))this.privateType=f.EmailType.Default;return this.privateType};t.prototype.search=function(a){return-1<(this.name+" "+this.email).toLowerCase().indexOf(a.toLowerCase())};t.prototype.parse=function(a){var a=c.trim(a), -b=/(?:"([^"]+)")? ?,]+)>?,? ?/g.exec(a);b?(this.name=b[1]||"",this.email=b[2]||"",this.clearDuplicateName()):/^[^@]+@[^@]+$/.test(a)&&(this.name="",this.email=a)};t.prototype.initByJson=function(a){var b=!1;a&&"Object/Email"===a["@Object"]&&(this.name=c.trim(a.Name),this.email=c.trim(a.Email),b=""!==this.email,this.clearDuplicateName());return b};t.prototype.toLine=function(a,b){var d="";""!==this.email&&(b=c.isUnd(b)?!1:!!b,a&&""!==this.name?d=b?'")+'" target="_blank" tabindex="-1">'+c.encodeHtml(this.name)+"":this.name:(d=this.email,""!==this.name?d=b?c.encodeHtml('"'+this.name+'" <')+'")+'" target="_blank" tabindex="-1">'+c.encodeHtml(d)+""+c.encodeHtml(">"):'"'+this.name+'" <'+d+">":b&&(d=''+c.encodeHtml(this.email)+"")));return d};t.prototype.select2Result=function(){var a= -"",b=e.cache().getUserPic(this.email),a=""!==b?a+(''):a+('');f.EmailType.Facebook===this.type()?(a+=""+(0'):a+=""+(0('+this.name+")":this.email);return a+""};t.prototype.select2Selection= -function(a){var b="";if(f.EmailType.Facebook===this.type()){if(b=0").text(b).appendTo(a),a.append(''),null}else b=0(new g.Date).getTime()-p);n&&l.oRequests[n]&&(l.oRequests[n].__aborted&&(e="abort"),l.oRequests[n]=null);l.defaultResponse(a,n,e,d,f,b)});n&&(0
").addClass("rl-settings-view-model").hide().attr("data-bind", -'template: {name: "'+g.__rlSettingsData.Template+'"}, i18nInit: true'),l.appendTo(k),f.data=e.data(),f.viewModelDom=l,f.viewModelDom.addClass("rl-animation-margin"),f.__rlSettingsData=g.__rlSettingsData,g.__dom=l,g.__builded=!0,g.__vm=f,d.applyBindings(f,l[0]),r.delegateRun(f,"onBuild",[l])):c.log("Cannot find sub settings view model position: SettingsSubScreen"),f&&i.defer(function(){if(b.oCurrentSubScreen){r.delegateRun(b.oCurrentSubScreen,"onHide");b.oCurrentSubScreen.viewModelDom.hide();b.oCurrentSubScreen.viewModelDom.addClass("rl-animation-margin")}b.oCurrentSubScreen= -f;if(b.oCurrentSubScreen){b.oCurrentSubScreen.viewModelDom.show();r.delegateRun(b.oCurrentSubScreen,"onShow");i.each(b.menu(),function(a){a.selected(f&&f.__rlSettingsData&&a.route===f.__rlSettingsData.Route)});j("#rl-content .b-settings .b-content .content").scrollTop(0);b.oCurrentSubScreen.viewModelDom.removeClass("rl-animation-margin")}c.windowResize()}))};H.prototype.onHide=function(){this.oCurrentSubScreen&&this.oCurrentSubScreen.viewModelDom&&(r.delegateRun(this.oCurrentSubScreen,"onHide"),this.oCurrentSubScreen.viewModelDom.hide(), -this.oCurrentSubScreen.viewModelDom.addClass("rl-animation-margin"))};H.prototype.onBuild=function(){i.each(B.settings,function(a){a&&(a.__rlSettingsData&&!i.find(B["settings-removed"],function(b){return b&&b===a}))&&this.menu.push({route:a.__rlSettingsData.Route,label:a.__rlSettingsData.Label,selected:d.observable(!1),disabled:!!i.find(B["settings-disabled"],function(b){return b&&b===a})})},this);this.oViewModelPlace=j("#rl-content #rl-settings-subscreen")};H.prototype.routes=function(){var a=i.find(B.settings, -function(a){return a&&a.__rlSettingsData&&a.__rlSettingsData.IsDefault}),b=a?a.__rlSettingsData.Route:"general",a={subname:/^(.*)$/,normalize_:function(a,d){d.subname=c.isUnd(d.subname)?b:c.pString(d.subname);return[d.subname]}};return[["{subname}/",a],["{subname}",a],["",a]]};i.extend(ca.prototype,x.prototype);ca.prototype.onShow=function(){e.setTitle("")};i.extend(da.prototype,H.prototype);da.prototype.onShow=function(){e.setTitle("")};i.extend(v.prototype,ha.prototype);v.prototype.oSettings=null; -v.prototype.oLink=null;v.prototype.download=function(a){var b=null,c=null;if((b=navigator.userAgent.toLowerCase())&&(-1=f||g-2<=f)l+=2;k(f);c=b=f}for(;0=c)k(c, -!0),l--;else if(0>=b)break;3===b?k(2,!1):3c&&k(Math.round((g+c)/2),!0,"...");1c&&k(g,!0)}return e},this);this.checkAll=f.computed({read:function(){return 0c},this);this.hasMessages=f.computed(function(){return 0'),c.after(l),c.remove();l&&l[0]&& -l.attr("data-href",f).attr("data-theme",b[0]).text(b[1]);a.themeTrigger(g.SaveSettingsStep.TrueResult)}}).always(function(){a.iTimer=h.setTimeout(function(){a.themeTrigger(g.SaveSettingsStep.Idle)},1E3);a.oLastAjax=null}));e.remote().saveSettings(null,{Theme:b})},this)}function Ma(){d.initDataConstructorBySettings(this)}function V(){d.initDataConstructorBySettings(this);var a=function(a){return function(){var b=e.cache().getFolderFromCacheList(a());b&&b.type(g.FolderType.User)}},b=function(a){return function(b){(b= -e.cache().getFolderFromCacheList(b))&&b.type(a)}};this.devPassword=this.devLogin=this.devEmail="";this.accountEmail=f.observable("");this.accountLogin=f.observable("");this.projectHash=f.observable("");this.threading=f.observable(!1);this.lastFoldersHash="";this.remoteChangePassword=this.remoteSuggestions=!1;this.sentFolder=f.observable("");this.draftFolder=f.observable("");this.spamFolder=f.observable("");this.trashFolder=f.observable("");this.sentFolder.subscribe(a(this.sentFolder),this,"beforeChange"); -this.draftFolder.subscribe(a(this.draftFolder),this,"beforeChange");this.spamFolder.subscribe(a(this.spamFolder),this,"beforeChange");this.trashFolder.subscribe(a(this.trashFolder),this,"beforeChange");this.sentFolder.subscribe(b(g.FolderType.SentItems),this);this.draftFolder.subscribe(b(g.FolderType.Draft),this);this.spamFolder.subscribe(b(g.FolderType.Spam),this);this.trashFolder.subscribe(b(g.FolderType.Trash),this);this.draftFolderNotEnabled=f.computed(function(){return""===this.draftFolder()|| -p.Values.UnuseOptionValue===this.draftFolder()},this);this.displayName=f.observable("");this.signature=f.observable("");this.replyTo=f.observable("");this.accounts=f.observableArray([]);this.accountsLoading=f.observable(!1);this.namespace="";this.folderList=f.observableArray([]);this.foldersListError=f.observable("");this.foldersLoading=f.observable(!1);this.foldersCreating=f.observable(!1);this.foldersDeleting=f.observable(!1);this.foldersRenaming=f.observable(!1);this.currentFolder=f.observable(null).extend({toggleSubscribe:[null, -function(a){a&&a.selected(!1)},function(a){a&&a.selected(!0)}]});this.currentFolderFullNameRaw=f.computed(function(){return this.currentFolder()?this.currentFolder().fullNameRaw:""},this);this.currentFolderFullName=f.computed(function(){return this.currentFolder()?this.currentFolder().fullName:""},this);this.currentFolderFullNameHash=f.computed(function(){return this.currentFolder()?this.currentFolder().fullNameHash:""},this);this.currentFolderName=f.computed(function(){return this.currentFolder()? -this.currentFolder().name():""},this);this.folderListSystemNames=f.computed(function(){var a=["INBOX"],b=this.folderList(),e=this.sentFolder(),f=this.draftFolder(),g=this.spamFolder(),k=this.trashFolder();d.isArray(b)&&0').appendTo("body");Q.on("error",function(a){e&&(a&&a.originalEvent&&a.originalEvent.message&&-1===d.inArray(a.originalEvent.message,["Uncaught Error: Error calling method on NPObject."]))&&e.remote().jsError(d.emptyFunction,a.originalEvent.message,a.originalEvent.filename,a.originalEvent.lineno,location&& -location.toString?location.toString():"",U.attr("class"))})}function B(){K.call(this);this.oCache=this.oRemote=this.oData=null;this.iSuggestionsLimit=d.pInt(this.settingsGet("SuggestionsLimit"));this.iSuggestionsLimit=0===this.iSuggestionsLimit?20:this.iSuggestionsLimit;this.quotaDebounce=i.debounce(this.quota,3E4)}var p={},g={},v={},d={},y={},na={},n={},W={settings:[],"settings-removed":[],"settings-disabled":[]},o=null,Fa=h.rainloopAppData||{},Oa=h.rainloopI18N||{},U=j("html"),Q=j(h),Ga=j(h.document), -oa=h.Notification&&h.Notification.requestPermission?h.Notification:null,e=null;n.minuteTick=f.observable(!0);n.fiveMinuteTick=f.observable(!0);n.langChangeTick=f.observable(!0);n.iAjaxErrorCount=0;n.iTokenErrorCount=0;n.iMessageBodyCacheCount=0;n.bUnload=!1;n.sUserAgent=(navigator.userAgent||"").toLowerCase();n.bIsiOSDevice=-1/g,">").replace(/"/g,""").replace(/'/g,"'"):""};d.splitPlainText=function(a,b){for(var c="",l="",e=a,f=0,g=0,b=d.isUnd(b)?100:b;e.length>b;)l=e.substring(0, -b),f=l.lastIndexOf(" "),g=l.lastIndexOf("\n"),-1!==g&&(f=g),-1===f&&(f=b),c+=l.substring(0,f)+"\n",e=e.substring(f+1);return c+e};var Ha={};d.timeOutAction=function(a,b,c){d.isUnd(Ha[a])&&(Ha[a]=0);h.clearTimeout(Ha[a]);Ha[a]=h.setTimeout(b,c)};var Pa={};d.timeOutActionSecond=function(a,b,c){Pa[a]||(Pa[a]=h.setTimeout(function(){b();Pa[a]=0},c))};var R=!1;d.audio=function(a,b){if(!1===R)if(n.bIsiOSDevice)R=null;else{var c=!1,d=!1,e=h.Audio?new h.Audio:null;e&&e.canPlayType&&e.play?((c=""!==e.canPlayType('audio/mpeg; codecs="mp3"'))|| -(d=""!==e.canPlayType('audio/ogg; codecs="vorbis"')),c||d?(R=e,R.preload="none",R.loop=!1,R.autoplay=!1,R.muted=!1,R.src=c?a:b):R=null):R=null}return R};d.hos=function(a,b){return a&&Object.hasOwnProperty?Object.hasOwnProperty.call(a,b):!1};d.i18n=function(a,b,c){var l="",a=d.isUnd(Oa[a])?d.isUnd(c)?a:c:Oa[a];if(!d.isUnd(b)&&!d.isNull(b))for(l in b)d.hos(b,l)&&(a=a.replace("%"+l+"%",b[l]));return a};d.i18nToNode=function(a){i.defer(function(){j(".i18n",a).each(function(){var a=j(this),c="";(c=a.data("i18n-text"))? -a.text(d.i18n(c)):((c=a.data("i18n-html"))&&a.html(d.i18n(c)),(c=a.data("i18n-placeholder"))&&a.attr("placeholder",d.i18n(c)))})})};d.i18nToDoc=function(){h.rainloopI18N&&(Oa=h.rainloopI18N||{},d.i18nToNode(Ga),n.langChangeTick(!n.langChangeTick()));h.rainloopI18N={}};d.initOnStartOrLangChange=function(a,b,c){a&&a.call(b);c?n.langChangeTick.subscribe(function(){a&&a.call(b);c.call(b)}):a&&n.langChangeTick.subscribe(a,b)};d.inFocus=function(){var a=document.activeElement;return a&&("INPUT"===a.tagName|| -"TEXTAREA"===a.tagName||"IFRAME"===a.tagName||"DIV"===a.tagName&&"editorHtmlArea"===a.className&&a.contentEditable)};d.removeInFocus=function(){if(document&&document.activeElement&&document.activeElement.blur){var a=j(document.activeElement);(a.is("input")||a.is("textarea"))&&document.activeElement.blur()}};d.removeSelection=function(){if(h&&h.getSelection){var a=h.getSelection();a&&a.removeAllRanges&&a.removeAllRanges()}else document&&(document.selection&&document.selection.empty)&&document.selection.empty()}; -d.replySubjectAdd=function(a,b){var c=null,l=d.trim(b);null!==(c=(new h.RegExp("^"+a+"[\\s]?\\:(.*)$","gi")).exec(b))&&!d.isUnd(c[1])?l=a+"[2]: "+c[1]:null!==(c=(new h.RegExp("^("+a+"[\\s]?[\\[\\(]?)([\\d]+)([\\]\\)]?[\\s]?\\:.*)$","gi")).exec(b))&&!d.isUnd(c[1])&&!d.isUnd(c[2])&&!d.isUnd(c[3])?(d.pInt(c[2]),l=c[1]+(d.pInt(c[2])+1)+c[3]):l=a+": "+b;return l};d.roundNumber=function(a,b){return Math.round(a*Math.pow(10,b))/Math.pow(10,b)};d.friendlySize=function(a){a=d.pInt(a);return 1073741824<=a? -d.roundNumber(a/1073741824,1)+"GB":1048576<=a?d.roundNumber(a/1048576,1)+"MB":1024<=a?d.roundNumber(a/1024,0)+"KB":a+"B"};d.log=function(a){h.console&&h.console.log&&h.console.log(a)};d.getNotification=function(a){a=d.pInt(a);return d.isUnd(v[a])?"":v[a]};d.initNotificationLanguage=function(){v[g.Notification.InvalidToken]=d.i18n("NOTIFICATIONS/INVALID_TOKEN");v[g.Notification.AuthError]=d.i18n("NOTIFICATIONS/AUTH_ERROR");v[g.Notification.AccessError]=d.i18n("NOTIFICATIONS/ACCESS_ERROR");v[g.Notification.ConnectionError]= -d.i18n("NOTIFICATIONS/CONNECTION_ERROR");v[g.Notification.CaptchaError]=d.i18n("NOTIFICATIONS/CAPTCHA_ERROR");v[g.Notification.SocialFacebookLoginAccessDisable]=d.i18n("NOTIFICATIONS/SOCIAL_FACEBOOK_LOGIN_ACCESS_DISABLE");v[g.Notification.SocialTwitterLoginAccessDisable]=d.i18n("NOTIFICATIONS/SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE");v[g.Notification.SocialGoogleLoginAccessDisable]=d.i18n("NOTIFICATIONS/SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE");v[g.Notification.DomainNotAllowed]=d.i18n("NOTIFICATIONS/DOMAIN_NOT_ALLOWED"); -v[g.Notification.AccountNotAllowed]=d.i18n("NOTIFICATIONS/ACCOUNT_NOT_ALLOWED");v[g.Notification.CantGetMessageList]=d.i18n("NOTIFICATIONS/CANT_GET_MESSAGE_LIST");v[g.Notification.CantGetMessage]=d.i18n("NOTIFICATIONS/CANT_GET_MESSAGE");v[g.Notification.CantDeleteMessage]=d.i18n("NOTIFICATIONS/CANT_DELETE_MESSAGE");v[g.Notification.CantMoveMessage]=d.i18n("NOTIFICATIONS/CANT_MOVE_MESSAGE");v[g.Notification.CantSaveMessage]=d.i18n("NOTIFICATIONS/CANT_SAVE_MESSAGE");v[g.Notification.CantSendMessage]= -d.i18n("NOTIFICATIONS/CANT_SEND_MESSAGE");v[g.Notification.InvalidRecipients]=d.i18n("NOTIFICATIONS/INVALID_RECIPIENTS");v[g.Notification.CantCreateFolder]=d.i18n("NOTIFICATIONS/CANT_CREATE_FOLDER");v[g.Notification.CantRenameFolder]=d.i18n("NOTIFICATIONS/CANT_RENAME_FOLDER");v[g.Notification.CantDeleteFolder]=d.i18n("NOTIFICATIONS/CANT_DELETE_FOLDER");v[g.Notification.CantDeleteNonEmptyFolder]=d.i18n("NOTIFICATIONS/CANT_DELETE_NON_EMPTY_FOLDER");v[g.Notification.CantSubscribeFolder]=d.i18n("NOTIFICATIONS/CANT_SUBSCRIBE_FOLDER"); -v[g.Notification.CantUnsubscribeFolder]=d.i18n("NOTIFICATIONS/CANT_UNSUBSCRIBE_FOLDER");v[g.Notification.CantSaveSettings]=d.i18n("NOTIFICATIONS/CANT_SAVE_SETTINGS");v[g.Notification.CantSavePluginSettings]=d.i18n("NOTIFICATIONS/CANT_SAVE_PLUGIN_SETTINGS");v[g.Notification.DomainAlreadyExists]=d.i18n("NOTIFICATIONS/DOMAIN_ALREADY_EXISTS");v[g.Notification.CantInstallPackage]=d.i18n("NOTIFICATIONS/CANT_INSTALL_PACKAGE");v[g.Notification.CantDeletePackage]=d.i18n("NOTIFICATIONS/CANT_DELETE_PACKAGE"); -v[g.Notification.InvalidPluginPackage]=d.i18n("NOTIFICATIONS/INVALID_PLUGIN_PACKAGE");v[g.Notification.UnsupportedPluginPackage]=d.i18n("NOTIFICATIONS/UNSUPPORTED_PLUGIN_PACKAGE");v[g.Notification.LicensingServerIsUnavailable]=d.i18n("NOTIFICATIONS/LICENSING_SERVER_IS_UNAVAILABLE");v[g.Notification.LicensingExpired]=d.i18n("NOTIFICATIONS/LICENSING_EXPIRED");v[g.Notification.LicensingBanned]=d.i18n("NOTIFICATIONS/LICENSING_BANNED");v[g.Notification.DemoSendMessageError]=d.i18n("NOTIFICATIONS/DEMO_SEND_MESSAGE_ERROR"); -v[g.Notification.AccountAlreadyExists]=d.i18n("NOTIFICATIONS/ACCOUNT_ALREADY_EXISTS");v[g.Notification.MailServerError]=d.i18n("NOTIFICATIONS/MAIL_SERVER_ERROR");v[g.Notification.UnknownNotification]=d.i18n("NOTIFICATIONS/UNKNOWN_ERROR");v[g.Notification.UnknownError]=d.i18n("NOTIFICATIONS/UNKNOWN_ERROR")};d.getUploadErrorDescByCode=function(a){var b="";switch(d.pInt(a)){case g.UploadErrorCode.FileIsTooBig:b=d.i18n("UPLOAD/ERROR_FILE_IS_TOO_BIG");break;case g.UploadErrorCode.FilePartiallyUploaded:b= -d.i18n("UPLOAD/ERROR_FILE_PARTIALLY_UPLOADED");break;case g.UploadErrorCode.FileNoUploaded:b=d.i18n("UPLOAD/ERROR_NO_FILE_UPLOADED");break;case g.UploadErrorCode.MissingTempFolder:b=d.i18n("UPLOAD/ERROR_MISSING_TEMP_FOLDER");break;case g.UploadErrorCode.FileOnSaveingError:b=d.i18n("UPLOAD/ERROR_ON_SAVING_FILE");break;case g.UploadErrorCode.FileType:b=d.i18n("UPLOAD/ERROR_FILE_TYPE");break;default:b=d.i18n("UPLOAD/ERROR_UNKNOWN")}return b};d.killCtrlAandS=function(a){if(a=a||h.event){var b=a.target|| -a.srcElement,c=a.keyCode||a.which;if(a.ctrlKey&&c===g.EventKeyCode.S)a.preventDefault();else if((!b||!b.tagName||!b.tagName.match(/INPUT|TEXTAREA/i))&&a.ctrlKey&&c===g.EventKeyCode.A)h.getSelection?h.getSelection().removeAllRanges():h.document.selection&&h.document.selection.clear&&h.document.selection.clear(),a.preventDefault()}};d.createCommand=function(a,b,c){var l=b?function(){l.canExecute&&l.canExecute()&&b.apply(a,Array.prototype.slice.call(arguments));return!1}:function(){};l.enabled=f.observable(!0); -c=d.isUnd(c)?!0:c;l.canExecute=d.isFunc(c)?f.computed(function(){return l.enabled()&&c.call(a)}):f.computed(function(){return l.enabled()&&!!c});return l};d.initDataConstructorBySettings=function(a){a.editorDefaultType=f.observable(g.EditorDefaultType.Html);a.showImages=f.observable(!1);a.interfaceAnimation=f.observable(g.InterfaceAnimation.Full);n.sAnimationType=g.InterfaceAnimation.Full;a.allowThemes=f.observable(!0);a.allowCustomLogin=f.observable(!1);a.allowLanguagesOnSettings=f.observable(!0); -a.allowLanguagesOnLogin=f.observable(!0);a.desktopNotifications=f.observable(!1);a.useThreads=f.observable(!0);a.replySameFolder=f.observable(!0);a.usePreviewPane=f.observable(!0);a.useCheckboxesInList=f.observable(!0);a.interfaceAnimation.subscribe(function(a){if(n.bMobileDevice||a===g.InterfaceAnimation.None)U.removeClass("rl-anim rl-anim-full").addClass("no-rl-anim"),n.sAnimationType=g.InterfaceAnimation.None;else switch(a){case g.InterfaceAnimation.Full:U.removeClass("no-rl-anim").addClass("rl-anim rl-anim-full"); -n.sAnimationType=a;break;case g.InterfaceAnimation.Normal:U.removeClass("no-rl-anim rl-anim-full").addClass("rl-anim"),n.sAnimationType=a}});a.interfaceAnimation.valueHasMutated();a.desktopNotificationsPermisions=f.computed(function(){a.desktopNotifications();var b=g.DesktopNotifications.NotSupported;if(oa&&oa.permission)switch(oa.permission.toLowerCase()){case "granted":b=g.DesktopNotifications.Allowed;break;case "denied":b=g.DesktopNotifications.Denied;break;case "default":b=g.DesktopNotifications.NotAllowed}else h.webkitNotifications&& -h.webkitNotifications.checkPermission&&(b=h.webkitNotifications.checkPermission());return b});a.useDesktopNotifications=f.computed({read:function(){return a.desktopNotifications()&&g.DesktopNotifications.Allowed===a.desktopNotificationsPermisions()},write:function(b){b?(b=a.desktopNotificationsPermisions(),g.DesktopNotifications.Allowed===b?a.desktopNotifications(!0):g.DesktopNotifications.NotAllowed===b?oa.requestPermission(function(){a.desktopNotifications.valueHasMutated();g.DesktopNotifications.Allowed=== -a.desktopNotificationsPermisions()?a.desktopNotifications()?a.desktopNotifications.valueHasMutated():a.desktopNotifications(!0):a.desktopNotifications()?a.desktopNotifications(!1):a.desktopNotifications.valueHasMutated()}):a.desktopNotifications(!1)):a.desktopNotifications(!1)}});a.language=f.observable("");a.languages=f.observableArray([]);a.mainLanguage=f.computed({read:a.language,write:function(b){b!==a.language()?-1=a.diff(c,"hours")?l:a.format("L")===c.format("L")?d.i18n("MESSAGE_LIST/TODAY_AT",{TIME:c.format("LT")}):a.clone().subtract("days", -1).format("L")===c.format("L")?d.i18n("MESSAGE_LIST/YESTERDAY_IN",{TIME:c.format("LT")}):a.year()===c.year()?c.format("D MMM."):c.format("LL")},a)};d.isFolderExpanded=function(a){var b=e.local().get(g.ClientSideKeyName.ExpandedFolders);return i.isArray(b)&&-1!==i.indexOf(b,a)};d.setExpandedFolder=function(a,b){var c=e.local().get(g.ClientSideKeyName.ExpandedFolders);i.isArray(c)||(c=[]);b?(c.push(a),c=i.uniq(c)):c=i.without(c,a);e.local().set(g.ClientSideKeyName.ExpandedFolders,c)};d.initLayoutResizer= -function(a,b,c,d,f,g,w,k){var d=d||300,f=f||500,g=g||f-d/2,w=w||300,h=0,q=j(a),db=j(b),r=j(c),b=e.local().get(k)||g,H=function(a,b,c){if(b||c)a=r.width(),b=b?100*(b.size.width/a):null,null===b&&c&&(b=100*(q.width()/a)),null!==b&&(q.css({width:"",height:"",right:""+(100-b)+"%"}),db.css({width:"",height:"",left:""+b+"%"}))};b&&q.width(b);h=r.width()-w;h=f>h?h:f;q.resizable({minWidth:d,maxWidth:h,handles:"e",resize:H,stop:H});H(null,null,!0);Q.resize(i.throttle(function(b,c){c&&(c.element&&c.element[0].id&& -"#"+c.element[0].id===""+a)&&(h=r.width()-w,h=f>h?h:f,q.resizable("option","maxWidth",h),c.size&&c.size.width&&e.local().set(k,c.size.width),H(null,null,!0))},400))};d.initBlockquoteSwitcher=function(a){if(a){var b=j("blockquote:not(.rl-bq-switcher)",a).filter(function(){return 0===j(this).parent().closest("blockquote",a).length});b&&0').insertBefore(a).click(function(){a.toggleClass("hidden-bq"); -d.windowResize()}).after("
").before("
")})}};d.removeBlockquoteSwitcher=function(a){a&&(j(a).find("blockquote.rl-bq-switcher").each(function(){j(this).removeClass("rl-bq-switcher hidden-bq")}),j(a).find(".rlBlockquoteSwitcher").each(function(){j(this).remove()}))};d.extendAsViewModel=function(a,b){b&&(b.__name=a,y.regViewModelHook(a,b),i.extend(b.prototype,D.prototype))};d.addSettingsViewModel=function(a,b,c,d,e){a.__rlSettingsData={Label:c,Template:b,Route:d,IsDefault:!!e};W.settings.push(a)}; -d.removeSettingsViewModel=function(a){W["settings-removed"].push(a)};d.disableSettingsViewModel=function(a){W["settings-disabled"].push(a)};d.convertThemeName=function(a){return d.trim(a.replace(/[^a-zA-Z]/g," ").replace(/([A-Z])/g," $1").replace(/[\s]+/g," "))};d.convertLangName=function(a){return d.i18n("LANGS_NAMES/LANG_"+a.toUpperCase().replace(/[^a-zA-Z0-9]+/,"_"),null,a)};d.fakeMd5=function(a){for(var b="",a=d.isUnd(a)?32:d.pInt(a);b.length/g,">").replace(/")};d.draggeblePlace=function(){return j('
 
').appendTo("#rl-hidden")};d.defautOptionsAfterRender=function(a,b){b&&!d.isUnd(b.disable)&&f.applyBindingsToNode(a,{disable:b.disable},b)};d.windowPopupKnockout=function(a, -b,c,l){var e=null,f=h.open(""),g="__OpenerApplyBindingsUid"+d.fakeMd5()+"__",k=j("#"+b);h[g]=function(){if(f&&f.document.body&&k&&k[0]){var b=j(f.document.body);j("#rl-content",b).html(k.html());j("html",f.document).addClass("external "+j("html").attr("class"));d.i18nToNode(b);F.prototype.applyExternal(a,j("#rl-content",b)[0]);h[g]=null;l(f)}};f.document.open();f.document.write(''+ -d.encodeHtml(c)+'
');f.document.close();e=f.document.createElement("script");e.type="text/javascript";e.innerHTML="if(window&&window.opener&&window.opener['"+g+"']){window.opener['"+g+"']();window.opener['"+g+"']=null}";f.document.getElementsByTagName("head")[0].appendChild(e)};d.settingsSaveHelperFunction=function(a,b,c,l){c=c||null;l=d.isUnd(l)?1E3:d.pInt(l);return function(d,e,f,k,h){b.call(c,e&&e.Result?g.SaveSettingsStep.TrueResult: -g.SaveSettingsStep.FalseResult);a&&a.call(c,d,e,f,k,h);i.delay(function(){b.call(c,g.SaveSettingsStep.Idle)},l)}};d.settingsSaveHelperSimpleFunction=function(a,b){return d.settingsSaveHelperFunction(null,a,b,1E3)};d.resizeAndCrop=function(a,b,c){var d=new Image;d.onload=function(){var a=[0,0],d=document.createElement("canvas"),l=d.getContext("2d");d.width=b;d.height=b;a=this.width>this.height?[this.width-this.height,0]:[0,this.height-this.width];l.fillStyle="#fff";l.fillRect(0,0,b,b);l.drawImage(this, -a[0]/2,a[1]/2,this.width-a[0],this.height-a[1],0,0,b,b);c(d.toDataURL("image/jpeg"))};d.src=a};na={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",urlsafe_encode:function(a){return na.encode(a).replace(/[+]/g,"-").replace(/[\/]/g,"_").replace(/[=]/g,".")},encode:function(a){for(var b="",c,d,e,f,g,k,h=0,a=na._utf8_encode(a);h>2,c=(c&3)<<4|d>>4,g=(d&15)<<2|e>>6,k=e&63,isNaN(d)?g=k=64:isNaN(e)&&(k= -64),b=b+this._keyStr.charAt(f)+this._keyStr.charAt(c)+this._keyStr.charAt(g)+this._keyStr.charAt(k);return b},decode:function(a){for(var b="",c,d,e,f,g,k=0,a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");k>4,d=(d&15)<<4|f>>2,e=(f&3)<<6|g,b+=String.fromCharCode(c),64!==f&&(b+=String.fromCharCode(d)),64!==g&&(b+=String.fromCharCode(e));return na._utf8_decode(b)}, -_utf8_encode:function(a){for(var a=a.replace(/\r\n/g,"\n"),b="",c=0,d=a.length,e=0;ce?b+=String.fromCharCode(e):(127e?b+=String.fromCharCode(e>>6|192):(b+=String.fromCharCode(e>>12|224),b+=String.fromCharCode(e>>6&63|128)),b+=String.fromCharCode(e&63|128));return b},_utf8_decode:function(a){for(var b="",c=0,d=0,e=0,f=0;cd?(b+=String.fromCharCode(d),c++):191d?(e=a.charCodeAt(c+1),b+=String.fromCharCode((d&31)<<6|e&63),c+= -2):(e=a.charCodeAt(c+1),f=a.charCodeAt(c+2),b+=String.fromCharCode((d&15)<<12|(e&63)<<6|f&63),c+=3);return b}};f.bindingHandlers.tooltip={init:function(a,b){if(!n.bMobileDevice){var c=j(a).data("tooltip-class")||"",l=j(a).data("tooltip-placement")||"top";j(a).tooltip({delay:{show:500,hide:100},html:!0,placement:l,trigger:"hover",title:function(){return''+d.i18n(f.utils.unwrapObservable(b()))+""}})}}};f.bindingHandlers.tooltip2={init:function(a,b){var c=j(a).data("tooltip-class")|| -"",d=j(a).data("tooltip-placement")||"top";j(a).tooltip({delay:{show:500,hide:100},html:!0,placement:d,title:function(){return''+b()()+""}})}};f.bindingHandlers.popover={init:function(a,b){j(a).popover(f.utils.unwrapObservable(b()))}};f.bindingHandlers.resizecrop={init:function(a){j(a).addClass("resizecrop").resizecrop({width:"100",height:"100",wrapperCSS:{"border-radius":"10px"}})},update:function(a,b){b()();j(a).resizecrop({width:"100",height:"100"})}};f.bindingHandlers.onEnter= -{init:function(a,b,c,d){j(a).on("keypress",function(c){c&&13===h.parseInt(c.keyCode,10)&&(j(a).trigger("change"),b().call(d))})}};f.bindingHandlers.onEsc={init:function(a,b,c,d){j(a).on("keypress",function(c){c&&27===h.parseInt(c.keyCode,10)&&(j(a).trigger("change"),b().call(d))})}};f.bindingHandlers.modal={init:function(a,b){j(a).modal({keyboard:!1,show:f.utils.unwrapObservable(b())}).on("hidden",function(){b()(!1)})},update:function(a,b){var c=f.utils.unwrapObservable(b());j(a).modal(c?"show":"hide"); -i.delay(function(){j(a).toggleClass("popup-active",c)},1)}};f.bindingHandlers.i18nInit={init:function(a){d.i18nToNode(a)}};f.bindingHandlers.i18nUpdate={update:function(a,b){f.utils.unwrapObservable(b());d.i18nToNode(a)}};f.bindingHandlers.link={update:function(a,b){j(a).attr("href",f.utils.unwrapObservable(b()))}};f.bindingHandlers.title={update:function(a,b){j(a).attr("title",f.utils.unwrapObservable(b()))}};f.bindingHandlers.textF={init:function(a,b){j(a).text(f.utils.unwrapObservable(b()))}}; -f.bindingHandlers.initDom={init:function(a,b){b()(a)}};f.bindingHandlers.initResizeTrigger={init:function(a,b){var c=f.utils.unwrapObservable(b());j(a).css({height:c[1],"min-height":c[1]})},update:function(a,b){var c=f.utils.unwrapObservable(b()),l=d.pInt(c[1]),e=0,e=j(a).offset().top;0=c.left&&a.pageX<=c.left+l.width()&&(a.pageY>=b-100&&a.pageY<=b&&(b=function(){l.scrollTop(l.scrollTop()+3);d.windowResize()},l.data("timerScroll", -h.setInterval(b,10)),b()),a.pageY>=c.top&&a.pageY<=c.top+100))c=function(){l.scrollTop(l.scrollTop()-3);d.windowResize()},l.data("timerScroll",h.setInterval(c,10)),c()})},c.stop=function(){j(l).each(function(){h.clearInterval(j(this).data("timerScroll"));j(this).data("timerScroll",!1)})});c.helper=function(a){return b()(a&&a.target?f.dataFor(a.target):null)};j(a).draggable(c).on("mousedown",function(){d.removeInFocus()})}}};f.bindingHandlers.droppable={init:function(a,b,c){if(!n.bMobileDevice){var d= -b(),e=(b=c())&&b.droppableOver?b.droppableOver:null,f=b&&b.droppableOut?b.droppableOut:null,b={tolerance:"pointer",hoverClass:"droppableHover"};d&&(b.drop=function(a,b){d(a,b)},e&&(b.over=function(a,b){e(a,b)}),f&&(b.out=function(a,b){f(a,b)}),j(a).droppable(b))}}};f.bindingHandlers.nano={init:function(a){n.bDisableNanoScroll||j(a).addClass("nano").nanoScroller({iOSNativeScrolling:!1,preventPageScrolling:!0})}};f.bindingHandlers.saveTrigger={init:function(a){j(a).append('  ').addClass("settings-saved-trigger")}, -update:function(a,b){var c=f.utils.unwrapObservable(b()),d=j(a);switch(c.toString()){case "1":d.find(".animated,.error").hide().removeClass("visible").end().find(".success").show().addClass("visible");break;case "0":d.find(".animated,.success").hide().removeClass("visible").end().find(".error").show().addClass("visible");break;case "-2":d.find(".error,.success").hide().removeClass("visible").end().find(".animated").show().addClass("visible");break;default:d.find(".animated").hide().end().find(".error,.success").removeClass("visible")}}}; -f.bindingHandlers.select2={init:function(a,b){var c=0,l=null,g=new h.RegExp(/[a-zA-Z0-9\.\-_]+@[a-zA-Z0-9\.\-_]+/),t=new h.RegExp(/(.+) [<]?([^\s<@]+@[a-zA-Z0-9\.\-_]+)[>]?/),w=function(){return""},k=function(a){e.getAutocomplete(a.term,a.page,function(b,c){a.callback({more:!!c,results:i.map(b,function(a){var b=a.toLine(!1);return{id:b,text:b,c:a}})})})};j(a).addClass("ko-select2").select2({query:function(a){a&&(0===c?(k(a),c=h.setTimeout(d.emptyFunction,100)):(h.clearInterval(c),c=h.setTimeout(function(){k(a)}, -100)))},formatSelection:function(a,b){var c=a&&a.c?a.c.select2Selection(b):a.text;if(null!==c)return c},formatResult:function(a,b,c,d){b=a&&a.c?a.c.select2Result(b):"";return""===b?d(a.text):b},createSearchChoice:function(a,b){return 0===b.length&&g.test(a)?{id:a,text:a}:null},formatNoMatches:w,formatSearching:function(){return d.i18n("SUGGESTIONS/SEARCHING_DESC")},formatInputTooShort:w,formatSelectionTooBig:w,multiple:!0,tokenSeparators:[",",";"],minimumInputLength:2,selectOnBlur:!1,closeOnSelect:!0, -openOnEnter:!1});f.utils.domNodeDisposal.addDisposeCallback(a,function(){j(a).select2("destroy")});j(a).on("change",function(){for(var a=j(this).select2("data"),c=0,e=a.length,f=null,g=[];c "+d.trim(a).replace(/\n/gm,"\n> ")+"\n>\n";return a.replace(/\n([> ]+)/gm,function(){return arguments&&1]*>([\s\S]*)<\/div>/gmi, -e),a="\n"+d.trim(a)+"\n");return a}return""},a=d.isUnd(a)?!0:!!a,b=this.toHtmlString().replace(/[\s]+/gm," ").replace(//gmi,"\n").replace(/<\/h\d>/gi,"\n").replace(/<\/p>/gi,"\n\n").replace(/<\/li>/gi,"\n").replace(/<\/td>/gi,"\n").replace(/<\/tr>/gi,"\n").replace(/]*>/gmi,"\n_______________________________\n\n").replace(/]*>/gmi,"").replace(/]*>([\s\S]*)<\/div>/gmi,e).replace(/]*>/gmi,"\n__bq__start__\n").replace(/<\/blockquote>/gmi,"\n__bq__end__\n").replace(/]*>([\s\S]*?)<\/a>/gmi, -function(){return arguments&&1]*>/gm,"").replace(/>/gi,">").replace(/</gi,"<").replace(/&/gi,"&").replace(/&\w{2,6};/gi,"");return(a?d.splitPlainText(b):b).replace(/\n[ \t]+/gm,"\n").replace(/[\n]{3,}/gm,"\n\n").replace(/__bq__start__([\s\S]*)__bq__end__/gm,c).replace(/__bq__start__/gm,"").replace(/__bq__end__/gm,"")};u.prototype.getHtmlFromText=function(){return d.convertPlainTextToHtml(this.textarea.val())}; -u.prototype.switchToggle=function(){this.isHtml()?this.switchToPlain():this.switchToHtml()};u.prototype.switchToPlain=function(a){var a=d.isUnd(a)?!0:a,b=this.getTextFromHtml(),c=i.bind(function(a){a&&(this.toolbar.addClass("editorHideToolbar"),j(".editorSwitcher",this.toolbar).text(this.switcherLinkText(!1)),this.textarea.val(b),this.textarea.show(),this.htmlarea.hide(),this.fOnSwitch&&this.fOnSwitch(!1))},this);!a||0===d.trim(b).length?c(!0):c(h.confirm(this.oOptions.LangSwitcherConferm))};u.prototype.switcherLinkText= -function(a){return a?this.oOptions.LangSwitcherTextLabel:this.oOptions.LangSwitcherHtmlLabel};u.prototype.switchToHtml=function(){this.toolbar.removeClass("editorHideToolbar");j(".editorSwitcher",this.toolbar).text(this.switcherLinkText(!0));this.textarea.val(this.getHtmlFromText());this.updateHtmlArea();this.textarea.hide();this.htmlarea.show();this.fOnSwitch&&this.fOnSwitch(!0)};u.prototype.addButton=function(a,b){var c=this;j("
").addClass("editorToolbarButtom").append(j('').addClass(a)).attr("title", -b).click(function(b){d.isUnd(u.htmlFunctions[a])?h.alert(a):u.htmlFunctions[a].apply(c,[j(this),b])}).appendTo(this.toolbar)};u.htmlInitToolbar=function(){if(!this.bOnlyPlain){this.addButton("bold","Bold");this.addButton("italic","Italic");this.addButton("underline","Underline");this.addButton("strikethrough","Strikethrough");this.addButton("removeformat","removeformat");this.addButton("justifyleft","justifyleft");this.addButton("justifycenter","justifycenter");this.addButton("justifyright","justifyright"); -this.addButton("horizontalrule","horizontalrule");this.addButton("orderedlist","orderedlist");this.addButton("unorderedlist","unorderedlist");this.addButton("indent","indent");this.addButton("outdent","outdent");this.addButton("forecolor","forecolor");var a=this;j("").addClass("editorSwitcher").text(a.switcherLinkText(!0)).click(function(){a.switchToggle()}).appendTo(a.toolbar)}};u.htmlInitEditor=function(){this.editor=this.htmlarea[0];this.editor.innerHTML=this.textarea.val()};u.htmlAttachEditorEvents= -function(){var a=this,b=function(b){if(b=(b&&b.originalEvent?b.originalEvent:b)||h.event){b.stopPropagation();b.preventDefault();var c=null,d=null;if((b=b.files||(b.dataTransfer?b.dataTransfer.files:null))&&1===b.length&&b[0]&&b[0].type&&0===b[0].type.indexOf("image/")){var d=b[0],c=new h.FileReader,e=d;c.onload=function(b){a.insertImage(b.target.result,e.name)};c.readAsDataURL(d)}}a.htmlarea.removeClass("editorDragOver")},c=function(){a.htmlarea.removeClass("editorDragOver")},d=function(b){b.stopPropagation(); -b.preventDefault();a.htmlarea.addClass("editorDragOver")},e=function(b){(b=b&&b.clipboardData?b.clipboardData:b&&b.originalEvent&&b.originalEvent.clipboardData?b.originalEvent.clipboardData:null)&&b.items&&i.each(b.items,function(b){if(b&&(b.type&&0===b.type.indexOf("image/"))&&b.getAsFile){var c=null,d=b.getAsFile();d&&(c=new h.FileReader,c.onload=function(b){a.insertImage(b.target.result,d.name)},c.readAsDataURL(d))}})};!this.bOnlyPlain&&(h.File&&h.FileReader&&h.FileList)&&(this.htmlarea.bind("dragover", -d),this.htmlarea.bind("dragleave",c),this.htmlarea.bind("drop",b),this.htmlarea.bind("paste",e))};for(var sa=u,ta=[],Va=[],Z=0,aa=0,Ia=0,Ja=0,aa="",Z=0;256>Z;Z+=85)aa=Z.toString(16),ta.push(1===aa.length?"0"+aa:aa);Ja=ta.length;for(Z=0;Z
'),Ya=ua.find(".editorFpFonts"), -Za=function(){};j.each("Arial;Arial Black;Courier New;Tahoma;Times New Roman;Verdana".split(";"),function(a,b){Ya.append(j(''+b+"").click(function(){Za(b)}));Ya.append("
")});ua.hide();sa.htmlFontPicker=function(a,b,c){Xa||(ua.appendTo(c),Xa=!0);Za=b;Wa.unbind("click.fpNamespace");h.setTimeout(function(){Wa.one("click.fpNamespace",function(){ua.hide()})},500);b=j(a).position();ua.css("top",5+b.top+ -j(a).height()+"px").css("left",b.left+"px").show()};var sa=u,$a=j(h.document),ab=!1,va=j('
'),bb=va.find(".editorCpColors"),cb=function(){};j.each(u.htmlColorPickerColors,function(a,b){bb.append('')});va.hide();j(".editorCpColor",bb).click(function(a){var b=1,c="#000000",a=j(a.target).css("background-color"), -c=a.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);if(null!==c){for(delete c[0];3>=b;++b)c[b]=d.pInt(c[b]).toString(16),1===c[b].length&&(c[b]="0"+c[b]);c="#"+c.join("")}else c=a;cb(c)});sa.htmlColorPicker=function(a,b,c){ab||(va.appendTo(c),ab=!0);c=j(a).position();cb=b;$a.unbind("click.cpNamespace");h.setTimeout(function(){$a.one("click.cpNamespace",function(){va.hide()})},100);va.css("top",5+c.top+j(a).height()+"px").css("left",c.left+"px").show()};u.htmlFunctions={bold:function(){this.ec("bold")}, -italic:function(){this.ec("italic")},underline:function(){this.ec("underline")},strikethrough:function(){this.ec("strikethrough")},indent:function(){this.ec("indent")},outdent:function(){this.ec("outdent")},justifyleft:function(){this.ec("justifyLeft")},justifycenter:function(){this.ec("justifyCenter")},justifyright:function(){this.ec("justifyRight")},horizontalrule:function(){this.ec("insertHorizontalRule",!1,"ht")},removeformat:function(){this.ec("removeFormat")},orderedlist:function(){this.ec("insertorderedlist")}, -unorderedlist:function(){this.ec("insertunorderedlist")},forecolor:function(a){u.htmlColorPicker(a,i.bind(function(a){this.setcolor("forecolor",a)},this),this.toolbar)},backcolor:function(a){u.htmlColorPicker(a,i.bind(function(a){this.setcolor("backcolor",a)},this),this.toolbar)},fontname:function(a){u.htmlFontPicker(a,i.bind(function(a){this.ec("fontname",!1,a)},this),this.toolbar)}};N.prototype.selectItemCallbacks=function(a){(this.oCallbacks.onItemSelect||this.emptyFunction)(a)};N.prototype.init= -function(a,b){this.oContentVisible=a;this.oContentScrollable=b;if(this.oContentVisible&&this.oContentScrollable){var c=this;j(this.oContentVisible).on("click",this.sItemSelector,function(a){c.actionClick(f.dataFor(this),a)}).on("click",this.sItemCheckedSelector,function(a){var b=f.dataFor(this);b&&(a&&a.shiftKey?c.actionClick(b,a):(c.sLastUid=c.getItemUid(b),b.selected()?(b.checked(!1),c.selectedItem(null)):b.checked(!b.checked())))});j(h.document).on("keydown",function(a){var b=!0;if(a&&c.bUseKeyboard&& -!d.inFocus())if(-1d?0:d;w=k[d];break}}else if(g.EventKeyCode.Down===a||g.EventKeyCode.Insert===a||g.EventKeyCode.Home=== -a||g.EventKeyCode.PageUp===a)w=k[0];else if(g.EventKeyCode.Up===a||g.EventKeyCode.End===a||g.EventKeyCode.PageDown===a)w=k[k.length-1];w?(q&&(b?(g.EventKeyCode.Up===a||g.EventKeyCode.Down===a)&&q.checked(!q.checked()):g.EventKeyCode.Insert===a&&q.checked(!q.checked())),this.throttleSelection=!0,this.selectedItem(w),this.throttleSelection=!0,0!==this.iSelectTimer?(h.clearTimeout(this.iSelectTimer),this.iSelectTimer=h.setTimeout(function(){c.iSelectTimer=0;c.actionClick(w)},1E3)):(this.iSelectTimer= -h.setTimeout(function(){c.iSelectTimer=0},200),this.actionClick(w)),this.scrollToSelected()):q&&(b&&(g.EventKeyCode.Up===a||g.EventKeyCode.Down===a)?q.checked(!q.checked()):g.EventKeyCode.Insert===a&&q.checked(!q.checked()))};N.prototype.scrollToSelected=function(){if(!this.oContentVisible||!this.oContentScrollable)return!1;var a=j(this.sItemSelectedSelector,this.oContentScrollable),b=a.position(),c=this.oContentVisible.height(),a=a.outerHeight();return b&&(0>b.top||b.top+a>c)?(0>b.top?this.oContentScrollable.scrollTop(this.oContentScrollable.scrollTop()+ -b.top-20):this.oContentScrollable.scrollTop(this.oContentScrollable.scrollTop()+b.top-c+a+20),!0):!1};N.prototype.eventClickFunction=function(a,b){var c=this.getItemUid(a),d=0,e=0,f=null,g="",k=!1,h=!1,i=[],j=!1;if(b&&b.shiftKey&&""!==c&&""!==this.sLastUid&&c!==this.sLastUid){i=this.list();j=a.checked();d=0;for(e=i.length;d").addClass("rl-view-model").addClass("RL-"+c.viewModelTemplate()).hide().attr("data-bind",'template: {name: "'+c.viewModelTemplate()+'"}, i18nInit: true'),t.appendTo(g),c.viewModelDom=t,a.__dom=t,"Popups"===l&&(c.cancelCommand=c.closeCommand=d.createCommand(c,function(){o.hideScreenPopup(a)})),y.runHook("view-model-pre-build",[a.__name,c,t]),f.applyBindings(c,t[0]),this.delegateRun(c,"onBuild",[t]),y.runHook("view-model-post-build",[a.__name,c,t])):d.log("Cannot find view model position: "+ -l)}return a?a.__vm:null};F.prototype.applyExternal=function(a,b){a&&b&&f.applyBindings(a,b)};F.prototype.hideScreenPopup=function(a){a&&(a.__vm&&a.__dom)&&(a.__dom.hide(),a.__vm.modalVisibility(!1),this.delegateRun(a.__vm,"onHide"),this.popupVisibility(!1),i.defer(function(){a.__dom.find(".ko-select2").select2("close")}))};F.prototype.showScreenPopup=function(a,b){a&&(this.buildViewModel(a),a.__vm&&a.__dom&&(a.__dom.show(),a.__vm.modalVisibility(!0),this.delegateRun(a.__vm,"onShow",b||[]),this.popupVisibility(!0), -y.runHook("view-model-on-show",[a.__name,a.__vm,b||[]])))};F.prototype.screenOnRoute=function(a,b){var c=this,e=null,f=null;""===d.pString(a)&&(a=this.sDefaultScreenName);if(""!==a){e=this.screen(a);if(!e&&(e=this.screen(this.sDefaultScreenName)))b=a+"/"+b,a=this.sDefaultScreenName;e&&e.__started&&(e.__builded||(e.__builded=!0,d.isNonEmptyArray(e.viewModels())&&i.each(e.viewModels(),function(a){this.buildViewModel(a,e)},this),this.delegateRun(e,"onBuild")),i.defer(function(){if(c.oCurrentScreen){c.delegateRun(c.oCurrentScreen, -"onHide");d.isNonEmptyArray(c.oCurrentScreen.viewModels())&&i.each(c.oCurrentScreen.viewModels(),function(a){if(a.__vm&&a.__dom&&"Popups"!==a.__vm.viewModelPosition()){a.__dom.hide();a.__vm.viewModelVisibility(false);c.delegateRun(a.__vm,"onHide")}})}c.oCurrentScreen=e;if(c.oCurrentScreen){c.delegateRun(c.oCurrentScreen,"onShow");y.runHook("screen-on-show",[c.oCurrentScreen.screenName(),c.oCurrentScreen]);d.isNonEmptyArray(c.oCurrentScreen.viewModels())&&i.each(c.oCurrentScreen.viewModels(),function(a){if(a.__vm&& -a.__dom&&"Popups"!==a.__vm.viewModelPosition()){a.__dom.show();a.__vm.viewModelVisibility(true);c.delegateRun(a.__vm,"onShow");y.runHook("view-model-on-show",[a.__name,a.__vm])}},c)}(f=e.__cross())&&f.parse(b)}))}};F.prototype.startScreens=function(a){i.each(a,function(a){var c=(a=new a)?a.screenName():"";a&&""!==c&&(""===this.sDefaultScreenName&&(this.sDefaultScreenName=c),this.oScreens[c]=a)},this);i.each(this.oScreens,function(a){a&&(!a.__started&&a.__start)&&(a.__started=!0,a.__start(),y.runHook("screen-pre-start", -[a.screenName(),a]),this.delegateRun(a,"onStart"),y.runHook("screen-post-start",[a.screenName(),a]))},this);a=Qa.create();a.addRoute(/^([a-zA-Z0-9\-]*)\/?(.*)$/,i.bind(this.screenOnRoute,this));S.initialized.add(a.parse,a);S.changed.add(a.parse,a);S.init()};F.prototype.setHash=function(a,b){a="#"===a.substr(0,1)?a.substr(1):a;a="/"===a.substr(0,1)?a.substr(1):a;(d.isUnd(b)?0:b)?(S.changed.active=!1,S.setHash(a),S.changed.active=!0):(S.changed.active=!0,S.setHash(a))};F.prototype.bootstart=function(){this.oBoot&& -this.oBoot.bootstart&&this.oBoot.bootstart();return this};o=new F;G.newInstanceFromJson=function(a){var b=new G;return b.initByJson(a)?b:null};G.prototype.name="";G.prototype.email="";G.prototype.privateType=null;G.prototype.validate=function(){return""!==this.name||""!==this.email};G.prototype.hash=function(a){return"#"+(a?"":this.name)+"#"+this.email+"#"};G.prototype.clearDuplicateName=function(){this.name===this.email&&(this.name="")};G.prototype.type=function(){if(null===this.privateType&&(this.email&& -"@facebook.com"===this.email.substr(-13)&&(this.privateType=g.EmailType.Facebook),null===this.privateType))this.privateType=g.EmailType.Default;return this.privateType};G.prototype.search=function(a){return-1<(this.name+" "+this.email).toLowerCase().indexOf(a.toLowerCase())};G.prototype.parse=function(a){var a=d.trim(a),b=/(?:"([^"]+)")? ?,]+)>?,? ?/g.exec(a);b?(this.name=b[1]||"",this.email=b[2]||"",this.clearDuplicateName()):/^[^@]+@[^@]+$/.test(a)&&(this.name="",this.email=a)};G.prototype.initByJson= -function(a){var b=!1;a&&"Object/Email"===a["@Object"]&&(this.name=d.trim(a.Name),this.email=d.trim(a.Email),b=""!==this.email,this.clearDuplicateName());return b};G.prototype.toLine=function(a,b){var c="";""!==this.email&&(b=d.isUnd(b)?!1:!!b,a&&""!==this.name?c=b?'")+'" target="_blank" tabindex="-1">'+d.encodeHtml(this.name)+"":this.name:(c=this.email,""!==this.name?c=b?d.encodeHtml('"'+this.name+'" <')+'")+'" target="_blank" tabindex="-1">'+d.encodeHtml(c)+""+d.encodeHtml(">"):'"'+this.name+'" <'+c+">":b&&(c=''+d.encodeHtml(this.email)+"")));return c};G.prototype.select2Result=function(){var a="",b=e.cache().getUserPic(this.email),a=""!==b?a+(''):a+('');g.EmailType.Facebook===this.type()?(a+=""+(0'):a+=""+(0('+this.name+")":this.email);return a+""};G.prototype.select2Selection=function(a){var b="";if(g.EmailType.Facebook===this.type()){if(b=0").text(b).appendTo(a),a.append(''), -null}else b=0+$/,""),b=!0);return b};E.prototype.isImage=function(){return-1+$/, -""),b=i.find(c,function(b){return a===b.cidWithOutTags}));return b||null};m.prototype.findAttachmentByContentLocation=function(a){var b=null,c=this.attachments();d.isNonEmptyArray(c)&&(b=i.find(c,function(b){return a===b.contentLocation}));return b||null};m.prototype.messageId=function(){return this.sMessageId};m.prototype.inReplyTo=function(){return this.sInReplyTo};m.prototype.references=function(){return this.sReferences};m.prototype.fromAsSingleEmail=function(){return d.isArray(this.from)&&this.from[0]? -this.from[0].email:""};m.prototype.viewLink=function(){return e.link().messageViewLink(this.requestHash)};m.prototype.downloadLink=function(){return e.link().messageDownloadLink(this.requestHash)};m.prototype.replyEmails=function(a){var b=[],a=d.isUnd(a)?{}:a;m.replyHelper(this.replyTo,a,b);0===b.length&&m.replyHelper(this.from,a,b);return b};m.prototype.replyAllEmails=function(a){var b=[],c=[],a=d.isUnd(a)?{}:a;m.replyHelper(this.replyTo,a,b);0===b.length&&m.replyHelper(this.from,a,b);m.replyHelper(this.to, -a,b);m.replyHelper(this.cc,a,c);return[b,c]};m.prototype.textBodyToString=function(){return this.body?this.body.html():""};m.prototype.attachmentsToStringLine=function(){var a=i.map(this.attachments(),function(a){return a.fileName+" ("+a.friendlySize+")"});return a&&0
"+k+":

"+q+"
";break;case g.ComposeType.Forward:L=r.fromToLine(!1,!0);t=r.toToLine(!1,!0);h=r.ccToLine(!1,!0);q="


"+d.i18n("COMPOSE/FORWARD_MESSAGE_TOP_TITLE")+"
"+d.i18n("COMPOSE/FORWARD_MESSAGE_TOP_FROM")+": "+L+"
"+d.i18n("COMPOSE/FORWARD_MESSAGE_TOP_TO")+ -": "+t+(0"+d.i18n("COMPOSE/FORWARD_MESSAGE_TOP_CC")+": "+h:"")+"
"+d.i18n("COMPOSE/FORWARD_MESSAGE_TOP_SENT")+": "+d.encodeHtml(k)+"
"+d.i18n("COMPOSE/FORWARD_MESSAGE_TOP_SUBJECT")+": "+d.encodeHtml(n)+"

"+q;break;case g.ComposeType.ForwardAsAttachment:q=""}this.oEditor.setRawText(q,r.isHtml)}}else this.oEditor&&g.ComposeType.Empty===a?this.oEditor.setRawText("
"+d.convertPlainTextToHtml(e.data().signature()),g.EditorDefaultType.Html===e.data().editorDefaultType()): -d.isNonEmptyArray(b)&&i.each(b,function(a){f.addMessageAsAttachment(a)});r=this.getAttachmentsDownloadsForUpload();d.isNonEmptyArray(r)&&e.remote().messageUploadAttachments(function(a,b){if(g.StorageResultType.Success===a&&b&&b.Result){var c=null,d="";if(!f.viewModelVisibility())for(d in b.Result)b.Result.hasOwnProperty(d)&&(c=f.getAttachmentById(b.Result[d]))&&c.tempName(d)}else f.setMessageAttachmentFailedDowbloadText()},r);m&&this.oEditor&&this.oEditor.focus();this.triggerForResize()};z.prototype.onBuild= -function(){this.initEditor();this.initUploader();var a=this,b=null;Q.on("keydown",function(b){var d=!0;b&&(a.modalVisibility()&&e.data().useKeyboardShortcuts())&&(b.ctrlKey&&g.EventKeyCode.S===b.keyCode?(a.saveCommand(),d=!1):b.ctrlKey&&g.EventKeyCode.Enter===b.keyCode&&(a.sendCommand(),d=!1));return d});Q.on("resize",function(){a.triggerForResize()});this.dropboxEnabled()&&(b=document.createElement("script"),b.type="text/javascript",b.src="https://www.dropbox.com/static/api/1/dropins.js",j(b).attr("id", -"dropboxjs").attr("data-app-key",e.settingsGet("DropboxApiKey")),document.body.appendChild(b))};z.prototype.getAttachmentById=function(a){for(var b=this.attachments(),c=0,d=b.length;cb.data("rl-cache-count")&&(b.addClass("rl-cache-purge"),a++)}),0').hide().addClass("rl-cache-class"),h.data("rl-cache-count",++n.iMessageBodyCacheCount),d.isNormal(a.Result.Html)&&""!==a.Result.Html?(c=!0,h.html(a.Result.Html.toString()).addClass("b-text-part html")):d.isNormal(a.Result.Plain)&&""!==a.Result.Plain?(c=!1,h.html(a.Result.Plain.toString()).addClass("b-text-part plain")):c=!1,a.Result.Rtl&& -(h.data("rl-is-rtl",!0),h.addClass("rtl-text-part")),i.append(h),h.data("rl-is-html",c),h.data("rl-has-images",f),k.isRtl(!!h.data("rl-is-rtl")),k.isHtml(!!h.data("rl-is-html")),k.hasImages(!!h.data("rl-has-images")),k.body=h,g&&k.showInternalImages(!0),k.hasImages()&&this.showImages()&&k.showExternalImages(!0),this.purgeMessageBodyCacheThrottle()):(f.data("rl-cache-count",++n.iMessageBodyCacheCount),k.isRtl(!!f.data("rl-is-rtl")),k.isHtml(!!f.data("rl-is-html")),k.hasImages(!!f.data("rl-has-images")), -k.body=f),this.messageActiveDom(k.body),this.hideMessageBodies(),k.body.show(),h&&d.initBlockquoteSwitcher(h);e.cache().initMessageFlagsFromCache(k);k.unseen()&&e.setMessageSeen(k);d.windowResize()}};V.prototype.setMessageList=function(a,b){if(a&&a.Result&&"Collection/MessageCollection"===a.Result["@Object"]&&a.Result["@Collection"]&&d.isArray(a.Result["@Collection"])){var c=e.data(),f=e.cache(),h=null,i=0,j=0,k=0,n=0,q=[],o=c.staticMessageList,r=null,H=null,p=null,s=0,u=!1,k=d.pInt(a.Result.MessageResultCount), -n=d.pInt(a.Result.Offset);d.isNonEmptyArray(a.Result.LastCollapsedThreadUids)&&(h=a.Result.LastCollapsedThreadUids);if((p=e.cache().getFolderFromCacheList(d.isNormal(a.Result.Folder)?a.Result.Folder:""))&&!b)e.cache().setFolderHash(a.Result.Folder,a.Result.FolderHash),d.isNormal(a.Result.MessageCount)&&p.messageCountAll(a.Result.MessageCount),d.isNormal(a.Result.MessageUnseenCount)&&(d.pInt(p.messageCountUnread())!==d.pInt(a.Result.MessageUnseenCount)&&(u=!0),p.messageCountUnread(a.Result.MessageUnseenCount)), -this.initUidNextAndNewMessages(p.fullNameRaw,a.Result.UidNext,a.Result.NewMessages);u&&p&&e.cache().clearMessageFlagsFromCacheByFolder(p.fullNameRaw);i=0;for(j=a.Result["@Collection"].length;i=s&&(s++,H.newForAnimation(!0)),H.deleted(!1),b?e.cache().initMessageFlagsFromCache(H):e.cache().storeMessageFlagsToCache(H), -H.lastInCollapsedThread(h&&-1(new h.Date).getTime()-k);q&&t.oRequests[q]&& -(t.oRequests[q].__aborted&&(e="abort"),t.oRequests[q]=null);t.defaultResponse(a,q,e,c,f,b)});q&&(0
").addClass("rl-settings-view-model").hide().attr("data-bind", -'template: {name: "'+g.__rlSettingsData.Template+'"}, i18nInit: true'),t.appendTo(h),c.data=e.data(),c.viewModelDom=t,c.viewModelDom.addClass("rl-animation-margin"),c.__rlSettingsData=g.__rlSettingsData,g.__dom=t,g.__builded=!0,g.__vm=c,f.applyBindings(c,t[0]),o.delegateRun(c,"onBuild",[t])):d.log("Cannot find sub settings view model position: SettingsSubScreen"),c&&i.defer(function(){if(b.oCurrentSubScreen){o.delegateRun(b.oCurrentSubScreen,"onHide");b.oCurrentSubScreen.viewModelDom.hide();b.oCurrentSubScreen.viewModelDom.addClass("rl-animation-margin")}b.oCurrentSubScreen= -c;if(b.oCurrentSubScreen){b.oCurrentSubScreen.viewModelDom.show();o.delegateRun(b.oCurrentSubScreen,"onShow");i.each(b.menu(),function(a){a.selected(c&&c.__rlSettingsData&&a.route===c.__rlSettingsData.Route)});j("#rl-content .b-settings .b-content .content").scrollTop(0);b.oCurrentSubScreen.viewModelDom.removeClass("rl-animation-margin")}d.windowResize()}))};ga.prototype.onHide=function(){this.oCurrentSubScreen&&this.oCurrentSubScreen.viewModelDom&&(o.delegateRun(this.oCurrentSubScreen,"onHide"), -this.oCurrentSubScreen.viewModelDom.hide(),this.oCurrentSubScreen.viewModelDom.addClass("rl-animation-margin"))};ga.prototype.onBuild=function(){i.each(W.settings,function(a){a&&(a.__rlSettingsData&&!i.find(W["settings-removed"],function(b){return b&&b===a}))&&this.menu.push({route:a.__rlSettingsData.Route,label:a.__rlSettingsData.Label,selected:f.observable(!1),disabled:!!i.find(W["settings-disabled"],function(b){return b&&b===a})})},this);this.oViewModelPlace=j("#rl-content #rl-settings-subscreen")}; -ga.prototype.routes=function(){var a=i.find(W.settings,function(a){return a&&a.__rlSettingsData&&a.__rlSettingsData.IsDefault}),b=a?a.__rlSettingsData.Route:"general",a={subname:/^(.*)$/,normalize_:function(a,e){e.subname=d.isUnd(e.subname)?b:d.pString(e.subname);return[e.subname]}};return[["{subname}/",a],["{subname}",a],["",a]]};i.extend(Ea.prototype,M.prototype);Ea.prototype.onShow=function(){e.setTitle(d.i18n("TITLES/LOGIN"))};i.extend(da.prototype,M.prototype);da.prototype.oLastRoute={};da.prototype.onShow= -function(){var a=e.data().accountEmail();e.setTitle((""===a?"":a+" - ")+d.i18n("TITLES/MAILBOX"))};da.prototype.onRoute=function(a,b,c){var d=e.data(),a=e.cache().getFolderFullNameRaw(a);if(a=e.cache().getFolderFromCacheList(a))d.currentFolder(a).messageListPage(b).messageListSearch(c),!d.usePreviewPane()&&d.message()&&d.message(null),e.reloadMessageList()};da.prototype.onStart=function(){var a=e.data(),b=function(){d.windowResize()};e.settingsGet("AllowAdditionalAccounts")&&e.accounts();i.delay(function(){e.quota()}, -5E3);i.delay(function(){"INBOX"!==a.currentFolderFullNameRaw()&&e.folderInformation("INBOX")},1E3);i.delay(function(){var b=e.data().spamFolder();b!==a.currentFolderFullNameRaw()&&e.folderInformation(b)},1500);i.delay(function(){var b=e.data().draftFolder();b!==a.currentFolderFullNameRaw()&&e.folderInformation(b)},2E3);i.delay(function(){e.remote().appDelayStart(d.emptyFunction)},35E3);h.setInterval(function(){e.folderInformation("INBOX")},12E4);h.setInterval(function(){e.quota()},3E5);U.toggleClass("rl-no-preview-pane", -!a.usePreviewPane());a.folderList.subscribe(b);a.messageList.subscribe(b);a.message.subscribe(b);a.usePreviewPane.subscribe(function(a){U.toggleClass("rl-no-preview-pane",!a)})};da.prototype.onBuild=function(){n.bMobileDevice||i.defer(function(){d.initLayoutResizer("#rl-resizer-left","#rl-resizer-right","#rl-right",350,900,350,350,g.ClientSideKeyName.MailBoxListSize)})};da.prototype.routes=function(){var a=function(a,c){c[0]=d.pString(c[0]);c[1]=d.pInt(c[1]);c[1]=0>=c[1]?1:c[1];c[2]=d.pString(c[2]); -""===a&&(c[0]="Inbox",c[1]=1);return[decodeURI(c[0]),c[1],decodeURI(c[2])]};return[[/^([a-zA-Z0-9]+)\/p([1-9][0-9]*)\/(.+)\/?$/,{normalize_:a}],[/^([a-zA-Z0-9]+)\/p([1-9][0-9]*)\/?$/,{normalize_:a}],[/^([a-zA-Z0-9]+)\/(.+)\/?$/,{normalize_:function(a,c){c[0]=d.pString(c[0]);c[1]=d.pString(c[1]);""===a&&(c[0]="Inbox");return[decodeURI(c[0]),1,decodeURI(c[1])]}}],[/^([^\/]*)$/,{normalize_:a}]]};i.extend(Na.prototype,ga.prototype);Na.prototype.onShow=function(){e.setTitle(this.sSettingsTitle)};i.extend(K.prototype, -Ra.prototype);K.prototype.oSettings=null;K.prototype.oLink=null;K.prototype.download=function(a){var b=null,c=null;if((b=navigator.userAgent.toLowerCase())&&(-1