/// <summary>
        /// Gets the Id of System Email from Xml data
        /// </summary>
        /// <param name="node">Xml data cursor model</param>
        /// <returns>Id of System Email</returns>
        private static ConstantContactEmail GetEmailFromCampaignResponse(XPathNavigator node)
        {
            int result = 0;
            ConstantContactEmail email = new ConstantContactEmail();

            if (node.HasChildren)
            {
                node.MoveToFirstChild();
                {
                    do
                    {
                        switch (node.Name)
                        {
                        case EmailCampaignXmlNodeEmail:
                            Regex r = new Regex(@"/([a-z]|[A-Z]|-|\d)+$");
                            email.EmailId = Convert.ToInt16(r.Match(node.GetAttribute("id", string.Empty)).Value.Substring(1));
                            break;

                        case EmailCampaignXmlNodeEmailAddress:
                            email.EmailAddress = node.Value;
                            break;
                        }
                    } while (node.MoveToNext());
                }
                node.MoveToParent();
            }
            return(email);
        }
        /// <summary>
        /// Gets the Id of System Email from Xml data
        /// </summary>
        /// <param name="node">Xml data cursor model</param>
        /// <returns>Id of System Email</returns>
        private static ConstantContactEmail GetEmailFromCampaignResponse(XPathNavigator node)
        {
            int result = 0;
            ConstantContactEmail email = new ConstantContactEmail();
            if (node.HasChildren)
            {
                node.MoveToFirstChild();
                {
                    do
                    {
                        switch (node.Name)
                        {
                            case EmailCampaignXmlNodeEmail:
                                Regex r = new Regex(@"/([a-z]|[A-Z]|-|\d)+$");
                                email.EmailId = Convert.ToInt16(r.Match(node.GetAttribute("id", string.Empty)).Value.Substring(1));
                                break;
                            case EmailCampaignXmlNodeEmailAddress:
                                email.EmailAddress = node.Value;
                                break;

                        }
                    } while (node.MoveToNext());
                }
                node.MoveToParent();
            }
            return email;
        }
        /// <summary>
        /// Get EmailCampaign object from specified Xml data
        /// </summary>
        /// <param name="node">Xml data cursor model</param>
        /// <param name="resolver">Xml namespace resolver</param>
        /// <returns>EmailCampaign</returns>
        private static EmailCampaign GetEmailCampaign(XPathNavigator node, IXmlNamespaceResolver resolver)
        {
            EmailCampaign emailCampaign = new EmailCampaign();

            const string xpathSelect = @"at:content/cc:Campaign";

            XPathNodeIterator emailCampaignContentNodes = node.Select(xpathSelect, resolver);

            while (emailCampaignContentNodes.MoveNext())
            {
                XPathNavigator currentNode = emailCampaignContentNodes.Current;

                emailCampaign.ID = GetEmailCampaignId(currentNode);

                if (currentNode.HasChildren)
                {
                    currentNode.MoveToFirstChild();
                    do
                    {
                        switch (currentNode.Name)
                        {
                        case EmailCampaignXmlNodeName:
                            emailCampaign.Name = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeStatus:
                            emailCampaign.State = (CampaignState)Enum.Parse(typeof(CampaignState), currentNode.Value);
                            break;

                        case EmailCampaignXmlNodeDate:
                            emailCampaign.Date = currentNode.ValueAsDateTime;
                            break;

                        case EmailCampaignXmlNodeLastEditDate:
                            emailCampaign.LastEditDate = currentNode.ValueAsDateTime;
                            break;

                        case EmailCampaignXmlNodeNextRunDate:
                            emailCampaign.NextRunDate = currentNode.ValueAsDateTime;
                            break;

                        case EmailCampaignXmlNodeSent:
                            emailCampaign.Sent = currentNode.ValueAsInt;
                            break;

                        case EmailCampaignXmlNodeOpens:
                            emailCampaign.Opens = currentNode.ValueAsInt;
                            break;

                        case EmailCampaignXmlNodeClicks:
                            emailCampaign.Clicks = currentNode.ValueAsInt;
                            break;

                        case EmailCampaignXmlNodeBounces:
                            emailCampaign.Bounces = currentNode.ValueAsInt;
                            break;

                        case EmailCampaignXmlNodeForwards:
                            emailCampaign.Forwards = currentNode.ValueAsInt;
                            break;

                        case EmailCampaignXmlNodeSpamReports:
                            emailCampaign.SpamReports = currentNode.ValueAsInt;
                            break;

                        case EmailCampaignXmlNodeOptOuts:
                            emailCampaign.OptOuts = currentNode.ValueAsInt;
                            break;

                        case EmailCampaignXmlNodeSubject:
                            emailCampaign.Subject = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeFromName:
                            emailCampaign.FromName = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeCampaignType:
                            emailCampaign.CampaignType = (CampaignType)Enum.Parse(typeof(CampaignType), currentNode.Value);
                            break;

                        case EmailCampaignXmlNodeViewAsWebpage:
                            emailCampaign.ViewAsWebpage = currentNode.Value.Equals("YES", StringComparison.CurrentCultureIgnoreCase) ? true : false;
                            break;

                        case EmailCampaignXmlNodeViewAsWebpageLinkText:
                            emailCampaign.ViewAsWebpageLinkText = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeViewAsWebpageText:
                            emailCampaign.ViewAsWebpageText = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodePermissionReminder:
                            emailCampaign.PermissionReminder = currentNode.Value.Equals("YES", StringComparison.CurrentCultureIgnoreCase) ? true : false;
                            break;

                        case EmailCampaignXmlNodePermissionReminderText:
                            emailCampaign.PermissionReminderText = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeGreetingName:
                            emailCampaign.GreetingName = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeGreetingSalutation:
                            emailCampaign.GreetingSalutation = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeGreetingString:
                            emailCampaign.GreetingString = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeOrganizationName:
                            emailCampaign.OrganizationName = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeOrganizationAddress1:
                            emailCampaign.OrganizationAddress1 = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeOrganizationAddress2:
                            emailCampaign.OrganizationAddress2 = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeOrganizationAddress3:
                            emailCampaign.OrganizationAddress3 = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeOrganizationCity:
                            emailCampaign.OrganizationCity = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeOrganizationState:
                            emailCampaign.OrganizationState = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeOrganizationInternationalState:
                            emailCampaign.OrganizationInternationalState = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeOrganizationCountry:
                            emailCampaign.OrganizationCountry = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeOrganizationPostalCode:
                            emailCampaign.OrganizationPostalCode = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeIncludeForwardEmail:
                            emailCampaign.IncludeForwardEmail = currentNode.Value.Equals("YES", StringComparison.CurrentCultureIgnoreCase) ? true : false;
                            break;

                        case EmailCampaignXmlNodeForwardEmailLinkText:
                            emailCampaign.ForwardEmailLinkText = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeIncludeSubscribeLink:
                            emailCampaign.IncludeSubscribeLink = currentNode.Value.Equals("YES", StringComparison.CurrentCultureIgnoreCase) ? true : false;
                            break;

                        case EmailCampaignXmlNodeSubscribeLinkText:
                            emailCampaign.SubscribeLinkText = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeEmailContentFormat:
                            emailCampaign.EmailContentFormat = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeEmailContent:
                            if (emailCampaign.EmailContentFormat.Equals("HTML"))
                            {
                                emailCampaign.Content = currentNode.Value;
                            }
                            else
                            {
                                emailCampaign.XContent = currentNode.Value;
                            }
                            break;

                        case EmailCampaignXmlNodeEmailTextContent:
                            emailCampaign.TextContent = currentNode.Value;
                            break;

                        case EmailCampaignXmlNodeContactLists:
                            emailCampaign.ContactLists = GetContactListFromCampaignResponse(currentNode);
                            break;

                        case EmailCampaignXmlNodeFromEmail:
                            ConstantContactEmail fromEmail = GetEmailFromCampaignResponse(currentNode);
                            emailCampaign.FromEmailID = fromEmail.EmailId;
                            emailCampaign.FromEmail   = fromEmail.EmailAddress;
                            break;

                        case EmailCampaignXmlNodeReplyToEmail:
                            ConstantContactEmail replyToEmail = GetEmailFromCampaignResponse(currentNode);
                            emailCampaign.ReplyToEmailID = replyToEmail.EmailId;
                            emailCampaign.ReplyToEmail   = replyToEmail.EmailAddress;
                            break;

                        case EmailCampaignXmlNodeStyleSheet:
                            emailCampaign.StyleSheet = currentNode.Value;
                            break;
                        }
                    } while (currentNode.MoveToNext());
                }

                break;
            }

            return(emailCampaign);
        }