private NewThreadRequest GenerateNewThreadRequest(WebGetDocumentArgs document)
        {
            if (document == null || document.Document == null) return null;

            NewThreadRequest request = new NewThreadRequest();
            HtmlNode parent = document.Document.DocumentNode;

            if (this._requestThread.CancellationPending)
                return null;

            this.SetRequestFormInfo(request, document.Document);

            var icons = parent.Descendants("div")
                .Where(node => node.GetAttributeValue("class", "").Equals("posticon"));

            request.Icons = new List<SAThreadIcon>(30);
            request.Icons.Add(SAThreadIcon.Empty);

            foreach (var icon in icons)
            {
                try
                {
                    if (this._requestThread.CancellationPending)
                        return null;

                    var inputNode = icon.Descendants("input").SingleOrDefault();
                    var imgNode = icon.Descendants("img").SingleOrDefault();

                    string title = imgNode.GetAttributeValue("alt", "");
                    string value = inputNode.GetAttributeValue("value", "");
                    string uri = imgNode.GetAttributeValue("src", "");

                    request.Icons.Add(new SAThreadIcon(title, value, uri));
                }

                catch (Exception ex)
                {
                    Awful.Core.Event.Logger.AddEntry(string.Format("There was an error while parsing post icons. [{0}] {1}",
                        ex.Message, ex.StackTrace));
                }
            }

            request.SelectedIcon = SAThreadIcon.Empty;
            return request;
        }
        private void SetRequestFormInfo(NewThreadRequest data, HtmlDocument doc)
        {
            var formNodes = doc.DocumentNode.Descendants("input").ToArray();

            var formKeyNode = formNodes
                .Where(node => node.GetAttributeValue("name", "").Equals("formkey"))
                .FirstOrDefault();

            var formCookieNode = formNodes
                .Where(node => node.GetAttributeValue("name", "").Equals("form_cookie"))
                .FirstOrDefault();

            try
            {
                data.FormKey = formKeyNode.GetAttributeValue("value", "");
                data.FormCookie = formCookieNode.GetAttributeValue("value", "");
            }
            catch (Exception)
            {
                throw new InvalidOperationException("Could not parse newReply form data.");
            }
        }
        protected override void InitializeForDesignMode()
        {
            var req = new NewThreadRequest();
            req.Forum = new SAForum() { ForumName = "Sample Forum" };
            req.Icons = new SampleThreadIcons();
            req.Title = "Sample Thread Title";
            req.Text = "Sample Thread Text";

            this.Request = req;
            this.Forum = req.Forum;
            this.IsEnabled = false;
            this.IsLoading = true;
        }