public static function stripos($s, $needle, $offset = null)
	{
		if (! ReflectionTypeHint::isValid()) return false;
		if (is_null($s)) return $s;

		if ($offset === null || $offset < 0) $offset = 0;
		if (function_exists('mb_stripos')) return mb_stripos($s, $needle, $offset, 'utf-8');

		#optimization block (speed improve)
		#{{{
		$ascii_int = intval(self::is_ascii($s)) + intval(self::is_ascii($needle));
		if ($ascii_int === 1) return false;
		if ($ascii_int === 2) return stripos($s, $needle, $offset);
		#}}}

		$s = self::convert_case($s, CASE_LOWER, false);
		if ($s === false) return false;
		$needle = self::convert_case($needle, CASE_LOWER, false);
		if ($needle === false) return false;
		return self::strpos($s, $needle, $offset);
	}