private void GetSpecialButton(XmlNode node, ref SpecialLinkButton specialLinkButton)
		{
			foreach (XmlAttribute attribute in node.Attributes)
			{
				switch (attribute.Name)
				{
					case "Name":
						specialLinkButton.Name = attribute.Value;
						break;
					case "Type":
						specialLinkButton.Type = attribute.Value.ToUpper();
						break;
					case "Tooltip":
						specialLinkButton.Tooltip = attribute.Value;
						break;
					case "Image":
						if (string.IsNullOrEmpty(attribute.Value))
							specialLinkButton.Logo = null;
						else
							specialLinkButton.Logo = new Bitmap(new MemoryStream(Convert.FromBase64String(attribute.Value)));
						break;
				}
			}
			foreach (var childNode in node.ChildNodes.OfType<XmlNode>())
			{
				switch (childNode.Name)
				{
					case "Path":
						specialLinkButton.Paths.Add(childNode.InnerText);
						break;
				}
			}
		}
		private void LoadOnlineStrategy(StorageFile listsSourceFile)
		{
			SlideHeaders.Clear();
			Websites.Clear();
			Strengths.Clear();
			Categories.Clear();
			ProductSources.Clear();
			if (!listsSourceFile.ExistsLocal()) return;
			var document = new XmlDocument();
			document.Load(listsSourceFile.LocalPath);

			var node = document.SelectSingleNode(@"/OnlineStrategy");
			if (node == null) return;
			foreach (XmlNode childeNode in node.ChildNodes)
			{
				switch (childeNode.Name)
				{
					case "Header":
						foreach (XmlAttribute attribute in childeNode.Attributes)
						{
							switch (attribute.Name)
							{
								case "Value":
									if (!string.IsNullOrEmpty(attribute.Value) && !SlideHeaders.Contains(attribute.Value))
										SlideHeaders.Add(attribute.Value);
									break;
							}
						}
						break;
					case "Site":
						foreach (XmlAttribute attribute in childeNode.Attributes)
						{
							switch (attribute.Name)
							{
								case "Value":
									if (!string.IsNullOrEmpty(attribute.Value) && !Websites.Contains(attribute.Value))
										Websites.Add(attribute.Value);
									break;
							}
						}
						break;
					case "Strength":
						foreach (XmlAttribute attribute in childeNode.Attributes)
						{
							switch (attribute.Name)
							{
								case "Value":
									if (!string.IsNullOrEmpty(attribute.Value) && !Strengths.Contains(attribute.Value))
										Strengths.Add(attribute.Value);
									break;
							}
						}
						break;
					case "PricingStrategy":
						foreach (XmlAttribute attribute in childeNode.Attributes)
						{
							switch (attribute.Name)
							{
								case "Value":
									if (!string.IsNullOrEmpty(attribute.Value) && !PricingStrategies.Contains(attribute.Value))
										PricingStrategies.Add(attribute.Value);
									break;
							}
						}
						break;
					case "PositionColumn":
						foreach (XmlAttribute attribute in childeNode.Attributes)
						{
							switch (attribute.Name)
							{
								case "Value":
									if (!string.IsNullOrEmpty(attribute.Value) && !ColumnPositions.Contains(attribute.Value))
										ColumnPositions.Add(attribute.Value);
									break;
							}
						}
						break;
					case "DefaultFormula":
						switch (childeNode.InnerText.ToLower().Trim())
						{
							case "cpm":
								DefaultFormula = FormulaType.CPM;
								break;
							case "investment":
								DefaultFormula = FormulaType.Investment;
								break;
							case "impressions":
								DefaultFormula = FormulaType.Impressions;
								break;
						}
						break;
					case "LockedMode":
						{
							bool temp;
							if (Boolean.TryParse(childeNode.InnerText, out temp))
								LockedMode = temp;
						}
						break;
					case "SpecialLinksEnable":
						{
							bool temp;
							if (Boolean.TryParse(childeNode.InnerText, out temp))
								SpecialLinksEnable = temp;
						}
						break;
					case "SpecialButtonsGroupName":
						SpecialLinksGroupName = childeNode.InnerText;
						break;
					case "SpecialButtonsGroupLogo":
						if (string.IsNullOrEmpty(childeNode.InnerText))
							SpecialLinksGroupLogo = null;
						else
							SpecialLinksGroupLogo = new Bitmap(new MemoryStream(Convert.FromBase64String(childeNode.InnerText)));
						break;
					case "Browser":
						SpecialLinkBrowsers.Add(childeNode.InnerText);
						break;
					case "SpecialButton":
						var specialLinkButton = new SpecialLinkButton();
						GetSpecialButton(childeNode, ref specialLinkButton);
						if (!String.IsNullOrEmpty(specialLinkButton.Name) && !String.IsNullOrEmpty(specialLinkButton.Type) && specialLinkButton.Paths.Any())
							SpecialLinkButtons.Add(specialLinkButton);
						break;
					case "Targeting":
						{
							var productInfo = new ProductInfo { Type = ProductInfoType.Targeting };
							productInfo.Deserialize(childeNode);
							TargetingRecods.Add(productInfo);
						}
						break;
					case "RichMedia":
						{
							var productInfo = new ProductInfo { Type = ProductInfoType.RichMedia };
							productInfo.Deserialize(childeNode);
							RichMediaRecods.Add(productInfo);
						}
						break;
					case "Category":
						var category = new Category();
						GetCategories(childeNode, ref category);
						if (!string.IsNullOrEmpty(category.Name))
							Categories.Add(category);
						break;
					case "Product":
						var productSource = new ProductSource();
						GetProductProperties(childeNode, ref productSource);
						if (!string.IsNullOrEmpty(productSource.Name))
							ProductSources.Add(productSource);
						break;
					case "Status":
						foreach (XmlAttribute attribute in childeNode.Attributes)
							switch (attribute.Name)
							{
								case "Value":
									if (!Statuses.Contains(attribute.Value))
										Statuses.Add(attribute.Value);
									break;
							}
						break;
					case "DefaultHomeViewSettings":
						DefaultHomeViewSettings.Deserialize(childeNode);
						break;
					case "DefaultDigitalProductSettings":
						DefaultDigitalProductSettings.Deserialize(childeNode);
						break;
					case "DefaultDigitalProductPackageSettings":
						DefaultDigitalProductPackageSettings.Deserialize(childeNode);
						break;
					case "DefaultDigitalStandalonePackageSettings":
						DefaultDigitalStandalonePackageSettings.Deserialize(childeNode);
						break;
					case "DigitalControlsConfiguration":
						DefaultControlsConfiguration =
							JsonConvert.DeserializeObject<DigitalControlsConfiguration>(Encoding.Unicode.GetString(Convert.FromBase64String(childeNode.InnerText)), new JsonImageConverter());
						break;
				}
			}
		}