/// <summary>
        /// Method gets count of details
        /// </summary>
        /// <param name="wrapper"></param>
        /// <returns></returns>
        private int _GetDetailsCount(MessageWindowDataWrapper wrapper)
        {
            int result = 0;
            if (null != wrapper.Details)
            {
                foreach (object obj in wrapper.Details)
                    result++;
            }

            return result;
        }
        private void _AddMessage(MessageType type, string timeMark, string message, Link link, IEnumerable<MessageDetail> details)
        {
            // convert to wrapper
            List<MessageDetailDataWrap> detailsWrap = null;
            if (null != details)
            {
                detailsWrap = new List<MessageDetailDataWrap>();

                IEnumerator<MessageDetail> enumerator = details.GetEnumerator();
                while((null != enumerator) && enumerator.MoveNext())
                {
                    MessageDetail detail = enumerator.Current;
                    detailsWrap.Add(new MessageDetailDataWrap(detail.Type, detail.Description));
                }
            }

            // add message
            MessageWindowTextDataWrapper textWrapper = new MessageWindowTextDataWrapper(message, link);
            MessageWindowDataWrapper wrapper = new MessageWindowDataWrapper(type, timeMark, textWrapper, detailsWrap);
            if (0 == _data.Count)
                _data.Add(wrapper);
            else
                _data.Insert(0, wrapper);

            _collectionSource.Source = _data;

            // NOTE: XceedGrid issue - refresh logical children
            if (null != _collectionSource.View)
                _collectionSource.View.Refresh();

            // auto open window
            if (MessageType.Error == type)
            {   // error - open the message window
                _timer.Enabled = false;
                _timer.Stop();
                _isAutoOpened = false;
                _isNeedClose = false;
                if (Visibility.Visible != this.Visibility)
                    App.Current.MainWindow.ToggleMessageWindowState();

                // expand error details
                if (null != details)
                {
                    DataGridContext dgc = xceedGrid.CurrentContext;
                    xceedGrid.ExpandDetails(dgc.Items.GetItemAt(0));
                }
            }

            else if (MessageType.Warning == type)
            {   // warning - pop the message window
                if (Visibility.Visible != this.Visibility)
                {
                    App.Current.MainWindow.ToggleMessageWindowState();
                    _isAutoOpened = true;

                    _timer.Interval = SHOW_POPUP_MESSAGE_TIMER_INTERVAL;
                    _timer.Start();
                    _timer.Enabled = true;
                    _isNeedClose = false;
                }
                else if (_isAutoOpened)
                {   // reinit timer
                    _timer.Enabled = false;
                    _timer.Stop();

                    _timer.Interval = SHOW_POPUP_MESSAGE_TIMER_INTERVAL;
                    _timer.Start();
                    _timer.Enabled = true;
                    _isNeedClose = false;
                }

                // Expand error details.
                if (null != details)
                {
                    DataGridContext dgc = xceedGrid.CurrentContext;
                    xceedGrid.ExpandDetails(dgc.Items.GetItemAt(0));
                }
            }
            // else info don't change state of the message window
        }