private void InitializeAvailableExpressions()
        {

            var availableElements = new Func<CompositeElement>[] { 
				()=> { //Browse behavior menu items
                    var group = new CompositeElement { DisplayName = "Browse behavior".Localize() };
					group.AvailableChildrenGetters.AddRange(new Func<ExpressionElement>[] {
						()=> new ConditionStoreSearchedPhrase(this.ExpressionViewModel),
						()=> new ConditionInternetSearchedPhrase(this.ExpressionViewModel),
						() => new ConditionCurrentUrlIs(this.ExpressionViewModel),
						()=> new ConditionStoreIs(this.ExpressionViewModel),
						()=> new ConditionLanguageIs(this.ExpressionViewModel),
						()=> new ConditionCategoryIs(this.ExpressionViewModel, false), //without subcategories
						()=> new ConditionCategoryIs(this.ExpressionViewModel, true) //with subcategories
					});
					return group;
				},
				()=> { //Shopper profile menu items
                    var group = new CompositeElement { DisplayName = "Shopper profile".Localize() };
					group.AvailableChildrenGetters.AddRange(new Func<ExpressionElement>[] {
						()=> new ConditionShopperAge(this.ExpressionViewModel),
						()=> new ConditionGenderIs(this.ExpressionViewModel)});
					return group;
				},
				()=> { //Shopping cart menu items
                    var group = new CompositeElement { DisplayName = "Shopping cart".Localize() };
					group.AvailableChildrenGetters.AddRange(new Func<ExpressionElement>[] {
						()=> new ConditionCartTotalIs(this.ExpressionViewModel)});
					return group;
				},
				()=> { //Shoppers geo location menu items
                    var group = new CompositeElement { DisplayName = "Geo location".Localize() };
					group.AvailableChildrenGetters.AddRange(new Func<ExpressionElement>[] {
						()=> new ConditionGeoCity(this.ExpressionViewModel),
						()=> new ConditionGeoState(this.ExpressionViewModel),
						()=> new ConditionGeoCountry(this.ExpressionViewModel),
						()=> new ConditionGeoContinent(this.ExpressionViewModel),
						()=> new ConditionGeoZipCode(this.ExpressionViewModel),						
						()=> new ConditionGeoTimeZone(this.ExpressionViewModel),
						()=> new ConditionGeoConnectionType(this.ExpressionViewModel),
						()=> new ConditionGeoIpRoutingType(this.ExpressionViewModel),
						()=> new ConditionGeoIspSecondLevel(this.ExpressionViewModel),
						()=> new ConditionGeoIspTopLevel(this.ExpressionViewModel),
					});
					return group;
				},
            };
            ConditionBlock.WithAvailabeChildren(availableElements);
            ConditionBlock.NewChildLabel = "+ add condition".Localize(null, LocalizationScope.DefaultCategory);
        }
		private void InitializeAvailableExpressions()
		{

			var availableElements = new Func<CompositeElement>[] {
				()=> { //Browse behavior menu items
					var group = new CompositeElement { DisplayName = "Browse behavior" };
					group.AvailableChildrenGetters.AddRange(new Func<ExpressionElement>[] {
						//()=> new ConditionStoreSearchedPhrase(this.ExpressionViewModel),
						()=> new ConditionInternetSearchedPhrase(this.ExpressionViewModel),
						() => new ConditionCurrentUrlIs(this.ExpressionViewModel),
						() => new ConditionReferedFromUrl(this.ExpressionViewModel)
						//()=> new ConditionStoreIs(this.ExpressionViewModel),						
					});
					return group;
				},
				()=> { //Shoppers profile menu items
					var group = new CompositeElement { DisplayName = "Shopper profile" };
					group.AvailableChildrenGetters.AddRange(new Func<ExpressionElement>[] {
						()=> new ConditionAge(this.ExpressionViewModel),
						()=> new ConditionGenderIs(this.ExpressionViewModel)
					});
					return group;
				},			
				()=> { //Shoppers geo location menu items
					var group = new CompositeElement { DisplayName = "Geo location" };
					group.AvailableChildrenGetters.AddRange(new Func<ExpressionElement>[] {
						()=> new ConditionGeoCity(this.ExpressionViewModel),
						()=> new ConditionGeoState(this.ExpressionViewModel),
						()=> new ConditionGeoCountry(this.ExpressionViewModel),
						()=> new ConditionGeoContinent(this.ExpressionViewModel),
						()=> new ConditionGeoZipCode(this.ExpressionViewModel),						
						()=> new ConditionGeoTimeZone(this.ExpressionViewModel),
						()=> new ConditionGeoConnectionType(this.ExpressionViewModel),
						()=> new ConditionGeoIpRoutingType(this.ExpressionViewModel),
						()=> new ConditionGeoIspSecondLevel(this.ExpressionViewModel),
						()=> new ConditionGeoIspTopLevel(this.ExpressionViewModel),
					});
					return group;
				},			
				
            };
			ConditionBlock.WithAvailabeChildren(availableElements);
			ConditionBlock.NewChildLabel = "+ add condition";
		}
        private void InitializeAvailableExpressions()
        {
            var availableElements = new Func<CompositeElement>[] {
				//()=> {
				//	var group = new CompositeElement { DisplayName = "Customer conditions" };
				//	group.AvailableChildrenGetters.AddRange(new Func<ExpressionElement>[] {
				//		()=> new ConditionCustomerStatus(this.ExpressionViewModel)
				//	});
				//	return group;
				//},

				()=> {
					var group = new CompositeElement { DisplayName = "Case conditions" };
					group.AvailableChildrenGetters.AddRange(new Func<ExpressionElement>[] {
						()=> new ConditionCaseStatus(this.ExpressionViewModel)
					});
					return group;
				}

				//()=> {
				//	var group = new CompositeElement { DisplayName = "Order conditions" };
				//	group.AvailableChildrenGetters.AddRange(new Func<ExpressionElement>[] {
				//		()=> new ConditionOrderStatus(this.ExpressionViewModel)
				//	});
				//	return group;
				//}
            };

            ConditionBlock.WithAvailabeChildren(availableElements);
            ConditionBlock.NewChildLabel = "+ add condition";

            availableElements = new Func<CompositeElement>[] {
                ()=> new ActionXslInlineAlert(this.ExpressionViewModel),
				()=> new ActionHtmlInlineAlert(this.ExpressionViewModel),
                ()=> new ActionRedirectAlert(this.ExpressionViewModel)	
            };

            ActionBlock.WithAvailabeChildren(availableElements);
            ActionBlock.NewChildLabel = "+ add effect";
        }
        private void InitializeAvailableExpressions()
        {
            var availableElements = new Func<CompositeElement>[] { 
				()=> { //Items conditions menu items
					var group = new CompositeElement { DisplayName = "Item conditions".Localize() };
					group.AvailableChildrenGetters.AddRange(new Func<ExpressionElement>[] {
						()=> new ConditionEntryIs(this.ExpressionViewModel),
						()=> new ConditionItemTypeIs(this.ExpressionViewModel),
						()=> new ConditionItemPropertyIs(this.ExpressionViewModel),
					});
					return group;
				},
				()=> { //Category conditions menu items
					var group = new CompositeElement { DisplayName = "Category conditions".Localize() };
					group.AvailableChildrenGetters.AddRange(new Func<ExpressionElement>[] {
						()=> new ConditionCategoryIs(this.ExpressionViewModel),
					});
					return group;
				},
            };
            ConditionBlock.WithAvailabeChildren(availableElements);
            ConditionBlock.NewChildLabel = "+ add condition".Localize(null, LocalizationScope.DefaultCategory);
        }
		private void InitializeAvailableExpressions()
		{
			var availableElements = new Func<CompositeElement>[] {
                ()=> new ConditionIsEveryone(ExpressionViewModel),
                ()=> new ConditionIsFirstTimeBuyer(ExpressionViewModel),
                ()=> new ConditionIsRegisteredUser(ExpressionViewModel)
			  };
			ConditionCutomerSegmentBlock.WithAvailabeChildren(availableElements);
			ConditionCutomerSegmentBlock.NewChildLabel = "+ add usergroup".Localize(null, LocalizationScope.DefaultCategory);
			ConditionCutomerSegmentBlock.IsChildrenRequired = true;
			ConditionCutomerSegmentBlock.ErrorMessage = "Cart promotion requires at least one eligibility".Localize();

			availableElements = new Func<CompositeElement>[] {
				()=> new ConditionAtNumItemsInCart(ExpressionViewModel),
				()=> new ConditionAtNumItemsInCategoryAreInCart(ExpressionViewModel),
				()=> new ConditionAtNumItemsOfEntryAreInCart(ExpressionViewModel),
				()=> new ConditionCodeContains(ExpressionViewModel),
				()=> new ConditionLineItemTotal(ExpressionViewModel),
				()=> new ConditionCartSubtotalLeast(ExpressionViewModel),
				()=> new ConditionCurrencyIs(ExpressionViewModel)
            };
			ConditionCartBlock.WithAvailabeChildren(availableElements);
			ConditionCartBlock.NewChildLabel = "+ add condition".Localize(null, LocalizationScope.DefaultCategory);

			availableElements = new Func<CompositeElement>[] {
				()=> { //Cart item discounts menu items
					var group = new CompositeElement { DisplayName = "Cart item discount".Localize() };
					group.AvailableChildrenGetters.AddRange(new Func<ExpressionElement>[] {
						()=> new ActionCartItemGetOfRelForNum(ExpressionViewModel),
						()=> new ActionCartItemGetOfAbsForNum(ExpressionViewModel),
						()=> new ActionCartItemGetOfRelForNumInCategory(ExpressionViewModel),
						()=> new ActionCartItemGetOfAbsForNumInCategory(ExpressionViewModel),
						()=> new ActionCartItemGetOfRelForNumInEntry(ExpressionViewModel),
						()=> new ActionCartItemGetOfAbsForNumInEntry(ExpressionViewModel),
						()=> new ActionCartItemGetFreeNumItemOfSku(ExpressionViewModel)});
					return group;
				},
				()=> { //Cart subtotal discounts menu items
					var group = new CompositeElement { DisplayName = "Cart subtotal discount".Localize() };
					group.AvailableChildrenGetters.AddRange(new Func<ExpressionElement>[] {
						()=> new ActionCartGetOfRelSubtotal(ExpressionViewModel),
						()=> new ActionCartGetOfAbsSubtotal(ExpressionViewModel)});
					return group;
				},			
				()=> { //Shipping discounts menu items
					var group = new CompositeElement { DisplayName = "Shipping discount".Localize() };
					group.AvailableChildrenGetters.AddRange(new Func<ExpressionElement>[] {
						()=> new ActionShippingGetOfRelShippingMethod(ExpressionViewModel),
						()=> new ActionShippingGetOfAbsShippingMethod(ExpressionViewModel)});
					return group;
				} 
			};
			ActionBlock.WithAvailabeChildren(availableElements);
			ActionBlock.NewChildLabel = "+ add effect".Localize(null, LocalizationScope.DefaultCategory);
			ActionBlock.IsChildrenRequired = true;
			ActionBlock.ErrorMessage = "Promotion requires at least one reward".Localize();
		}