c"
	 *   - корректно обрабатывается "грязный" html, когда в значениях атрибутов тагов могут встречаться символы < >
	 *   - корректно обрабатывается разбитый html
	 *   - вырезаются комментарии, скрипты, стили, PHP, Perl, ASP код, MS Word таги, CDATA
	 *   - автоматически форматируется текст, если он содержит html код
	 *   - защита от подделок типа: "<script>alert('hi')script>"
	 *
	 * @param   string  $s
	 * @param   array   $allowable_tags	 Массив тагов, которые не будут вырезаны
	 *									  Пример: 'b' -- таг останется с атрибутами, '' -- таг останется без атрибутов
	 * @param   bool	$is_format_spaces   Форматировать пробелы и переносы строк?
	 *									  Вид текста на выходе (plain) максимально приближеется виду текста в браузере на входе.
	 *									  Другими словами, грамотно преобразует text/html в text/plain.
	 *									  Текст форматируется только в том случае, если были вырезаны какие-либо таги.
	 * @param   array   $pair_tags   массив имён парных тагов, которые будут удалены вместе с содержимым
	 *							   см. значения по умолчанию
	 * @param   array   $para_tags   массив имён парных тагов, которые будут восприниматься как параграфы (если $is_format_spaces = true)
	 *							   см. значения по умолчанию
	 * @return  string
	 */
	include (BASE_DIR . '/lib/StripTagsSmart/strip_tags_smart.php');
	/**
	 * Вычисление разницы между двумя метками времени
	 *
	 * @param string $a начальная метка
	 * @param string $b конечная метка
	 * @return int время между метками
	 */
	if (! function_exists('microtime_diff'))
	{
		function microtime_diff($a, $b)
		{
			list($a_dec, $a_sec) = explode(' ', $a);
			list($b_dec, $b_sec) = explode(' ', $b);
			return $b_sec - $a_sec + $b_dec - $a_dec;
		}
	}
	/**
	 * Функция меняет кодировку файла
	 *
	 * @param string $path
	 * @param string $to
	 */
	if (! function_exists('file_encoding'))
	{
		function file_encoding($path, $to='utf')
		{
			$f = file_get_contents($path);
			$f = mb_convert_encoding($f,$to == 'utf' ? 'UTF-8' : 'CP1251', $to == 'utf' ? 'CP1251' : 'UTF-8');
			file_put_contents($path, $f);
		}
	}
	/**
	 * Replace array_combine()
	 *
	 * @category    PHP
	 * @package     PHP_Compat
	 * @license     LGPL - http://www.gnu.org/licenses/lgpl.html
	 * @copyright   2004-2007 Aidan Lister , Arpad Ray 
	 * @link        http://php.net/function.array_combine
	 * @author      Aidan Lister 
	 * @version     $Revision: 1.23 $
	 * @since       PHP 5
	 * @require     PHP 4.0.0 (user_error)
	 *
	 * @param $keys
	 * @param $values
	 *
	 * @return array|bool
	 */
	function php_compat_array_combine($keys, $values)
	{
		if (! is_array($keys))
		{
			user_error('array_combine() expects parameter 1 to be array, ' . gettype($keys) . ' given', E_USER_WARNING);
			return false;
		}
		if (! is_array($values))
		{
			user_error('array_combine() expects parameter 2 to be array, ' . gettype($values) . ' given', E_USER_WARNING);
			return false;
		}
		$key_count = count($keys);
		$value_count = count($values);
		if ($key_count !== $value_count)
		{
			user_error('array_combine() Both parameters should have equal number of elements', E_USER_WARNING);
			return false;
		}
		if ($key_count === 0 || $value_count === 0)
		{
			user_error('array_combine() Both parameters should have number of elements at least 0', E_USER_WARNING);
			return false;
		}
		$keys	= array_values($keys);
		$values  = array_values($values);
		$combined = array();
		for ($i = 0; $i < $key_count; $i++)
		{
			$combined[$keys[$i]] = $values[$i];
		}
		return $combined;
	}
	// Define
	if (! function_exists('array_combine'))
	{
		function array_combine($keys, $values)
		{
			return php_compat_array_combine($keys, $values);
		}
	}
	/**
	 * post()
	 *
	 * @param mixed $var
	 * @return string
	 */
	if (! function_exists('post'))
	{
		function post($var)
		{
			return (isset($_POST[$var]))
				? $_POST[$var]
				: '';
		}
	}
	/**
	 * get()
	 *
	 * @param mixed $var
	 * @return string
	 */
	if (! function_exists('get'))
	{
		function get($var)
		{
			return (isset($_GET[$var]))
				? $_GET[$var]
				: '';
		}
	}
	/**
	 * sanitize()
	 *
	 * @param mixed $string
	 * @param bool $trim
	 * @param bool $int
	 * @param bool $str
	 * @return mixed|string
	 */
	if (! function_exists('sanitize'))
	{
		function sanitize($string, $trim = false, $int = false, $str = false)
		{
			$string = filter_var($string, FILTER_SANITIZE_STRING);
			$string = trim($string);
			$string = stripslashes($string);
			$string = strip_tags($string);
			$string = str_replace(
				array(
					'‘',
					'’',
					'“',
					'”'
				),
				array(
					"'",
					"'",
					'"',
					'"'
				),
				$string
			);
			if ($trim)
				$string = substr($string, 0, $trim);
			if ($int)
				$string = preg_replace("/[^0-9\s]/", "", $string);
			if ($str)
				$string = preg_replace("/[^a-zA-Z\s]/", "", $string);
			return $string;
		}
	}
	/**
	 * cleanSanitize()
	 *
	 * @param mixed $string
	 * @param bool $trim
	 * @param string $end_char
	 * @return mixed|string
	 */
	if (! function_exists('cleanSanitize'))
	{
		function cleanSanitize($string, $trim = false, $end_char = '…')
		{
			$string = cleanOut($string);
			$string = filter_var($string, FILTER_SANITIZE_STRING);
			$string = trim($string);
			$string = stripslashes($string);
			$string = strip_tags($string);
			$string = str_replace(array(
				'‘',
				'’',
				'“',
				'”'), array(
				"'",
				"'",
				'"',
				'"'), $string);
			if ($trim) {
				if (strlen($string) < $trim)
				{
					return $string;
				}
				$string = preg_replace("/\s+/", ' ', str_replace(array(
					"\r\n",
					"\r",
					"\n"), ' ', $string));
				if (strlen($string) <= $trim)
				{
					return $string;
				}
				$out = "";
				foreach (explode(' ', trim($string)) as $val)
				{
					$out .= $val . ' ';
					if (strlen($out) >= $trim)
					{
						$out = trim($out);
						return (strlen($out) == strlen($string)) ? $out : $out . $end_char;
					}
				}
			}
			return $string;
		}
	}
	/**
	 * Функция обрезает текст до заданной величины
	 *
	 * @param mixed  $string
	 * @param int    $length        Длинна
	 * @param string $etc           Окончание
	 * @param bool   $break_words   Дробить слова на символы
	 * @param bool   $middle        Вырезает середину, оставляет начало + разделитель + конец
	 * @return mixed|string
	 */
	if (! function_exists('trancate'))
	{
		function truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false)
		{
			if ($length == 0)
				return '';
			if (mb_strlen($string) > $length)
			{
				$length -= min($length, mb_strlen($etc));
				if (! $break_words && ! $middle)
				{
					$string = preg_replace('/\s+?(\S+)?$/', '', mb_substr($string, 0, $length + 1));
				}
				if (! $middle)
				{
					return mb_substr($string, 0, $length) . $etc;
				}
				else
					{
						return mb_substr($string, 0, $length / 2) . $etc . mb_substr($string, - $length / 2);
					}
			}
			else
				{
					return $string;
				}
		}
	}
	/**
	 * Функция обрезает текст до заданной величины, не бьет слова
	 *
	 * @param   mixed   $str
	 * @param   int     $n           Длинна
	 * @param   mixed   $end_char    Окончание
	 * @return  mixed|string
	 */
	if (! function_exists('truncate_text'))
	{
		function truncate_text($str, $n = 100, $end_char = '…')
		{
			if (strlen($str) < $n)
			{
				return $str;
			}
			$str = preg_replace("/\s+/", ' ', str_replace(array(
				"\r\n",
				"\r",
				"\n"), ' ', $str));
			if (strlen($str) <= $n)
			{
				return $str;
			}
			$out = "";
			foreach (explode(' ', trim($str)) as $val)
			{
				$out .= $val . ' ';
				if (strlen($out) >= $n)
				{
					$out = trim($out);
					return (strlen($out) == strlen($str))
						? $out
						: $out . $end_char;
				}
			}
			return $str;
		}
	}
	/**
	 * Swap named HTML entities with numeric entities.
	 *
	 * @see http://www.lazycat.org/software/html_entity_decode_full.phps
	 *
	 * @param      $matches
	 * @param bool $destroy
	 *
	 * @return mixed|string
	 */
	function convert_entity($matches, $destroy = true)
	{
		$table = array(
			'Aacute'   => 'Á',  'aacute'   => 'á',  'Acirc'	=> 'Â',  'acirc'	=> 'â',  'acute'	=> '´',
			'AElig'	=> 'Æ',  'aelig'	=> 'æ',  'Agrave'   => 'À',  'agrave'   => 'à',  'alefsym'  => 'ℵ',
			'Alpha'	=> 'Α',  'alpha'	=> 'α',  'amp'	  => '&',   'and'	  => '∧', 'ang'	  => '∠',
			'Aring'	=> 'Å',  'aring'	=> 'å',  'asymp'	=> '≈', 'Atilde'   => 'Ã',  'atilde'   => 'ã',
			'Auml'	 => 'Ä',  'auml'	 => 'ä',  'bdquo'	=> '„', 'Beta'	 => 'Β',  'beta'	 => 'β',
			'brvbar'   => '¦',  'bull'	 => '•', 'cap'	  => '∩', 'Ccedil'   => 'Ç',  'ccedil'   => 'ç',
			'cedil'	=> '¸',  'cent'	 => '¢',  'Chi'	  => 'Χ',  'chi'	  => 'χ',  'circ'	 => 'ˆ',
			'clubs'	=> '♣', 'cong'	 => '≅', 'copy'	 => '©',  'crarr'	=> '↵', 'cup'	  => '∪',
			'curren'   => '¤',  'dagger'   => '†', 'Dagger'   => '‡', 'darr'	 => '↓', 'dArr'	 => '⇓',
			'deg'	  => '°',  'Delta'	=> 'Δ',  'delta'	=> 'δ',  'diams'	=> '♦', 'divide'   => '÷',
			'Eacute'   => 'É',  'eacute'   => 'é',  'Ecirc'	=> 'Ê',  'ecirc'	=> 'ê',  'Egrave'   => 'È',
			'egrave'   => 'è',  'empty'	=> '∅', 'emsp'	 => ' ', 'ensp'	 => ' ', 'Epsilon'  => 'Ε',
			'epsilon'  => 'ε',  'equiv'	=> '≡', 'Eta'	  => 'Η',  'eta'	  => 'η',  'ETH'	  => 'Ð',
			'eth'	  => 'ð',  'Euml'	 => 'Ë',  'euml'	 => 'ë',  'euro'	 => '€', 'exist'	=> '∃',
			'fnof'	 => 'ƒ',  'forall'   => '∀', 'frac12'   => '½',  'frac14'   => '¼',  'frac34'   => '¾',
			'frasl'	=> '⁄', 'Gamma'	=> 'Γ',  'gamma'	=> 'γ',  'ge'	   => '≥', 'gt'	   => '>',
			'harr'	 => '↔', 'hArr'	 => '⇔', 'hearts'   => '♥', 'hellip'   => '…', 'Iacute'   => 'Í',
			'iacute'   => 'í',  'Icirc'	=> 'Î',  'icirc'	=> 'î',  'iexcl'	=> '¡',  'Igrave'   => 'Ì',
			'igrave'   => 'ì',  'image'	=> 'ℑ', 'infin'	=> '∞', 'int'	  => '∫', 'Iota'	 => 'Ι',
			'iota'	 => 'ι',  'iquest'   => '¿',  'isin'	 => '∈', 'Iuml'	 => 'Ï',  'iuml'	 => 'ï',
			'Kappa'	=> 'Κ',  'kappa'	=> 'κ',  'Lambda'   => 'Λ',  'lambda'   => 'λ',  'lang'	 => '〈',
			'laquo'	=> '«',  'larr'	 => '←', 'lArr'	 => '⇐', 'lceil'	=> '⌈', 'ldquo'	=> '“',
			'le'	   => '≤', 'lfloor'   => '⌊', 'lowast'   => '∗', 'loz'	  => '◊', 'lrm'	  => '',
			'lsaquo'   => '‹', 'lsquo'	=> '‘', 'lt'	   => '<',   'macr'	 => '¯',  'mdash'	=> '—',
			'micro'	=> 'µ',  'middot'   => '·',  'minus'	=> '−', 'Mu'	   => 'Μ',  'mu'	   => 'μ',
			'nabla'	=> '∇', 'nbsp'	 => ' ',  'ndash'	=> '–', 'ne'	   => '≠', 'ni'	   => '∋',
			'not'	  => '¬',  'notin'	=> '∉', 'nsub'	 => '⊄', 'Ntilde'   => 'Ñ',  'ntilde'   => 'ñ',
			'Nu'	   => 'Ν',  'nu'	   => 'ν',  'Oacute'   => 'Ó',  'oacute'   => 'ó',  'Ocirc'	=> 'Ô',
			'ocirc'	=> 'ô',  'OElig'	=> 'Œ',  'oelig'	=> 'œ',  'Ograve'   => 'Ò',  'ograve'   => 'ò',
			'oline'	=> '‾', 'Omega'	=> 'Ω',  'omega'	=> 'ω',  'Omicron'  => 'Ο',  'omicron'  => 'ο',
			'oplus'	=> '⊕', 'or'	   => '∨', 'ordf'	 => 'ª',  'ordm'	 => 'º',  'Oslash'   => 'Ø',
			'oslash'   => 'ø',  'Otilde'   => 'Õ',  'otilde'   => 'õ',  'otimes'   => '⊗', 'Ouml'	 => 'Ö',
			'ouml'	 => 'ö',  'para'	 => '¶',  'part'	 => '∂', 'permil'   => '‰', 'perp'	 => '⊥',
			'Phi'	  => 'Φ',  'phi'	  => 'φ',  'Pi'	   => 'Π',  'pi'	   => 'π',  'piv'	  => 'ϖ',
			'plusmn'   => '±',  'pound'	=> '£',  'prime'	=> '′', 'Prime'	=> '″', 'prod'	 => '∏',
			'prop'	 => '∝', 'Psi'	  => 'Ψ',  'psi'	  => 'ψ',  'quot'	 => '"',   'radic'	=> '√',
			'rang'	 => '〉', 'raquo'	=> '»',  'rarr'	 => '→', 'rArr'	 => '⇒', 'rceil'	=> '⌉',
			'rdquo'	=> '”', 'real'	 => 'ℜ', 'reg'	  => '®',  'rfloor'   => '⌋', 'Rho'	  => 'Ρ',
			'rho'	  => 'ρ',  'rlm'	  => '', 'rsaquo'   => '›', 'rsquo'	=> '’', 'sbquo'	=> '‚',
			'Scaron'   => 'Š',  'scaron'   => 'š',  'sdot'	 => '⋅', 'sect'	 => '§',  'shy'	  => '',
			'Sigma'	=> 'Σ',  'sigma'	=> 'σ',  'sigmaf'   => 'ς',  'sim'	  => '∼', 'spades'   => '♠',
			'sub'	  => '⊂', 'sube'	 => '⊆', 'sum'	  => '∑', 'sup'	  => '⊃', 'sup1'	 => '¹',
			'sup2'	 => '²',  'sup3'	 => '³',  'supe'	 => '⊇', 'szlig'	=> 'ß',  'Tau'	  => 'Τ',
			'tau'	  => 'τ',  'there4'   => '∴', 'Theta'	=> 'Θ',  'theta'	=> 'θ',  'thetasym' => 'ϑ',
			'thinsp'   => ' ', 'THORN'	=> 'Þ',  'thorn'	=> 'þ',  'tilde'	=> '˜',  'times'	=> '×',
			'trade'	=> '™', 'Uacute'   => 'Ú',  'uacute'   => 'ú',  'uarr'	 => '↑', 'uArr'	 => '⇑',
			'Ucirc'	=> 'Û',  'ucirc'	=> 'û',  'Ugrave'   => 'Ù',  'ugrave'   => 'ù',  'uml'	  => '¨',
			'upsih'	=> 'ϒ',  'Upsilon'  => 'Υ',  'upsilon'  => 'υ',  'Uuml'	 => 'Ü',  'uuml'	 => 'ü',
			'weierp'   => '℘', 'Xi'	   => 'Ξ',  'xi'	   => 'ξ',  'Yacute'   => 'Ý',  'yacute'   => 'ý',
			'yen'	  => '¥',  'Yuml'	 => 'Ÿ',  'yuml'	 => 'ÿ',  'Zeta'	 => 'Ζ',  'zeta'	 => 'ζ',
			'zwj'	  => '', 'zwnj'	 => ''
		);
		if (isset($table[$matches[1]]))
			return $table[$matches[1]];
		else
			return $destroy
				? ''
				: $matches[0];
	}
	/**
	 * stripTags()
	 *
	 * @param mixed $start
	 * @param mixed $end
	 * @param mixed $string
	 * @return string
	 */
	if (! function_exists('stripTags'))
	{
		function stripTags($start, $end, $string)
		{
			$string = stristr($string, $start);
			$doend = stristr($string, $end);
			return substr($string, strlen($start), -strlen($doend));
		}
	}
	/**
	 * stripExt()
	 *
	 * @param mixed $filename
	 * @return string
	 */
	if (! function_exists('stripExt'))
	{
		function stripExt($filename)
		{
			if (strpos($filename, ".") === false)
				return ucwords($filename);
			else
				return substr(ucwords($filename), 0, strrpos($filename, "."));
		}
	}
	/**
	 * Очиста текста
	 *
	 * @param mixed $text
	 * @return string
	 */
	if (! function_exists('cleanOut'))
	{
		function cleanOut($text)
		{
			$text = strtr($text, array(
				'\r\n' => "",
				'\r' => "",
				'\n' => ""));
			$text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
			$text = str_replace('
', '
', $text);
			return stripslashes($text);
		}
	}
	/**
	 * Сравнение двух чисел
	 *
	 * @param mixed $float1
	 * @param mixed $float2
	 * @param string $operator
	 * @return bool
	 */
	if (! function_exists('compareFloatNumbers'))
	{
		function compareFloatNumbers($float1, $float2, $operator='=')
		{
			// Check numbers to 5 digits of precision
			$epsilon = 0.00001;
			$float1 = (float)$float1;
			$float2 = (float)$float2;
			switch ($operator)
			{
				// equal
				case "=":
				case "eq":
					if (abs($float1 - $float2) < $epsilon) {
						return true;
					}
					break;
				// less than
				case "<":
				case "lt":
					if (abs($float1 - $float2) < $epsilon) {
						return false;
					} else {
						if ($float1 < $float2) {
							return true;
						}
					}
					break;
				// less than or equal
				case "<=":
				case "lte":
					if (compareFloatNumbers($float1, $float2, '<') || compareFloatNumbers($float1, $float2, '=')) {
						return true;
					}
					break;
				// greater than
				case ">":
				case "gt":
					if (abs($float1 - $float2) < $epsilon) {
						return false;
					} else {
						if ($float1 > $float2) {
							return true;
						}
					}
					break;
				// greater than or equal
				case ">=":
				case "gte":
					if (compareFloatNumbers($float1, $float2, '>') || compareFloatNumbers($float1, $float2, '=')) {
						return true;
					}
					break;
				case "<>":
				case "!=":
				case "ne":
					if (abs($float1 - $float2) > $epsilon) {
						return true;
					}
					break;
				default:
					die("Unknown operator '".$operator."' in compareFloatNumbers()");
			}
			return false;
		}
	}
	/**
	 * Поиск значения по массиву
	 *
	 * @param $array
	 * @param $key
	 * @param bool $value
	 * @return bool
	 */
	if (!function_exists('searchforValue'))
	{
		function searchforValue($array, $key, $value)
		{
			if($array)
			{
				foreach ($array as $val)
				{
					if ($val->$key == $value)
						return true;
				}
			}
			return false;
		}
	}
	/**
	 * Поиск в массиве
	 *
	 * @param mixed $array
	 * @param mixed $val1
	 * @param mixed $val2
	 * @return array|int
	 */
	if (! function_exists('findInArray'))
	{
		function findInArray($array, $val1, $val2)
		{
			if ($array)
			{
				$result = array();
				foreach ($array as $val)
				{
					if ($val->$val1 == $val2)
						$result[] = $val;
				}
				return ($result)
					? $result
					: 0;
			}
			return 0;
		}
	}
	/**
	 * Скачать файл
	 *
	 * @param $fileLocation
	 * @param $fileName
	 * @param int $maxSpeed
	 * @return bool
	 */
	if (! function_exists('downloadFile'))
	{
		function downloadFile($fileLocation, $fileName, $maxSpeed = 5120)
		{
			if (connection_status() != 0)
				return (false);
			$extension = strtolower(substr($fileName, strrpos($fileName, '.') + 1));
			/* List of File Types */
			$fileTypes['swf'] = 'application/x-shockwave-flash';
			$fileTypes['pdf'] = 'application/pdf';
			$fileTypes['exe'] = 'application/octet-stream';
			$fileTypes['zip'] = 'application/zip';
			$fileTypes['doc'] = 'application/msword';
			$fileTypes['xls'] = 'application/vnd.ms-excel';
			$fileTypes['ppt'] = 'application/vnd.ms-powerpoint';
			$fileTypes['gif'] = 'image/gif';
			$fileTypes['png'] = 'image/png';
			$fileTypes['jpeg'] = 'image/jpg';
			$fileTypes['jpg'] = 'image/jpg';
			$fileTypes['rar'] = 'application/rar';
			$fileTypes['ra'] = 'audio/x-pn-realaudio';
			$fileTypes['ram'] = 'audio/x-pn-realaudio';
			$fileTypes['ogg'] = 'audio/x-pn-realaudio';
			$fileTypes['wav'] = 'video/x-msvideo';
			$fileTypes['wmv'] = 'video/x-msvideo';
			$fileTypes['avi'] = 'video/x-msvideo';
			$fileTypes['asf'] = 'video/x-msvideo';
			$fileTypes['divx'] = 'video/x-msvideo';
			$fileTypes['mp3'] = 'audio/mpeg';
			$fileTypes['mp4'] = 'audio/mpeg';
			$fileTypes['mpeg'] = 'video/mpeg';
			$fileTypes['mpg'] = 'video/mpeg';
			$fileTypes['mpe'] = 'video/mpeg';
			$fileTypes['mov'] = 'video/quicktime';
			$fileTypes['swf'] = 'video/quicktime';
			$fileTypes['3gp'] = 'video/quicktime';
			$fileTypes['m4a'] = 'video/quicktime';
			$fileTypes['aac'] = 'video/quicktime';
			$fileTypes['m3u'] = 'video/quicktime';
			$contentType = $fileTypes[$extension];
			header("Cache-Control: public");
			header("Content-Transfer-Encoding: binary\n");
			header('Content-Type: $contentType');
			$contentDisposition = 'attachment';
			if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
			{
				$fileName = preg_replace('/\./', '%2e', $fileName, substr_count($fileName, '.') - 1);
				header("Content-Disposition: $contentDisposition;filename=\"$fileName\"");
			}
			else
				{
					header("Content-Disposition: $contentDisposition;filename=\"$fileName\"");
				}
			header("Accept-Ranges: bytes");
			$range = 0;
			$size = filesize($fileLocation);
			if (isset($_SERVER['HTTP_RANGE']))
			{
				list($a, $range) = explode("=", $_SERVER['HTTP_RANGE']);
				str_replace($range, "-", $range);
				$size2 = $size - 1;
				$new_length = $size - $range;
				header("HTTP/1.1 206 Partial Content");
				header("Content-Length: $new_length");
				header("Content-Range: bytes $range$size2/$size");
			}
			else
				{
					$size2 = $size - 1;
					header("Content-Range: bytes 0-$size2/$size");
					header("Content-Length: " . $size);
				}
			if ($size == 0)
				die('Zero byte file! Aborting download');
			$fp = fopen("$fileLocation", "rb");
			fseek($fp, $range);
			while (! feof($fp) and (connection_status() == 0))
			{
				set_time_limit(0);
				print (fread($fp, 1024 * $maxSpeed));
				flush();
				ob_flush();
				sleep(1);
			}
			fclose($fp);
			exit;
			//return ((connection_status() == 0) and !connection_aborted());
		}
	}
	/**
	 * Конвертируем hex color в decimal color
	 * @param string $hexcolor Значение цвета в HEX. Example: #A9B7D3
	 * @return array|bool
	 */
	if (! function_exists('color_h2d'))
	{
		function color_h2d($hexcolor)
		{
			if(mb_strlen($hexcolor) != 7 || mb_strpos($hexcolor, "#") === false)
				return false;
			return array(	"r" => hexdec(mb_substr($hexcolor, 1, 2)),
							"g" => hexdec(mb_substr($hexcolor, 3, 2)),
							"b" => hexdec(mb_substr($hexcolor, 5, 2)));
		}
	}
?>