private List<CodeGeneration> GetAllSelectCode(FiddlerSessionHolder sess, HtmlDocument htmlDocument)
        {
            var result = new List<CodeGeneration>();
            foreach(var selectNode in htmlDocument.DocumentNode.SelectNodes(".//select"))
            {
                var selectNodeName = selectNode.Attributes.Contains("name") ? selectNode.Attributes["name"].Value : "!!!";
                var select = new CodeGeneration("Select");
                select.Header = "Options for "+selectNodeName;
                var paramz = new StringBuilder();

                var options = selectNode.SelectNodes(".//option");
                foreach (var optioNode in options)
                {
                    paramz.AppendLine(String.Format("\t{{ \"{0}\",\"{1}\" }}, //{2} {3}", selectNodeName,
                        optioNode.Attributes.Contains("value") ? optioNode.Attributes["value"].Value : "",
                        optioNode.NextSibling.InnerText,
                        optioNode.Attributes.Contains("selected") ? "<-default" : ""));
                }
                select.Text = paramz.ToString();
                result.Add(select);
            }
            return result;
        }
        protected CodeGeneration GetAllInputCode(FiddlerSessionHolder sess, HtmlDocument htmlDocument)
        {
            var allInput = new CodeGeneration("Request");
            allInput.Header = "Code";

            var inputNodes = htmlDocument.DocumentNode.SelectNodes(".//input");
            if (inputNodes != null)
            {
                var p = inputNodes
                    .Where(k => k.Attributes.FirstOrDefault(n => n.Name.ToLower() == "name") != null)
                    .Select(k =>
                    {
                        var nameAttr = k.Attributes.FirstOrDefault(n => n.Name.ToLower() == "name");
                        var valueAttr = k.Attributes.FirstOrDefault(n => n.Name.ToLower() == "value");
                        var typeAttr = k.Attributes.FirstOrDefault(n => n.Name.ToLower() == "type");
                        return new Tuple<string, string, string>(
                            nameAttr == null ? null : nameAttr.Value,
                            valueAttr == null ? "" : valueAttr.Value,
                            typeAttr == null ? "default" : typeAttr.Value
                            );
                    }).Where(k => k.Item1 != null);

                var paramz = new StringBuilder();
                paramz.AppendLine(String.Format("var allParams = new NameValueCollection"));
                paramz.AppendLine("{");
                foreach (var kvp in p)
                {
                    paramz.AppendLine(String.Format("\t{{ \"{0}\",\"{1}\" }}, //Type: {2}", kvp.Item1, kvp.Item2, kvp.Item3));
                }
                paramz.AppendLine("});");
                allInput.Text = paramz.ToString();
            }
            return allInput;

        }
        private List<CodeGeneration> GetFormsCode(FiddlerSessionHolder sess, HtmlDocument htmlDocument)
        {
            var result = new List<CodeGeneration>();
            HtmlNodeCollection nodes = html.DocumentNode.SelectNodes(".//form");
            if (nodes == null) return result;

            foreach (var formNode in nodes)
            {
                var method = "GET";
                var methodAttr = formNode.Attributes.FirstOrDefault(x => x.Name.ToLower() == "method");
                if (methodAttr != null) method = methodAttr.Value.ToUpper();

                var action = sess.FiddlerSession.fullUrl;
                var actionAttr = formNode.Attributes.FirstOrDefault(x => x.Name.ToLower() == "action");
                if (actionAttr != null) action = sess.BrowsingResponse.FixPathToAbsolute(actionAttr.Value);

                var inputNodes = formNode.SelectNodes(".//input");
                if(inputNodes==null) continue;

                var p = inputNodes
                    .Where(k => k.Attributes.FirstOrDefault(n => n.Name.ToLower() == "name") != null)
                    .Select(k =>
                                {
                                    var nameAttr = k.Attributes.FirstOrDefault(n => n.Name.ToLower() == "name");
                                    var valueAttr = k.Attributes.FirstOrDefault(n => n.Name.ToLower() == "value");
                                    return new Tuple<string, string, string>(
                                        nameAttr == null ? null : nameAttr.Value,
                                        valueAttr == null ? "" : valueAttr.Value,
                                        k.XPath);
                                }).Where(k => k.Item1 != null);

                if (method == "GET")
                {
                    result.Add(new CodeGeneration("Form: " + formNode.XPath)
                                   {
                                       Text = StrMakeNavigateGet(action, p),
                                       Header = action + " (" + method + ")"
                                   });
                }
                else
                {
                    result.Add(new CodeGeneration("Form: " + formNode.XPath)
                    {
                        Text = StrMakeNavigatePost(action, p),
                        Header = action + " (" + method + ")"
                    });                    
                }
            }
            return result;
        }
        private CodeGeneration GetRequestCode(FiddlerSessionHolder sess, HtmlDocument htmlDocument)
        {
            var requestCode = new CodeGeneration("Request");
            var requestType = sess.FiddlerSession.oRequest.headers.HTTPMethod;
            requestCode.Header = sess.FiddlerSession.url + " (" + requestType + ")";

            switch (requestType)
            {
                case "GET":
                    requestCode.Text = StrNavigateGet(sess.FiddlerSession.fullUrl);
                    break;
                case "POST":
                    requestCode.Text = "todo " + GetIndex();
                    break;
                default:
                    requestCode.Text = "Invalid requestType " + requestType;
                    break;
            }
            return requestCode;
        }
 public void AddSessionStep(FiddlerSessionHolder session)
 {
     ViewModel.Output.AddSession(session);
 }