private void ProcessPage(HtmlNode node, int level, ProcessPass pass, CardDetails cardDetails, AttributeCardType attributeType)
        {
            if (VisitedNodes.Contains(node))
                return;
            VisitedNodes.Add(node);
            switch (pass)
            {
                case ProcessPass.Details:
                    if (NodeHasCardAttributeOfValue(node,attributeType))
                    {
                        var resultNodes = new List<HtmlNode>();
                        HtmlNodeHelpers.FindChildNodesInOrderBelowLevel(node.ChildNodes.First(), 0, new List<HtmlNode>(),
                                                                        resultNodes);
                        CardDetailEntry entry = ExtractCardFieldFromNodeListHelper.Extract(resultNodes);
                        cardDetails.AddEntry(entry);
                    }
                    break;
                case ProcessPass.Image:
                    if (NodeHasAssetAttributeOfInterest(node,attributeType))
                    {
                        //((CardDetailEntryString)cardDetails.GetEntry(CardFieldName.CardName)).Value
                        CardDetailEntry entry = ExtractImagePathFromHtmlHelper.ExtractImagePath(node.OuterHtml);
                        cardDetails.AddEntry(entry);
                    }
                    break;
            }

            foreach (HtmlNode child in node.ChildNodes)
            {
                ProcessPage(child, level + 1, pass, cardDetails,attributeType);
            }

            if (node.NextSibling != null)
            {
                ProcessPage(node.NextSibling, level, pass, cardDetails,attributeType);
            }
        }
        public void Handle(HtmlNode node, int level, CardDetails cardDetails, AttributeCardType attributeType)
        {
            VisitedNodes.Clear();

            ProcessPage(node, 0, ProcessPass.Details, cardDetails,attributeType);

            Debug.WriteLine("Processing: " + cardDetails.Expansion.Value + " " + cardDetails.CardName.Value);
            VisitedNodes.Clear();
            ProcessPage(node, 0, ProcessPass.Image, cardDetails,attributeType);

            DownloadAllImages(cardDetails);
        }
 private bool NodeHasCardAttributeOfValue(HtmlNode node,AttributeCardType attrCardType)
 {
     foreach (string str in standardCardAttributes)
     {
         var compareAttribute = cardAttributeStart + cardTypeAttributeMiddle[(int)attrCardType] + str;
         if (node.Attributes.Any(a => a.Value.Contains(compareAttribute)))
         {
             return true;
         }
     }
     return false;
 }